commonuisupport/uikon/group/HISTORIC.TXT
author William Roberts <williamr@symbian.org>
Wed, 10 Nov 2010 12:08:34 +0000
branchRCL_3
changeset 76 5c9f0ba5102a
parent 0 2f259fa3e83a
permissions -rw-r--r--
Improve debug tracing of AknGlobalNote::StartL - Bug 2673

Version 0.01.047
================
(Made by DavidW, 1 September 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/037
	C32/022 EALWL/025
        GDI/029 FNTSTORE/022 FBS/028 BITGDI/030
        WSERV/042 CONE/104 FONTS/029
        ETEXT/046 TBOX/069 GRID/068 PDRSTORE/012 PRINT/020
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Last build of Nokie!

This contains the state of the Nokie code prior to converting to

    *) the new directory structure of E32/065

    *) the new application architecture

Sizes (Gcc build):	NOKIE.DLL	263,980 bytes
			EIKSRV.EXE	 12,908
			NOKIE.RSC	  4,115
			CONE.MBM  	  2,868

From MartinB:
-------------
1)  Rearranged aspects of the menu code in preparation for making it
go faster and for improving some of the menu UI

2)  Further improvements to header files of menu code

3)  Menu code once again builds cleanly under Gcc

4)  Moved some drawing utility functions out of menu code into
EikDrawUtils code in EIKDUTIL.*

From Vipul:
-----------
5)  Merged the code from CEikAutoDialog into CEikDialog itself, so
that all dialogs now support "auto" items, not just "Opl dialogs"

6)  Modified existing CEikDialog code accordingly, and started work
on some test code for dialogs with auto items

From SimonC:
------------
7)  Global and rich text editors now always use their own paragraph
and character format layers, rather than sharing those in CEikonEnv;
this avoids problems whereby bolding one global text editor caused
all other editors to be bolded as well

8)  Further fixes to the HandlePointerEventL code in CEikEdwin so
that, for the first time, shift-clicking *and* picture stretching
both work properly

9)  Improvements in the code creating a new folder inside the file
browser; eg the New Folder dialog now has a text label specifying the
(default) location of the new folder

10) If the New Folder button is used to create a folder on a
different drive from the one the File Browser is currently logged to,
the File Browser now switches to that drive on the termination of the
New Folder dialog

11) Workaround to an F32 bug, so that the Open File dialog can be be
used to read z: on the rack

12) Other internal improvements in file brower and directory
listboxes

From Bret:
----------
13) Fixed drawing bug in CEikWorldSelector in which not every pixel
was being drawn in some cases

14) Improvements in the display of world selectors in the case when
the font has been changed, to one different from that used to
calculate the size of the world selector

15) Changed from using the three character ellipsis "..." to the
single character "…" variant (Alt-133)

16) Eliminated an unneeded dependency on EIKENV.H in EIKWSEL.H

17) Other internal improvements to world selector code

From Siamak:
------------
18) Fixed various scrollbar-related and size-related problems in
listboxes (eg listbox min size was incorrectly calculated in the
presence of scrollbars, and the current item for a listbox in a
dialog wasn't always visible when the dialog first appeared)

19) See the "Script1" case in TLBX for a working example of a listbox
in a dialog having a scrollbar

20) Changed listbox default behavior to assume that any scrollbar
size should be included within the stated size of the listbox

21) Started added support for dimming in listboxes

22) Changed CListItemDrawer::DrawActualItem() to be pure virtual,
rather than simply empty

23) Test code TLBX now tests some panics in listbox code, but always
puts up a query dialog first to allow the user/operator to bypass
that test

From Neil:
----------
24) Provided scrollbars with the ability to be dimmed, eg for when
their parent listbox gets dimmed

25) Added an option to each of the scrollbar menus in test code
TScrlB0 to dim that scrollbar

26) If an application connects to the alarm alert server when there
is already a previous client, it is the application that now gets
panicked, rather than the alarm alert server panicking itself

From DavidW:
------------
27) Developed the logic of "auto-dialogs", with a new example in
TDialg0, and by converting the "Set time and date" dialog in LShell
to be an auto-dialog.  The code for this dialog is now just

    void CSimpleAppUi::LaunchTimeAndDateDialog()
	{
	TTime timeAndDate;
	timeAndDate.HomeTime();
	CEikDialog* dialog=new(ELeave) CEikDialog;
	dialog->PrepareLC(R_LSHELL_TIME_AND_DATE_DIALOG);
	dialog->DeclareAutoTimeAndDateEditor(ETimeAndDate,&timeAndDate);
	if (dialog->RunLD())
	    User::SetHomeTime(timeAndDate);
	}

28) The ExecuteLD(TInt aResourceId) function of CEikDialog is now

    EXPORT_C TBool CEikDialog::ExecuteLD(TInt aResourceId)
        {
	PrepareLC(aResourceId);
	return(RunLD());
        }

so you can see that there now a new possibility for applications to
insert code in between the "PrepareLC" and the "RunLD" parts of a
dialog.  Before, all such code had to go in (eg) the
PreLayoutDynInitL function, which meant that a custom subclass of
CEikDialog had to be created.  However, from the above LSHELL code
you can see that the dialog class being used is none other than
CEikDialog itself - there is no need for a custom subclass here

29) The effect of a function call DeclareAutoXxx(TInt,TAny*) is to
add the specified control to the set of "auto" items for the dialog,
ie those whose return values are automatically filled in, just after
the call to OkToExitL() returns; the DeclareXxx function also seeds
the initial value of the control from the initial value pointed to by
the "return value" pointer

30) More DeclareAutoXxx() utility functions will shortly appear in
greater numbers in EIKDLGUT.*

31) You can have as many auto-items for any dialog that you like,
without incurring any additional storage overhead (a slot for a
return value pointer is now stored in CEikCaptionedControl property,
along with a record of the control type, to allow a check at run-time
that the control type is what any subsequent call to DeclareXxx might
assume it is

32) There's a lot of scope for simplifying existing Nokie code by
converting more dialogs to the auto form; this will be tackled in
stages over the next few days

33) Another thing that can be done with auto-item technology is to
build up a dialog entirely in memory, without going near a resource
file.  Eg an example from the latest TDialg0:

    void CSimpleAppUi::CmdAutoDialogL()
	{
	CEikDialog* dialog=new(ELeave) CEikDialog;
	dialog->ConstructAutoDialogLC(EEikDialogFlagWait,
						R_EIK_BUTTONS_CANCEL_OK);
	dialog->SetTitleL(_L("Auto dialog"));
	dialog->AddAutoNumberEditorL(_L("Number editor"),
						101,0,300,&iAutoNumber);
	dialog->AddAutoFloatEditorL(_L("Float editor"),
				102,TReal(0),TReal(300),&iAutoReal);
	dialog->AddAutoTextEditorL(_L("Text editor"),103,&iAutoText);
	dialog->RunLD();
	}

(the 101, 102, 103 are generated ID numbers, which have to be
distinct)

34) More AddAutoXxx() utility functions will shortly appear in
greater numbers in EIKDLGUT.*; apart from this, the essentials of
Eikon support for Opl dialogs are now firmly in place

35) Changed various ConstructL() functions of various controls not to
have their container window as a parameter; this simplifies the
corresponding AddAutoXxx() functions considerably

36) Started splitting up EIKPANIC.* into various self-contained *.PAN
files, thus EIKEDWIN.PAN, EIKMFNE.PAN, EIKDIALG.PAN and EIKLBX.PAN
all exist, and are now #included within the obvious source modules
instead of EIKPANIC.H

37) Reverted to the "dark gray when pressed" scheme for movers
(retaining the constants for the "white when pressed" scheme in a
commented section at the top of the source module)

38) Fixed the problems which were preventing TCombo1 from running

39) Trailers of invisible controls in dialogs now go invisible,
rather than just gray

40) Rationalized the hotkeys in TDialg0.


Version 0.01.046
================
(Made by DavidW, 30 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/037
	C32/022 EALWL/025
        GDI/029 FNTSTORE/022 FBS/028 BITGDI/030
        WSERV/042 CONE/104 FONTS/029
        ETEXT/046 TBOX/069 GRID/068 PDRSTORE/012 PRINT/020
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Sizes (Gcc build):	NOKIE.DLL	260,352 bytes
			EIKSRV.EXE	 12,904
			NOKIE.RSC	  4,094
			CONE.MBM  	  2,868

(Build 045 was never formally released)

As a side-effect of some of the changes described below, the
following test apps have got broken, and are temporarily withdrawn:
TPDraw and TCombo1.

The code in TRTxtEd that causes a dependency on PRINT.DLL has been
temporarily commented out, to allow (the rest of) it to run under
WINS again.

From MartinB:
-------------
1)  Yet another stage in the improvement of command buttons: the
button face now always scrolls as a whole, instead of its constituent
parts scrolling separately

2)  As a result of the above, the Scroll() functions in CEikImage and
CEikLabel could be withdrawn; the change also means that other types
of "drawing controls" could be incorporated more easily on the button
face in the future

3)  As an experiment, changed the colors used by the Mover control
when pressed to match those used by buttons, ie the background goes
white; on reflection this does not seem to be well liked and so this
is likely to revert to what it used to do

4)  Minor changes to TEikGrip code

5)  Some work on the menu code in preparation for it becoming beta:
applied more consts as appropriate, scoped more of the enums, moved
the definitions of some private implementation classes out of the *.H
files into the relevant source modules, and generally tidied things
up

From SimonC:
------------
6)  Added support in CEikCaptionedControl for any control in a dialog
to have some trailing text ("trailer")

7)  There's a new LTEXT field "trailer" in the DLG_LINE resource
struct that causes a trailer to be created for that line

8)  See the "Floats" dialog in TDialg0 for an example of trailers in
dialogs

9)  Fixed a bug in CEikEdwin in which shift-clicking in a rich-text
editor failed to extend the select region

10) Several changes to the way CEikEdwin gets initialized; made
corresponding changes to FPNE and Edit Combo code

11) Removed all hard-coded text from EIKEDWIN.CPP, using resource
strings as required

12) Added an optional "New folder" button to the file browser dialog,
allowing the user to create a new folder if the desire arises

13) File browser displays ought to be updated automatically whenever
a new folder is created from within them

14) Other internal improvements to various code, such as listboxes
and directory tree listboxes

From Neil:
----------
15) Reviewed and tidied up the scroll bar, scroll frame, and
scrollbar button code

16) Fixed bug in scroll button whereby holding down the pointer until
the thumb reached its extreme and the button dimmed, failed to
"release" the button (ie the background stayed dark) until the mouse
button was released

17) Commented out the functions in the "approximate scrollbars" API
(intended for use with partially formatted edwins) since this doesn't
work at all well (some more bright ideas are required on how to solve
this problem!)

18) Auto repeat settings for scrollbar buttons are now different for
the initial delay and subsequent repeats, in a similar way to
keyboard repeats

19) Similar change to auto-repeat timing for ears in captioned
controls

20) Improved the "access count" mechanism in the Eikon Server
visibility: ComeToForeground() and GoToBackground() now both take a
CEikServAppUi::TForegroundReason parameter to determine who is
calling it; this is to prevent the Eikon Server being inadvertently
stranded in either foreground or background

21) The Eikon Alarm Alert server now panics if a second client tries
to connect to it

22) Fixed problems in the Eikon Server if a key like Ctrl+E was
pressed when an alarm was showing

23) Improved test code TEar1

From Vipul:
-----------
24) Started work on a project currently called "auto dialogs", which
is a new class CEikAutoDialog in a new module EIKAUTOD.*

25) "Auto dialogs" are so-called because the variables they edit are
handled automatically by CEikAutoDialog code, once they are set up in
a suitable initialization struct; there's no need for the application
to supply custom PreLayoutDynInitL() and OkToExitL() functions

26) Auto dialogs are being created to serve the need of Opl dialogs,
but it is hoped that they can ease the way of other applications
programming "straightforward" dialogs; it is also likely that the
code in CEikAutoDialog will migrate into CEikDialog itself

From Julian:
------------
27) Replaced the CEikEdCmp class with CEikGlobalTextEditor, and
renamed the module EIKEDCMP.* to EIKGTED.* (matching the module name
EIKRTED.* which holds CEikRichTextEditor)

28) A "global text editor" responds to keys such as Ctrl+B by bolding
its entire contents

29) Added a "global text editor" dialog to TDialg0

30) With Simon, many internal changes in CEikGlobalTextEditor code

31) Fixed some redraw problems with the gray palette selector

32) Changed the mechanism used in the gray palette selector to show
the "current" color: instead of a black outline, there's now a
pointer arrow

From Siamak:
------------
33) Further improvements to TLBX listbox test code

34) Fixed some bugs in listboxes that came to light while testing

35) On Bill's suggestion, redefined a couple of protected functions
in CEikMultiColumnListBox so that any excess space in the viewrect is
at the bottom of the listbox rather than being spread evenly between
the top and the bottom (as happens for "normal" listboxes)

From Bret:
----------
36) Improved test code TWldSl by adding a toolbar plus some
additional hot-keys

37) Made EIKWSEL.* indepedent of EIKDIALG.H, by overriding the
CCoeControl function SetNeighbor() in CEikWorldSelector.  This stores
the pointer of the previous dialog control in case a link needs to be
made to it in ConstructFromResourceL()

38) As a result of the above, the pair_id field in the world selector
resource struct is removed.  Instead, when a selector wants to pair
up with the previous selector, it sets the new flag
EEikWorldSelSecondSelector

39) In a dialog selector pair scenario, the second selector will
automatically take the opposite type from the first selector (eg
country as opposed to city).  Also the first selector in any pair now
defaults to being a city selector

40) Removed the flag EEikWorldSelDarkBackground; the background will
now always be white, except that it is black when the control is
focused

41) Removed the flag EEikWorldSelFlashingCursor, since the cursor
should always flash

42) Added a "chars_wide" field to the world selector resource struct

43) Many other internal changes in world selector code

From DavidW:
------------
44) A couple of minor changes to CEikProgressInfo code arising out of
a mini-review when its design was added to \design\eon.


Version 0.01.044
================
(Made by DavidW, 28 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/037
	C32/022 EALWL/025
        GDI/029 FNTSTORE/022 FBS/028 BITGDI/030
        WSERV/042 CONE/104 FONTS/029
        ETEXT/046 TBOX/069 GRID/068 PDRSTORE/012 PRINT/020
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Sizes (Gcc build):	NOKIE.DLL	258,220 bytes
			EIKSRV.EXE	 12,904
			NOKIE.RSC	  3,914
			CONE.MBM  	  2,868

Released in synch with CONE 104 and with TBOX 069

(PRINT/020 uses a previous version of TBOX, and for this reason, test
apps that rely on PRINT fail to run under WINS.  In practice, this
only means TRTxtEd.  Somewhat to my surprise, TRTxtEd seems to run
fine under Gcc!)

From Neil:
----------
1)  The Eikon Server now checks on start-up that the machine date and
time are sensible and, if they are less than 1980, sets them to 1997

2)  Test code TEar1 now supports setting an alarm - either 10 seconds
in the past, or 65 seconds in the future, with the test alarm screen
appearing as a result, and beeps at regular intervals.  (On WINS, the
"lights" in the middle of the Protea fascia.BMP flash, but I haven't
noticed anything like that on a real Protea)

3)  The buttons on the alarm control are now active when an alarm is
in progress: you can Snooze, Silence, or Clear an alarm

4)  Internal to the alarm supervisor, changed from using Universal
Time to using Home Time

5)  Other internal changes inside the Eikon Server

6)  Improved TEar1 to have a menu bar publicising all the features of
the app

From Siamak:
------------
7)  Fixed various problems with pointer event handling in standard
and multi-column listboxes

8)  Developed the test code TLBX further

From DavidW:
------------
9)  The functions CEikDialog::MakeLineVisible() and
SetLineDimmedNow() both now work, supporting dynamic
dimming/undimming and hiding/showing of items in dialogs - for
examples, see the Sizes dialog in TPrgi, or the Choices or Floats
dialogs in TDialg0

10) The caption of a dialog line now goes dark gray if the control
for that line has been made either dimmed or invisible; note that not
all controls respect the dimmed state yet, by drawing themselves more
grayly (choice lists do; most others don't)

11) Clicking on a non-focused focusable window-owning-control in a
dialog now correctly gives the focus to that control

12) Fixed a typo in the anti-nesting declarations in EIKMVOBS.H
(picked up by running CCS EMPTY)

13) Further developed the test code TPrgi for CEikProgressControl

14) Made use of the new CCoeControl function SetNeighbor() to pass
each control in a dialog the handle of the *previous* control; this
function is called after the ConstructFromResourceL() for the control

15) Took advantage of the new CCoeControl function
PositionRelativeToScreen() to simplify the positioning of pop-outs in
choice list and gray selector code

16) Did a minimal conversion of edwin code for TBOX 069, so that the
test code at least runs without falling over in a heap (but there's
plenty scope for choosing more carefully which TBOX function to call
in many places)

17) Took advantage of the new TParaBorderArray class to simplify the
code in the Paragraph Borders Preview class.


Version 0.01.043
================
(Made by DavidW, 27 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/037
	C32/022 EALWL/025
        GDI/029 FNTSTORE/022 FBS/028 BITGDI/030
        WSERV/042 CONE/103 FONTS/029
        ETEXT/046 TBOX/068 GRID/068 PDRSTORE/012 PRINT/020
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Sizes (Gcc build):	NOKIE.DLL	255,252 bytes
			EIKSRV.EXE	 12,368
			NOKIE.RSC	  3,914
			SYSTEM.MBM  	  2,868

Released in synch with CONE 103

From MartinB:
-------------
1)  Changed command buttons to the latest plan of their backgrounds
going white when pressed (without there needing to be any changes in
the text color)

2)  New test code TBORDER specifically for the TEikBorder class

3)  Some fixes and internal changes to the TEikBorder class

4)  Modified EIKLBM.H with the effect that EIKLBM.CPP is now empty
and has been removed from the project

5)  Added FixedPointEditorValue() and SetFixedPointEditorValue() to
the dialog utility functions in EIKDLGUT.CPP

From Bret:
----------
6)  World selectors are now implemented, in the new module EIKWSEL.*

7)  World selector controls can be used inside or outside of dialogs,
as demonstrated by the test code TWldSl

8)  World selectors can either be run individually, just to select
cities or countries, or in pairs, to select a city/country
combination

9)  Declaring a single WORLD_SELECTOR in a dialog resource structure
will create a single world selector; the pair_id field should in this
case be left at its default value of 0 or else the control will go
hunting for a partner with the specified ID and will either die or
cause havoc.  If the flags field includes EEikWorldSelCountrySelector
the selector will show countries, otherwise it will show cities

10) Two selectors in a dialog, one showing cities and the other
countries, can be connected so that one updates the other.  This is
done by setting the pair_id in the second control to the dialog line
ID of the first control.  The pair_id for the *first* control should
*not* be set to anything, otherwise it will go looking for the second
selector before that has been created

11) To create a single selector outside a dialog, call the
ConstructL() function; to create a second selector outside a dialog
that links to the first one, call ConstructSelectorPairL() passing a
pointer to the first selector

12) The search extent (whole world, or restricted to one country) can
be toggled by a CTRL+letter combination, for which the default key is
'L' but this can be overridden either in the resource structure, or
by calling SetSearchExtentToggleChar().  In the test code, it has
been set to 'C'

From Julian:
------------
13) Converted CEikGraySelector, the gray selector control, to the new
Eikon design, along with the associated pop-out control,
CEikGrayPalette

14) The gray selector control operates either in 4-gray mode or
16-gray mode, depending on a flag

15) Modified TDialg0 to contain a dialog with two gray selector
controls, one in each of the two modes

From SimonC:
------------
16) Made a number of changes to the hierarchical and directory
listbox classes after a review by Bill and MartinB

17) The largest changes are that CHierarchicalListBoxModel now
inherits from MListBoxModel rather than MTextListBoxModel,
THierListItem has been renamed CHierListItem and now inherits from
CBase, and a number of functions that used to take a TDes& now return
a TFileName instead.  A number of convenience functions have been
removed from the controls, just to make applications work harder

18) Altered the listbox code so that it handles the case of not all
items having text for incremental matching

19) Updated file browser code in line with the above changes, and to
make other internal improvements

From Neil:
----------
20) New module EIKALSUP.* for the "alarm control supervisor",
containing code derived from Brendan's code in CEikAlarmControl in
the old Eikon design

21) Changed the Eikon Server start-up code to create an alarm control
supervisor which in turn creates an alarm control

22) Modified the test code in TEar1 to match the above changes

From DavidB:
------------
23) Added a dialog to LShell to allow the user to set the time and
the date (this dialog also acts as a further test of the combined
date-time editor)

From Vipul:
-----------
24) More improvements to the visuals of multi-page dialogs

From Siamak:
------------
25) Started work on a new listbox test app (still called TLBX) that
aims to exercise listboxes much more fully than before

(this is presently in a intermediate state)

26) Internal change in listbox code to avoid updating scrollbar
thumbs in cases when no scrolling actually took place

From DavidW:
------------
27) On advice from Duncan, changed the code in the CEikonEnv function
NewDefaultCharFormatLayerL() so that subsequent EText calls to sense
the effective character format will have less work to do

28) Changed the toolbar code in TDialg and TMfne to remove any
app-specific code, just leaving it to the latest CCoeControlGroup and
CEikToolBar code to sort things out themselves as good as they could
(though this has exposed some more bugs therein)

29) Made the function EikDrawUtils::DrawTextWithMnemonic() work for
non-zero margins with ECenter alignment; note that if some text has
to respect a left margin iLeftMargin and a right margin iRightMargin,
the "margin" value to pass in the case of center alignment is the
*difference* iLeftMargin-iRightMargin (so, code in CEikLabel had to
change too); in turn this leads to a different interpretation of the
margin value in the center aligned case from in the current BITGDI
code, so a workaround was introduced for that; all in all, the
scrolling behaviour of button faces is now correct in *almost* all
cases (the single exception I know of being the top-left button in
TBut3 in the center aligned case, when the face still fails to scroll
"as a whole")

30) Added a pair of InfoWinL() functions to CEikonEnv, with API very
similar to the QueryWinL() pair of functions, resulting in a stock
dialog with one or two lines of text in it, together with a
"Continue" button (this is different from calling AlertWin() in that
an app can have several QueryWinL or InfoWinL calls in play at any
one time, but only one AlertWin())

31) Sh-Ctrl-Alt-M, at any stage in any application, now brings up a
"Move me!" info dialog, which can be dragged around the screen at
will to test redraws (this complements the complete screen redraw
from Sh-Ctrl-Alt-R; both of these are provided by the CEikDebugKeys
class)

32) Added a TBool-return function ConfirmLossOfAllChangesL() to
CEikonEnv, which layers over QueryWinL() with a pair of well-chosen
text strings to make it clear to the user that changes will be lost
if (on an English machine) the 'Y' key is pressed

33) Adjusted the pointer repeat rate for ears in captioned controls
to once per 3/10 of a second, with the intention of making it easier
for users to fine-tune controls by their ears

34) Overhauled test code TPRGI for CEikProgressInfo, adding many new
features, to exercise the control more thoroughly

35) Added a function SetAndDraw(aValue) to CEikProgressInfo, and
simplified various test applications (TSound, TDialg0) by using this
rather than fighting with the IncrementAndDraw() function

36) Removed the concept of "initialValue" from CEikProgressInfo, so
that all progress bars now start at an API value 0

37) The flags in EIKPROGI.HRH are now EEikProgessTextPercentage and
EEikProgressTextFraction; the CEikProgressInfo class itself supports
futher derivation such that subclasses can provide their own text
format strings

38) Added support for changing various "layout" and "border" features
of a progress info control (see the spec in the "Eikon" database for
more details); fine-tuned the standard choices of these to match
Bill's visuals as closely as possible

39) Many other changes in the internals of CEikProgressInfo

40) Standardized the GetXxx() dialog utility functions so that the
control ID is always the final parameter

41) Removed the trailing ...L in CEikDialog::SetInitialCurrentLineL()
since the default implementation of this function does not Leave, and
there is no reason for any replacement for it to Leave either

42) Fixed the calculation of the position of pop-out listboxes to
work if the choice list is a child window of other than a top-level
window (as occurs in the present implementation of multi-page
dialogs); made a similar fix in GraySelector code.


Version 0.01.042
================
(Made by DavidW, 23 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/037
	C32/022 EALWL/025
        GDI/029 FNTSTORE/022 FBS/028 BITGDI/030
        WSERV/042 CONE/102 FONTS/029
        ETEXT/046 TBOX/068 GRID/068 PDRSTORE/012 PRINT/020
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Sizes (Gcc build):	NOKIE.DLL	243,696 bytes
			EIKSRV.EXE	 12,380
			NOKIE.RSC	  3,793
			SYSTEM.MBM  	  2,868

From DavidB:
------------
1)  Gave MFNEs a gap two pixels at the front and at the end, and a
*deep* sunken border, to give them the same look as choice lists

(a choice list has been temporarily added to the test dialog in TMfne
- press Space to access this dialog - to show this)

2)  Times with single-digit hours are no longer padded with leading
zeros in date editors, thus six o'clock in the morning is "6:00 am"
in 12-hour format and "06:00" in 24-hour format

3)  The test dialog in TMfne now runs on the rack, as a result of
reducing the lower date limits to 1970 (because, currently, nothing
on the rack causes the date to be initialized more meaningfully)

4)  Fixed a bug pointed out by Kevin Dixon (defect report HA-200)
when date editors were set to the first day in the month (or the
first month in the year)

From Neil:
----------
5)  New module EIKALMCT.* for what will become the alarm alert; for
now, this sets itself to the full screen, has a textured background,
an inactive mover as the title, and three command buttons (snooze,
silence, and clear)

6)  This control looks like a dialog and behaves like a sleeping
dialog via functions ShowAlarm() and HideAlarm()

7)  The Eikon Server now links to EALWL and the alarm server is
started up within the Eikon Server system startup code

8)  Added a sleeping alarm control to test code TEar1, which is
toggled between its sleeping/awake states by pressing Ctrl+D

From Siamak:
------------
9)  On Dan's request, made the CEikListBox function
AdjustRectHeightToWholeNumberOfItems() virtual

10) Fixed a header file dependency problem in EIKLBV.H

From Vipul:
-----------
11) Borrowed some ideas from menu bar drawing code to cut down on the
amount of work required to draw the page selector region of dialogs

12) Dialog pages now have proper borders drawn round them

13) Added the function Text() to CEikLabel returning a TPtrC of the
text inside the label

From DavidW:
------------
14) Changed CEikDialog::PrepareForFocusTransition() from private to
protected so that classes which replace this function can supersend

15) Added the protected function IdOfFocusControl() to CEikDialog (if
there is no line with the focus, the function returns 0).


Version 0.01.041
================
(Made by DavidW, 22 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/037
	C32/022 EALWL/025
        GDI/029 FNTSTORE/022 FBS/028 BITGDI/030
        WSERV/042 CONE/102 FONTS/029
        ETEXT/046 TBOX/068 GRID/068 PDRSTORE/012 PRINT/020
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Sizes (Gcc build):	NOKIE.DLL	241,536 bytes
			EIKSRV.EXE	 12,376
			NOKIE.RSC	  3,762
			SYSTEM.MBM  	  2,180

From MartinB:
-------------
1)  Reinstated four visually distinct states for command buttons -
the outcome is still experimental, because pressing on a button no
longer inverts its background, and this is at variance with most of
the rest of the UI

2)  The command button scroll offset is now recorded internally,
rather than being infered, so that buttons should no longer have
their faces "walking" indefinitely

3)  Renamed the field CEikCommandButton::iFlags to iCmdFlags

From Neil:
----------
4)  Improved the code in CEikEdwin to find the first character on the
first fully visible line (required for some scrollbar purposes), by
using a recently created CTextLayout API

5)  Ears for captioned controls now have auto-pointer repeat at a
rate of 10 per second

6)  Changed the pointer repeat rate for nudge buttons and page
buttons in scrollbars (some more experimentation may still be
required here)

From SimonC:
------------
7)  Converted the file browser dialog from eikon, and added test code
for it to TLBox1

8)  Tidied up the browser code (including switching to using a button
coordinator for the sort order buttons)

9)  Added an EEventItemDoubleClicked event to the listbox observer. 
The hierarchical and directory contents listboxes report this event
whenever they have been expanded/collapsed regardless of whether a
double click has occurred or tab been pressed

10) Fixed an edwin panic reported by Gillian that occurred if anyone
called SetTextL for an edwin in a dialog before it was sized

From Vipul:
-----------
11) Modified the visuals of multi-page dialogs, to make them less
flickery, and to draw a border around the "page" part of the dialog
(note: currently this sometimes fails to be correctly redrawn)

From Siamak:
------------
12) Improved the implementation of the HandlePointerEventL() function
in listboxes, acting on suggestions from Neil and Steve

13) Fixed some bugs that had arisen in the recent reorganization of
listbox code

14) Removed all calls from EIKLBX to the model's ItemExist()
function, since this function is slated to disappear

15) On a suggestion from Simon, added a new function to CEikListBox
that returns the index of the bottomost visible item in the listbox.


Version 0.01.040
================
(Made by DavidW, 21 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/037
	C32/022 EALWL/025
        GDI/029 FNTSTORE/022 FBS/028 BITGDI/030
        WSERV/042 CONE/102 FONTS/029
        ETEXT/046 TBOX/068 GRID/068 PDRSTORE/012 PRINT/020
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Sizes (Gcc build):	NOKIE.DLL	238,440 bytes
			EIKSRV.EXE	 12,376
			NOKIE.RSC	  3,762
			SYSTEM.MBM  	  2,180

From DavidB:
------------
1)  Mfnes now support dynamic setting of their maximum and minimum
values, via SetMaximumAndMinimum() functions

2)  New utility functions in EIKDLGUT.CPP to set the max/min of Mfnes
specified by control ID

3)  Changed the drawing functions of Mfnes to leave one blank pixel
in between the top of the ascenders and the border, for improved
aesthetics

4)  The Mfne dtor now calls HideCursor() if it is flashing a cursor
at the point of destruction, to avoid leaving the cursor behind in
some rare cases

5)  Changed some IMPORT_C's to EXPORT_C's in EIKMFNE.CPP, allowing
MFNEs to be created and subclassed across a DLL boundary (so that
TMfne once again links and runs under Gcc)

From Vipul:
-----------
6)  Further work on page selector controls - developed their visuals
(though this is not complete yet) so that it is clear which page is
the "current" page at any one time

7)  Added HandlePointerEventL() and OfferKeyEventL() functions to
CEikPageSelector, both of which can change which page is current

8)  By default, the user can press Alt+1 to move to the first page,
Alt+2 for the second page, and so on, as well as clicking with the
pen on a page selector

From Neil:
----------
9)  Killing a task used to hang the rack due to a problem in E32 with
opening threads by passing the full name.  Fixed by using a
TFindThread to find the thread and using the other variant of
RThread::Open()

10) Fixed a problem with an asynchronous object (the kill thread
timer) being passed a pointer to a buffer on the stack, which had
unwound by the time of the completion of the timer

11) Added a call to close the thread handle after the thread had been
killed, since otherwise trying to launch another app after killing
one hangs the rack.  Unfortunately the call to Close() *itself* hangs
the rack, so this code remains commented out until resolved by the
Base team

From Siamak:
------------
12) Changed CEikListBox::SetCurrentItemIndex() so that it no longer
does any drawing as a result of changing the current item; if you
want to tell a listbox to change its current item and redraw the
affected items, call the new function SetCurrentItemIndexAndDraw()

13) Various internal changes to the listbox view code (fixing some
problems but with several known defects remaining - some old and some
new)

14) Updated TDialg0 so that the list dialog now remembers its state
when the dialog is exited via Ok/Enter

From SimonC:
------------
15) Started converting the full-screen file browser to the new
Cone/Eikon design, in the new module EIKFBROW.*

16) New test application TLBox1 to exercise the file browser

17) Added mask bitmaps for the browser's sort-order buttons (however,
these get lost against the dark background applying when the buttons
are latched down; some kind of rethink is required here)

18) Added MArray<TDesC> derived class to EIKDCLBM so that the
Directory Contents listbox model doesn't need to keep two copies of
its text

19) Fixed a bug in the Directory Contents item drawer class, which
sometimes lead to text being drawn in the same color as the
background

From DavidW:
------------
20) First Nokie with working multi-page dialogs, see the Lists
dialog in TDialg0, which has three pages each containing (as it
happens) a single list box

21) There are known issues about visuals and flicker (and eg about
the lack of initial keyboard focus in pages other than the first),
which are being worked on; also more examples will shortly be
available

22) New class CEikDialogPage, in EIKDPAGE.*, which is the window for
a page in a multi-page dialog; the basic design is that each page has
its own window, of which only one is visible at a time; another basic
part of the design is that the iLine pointer in CEikDialog property
is *not* owned by the dialog in the case of a multi-page dialog, but
rather is just a copy of the iLines pointer in the current page; note
finally that there is *no* new class CEikMultiPageDialog (or
whatever); isntead, you just subclass from CEikDialog as normal, and
what makes it a multi-page dialog is the contents of the resource
definition

23) Converted to CONE 102, by removing various empty Draw() functions
that are no longer required (because CCoeControl::Draw() is now
itself empty)

24) Adjusted the drawing code of choice lists to move one line of
empty pixels from the ascender area to the descender area, to prevent
the tops of letters colliding with the top border; this change
automatically benefits subclasses like CEikFileNameSelector too

25) Reduced the inter-item spacing between dialog controls (more
strictly, the extra vertical margins around a CEikCaptionedControl)
by two pixels top and bottom

26) Partly to compensate for the above, added back two pixels spacing
at the very top of a CEikCaptionedControlArray; the net result of
these changes is that a dialog with a title and eight "normal" lines
fits snugly within the screen height (eg, the dialog you get by
pressing Space in TMfne)

27) Moved down the prompts of captioned controls by three pixels, so
that they align more often with the controls on the right hand sides;
also set the margins of the prompts to 1 all-round, to improve their
appearance when highlighted.


Version 0.01.039
================
(Made by DavidW, 20 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/037
	C32/022 EALWL/025
        GDI/029 FNTSTORE/022 FBS/028 BITGDI/030
        WSERV/042 CONE/101 FONTS/029
        ETEXT/046 TBOX/068 GRID/068 PDRSTORE/012 PRINT/020
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Sizes (Gcc build):	NOKIE.DLL	226,960 bytes
			EIKSRV.EXE	 11,860
			NOKIE.RSC	  3,718
			SYSTEM.MBM  	  2,180

From DavidB:
------------
1)  MFNEs now support a duration editor, and a combined time-date
editor

2)  Several of the STRUCTs used to declare MFNEs in resource files
have been simplified (in part as suggested by MartinB), including
shortening the sizes of some of the field names (eg just "max"
instead of "maximumvalue"); also the initial value declarations have
been removed from these STRUCTs, since these values will need to be
supplied at run-time by the application (typically in a DynInitL
function)

3)  Added utility Get and Set functions for all MFNE controls to
EIKDIALG.H and EIKDLGUT.CPP

4)  Extended and developed the test code in TMfne, eg by supplying it
with a toolbar

(Note that TMfne doesn't link in Gcc, however, and is omitted from
the build ROM images)

From Vipul:
-----------
5)  First steps of the work to support multi-page dialogs: there's a
new module EIKPGSEL, defining a page selector control, that can
optionally appear as the top line of a dialog (underneath the title);
for now the visuals of this are rudimentary

6)  The DIALOG struct defined in EIKDIALG.RH now has a "pages" LLINK
field in it, that defaults to 0, but which can be filled in to
identify an array of page titles and matching page resource
definitions (not operational yet)

7)  Updated the sizing and control-counting functions in CEikDialog
to take account of the possible existence of a page selector

8)  Updated TDialg0 to show a dialog with a page selector (the "List"
dialog)

From MartinB:
-------------
9)  Made some experimental changes to CEikCommandButton, with the
effect that when a button contains some text and a bitmap, the bitmap
never gets scrolled; this turns out to be more visually satisfying

(however, the code has collapsed the four previously visually
distinct button states into only two, resulting in much less feedback
to the user for latching command buttons)

From Siamak:
------------
10) Added explicit default ctors and dtors for all the file selection
controls, so that they can be subclassed or created from other DLLs

11) Changed the default size of the folder selector in EIKFSEL.RH to
be a fixed value (20), so that the control does not attempt to work
out its width dynamically

12) Other internal changes to file selection controls

13) Changed the signature for CEikListBox::UpdateScrollBarsL() so
that it no longer takes any arguments

14) *** IMPORTANT *** removed the HandleListUpdateL() function from
CEikListBox, since it was trying to do too much.  The two most common
situations in which this function was being used are as follows:

    a) after one or more items have been added to the listbox model;
in this case, you can now use the new function HandleItemAdditionL(),
which updates the listbox's bottom item index and its scrollbars (if
any), and then redraws the listbox by calling DrawNow()

    b) after the set of items in the listbox model has been
completely deleted or replaced; in this case, you can typically use
the following code fragment:

    myListBox->Reset();
    myListBox->UpdateScrollBarsL();
    myListBox->DrawNow();

where the first of these functions sets the top and current item
indexes to 0, recalculates the bottom item index, and gets rid of any
selection

15) Updated various modules (eg EIKSRV, EIKHLBX, various test apps)
that were using listboxes, to take into account the above change

From Neil:
----------
16) Pressing on the top-most button of the left off-screen window (ie
the "Menu" button) now results (courtesy of new Eikon Server code) in
an F9 keypress being sent to the foreground app - causing it to
display the menu bar

17) The Task list can now be used to kill tasks.  Initially the app
is sent a Ctrl+E key event to exit normally.  If it doesn't respond
within two seconds (eg if a dialog is active) a query window will be
displayed asking the user if the task should be killed.  Note that
later a more specific keypress, rather than Ctrl+E, will be used,
which will have the effect of exiting out of any straightforward
dialogs before switching to the Ctrl+E processing.


Version 0.01.038
================
(Made by DavidW, 19 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/037
	C32/022 EALWL/025
        GDI/029 FNTSTORE/022 FBS/028 BITGDI/030
        WSERV/042 CONE/101 FONTS/029
        ETEXT/046 TBOX/068 GRID/068 PDRSTORE/012 PRINT/020
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Sizes (Gcc build):	NOKIE.DLL	223,812 bytes
			EIKSRV.EXE	 11,316
			NOKIE.RSC	  3,630
			SYSTEM.MBM  	  2,180

From DavidW:
------------
1)  Dialogs can now have buttons, declared in resource files in a
manner very similar to in the "old" Eikon design

(Various aspects of the spacing of button layout will be beautified 
in the run-up to B1 day)

2)  Dialogs *without* buttons will no longer exit in response to any
keypress (such as Enter), with the single exception of Escape; so, be
sure to add button definitions to all of your dialogs; this usually
just means putting

    #include <nokie.rsg>

near the top of your *.RSS files, and adding lines like

    buttons=R_EIK_BUTTONS_CANCEL_OK;

near the top of each DIALOG definition

3)  The definition of the OkToExitL() function for CEikDialog has
changed the name of the (single) TInt parameter back to aButtonId
from aKeyCode, ie the same as it was in the "old" Eikon design

4)  In principle (though this hasn't been tested), command buttons in
dialogs can contain a mixture of an image and a label, ie not just
text; this is controlled in the same way as for buttons in toolbars

5)  Converted dialogs to use a TEikBorder for their border drawing
and size calculation routines (something they had slipped through the
net before)

6)  The TryChangeFocusToL() function of CEikDialog now takes a
control id for its parameter, as opposed to a line "index"

7)  Likewise the HandleInteractionRefused(TInt) callback from
CEikDialog now passes the control id of the dimmed line, rather than
its line "index"

8)  Reinstated "query" utility functions in CEikonEnv:

    TBool QueryWinL(const TDesC& aFirstLine,const TDesC& aSecondLine);
    TBool QueryWinL(TInt aFirstLineId,TInt aSecondLineId=0);

9)  As an example, converted the "Repro" menu command in LShell to
call QueryWinL() instead of using a home-grown dialog

10) Added a function MnemonicKeycode() to CEikCommandButton, which
returns the value of the corresponding function of its label
component, if that exists, or zero otherwise.


Version 0.01.037
================
(Made by DavidW, 17 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/037
	C32/022 EALWL/025
        GDI/029 FNTSTORE/022 FBS/028 BITGDI/030
        WSERV/042 CONE/101 FONTS/029
        ETEXT/046 TBOX/068 GRID/068 PDRSTORE/012 PRINT/020
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Sizes (Gcc build):	NOKIE.DLL	221,136 bytes
			EIKSRV.EXE	 11,316
			NOKIE.RSC	  3,390
			SYSTEM.MBM  	  2,180

Nokie depends on EALWL for the first time

From SimonC:
------------
1)  With Siamak, numerous improvments to the file selection controls,
to solve various panics and unhandled exceptions, and to minimize the
amount of work that dialogs are required to do to coordinate their
file selection controls

2)  Fixed TRTxtEd so that files can be loaded and saved once again
(thereby providing a meaningful test of the common file dialogs and
the controls they contain) - note that if you give your saved files
an extension other than *.RTX, a subsequent Open dialog will fail to
find them again

From Neil:
----------
3)  New module EIKALSRV.* for the alarm/alert server, running inside
the Eikon Server process; for the time being, all (legal) requests
are simply completed with KErrNone

From Vipul:
-----------
4)  Created a new module EIKBTPAN.* for the "button panel" class
CEikButtonPanel to implement panels of buttons in dialogs

5)  Currently this class only reports its size, as read in from a
resource file; this is done to allow dialog geometry calculations to
be refined:

6)  Modified the MinimumSize() and SizeChangedL() functions of
CEikDialog to take account of the presence of a possible button array

7)  Defined the flag EEikDialogFlagButtonsBelow which, if set, will
position the panel of buttons along the bottom of the dialog;
otherwise (the default) they will be positioned down the right hand
side

8)  Modified the dialogs defined in TDialg0.RSS to specify dummy
button panels (some at the bottom of their dialogs, and some down the
right hand side), which are drawn as dark gray rectangles for now

From DavidW:
------------
9)  Introduced the virtual function CurrentItemChangedL() in
CEikChoiceListBase, to simplify the design of those of the file
selection controls that are derived from CEikChoiceList

10) Removed EDISP.DLL from NOKIE.OBY, since it is the display driver
used by the Text Window Server and isn't needed for graphics ROMs

11) Got fed up with test applications not having toolbars, and beefed
up the CEikToolBar class accordingly, together with support for
toolbars inside CEikAppUi

12) Added single toolbars to TDialg0 and LShell, and a pair of
toolbars (one down the side and one along the screen top) to TRTxtEd,
one of the latter replacing the toolbar which TRTxtEd used to
hand-craft

13) New function CEikAppUi::ClientRect() which applications using
built-in toolbar support should call, to find the TRect area that is
left behind once the toolbars are taken into account; client windows
should be created with that extent, rather than the extent of the
whole screen (otherwise the toolbars will be covered up)

14) Fixed a bug in test code whereby a descriptor was being passed by
value as a ... parameter to Format(), whereas its address needs to be
taken, to match a %S (thanks to the Gcc compiler for spotting this).


Version 0.01.036
================
(Made by DavidW, 16 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/037 C32/022
        GDI/029 FNTSTORE/022 FBS/028 BITGDI/030
        WSERV/042 CONE/101 FONTS/029
        ETEXT/046 TBOX/068 GRID/068 PDRSTORE/012 PRINT/020
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Sizes (Gcc build):	NOKIE.DLL	219,016 bytes
			EIKSRV.EXE	 10,256
			NOKIE.RSC	  3,390
			SYSTEM.MBM  	  2,180

First release in synch with GDI/029 WSERV/042 ETEXT/046 TBOX/068 etc

Nokie depends on C32 for the first time (because PDRSTORE does)

Among other changes that come automatically (because of upstream
components) are the fact that cut and paste of rich text now
preserves embedded formatting

Note that Ears and ScrollBar buttons etc (anything using DrawPolygon)
fail to display themselves properly, pending a re-release of Wserv

From Neil:
----------
1)  In the Eikon Server, the treatment of "special" keys (ie switch
off, and LCD contrast change) is now done in a keyboard filter
control, so that it still works even when the Eikon Server is
displaying a dialog

2)  Changed the listbox in the task list dialog to have an
auto-visible scrollbar (but a known defect in listbox code prevents
this from displaying properly)

3)  Altered the Draw() function of the CEikMover control to draw the
text inverted when the mover is being pressed, eg when a dialog is
being moved

4)  Added an Auto swith off menu command to LShell, producing a
dialog for controlling the auto switch off properties (however the
corresponding UserHal functions in E32 haven't been implemented yet)

5)  Added Set and Get utility functions for number editors in dialogs
to EIKDLGUT.CPP

6)  Added a forward declaration of class CEikonEnv to EIKMFNE.H

From SimonC:
------------
7)  Implemented CEikFolderNameSelector, which presents (in a choice
list, and then in a listbox, if tabbed out) a flat list of all the
directories in an expanded directory tree listing

Note that a dialog with a CEikFolderNameSelector takes a *very* long
time to initialize itself under WINS, since it will scan the entire
directory structure of your C:\ drive; this will change in the wake
of E32/065 when C: under WINS is mapped to a specified subset of your
hard disk

From Siamak:
------------
8)  New classes CEikFolderNameEditor and CEikDriveNameSelector, and
developed the code for CEikFileNameEditor

9)  Upgraded the common file dialogs to present coordinated sets of
the file selection controls - see eg TDialg0 for these dialogs

From Vipul:
-----------
10) Fixed typo bug that was causing the border of command buttons to
occasionally get drawn in the wrong state

11) Improved test code TPDraw1 to include a class of buttons in which
two different bitmaps are displayed on each face; this tests out
ideas and code for scrolling button faces

12) Improved test code TBtGrp1 to test the SetDisplayContent()
functionality of command buttons, via a new menu; this required the
function CEikCommandButton::SizeChangedL() to be made public; note
that only the display content of the "Word" button is altered

From DavidB:
------------
13)  Simplified some of the structs used for declaring MFNEs in
dialogs - see TMfne for examples

14) EIKMFNE now supports range editors and lat/long editors

15) Extra test code in TMfne, available on Ctrl-F through Ctrl-H, to
show the new kinds of MFNEs

16) Single-field number editors now increment/decrement their ears
are nudged

17) New system-wide feature on Sh-Ctrl-Alt-P to display a dialog with
a number editor allowing the heap failure rate to be set; this can be
cancelled using Sh-Ctrl-Alt-Q; doubtless it will show up all kinds of
bugs where code has not been written in a Leave-safe manner

From Julian:
------------
18) Improved test code TSound to incorporate a progress bar to give
better visual feedback to the user during playback

19) Fixed a crash with stray signal death if the record button was
pressed while recording was already in progress

20) TSound now detects the "already exists" error when loading the
sound device driver, and now treats this as harmless, rather than
failing to complete application initialization

From DanH:
----------
21) Minor improvement to TGrid test code

From MartinB:
-------------
22) Fixed CEikToolBar code so that buttons are pushed on the cleanup
stack during their initialization (needed because of the removal of
the "reserved space" feature from CCoeControlGroup)

23) Renamed Button() to ButtonById() in the toolbar

24) Fixed CEikHorOptionButtonList to use TCharUC rather than
home-grown upper-casing

25) Renamed GEikGridWin to CEikGrid, and changed test code TGrid
accordingly

From DavidW:
------------
26) Converted all code to compile and link, in the wake of API
changes upstream; note that some further work remains to be done
within Nokie code to take better advantage of these API changes
(especially those within Form)

27) Changed the name of CEikDialog::ValidateFocusControlL() to
PrepareForFocusTransitionL(), in line with the related change of
CCoeControl::CheckStateIsValidL() to PrepareForFocusLossL()

28) Added a utility verb PUTYELLOW to MNT.CMD:

    :putyellow
    call prj tsrc
    echo Copying eik%_ver%P1.img to r:\%_vgroup%\yellow ...
    copy eik%_ver%P1.img r:\%_vgroup%\yellow >nul
    goto end


Version 0.01.035
================
(Made by DavidW, 14 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/036
        GDI/028 FNTSTORE/021 FBS/027 BITGDI/029
        WSERV/041 CONE/099 FONTS/029
        ETEXT/044 TBOX/066 GRID/067 PDRSTORE/011 PRINT/019
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Sizes (Gcc build):	NOKIE.DLL	210,624 bytes
			EIKSRV.EXE	  9,764
			NOKIE.RSC	  3,273
			SYSTEM.MBM  	  2,180

Uses CONE 099 for the first time

Note that EIKBTGRP.* should be deleted, since it has been superseded
by COECTGRP.* in CONE

Before you can do a MNT BLDIMG to make your own P1 ROM image, you'll
need to have DASNP1.PDD on your PC, in \work\emarm.  Doing MNT GETE32
will fetch it now (it wasn't originally released), or you can copy it
from Julian's U:\

From Julian:
------------
1)  New test code TSOUND.* demonstrating the record and playback
features of the machine, working off an array of five buttons; this
is the first public outing for code that will eventually become the
VoiceNotes app

(this works best on a real Protea or on a rack-C)

From Siamak:
------------
2)  Renamed EIKFNSEL.* has to EIKFSEL.*, since this module will
contain other file selector controls, in addition to the filename
selector class CEikFileNameSelector (derived from CEikChoiceList)

3)  Created CEikFileNameEditor, derived from CEikEdwin

4)  Modified the SaveAs dialog in EIKCFDLG to use the filename editor
(there's an example of this dialog in TDialg0)

5)  New header file EIKFSO.H defining MEikFileSelectionObserver

6)  Various internal changes to the choicelist and listbox code

From Neil:
----------
7)  The Eikon Server now uses a listbox for its task list dialog
(presented when Ctrl-System is pressed) rather than a choice list

8)  Clicking on System will task switch to LShell if it is running,
or if it is not running, it will start LShell (this feature is handy
if you unintentionally exit your last running LShell)

9)  Improvements to the Notifier Server code, eg to panic the client
instead of self on receipt of bad parameters

10) New private header file EIKSVPAN.H for panics from the Eikon
Server

11) Added a "Machine info" menu command to LShell, but this always
just says V1.00(1), regardless of the OBY file saying eg 0.01(035)

12) Added Set/Get utility functions in EIKDLGUT for the current item
of a listbox in a dialog

13) Fixed a problem in text listbox model code

From Vipul:
-----------
14) Added the function SetDisplayContent() to CEikCommandButton,
which takes a TDisplayContent parameter to specify whether both the
text and bitmap of the button should be displayed, or just one

15) Changes to the StateChangedL() function of CEikCommandButton, to
prevent the button face from scrolling indefinitely in cases such as
the Bold Italic and Underline buttons on the TRTxtEd toolbar

16) Updates to TEikBt1 test code

From SimonC:
------------
17) Improved the BLD.CMD system in the ..\srcdata directory, so that
each constituent *.PBM file now gets listed in its own line in a
BLD.TXT text file

18) Minor improvements to the Repro Confirmation dialog in LSHELL

From DavidW:
------------
19) Added an "Eikon version" menu command to LShell, to display the
version number of Eikon/Nokie that is included; this also gets
displayed when LShell starts

20) In line with changes in CONE, renamed the bitmap store file
EIKON.MBM to SYSTEM.MBM (though the generated header file EIKON.MBG
retains its name, and likewise the enums in it)

21) Converted all MinimumSizeL const functions to be MinimumSize (non
const)

22) New (overloaded) TEikBorder constructor, specifying just the
TBorderType, and not bothering to pass any "adjacent" flags (which
the constructors effectively sets to ECoeAdjNone)

23) Managed to fix the Notifier Server so that it now works under Gcc
as well as under WINS.


Version 0.01.034
================
(Made by DavidW, 13 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/036
        GDI/028 FNTSTORE/021 FBS/027 BITGDI/029
        WSERV/041 CONE/098 FONTS/029
        ETEXT/044 TBOX/066 GRID/067 PDRSTORE/011 PRINT/019
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Sizes (Gcc build):	NOKIE.DLL	212,472 bytes
			EIKSRV.EXE	  9,756
			NOKIE.RSC	  3,281
			EIKON.MBM	  2,180

Uses GRID/067 for the first time, with the result that *all* Nokie
test apps now run under Gcc

(Build 033 was released under-the-counter, without release notes.)

From Neil:
----------
1)  The Eikon Server now implements the Notifier Server defined in
E32, ie if an app calls User::Notify() the Eikon Server will display
an alert dialog on its behalf

2)  Added some explicit tests of the Notifier to TMenu3, in its Alert
menu

Note: for reasons unknown, calling User::Notifier under Gcc results
in the Eikon Server exiting

3)  Reorganized some of the code in the Eikon Server, moving its
header files into ..\inc

4)  Converted the task list dialog to be a "sleeping dialog", to help
ensure that it can always be displayed, even in low memory
circumstances

Note: another example of use of the Notifier is when an application
calls CEikonEnv::AlertWin (directly or indirectly) at such a time
before the Alert dialog for that application hasn't been constructed
yet; in this case, system code defaults to calling User::Notify();
note however that all application start-up code of the form

    #if defined(__WINS__)
    EXPORT_C TInt EntryPoint(TAny*)
    #else
    GLDEF_C TInt E32Main()
    #endif
        {
        CEikonEnv* coe=new CEikonEnv;
        TRAPD(err,ConstructAppL(coe));
        if (!err)
            coe->ExecuteD();
        return(err);
        }

needs to change to
    
    #if defined(__WINS__)
    EXPORT_C TInt EntryPoint(TAny*)
    #else
    GLDEF_C TInt E32Main()
    #endif
        {
        CEikonEnv* coe=new CEikonEnv;
        TRAPD(err,ConstructAppL(coe));
        if (err)
	    coe->HandleError(err);
	else
            coe->ExecuteD();
        return(0);
        }

in order for these errors during program startup to be properly
notified to the user; with this done, errors such as resource files
being missing get notified

From SimonC:
------------
5)  Converted the hierarchical, directory tree, and directory
contents listboxes from \eikon, along with their bitmaps

(as a result, the module count in \nokie\src hits 72)

6)  Added test code for all these kinds of lists in TLBox2.  On
startup this contains a directory tree listbox.  The type of listbox
displayed can be changed by using the menu.  Try double clicking, to
expand or collapse branches, in all cases

7)  TLBox2 contains its own example of a hierarchical listbox
subclass, which shows a hierarchy of continents, countries, and
cities, read in from a plain text file

From MartinB:
-------------
8)  CEikToolBar now has a ConstructFromResourceL and a NewL function,
so that toolbars can be loaded from resource files (this is a bare
bones implementation at the moment)

9)  The ConstructFromResourceL function supports buttons with
bitmaps and/or text

10) New file EIKTBAR.RH with definitions of TOOLBAR and
TOOLBAR_BUTTON

11) Change to CEikButtonGroup so that some layout is handled when
buttons are added

12) Updated TRTxtEd test code to reflect the above

From Vipul:
-----------
13) Fixed various bugs to do with the borders drawn for buttons at
the edges of button groups

14) Introduced a couple of panics in command button code to catch
problems earlier

15) Upgraded TBtGrp1 to allow the setting of button spacing in a
button group

16) Other improvements to TBtGrp1 such as "radio button" displays in
menus

From Dan:
---------
17) Removed the  call to ReportEventL(EEventRequestFocus)
from CEikGridWin::HandlePointerEventL (this is no longer needed,
under the new CONE design)

From DavidW:
------------
18) Controls and their prompts are once again properly aligned within
dialogs, courtesy of the new class CEikCapCArray, the array of
captioned controls, defined in the new module EIKCAPCA.*

19) Converted test code TCAPC1.* to use CEikCapCArray

20) Key Up/Down in dialogs now bypass lines which are non-focusing

21) Changed the settings for a few controls in EIKFCTRY.CPP to say
they are non-focusing

22) Took back the earlier idea that any line in a dialog without a
prompt is non-focusing (easy counter-example: the character map
control)

23) Fixed a bug in the character map in which it could try to draw a
flashing cursor even when it wasn't focused

24) Label controls in dialogs are now given center alignment
(intended for use in the likes of alerts and notifiers)

25) Changed TMenu3 to print up the keycode and modifiers of keys
received, as an aid to figuring out which keys do what on a real
Protea

26) Changed the background in LSHELL from dark gray to textured
(philosophically much sounder, and much better looking on real
Proteas)

27) Converted the startup code of all live Nokie test apps to the
form indicated above, so that errors during program startup get
notified (in due course, when the application architecture is running
again, that code will be taken over into Eikon.DLL itself, out of the
hands of individual test applications).


Version 0.01.032
================
(Made by DavidW, 13 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/036
        GDI/028 FNTSTORE/021 FBS/027 BITGDI/029
        WSERV/041 CONE/098 FONTS/029
        ETEXT/044 TBOX/066 GRID/066 PDRSTORE/011 PRINT/019
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Size of NOKIE.DLL (Gcc build): 192,512 bytes

*** A few source files re-put, 11:30 13/08 -

    ..\group\release.txt, ..\group\mnt.cmd, ..\tsrc\nokie.oby

allowing all but one of the test apps to run on the rack.  Basically
more files needed to be added into nokie.oby.  TGrid still won't run,
due to a version mismatch between Bafl and Grid (I had forgotten that
Grid depends on Bafl; adding in the sound services to Bafl had the
effect of breaking TGrid!)

I've also added the verb "MNT REPRO" to mnt.cmd

    :repro
    call prj tsrc
    prepro eik%_ver%P1.img
    goto end

The file r:\nokie\yellow\nok032p1.img has been updated to match ***

This is the first Nokie to release "over-the-counter" a ROM image
that can be reproed onto any of the (working) yellow Proteas.  These
ROM images will henceforth be placed in the directory

    r:\nokie\yellow

a./ First you need to get hold of a repro cable.  That's the *really*
hard bit!  They're rarer than, err, hen's teeth

b./ Then you have to prepare your Protea for reproing.  If it's
already got Nokie software running on it, there's nothing to be done
- just go to LShell and find the Repro command on the menu bar.  If
it's still running the original (text shell) software, you have to
type (into the text shell on the Protea)

    cd ram
    copy repro.exe c:
    c:

c./ Then you need to be sure you've got PREPRO.EXE in your path. 
Best here is to type, on your PC

    set s=s:
    cd \tools
    getrel ptool peiger 104
    set s=r:

d./ Then you start PREPRO.EXE on your PC.  Type

    prepro r:\nokie\yellow\nok032p1.img

e./ Then you start REPRO.EXE on your Protea.  Either complete the
Repro confirmation dialog under LShell, or type "repro" into the text
shell (depending on what software's already on the Protea)

f./ Wait (around six minutes) and watch the numbers tick by on the
PC.  Make sure power is maintained to the Protea at all times

g./ When the PC beeps and tells you, you reboot the Protea (eg remove
all power for a few moments, or else jab its reset hole with an
unfolded paper clip), and you can press Esc to exit PREPRO on your PC

NB The Nokie software is in a highly transitional (and frequently
broken!) state; repro at your own risk

For the time being, you can switch off a Protea by Ctrl-Fn-Del

From Vipul:
-----------
1)  A new implementation of button face scrolling for command buttons
(the way the face scrolls when the button state changes): there are
now Scroll() functions in each of CEikLabel and CEikImage

2)  Made CEikButtonGroup::AddButtonL() virtual as requested by
MartinB

3)  The AddButtonL() function of CEikButtonGroup now always allocates
an extra space in the array, to simplify the calling code (also as
suggested by MartinB)

4)  Extended the functionality of CEikButtonGroup, as can be seen by
the latest version of the TBtGrp1 test code

5)  Various improvements to TBtGrp1 to make its functionality more
apparent

From Vamsi:
-----------
6)  New class CEikToolBar in the module EIKTBAR.* containing a
subclass of CEikButtonGroup suitable for applications to use as their
toolbars

7)  Added example of CEikToolBar to test code TRTxtEd

(Note: more work remains to be done to make button groups/ toolbars
friendlier for applications to create, eg from resource files.  Also
the visuals need further refinement.)

From SimonC:
------------
8)  Added a Repro menu command to LShell, which (after an "Are you
sure" query) runs the program z:\ram\repro.exe

Note: until we convert to the forthcoming E32/065, the repro.exe that
ends up in the Protea ROM has to be the "repro.RAM" file which is
*different* from the repro.EXE file released by E32/064.  The new MNT
verb FIXREPRO will create repro.RAM from repro.EXE for you.  If you
try to invoke "mnt bldimg" (or equivalently, just "bldimg") without
repro.RAM existing on your PC, the MNT will fail, telling you that
you need to do "mnt fixrepro" first.

Also note: "mnt bldimg" now defaults to creating a P1 variant of the
ROM, that can be reproed onto a Yellow Protea (as well as onto a
mini-rack).  Before, it used to default to a rack-B ("PB") variant. 
To create a rack-B variant of the ROM, type "MNT BLDIMG PB" (or "MNT
BLDIMG RB") (you can use either upper-case or lower-case letters)

Again note: there is a new naming convention for the *.IMG files;
what would formerly have been called EIK032B.IMG is now EIK032PB.IMG,
ie with an extra 'P' inserted; this allows for EIK032P1.IMG for the
Protea hardware v1 variant, instead of all the numbers running
together as EIK0321.IMG, as would formerly have been the case

Final point: if you're preparing your *own* ROM for reproing - make
double sure you include REPRO.RAM in your *.OBY file, renaming it to
REPRO.EXE; PEIGER a PB or PC version onto a rack first, to check that
it boots okay, before you PREPRO it onto a Protea.


Version 0.01.031
================
(Made by DavidW, 12 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/036
        GDI/028 FNTSTORE/021 FBS/027 BITGDI/029
        WSERV/041 CONE/098 FONTS/029
        ETEXT/044 TBOX/066 GRID/066 PDRSTORE/011 PRINT/019
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Size of NOKIE.DLL (Gcc build): 190,932 bytes

Once again, a couple of test apps seem not to run on the rack, for no
obvious reason

From DavidW:
------------
1)  Developed the technology for "sleeping dialogs", ie dialogs which
are pre-allocated and which remain invisible ("asleep") until such
time as the application needs them

2)  Implemented CEikon::AlertWin() to use a sleeping dialog (which is
guaranteed not to fail with OOM when required)

3)  Changed the CEikDialog::SetXxx utility functions in EIKDLGUT.CPP
not to be const.


Version 0.01.030
================
(Made by DavidW, 10 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/036
        GDI/028 FNTSTORE/021 FBS/027 BITGDI/029
        WSERV/041 CONE/098 FONTS/029
        ETEXT/044 TBOX/066 GRID/066 PDRSTORE/011 PRINT/019
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Size of NOKIE.DLL (Gcc build): 189,316 bytes

Once again, a couple of test apps seem not to run on the rack, for no
obvious reason

First Nokie release using Bafl/036 and Cone/098

From Neil:
----------
1)  The Eikon server now displays a list of running tasks on receipt
of Ctrl-System; go to an entry in this list and press Enter to bring
that to foreground

2)  This list is constructed using Window Server enquiry functions,
and the names displayed are (for now) concocted by Wserv from the
corresponding thread names; this will be sanitized shortly

3)  New module EIKDLL.* containing a static function to encapsulate
launching an application (with the correct code in either WINS or
GCC); changed EIKSRV and LSHELL code to call this rather than their
own versions of this function

4)  New private function SetEnvSystemModalApp() in CEikonEnv, that
can be called (as a friend) by the Eikon Server, with the effect that
all pointer-capturing windows in the Eikon Server actually capture
the pointer relative to all window groups (whereas usually pointer
capture doesn't prevent the user from clicking on the windows of
another window group); thus modal dialogs in the Eikon Server are
automatically system modal

From SimonC:
------------
5)  Started a rich text editor control that can be used in dialogs -
source code in EIKRTED.*; this supports Ctrl-BIUF to toggle Bold
Italic and/or Underline, and to display the Font dialog; also
Ctrl-XCV for clipboard operations (courtesy of functionality from the
CEikEdwin level)

6)  Added example of rich text editor in dialog in TDialg0 (run the
dialog twice to see how the rich text can be preserved across
invocations)

7)  Fixed an edwin panic that could occur when constructing from a
resource

8)  Changed the name EEdwinFontUnderlineOn to EEdwinFontUnderline in
EIKEDCMP.H as the old name was misleading

9)  Fixed a bug in the font dialog which meant that changing the bold
or italic settings was not having any effect

From Vamsi:
-----------
10) New function ButtonId(CEikButtonBase*) in CEikButtonGroup that
returns the Id of the specified button (required for application
toolbar purposes)

11) Fix to CEikHorOptionButtonList to report state-changed events
when changed by Left or Right keys

From Siamak:
------------
12) Made alterations to CEikListBox and CEikTextListBox as required
to support listboxes in dialogs

13) Added an example in TDialg0 of a listbox in a dialog

14) Changed CEikScrollBar::EStandardWidth to be public, to aid
various size calculations

From DavidW:
------------
15) Increased the size of check boxes; unfortunately this has the
side-effect that some dialogs are now too large for the screen;
pending extra control over dialog geometry, I've commented out the
"print position" line in the Font dialog

16) Moved the OfferKeyEventL() function from CEikCheckBox to
CEikButtonBase, as it applies equally well to all kinds of button

17) Changed the default animation period of buttons to 0, so that
clicking on the ears of check boxes (or pressing Left or Right) no
longer suffers noticeable delays; the animation period for command
buttons remains at 2/10 of a second

18) Fixed the drawing problems with the Font dialog (and the font
preview control)

19) Starting changing all the CEikDialog::SetXxx() utility functions
to call DrawNow() on their controls, as an undoubted code-saving
and sanity-preserving measure

20) The AlertWin() functions in CEikonEnv are now functional again
(both the single and the double TDesC& variant); well they display
either one or two info messages (suitably paced) but a
dialog-oriented implementation is just around the corner; changed the
Edit menu in TMenu3 to an Alert menu to allow these functions to be
tested

21) Fixed various coding infelicities so that (temporarily, no doubt)
Nokie compiles without a single warning under Gcc

22) To avoid confusion, I deleted ..\inc\eikctrls.rh and removed it
from the li.prj and incc.prj files.


Version 0.01.029
================
(Made by DavidW, 9 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/035
        GDI/028 FNTSTORE/021 FBS/027 BITGDI/029
        WSERV/041 CONE/097 FONTS/029
        ETEXT/044 TBOX/066 GRID/066 PDRSTORE/011 PRINT/019
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Size of NOKIE.DLL (Gcc build): 189,288 bytes

For reasons unknown to me, TScrlB0 and TRTxtEd fail to run on the
rack.  All other test apps run fine.

The test app TDialg1 has been removed as no longer required.

Nokie officially depends on PDRSTORE(011) and PRINT(019) for the
first time, as they are now required by some test code (and will
shortly be required by Nokie.DLL itself)

From DavidB:
------------
1)  Further developments in EIKMFNE.*

2)  Further developments in test code TMfne.*; in particular, there's
now a dialog there, containing a number editor, a time editor, and a
date editor (the number editor displays ears, but these are currently
ineffective)

From Siamak:
------------
3)  Fixed problem in listbox code when the user clicked on an item
when the previously selected item had been scrolled offscreen (the
display scrolled to expose the previously selected item, rather than
the new one)

From MartinB:
-------------
4)  Changed the implementation of CEikDialog::ConstructFromResourceL
so that the array of lines is pre-allocated, once the number of lines
is known - this saves pushing and popping each line on the cleanup
stack as they are individually created

From Vamsi:
-----------
5)  Converted part of EIKPRTDG.* - the page spec and page margins -
from Eikon to Nokie

6)  Added options in TRTxtEd to test the above dialogs

7)  TRTxtEd now also has features to test the text find/replace
dialogs

8)  Changed the implementation and design of CEikHorOpButList to be
able to pass on control events from the individual buttons to the
observer of the list as a whole

9)  Minor bug fix in EIKFINDD.CPP

From SimonC:
------------
10) Converted the border preview control CEikBorderPreview from Eikon

11) Converted the paragraph format dialogs from Eikon and added
options to access them from TRTxtEd

12) Defined a new control CEikFontPreviewLabel in EIKFPREV.*, which
leaves the CEikLabel class less encumbered for general usage

13) Added two more constructors to CEikEdwin which take a global text
pointer - for use by Data (and no doubt by others)

14) Fixed the progress bars example dialog in TDialg0 so that the
bars reset once they have reached their limits

15) Provided Set/Get methods for twips editors in DLGUT.CPP

16) Fixed a minor bug in CEikComboBox::SetArray

From Vipul:
-----------
17) Some changes to CEikButtonGroup, to support the notion of
"direction", eg from top to bottom or bottom to top (used when
wrapping buttons)

18) Fixed some bugs in TBtGrp1

From DavidW:
------------
19) Changed the maximum heap allowed for applications from 0x10000 to
0x200000 (the same as it used to be in the old Eikon)

20) Removed the iFlags field from the resource file definition of
DLG_LINE, since this is now handled by the control factory

21) Moved the definition of KEikDefaultCursorWidth from EIKEDWIN.H to
EIKENV.H.


Version 0.01.028
================
(Made by DavidW, 8 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/035
        GDI/028 FNTSTORE/021 FBS/027 BITGDI/029
        WSERV/041 CONE/097 FONTS/029
        ETEXT/044 TBOX/066 GRID/066
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

Size of NOKIE.DLL (Gcc build): 169,756 bytes

From Neil:
----------
1)  Started the Nokie implementation of the Eikon Server, in the
module ..\eiksrv\eiksrv.cpp; this builds to create EIKSRV*.EXE (.DLL
under WINS) which now (courtesy of a change in WSINI.INI) gets
started by the Window Server instead of LSHELL

2)  In turn the Eikon Server starts LSHELL; quite a lot of the
functionality from LSHELL has been relocated in EIKSRV

(One side-effect of the change has been that you get a blank screen
on exiting LSHELL - more correctly, on exiting the last "normal"
Nokie app.  This is the silent face of the Eikon server.  Just press
Ctrl+E again to exit the whole thing.)

3)  On advice from Bill, changed the Draw() function of CEikMover not
to change the control's appearance depending on whether it is active

From Vipul:
-----------
4)  Fixed a bug in TEikBorder for the case when a button had adjacent
neighbors both to its right and below it

5)  Changed the scrolling effects in command buttons again

6)  Introduced support for "button wrapping" in CEikButtonGroup

From DavidW:
------------
7)  Fixed a bug that had crept back into Nokie in the previous build,
whereby clicking on dialog items could panic (the point is that
auto-focusing of dialog items is handled at the *line* level and not
by individual controls, so *all* controls in a dialog end up with the
no-auto-focusing flag set for them)

8)  Made a quick attempt to fix some of the broken merge (in the last
build) of the MFNE code and test code, but gave this up (with a few
of my additional merges in place) as a lengthy job best delegated!
(so, TMfne is left in its instantly panicking state)

9)  Changed some of the case statements in the control factory code
to set some "has ears" and/or "do not focus" flags as required.


Version 0.01.027
================
(Made by MartinB, 7 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/035
        GDI/028 FNTSTORE/021 FBS/027 BITGDI/029
        WSERV/041 CONE/097 FONTS/029
        ETEXT/044 TBOX/066 GRID/066
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305


From Neil
=========

EIKDLGUT.CPP & EIKDIALG.H
-------------------------
Added "utility functions" eg SetCharMap(TInt aControlId, TInt aChar)
to avoid every application having to look up the control id, cast and
call the appropriate function themselves.  Get/Set functions provided
for all controls currently in the control factory.

EIKCHMAP.*
----------
Added a SetChar() function for use in eg a dialogs
PreLayoutDynInitL() function to seed the character map with a value
other than 32 (space)

TSCRLB0.*
---------
Added menus, dialogs and hotkeys to change the proportion of the
bitmap and scrollbar button appearance/dimming.


From Vipul
==========

1. Renamed TEikPlinth to TEikBorder as preferred by Bill. Also made
significant changes to the API as discussed with Bill and MartinB.
This has made TEikBorder much easier to use than the previous
TEikPlinth.

2. Updated ALL Eikon source code that had any reference to
TEikPlinth.

3. Added the virtual function SetAdjacent() to CEikButtonBase which,
by default does nothing. It is meant to be over-ridded by sub-classes
that have a border. CEikCommandButton, for example uses it to set
whether a button is adjacent to other buttons.

4. From 3. above, removed SetPacking() and SetBorderDepth() functions
from CEikCommandButton and replaced them with SetAdjacent(). Note
that all command buttons now have a plinth with a border depth of 1
pixel and this cannot be changed.

5. Re-introduced the scrolling effect in buttons. It seems to work
quite nicely now.

6. Introduced a new struct called SEikButton to EIKBTGRP.H. This
holds a CEikButtonBase* and a button id. So the button group now
holds an array of SEikButton's rather than CEikCommandButton*'s.

7. Added iHSpacing and iVSpacing to CEikButtonGroup to hold the
horizontal and vertical spacing between buttons respectively. The
function SetButtonSpacing() can be called to set the values for
iHSpacing and iVSpacing

8. Removed the enum TButtonLayout from CEikButtonGroup as it was no
longer needed. Also removed any functions that dealt with
TButtonLayout.

9. Updated the test codes TBUT3,TBUT4, and TBTGRP. (Note that TBUT1
and TBUT2 can be evaporated since they are no longer needed!)

Also note that due to the changes in TEikBorder, the button group
drawing has broken down and does not work properly. I'm looking into
this. Also CEikButtonGroup is not complete yet and there are some
function whose names will change. When you run TBTGRP, you will
initially have only a blank screen since the initial values of iRows
and iColumns have been set to 1. By pressing 'v', 'h' or 'm' the
groups will be drawn.


From Vamsi
==========

1) removed iPlinth in EIkopbut.* since it was no longer required.

2) Provided two new functions in EikHopbt.*
-  Label() in CEikLabelledOptionButton class which returns 
 CEikLabel*
  MatchMnemonicKey() in CEikHorOptionButton class.

3) Few changes to the OfferKeyEventL() function of
CEikHorOptionButton class.  If the user presses tab key the focus is
set to the next button (same as rightarrow)

4) Provided EIKHOPBT.RH file.  HorOptionBt can be created from
resource files.  Changes to the ConstructFromResourceL() of
CEikHorOptionButton class.

5) converted find dialog code (EikFindd.*) from eikon to nokie.

6) added find,repalce dialog to Nokie.rss .

7) The SetContainerWindowL() of ComboBox,Edwin,edwin::constructL()
take "const" CCoeControl* instead of CCoecontrol*

8) Provided EIKCMBOX.RH for the above dialog.

9) made changes to EIkedwin and eikedcmp.* files to support the above
dialog

10) supplied new test code called tdialg1 for option buttons.  I
guess you don't have to add this because the find dialog supports the
optionbuttons.

The find/replace dialogs do not work properly!!

11) Changes to TRTxted.* files to support the find/replace dlgs. 


From DavidB
===========

1) Lots of MFNE changes.

From Simon

1) added iMinSize member to CEikLabel so that labels in dialogs could
specify a minimum size greater than their current minimum.

2) added preview label to font dialog.

3) fixed some edwin/combobox bugs that prevented combos being used on
dialogs.  These bugs were spotted by Vamsi.

4) added progress bar and floating point editors to eikctrls.hrh and
eikfctry.cpp

5) added OfferKeyEvent to CEikCheckBox.  Tab and left and right arrow
can be used to change the state.

6) converted trtxted to use the file open and save dialogs.

7) added dialogs testing progress editors, check boxes, fpnes and
option button lists to tdialg0.  All dialogs can now be launched from
a menu as well as hotkeys.  Some of these dialogs don't work properly
yet because of problems with the controls they contain.

8) added eiklabel.rh so labels could be used in dialogs.

9) fixed a bug in eikprogi that sometimes stopped a block with splits
being drawn.


From Siamak
===========

1. Following Colly's suggestion, modified the static function
CreateByTypeL() in TEikControlFactory such that it now returns a
SEikControlInfo structure (this contains a pointer to the control
created by the afctory as well as boolean flags that specify (1)
whether ot the control has ears and (2) whether or not it is
non-focusing) rather than a pointer to a CCoeControl. A similar
change was made to the CreateCustomControlL() fucntion of CEikDialog.
This means that for standard Eikon controls, these two flags no
longer need to be specified in resource files; they are automatically
set if it is appropriate to do so.

2 Modified TDIALG0's resource file such that the aforementioned flags
are no longer specified.


From MartinB
============

Mainly tidying up operations

1) Made some things const

2) Moved inlines out of class definitions.

3) Fixed a function that did not have the same signature of the
function it was overriding (can't remember what it was).

4) Replaced spaces with tabs in header files.

5) Moved some assignments in constructors into the initialisation
list.

6) Made CEikDialog::ControlId protected.

7) Made CEikDialog::ValidateFocusControlL virtual.

8) Fixed TDialg0 and TGrid test code (problem was that they did not
have the dummy static data).



Version 0.01.026
================
(Made by DavidW, 3 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/035
        GDI/028 FNTSTORE/021 FBS/027 BITGDI/029
        WSERV/041 CONE/095 FONTS/029
        ETEXT/044 TBOX/066 GRID/066
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

This is the A1-day release

Size of NOKIE.DLL (Gcc build): 163,840 bytes

Includes GRID for the first time in Nokie

From DavidB:
------------
1)  Replaced EIKNUMED.* with a new implementation of numeric editors
in EIKMFNE.* (MFNE stands for Multi-Field Numeric Editors) - note
that the design is significantly different from before

2)  So far, various integer editor variants have been implemented,
along with a date editor and a time editor

3)  See new test code TMfne.* for examples (replaces TNumed.*)

From DanH:
----------
4)  Converted test code TGrid to the new design, showing an example
of access to the GRID DLL

From Neil:
----------
5)  Reinstated support in the console classes for a using backed up
window via new public flag CEikConsoleScreen::EUseBackedUpWindow
passed at construction time

6)  Added a new item "Window type" in the "Special" menu pane in
TCons0; selecting this has the effect of destroying the console and
restarting it with a different window type (ie normal or backed up)

7)  Added a FocusChanged() function to the console window to
show/hide the cursor as appropriate

8)  The console window now uses CEikonEnv to show/hide its cursor, to
help prevent/track down "cursor theft" bugs

9)  Fixed bug in scrollbar buttons where events were still being
reported when the cursor had been dragged off them

10) Added a SetFont() function in CEikCharMap, and fixed a cursor bug
when resizing

11) Pressing Ctrl+F in test code TChMap0 now changes the font, thus
providing simple zoom functionality

12) Converted the character editor class, CEikCharEditor, to the new
design, in the module EIKCHRED.*

From SimonC:
------------
13) Rearranged edwin code so that floating point editors can be
constructed again

14) Rearranged some of the floating point editor code, providing
ConstructL and ConstructFromResourceL functions for all variants

15) Moved the resource structs for floating point editors into their
own new file, EIKFPNE.RH

16) Changed test code TFpne in line with the above changes: added a
resource file containing the definition of one of each type of editor
in order to test the construction of these editors from resources

17) Tidied up combo box code CEikComboBox

18) Fixed the HandlePointerEventL function in CEikEdwin so that it is
(finally!) possible to resize a selected picture by dragging on any
of the blobs (or sides) of its rubber band

19) Fixed some other bugs in CEikEdwin::HandlePointerEventL, eg ctrl
clicking now correctly selects whole words

20) Converted the character map dialog and the font dialog to the new
dialog scheme, and added menu commands in test code TRTxtEd to access
them

From Vipul:
-----------
21) Added support in CEikButtonGroup for multi-column/row button
groups; for this to happen, the button layout flag has to be set to
EBlock

22) The block mode of button group layout supports partially filled
rows or columns, eg with 8 buttons in a 4x2 grid

23) New features in test code TBtGrp1: press 'v' to get vertical
layout, 'h' for horizontal, and 'm' for block ("mixed"); with an
appropriate layout chosen, press 'l' or 'r' to position the group at
the left or right of the screen, and 't' or 'b' for top or bottom

24) Improved the code in CEikImage for handling a bitmap larger than
the control extent

From Vamsi:
-----------
25) On Bill's recommendations, made some changes to the appearance of
the progress indicator control, eg using a sunken plinth instead of a
raised one, having a plinth border of 1 instead of 2, and changing
the appearance of the blocks

26) Changed the color of the top-left border of sunken plinths from
dark gray to light gray (this improves matters for progress
indicators, but it remains to be agreed whether it is a forwards or a
backwards step from the point of view of other users of plinths)

27) Fixed a bug in TEikButtonCoordinator in the case when it was
asked to re-select the same button as was already selected

From Siamak:
------------
28) Provided a starting point for standard FileOpen and FileSaveAs
dialogs, in the module EIKCFDLG.*

29) For an idea on how to use these dialogs, see the new examples
added to TDialg0, available on Ctrl-O for OpenFile, and Ctrl-S for
SaveFile

From DavidW:
------------
30) On MartinT's recommendation, changed all instances of "Labelled"
in the API to the American form "Labeled"

31) Changed the MnemonicKeycode() function of CEikLabel to always
return the TCharF (ie folded, case-insensitive) version of the
mnemonic

32) Fixed mnemonic matching in dialogs, to work case-insensitively

33) Matching the mnemonic of the current line now has the effect of
sending a Tab character to the control in that line (typically this
should animate any button-like object on that line) - this is
intended to meet a specification requirement spelt out long ago but
never implemented until now

34) Fixed a bug in CEikDialog::HandleControlEventL() which could try
to set the focus to the wrong item in a dialog - spotted and
diagnosed by Vamsi and Siamak

35) Fixed another bug in CEikDialog causing a crash when some items
were clicked on (noticed by Simon) - the fix here is to ensure that
all raw controls in the dialog are set to NonFocusing(), leaving it
to the lines as wholes to take the focus when clicked on

36) Put in place a temporary workaround to allow controls in dialogs
to receive Up and Down keys when they are the only control in the
dialog (such as the Character Map dialog)

37) Added a "character" line to the "Choice list" dialog in TDialg0,
containing an example of a character editor

38) Removed a #include of <eikctrls.hrh> from various modules that
didn't need it

39) Added FocusChanged() messages to some of the "root controls" of
test programs, delegating to the focus control within that container,
as required to prevent cursors keeping on flashing in the root
controls when emphasis should have transfered to eg a dialog or menu

40) On a suggestion from Simon, moved the call to
SetInitialCurrentLineL() during CEikDialog::ExecuteLD() until after
the call to ActivateL(), since otherwise the control that ends up
receiving the focus-changed message may not be ready for it

41) On a suggestion from SteveT, removed the call to DrawNow() at the
end of the initialization of a menu pane, to speed up the response
when the user eg presses Right rapidly three times in a row to move
from the first to the fourth menu in a menu bar.


Version 0.01.025
================
(Made by DavidW, 2 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/035
        GDI/028 FNTSTORE/021 FBS/027 BITGDI/029
        WSERV/041 CONE/094 FONTS/029
        ETEXT/044 TBOX/065
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

An interim release, with only WINS Ascii built

Basically I have ignored all the other work (and there's lots of it!)
submitted to me in the past 24 hours, to focus on producing a working
CEikDialog class

This now exists, in EIKDIALG.*, and there is working example code,
TDialg0:

    *) on starting TDialg0, you'll just see a blank screen

    *) Press Ctrl-C to get a dialog with choice lists in it

    *) Press Ctrl-P to get a dialog with passwords in it

    *) Press Ctrl-E to exit

Some limitations of the existing implementation:

    *) Dialog layout isn't yet aligned neatly into two columns

    *) For each control in your dialog that should have ears, you
have to set a flag for this

    *) Dialogs don't have buttons, but respond to Esc and Enter keys

    *) Setting controls dim or invisible probably won't work

    *) App dialogs have to duplicate lots of Set/Sense utility
functions, that will shortly get gathered up into CEikDialog

Some other changes:
-------------------
1)  I'm killing off EIKCTRLS.RH, by stages moving its contents to
specific *.RH files like EIKCHLST.RH and EIKNUMED.RH

2)  For convenience, I'm putting a line like #include <eikchlst.hrh>
at the foot of each corresponding *.rh file, to minimize the number
of separate #include's needed by app writers in their *.RSS files

3)  Various improvements to the APIs of specific controls, triggered
by trying to use them in dialogs

4)  Started the static class EikControlFactory, with its single
function CreateByTypeL(), in EIKFCTRY.CPP.


Version 0.01.024
================
(Made by DavidW, 1 August 1996)

Uses:   E32/064 F32/028 STORE/019 BAFL/035
        GDI/028 FNTSTORE/021 FBS/027 BITGDI/029
        WSERV/041 CONE/094 FONTS/029
        ETEXT/044 TBOX/065
        E32TOOLS/036 GDITOOLS/023 EIKTOOLS/106 RCOMP/305

First release using E32/064 et al

Size of NOKIE.DLL (Gcc build): 145,572 bytes

*** Re-put at 12:45pm Aug 1st, now with a Gcc build

No change to source code, except that NOKIE.OBY now includes EON9.GDR
instead of EON8.GDR.  What makes the Gcc build possible is a
re-release of Bafl.  Type "MNT GETBAFL" to fetch that by itself, if
you've already got all the other bits ***

From Neil:
----------
1)  Converted the console classes in EIKCONSO.* and EIKCONSW.CPP to
the new design

2)  New test code TCONS0.* for the console classes

3)  Converted the character map control CEikCharMap to the new
design; also added the ability for this class to report state changes

4)  New test code TChMap0.* for the character map control

5)  Added a SetFont(CFbsFont* aFont) function to CEikMover to allow
different fonts; the default on construction is the TitleFont, and
this is also used whenever a NULL pointer is passed in SetFont()

6)  Fixed a bug in Mover whereby calling SetActive(EFalse) while the
mover was in a pressed state left the text invisible (the pressed
state is now cancelled in this situation)

7)  Developed test code TEar1 so that pressing Ctrl+F now toggles
the mover's font between the title and annotation fonts

From Siamak:
------------
8)  Converted CEikFileNameSelector to NOKIE and modified the TCHLST
test app so that it creates a filename selector control and adds it
to its container control

9)  Modified the code in the choicelist that creates the tab button
such that it now specifies the tab button mask as well

10) Fixed a memory leak problem caused by the destructor of CEikImage
not destroying the mask bitmap

From SimonC:
------------
11) Converted the edit combo box CEikComboBox to the new design, in
the module EIKCMBOX.*; for now, this is derived from CCoeControl
rather than from CEikChoiceList (since although there are *some*
elements in common with choice list, equally there are many
dissimilar elements)

12) CEikComboBox works similarly to the old one in Eikon, except that
selecting an item from the history list will now move it to the top
of this list; if the control is given a size larger than its minimum
it will stretch horizontally and center itself vertically (if it is
given a size that is too small, it will panic, for now)

13) New test code TCombo1.* for the edit combo box

14) The combo box showed up a few problems with CEikEdwin which have
now been fixed

(In consequence, floating point number editors have stopped working)

15) James pointed out why clicking on many of the blobs around a
picture was being ignored; now, only the bottom corners seem to get
ignored when clicked on

16) Menu tiles are now spaced slightly further apart than before

From Vipul:
-----------
17) Renamed CEikButtonArray to CEikButtonGroup, and renamed the
source module EIKBUTAR.* to EIKBTGRP.*

18) New test code TBtGrp1.* showing something that looks rather
similar to a toolbar

19) Changed the implementation of CEikCommandButton to hold a
TEikPlinth in its property, rather than constructing one on the fly
whenever required; selective access to the functions of the plinth
are available through the functions SetPlinthDepth() and
SetPlinthPacking() in CEikCommandButton

20) Changed code in CEikButtonBase so that a new callback,
StateChanged(), gets called whenever the state of the button is
altered in a way that affects how it will be drawn; StateChanged()
can be compared to the SizeChangedL() and FocusChanged() functions;
as in these other cases, the default implementation is to do nothing

21) CEikCommandButton overrides the StateChanged() function to alter
the plinth in its property, as required

From Vamsi:
-----------
22) New implementation of the horizontal option button list, in which
it now consists of a series of CEikLabelledOptionButton instances. 
This latter class is derived from CEikButtonBase, and has two
components: a CEikLabel, and a CEikOptionButton.  These two
components are identical from the point of view of pen clicks

23) Modified test code THopBut in line with these changes

From Brendan:
-------------
24) Fixed some minor problems with test code TColLB (this now runs on
the rack)

From DavidW:
------------
25) Made changes to Nokie code and source code as required by E32/064
and all associated downstream software components - mainly, changed
various array functions from the pointer form (no longer supported)
to the reference form

26) Fixed the captioned control class so that it knows the difference
between being de-focussed yet current (as when a listbox has been
popped out from that line) and being de-focussed *and* non-current;
in the former case, the label is drawn in partial emphasis (dark-gray
background), whereas in the latter, the label is drawn with nill
emphasis

27) Implemented the above by introducing the function SetCurrent in
CEikCaptionedControl, taking a TBool parameter

28) Modified LSHELL so that it switches the machine off whenever
Ctrl-Alt-Backspace is pressed (only effective under Gcc)

29) Created static utility function CreateStandardTabButtonL() to
CEikonEnv, which is now called by code in CEikChoiceListBase and in
CEikComboBox

30) Provided a function CEikButtonBase::CopyDrawStateTo(), which
takes another CEikButtonBase* pointer as a parameter, for use in the
simple implementation of a class such as CEikLabelledOptionButton
which is a button containing another button inside itself

31) Added a GETGDITOOLS verb to MNT, which is automatically invoked
as part of any MNT TOOLS

32) Wrote a first cut of the header file EIKDIALG.H, for a dialog
that (currently) doesn't have any buttons in it (it just has an array
of CEikCaptionedControl instances, topped by a CEikMover). 
Implementation to follow shortly.


Version 0.01.023
================
(Made by DavidW, 31 July 1996)

Uses:   E32/063 F32/027 STORE/018 BAFL/034
        GDI/027 FNTSTORE/020 FBS/026 BITGDI/028
        WSERV/040 CONE/093 FONTS/028
        ETEXT/043 TBOX/064
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

Size of NOKIE.DLL (Gcc build): 124,144 bytes

From Siamak:
------------
1)  Changed to using a bitmap rather than text for the tab-out button
in choice lists (the new bitmaps have been added to the built file
EIKON.MBM, and their sources have been added to ..\srcdata)

2)  Various internal changes to choice lists and listboxes in
preparation for their use within dialogs

3)  New resource constants header file EIKLBX.HRH for listboxes

From Vipul:
-----------
4)  The three ConstructL()'s in CEikCommandButton have been replaced
by the following:

  SetTextL(const TDesC& aText);
  SetPictureL(CFbsBitmap* aMain,CFbsBitmap* aMask=NULL);
  SetPictureFromFileL(const TDesC& aFilename,TInt aMain,TInt aMask=-1);

which makes it easier for applications to create command buttons

5)  All command buttons now default to "stay clear" behaviour; if any
other type of behaviour is required, call the SetBehaviour() function
(this used to be protected in CEikButtonBase but is now public)

6)  Changed TBut2, TBut3, TBut4 to accommodate the above changes

7)  New member iPlDepth in CEikCommandButton to hold the plinth
depth; this is set to 2 pixels by default, but can be altered using
the new function SetPlinthDepth()

8)  See examples in TBut4 for buttons with varying plinth depths

9)  Enhanced TBut4.MBM by including another set of bitmaps

10) Started work on a new module EIKBUTAR.* containing a button array
class (early days here)

From Brendan:
-------------
11) New test code TColLB which is basically the same as TLBx, except
that it allows the user to create a trial new version of a listbox,
the "column aligned listbox", which is similar to CEikTextListBox,
except that the text entries can have embedded tab characters,
meaning to jump to the next column

12) In TColLB, there's an example of a listbox with three columns,
with alignments Right, Center, and Left respectively

Stop Press: TColLB fails to build under Gcc, and has been excluded
from NOKIE.OBY

From DavidW:
------------
13) New class CEikCaptionedControl, in EIKCAPC.*, supporting optional
ears, plus one "value" control and an optional "caption" (label)
control

14) These ears are larger than in the old design, and instead of
scrolling when pressed, change color, as per more recent ideas
(similar to what happens when a scrollbar button is pressed)

15) Controls get the benefit of ears, without needing to supply any
code to this end themselves, but all that's required is for the
function SetUsesEars() to be called during the construction of the
associated CEikCaptionedControl

16) See the new test code TCapC1 for an example of using captioned
controls; this code should migrate shortly to become the basis of the
CEikDialog class (clearly there's still some way to go)

17) Changed all Nokie code and test code as required by the
introduction of MCoeControlContext in CONE 093; by and large this
simplified things (as well as fixing some bugs that couldn't
otherwise be fixed)

(the main pain was changing all ActivateSystemGc()s to ActivateGc())

18) New utility function SetContextTextured() in CEikonEnv, taking a
MCoeControlBrushContext* parameter

19) Took advantage of the improved API to command buttons to reduce
the plinth depth of the tab-out button in choice lists to 1, and also
reduced the "all-round" margin of this button to 1, resulting in a
button of equal height to the rest of the choice list

20) Added an optimization to various SetPictureFromFileL routines
whereby passing TPtrC() for the filename means that the Eikon bitmap
file \e32data\eikon.mbm gets used automatically

21) Removed the line

    iCoeEnv->WsSession().SetDoubleClick(1000000,4);

from goodness knows how many test apps, since this is now taken care
of by startup code in LSHELL

22) Changed a few test apps to use the constant EEikCmdExit from
EIKCMDS.HRH rather than home-grown versions

23) Changed various bits of code that was calling SystemGc()
repeatedly to call it only once and cache the value.


Version 0.01.022
================
(Made by DavidW, 30 July 1996)

Uses:   E32/063 F32/027 STORE/018 BAFL/034
        GDI/027 FNTSTORE/020 FBS/026 BITGDI/028
        WSERV/040 CONE/092 FONTS/028
        ETEXT/043 TBOX/064
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

Size of NOKIE.DLL (Gcc build): 120,016 bytes

From Vamsi:
-----------
1)  First released version of the class CEikHorOptionButtonList, in
the new module EIKHOPBT.*

2)  New test code THOPBUT for the above, featuring two horizontal
button lists; use Up or Down to change the (currently invisible)
focus between the two lines, and eg Left or Right to change the
selected button in the focused line

From Siamak:
------------
3)  Added a tab-out button to CEikChoiceListBase, which can be
clicked on to get a pop-out list, and which animates when the Tab key
is pressed; see TChLst for an example of choice lists

(The tab-out button currently displays the text "tab", but this will
shortly be changed to a suitable bitmap)

4)  Added a new class called MEikListBoxObserver, which currently is
a root class (not inheriting from anything); this has a function
HandleListBoxEventL(), with two listbox-specific events: "item
clicked" and "enter key pressed"

From Neil:
----------
5)  The appearance of the Mover control now varies according to its
state, ie whether it is being pressed, and whether it is inactive
(potentially corresponding to the situation when a listbox has been
tabbed out from a dialog)

6)  In test code TEar1, press Ctrl+a to toggle the mover's active
state

From Vipul:
-----------
7)  Changed the Draw() function of CEikImage so as not to require a
clipping region

8)  Fixed the MinimumSizeL() function in CEikCommandButton to take
into account the size of the plinth

9)  New test code TBut4 which features some command buttons intended
as more realistic (partly by means of TBUT4.MBM containing more
bitmaps than before)

From DavidW:
------------
10) Fixed a bug I introduced earlier whereby the Legend font was
being created exactly the same as the Annotation font, ie without
being bolded.


Version 0.01.021
================
(Made by DavidW, 27 July 1996)

Uses:   E32/063 F32/027 STORE/018 BAFL/034
        GDI/027 FNTSTORE/020 FBS/026 BITGDI/028
        WSERV/040 CONE/091 FONTS/028
        ETEXT/043 TBOX/064
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

Size of NOKIE.DLL (Gcc build): 116,864 bytes

From Neil:
----------
1)  Improvements to the appearance of the mover class, including
using grips

2)  The movable window in TEar1 can now have its text changed, by
using Ctrl+T

From SimonC:
------------
3)  Started sample rich text editor application, TRTxtEd: this
creates a CEikEdwinCmp the size of the screen and allows bold, italic
or underline to be set, and the text to be cut, copied, and pasted

(there's a known EText problem with cutting or copying any text from
the first line)

4)  Also the user can press Ctrl+S to save the text (to the hard-wired
filename \nokie\tsrc\trtxted.rtx) and Ctrl+O to load it in again

5)  Changed the way an edwin calculates its size, to avoid having to
make these calculations in MinimumSizeL (which can now avoid casting
away const-ness)

6)  Changed CEikEdwin::iNumberOfLines back to being zero by default

From Vipul:
-----------
7)  Changed CEikImage to allow it to use two bitmaps at once, with
the second of these providing the mask for blitting the first; this
is necessary to allow the same bitmap to be drawn using two different
backgrounds

(this is not yet fully flicker-free, as it is waiting on additional
BITGDI functionality being made available)

8)  Various improvements to test code, eg updated TBut3 to use a new
set of bitmaps that is closer to those in spec pictures

From KevinDe:
-------------
9)  Converted the floating point editor classes in EIKFPNE.* to the
new design

10) New test code TFpne.* for the above: it creates one editor of
each of the three types, with the range set to 0-100; the fixed point
editor has 4 decimal places, and the twips editor is hard-wired to
imperial.


Version 0.01.020
================
(Made by DavidW, 26 July 1996)

Uses:   E32/063 F32/027 STORE/018 BAFL/034
        GDI/027 FNTSTORE/020 FBS/026 BITGDI/028
        WSERV/040 CONE/091 FONTS/028
        ETEXT/043 TBOX/064
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

Size of NOKIE.DLL (Gcc build): 114,268 bytes

From Vipul:
-----------
1)  CEikImage can now have its bitmap specified either by CFbsBitmap*
or by a filename plus index number - in the latter case, use the new
function CreatePictureFromFileL()

2)  CEikImage now owns its bitmap by default, ie it will destroy it
on exit, but this can be changed by calling the function
SetPictureOwnedExternally()

3)  Corrected some bugs in EIKCMBUT.CPP that were causing vertically
laid out buttons to be drawn incorrectly; also changed some calls to
SetExtentL() to SetRectL()

4)  Some minor changes to TPDraw1 and TBut2 to accommodate the above

5)  New test application TBut3 that tests buttons with pictures and
text in them; in this case, press L C or R to change the horizontal
alignment of all the buttons, or T M or B to change their vertical
alignment

From Siamak:
------------
6)  The public function DrawItem() of CEikListBox now always scrolls
if necessary to make sure that the specified item is made visible

7)  Fixed some more problems with incremental matching in list boxes

8)  Other internal changes to listbox code, eg fixing some problems
with scrollbar positioning

From Neil:
----------
9)  Changed CEikScrollBar in preparation for using the new style (ie
implemented by Wserv) of pointer repeat requests; thus the TRect
iSlowDragRect property disappears (this won't be fully operational
until the next release of Wserv)

10) Produced a first version of CEikMover in the new module
EIKMOVER.* (together with the definition of its observer class in
EIKMVOBS.*); this supports moving, but has no grips in its appearance
yet

11) Added a movable window in TEar1 to test the mover control

From SimonC:
------------
12) Added a very simple picture class CBitmapPicture to TEdwin, based
(for now) solely on the bclkmask.bmp file; there's a picture in the
multi-line editor to start with, and others can be inserted by
pressing Ctrl-I

13) CEikEdwin now has limited (and fitful) support for resizing
pictures through interacting with their rubber band; clicking on the
center blob of the picture frame on any side other than the right
creates a rubber band around the picture, which can be dragged to
resize it.  A new version of FORM will be required to make this work
better (and this will also resolve some known panics).  Some thought
will have to be given, too, to the fact that the blobs are next to
impossible to click on the rack.  Finally some drawing weirdnesses
have been traced to a known bug in BITGDI

14) Some internal improvements to CEikRubberBand, removing its
dependency on the file \nokie\inc\frame.h which can now be deleted
(since it has been superseded by the file \form\inc\frmframe.h)

15) Relocated the destruction of CEikonEnv::iParaFormatLayer and
iCharFormatLayer, during system shutdown code, so that they still
exist when EText wants to refer to them when deleting pictures inside
an Edwin

16) Various internal improvements to CEikEdwin

From DavidW:
------------
17) Rewrote TEikDrawUtils::DrawTextWithMnemonic() to streamline it,
make it more efficient, and to fix a bug

18) Moved the source for LSHELL into its own directory,
\nokie\lshell, and made the MNT BLDxxx and MNT ARMREL verbs build it
as well as NOKIE.DLL; a built LSHELL is now included in the files
fetched by "MNT GETREL" (so it's no longer necessary to build it
before running any other Nokie test code).


Version 0.01.019
================
(Made by DavidW, 25 July 1996)

Uses:   E32/063 F32/027 STORE/018 BAFL/034
        GDI/027 FNTSTORE/020 FBS/026 BITGDI/028
        WSERV/040 CONE/091 FONTS/028
        ETEXT/043 TBOX/064
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

Uses CONE 091 for the first time

Size of NOKIE.DLL (Gcc build): 112,680 bytes

From Vipul:
-----------
1)  In a significant change of design, the CEikTextDrawer class has
migrated into the CEikLabel class, which is now a subclass of
CCoeControl, and the CEikPictureDrawer class has migrated into the
CEikImage class, which is likewise a subclass of CCoeControl.  The
former module EIKIDRAW.*, EIKTDRAW.* and EIKPDRAW.* have been
withdrawn, being replaced by EIKLABEL.* and EIKIMAGE.*

(Most of what was common between the "item drawer" classes before,
that does not come under the heading of "control", is now supplied by
the TCoeAlignment class introduced in CONE 091; each of CEikLabel and
CEikImage contain a TCoeAlignment component)

2)  Changed the design of CEikCommandButton over to use the new label
and image classes; CEikCommandButton is the first class to override
the ResetGcForComponents() function from CCoeControl

3)  Developed and extended the test programs TTDRAW1.CPP, TPDRAW1.CPP
and TBUT2.CPP.


Version 0.01.018
================
(Made by DavidW, 24 July 1996)

Uses:   E32/063 F32/027 STORE/018 BAFL/034
        GDI/027 FNTSTORE/020 FBS/026 BITGDI/028
        WSERV/040 CONE/090 FONTS/028
        ETEXT/043 TBOX/064
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

First release compatible with STORE/018 GDI/027 WSERV/040 etc

Size of NOKIE.DLL (Gcc build): 112,180 bytes

Dead files that you should remove: EIKSLBM.*, EIKSLBX.* and EIKLBD.*

Note that you have to build LSHELL before you can run any Nokie app
(a built LSHELL will be released as part of Nokie from the next
release onwards)

From KevinDe:
-------------
1)  LSHELL now scans for its list of files dynamically, listing files
*.APD in Debug builds and *.APP in Release builds; as a result, the
file \e32data\dll_list.txt is no longer used and can be deleted

Note that the build settings for all live test code have been altered
so that instead of building eg Temp0D.DLL and Temp0.DLL, they now
build Temp0.APD and Temp0.APP

Also the obey file Nokie.OBY has been altered to rename the *.EXE
files built by Gcc to be *.APP files

2)  Clicking on the System button will now bring the LSHELL
application to foreground (or, if it is already in foreground, it
will send it into background again); this involved converting the
class CEikOffScreenWindow in the module EIKOFWIN.* to the new design

3)  On system startup, LSHELL now initializes the double click
settings and the keyboard repeat settings to the same values as used
to be set by the Eikon Server

From Neil:
----------
4)  Changed the strategy for drawing grips.  Filling in all the rects
between every line, individually, was taking far too much time;
switched to a simpler system whereby the owner of the grip draws the
background first, before calling the grip, to draw the lines

Note: strictly speaking this isn't flicker free, but in most cases no
flicker actually shows (particularly on the rack), and further Wserv
changes are pending which will further decrease the occurrence of any
flicker; overall, the result is preferable to all the other schemes
that have been considered so far, each of which involves a high
memory cost or speed degradation

5)  Modified the test code in TScrlB0 so that larger grips can be
viewed

From Siamak:
------------
6)  Followed another set of suggestions from Bill and MartinB for
reducing the size of the listbox API (albeit at the cost of
emasculating it, eg zoom support has been removed from listboxes)

7)  CEikStandardListBox has been renamed to CEikTextListBox; its
module has changed its name from EIKSLBX.* to EIKTXLBX.*

8)  CStandardListBoxModel has been renamed to CTextListBoxModel; its
module has changed its name from EIKSLBM.* to EIKTXLBM

9)  Scrollbar support is back in listboxes, eg the LSHELL program
now has it

10) Fixed a problem with incremental matching in listboxes, and set
the listbox in LSHELL to be incremental matching

11) Advanced users of listboxes should note that the model class
MBitmapAndTextListBoxModel has been replaced by MTextListBoxModel,
which inherits from MListBoxModel

12) Also, instead of CBitmapAndTextListItemDrawer, there is now just
CTextListItemViewer

13) The interface class TListBoxDrawInfo has been dropped, and so the
module EIKLBD.* has been deleted

From DavidW:
------------
14) Converted Nokie code and test code as required by the new GDI etc

15) On a suggestion from MartinB, changed the build settings of all
live Nokie test code so that the preprocessor definitions of _WINDOWS
and WIN32 are no longer set

16) Removed some "unreachable code" from some test applications
(thanks to the Release mode compiler in MSVC for spotting this).


Version 0.01.017
================
(Made by DavidW, 23 July 1996)

Uses:   E32/063 F32/027 STORE/017 BAFL/034
        GDI/025 FNTSTORE/019 FBS/025 BITGDI/027
        WSERV/039 CONE/089 FONTS/028
        ETEXT/042 TBOX/062
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

Size of NOKIE.DLL (Gcc build): 110,431 bytes

From KevinDe:
-------------
1)  Nokie nows runs with its own shell program, LSHELL, instead of
the Window Server shell; this is an Eikon list box (if you still get
the Window Server shell, check that the STARTUP line in WSINI.INI in
\e32data specifies LSHELL not SHELL)

2)  LShell acts on either an Enter keypress or a pointer-up to launch
the program highlighted; drag and scroll off the bottom to expose
other names not originally visible

3)  LShell captures the Ctrl+Alt+, and Ctrl+Alt+. key combinations to
adjust the LCD constrast, and captures Ctrl+Alt+Tab to bring itself
to foreground (or, if already in foreground, to send it into
background again)

From Neil:
----------
4)  New module EIKSCBUT.* containing CEikScrollButton, a button with
a triangular pointer, used inside scrollbars (and potentially
elsewhere too)

5)  Changed CEikonEnv::DrawPolygon() to set the brush style from
null to solid on entry, and back to null again on exit

6)  Changes in EIKSCRLB.* to utilize the scroll buttons (instead of
just have a blank area in place of the buttons), and changes to test
code TSCRLB0 to test them

7)  Removed Set(Clear)ScrollBarFrameFlags() functions in EIKSBFRM.*
in favor of custom functions for each former flag

8)  Changed CEikEdwin code in line with the above changes

From SimonC:
------------
9)  Converted EIKEDCMP.* and EIKRUBTL.* to the new (Nokie) design -
although much of EIKEDCMP remains commented out, pending the
rearrival of dialogs

10) Improved test code TEDWIN0 so that it is possible to use the up
and down arrow keys to navigate between the single line editors

11) Various other improvements to edwin code based on suggestions by
MartinB.


Version 0.01.016
================
(Made by DavidW, 22 July 1996)

Uses:   E32/063 F32/027 STORE/017 BAFL/034
        GDI/025 FNTSTORE/019 FBS/025 BITGDI/027
        WSERV/039 CONE/089 FONTS/028
        ETEXT/042 TBOX/062
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

Size of NOKIE.DLL (Gcc build): 103,008 bytes

From SimonC:
------------
1)  Eikon is dependent on EText(042) and TBox(062) again

2)  Converted a large part of EIKEDWIN.* to the new design, including
clipboard and scrollbar support

3)  New test code TEdwin, which creates five different one-line edit
windows and one multi-line edit window complete with scrollbar; as
for many of the other test applications, move the focus by clicking
in a control

From Vamsi:
-----------
4)  Implementation of CEikOptionButton, in the new module EIKOPBUT.*

5)  Implementation of TEikButtonCoordinator, added to EIKBUTB.*

6)  New test code TOpBut1.* for both of the above features

From Neil:
----------
7)  Simplification of sprite-handling code in test application TEar1,
with the result that the second bitmap file, EARMASK.MBM, is no
longer required, and can be deleted from hard disks

From Vipul:
-----------
8)  Combined CEikTextDrawer and CEikPictureDrawer to produce a base
class CEikItemDrawer from which the above two classes are now
derived; this has led to the creation of a new module EIKIDRAW.*

9)  Introduced a TMargin8 struct, in EIKDUTIL.H for now, to hold four
different TUint8 margin values (for left, right, top and bottom)
rather than just assuming that all four of these values will be the
same; the restriction to a TUint8 saves 96 bytes per class instance
compared to the full TMargins struct from GDI.H

10) Changed the system for specifying text or bitmap alignment, to
use the values such as EHLeftVBottom from COEDEF.H

11) New static function PlaceInRect(), currently in CEikItemDrawer,
taking an outer rect, an inner size, and a TEikItemPos "alignment"
value, producing the corresponding "inner rect"

12) Converted test code as required by the above changes

From DavidW:
------------
13) Converted all Nokie code and test code to match CONE 089; the
main change (apart from in test code) was to rename EEventChanged to
EEventStateChangedL everywhere; took the opportunity to tidy up
various test applications a bit while converting to this scheme

14) Needed to call SetAllowStrayPointers() for all menu windows

15) Split MEikMenuObserver::WarnMenuDisplayL(TInt aMenuId,
CCoeControl* aMenuWindow) into two functions, each of which are more
type-precise: in DynInitMenuPaneL() the CCoeControl* is typed as a
CEikMenuPane*, and in DynInitMenuBarL() it is typed as a CEikMenuBar*

16) Simplified various pieces of test code in the light of the above
change

17) Recompiled TEXTURED.PBM and EIKON.MBM since they turn out to be a
few bytes different from before.


Version 0.01.015
================
(Made by DavidW, 20 July 1996)

Uses:   E32/063 F32/027 STORE/017 BAFL/034
        GDI/025 FNTSTORE/019 FBS/025 BITGDI/027
        WSERV/039 CONE/088 FONTS/028
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

Size of NOKIE.DLL (Gcc build): 87,840 bytes

From DavidB:
------------
1)  First stage of converting the MNFE classes to the Nokie design,
in a new version of EIKNUMED.*

2)  New test code TNumed that demonstrates some of the features of
numeric editors

From Vipul:
-----------
3)  New command button class, CEikCommandButton, in the new module
EIKCMBUT, for what's sometimes been called "action buttons" or "push
buttons"; each command button can contain a CEikTextViewer, and will
shortly be able to contain a CEikPictureViewer as well

4)  New test code, TBut2, to test command buttons

5)  Feedback is welcome on the look and feel of these buttons; note
that the idea of scrolling the text (as in TBut1) has been dropped
just now, and all that changes when a button is pressed is the color
scheme and the plinth type

6)  Introduced the Legend font in CEikonEnv, which is a bolded
version of the Annotation font, and which is the default font for the
legends printed on command buttons

7)  Extended CEikTextDrawer to cope with being asked to draw text in
a rectangle that isn't wide enough for all of the text (this gets
tested in TBut2)

8)  Started work on yet another new class, CEikPictureDrawer, in the
module EIKPDRAW.* (no test code available for this yet); this class
will probably be partially merged with CEikTextDrawer before long, to
produce (eg) a CEikItemDrawer superclass

From Siamak:
------------
9)  New module EIKLBD.* defining a class (or, more practically a
struct) TListBoxDrawInfo holding various bits of drawing-related
information that needs to be shared between the listbox control,
view, and item drawer; this has the effect of eliminating some data
being duplicated in two or more classes, and reduces the API of
CListItemDrawer

10) Listboxes now have some settable color attributes, for their
background color, text color, etc

From Neil:
----------
11) The first main phase in converting the scrollbar system to Nokie
is complete - there are now modules EIKSBOBS.H (scrollbar observer),
EIKTHUMB.* (scrollbar thumb), EIKSCRLB.* (scrollbar itself), and
EIKSBFRM.* (scrollbar frame); no scrollbar buttons yet, though

12) New test code TScrlB0 which is a simplified version of the old
TScrlB0 from \eikon\tsrc

13) Improvements to the drawing code for CEikGrip: the grip is now
centered in the rectangle passed to Draw(), instead of leaving all
blank space at the end

14) Another slight change to CEikonEnv::FillRect(), which now resets
the Gc brush style to null on exit

From DavidW:
------------
15) Changed to draw the standard flashing cursor by XORing with
white, as opposed to XORing with dark gray as before (which gave very
insipid results).


Version 0.01.014
================
(Made by DavidW, 19 July 1996)

Uses:   E32/063 F32/027 STORE/017 BAFL/034
        GDI/025 FNTSTORE/019 FBS/025 BITGDI/027
        WSERV/039 CONE/088 FONTS/028
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

This release incorporates some (but not all!) of the Eikon
submissions in my in-tray - more to come later

Stop press - for some reason only the first two of the ten test apps
seem to run on the rack - this sounds more like a repro-ing problem
than a software problem (I've often had my suspicions about that
rack-C) so I won't hold up the release for that

From SimonC:
------------
1)  Many changes to menu code as suggested by code and design reviews

2)  Improvements to the appearance of menus, in line with visuals
supplied from the spec team; eg the menu highlight now joins smoothly
onto the associated pane

3)  Changed to another version of the "textured" bitmap

4)  Added more features to test code TMenu3 (copying from the old
TMenuB0 by Bret)

5)  Changed CEikonEnv::FillRect() so that it sets the Gc brush style
to solid

6)  Removed #includes of <nokie.rsg> from a few *.CPP files where it
was not needed

From Siamak:
------------
7)  Made most of the remaining changes to the listbox code that were
suggested by the review committee, as well as other changes to try to
reduce the size of the API (and to follow current coding guidelines)

8)  The various flavors of ConstructL() no longer take position and
size arguments; instead it is up to the client application to invoke
eg SetExtentL() on the listbox after calling ConstructL()

9)  Functions in the public API of CEikListBox such as
SetCurrentItemIndex(), ClearSelection(), and HandleListUpdateL(),
which used (optionally) to redraw the relevant portions of the
listbox, no longer do any kind of drawing; instead it is up to the
client to explicitly ask the listbox either to draw individual items,
using the new DrawItem() function, or to draw all visible items,
using DrawNow()

10) To get/set the selection state in a single-selection listbox,
clients now need only to call CurrentItemIndex() and
SetCurrentItemIndex() respectively, since in a single selection
listbox, the current item (provided the listbox is non-empty) is
always selected; in contrast, to do the same thing in a
multi-selection listbox, use SelectionIndexes() and
SetSelectionIndexes() as before

From Vamsi:
-----------
11) Converted the CEikProgressIndicator control, in the module
EIKPROGI.*

12) New test code TPROGI.* containing three differently styled
progress indicators; press Ctrl-F to make them go forwards or Ctrl-B
to make them go back.


Version 0.01.013
================
(Made by DavidW, 18 July 1996)

Uses:   E32/063 F32/027 STORE/017 BAFL/034
        GDI/025 FNTSTORE/019 FBS/025 BITGDI/027
        WSERV/039 CONE/088 FONTS/028
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

From Vipul:
-----------
1)  Started the CEikTextDrawer class, in the new module EIKTDRAW.*

From DavidW:
------------
2)  Refined the CEikButtonBase class as suggested at an earlier
design review meeting, and made corresponding changes in the test
code TBut1

3)  Added back some of the "Eikon Debugging keys" via the class
CEikDebugKeys in the module EIKDEBUG.*; keys currently supported are

        Ctrl-Alt-Shift-R        forces redraw of whole screen
        Ctrl-Alt-Shift-F        turns on Window Server flushing
        Ctrl-Alt-Shift-G        turns off Window Server flushing
        Ctrl-Alt-Shift-A        displays alloc info for local heap
        Ctrl-Alt-Shift-B        info on File Server resources
        Ctrl-Alt-Shift-C        info on Window Server resources

4)  Test apps should no longer explicitly call SetAppUi as part of
their ConstructAppL() functions, since this is now done inside the
CEikAppUi::ConstructL() call - right at the beginning (the change was
needed so that the CEikDebugKeys object could get added to the
control stack at the right time)

5)  Changed every #include of <e32virt.h> to <e32keys.h>

6)  Extended the CEikTextDrawer class, providing independent test
code TTDraw; press L C or R to make the texts Left Center or Right
aligned in their boxes; or T M or B to make them Top Middle or Bottom
aligned vertically; or 1 2 or 3 (or the mnemonic for a given box) to
make that box the emphasized one (and to make the formerly emphasized
one, if any, move to a partially emphasized state)

7)  Fixed the font initialization in CEikonEnv::InitSystemFonts() to
ask for "Thin" rather than "Arial" for the AnnotationFont(), which
avoids an inappropriate font being matched when other *.GDR files may
be present on the PC

8)  Removed the function CEikonEnv::TexturedBitmap(), that used to
return a CFbsBitmap* pointer to the textured bitmap, in favor of a new
utility function CEikonEnv::SetTexturedBrush(CGraphicsContext& aGc)

9)  Based on the latest design of CEikButtonBase, implemented
CEikCheckBox, which turns out to be a very thin class!  See also the
new test code TChkBx1, which features five check boxes, all
differently sized, two of which are dimmed, and one of which supports
a visually distinct indeterminate state; try clicking on the boxes,
or press 0 through 4 to animate one of them.

PS I've just noticed that there's a compiler warning in EIKLBX under
Gcc; sorry for not picking this up earlier; this will be removed for
the next release


Version 0.01.012
================
(Made by DavidW, 17 July 1996)

Uses:   E32/063 F32/027 STORE/017 BAFL/034
        GDI/025 FNTSTORE/019 FBS/025 BITGDI/027
        WSERV/039 CONE/088 FONTS/028
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

From Siamak:
------------
1)  Many changes to listbox header files and implementation, taking
into account recommendations from recent review meetings (other
changes remain pending); perhaps the most visible change is that
"item viewer" has been systematically renamed to "item drawer"

2)  Added the file SINGLE.CPP to \nokie\src as a service to other
Eikon authors (similar to EMPTY.CPP) - see the comment in this file
for more details of its purpose

From Vipul:
-----------
3)  Made EikDrawUtils::DrawText(...) work for alignments other than
left (note: this function has now been renamed DrawTextWithMnemonic)

4)  New test code TUTIL to test EikDrawUtils functions

From DavidW:
------------
5)  Added two more functions to EikDrawUtils: ClearBetweenRects() and
DrawBetweenRects(); the former just calls the latter after setting
the passed Gc to have null pen and solid brush (which get reset at
the end of ClearBetweenRects() to solid pen and null brush); these
functions are to be preferred to using a clipping region to achieve
the same effect, since they avoid the IPC overhead of transferring
the details of the clipping region

6)  Changed TEMP0 to use EikDrawUtils::ClearBetweenRects() rather
than its home-grown version of that function

7)  Based on a suggestion from Nick Healey, changed the standard
error text for KErrDoesNotExist from "Does not exist" to "Not found"


Version 0.01.011
================
(Made by DavidW, 16 July 1996)

Uses:   E32/063 F32/027 STORE/017 BAFL/034
        GDI/025 FNTSTORE/019 FBS/025 BITGDI/027
        WSERV/039 CONE/088 FONTS/028
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

From Vipul:
-----------
1)  Started the EikDrawUtils class, in new module EIKDUTIL.*

2)  The first function in EikDrawUtils is a variant of DrawText()
that supports flicker-free redrawing of text containing an underlined
mnemonic character

3)  Converted code in EIKMENUP.CPP and EIKMENUB.CPP to use this new
routine, rather than their home-grown mnemonic-drawing code

From Neil:
----------
4)  New test code TEAR1.*, containing some experimental code for
animating (scrolling) a triangular "ear" over a textured background. 
This is done by using (for the first time in NOKIE.DLL or EIKON.DLL)
the sprite technology from the Window Server.


Version 0.01.010
================
(Made by DavidW, 15 July 1996)

Uses:   E32/063 F32/027 STORE/017 BAFL/034
        GDI/025 FNTSTORE/019 FBS/025 BITGDI/027
        WSERV/039 CONE/088 FONTS/028
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

This build runs on the rack, for the first time in a while!

From Neil:
----------
1)  Code for the TEikGrip class now exists in the module EIKGRIP.*

2)  Added some test code for TEikGrip into TLBX.CPP

3)  Fixed a long-standing bug with info messages in which they would
get covered up if another window was created while they were
displayed

From DavidW:
------------
4)  Upgraded to version 105 of TOOLS GCC, which means that all the
extra "forwarding" function definitions that had to be inserted
before, can now be removed (this has been done for all test apps)

5)  Changed the way hotkeys get defined in resource files, and
changed the API of the CEikHotKeysTable to match; see the latest
forms of the ..\tsrc\*.rss files for what's now required; this change
was required to work round an as yet incompletely diagnosed problem
with 16-bit access on the rack

(known defect: hotkeys don't get correctly displayed in menu panes
with this build)

6)  Converted code as required for CONE 088; among other things this
allows the CContainer class in test code TChLst to have the following
FocusChanged() function

    void CContainer::FocusChanged(TDrawNow aDrawNow)
        {
        iFocusControl->SetFocus(Focused(),aDrawNow);
        }

7)  Fixed a long-standing bug in CEikChoiceListBase which was calling
DisplayCursor() in some cases even when not Focused() - a bug caught
by a new panic check inside CEikonEnv.
    

Version 0.01.009
================
(Made by DavidW, 11 July 1996)

Uses:   E32/063 F32/027 STORE/017 BAFL/034
        GDI/025 FNTSTORE/019 FBS/025 BITGDI/027
        WSERV/039 CONE/087 FONTS/028
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

From DavidW:
------------
1)  Changed Eikon as required by the changes in CONE 087:

2)  Note that all MinimumSizeL() functions have to be changed to be
const

3)  Made more use of the new TCoeWinPos combined 2-D "corner" enum

4)  Changed all occurrences of "SystemFont" to "NormalFont"; also
changed all "BoldSystemFont" to "TitleFont", and "SmallSystemFont" to
"AnnotationFont"

5)  Had to waste some code in removing all occurrences of the former
function UseSystemFont()

6)  Removed a few calls to "RequestFocus", since system code (in
CCoeControl::HandlePointerEventL) now takes care of this properly

7)  Some functions which were formerly called off Window() for
controls are now called off DrawableWindow() instead, as the latter
remains public, but the former is now protected.


Version 0.01.008
================
(Made by DavidW, 10 July 1996)

Uses:   E32/063 F32/027 STORE/017 BAFL/034
        GDI/025 FNTSTORE/019 FBS/025 BITGDI/027
        WSERV/039 CONE/086 FONTS/028
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

From Siamak:
------------
1)  The incremental matching option for listboxes has been reinstated

2)  Improved the display of listbox items, ie less blank space
following the last visible item in the listbox

3)  Test app NOKLBX has been renamed to TLBX for consistency with the
other apps

4)  Improvements in the list box control header file

5)  Various other internal changes in list box code

6)  Fixed a couple of minor bugs in the MNT.CMD and NOKIE.RSS files

From DavidW:
-----------
7)  Added some additional placeholder error texts at the end of
EIKSYSER.RA - ie one for each of the new KErrXxx values that have
appeared in E32STD.H since the last time I checked (these text
messages are expected to be taken over shortly by E32).


Version 0.01.007
================
(Made by DavidW, 9 July 1996)

Uses:   E32/063 F32/027 STORE/017 BAFL/034
        GDI/025 FNTSTORE/019 FBS/025 BITGDI/027
        WSERV/039 CONE/086 FONTS/028
        E32TOOLS/034 EIKTOOLS/106 RCOMP/305

Converted to E32/063 et al

The result of switching to the new compiler was an immediate 24.2%
reduction in codesize, for the Gcc build

That's definitely a step forward, but there's an equally definite
step back, in that due to some as yet undiagnosed feature, any Eikon
program that uses a hot-key table crashes the entire rack stone dead
when the table is loaded

After five hours of putting in dozens of infomsgs, I've found that
the crash occurs in a totally innocent line of code; until it's
proved otherwise, I'm going to blame the Gcc compiler for this, in
particular assuming that some kind of register corruption has taken
place

(of course if Cygnus had delivered a half-decent debugger, it ought
to have been possible to tie this one down, conclusively, in a
fraction of the time - too bad the debugger's on the omission list
now)

Back on the plus side, all template instantiations can go.

But back on the negative side, there's arguably a *worse* "MI across
the DLL boundary" bug than before, for which the workaround is to
place the following block of lines of code

private: // workaround horrific Gcc compiler bug
    void ProcessCommandL(TInt aCommandId)
                {CEikAppUi::ProcessCommandL(aCommandId);}
    void SetEmphasis(CCoeControl* aMenuWindow,TBool aEmphasis)
                {CEikAppUi::SetEmphasis(aMenuWindow,aEmphasis);}
    void WarnMenuDisplayL(TInt /*aMenuId*/,CCoeControl* /*aMenuWindow*/)
                {}
    void HandleAttemptDimmedSelectionL(TInt /*aCommandId*/)
                {}
    TBool CheckHotKeyNotDimmedL(TInt /*aCommandId*/)
                {return(ETrue);}
    void RestoreMenuL(CCoeControl* aMenuWindow,TInt aMenuId)
                {MEikMenuObserver::RestoreMenuL(aMenuWindow,aMenuId);}

in the definition of your CEikAppUi derived class (of course, if you
have got an independent body for eg the WarnMenuDisplayL function,
you miss that line out of the above "workaround" section).

Fail to do that, and the Gcc compiler will simply stop, reporting an
error, but not telling you what the error is.

More precisely, if your class inherits (directly or indirectly) from
a mixin that is defined in a different DLL, you have to provide, in
your DLL, bodies for *all* of the virtual functions defined by that
mixin.

Anyway, once you've got all that sorted out, you can run any Eikon
test app that doesn't have a hotkey table.  Out of the five live
Eikon test apps, that rules out four, leaving only TBut1.  Moral:
steer well clear of the rack for the time being (but follow the
discipline of getting your code to clean compile and link under Gcc)

Other changes:
--------------
1)  Note that BITGDI can no longer open "single" .PBM files; you have
to create a "multiple bitmap file" (*.MBM file) instead, using the
tools MULTIPBM; there's a batch file BLD.CMD in ..\srcdata that joins
together all the live Eikon bitmaps; this creates the file EIKON.MBM
that gets included in the ROM (and which lives in \e32data for WINS),
together with the generated header file \e32inc\eikon.mbg, which
defines some enum values that you may need to use in code

2)  To add another bitmap, be sure to archive its .BMP version in
PVCS, as well as its .PBM version, and then alter BLD.CMD to include
that in the list of source files

3)  Changed all calls CancelClipping() into one or other (or both!)
of CancelClippingRect() or CancelClippingRegion()

4)  Removed all remaining calls to Validate() and replaced them with
appropriate calls to BeginRedraw() etc

5)  Tidied up the MNT.CMD and *.OBY files, etc, not to download or
include any components apart from those used by the current Eikon
code (thereby excluding eg C32, GRID, ETEXT, TBOX, CLOCK, EALWL,
PRINT, PDRSTORE, ...).


Version 0.01.006
================
(Made by DavidW, 8 July 1996)

Uses:   E32/062 F32/026 STORE/016 BAFL/032 C32/018 ESOCK/020
        NCP 005 GDI/024 FNTSTORE/018 FBS/024 BITGDI/026
        WSERV/038 PDRSTORE/008 PRINT/015 CLOCK/020
        GRID/064 CONE/083 ETEXT/040 TBOX/059 FONTS/027
        EALWL/022 E32TOOLS/028 EIKTOOLS/105 RCOMP/305

From DavidW:
------------
1)  Changed various functions in controls that used to be
parameterised like
        void GetXxx(TInt* aValue) const;
to be parameterised instead like
        TInt Xxx() const;

Likewise changed various functions from the form
        void SetXxxL(const TInt* aValue);
to
        void SetXxxL(TInt aValue);

Finally for parameters of "larger type", eg TLargeType, the idea
(suggested by SteveT) is to change from eg
        void GetXxx(TLargeType* aValue) const;
        void SetXxxL(const TLargeType* aValue);
to
        void GetXxx(TLargeType& aValue) const;
        void SetXxxL(const TLargeType& aValue);
(removing the chance that callers will pass uninitialised pointers)

2)  Added a utility function TSize SizeDelta() to TEikPlinth, and
modified various pieces of existing code to use this

3)  Changed CEikButtonBase over to the "four drawstates" system, with
new protected function DrawState() returning the TDrawState value

4)  Changed the button class in TBut1 over to this scheme; this now
matches the latest button spec as suggested by Bill and Nick (though
the visuals on the rack take a bit of getting used to)

5)  Changed EIKON code in line with the improvements in the
"SetFocus()" and "FocusChanged()" system introduced in CONE 085

6)  Reinstated the CEikonEnv functions DrawCursor() and HideCursor(),
but (in line with suggestions made a while back) the coordinates that
should be passed to DrawCursor() should now be relative to the
window, rather than to the control

7)  Improvements to TChLst test code, which now contains a sample
"container control" which other test code could usefully copy (until
such time as CONE/EIKON contains a class like that); this container
now contains three choice lists plus two secret editors; the first of
the choice lists supports incremental matching and therefore has a
flashing cursor when focused

8)  Continuing along the path of removing moribund test code, the
source directory ..\demo has been deleted

9)  To reduce the number of "mistaken" hits during eg Find In Files,
all file ..\src\*.cpp and ..\inc\*.h* that aren't part of the live
build of EIKON have been deleted and removed from the LI.PRJ file (of
course, copies of them still exist in the \eikon source directory).


Version 0.01.005
================
(Made by DavidW, 6 July 1996)

Uses:   E32/062 F32/026 STORE/016 BAFL/032 C32/018 ESOCK/020
        NCP 005 GDI/024 FNTSTORE/018 FBS/024 BITGDI/026
        WSERV/038 PDRSTORE/008 PRINT/015 CLOCK/020
        GRID/064 CONE/083 ETEXT/040 TBOX/059 FONTS/027
        EALWL/022 E32TOOLS/028 EIKTOOLS/105 RCOMP/305

For the first time, NOKIE is released in all three "standard
variants", ie WINS Debug and Release, and GCC Release

From SimonC:
------------
1)  Changed source code and test code as required, so that a NOKIE
ROM can be built

2)  Changed TEXTURED.PBM to be the same as the one used by Brendan,
which has much better effect

From Siamak:
------------
3)  Development of choice list code (the code for tabbing out a
listbox still needs some work doing on it)

4)  New test code TCHLST to test standalone choice lists

From Neil:
----------
5)  Converted the secret editor code to the new control design (no
test code for it yet, though).


Version 0.01.004
================
(Made by DavidW, 5 July 1996)

Uses:   E32/062 F32/026 STORE/016 BAFL/032 C32/018 ESOCK/020
        NCP 005 GDI/024 FNTSTORE/018 FBS/024 BITGDI/026
        WSERV/038 PDRSTORE/008 PRINT/015 CLOCK/020
        GRID/064 CONE/082 ETEXT/040 TBOX/059 FONTS/027
        EALWL/022 E32TOOLS/028 EIKTOOLS/105 RCOMP/305

From SimonC:
------------
1)  Menu bars are now operational again; try pressing F9 (or Alt) in
the new test application TMenu3, derived from TMenuB0 of old (only the
Exit command has any effect yet)

2)  The visuals of menus have changed quite a lot; take a look and
see (arguably the single-pixel thin text for eg "Ctrl+E" gets lost on
the textured background; we really need to look at this on the rack
soon, before commiting too much further to it)

3)  Changed the name of the bitmap MENUBACK.PBM to TEXTURED.PBM, and
moved the code that accesses it into CEikonEnv

From Siamak:
------------
4)  Started converting choice lists to the new design; the module
EIKCHLST.* now compiles, but doesn't yet get exercised by any code

5)  New resource constant header file EIKCHLST.HRH

From DavidW:
------------
6)  New module EIKBUTB.* for a totally new implementation of the
CEikButtonBase class, which makes much fewer presuppositions than the
corresponding class from old:

7)  The class CEikButtonBase doesn't presuppose anything about the
button face scrolling on transit between the up to down states;
instead, a subclass has to provide (at least) DrawUp(), DrawDown(),
and DrawPressed() functions; optionally the function
DrawHavingTransitioned() can also be supplied; in principle radio
buttons, check buttons, and command buttons could all be implemented
as subclasses of CEikButtonBase

8)  By default the button reports an ECommand event to its observer
(if any) on the PenUp of a click; use SetReportOnPointerDown() to get
the event reported on the PenDown instead; replace the function
ReportButtonClickL() to report an event other than ECommand

9)  New test application TBut1 that starts to demonstrate some of the
potential of CEikButtonBase, by providing its own subclass
CTestButton; the detailed visuals of this example need to be
improved, but some of the basic behaviour of CEikButtonBase can be
seen; click on any of the buttons, or press 0 1 or 2 to animate one
of them

10) Removed all old test code from \nokie\tsrc, to speed up PVCS
operations (there is of course an independent copy of it in
\eikon\tsrc).


Version 0.01.003
================
(Made by DavidW, 4 July 1996)

Uses:   E32/062 F32/026 STORE/016 BAFL/032 C32/018 ESOCK/020
        NCP 005 GDI/024 FNTSTORE/018 FBS/024 BITGDI/026
        WSERV/038 PDRSTORE/008 PRINT/015 CLOCK/020
        GRID/064 CONE/082 ETEXT/040 TBOX/059 FONTS/027
        EALWL/022 E32TOOLS/028 EIKTOOLS/105 RCOMP/305

From SimonC:
------------
1)  Development of the CEikMenuPane class according to the new
design:

2)  Menu pane background is now a textured bitmap

3)  Menu pane item highlights extend right across the menu pane

4)  Menu corners are now always square, and the border is handled by
a CEikPlinth

5)  The "dotted rect" style for de-focused current menu items (ie
when a cascade has been launched for them) has been superseded by the
new design (try the test code TEMP0 and see)

6)  Some menu positioning logic has been changed, etc

7)  Added EIKMENUB.* to the NOKIE project - this file compiles, but
doesn't run (yet)

8)  Moved the functions FillRect() and DrawPolygon() (back) into
CEikonEnv, for now

From Siamak:
------------
9)  Development of the CEikListBox class family:

10) The 6 "main" list box modules are now part of the NOKIE build

11) The list box border is now handled by a CEikPlinth

12) List box flags are now private, being protected by accessor
functions, just like CCoeControl

13) New test code NOKLBX allowing the main features of listboxes
to be exercised: click on the screen background to get a pop-up menu
allowing to choose/swap a single column and a multi-column list box

From DavidW:
------------
14) Development of the Temp0 test code, which now draws an array of
12 rects, each with plinths, and with the spacing between the plinths
configurable by a new menu option (allowing testing of packing flags)

15) Started EIKBORDR.H, which will in due course replace EIKPLNTH.H

16) Converted EIKON code and test applications, as required by CONE
083 changes

17) There's a new virtual function in the MEikMenuObserver mixin,
MakeModal(), which removes the need for a CCoeControlStack* (or
equivalent) parameter to eg the CEikMenuBar construction

18) CEikonEnv needs its own independent copy of the CEikAppUi*
pointer, since it can't rely on casting the MCoeAppUiBase* pointer
held in CCoeEnv property (why not?).


Version 0.01.002
================
(Made by DavidW, 2 July 1996)

Uses:   E32/062 F32/026 STORE/016 BAFL/032 C32/018 ESOCK/020
        NCP 005 GDI/024 FNTSTORE/018 FBS/024 BITGDI/026
        WSERV/038 PDRSTORE/008 PRINT/015 CLOCK/020
        GRID/064 CONE/081 ETEXT/040 TBOX/059 FONTS/027
        EALWL/022 E32TOOLS/028 EIKTOOLS/105 RCOMP/305

From Siamak:
------------
1)  Started the conversion of list box modules to the new CONE
design; among many other changes

*) all references to scrollbars have had to be commented out for now

*) #includes of COEREQD.H and EIKREQD.H have all been removed

From DavidW:
------------
2)  Based on ideas by Siamak, Simon, and (mainly) Bill, developed a
new class TEikPlinth, in the module EIKPLNTH.*, encapsulating the
following "border" styles:

    *) sunken box, raised box, or none

    *) single height, double height, triple height ...

    *) external shadow or not

    *) dense packing option

The functions provided by the new class are

    *) a constructor (combining all the above info into a TInt)

    *) setters and getters for all the attributes of the plinth

    *) a Draw() function, passing a Gc and a TRect, which is the
"outer" TRect for the border

    *) functions to give the widths of each of the four sides of the
border (as a TMargins instance), and utility functions to convert
between the inner and outer rects for the border

The test code Temp0 has been rewritten so that its main control
sports a plinth, whose attributes can be altered either by the
pop-out menu cascades you get from double clicking, or by hot keys
(try 1, 2, 3, Ctrl-S, Ctrl-R, Ctrl-N, and Shift-Ctrl-S)

The test code demonstrates that the plinth (plus its surrounds) draws
in a flicker free manner.

The class *omits*

    *) support for a "sparkle" eating into the top left hand corner
of the inside TRect

    *) support for the outside shadow leaving gaps at the top right
and bottom left (of unknown color)

   *) the colors varying dynamically with the background the plinth
is sitting on.

The new implementations of controls such as menus, listboxes, choice
lists, buttons, editboxes, ... can all now use TEikPlinth.

Note: the dense packing attributes haven't been tested yet.  Nor do I
have much of an idea of what a shadowed sunken box should look like.


Version 0.01.001
================
(Made by DavidW, 1 July 1996)

Uses:   E32/062 F32/026 STORE/016 BAFL/032 C32/018 ESOCK/020
        NCP 005 GDI/024 FNTSTORE/018 FBS/024 BITGDI/026
        WSERV/038 PDRSTORE/008 PRINT/015 CLOCK/020
        GRID/064 CONE/081 ETEXT/040 TBOX/059 FONTS/027
        EALWL/022 E32TOOLS/028 EIKTOOLS/105 RCOMP/305

This is the first of what will hopefully be only a short series of
"branch" builds of EIKON, with the source code moved into the \NOKIE
directory tree instead of the \EIKON directory tree; it will all be
moved back again on the completion of the conversion of the source
code to the new design

The build number has been reset to 001 (as befits an independent
source group)

Large parts of the build have been commented out for now; more
precisely there are only 7 modules linked into the DLL (as opposed to
around 90 for EIKON); this count should rise fairly rapidly over the
next few days

And there's only one live test module for now, TEMP0, in ..\tsrc,
which relies upon the Wserv shell to run it, so you'll need to delete
the file \e32data\wsini.ini, which tells the Window Server to look
for EIKSRV.EXE to run; also you'll need to provide yourself a file
\e32data\dll_list.txt containing the line "TEMP0" in it

The dependencies of EIKON upon TBOX and GRID have been suspended for
now (pending such time as these components re-release matching Wserv
038 or later)

Only the Ascii Debug variant is released for the time being

The changes in more detail (see also the recent CONE release notes):

1)  The class CEikAppControl has transformed into CEikAppUi, and
EIKAPPC.* has transformed into EIKAPPUI.*

2)  The file EIKREQD.H has been withdrawn; some of its former contents
can now be found in the new header file EIKDEF.H

3)  Various functions that used to take pointers now take references
instead, and "const" has been used more widely

4)  Some standardization has taken place of names for resources in the
system resource file

5)  The old module EIKHKEYS.* has been renamed to EIKHKEYT.*, since
it contains the HotKeyTable class, and a new module EIKHKEYC.* has
been created, containing a HotKeyControl class; this won't normally
be seen by app writers, but it is used internally by the new function
CEikAppUi::CreateHotKeyControlL(), which can be used by applications
that want hot-key processing (eg defined by a table in the resource
file) without having to define a menu bar

6)  The relationship between the observer classes MEikCommandObserver
and MEikMenuObserver has been cleaned up, with MEikCommandObserver
now being pure virtual, and MEikMenuObserver being moved into a
separate header file, EIKMOBS.H; some of the names of the functions
in these classes have been improved

7)  Various functions with names like ConstructMsgWinL() have been
renamed simply to ConstructL()

8)  Preliminary conversion of EIKMENUP.* (the largest module
converted so far); double click in the main window in TEMP0 and
you'll get a pop-up menu with four commands in it

9)  Various drawing utilities that used to exist in CEikonEnv have
been shunted into CEikMenuPane temporarily, until a permanent home is
found for them (note that these utilities used to pass a "color
element", for run-time redirection, but this concept no longer
exists)

10) The flag EEikMenuItemHasEllipsis has been withdrawn (people
defining menus can just as easily add the ellipsis themselves).


Version 0.01.078
================  
(Made by SimonC, 27 June 1996)  
  
Uses:   E32/062 F32/026 STORE/016 BAFL/032 C32/018 ESOCK/020
        NCP 005 GDI/024 FNTSTORE/018 FBS/024 BITGDI/026
        WSERV/037 PDRSTORE/008 PRINT/015 CLOCK/020
        GRID/064 CONE/079 ETEXT/040 TBOX/059 FONTS/027
        EALWL/022 E32TOOLS/028 EIKTOOLS/105 RCOMP/304 


From Siamak:
--------------
1) Added support for zooming to listbox code. The main listbox test app, TLBOX, now uses GDI's 
TZoomFactor class (in a similar way to the Grid control) to demonstrate zooming. 

2) Various internal code changes (additional asserts, minor optimizations, etc.)

From SimonC:
--------------
3) Updated to GDI 024 et al.

4) Changed toolbars and dialogs to set their background colour rather than filling in their entire area 
before drawing any controls (necessary since, with the new WSERV and CLOCKS it is again possible 
to draw over clocks).

5) Fixed hierarchical listbox panic on the rack that ocurred when trying to expand or collapse an item.

6) Re-wrote CEikAppControl::CreateSecondToolBarL() to allow the second toolbar to have access to 
the same controls as the ‘standard’ toolbar.

7) Started a new hierarchical list subclass in tlbox2 - nowhere near finished yet.

8) On Bill’s suggestion changed the font returned by SystemFont() to be 15 pixels high rather than 18.


Version 0.01.077 
================  
(Made by SimonC, 21 June 1996)  
  
Uses:   E32/062 F32/026 STORE/016 BAFL/032 C32/018 ESOCK/020  
        GDI/023 FNTSTORE/017 FBS/023 BITGDI/025 WSERV/036  
        PDRSTORE/007 PRINT/014 CLOCK/019 GRID/063  
        CONE/078 ETEXT/039 TBOX/058 FONTS/026 EALWL/022  
        E32TOOLS/027 EIKTOOLS/105 RCOMP/304 
 
 
re-released at 3pm 24/06 without connection to comms server.  Should now run on the rack.

Uses TBOX 058, C32 018,GRID 063 and EALWL 022 for the first time 
 
From Siamak: 
-------------- 
1) Removed some unnecessary functions from the listbox API 
 
2) Various internal listbox changes. 
 
From MartinT: 
-------------- 
3) Replaced all mention of Protea on the system screen with EPOC32. 
 
From Neil: 
-------------- 
4) Improvements to the slider control: 
 
CEikSlider is now usable, although it's appearence, functionality and API may vary as spec issues are  
resolved.  See new test code TSLID0 for examples of using sliders. 
 
5) Required changing CEikTagBase and derived classes in the following ways after discussion with  
Brendan. 
 
- changed call to CreateWindowL(aParent) to be SetParentWindow(aParent) in ConstructL(). 
 
- Added a function ResetControlGc() which reverses the effect of ControlGc() and call this instead of  
ResetGc() which used to reset the background color resulting in strange effects in dialogs 
 
- Removed the TPoint aPoint parameter to ConstructL() and the subsequent call to SetPosition(aPoint)  
Any "direct" users of Tags (i.e not in a dialog) should call SetPosition() themselves after construction. 
 
- Removed call to SetReadyToDraw() from ConstructL().  Again, direct users should call this after  
construction and setting the position. 
 
6) Removed TPoint aPoint parameter and call to SetReadyToDraw for ConstructL() function of  
CEikBitmap similarly to CEikTagBase above at Brendan's request.   
 
7) Changed EIKALRM.CPP and TBMPTAG test code in accordance to the above changes 
 
From SimonC: 
-------------- 
8) Fixed most of the flicker in the hierarchical listbox drawing.  The remaining flicker is unlikely to be  
fixed. 
 
9) Added exported c’tor and d’tor to CEikToolbar. 
 
10) Tidied up dir contents listbox code. 
 
11) Fixed long standing memory leak in tlbox2. 
 
12) Made minor changes to tscrlb1 and tedwin0 to fix file selector panics on the rack. 
 
 
Version 0.01.076 
================  
(Made by SimonC, 12 June 1996)  
  
Uses:   E32/062 F32/026 STORE/016 BAFL/032 C32/016 ESOCK/020  
        GDI/023 FNTSTORE/017 FBS/023 BITGDI/025 WSERV/036  
        PDRSTORE/007 PRINT/014 CLOCK/019 GRID/061  
        CONE/078 ETEXT/039 TBOX/057 FONTS/026 EALWL/021  
        E32TOOLS/027 EIKTOOLS/105 RCOMP/304 
 
 
This release is not binary compatible with 075 
 
From Julian: 
----------- 
1) Changed the XorDraw() function in CFrameOverlay to prevent a "ghost" frame appearing in Paint  
under certain circumstances. 
 
2) Changed EIKEDWIN and EIKEDCMP to test the ETEXT functions PasteParaFromClipboardL()  
and ImportTextFileL(). 
 
3) ImportTextFileL() requires that a TTextOrganisation variable is supplied by the application.   
Currently the edwin supplies a default value. 
 
From Neil: 
----------- 
4) Following a suggestion from DavidW and in accordance to Charles' document entitiled "Designing  
UI class libraries": 
 
Removed all trace of the scrollbar visibility flags for CEikEdwin and CEikListBox (eg  
EEikListBoxAutoVScrollBar) 
 
Any app requiring scrollbars on these controls must now use the control's scrollbar frame using the  
following public functions in CEikListBox and CEikEdwin 
 
a) call CreateScrollBarFrameL() to create the controls scrollbar frame if it doesn't already exist 
 
b) call ScrollBarFrame() to get a handle to the control's scrollbar frame 
 
c) using the handle returned from b) call the scrollbar frame's SetScrollBarVisibility() function to ask  
for the appropriate scrollbars. 
 
This should be done before SetExtentL() is called.  For edwins or listboxes in dialogs the best place to  
do this is in the dialog's PreLayoutDynInitL() 
 
Also the SetScrollBarVisibilityL() function to dynamically change scrollbar visibilities for these  
controls has been removed.  This should be replaced by the same as above followed by a call to  
UpdateScrollBarsL() to take immediate effect 
 
5) As an experiment, to get round the problems with calibrating scrollbars for an Edwin with a partially  
formatted document, made the vertical scrollbar non-proportional.  Unfortuanately this now means that  
an auto visible vertical scrollbar in this case will in fact always be visible.  However for a largish  
document (when partial formatting is most useful and an auto-visible scrollbar will always be present)  
it is much better than before. 
 
6) Updated all affected test code 
 
7) Skeleton of the CEikSliderControl provided.  Not ready for use yet. 
 
From Vamsi: 
----------- 
8) Changed BoldItalicUnderlineEvent() of EikEdwinCmp to take an argument showing which event  
has just taken place. 
 
9) Removed iFontFlags, SetFontFlags() as they were no longer needed. 
 
10) Changed Write to support these changes. 
 
11) Changed CEikPageMarginsDialog to take a TPageSpec in its constructor and refuse to accept  
margins that are too large. 
 
12) Added a "goto" dialog in the new files EIKGTDG.*.  At present only the goto line option has been  
implemented. 
 
From SimonC: 
----------- 
13) Tidied up hierarchical listbox code. 
 
14) Fixed memory leak in file selector that occured if there was an OOM during construction. 
 
15) Added various clock flags to allow clocks to be created in formats other than those specified in  
TLocale. 
 
 
Version 0.01.075  
================  
(Made by SimonC, 5 June 1996)  
  
Uses:   E32/062 F32/026 STORE/016 BAFL/032 C32/016 ESOCK/020  
        GDI/023 FNTSTORE/017 FBS/023 BITGDI/025 WSERV/036  
        PDRSTORE/007 PRINT/014 CLOCK/019 GRID/061  
        CONE/078 ETEXT/039 TBOX/057 FONTS/026 EALWL/021  
        E32TOOLS/027 EIKTOOLS/105 RCOMP/304 
 
This release is binary compatable with 074 
 
From DavidW:  
------------ 
1) Cut down the minimum heap size for each eikon app to 16k to reduce RAM usage on the rack. 
 
2) Added support for debugging on the rack by adding eikrun.mak to eikon 
 
3) eikrun produces EIKRUN.EXE which is a standalone .EXE that expects a parameter like  
"tdialg1.prg". 
 
It can be used as follows: 
 
i) Get a new ROM 
 
ii} PEIGER it, and start it up 
 
iii) Run TWIN.EXE 
 
iv) Type "CD \SYS" 
 
v) Type "EIKRUN TDIALG1.PRG" 
 
TDialg1 starts. 
 
Note that EIKRUN runs the *.PRG file in the main thread of that process. 
 
It's possible that if the current directory isn't \sys, you would need to type the full path.  
 
From Siamak: 
------------ 
4) Various internal changes to listbox code. 
 
From Neil: 
------------ 
5) Fixed j-Day defect HA-120. 
 
From Vamsi: 
------------ 
6) Fixed J-Day defect HA-24. 
 
7) Fixed bug whereby edwins returned the wrong layout width if a line cursor was present. 
 
From SimonC: 
------------  
8) Fixed J-Day defects HA-83.  
 
9) Provided a temporary fix for defect HA-73.  This may make digital clocks appear too far to the left  
for now. 
 
10) Fixed a drawing bug in progress bars that was shown up by the print dialog.  
 
 
Version 0.01.074  
================  
(Made by DavidW, 31 May 1996)  
  
Uses:   E32/062 F32/026 STORE/016 BAFL/032 C32/016 ESOCK/019  
        GDI/023 FNTSTORE/017 FBS/023 BITGDI/025 WSERV/036  
        PDRSTORE/007 PRINT/014 CLOCK/019 GRID/061  
        CONE/078 ETEXT/039 TBOX/057 FONTS/026 EALWL/021  
        E32TOOLS/027 EIKTOOLS/105 RCOMP/304  
  
Candidate J-Day Eikon ROM  
  
*** Rebased on 4 June 1996 with the following changes ***  
  
*) Took J-Day versions of all components  
  
*) Removed all reference to EIKCSH, eg the \eikon\eikcsh directory  
and the eikcsh release component, since this functionality is being  
taken over by some other group (to be specified - currently versions  
of these files are released by TCPIP)  
  
*) Added two lines to the GETC32 verb of MNT.CMD, which is now  
  
    :getc32  
    set _par=%2  
    if "%_par%"=="" set _par=%_vc32%  
    cd \e32inc  
    call getrel c32 incc %_par%  
    cd \e32sys  
    call getrel c32 ewins %_par%  
    call getrel c32 edrvw %_par%  
    call getrel c32 ewinsdb %_par%  
    cd \work\emarm  
    call getrel c32 emarm %_par%  
    call getrel c32 edrvm %_par%  
    call cont %g% group  
    goto end  
  
*) Added a GETNCP verb which is called from GETCOMPS, as follows   
  
    :getncp  
    set _par=%2  
    if "%_par%"=="" set _par=%_vncp%  
    cd \e32inc  
    call getrel ncp incc %_par%  
    cd \e32sys  
    call getrel ncp ewins %_par%  
    call getrel ncp ewinsdb %_par%  
    cd \work\emarm  
    call getrel ncp emarm %_par%  
    call cont %g% group  
    goto end  
  
*) Added the following lines to PROTEA.OBY  
  
    file=\work\emarm\encp.prt sys\encp.prt  
    file=\work\emarm\elink.dll sys\elink.dll  
    file=\work\emarm\eremsv.dll sys\eremsv.dll  
  
Note: all components downstream from Eikon will need to make  
corresponding changes to their MNT.CMD and *.OBY files  
  
*) Changed the line  
  
    romalign=0x1000  
  
in EIKON.OBY to  
  
    romalign=0x10  
  
resulting in a 16% reduction in the size of the *.IMG file produced  
  
*** End of rebasing changes ***  
  
A note on build numbers:  
------------------------  
Yes I know there are later builds of E32 F32 etc etc than I have used  
to build this Eikon - but it doesn't matter, since they're all binary  
compatible, aren't they?  (The latest builds will be included in the  
Protea ROM)  
  
Similarly there's no need for any app that's already built with eg  
Eikon 073 to rebuild with Eikon 074  
  
A note on running in Release mode on the PC:  
--------------------------------------------  
Before starting, rename the file \e32sys\ecuartd.csy to ecuartd.ccc  
(or some other extension, apart from *.csy)  
  
Before running in Debug mode again, rename it back again.  
  
Do *not* rename or delete the file \e32sys\ecuart.csy for either  
build - it's required in both cases!!  
  
All this will be sorted out in the post J-Day thaw  
  
From Siamak/SimonC:  
-------------------  
*)  Put back a few of the clipping regions which had been removed in  
the last few releases, since it appears they're needed after all  
  
From Julian:  
------------  
*)  Fix to the DrawAsGlassDoor() function in TEdwin1 to ensure that  
every pixel is drawn to  
  
From DavidW:  
------------  
*)  Couldn't get to the bottom of why the system crashes when I try  
to start an app in response to a program button being pressed on the  
rack; however I've found empirically that the crash doesn't occur if  
there's an alert just beforehand, so I've left in one of my debugging  
alerts, so that the program buttons aren't useless  
  
(bonus J-Day points to anyone who can get to the bottom of this!)  
  
*)  Fixed a bug whereby something like Alt-C could deliver a 'C'  
keycode to the main window, instead of to the menu bar, in the case  
when no menu title had 'C' for its mnemonic  
  
*)  Fixed the bug whereby the Assign Buttons dialog had no effect on  
the rack (a "C::\\" had crept in, instead of "C:\\")  
  
Other fixes that were too late:  
-------------------------------  
My apologies to every else who tried to submit bug fixes for Eikon,  
but which I have set aside, in order to manage to release Eikon  
before J-Hour  
  
  
Version 0.01.073  
================  
(Made by DavidW, 31 May 1996)  
  
Uses:   E32/061 F32/025 STORE/015 BAFL/032 C32/015 ESOCK/017  
        GDI/023 FNTSTORE/017 FBS/023 BITGDI/025 WSERV/036  
        PDRSTORE/007 PRINT/014 CLOCK/019 GRID/060  
        CONE/078 ETEXT/038 TBOX/056 FONTS/026 EALWL/021  
        E32TOOLS/027 EIKTOOLS/104 RCOMP/304  
  
It's five minutes to J-Hour, yet no fewer than nine people still have  
their sticky fingers in Eikon code!  
  
Binary compatible with Eikon 072 (well, sort-of, again!)  
  
Eikon now depends on C32:  
-------------------------  
The slippery slope continues - last time ESOCK, this time C32; see  
the relevant sections in MNT.CMD and EIKON.OBY for some changes  
  
Note that the *.INI file that gets renamed to ESOCK.INI is now  
MINW.INI (on WINS) and MINM.INI (on GCC)  
  
From Julian:  
------------  
1)  Important: the effective protocol of the functions  
CEikDoor::Draw() and CEikDocument::DrawAsGlassDoor() has changed;  
Write and TEdwin1 have been changed to match, but Word, Paint and  
Draw will need to be changed before J-Hour (the way these  
applications treat doors in the Protea 011 ROM is wrong)  
  
2)  The change is that the CEikDoor::Draw() function now pays  
attention to its MGraphicsDeviceMap parameter, and therefore supports  
zooming  
  
3)  The change also simplifies what document classes have to provide  
in their DrawAsGlassDoor() function, and in fact most of the  
parameters passed in this function should now be ignored (these  
trailing parameters will be removed in the post J-Day API thaw)  
  
4)  Another important change: the changes in 072 re automatically  
using a file with the application's name if none is explicitly given,  
were incomplete in the area of New File; this scheme has now been  
developed further, with changes made in the TEdwin1 sample app  
  
5)  Associated with this, the form of the canonical CmdFileSaveL()  
function, for write-once store file-based apps, changes *back* to  
  
    if (!iDocumentChanged)  
        iEikonEnv->InfoMsg(R_EIK_TBUF_NOTHING_TO_SAVE);  
    else  
        {  
        if (IsSubApp())  
            iDocument->SaveDataToContainerL();  
        else if (iFileLoaded)  
            DoFileSaveL();  
        else  
            CmdFileSaveAsL();  
        }  
    }  
  
ie with a test on iFileLoaded reinstated  
  
6)  Internal changes, in synch with the above changes, to the  
LoadStartDataL() and CmdFileRevertL() functions of CEikAppControl  
  
From Adam:  
----------  
7)  Whole new directory of code, \eikon\eikcsh\*.*, that builds to  
produce a utility program EIKCSH.PRG of use to the Comms team (and  
potentially to others); CSH stands for Console SHell since it can  
launch up to six console screens serving applications  
  
8)  If you start EIKCSH by itself, from eg the Eikon System screen or  
the real shell, you won't be particularly impressed, but bear in mind  
that it starts doing something useful when other programs connect to  
it  
  
9)  Changed the ScreenSize() function of CEikConsoleScreen to be  
IMPORT_C and non apparently inline (in fact it was never actually  
inline, since it is virtual)  
  
From SimonC:  
------------  
10) Moved menu panes down slightly, to stop them overwriting the  
descenders of the text in the menu titles; note that it's now clear  
that 10 items in a menu is too many  
  
11) Improved the coloring of the bitmaps used by the file browser  
  
12) Changed the way digital clocks determine whether to show am/pm,  
by consulting the TLocale; the showampm flag is now redundant  
  
13) Tidied up file selector code some more  
  
14) Removed some unnecesssary clipping regions  
  
15) Temporary block in the SaveAs dialog to prevent a filename  
exceeding 8.3 being typed in (since the rack filing system can't  
handle any such filename yet)  
  
From Neil:  
----------  
16) Considerably improved the appearance of the character map  
control, as used in the "Insert symbol" dialog: the text was being  
drawn too low in each box  
  
17) As an experiment, changed the font used in the character map  
control to be the system font, rather than the small system font  
(which was too hard on the eyes on the rack, in this control); the  
result is now much more legible than before, albeit at the cost of  
leaving less background screen area to see the underlying window  
  
18) Fixed a bug in the HandlePointerEventL function of the character  
map control, in which it was impossible to click on an item in the  
bottom row of the control  
  
19) Tidied up some code in the Secret Editor control, replacing magic  
numbers with KEikXxx values  
  
20) Figured out why various displays (eg the Secret Editor) had  
recently changed to gray from white - and traced this to a bug in  
BITGDI (now fixed)  
  
From Bill:  
----------  
21) Two functions in EIKDCLBM have been made virtual (without  
compromising binary compatibility, as it turns out): Item() and  
ItemIsParent()  
  
From Siamak:  
------------  
22) Various changes to the listbox code to fix bugs to do with  
scrolling (mainly in multi-column listboxes)  
  
23) Reduced the usage of SetClippingRect()  
  
From Brendan:  
-------------  
24) Fix to EIKALRM.CPP to fix a bug when snoozing an alarm that had  
already been silenced  
  
(Did you know: when an alarm is snoozed, you can press Tab to task  
away from it; later this functionality will be taken over by any of  
the task keys being pressed)  
  
From Kevin:  
-----------  
25) Fix to EIKNUMED.CPP to allow the max and min of a numeric field  
to be set equal to each other  
  
From DavidW:  
------------  
26) Had to comment out the code that handles a click on a Program Bar  
buttons, when no task matching that button is running yet, since this  
causes an inexplicable crash on the rack; hopefully this will be  
fixed before the J-Hour ROM  
  
(E32 061 delivers pointer events to the offscreen windows for the  
first time; those in the sidebar, such as launch the menu, cause no  
problems, but those in the program bar have proved troublesome.  Note  
however that you can always do a Ctrl-System click, to get the Task  
List, or a Shift-System click, to cycle round running tasks, or click  
on the button of a task that is already running, to go to that task)  
  
(One more warning: in WINS, think twice before launching a browser  
seeded on the \e32sys directory; due to some infelicities in the  
latest F32, this now takes Megaseconds to complete)  
  
  
Version 0.01.072  
================  
(Made by DavidW, 30 May 1996)  
  
Uses:   E32/060 F32/024 STORE/015 BAFL/032 ESOCK/016  
        GDI/023 FNTSTORE/017 FBS/023 BITGDI/024 WSERV/034  
        PDRSTORE/007 PRINT/014 CLOCK/019 GRID/060  
        CONE/078 ETEXT/038 TBOX/054 FONTS/026 EALWL/021  
        E32TOOLS/027 EIKTOOLS/104 RCOMP/304  
  
Binary compatible with Eikon 071 (well, sort-of)  
  
Important change to LoadStartDataL() call:  
------------------------------------------  
You should change any call like  
  
    LoadStartDataL(&_L("y:\\main\\*.ed0"));  
  
to   
  
    LoadStartDataL(&_L("y:\\Home\\.ed0"));  
  
where there are *two* changes to make  
  
(a) remove the star (asterisk)  
  
(b) change from \main\ to \Home\  
  
Some background to this:  
------------------------  
Basically, write-once file based apps should avoid the "no file"  
state (which they used to enter, by default, if the app was started  
without any filename being passed on the command line)  
  
Eikon code (in CEikDocument) now creates the default filename out of  
a combination of anything you specify in your LoadStartData() call  
and your GetAppName() call  
  
Thus Write ends up editing \Home\Write.wri by default  
  
If the user starts up the app, makes changes, and exits, these  
changes get saved to the default filename, without the user needing  
to confirm this (or supply a filename)  
  
The detailed UI of this will evolve after J-Day, but for now, users  
can change the filename eg using the SaveAs function  
  
(If you leave the star in, in the name you pass to LoadStartDataL(),  
the various Parse functions used end up with a star in the final  
filename, which is no good!  I've even seen a file "*.WRI" created on  
Y:, but I couldn't persuade F32 to open it again)  
  
Change to your CmdFileSaveL() functions:  
----------------------------------------  
The sample code for the CmdFileSaveL() functions for write-once store  
file-based apps has simplified, to  
  
    void CSimpleAppControl::CmdFileSaveL()  
        {  
        if (!iDocumentChanged)  
            iEikonEnv->InfoMsg(R_EIK_TBUF_NOTHING_TO_SAVE);  
        else  
            {  
            if (IsSubApp())  
                iDocument->SaveDataToContainerL();  
            else  
                DoFileSaveL();  
            }  
        }  
  
the difference being that a test on the field iFileLoaded is no  
longer made (otherwise the app will request a filename, from the  
user, on exiting, in the case when no filename has been explicitly  
provided by the user)  
  
Eikon is now dependent on ESOCK:  
--------------------------------  
See the GETESOCK verb in MNT.CMD, which you may need to copy into  
your own MNT.CMD  
  
Note: since ESOCK expects to find various files in the \e32etc (I kid  
you not) directory on the PC, you'd better change your MNT MAKEWORK  
to check this directory is made (as well as \e32data etc)  
  
(Some stage soon we might see a rationalization between \e32data and  
\e32etc)  
  
You'll also have to add four new lines to your *.OBY files:  
  
    file=\work\emarm\netsrv.dll sys\netsrv.dll  
    file=\work\emarm\esock.dll sys\esock.dll  
    file=\work\emarm\pdummy.prt sys\pdummy.prt  
    data=\e32etc\esockm.ini etc\esock.ini  
  
From Neil:  
----------  
1)  Set the ECoeWinAreaAutoValidate flag for CEikScrollBar, as  
suggested by Siamak and Bill  
  
2)  Stopped scrollbar drag events from being reported when the thumb  
position didn't actually change  
  
3)  Fixed an overflow bug in CEikScrollBar::AdjustOnlyThumbPosition,  
found by Vamsi, by using TInt64 for the intermediate calculation  
  
4)  As an experiment, changed some code in scrollbars and scrollbar  
buttons to use the shifting operators rather than explicit divides  
and multiplies  
  
5)  Changed the file selector dialog in TScrlB1 to view all files,  
rather than just *.CPP files, to make it easier to import Eikon's  
RELEASE.TXT file (a troublesome large document that exposed the bug  
above!)  
  
(Good to see that RELEASE.TXT is of some use after all!)  
  
6)  On Bill's request, changed the listbox code to stop it centering  
the view rect in the available area  
  
From SimonC:  
------------  
7)  Fixed the bug that caused TLBox1 to crash on the rack when  
switching to Z:  
  
8)  Changed digital clocks so that, for now, whether they are in 12  
or 24 hour mode will be determined from TLocale; this means that the  
flag EEikDigitalClock12Hour is redundant (and will be removed post  
J-Day)  
  
9)  Removed a couple of unnecessary calls to SetClippingRegion()  
  
From Siamak:  
------------  
10) Various internal changes to listboxes, mainly to stop the current  
item from ever disappearing when the listbox is resized  
  
From Duncan:  
------------  
11) Fixed a bug in the Font Selector dialog which sometimes failed to  
set the interminate state correctly in the check boxes  
  
From DavidW:  
------------  
12) Based on work by SimonB, added a placeholder "Link settings"  
dialog to Eikon, in the new module EIKLNKDG.*  
  
13) This is invoked from any application that wishes to make it  
available (eg any Shell programs) as follows  
  
    void CEikSysAppControl::SystemCmdLinkOptionsL()  
        {  
        CEikDialog* dialog=new(ELeave) CEikDialogLinkOptions;  
        dialog->ExecuteLD(R_EIK_DIALOG_LINK_OPTIONS);  
        }  
  
The dialog encapsulates the logic of interacting with the NETSERV  
system (part of the ESOCK release)  
  
(The current implementation of NETSERV has the effect of not  
preserving the settings between different invocations of the dialog -  
will be amended shortly)  
  
14) EXPORTed the ctor of CEikLabel  
  
15) The Eikon System screen now seeds its Document dialog to \Home\*,  
rather than to \Main\* as before; the real Shell will make the same  
change shortly.  
  
  
Version 0.01.071  
================  
(Made by DavidW, 29 May 1996)  
  
Uses:   E32/060 F32/024 STORE/015 BAFL/032  
        GDI/023 FNTSTORE/017 FBS/023 BITGDI/023 WSERV/034  
        PDRSTORE/006 PRINT/013 CLOCK/019 GRID/059  
        CONE/078 ETEXT/037 TBOX/054 FONTS/026 EALWL/021  
        E32TOOLS/026 EIKTOOLS/104 RCOMP/304  
  
Binary compatible with Eikon 070  
--------------------------------  
Even though there are new EXPORTed functions!  
  
This is possible by means of using FRZ technology:  
  
*) Rename your *previous* *.DEF file to *.FRZ, and start archiving it  
in PVCS (ie add it to the files listed in your LI.PRJ)  
  
(the *.DEF file is created as a by-product of a Gcc build)  
  
*) Change your call to MAKTRAN to put in a /z parameter  
  
Eg my \eikon\group\arm.cmd is now  
  
    call doarm eikon /d  
    call doarm eiksrv   
    call doarm eikcns /d  
    call doarm eiksys /d  
   
and the \eikon\group\doarm.cmd batch file is  
  
    set _frzpar=  
    if exist %1.frz set _frzpar=/z%1.frz  
    call maktran %1.mak %1.arm %_frzpar% %2  
    set _frzpar=  
    nmake -f %1.arm /x %1.aer  
  
(EIKON, EIKCNS & EIKSYS all build DLLs, whereas EIKSRV builds an EXE)  
  
*) FRZ stands for "frozen": take a look at the new *.DEF file, and  
you'll see that it starts off by duplicating the *.FRZ listing; all  
new functions get put on at the end, rather than being inserted in  
alphabetical order  
  
*) You'll get an error during the Gcc build phase if one of the  
functions listed in the *.FRZ file cannot be found in the new DLL (eg  
because you've changed the function signature)  
  
*) Don't forget, when you're finished, to copy the final *.DEF file  
to *.FRZ (and PVCS it again) for the sake of the *next* time you need  
to add in EXPORTed functions  
  
*) Also bear in mind that when the post J-Day API thaw hits, all  
*.FRZ files will be deleted again (which will allow us to change a  
few function signatures)  
  
*) To recap one point: there's no need for any app to rebuild with  
Eikon 071 (unless eg you want to call one of the new EXPORTed  
functions)  
  
From Simon:  
-----------  
1)  Fixed the bug that was causing file sizes and dates to overlap in  
the file selector  
  
2)  Fixed the bug that caused the button array in the file selector  
to panic the layout engine (were not a temporary kludge in place last  
time to stop this); for the first time, all button arrays should now  
be drawn properly (we hope!)  
  
3)  Changed clock factories to initialize the offset and flags  
variables to zero (necessary since clock factories are Ts not Cs)  
  
4)  Fixed an old bug concerning the positioning of text on buttons  
that also have a bitmap  
  
5)  Fixed TLBox1 to run on the rack again without crashing (except  
that it mysteriously crashes when positioned to Z:, for reasons that  
are still being investigated)  
  
From Brendan:  
-------------  
6)  Modified the SetExtentL function of CEikClock to take cognisance  
of whether it owns its window (this is actually just a workaround of  
a limitation in the present implementation of the CLOCK DLL, which  
will have to wait until after J-Day for a proper fix; in the  
meantime, some clocks will have to go back into their own windows)  
  
7)  Changed a TInt to a TInt64 instead the SetTimeOffsetInSeconds()  
function of CEikClock, so that large time offsets could be set in  
microseconds  
  
8)  Added an EXPORTed ctor for CEikClock, to allow it to be used from  
outside Eikon.DLL  
  
9)  Converted TBmp so that it runs under the new clock scheme, and,  
for the first time, TBmp joins the set of Eikon test applications  
that run on the rack  
  
10) Added an EXPORTEd dtor for CEikBufTag, for the usual reasons  
  
From Siamak:  
------------  
11) Modified the HandlePointerEventL() function in CEikListBox so  
that clicking outside a popout listbox reports an  
InteractionCancelled event to its observer (allowing the observer to  
destroy the listbox) - functionality that got lost in the recent  
rationalization of this function  
  
12) Fixed a bug in CListBoxView::UpdateSelectionL()  
  
From Vamsi:  
-----------  
13) Changed the HandlePointerEventL() function of CEikEdwin to call  
ReportControlEventL(EEikCeItemClicked) in all non-trivial cases, so  
that the observer (eg the Word Application control) can do things  
like modify Bold Italic and Underline buttons in the toolbar (this is  
a cleaner solution than the one currently employed in the Write  
testcode)  
  
Don't forget to test any Eikon changes by compiling in Gcc  
----------------------------------------------------------  
*)  You may lose some J-Day points if you submit code that fails to  
compile and link cleanly under Gcc!  
  
  
Version 0.01.070  
================  
(Made by DavidW, 28 May 1996)  
  
Uses:   E32/060 F32/024 STORE/014 BAFL/032  
        GDI/023 FNTSTORE/017 FBS/023 BITGDI/023 WSERV/034  
        PDRSTORE/006 PRINT/013 CLOCK/019 GRID/059  
        CONE/078 ETEXT/037 TBOX/054 FONTS/026 EALWL/021  
        E32TOOLS/026 EIKTOOLS/104 RCOMP/304  
  
Barring accidents, this release defines Eikon for J-Day; there will  
be no header file changes, or changes in EIKON.DEF (the set of  
exported functions), until the post J-Day API thaw  
  
"Standard set" of variants: WINS Ascii/Release and GCC Release  
  
Use CLOCK 019 for the first time (binary compatible with CLOCK 018)  
  
A note about testing on the rack:  
---------------------------------  
By all means test your software on the PC, but don't neglect to test  
it thoroughly on a rack as well.  
  
Many bugs may show up only on the rack.  
  
For example, there are some known (and possibly some unknown) Gcc  
compiler bugs, that can cause software that works beautifully on the  
PC to go wrong on the rack.  
  
From DavidW:  
------------  
1)  CEikDocument now has a CFileStore* pointer iFileStore, for the  
handle of the open filestore of the "main document" (this pointer  
will probably move to the CEikProcess class later); the important  
change here is that the filestore is now kept open throughout the  
duration of editing the file, with two advantages:  
  
    (a) Sibo-style, it prevents the user editing the same document  
twice at the same time  
  
    (b) it supports deferred access to data in the store, without  
requiring it all to be read in during the first "load" stage  
  
2)  Changed the Write test application so that it sets the  
EEikEdwinPartialFormat flag, meaning (inter alia) that off-screen  
pictures won't get read in during the first load stage; the fact that  
the main file store is now kept open means that this behaviour no  
longer causes a crash when the picture does eventually need to be  
accessed (eg when the user pages down the document)  
  
3)  The above changes have a knock-on effect for the "Save" operation  
of general write-once files, since the new file must now be written  
out with a temporary name (without losing the contents of the  
original file, which may not all be in memory yet), and with a rename  
occurring at the end; this change has been made to the DoFileSave  
function of CEikDocument  
  
4)  Changed the CreateStoreLC function of TEikDocHeader to take an  
additional TFileName& parameter, to hold the filename of the  
temporary file created  
  
(there are still practical problems, though, if there is a "Save" or  
"SaveAs" request, without the whole document first having been loaded  
into memory; these will be addressed once STORE provides fuller  
support for "stores within streams")  
  
5)  The Demo test app (\eikon\tsrc\demo.*) now stores its data in a  
re-writable store, with the data in the store being kept up to date  
as the user makes changes in the application  
  
6)  Demo now runs on the rack for the first time  
  
(there is still some way to go, though, before the file-handling  
routines in Demo are properly integrated with the system in  
CEikDocument that currently handles write-once file stores; this will  
be developed further shortly)  
  
7)  Changed the file selector default always to show extensions  
  
8)  Commented out the piece of file selector code that restricts the  
files listed to those with an extension matching the seed file, since  
in practice this is almost never what the user wants  
  
9)  Two new MNT verbs, to allow easy switching of whether the E32  
console is installed (as required for running certain kinds of test  
code, eg Store test code or AGM test code), or whether the Eikon  
console is installed; just type either  
  
    MNT GETE32CONS  
  
or  
  
    MNT GETEIKONCONS  
  
with the result that the appropriate ECONS*.DLL files are placed into  
\e32sys and \work\emarm; note that both these verbs (as usual for  
Eikon MNT GETxxx verbs) take an optional additional parameter, for  
the build number (defaulting to the appropriate build number set at  
the top of the MNT file), so you could type eg  
  
    MNT GETE32CONS 061  
  
if there is a build 061 of E32 whose console you wished to fetch,  
without waiting for Eikon as a whole to make a release officially  
compatible with that E32  
  
10) Tracked down and resolved the cause of the previous version of  
WRITE not being able to load any documents containing pictures; as a  
result of changes in STORE, it's now important that the document  
stream is closed before the application is sent notification that its  
document has changed (since this will cause the application to format  
the document, which means in turn that ETEXT will go back to the  
document store to load the embedded picture; however, the latest  
STORE gives a "File sequence" panic if there's an attempt to read  
from one stream whilst a previous stream is still open)  
  
11) Fixed another problem with WRITE, not being able to do more than  
one File Open in any one session  
  
12) On Vamsi's request, changed the LayoutWidth() function of  
CEikEdwin from being protected to being public  
  
13) Introduced a flag EEikListBoxKeepModel that prevents a  
CEikListBox from deleting its iModel member in its destructor  
  
14) As requested by Brendan, changed the definition of the  
SaveProfileL() function in CEikDocument to be const  
  
From Bill:  
----------  
15) Two new "op-codes" for the Eikon Server: EEsOpCodeBringToFront  
and EEsOpCodeFindClientByName  
  
16) Changed the Eikon Server FindClientByName function to do a case  
independent match on the name  
  
From Simon:  
-----------  
17) Rewrote EIKCLOCK.* completely, based on a new design (and taking  
advantage of various features supported by recent changes in the  
CLOCK DLL)  
  
18) The definitions EEikCtAnalogClock and EEikCtDigitalClock have  
been removed from EIKCTRLS.HRH, being replaced by a single definition  
EEikCtClock; corresponding changes have been made to resource files  
  
19) It should now be much easier for applications to define their own  
additional types of clocks, by means of supplying their own  
TEikClockFactory derived class  
  
20) Clocks no longer need to have their own window at the Eikon level  
  
21) Button arrays no longer need to know about clocks being above  
them or below them - though this requires all button arrays to have  
the id EEikButtonArrayId  
  
22) For now, clocks have lost the ability to show dates; other  
changes from the previous version are that analog clocks can't set  
their background color, and digital clocks can set their background  
and text colors; the test code in TDialg0 has been updated to show  
this  
  
(note that the default for clocks is now not to show seconds)  
  
(TBmp will need some re-writing in the light of all these changes; it  
fails to compile at the moment, and has been temporarily removed from  
the set of live Eikon test applications, as listed in  
..\tsrc\bld.cmd)  
  
23) Altered the Directory Contents listbox viewer to calculate its  
column widths in proportion to the available width  
  
(however, TLBox1 often crashes in this build of Eikon)  
  
24) As a temporary measure, attempted to deal with possible OOM  
problems with the file selector by destroying it in all such cases (a  
bit OTT; this approach will be refined later)  
  
From Siamak:  
------------  
25) Added default ctor and dtor for CMultiColumnListBoxView  
  
26) Added a new public function DrawScrollBarsNow() to  
CEikScrollBarFrame; this allows controls (such as listboxes) that use  
a scrollbar frame to be able to force their scrollbars to be drawn at  
the same time as they call DrawNow() on themselves, rather than to  
wait for a redraw event (though none of the controls in Eikon call  
this function yet)  
  
27) Modified the behaviour of the multi-column listbox control when  
cursoring right or left and the next column has fewer items than the  
current one; previously, the cursor would sometimes fail to move  
right or left in this case, but now it always moves, adjusting its  
"y-value" if needed in the process  
  
28) Fixed a display bug in scrolling left/right in multi-column  
listboxes (to do with not erasing the highlight from the "old"  
current item before scrolling)  
  
29) Simplified the implementation of the HandlePointerEventL()  
function of CEikListBox  
  
30) Removed the function CEikListBox::EventOccurredInViewRect()  
  
31) Various other changes (minor bug fixes and enhancements) in other  
parts of listbox code  
  
From Brendan:  
-------------  
32) Fixed a small bug in which locking a country selector to one  
country did not always transfer the keyboard focus to the associated  
city selector  
  
33) Removed some defunct const TInt's from EIKWLDSL.CPP.  
  
  
Version 0.01.069  
================  
(Made by DavidW, 24 May 1996)  
  
Uses:   E32/060 F32/024 STORE/014 BAFL/032  
        GDI/023 FNTSTORE/017 FBS/023 BITGDI/023 WSERV/034  
        PDRSTORE/006 PRINT/013 CLOCK/018 GRID/059  
        CONE/078 ETEXT/037 TBOX/054 FONTS/026 EALWL/021  
        E32TOOLS/026 EIKTOOLS/104 RCOMP/304  
  
"Standard set" of variants: WINS Ascii/Release and GCC Release  
  
From DavidW:  
------------  
1)  Converted to E32(060) and F32(024); actually this was trivial(!)  
due to the binary compatibility - except that you have to move over  
to a new set of E32TOOLS at the same time, and slightly change the  
format of your *.OBY file; note too that you now invoke ROMBUILD  
instead of E32ROM  
  
2)  Converted to STORE(014) GDI(023) ETEXT(037) etc - which required  
rather more of a change - see the release notes of these other  
components for more details  
  
(for the first time ever, Eikon now builds in Gcc without any  
warnings whatsoever)  
  
3)  Commented back in the code to allow Date and Time fields to be  
entered, eg in TEdwin0  
  
4)  Deleted the file ..\inc\eikclipb.hrh as no longer required (the  
TUid values for clipboard types are now defined in the header files  
for the classes that understand these types, eg TXTRICH.H)  
  
5)  Made CEikGridWin::ConstructGridWinL an EXPORTed function  
  
6)  Changed the SetText() function of CEikButton to be SetTextL  
instead, and made it accept a TDesC* instead of an HBufC; the button  
now deletes any previous texts it had (fixing a bug noted by Adam);  
note that the function now creates an HBufC internally, so there is  
no need for callers to do the same  
  
7)  Provided public TextView() and TextLayout() accessor functions for  
the iTextView and iLayout data members of CEikEdwin  
  
From Vamsi:  
-----------  
8)  New module EIKRHCMP.* containing the CEikEdwinRichCmp subclass of  
CEikEdwinCmp, which has additional support for rich text editing  
  
9)  Eg CEikEdwinRichCmp contains support for Ctrl-B toggling the bold  
state, etc (code moved here from Write)  
  
10) Changed Write to use CEikEdwinRichCmp  
  
11) Renamed the iGlobalText parameter of CEikEdwinCmp to iCmpText  
  
12) Fix to LayoutWidth() function in CEikEdwin, to take account of  
the width of any margin cursor  
  
From Neil:  
----------  
13) Improved the grip drawing code for scrollbar thumbs so that the  
grip is always centered as well as possible  
  
14) Improved TScrlB0 to allow more flexible testing of larger  
scrollbars  
  
15) More changes to CEikEdwin to improve the scrollbars under partial  
formatting  
  
From Duncan:  
------------  
16) Converted the Eikon code for creating picture headers and doors  
to have NewL functions in its API  
  
17) Took advantage of changes in GDI to make greater use of native  
chevron streaming operators eg for TMargins  
  
From Doug:  
----------  
18) Took advantage of the CTextView::NotifyForwardChangedL() function  
to simplify some code in CEikEdwinCmp::ApplyParaFormatL() (and to  
improve its functionality)  
  
(later changed by DavidW to call NotifyGlobalChangeL() instead)  
  
From Brendan:  
-------------  
19) Added a virtual function RWindowGc& CEikTagBase::ControlGc()  
const, which the Draw function uses to set its Gc before drawing its  
text - this allows sneaky things to be done in derived classes, such  
as setting a patterned brush, and will allow the font preview  
specializations to be moved out of this base class in due course  
  
(Note: larger changes to the API to the more basic function  
CCoeWinArea::SystemGc() are planned for shortly after J-Day)  
  
From Siamak:  
------------  
20) CEikListBox now sets the flag ECoeWinAreaAutoValidate, which will  
cut down in flicker in cases when a DrawNow() is called when the list  
box area is already marked as invalid (eg because a dialog has been  
destroyed); this change should be completely safe since the Draw()  
function of CEikListBox always draws to all pixels (and it shouldn't  
introduce any extra flicker, because the background color of the  
listbox window has been set to NULL)  
  
21) On Bill's suggestion, changed the list box functions  
SetItemFont(), SetItemHeight() and SetColumnWidth() so that they no  
longer take an optional redraw flag as their second argument;  
instead, it is now the programmer's responsibility to ensure that the  
function HandleListUpdateL() is called after one or more such  
operations on a listbox  
  
22) Also on Bill's suggestion, modified CEikListBox::Draw() so that  
clearing of the margins and drawing of the borders now takes place  
before the drawing of the items  
  
23) Added a new (temporary) flag EEikListBoxNoBorder to EIKCTRLS.HRH;  
if this is set, CEikListBox::BorderWidth() returns 0 and the  
DrawBorders() function does nothing  
  
24) Modified the SelectionIndexes() functions of CEikListBoxView and  
CEikListBox to return a CArrayFix<TInt>* instead of a  
CArrayFixFlat<TInt>*  
  
25) Modified CMultiColumnListBoxView::SetColumnWidth() so that it  
sets the new top item index by calling SetTopItemIndex() rather than  
setting this variable directly  
  
26) Modified CEikDirContentsListBox::HandleListUpdateL() so that it  
no longer asks the view to recalculate its bottom index (since this  
task is now performed by the view when its top item index is set)  
  
27) Fixed a bug in the MoveToItemRight() and MoveToItemLeft()  
functions of CMultiColumnListBoxView (the "old" highlighted item  
wasn't being redrawn)  
  
28) Various other internal listbox code changes.  
  
  
Version 0.01.068  
================  
(Made by DavidW, 23 May 1996)  
  
Uses:   E32/059 F32/023 STORE/013 BAFL/030  
        GDI/021 FNTSTORE/015 FBS/021 BITGDI/021 WSERV/032  
        PDRSTORE/005 PRINT/012 CLOCK/017 GRID/058  
        CONE/076 ETEXT/034 TBOX/052 FONTS/023 EALWL/020  
        E32TOOLS/023 EIKTOOLS/104 RCOMP/304  
  
"Standard set" of variants: WINS Ascii/Release and GCC Release  
  
From Ian:  
---------  
1)  New "Insert field" dialog, in the new module EIKFLDD.*, for the  
user to specify a field type to insert into an editor; currently the  
only choice offered is a "Dummy" field, but the dialog definition  
also has "Date" and "Time" fields commented out for now (these are  
supported by versions of EText from 035 onwards)  
  
2)  CEikEdwin now supports functions InsertFieldL(),  
UpdateCurrentFieldL(), and UpdateAllFieldsL(), layering over editable  
text functionality  
  
(the Eikon update-all-fields code isn't very satisfactory at the  
moment since it involves two redraws of the screen, and loses the  
cursor position - this will be sorted out shortly)  
  
3)  New function RunFieldDialogL() in CEikEdwinCmp, launching the  
Field Dialog, and placing the result into the edit window  
  
4)  New standard commands in EIKCMDS.HRH: EEikCmdEditUpdateAllFields  
and EEikCmdEditUpdateCurrentField  
  
5)  New menu commands added to TEdwin0 to test the above features  
(the Edit menu now has a Fields cascade submenu)  
  
From Neil:  
----------  
6)  New class TEikDrawUtils in the new module EIKDRAW.*, which is  
intended to become the home of all Eikon drawing utility functions,  
such as DrawHorizMarkerLine() and DrawSunkenBox()  
  
7)  Whereas the above-mentioned functions used to belong to  
CEikonEnv, they are being moved to TEikDrawUtils, and with that move,  
greater flexibility is allowed for the Gc used for the drawing; by  
default, a TEikDrawUtils uses the system gc, but one can be created  
using any other CBitmapContext - eg a context for drawing to an  
off-screen bitmap  
  
8)  For now, the existing API to CEikonEnv drawing utility functions  
has been preserved (with some of the implementation starting to be  
moved to TEikDrawUtils), but after J-Day the floodgates will open  
  
9)  Changed CEikScrollBarThumb to draw its grip lines to an  
off-screen bitmap, on a thumb-resize, and subsequent drawing blits  
from that off-screen bitmap to the thumb; this eliminates the 'lag'  
effect in drawing the grip on to a very long scrollbar thumb  
  
(Note: the changeover hasn't been completed yet, with the result that  
some thumb griplines get drawn in slightly wrong places)  
  
10) A knock-on effect of the above changes is that SetModel() has to  
become SetModelL() instead; changed test code as required by this  
  
11) Fixed a bug in laying out scrollbar components  
  
From Bret:  
----------  
12) Caught up with recent changes in the set of fonts available, so  
that all the standard calendars (as visible eg in TCal) are drawn  
with sensible fonts  
  
From Vipul:  
-----------  
13) Made the HighlightToL() function of CEikMenuBar public instead of  
private, for the sake of Opl  
  
From Siamak:  
------------  
14) Speeded up horizontal scrolling in multi-column listboxes by  
scrolling the window and redrawing only those columns that need to be  
redrawn  
  
From Vamsi:  
-----------  
15) Added a Paginate dialog to EIKPRTDG.* (no test code for in Eikon  
yet though)  
  
16) New standard menu command in EIKCMDS.HRH: EEikCmdPrintPaginate  
  
From DavidW:  
------------  
17) "Quit" is dead, having been systematically replaced, throughout  
the \eikon group, by "Exit", following the Protea Style Guide; note  
that the hot-key for "Exit" is CTRL('e') not CTRL('q')  
  
18) The "Quit, losing changes" command has been removed completely,  
also as per Style Guide recommendations; applications that would  
otherwise have had a "Quit, losing changes" command should just stick  
with a "Revert to saved" command  
  
19) Anyone requesting a CEikDateEditor in a dialog will now get a  
CEikPopoutDateEditor, which is the same thing, but with a "tab"  
popout button added, giving access to the 1/3/12 month calendar suite;  
all being well, this calendar popout feature will shortly be moved  
into the standard CEikDateEditor class, and CEikPopoutDateEditor will  
be removed  
  
20) CEikHotKeyTable now supports hot-keys like '(', which have the  
Shift modifier held down when they are actioned; you define them in a  
resource file just as a PLAIN_HK, eg (from the latest TMENUB0.RSS)  
  
    PLAIN_HK { command=EMenuCommandToolsSix; key='(';},  
  
21) Made some of the hot-keys in TCal more sensible  
  
22) Changed a few pieces of resource text from eg "Insert Field" to  
"Insert field", and "Select Date" to "Select date", in line with Style  
Guide recommendations for only capitalizing the first word in such  
phrases  
  
23) If someone tries to confirm a SaveAs dialog without providing a  
(non-wild card) filename, the dialog now traps this case and gives an  
error message  
  
24) More internal changes in the Demo test app.  
  
  
Version 0.01.067  
================  
(Made by DavidW, 22 May 1996)  
  
Uses:   E32/059 F32/023 STORE/013 BAFL/030  
        GDI/021 FNTSTORE/015 FBS/021 BITGDI/021 WSERV/032  
        PDRSTORE/005 PRINT/012 CLOCK/017 GRID/058  
        CONE/076 ETEXT/034 TBOX/052 FONTS/023 EALWL/020  
        E32TOOLS/023 EIKTOOLS/104 RCOMP/304  
  
"Standard set" of variants: WINS Ascii/Release and GCC Release  
  
A note about the Protea M3 and J-day releases:  
----------------------------------------------  
I've been waiting for a consistent set of upstream software  
components, compatible with Wserv 033 (or later) and EText 037 (or  
later), before releasing a matching Eikon to serve as the basis for  
the M3 Protea ROM release (originally scheduled for 4pm today).  
  
However, this may take some time to materialize: a fairly significant  
rewrite of PDRSTORE is still underway, and there's some more  
perturbations pending from STORE 014 (newly released) and, possibly,  
from an important pending change in EXE- and ROM-building tools  
(which will allow software currently requiring an 8Mb ROM to fit  
inside 4Mb after all).  
  
I'll keep monitoring the situation closely.  My present best guess is  
that we may omit the M3 release altogether, and I'll just aim for the  
J-Day frozen release of Eikon, to appear some time Friday evening  
(where "evening" may need to be interpreted liberally!)  
  
From Siamak:  
------------  
1)  As suggested by Bill, the listbox control now uses the system gc  
for any drawing work it has to do itself (eg drawing a border), and  
it no longer creates a gc to pass to the listbox view class  
  
2)  Taking a leaf out of what happens in CTextView, the CListBoxView  
class now creates a gc by itself, for its own drawing purposes; in  
order to be able to do this, it needs to be passed a CGraphicsDevice*  
in its ConstructL function; as well as being a conceptual  
improvement, this change reduces the number of lines of code in  
interfaces to setting up listbox systems  
  
3)  The above changes mean that the HandleRedrawEventL function in  
CEikListBox is dispensed with (the version from CCoeWinArea is used  
instead); the function CreateGraphicsContextL also disappears from  
this class  
  
4)  Modified various list box scrolling functions to lessen the  
amount of actual redrawing that occurs (relying on scrolling for the  
other items)  
  
5)  Modified CEikListBox::SetItemFont() so that it doesn't panic if  
it has no view or item viewer at the time of the call  
  
6)  On Simon's suggestion, made CListItemViewer::SetViewRect()  
virtual  
  
From SimonC:  
------------  
7)  Took advantage of above listbox changes to improve the file  
selector listbox code  
  
From MartinB:  
-------------  
8)  Fixed the height selection logic in the Font Dialog so that if an  
exact match is not found, then the next smallest font is chosen  
  
9)  Stopped displaying fonts smaller than 4 points high in the font  
dialog (these fonts exist for the sake of preview and zooming, not  
for being selected in their own right); this also gets rid of the  
embarrassment of having two 1-point fonts to choose from  
  
10) Allowed the user of the font dialog to specify a graphics device  
(there's an additional parameter in the ctors of CEikFontDialog), so  
that the dialog can be used to select fonts from (say) a printer; the  
default (when the graphics device pointer is passed as NULL) is, as  
before, to use the screen device  
  
11) Added some ...Ls to function names where needed in CEikFontDialog  
  
12) Stopped EXPORTing some private functions from CEikFontDialog  
  
13) Other internal changes to font dialog code  
  
From Brendan:  
-------------  
14) Changed the SetState() function of CEikTagBase to SetStateL(), to  
allow this to be polymorphic with the function in CCoeControl  
  
From DavidW:  
------------  
15) Internal changes to the Demo test application (many more are  
still pending)  
  
16) The function CEikEdwinCmp::RunFontDialogL now takes an optional  
additional CGraphicsDevice parameter, which is passed on in turn to  
the ctor of CEikFontDialog.  
  
  
Version 0.01.066  
================  
(Made by DavidW, 21 May 1996)  
  
Uses:   E32/059 F32/023 STORE/013 BAFL/030  
        GDI/021 FNTSTORE/015 FBS/021 BITGDI/021 WSERV/032  
        PDRSTORE/005 PRINT/012 CLOCK/017 GRID/058  
        CONE/076 ETEXT/034 TBOX/052 FONTS/023 EALWL/020  
        E32TOOLS/023 EIKTOOLS/104 RCOMP/304  
  
Uses EALWL 020 for the first time  
  
From Julian:  
------------  
1)  The Eikon print dialog now has the facility for setting the page  
range to print  
  
2)  If the total number of document pages is just 1, the page range  
control gets dimmed (though currently there's no visual indication of  
this)  
  
3)  Temporary new function NewMinAndMax() for an Integer Editor,  
which does much the same job as UpdateMinAndMax(), except that it  
allows the maximum number of digits to change (eg from a 1-digit  
editor to a 2-digit), which is alright provided the function is  
called early enough in dialog initialization (eg from the  
PreLayoutDynInitL); these two functions will probably be merged in  
due course  
  
4)  Modifications to the Eikon print preview window to ensure that it  
can deal with a multi-page preview  
  
5)  Modifications to TEdwin1 test code to allow multi-page printing  
(by printing the same thing on several different pages)  
  
6)  Changed the button array in the print preview control to use the  
"dense packing" flag, and had to make minor adjustments to the button  
array code as a result (and to file selector code that uses the  
button array code)  
  
7)  The print preview window now exits on receipt of Esc  
  
8)  Workaround in integer editor to avoid a panic when an integer  
editor only has one digit and when a character is typed into it  
(which could sometimes cause a "hide cursor" panic)  
  
From Siamak:  
------------  
9)  Fixed a bug in CListBoxView::Draw(), not calculating the empty  
area at the bottom of the list properly in all cases  
  
10) Changed CEikListBox::UpdateScrollBarsL() to call Invalidate(), as  
it used to do (this had been changed to call DrawNow(), but that  
caused more flicker)  
  
From Vamsi:  
-----------  
11) Altered CEikEdwin code to take the width of any line margin  
cursor into account in the SetWordWrapL() and SetScrollBarsL()  
functions  
  
12) The SetLineCursorFormatL() function of CEikEdwin can now be  
called to change the line cursor format, as well as to initialize it;  
CEikEdwinCmp now calls this function whenever the font of its main  
text is changed, so that the line cursor font changes in synch  
  
13) New private property iLineCursorWidth in CEikEdwin, to cache this  
result  
  
From Brendan:  
-------------  
14) Removed all virtual inline functions from EIKTAG.* and EIKWLDSL.*  
(by either making them non-inline or making them non-virtual)  
  
15) World selectors now wrap around from the first entry to the last  
entry, and vice versa, rather than getting stuck at the ends  
  
16) Removed all occurrences of "temporary error message" from world  
selector code, eg when an unmatchable key was pressed  
  
From DavidW:  
------------  
17) Worked through all mixin classes in Eikon, adding EXPORTed ctors  
as required in a few cases  
  
18) Removed the function MListBoxModel::LbmCBase() as an anachronism  
  
19) Various changes to EIKMENUB.* and EIKMENUP.* to support menus  
being defined in memory, ie from other than resource files  
  
20) New test application TMenuP2 (based on an earlier version written  
by Vipul) showing how to define menus in memory, and testing that  
(eg) cascades can be supplied from a mixture of resource file and  
in-memory definitions; TMenuP2 runs on the rack as well as in WINS  
  
21) New classes CEikMenuItemArray and CEikMenuTitleArray, which are  
essentially the "model" classes for menu panes and menu bars  
respectively; these two classes are fairly simple subclasses of  
variable arrays (more code from the menu control classes could  
doubtless be transferred into these model classes)  
  
22) On a suggestion from Brendan, the Eikon Server now initializes  
the Window Server keyboard repeat settings, allowing much quicker key  
repeats to be received (after an initial pause); this makes world  
selectors seem much zippier than before, and doubtless will have an  
effect on other "continuous moving" keyboard actions.  
  
  
Version 0.01.065  
================  
(Made by DavidW, 20 May 1996)  
  
Uses:   E32/059 F32/023 STORE/013 BAFL/030  
        GDI/021 FNTSTORE/015 FBS/021 BITGDI/021 WSERV/032  
        PDRSTORE/005 PRINT/012 CLOCK/017 GRID/058  
        CONE/076 ETEXT/034 TBOX/052 FONTS/023 EALWL/019  
        E32TOOLS/023 EIKTOOLS/104 RCOMP/304  
  
*Not* binary compatible with Eikon 064 - so don't take this, if you  
want your app to remain compatible with the set included in the M2  
Protea ROM  
  
"Standard set" of variants: WINS Ascii/Release and GCC Release  
  
Uses GRID 058 for the first time  
  
From Neil:  
----------  
1)  Gave scrollbars a well-needed cosmetic facelift: the thumb is now  
drawn differently, and looks more 3-D  
  
2)  The scrollbar thumb now sports a "grip" perpendicular to the  
direction of travel, to indicate its "moveability"  
  
3)  The scrollbar shaft now has a dithered gray background  
  
4)  Changed the feedback given when a scrollbar thumb is being  
dragged: the dotted rectangle is gone, being replaced by a quite  
different effect (try it and see)  
  
5)  Also fixed a bug which reported all pointer events on the thumb  
as drag events; now only drag events get reported  
  
6)  As an experiment, in test code TScrlB0 changed to using an idle  
object to scroll the bitmap in reponse to scroll events from the  
scrollbars; the effect under WINS is a lot more noticeable than on  
the rack  
  
7)  New function DrawVertMarkerLine() in CEikonEnv, similar to the  
existing horizontal version  
  
From SimonC:  
------------  
8)  Fixed some bugs regarding reading/writing the registry variable  
determining whether, by default, file selectors show the extensions  
of filenames  
  
9)  Added new error message "Cannot be read" to EIKON.RSS, to be used  
eg instead of either "Directory cannot be read" or "Drive cannot be  
read" in cases when the information returned by F32 does not allow  
one of these two messages to be used unambiguously  
  
10) Speeded up the time in which the file browser is drawn to the  
screen, bu not population the listbox models or creating the  
scrollbars until the rest of the control is drawn; this has halved  
the time elapsed between pressing the Browse button and the browser  
being drawn, in some cases, though it also means that the Draw()  
function could now leave  
  
11) Integrated the file browser into the standard File SaveAs dialog  
  
12) Modification to CEikListBox::HandlePointerEventL to stop the  
highlight from jumping when you click on an item other than the  
current item, in a listbox that does not have the focus  
  
From Vamsi:  
-----------  
13) New function SetZoomFactor(TZoomFactor* aZoomFactor) in CEikEdwin  
supporting zooming Edwins (by default, no zoom factor is used)  
  
14) See TEdwin0 for an example of using zoom in an Edwin  
  
15) New function SetLineCursorFormat(TCharFormat& aFormat) in  
CEikEdwin allowing the format of the line (or "margin") cursor to be  
set; again, see TEdwin0 for an example (it's an acknowledged  
limitation of Form that the line cursor area isn't always correctly  
redrawn)  
  
16) Set values for the maximum lengths of the edit combo boxes used  
in the standard Text Find and Text Replace dialogs (previously, these  
values defaulted to being zero, ie no maximum length)  
  
From Julian:  
------------  
17) Removed the home-grown clipboard management functions in  
CEikEdwin, in favour of using the ones provided by EText  
  
(there are various known problems with these clipboard functions,  
some of which have already been fixed by a release of EText that  
cannot, however, presently be used by Eikon)  
  
18) New IsHorizontal() function in CEikGray16Palette  
  
From Siamak:  
------------  
19) Speeded up the clearing of the empty portion of the listbox  
viewing area, by modifiying CListBoxView::Draw()  
  
20) Added CMultiColumnListBoxView::Draw(), since MC listboxes have to  
use a different mechanism for clearing the empty portion at the end  
of their items  
  
21) Added SetItemFont() function to CEikListBox  
  
22) Fixed a bug in CEikListBox::SetItemHeight(), and redefined this  
function in CEikMultiColumnListBox, since additional work is required  
in this case to change the item height  
  
23) Improvements to the way multi-column listboxes scroll in response  
to keypresses  
  
24) Fixed a bug that occurred when using character matching in  
multi-column listboxes  
  
25) Modified CListBoxView::SetTopItemIndex() to make it safer to use,  
and redefined it in CMultiColumnListBoxView to make sure that the  
horizontal scroll offset is updated  
  
26) Modified the ListBoxView::Draw() functions so that they cope  
better with listboxes whose models contain no data  
  
27) Modified CListBoxView::SetItemHeight() and  
CMultiColumnListBoxView::SetColumnWidth() so that they recalculate  
the new top item index when the item height or column width change  
  
28) Other internal changes to listbox code  
  
From DavidW:  
------------  
29) Moved the code initializing the File Browser Format registry  
entry from the Eikon System application (EikSys.PRG) to the Eikon  
Server (so that it will still apply even when the Eikon System  
application is replaced by the real System application, System.PRG)  
  
30) Changed the character used for the line cursor ("margin cursor")  
in Edwins from '+' to a right-pointing chevron  
  
31) After some experimentation on the rack, changed the initial  
double-click settings, to allow two clicks up to 10 pixels apart to  
count as a potential double click  
  
32) Temporary kludge to avoid the bug whereby the Base would crash if  
the user clicked twice on the program bar, on icons with no matching  
application, without clearing the alert in the meantime (this will  
require changing to a proper alert service, in the Eikon Server,  
before it can be fixed properly)  
  
33) Started making changes to the menu code, to offer better support  
for menus defined in memory, and not via resource files (based in  
part on work by Vipul); this isn't complete yet, though some points  
are clear enough:  
  
34) Both the menu bar and the menu pane now respect the flag value  
EMenuArrayOwnedExternally (set privately in iFlags) and if this is  
set, don't do a delete on the menu array  
  
35) New virtual function RestoreCommandWindowL() in MEikMenuObserver,  
with the default implementation  
  
EXPORT_C void MEikMenuObserver::RestoreCommandWindowL  
                        (CCoeControl* aCommandWindow,TInt aWindowId)  
    {  
    TResourceReader reader;  
    CControlEnv::Static()->CreateResourceReaderLC(reader,aWindowId);  
    aCommandWindow->RestoreL(reader);  
    WarnCommandWindowDisplayL(aWindowId,aCommandWindow);  
    CleanupStack::PopAndDestroy();  
    }  
  
which is suitable for all "standard" Eikon applications, but can be  
overridden eg by OplR  
  
36) New function SetItemArray(CMenuItemArray*) for CEikMenuPane, and  
SetMenuTitleArray(CMenuTitleArray*) for CEikMenuBar, that should be  
suitable candidates for calling inside a variant  
RestoreCommandWindowL() function  
  
37) Note that the parmeter to the RestoreL() functions of  
CEikMenuPane and CEikMenuBar have changed from a TInt to (as is more  
standard) a TResourceReader&  
  
38) Changed the LargerBoldSystemFont() function of CEikonEnv to be  
just BoldSystemFont(), since that font isn't actually any larger than  
the standard system font (apart from the fact that it's bold).  
  
  
Version 0.01.064  
================  
(Made by DavidW, 16 May 1996)  
  
Uses:   E32/059 F32/023 STORE/013 BAFL/030  
        GDI/021 FNTSTORE/015 FBS/021 BITGDI/021 WSERV/032  
        PDRSTORE/005 PRINT/012 CLOCK/017 GRID/057  
        CONE/076 ETEXT/034 TBOX/052 FONTS/023 EALWL/019  
        E32TOOLS/023 EIKTOOLS/104 RCOMP/304  
  
"Standard set" of variants: WINS Ascii/Release and GCC Release  
  
This release is binary compatible with 063; other Eikon changes that  
have been submitted to me will remain on my in-tray until after the  
M2 release of the Protea ROM has been prepared  
  
To reiterate, there's no need for any app that works with Eikon 063  
to rebuild with Eikon 064  
  
Uses EAlWl 019 for the first time  
  
From DavidW:  
------------  
1)  J-Day is here already!  More precisely, the Eikon Server now  
tests the date  on startup, and if this is less than 1990, the date  
gets set to J-Day (31st May 1996), and the time gets set to 4pm  
  
(but for some reason the date actually ends up at 10:10 on the 2nd of  
May 1996 - as evidenced eg by a printout of the date added to the  
Eikon System screen on startup)  
  
2)  On a suggestion from Bill, changed the Small System Font (as used  
for some dialog buttons and for auxiliary menu display text) back to  
what it was before, ie Arial 154, since this still seems to exist in  
EON4.GDR, and (being non-bold) looks better for this purpose  
  
3)  Eikon.OBY now contains support for 8 Mb ROMs (eg for debugging  
purposes!); alter the "-dROMMEGS=4" in MNT BLDIMG to "-dROMMEGS=8"  
(you'll need an UTC bootrom.bin for this to work, though - see  
ROM_PROT release notes for more details)  
  
4)  Eikon.OBY now contains support for setting the ROM build number  
automatically from the %_ver% in the MNT.CMD (but I guess that E32ROM  
is seeing the "0" in eg "064" and setting the build number to 0  
rather than to 064 as intended)  
  
5)  Fixed the Eikon implementation of ECONS.DLL to display a cursor  
  
6)  Changed the Eikon implementation of ECONS.DLL not to clear to the  
end of the line on a <CR>, thereby bringing it into conformance with  
the E32 Text Windows implementation, and solving the problem of the  
commands typed into eg TWIN.EXE being overwritten  
  
From Vamsi:  
-----------  
7)  Fixed a bug in the font dialog whereby it wouldn't exit if the  
user pressed Enter without making any changes in the dialog (the  
responsibility for testing for changes in the character format passes  
to the caller, eg CEikEdCmp)  
  
From Bill:  
----------  
8)  Tweak to CEikonEnv::DrawRaisedBox(), so that buttons (and other  
users of this functions) get their top and left borders drawn with a  
single line of white  
  
From Jezar:  
-----------  
9)  Made menu panes call DrawNow() at the end of their  
StartDisplayingMenu() routine, and set the flag  
ECoeWinAreaAutoValidate for them, with the joint result that they  
appear more responsive than before (they don't have to wait for a  
redraw before their contents get filled in)  
  
Important: The death of \eikon\system:  
--------------------------------------  
10) Eikon no longer releases any files called SYSTEM.*; all these  
files have been renamed to EIKSYS.*, to avoid a name-clash when the  
(real) System application is present as well  
  
11) The source directory \eikon\system has been replaced by a (fairly  
similar) source directory \eikon\eiksys  
  
12) There's a new verb in MNT, PROMOTE, with the following contents:  
  
if exist \e32sys\eiksys.prd copy \e32sys\eiksys.prd \e32sys\system.prd > nul  
if exist \e32sys\eiksys.prg copy \e32sys\eiksys.prg \e32sys\system.prg > nul  
  
which you can use to "promote" the Eikon System to take the place of  
the real System application, in the absence of a System application  
compatible with your current build of Eikon  
  
13) Eikon.OBY renames the GCC version EIKSYS.PRG to SYSTEM.PRG.  
  
  
Version 0.01.063  
================  
(Made by DavidW, 15 May 1996)  
  
Uses:   E32/059 F32/023 STORE/013 BAFL/030  
        GDI/021 FNTSTORE/015 FBS/021 BITGDI/021 WSERV/032  
        PDRSTORE/005 PRINT/012 CLOCK/017 GRID/057  
        CONE/076 ETEXT/034 TBOX/052 FONTS/023 EALWL/018  
        E32TOOLS/023 EIKTOOLS/104 RCOMP/304  
  
"Standard set" of variants: WINS Ascii/Release and GCC Release  
  
Uses PRINT 012 and TBOX 052 for the first time  
  
You will need to add PREV.DLL to your *.OBY files  
  
(but TBOX has removed the EXPORT_C status of one of its DrawBorders  
functions again, so to avoid a link error I've had to comment out the  
critical line in Eikon's Paragraph Borders Preview control)  
  
(also this PRINT seems to have lost the ability eg to preview  
Landscape pages and make them look like Landscape)  
  
*** It will be this release of Eikon and other system components (or  
releases that are binary compatible with these) which forms the basis  
of the M2 release of the Protea ROM at around 4pm tomorrow ***  
  
From Natascha:  
--------------  
1)  Picture storing/restoring to and from file now works again in  
Write, both for door pictures and for non-door pictures  
  
(there's a known EText bug that crashes if there's a picture first  
thing in a document)  
  
2)  Various minor improvements to code in the EIKEDCMP, EIKFONTD and  
EIKPARAD modules  
  
From Julian:  
------------  
3)  New module EIKPRTPV.* containing Eikon support for the print  
preview control and window  
  
4)  TEdwin1 now has a Print Preview menu command; this only shows one  
page (because TEdwin1 only ever has five lines of data), but other  
clients of the print preview system should be able to get more than  
one page displayed  
  
From Bill:  
----------  
5)  Changed CEikButtonBase::DrawButtonShadow to be protected rather  
than private  
  
6)  Removed the CEikButton::SetBmp function that was added recently,  
since it is no longer required  
  
From Neil:  
----------  
7)  Modified CEikListBox::HandlePointerEventL so that response to  
drag events in listboxes is much faster than before (possibly by as  
much as 200%)  
  
From Siamak:  
------------  
8)  Fixed various bugs show up by further testing of listboxes (and  
multi-column listboxes)  
  
From SimonC:  
------------  
9)  Added a menu option in the Eikon System screen for file selectors  
to hide/show file extensions; this preference is stored in the  
registry, and is effective in all applications  
  
10) Changed the file selector to create a radio button group instead  
of a choice list of drives, if there are only two drives; this  
required some extra functions to be added in EIKRBUT.CPP, and  
changing CalculateRequiredSizeL to be public  
  
11) Removed CEikButtonArray::OfferMnemonicToControlsL as it wasn't  
needed  
  
12) Changed the GetClientRect() function of CEikAppControl to take  
account of a second tool bar, if one exists  
  
13) Horizontal toolbars can now be placed at the bottom of the screen  
(before they were restricted to being at the top)  
  
14) Slightly speeded up the drawing of items in a Directory Contents  
listbox  
  
15) Added first-letter matching to the Directory Contents listbox  
  
16) Fixed bugs which caused the file selector to crash when Browse  
was pressed with "(No files)" showing, and C: to be shown as the  
initial drive selected regardless of what was really selected  
  
17) Changed all calls to User::Panic to call Eikon's Panic instead  
  
From Brendan:  
-------------  
18) Updated alarm alerts to understand snoozing, ie no longer faking  
paused sounds (by setting quiet periods), and updated function names  
to reflect current thinking (Snooze -> PauseSound and DeferSound ->  
QuietPeriod)  
  
(There's a known bug in the alarm/world server that can result in a  
panic when the server is terminated and there are outstanding alarms;  
there's also a known bug in the alarm server that panics when alarm  
sounds have been switched off, and sound gets paused)  
  
From DavidW:  
------------  
19) Added a function CEikonEnv::GetErrorText(TDes&, TInt), to provide  
text corresponding to a given error value (eg -1, -2, ...); this  
funciton expects the passed buffer to be large enough (no #define is  
provided for a suitable length yet, though 40 would do for now); the  
text is read from the Eikon resource file  
  
20) Spent some more time trying to rename Eikon's version of ECONS.DLL  
to EIKCNS.DLL (since this "overwriting" problem has caused grief and  
wasted time to quite a few people), but got defeated by the crudeness  
of the MAKTRAN and E32ROM tools, so gave up again (for now).  
  
  
Version 0.01.062  
================  
(Made by DavidW, 14 May 1996)  
  
Uses:   E32/059 F32/023 STORE/013 BAFL/030  
        GDI/021 FNTSTORE/015 FBS/021 BITGDI/021 WSERV/032  
        PDRSTORE/005 PRINT/011 CLOCK/017 GRID/057  
        CONE/076 ETEXT/034 TBOX/051 FONTS/023 EALWL/018  
        E32TOOLS/023 EIKTOOLS/104 RCOMP/304  
  
The first release with E32/059 et al  
  
There's clearly a big speed up on the rack, but just as clearly  
there are places where things still need to be speeded up further  
  
See my u:\eik062b.img and u:\eik062c.img  
  
WINS Ascii and GCC Release variants (the WINS Release built badly,  
and I don't have time to rebuild it *yet* again just now)  
  
The new set of Fonts (023) has most of the "Arial" set of fonts  
excluded from it, so that we are running for the first time with  
basically the EFF set of fonts (as doctored and extended by  
Natascha); this has had a few unexpected consequences for some pieces  
of code (eg 1-month and 3-month calendars), which will need their  
font-specification code tweaked before normal service is resumed  
  
Many other developments come "automatically" with this version, eg  
you can now run the "Text Shell" by choosing TWIN.EXE from the Eikon  
System screen's "Run EXE command"  
  
Pointer events get delivered accurately for rack-Cs as well as  
rack-Bs now, though all off-screen pointer events still fail to get  
delivered in either case  
  
Preparing for Protea M2 ROM:  
----------------------------  
Due to delays in preparing this Eikon release, I'm slightly altering  
the proposed timetable for building the M2 (Milestone 2) ROM for  
Protea; I now propose to do another (consolidation) release of Eikon  
tomorrow morning (Wed 15th), which will provide the basis for the M2  
release, to be made at 4pm on Thursday 16th (24 hours later than  
previously planned)  
  
Sizes (GCC)  
-----------  
eikon.dll       374,276  
eiksrv.exe        4,100  
system.prg       20,996  
econs.dll         7,172  
eikon.rsc         6,025  
system.rsc        1,750  
*.pbm            48,112  
  
From Siamak:  
------------  
1)  CEikListBox::HandleListUpdate() now only draws the view contents,  
and doesn't bother with redrawing the borders/margins  
  
2)  A couple of unnecessary redraws have been eliminated from  
CEikListBox::HandlePointerEventL()  
  
From Vamsi:  
-----------  
3)  Improved Font Dialog so that it remembers the font size, on  
changing typeface, and selects the font size nearest to this, rather  
than defaulting to the smallest font size  
  
From Neil:  
----------  
4)  Improved the behaviour of scrollbars under partial formatting in  
Edwin; it's still not perfect, but it's better than the "half-way"  
state they were left in previously.  
  
  
Version 0.01.061  
================  
(Made by DavidW, 13 May 1996)  
  
Uses:   E32/057 F32/021 STORE/012 BAFL/029  
        GDI/020 FNTSTORE/014 FBS/020 BITGDI/020 WSERV/031  
        PDRSTORE/004 PRINT/010 CLOCK/016 GRID/056  
        CONE/075 ETEXT/033 TBOX/050 FONTS/022 EALWL/017  
        E32TOOLS/022 EIKTOOLS/104 RCOMP/304  
  
"Standard set" of variants: WINS Ascii/Release and GCC Release  
  
From Bret:  
----------  
1)  Date editors now have the option for a tab button that pops out a  
calendar dialog suite; see the date editor in TCal for an example  
  
2)  This is presently implemented as a new class CEikPopoutDateEditor  
in EIKNUMED.*, but may in time be merged with the original  
CEikDateEditor  
  
From Siamak:  
------------  
3)  Fixed bug (reported by Bill) in multi-column listboxes, by  
redefining the function SetTopItemIndex() in CEiKMultiColumnListBox  
  
4)  Removed some unnecessary #includes from EIKSLBX  
  
5)  Converted all the non-standard asserts used in EIKLB?.CPP  
  
From Vamsi:  
-----------  
6)  On the suggestion of MartinB, added another constructor to  
CEikFontDialog, which doesn't take the undetermined mask or the TDes  
for selected text  
  
7)  Streamlined some of the implementation of CEikFontDialog, by  
making more use of functionality from TXTFRMAT.*  
  
From Julian:  
------------  
8)  New classes CEikRubberBand and CEikRubberLine in the new module  
EIKRUBTL.*, making code originally developed for Paint available for  
wider use, in particular for picture scaling and cropping inside rich  
text editors (not implemented yet)  
  
9)  New class CFrameOverlay, intended to work to some extent in  
conjunction with the rubber band tool classes, but also being  
independently useful; this presently exists in a module FRAME.* in  
the Eikon group, but ought to migrate further before long  
  
From DavidW:  
------------  
10) Converted ..\tsrc\eikon.oby to be pre-processed before generating  
a test ROM, to improve support for ROM variants (copying from  
\rom_prot\group); also created MNT BLDIMG verb, with an optional  
variant parameter (defaulting to RB, to create a rack-b test ROM)  
  
11) Fixed the "ear stuck down" bug when a Leave occurred inside  
CEikonEnv::OfferEarsEventL  
  
12) Preliminary work on a new test application ..\tsrc\demo.*, very  
loosely derived from the former (broken) test app ..\demo\demo.*,  
which will before long demonstate Eikon support for apps with  
rewritable stores.  
  
  
Version 0.01.060  
================  
(Made by DavidW, 10 May 1996)  
  
Uses:   E32/057 F32/021 STORE/012 BAFL/029  
        GDI/020 FNTSTORE/014 FBS/020 BITGDI/020 WSERV/031  
        PDRSTORE/004 PRINT/010 CLOCK/016 GRID/056  
        CONE/075 ETEXT/033 TBOX/050 FONTS/022 EALWL/017  
        E32TOOLS/022 EIKTOOLS/104 RCOMP/304  
  
"Standard set" of variants: WINS Ascii/Release and GCC Release  
  
Includes Grid for the first time; you may need to alter your MNT.CMDs  
to reflect this  
  
From SimonC:  
------------  
1)  The Open File dialog now launches a file browser when the Browse  
button (used to be "Directories" button) is pressed; this allows  
users to change directory, or to select an individual file or  
directory  
  
(The relation between the standard listbox popped out from the  
filename selector control by Tab, and this file browser activated by  
Browse, has still to be resolved at the spec level: ideas welcome!)  
  
2)  Changed the constructor for the file selector dialog to take just  
one TDes*; the initial path to be shown should be passed in, and the  
path selected will be passed out  
  
3)  Fixed various bugs that were shown up by using the file browser  
properly for the first time  
  
4)  Tidied up TLBox1 in the wake of the file selector code having  
been moved out of it  
  
5)  Renamed CFileSelector to CEikFileSelector  
  
6)  Improved error handling is an invalid drive is selected  
  
7)  Added an OfferMnemonic function to CEikButtonArray, so that the  
button array in the file selector is accessible via the keyboard  
  
8)  On Bill's suggestion, altered several functions to take a  
reference rather than a pointer  
  
9)  Altered SetPathL for a DC listbox to do an update after setting  
the path  
  
10) Made CEikLabel::SetExtentL public rather than private, to allow  
labels to be constructed dynamically (as in the File Selector dialog,  
which now has a text label for its row of sort-order buttons)  
  
11) Added a function SecondToolBar() to CEikAppControl, publicizing  
the private handle iSecondToolBar  
  
From Natascha:  
--------------  
12) Added a Preview line to the Font dialog, displaying specified  
text in the font currently selected in the dialog (together with  
styling, eg bold, strikethrough)  
  
13) This has been implemented using a CEikTag, but it has been  
necessary to add the following functionality (to CEikTagBase): the  
ability to specify a minimum height, the ability to specify a maximum  
width, and the ability to set strikethrough and underline styles  
  
14) Due to a flux in ideas for the API to the font dialog, this has  
been reverted to the previous version, in which the dialog operates  
on format layers and format masks, instead of interaction directly  
with an MFormatText; corresponding changes have been made to  
CEikEdwinCmp  
  
From Kevin:  
-----------  
15) Updated MFNEs to the new TDateTime code, which should mean that  
date and time editors no longer trash the time and date bits  
(respectively) of the TDateTime* they are passed  
  
16) New control CEikDateAndTimeEditor, the combined date-time editor  
(as required by the Agenda): it's a bit rough round the edges just  
now, but it's functional  
  
17) Updated TDialg1 so that its Number Editors dialog has an example  
of this new MFNE variant  
  
18) Added some new ASSERTs to MFNE code  
  
19) Added Set() and SetAll() functions to SEikNumedField, producing a  
(modest) reduction in codesize (with some more time, this could  
probably be reduced further in this area)  
  
20) Pressing Backspace (Shift+Del) with a field selected used to  
cause a Panic - now fixed  
  
From Neil:  
----------  
21) Split CEikScrollBarFrame::MoveThumbsTo() into two functions,  
MoveVertThumbTo() and MoveHorizThumbTo(), to allow a control to alter  
a single scrollbar without having to recalculate the scroll offset in  
the other direction too  
  
22) Converted Edwin to this new scheme, and put a quick fix into  
Listbox (to be improved later to take advantage of the independence)  
  
23) Added support in TEikScrollBarModel for "inexact" scrollbars, via  
the new SetModelFromEndValues() function; also added  
AdjustOnlyModelThumbPosition() to CEikScrollBar, and  
AdjustModelThumbPosition() to CEikScrollBarFrame (better names may  
emerge for these functions later)  
  
24) Started to convert Edwin to use this new scheme as well, in the  
case when CTextView only formats its document partially, though the  
conversion isn't complete yet (and in some ways the implementation is  
more broken than before)  
  
From Siamak:  
------------  
25) Fixed some typos in ASSERT statements pointed out by Bill, which  
were causing panics every time various functions were called  
  
26) Some tidying up of the header files for CEikListBox and  
CEikListBoxView, but applications using listboxes shouldn't be  
affected; several non-essential functions have been removed from the  
public and protected interfaces to these two classes  
  
27) Fixed drawing bug that was occurring when the pointer was dragged  
inside multi-selection listboxes  
  
From DanH:  
----------  
28) New module EIKGRID.* providing a Grid Control over the  
functionality in GRID.DLL  
  
From DavidW:  
------------  
29) Changed the standard colors defined in EIKCOLOR.RH so that they  
are all exact colors in 4 shades of gray, ie 0, 5, 10, or 15 (viewed  
as Gray16 values); this shows up some interesting effects!  
  
30) Rebuilt using BAFL/029 and CONE/075; this led to a reduction in  
codesize of some 2.5% (around 10k)  
  
31) Various renames as required by the changes in Bafl, eg  
TIncrMatchXxx changes to RIncrMatchXxx, and calls to MaCBase() simply  
disappear (they were vacuous)  
  
32) Stopped some more functions from being both inline and virtual  
(which was giving rise to code bloat)  
  
33) Fixed a bug reported by Brendan whereby Eikon's version of  
ECONS.DLL wasn't being released (this explains why console  
applications failed to run on the M1 release of the Protea ROM)  
  
34) Fixed a bug pointed out by MartinD in that a CEikMover couldn't  
handle having NULL iText (as can happen when there is no title text  
for a dialog)  
  
Stop Press:  
-----------  
35) In order to E32ROM the contents of the latest Protea.OBY, you'll  
need to use an under-the-counter version of E32ROM, which you can  
fetch (eg into \eikon\tsrc) by typing "GETREL EIKON E32ROM 025"  
  
  
Version 0.01.059  
================  
(Made by DavidW, 8 May 1996)  
  
Uses:   E32/057 F32/021 STORE/012 BAFL/028  
        GDI/020 FNTSTORE/014 FBS/020 BITGDI/020 WSERV/031  
        PDRSTORE/004 PRINT/010 CLOCK/016  
        CONE/074 ETEXT/033 TBOX/050 FONTS/022 EALWL/017  
        E32TOOLS/022 EIKTOOLS/104 RCOMP/304  
  
"Standard set" of variants: WINS Ascii/Release and GCC Release  
  
From SimonC:  
------------  
1)  Moved the file selector out of test code into its own new module  
EIKFSEL.* in \eikon\src  
  
2)  The file selector's constructor now takes the path of the  
directory to be viewed on creation; the file selector dialog also  
takes a buffer to receive the file or directory selected  
  
3)  Various other changes to the directory contents and tree  
listboxes as suggested by Siamak and Bill  
  
From Siamak:  
------------  
4)  Two new listbox classes, CEikStandardListBox and  
CEikStandardMultiColumnListBox; many "standard" uses of listbox will  
now transfer from using CEikListBox to CEikStandardListBox; the  
rationale for this change is to keep the API to CEikListBox itself as  
simple as possible  
  
5)  The ConstructL() function of CEikStandardListBox doesn't require  
a pointer to a model or item-viewer, since this control will  
automatically create for itself a CStandardListBoxModel and a  
CBitmapAndTextListItemViewer; see the new files EIKSLB?.*  
  
6)  Fixed a multi-column listbox drawing bug, by changing one of the  
functions in CListBoxView to be virtual  
  
7)  Improved left/right arrow key handling for multi-column  
listboxes, by minimizing the number of item redraws  
  
From Bill:  
----------  
8)  Added SetBmp(RFbsBitmap*) function to CEikButton, to allow the  
bitmap to be specified other than by filename  
  
9)  Added exported dtor for CEikButtonArray  
  
10) Commented out some button array asserts which don't work inside  
"if" statements  
  
11) Changed CEikButtonArray::HandleControlEventL from private to  
protected so that GCC MI fixes can work  
  
From DavidW:  
------------  
12) The CEikDebugKeys object is now enabled on Release builds as well  
as Debug builds, to allow its functionality to be available on the  
rack; this is the object that allows you to do Ctrl-Sh-Alt-M to get a  
"move-me" dialog to test redrawing, etc  
  
13) Included a couple of playback scripts in the ROM, for TEdwin1 and  
TDialg0, as an example of more to come shortly (for automated testing  
and for performing timing and profiling tests); go to either of these  
applications and press Ctrl-Sh-Alt-P to start playback.  
  
  
Version 0.01.058  
================  
(Made by DavidW, 7 May 1996)  
  
Uses:   E32/057 F32/021 STORE/012 BAFL/028  
        GDI/020 FNTSTORE/014 FBS/020 BITGDI/020 WSERV/031  
        PDRSTORE/004 PRINT/010 CLOCK/016  
        CONE/074 ETEXT/033 TBOX/050 FONTS/022 EALWL/017  
        E32TOOLS/022 EIKTOOLS/104 RCOMP/304  
  
Binary compatible with Eikon 057: No app rebuilds necessary (so it  
can slot into the M1 build of the Protea ROM without causing any  
disturbance)  
  
"Standard set" of variants: WINS Ascii/Release and GCC Release  
  
From Julian:  
------------  
1)  Added a "Delete file" function to the Eikon System screen, to  
provide some stop-gap file-management facilities on the rack; this  
dialog is seeded to y:\main\* on the PC and to c:\main\* on the rack,  
but you can use the Directories sub-dialog to navigate to any other  
path  
  
From DavidW:  
------------  
2)  Additional logging facilities in the Eikon System screen (to help  
debug strange things happening on racks): logging of pointer events  
and logging of key events are now controlled independently via menu  
commands (the former is enabled by default, and the latter disabled).  
  
  
Version 0.01.057  
================  
(Made by DavidW, 7 May 1996)  
  
Uses:   E32/057 F32/021 STORE/012 BAFL/028  
        GDI/020 FNTSTORE/014 FBS/020 BITGDI/020 WSERV/031  
        PDRSTORE/004 PRINT/010 CLOCK/016  
        CONE/074 ETEXT/033 TBOX/050 FONTS/022 EALWL/017  
        E32TOOLS/022 EIKTOOLS/104 RCOMP/304  
  
"Standard set" of variants: WINS Ascii/Release and GCC Release  
  
Uses CONE 074 for the first time  
  
Build 001 of Protea ROM:  
------------------------  
This release of Eikon (or a release that is binary compatible with  
it) will be used as the basis of build 001 of the Protea ROM, to be  
made at 4pm on Wednesday 8th May  
  
Note that the Eikon System screen has the capability of running, not  
only Eikon .PRG applications, but also *.EXE files, such as CONE test  
programs, or even console-based *.EXE files (such as BAFL or E32 test  
programs)  
  
Please let me know which of your files you would like added to the  
001 build of ROM: let me know the location of the (zipped) files  
containing these files on the network, and give me a fragment of the  
PROTEA.OBY file that shows where these files have to be put inside  
the ROM (and showing whether they need to be renamed in the process)  
  
From Julian:  
------------  
1)  A print process dialog, CEikPrintProgressDialog in EIKPRTDG.*,  
now exists to show the progress of printing, using a progress info  
bar; CEikPrintProgressDialog multiply inherits from  
MPrintProcessObserver; it should be suitable for use by any Eikon  
application that prints; the full bar represents the total number of  
copies and pages to be printed  
  
2)  TEdwin1 has been modified to display the print process dialog  
after the printing dialog is confirmed  
  
(but for the time being there seems to be a stray signal panic if the  
user presses Esc on the print progress dialog)  
  
3)  Revisited the combo box code, so that it now supports a maximum  
text length being set (which is passed on to the CEikEdwin component)  
  
From Neil:  
----------  
4)  The listbox borders drawing bug should now be solved both on the  
rack and in WINS, by means of changing the CListBoxView::ViewRect()  
function to return a const TRect& rather than a TRect by value  
(thereby avoiding problems with lifetimes of temporaries)  
  
5)  Replaced a couple of "if (x<0) x=0" constructs in listbox  
(AdjustTopItemIndex) and scrollbar (CheckModelBounds) code, to avoid  
the GCC over-optimizing bug, and thereby cure various strange effects  
on the rack  
  
From Bret:  
----------  
6)  Now use CEikScrollMoveButtons instead of CEikButtons to create  
the left and right pointing push buttons in calendar dialogs  
  
7)  CEikCalDialog no longer returns ETrue in the OkayToExitL()  
function when Enter is pressed, but rather reports an event  
EEikCeInteractionConfirmed to its observer, leaving it to the  
observer to sense the date selected, and to destroy the dialog  
  
(This mechanism - rather unusual, so far, for Eikon dialogs - is  
required because one calendar dialog can get replaced by another  
part-way through, as the user switches between 1, 3, and 12 month  
views, and therefore the "dialog with wait" approach cannot be used)  
  
8)  For this reason, the static CalendarL() function takes an  
MCoeControlObserver as one of its parameters; see the code in TCal to  
see the application control handling events from the calendar dialog  
  
From Vamsi:  
-----------  
9)  Changed interface to the font dialog, CEikFontDialog, whose  
constructor now takes the arguments  
    MFormatText* aText,  
    TInt aLowerPos,  
    TInt aLength,  
    TInt aFontDialogFlags=0  
  
where aLowerPos and aLength can be passed as zero for non-rich text  
uses; note that CGlobalText derives from MFormatText, so a pointer to  
a CGlobalText can be passed as the first parameter, if desired  
  
10) The font dialog now applies the formats selected in the dialog,  
inside its OkayToExitL() function  
  
From DavidW:  
------------  
11) Based on work by Vamsi in TextEd, split the CEikEdwin class in  
EIKEDWIN.* into two, with the residual part of CEikEdwin having less  
knowledge about its text object and about the environment as a whole  
(and thereby being more portable, on both counts), and with the new  
class CEikEdwinCmp in EIKEDCMP.* providing a larger "component" for  
re-use within applications  
  
12) At the CEikEdwin level, the text object is known only via a  
CPlainText* pointer (though for the time being there are still a few  
parts of code where a cast to eg a CRichText* pointer takes place);  
on the other hand, at the CEikEdwinCmp level, the text object is  
known via a CGlobalText* pointer  
  
13) CEikEdwinCmp is derived from CEikEdwin, meaning that there is  
comparatively little difficulty in converting an app that uses a  
CEikEdwin to one that uses the richer set of functionality in  
CEikEdwinCmp  
  
14) Converted the test applications TEdwin0, TScrlB1, and Write to  
the new edwin system (TEdwin1 didn't need to change)  
  
15) Among the CEikEdwin functions that disappear (for various  
reasons) are SetFormatLayers, CreateOwnFormats, SetAttribute, and  
CreateTextL; many other CEikEdwin functions have migrated to  
CEikEdwinCmp - CEikEdwinCmp takes over lots of "Run dialog" code that  
used to be in CEikEdwin, eg dialogs for importing text, for finding  
and replacing, and for altering paragraph or character formatting  
  
16) The "Set button assignments" dialog is now able to save its  
settings on the rack (previously it failed due to trying to write to  
ROM) - even though, for now, these settings have no value (since no  
off-screen digitizer events get delivered)  
  
17) Rearranged the calendar dialog code to avoid the double redraw  
problem for the dimmed button on startup (by means of ensuring that  
the dimming of this button happens in a DynInitL() function, ie  
before the call to SetReadyToDraw() for the dialog)  
  
18) Another exported ctor: CEikComboBox.  
  
  
Version 0.01.056  
================  
(Made by DavidW, 3 May 1996)  
  
Uses:   E32/057 F32/021 STORE/012 BAFL/028  
        GDI/020 FNTSTORE/014 FBS/020 BITGDI/020 WSERV/031  
        PDRSTORE/004 PRINT/010 CLOCK/016  
        CONE/073 ETEXT/033 TBOX/050 FONTS/022 EALWL/017  
        E32TOOLS/022 EIKTOOLS/104 RCOMP/304  
  
An interim release: WINS Debug and GCC Release only; other pending  
Eikon changes will be included shortly  
  
As usual, see eik056b.img or eik056c.img on my u:\  
  
First release with GDI 020 et al: another step towards faster  
programs; it's a definite improvement (but there's still definitely  
room for more improvement)  
  
Be sure to update your MNT.CMD batch files to fetch the new EWINS  
component of FORM (rather than TBOX as before)  
  
From Siamak:  
------------  
1)  Speeded up cursor up/down in listboxes, by eliminating redundant  
item redraws  
  
2)  Removed most listbox calls to SetClippingRegion(), in favour of  
the new SetClippingRect()  
  
3)  On Neil's suggestion, modified CEikListBox::DrawMargins() so that  
it sets the clipping rect to the whole of the listbox window, in a  
way similar to DrawBorder()  
  
4)  Change to the mechanism for CListBoxView tracking when it has no  
current item  
  
5)  Further improvements to TLBox  
  
From Natascha:  
--------------  
6)  Fix to stop the paragraph colors dialog from crashing  
  
From DavidW:  
------------  
7)  Added more "default: break" statements to switch statements, to  
remove almost all GCC compiler warnings for Eikon  
  
8)  Yet another exported ctor (this time for CStandardListBoxModel)  
  
9)  Write now can save and restore files even on the rack (so long as  
there are no pictures involved).  
  
  
Version 0.01.055  
================  
(Made by DavidW, 3 May 1996)  
  
Uses:   E32/057 F32/021 STORE/012 BAFL/028  
        GDI/019 FNTSTORE/013 FBS/019 BITGDI/019 WSERV/030  
        PDRSTORE/003 PRINT/009 CLOCK/015  
        CONE/072 ETEXT/032 TBOX/049 FONTS/022 EALWL/017  
        E32TOOLS/022 EIKTOOLS/104 RCOMP/304  
  
"Standard set" of variants: WINS Ascii/Release and GCC Release  
  
Uses FONTS 022 for the first time  
  
Isn't yet able to use the forthcoming turbo-charged versions of  
BITGDI et al; please wait patiently until all intermediate system  
components are ready  
  
For rack images, see eik055b.img or eik055c.img on my u:\  
  
Sizes (GCC)  
-----------  
eikon.dll       392,196  
eiksrv.exe        4,612  
system.prg       22,020  
econs.dll         7,684  
eikon.rsc         5,722  
system.rsc        1,617  
*.pbm            77,716  
  
From Natascha:  
--------------  
1)  Further developments to the paragraph borders and paragraph  
colors dialogs; with the current release of Form, paragraph borders  
are now displayed again, around paragraphs (though with some mighty  
strange wiggling about!)  
  
(and note that, on the rack, preview borders are *not* displayed in  
dialogs yet, pending a new release of Form)  
  
2)  Improvements to the borders preview control, so that it no longer  
bursts the side of its enclosing dialog  
  
3)  These dialogs are now accessible from TEdwin0, as well as from  
Write  
  
From Julian:  
------------  
4)  Converted TEdwin1 so that it runs on the rack  
  
5)  Added access to the print setup dialogs from TEdwin1  
  
6)  Added a print command to TEdwin1, which prints the text of its  
five edit boxes through the PrintBand() function of its new class  
CSimplePrint; the printout is to a file (temp.pcl) put into the root  
directory by PdrStore  
  
From Neil:  
----------  
7)  Rearranged some listbox display code, trying to solve some  
display problems on the rack  
  
8)  These display problems haven't been solved (and it may be that  
new display problems on WINS have been introduced), but the code is  
in several aspects more efficient than before  
  
From DavidW:  
------------  
9)  FSELPRNT.PBM wasn't being properly copied into the RACK rom (bug  
in the *.OBY file), with the result that the up-arrow ("cd..") icon  
was displaying incorrectly in the directory contents listbox  
  
10) Yet more exported ctors and dtors added  
  
11) Converted Write so that it now runs on the rack; this is the  
nearest thing so far to the Eikon Word Processor running on the rack;  
you can even run up TEdwin1 style doors inside Write, and then use  
"Format picture" to scale them or crop them  
  
(File saving or loading with rich text crashes every time, somewhere  
inside EText, for reasons I don't understand yet - on both WINS and  
GCC, and regardless of whether any pictures are involved)  
  
(Also be patient with some of the formatting and redrawing problems  
for Write, which are probably due to a GCC compiler bug,  
over-optimizing some IF expressions)  
  
12) Application profile files are now created on c:\profiles on the  
rack, and on y:\profiles on the PC, and the Eikon System application  
has been altered to look for profiles in these places; you can delete  
any c:\profiles (or d:\profiles, etc) directory on your hard disk  
  
13) Fixed a potentially nasty stack-overwriting bug for dialogs  
running without wait  
  
14) The Eikon System application no longer uses a custom dialog for  
its Run App DLL command, but simply uses the standard "Open file"  
dialog from EIKCFDLG.*  
  
15) Started to cut down on the number of warning messages when Eikon  
is built under GCC, mainly (on Siamak's suggestion) adding  
    default:  
        break;  
to many switch statements, and also by changing the definition of  
various dtors from private to public.  
  
  
Version 0.01.054  
================  
(Made by DavidW, 2 May 1996)  
  
Uses:   E32/057 F32/021 STORE/012 BAFL/028  
        GDI/019 FNTSTORE/013 FBS/019 BITGDI/019 WSERV/030  
        PDRSTORE/003 PRINT/009 CLOCK/015  
        CONE/072 ETEXT/032 TBOX/049 FONTS/021 EALWL/017  
        E32TOOLS/022 EIKTOOLS/104 RCOMP/304  
  
Contains WINS Ascii/Release variants and GCC Release variant  
  
Uses CLOCK 015 and E32TOOLS 022 for the first time  
  
For built IMGs, see EIK054b.IMG and EIK054c.IMG on my U: (for B- and  
C- racks respectively)  
  
(The EIK054c.IMG is theoretical only; I only get a solid black screen  
on the only rack-C I've been able to try it on; mind you I suspect  
this rack-C is kaput, since every other attested rack-C IMG I've  
tried on it has equally stuck on the black screen of death)  
  
Again, there are more running test programs than ever before - so  
much so that the popped out Applications list box, in the Eikon  
Shell, now sports a scrollbar  
  
The above IMGs are built with some UTC re-released BITGDI files,  
available on r:\eikon\temp, that cause a significant speed increase  
for *certain kinds* of graphics; other kinds of graphics speed  
increase are pending, but the BITGDI (etc) changes for them are  
binary incompatible with other system components at the moment, and  
so will need to work their way through a proper release cycle  
  
From DavidW:  
------------  
1)  IMPORTANT: Eikon now releases a version of the file WSINI.INI,  
placed into \e32data by Eikon's MNT GETREL, which will overwrite any  
copy of that file you have there already - but it's not a long file,  
so you won't lose much sleep over this, and in any case, if this file  
was important to you, you had a copy of this in one of your source  
directories already, didn't you? (Eikon's copy is in ..\srcdata)  
  
2)  The contents of Eikon's WSINI.INI file is presently  
        STARTUP EIKSRV  
        GRAY 4  
which forces the Window Server into four shades of gray on the PC,  
and which specifies the startup program for the Window Server to run  
(overriding the default behaviour, which is to run a program called  
SHELL.*); this WSINI.INI is also added into the *.OBY file  
  
3)  As you will deduce from above, the startup program that Eikon  
releases is no longer called SHELL.DLL (or SHELL.DLL for the rack),  
but EIKSRV.*  
  
(The name of the program started in turn by EIKSRV remains as SYSTEM  
for the time being)  
  
4)  On Bill's suggestion, the GETBLD for Eikon now automatically  
includes a call to MNT TOOLS; thus (extract from MNT.CMD)  
    :getbld  
    call ..\group\mnt getsrc %2  
    call ..\group\mnt tools  
    call ..\group\mnt getcomps  
    goto end  
  
5)  The line invoking MAKTRAN in the batch file ..\tsrc\doarm.cmd is  
now  
        call maktran %1.mak %1.arm /d /fEikMain__Fv  
  
with the /f parameter (you'll need MAKTRAN 022 to support this)  
ensuring that the correct function gets set as the first export in  
the application DLL, even if you also have other EXPORT functions  
  
6)  Fixed WRITE so that it compiles links and runs again (but only  
under WINS - not on the rack)  
  
From SimonC:  
------------  
7)  Changed EIKDCLB*.* and EIKDTLB*.* in the light of a header file  
review by Siamak  
  
8)  Many of these changes can be considered cosmetic, but the most  
important are that CDirContentsListBoxModel no longer inherits from  
MBitmapAndTextListBox, and that the UpdateL() functions in the DC  
list are now called CreateContentsListForCurrentDirL()  
  
9)  Removed some unnecessary functions and improved the handling of  
various error conditions encountered within the file selector  
  
From Siamak:  
------------  
10) More work on TLBox, list box test code  
  
11) Fixed bug in the SetTopItemIndex() function of CEikListBox, which  
wasn't updating any scrollbars  
  
12) Fixed bug in the SetCurrentItemIndex() function of CEikListBox,  
which wasn't changing the selection state in the case of  
single-selection listboxes  
  
13) Renamed CEikListBox::GetSelectionIndexes() to SelectionIndexes();  
it now simply returns a pointer to the "selection indexes" array held  
by the listbox view  
  
From Neil:  
----------  
14) Converted TScrlB1 and TScrlB2 to run on the rack  
  
From Bret:  
----------  
15) Added left- and right-pointing triangle push buttons to move the  
calendar view backwards and forwards  
  
(These are presently implemented by non-scaling bitmaps stolen from  
Hcil, which are a bit too big for the button size - hence the funny  
effects, especially in the 12 month version).  
  
  
Version 0.01.053  
================  
(Made by DavidW, 1 May 1996)  
  
Uses:   E32/057 F32/021 STORE/012 BAFL/028  
        GDI/019 FNTSTORE/013 FBS/019 BITGDI/019 WSERV/030  
        PDRSTORE/003 PRINT/009 CLOCK/014  
        CONE/072 ETEXT/032 TBOX/049 FONTS/021 EALWL/017  
        E32TOOLS/021 EIKTOOLS/104 RCOMP/304  
  
Uses BAFL 028, CONE 072, WSERV 030, and PRINT 009 for the first time  
  
Runs even more test applications on the rack - see my u:\eikon053.img  
  
Contains WINS Ascii/Release variants and GCC Release variant  
  
From Neil:  
----------  
1)  EIKSBMAN.* has been deleted, since all known clients of it have  
converted to scrollbar frame technology instead  
  
2)  On request from DanH, added (inline) CEikScrollBarFrame functions  
to return the scrollbar visibilities  
  
3)  Fixed a console bug which left the screen corrupted when  
scrollbars were removed  
  
4)  Added functionality for listboxes to pass on their scrollbar  
flags to the scrollbar frame when it is created  
  
5)  Added an exported ctor for CEikScrollBar  
  
6)  Converted TScrlB0 to run on the rack  
  
7)  Major re-write of TScrlB0 to allow much more testing of some of  
the more obscure scrollbar layouts: button presence/ size/  
auto-dimming can all now be changed independently for both scrollbars  
  
From SimonC:  
------------  
8)  Added some support for keyboard navigation to the drive selector  
in the file selector: Up from the top of the directory browser goes  
there  
  
9)  Recompiled all bitmaps used in TLBox1 to 2 bits per pixel rather  
than 4  
  
10) Changed the names of some enums in eiklbx.h and eikdclbm.h that  
were overlooked last time  
  
11) Added the function CurrentItemIsParentOfDir(TInt aItemIndex) to  
eikdclbm to simplify some pieces of drawing code  
  
12) Made various changes to TLBox1 so that the file selector is  
displayed in a more consistent state on creation  
  
13) Fixed a bug that was preventing Directory Contents list boxes  
getting single-click pointer events  
  
14) Improved the way a hierarchical listbox removes all items from  
its model  
  
From Siamak:  
------------  
15) More work on the test code for listboxes - this has highlighted a  
few bugs  
  
16) CListItemViewer::DrawActualItem() is no longer pure virtual, but  
has an empty body, imposing fewer requirements on subclassers  
  
17) CListBoxView::DrawItem() no longer asserts that the specified  
item is visible  
  
From Bret:  
----------  
18) Moved the definitions of the "standard" 1, 3, & 12 month calendar  
dialogs from TCAL.RSS to EIKON.RSS  
  
19) Likewise moved CCalDialog from test code into EIKCAL.*, making  
changes to it en route to ensure it no longer requires any special  
cooperation from the application control  
  
20) Created a wrapper function CCalDialog::NewCalDialog() to trap  
CalendarL() in case it leaves; this function sets the exit status to  
reflect whether this occurs  
  
21) Had a go at changing some of the calendar drawing mechanism to  
use MapColors(), but had to leave this commented out for now (since  
the Window Server currently fails to allow access to this Gdi  
functionality)  
  
From Brendan:  
-------------  
22) Re-ordered some of the inlines in EIKTAG.INL and EIKWLDL.INL to  
ensure that functions aren't called before their body has been seen  
(otherwise the GCC compiler gets confused)  
  
From DavidW:  
------------  
23) Yet more Eikon test apps now run on the rack: TWldSl (allows  
alarms to be set) and TEdwin0 (exercises CTextView et al)  
  
24) Added PCL5.PDL and HP3.PDR to the EIKON.OBY file (both these  
files are released by PDRSTORE and are required for the print setup  
dialog to operate properly - not to mention to support printing and  
print preview).  
  
  
Version 0.01.052  
================  
(Made by DavidW, 30 Apr 1996)  
  
Uses:   E32/057 F32/021 STORE/012 BAFL/027  
        GDI/019 FNTSTORE/013 FBS/019 BITGDI/019 WSERV/029  
        PDRSTORE/003 PRINT/008 CLOCK/014  
        CONE/071 ETEXT/032 TBOX/049 FONTS/021 EALWL/017  
        E32TOOLS/021 EIKTOOLS/104 RCOMP/304  
  
Ascii Debug and GCC Release variants only  
  
More Eikon test programs are now running on the rack, better than  
ever before (with additional significant improvements expected very  
soon, via imminent new releases of other system components)  
  
If you haven't done so already, type "MNT TOOLS" to upgrade to RCOMP  
304 and EIKTOOLS 104, and you should see the last of these strange  
"cannot delete file" messages  
  
From SimonC:  
------------  
1)  Undertook a major reorganization of the list box modules, with  
EIKLBXM.* and EIKLBXV.* disappearing, and with many new modules being  
created in their place (and also taking some of the functionality  
away from eg EIKLBX.* and EIKHLBX.*)  
  
2)  See the LI.PRJ files for a complete listing of these modules;  
basically the modules ending in 'x' contain the controls (the  
"boxes") themselves, modules ending in 'v' contain views, those  
ending in 'm' contain models, and those ending in 'i' contain item  
viewers  
  
3)  Altered many of the enums, giving them a distinctive three-letter  
prefix indicating whether they are defined in a view, model, etc  
  
4)  Converted all live test Eikon applications to the new list box  
modularisation (eg changing which header files are #included)  
  
5)  Started a new test module TLBox2, to test the directory contents  
list box and the hierarchical list box, separately (not fully  
functional yet)  
  
From Vamsi:  
-----------  
6)  Access to Find and Replace CEikEdwin functionality from TEdwin0  
test code  
  
7)  As an experiment, Ctrl+F in CEikEdwin automatically searches to  
the next occurrence of the current word  
  
8)  Minor bug fix in Find code in CEikEdwin  
  
From Julian:  
------------  
9)  Modified TDialg0 so that it runs on the rack  
  
From DavidW:  
------------  
10) Converted to all listed new components above, ie E32(057) etc  
  
(Note that the Window Server now runs all graphics, by default, in  
four shades of gray, using dithering for other shades; this leads to  
various unexpected effects in several of the test applications!)  
  
(Due to minor complications, I have temporarily withdrawn Write from  
the set of live Eikon test applications, as listed in  
..\tsrc\bld.cmd; also door code in general is not to be relied on  
just now; to be reinstated shortly)  
  
11) Since CTextView no longer needs to be passed a Gc, but rather  
creates one for itself when needed, the CreateGcL() function of  
CEikEdwin disappears, and with it the iGc data member  
  
12) New support in dialogs for action buttons which *don't* cause the  
current focus item to be validated, before their action is carried  
out; this is required for eg the "Directory" button in the standard  
Open File dialog (in the case when there are no files in the selected  
directory, so the filename selector control is in an invalid state)  
  
13) Filename selector controls now handle the case when they are  
seeded with a non-existent path: they call TParse::PopDir()  
repeatedly until they find a path that *does* exist  
  
14) Fixed various bugs in the filename controls and dialogs, that  
were shown up by the fact that the internal filing system (rightly)  
rejects filenames with double backslashes in them, eg "\main\\*.dlg"  
  
15) The Eikon System screen now seeds its Document dialog with the  
internal drive (Y: on the PC and C: on the rack) rather than leaving  
this to the pre-existing default (typically C: or D: on the PC and Z:  
on the rack); ditto for the Profile dialog  
  
16) The Eikon System screen now only formats the internal drive, on  
start-up, when that drive is found to be corrupt; this means that  
data stored in one editing session can be re-loaded in the next one  
  
17) TDialg1 now demonstrates file save and re-load on the rack, by  
means (for now) of explicitly specifying y:\ (or c:\) in its call to  
LoadStartDataL; made similar changes to TEdwin0 and TEdwin1  
  
18) Eikon no longer bothers PUTRELing any main.<ver> release  
component of "sample document files", since these document files now  
exist inside the internal drive, rather than on c: (or d: etc) on  
the PC; made corresponding changes to MNT GETREL etc; you may wish to  
"rd /s" any \main on your c: or d:  
  
19) EXPORTed yet more ctors and dtors, for the sake of GCC linking,  
and for the same reason put in a few EXPORT_C's to match the  
IMPORT_C's in header files.  
  
  
Version 0.01.051  
================  
(Made by DavidW, 29 Apr 1996)  
  
Uses:   E32/056 F32/020 STORE/011 BAFL/026  
        GDI/018 FNTSTORE/012 FBS/018 BITGDI/018 WSERV/028  
        PDRSTORE/002 PRINT/007 CLOCK/013  
        CONE/070 ETEXT/031 TBOX/048 FONTS/020 EALWL/016  
        E32TOOLS/021 EIKTOOLS/103 RCOMP/303  
  
Contains GCC Release, and WINS Debug and Release variants  
  
Sizes (GCC)  
-----------  
eikon.dll       401,412  
shell.exe         4,612  
system.prg       22,020  
econs.dll         7,684  
eikon.rsc         5,303  
system.rsc        1,644  
*.pbm            48,456  
  
From Bret:  
----------  
1)  The sample calendar dialogs in TCal test code all now have buttons  
to allow the user to switch between 1, 3, and 12 month views  
  
2)  Other improvements to TCal  
  
From DavidW:  
------------  
3)  The Eikon System application now has the ability to run "*.EXE"  
programs, ie *.EXEs on the rack, and *.DLLs under WINS, prepared such  
that their first exported function is their entry point; this means  
that the Eikon System application is now able to run CONE test  
programs  
  
(Note however that, for the time being, these non-Eikon programs  
won't show up in the Task List dialog, and won't be included in the  
set of programs tasked around by eg Ctrl-Alt-Esc)  
  
4)  New function StartExeL(const TDesC* aExeName) in the static class  
EikDll, implementing the "RunExe" feature of the Eikon System app  
  
5)  Eikon now supports "console applications", such as applications  
using RTest; Eikon provides its own version of ECONS.DLL, overwriting  
the version released by E32 (which only works with the Text Window  
Server, likewise released by the base team)  
  
6)  The source code for Eikon's version of ECONS.DLL is in the new  
directory \eikon\eikcns (so named because eikcon was a bit too  
similar to eikon)  
  
7)  See \eikon\tsrc\t_bnda.* for how to prepare an RTest application  
that can under in the Eikon rom, for either WINS or GCC32  
  
(Note: Eikon's ECONS.DLL doesn't yet properly support console  
applications that do asynchronous reads)  
  
8)  The following six Eikon test apps are all now part of the Eikon  
test rom image: TCal, TMenuB0, TLBox, TLBox1, TCons0, TDialg1; they  
run with varying degrees of success (mainly, the more windows they  
have, the less likely they are to run)  
  
9)  Some changes to the short-cut keys in the Eikon System, eg the  
launch application dialog is now on Ctrl-A, not Shift-Ctrl-A.  
  
  
Version 0.01.050  
================  
(Made by DavidW, 26 Apr 1996)  
  
Uses:   E32/056 F32/020 STORE/011 BAFL/026  
        GDI/018 FNTSTORE/012 FBS/018 BITGDI/018 WSERV/028  
        PDRSTORE/002 PRINT/007 CLOCK/013  
        CONE/070 ETEXT/031 TBOX/048 FONTS/020 EALWL/016  
        E32TOOLS/021 EIKTOOLS/103 RCOMP/303  
  
Uses FONTS 020 for the first time  
  
For a change, this release contains WINS Debug and Release, as well  
as GCC Release  
  
Five Eikon programs now run on the rack: the new ones this time are  
TMenuB0 and TLBox1  
  
Well, when I say that TMenuB0 runs, it runs provided you don't go  
more than three levels of cascade menu deep ...  
  
... and TLBox1 only runs provided you put in some delaying calls to  
CEikonEnv::Alert during its start-up ...  
  
... as you can see from the rom in my u:\eikon050.img  
  
Eight separate contributors to this build of Eikon:  
  
From Natascha:  
--------------  
1)  New paragraph borders and paragraph colors dialog in EIKPARAD.*,  
accessible from functions in CEikEdwin; see Write.CPP for examples  
  
2)  The paragraph borders dialog uses a new "borders preview"  
control, from the new module EIKBPREV.* (based on classes provided by  
Form)  
  
(The separation of the Borders and Colors dialogs is due to the  
present lack of multi-page dialogs; the fact that the borders preview  
control is drawn so small is due to present lack of multi-column  
dialog layout; both these deficiencies should be resolved shortly)  
  
(Another point to note is that the present release of Form doesn't  
display paragraph borders, though it does display background colors  
for paragraphs, and paragraph positioning does get altered to reflect  
the space the borders will take up)  
  
3)  Improved the handling of indeterminate state for the paragraph  
alignment dialog (more work remains for this state in others of the  
paragraph format dialogs)  
  
From Vamsi:  
-----------  
4)  New Replace functionality for CEikEdwin, together with a Replace  
dialog defined in the Eikon resource file  
  
5)  Additional Find functionality for CEikEdwin, for example a  
function to find the next instance of the current word  
  
6)  Both the Find and Replace dialogs for CEikEdwin now use combo  
boxes  
  
(There's no test code for the CEikEdwin Find and Replace in ..\tsrc  
yet - you'll have to use TextEd to see this)  
  
7)  Improvements in the display of the line cursor in CEikEdwin  
  
From Kevin:  
-----------  
8)  Fixed a MFNE bug in which 4-digit year date editors were setting  
the year one too high  
  
9)  Made the enum TEikDateEditorFieldPosition public, as is needed  
for a dialog wishing to restrict a date control's range dynamically  
  
10) Post-fixes in MFNEs can now be focussed nuch like the number  
fields (making their behaviour more SIBO-like); when focussed, the  
post-fix can be changed as before, using either pen or keyboard, but  
with the additional method of pressing SPACE to toggle now available  
  
11) Cut down on flicker when a single-digit field editor was "bumped"  
by using the ears  
  
12) Other internal changes to MFNE code, eg separating out an INL  
file  
  
From Siamak:  
------------  
13) Several more listbox functions have been renamed so that they  
have a trailing ...L  
  
14) Added four new functions to CEikListBox so that getting/setting  
the selected item indexes can be done without resorting to GetState/  
SetStateL; two of these functions, SelectionIndex() and  
SetSelectionIndex(), are designed for use with single-selection  
listboxes, while the other two, GetSelectionIndexes() and  
SetSelectionIndexes(), are for multi-selection listboxes  
  
15) Made changes to TLBox in preparation for turning it into a much  
more comprehensive and useful tool for testing of standard and  
multi-column listboxes (these changes are not finished yet)  
  
From Neil:  
----------  
16) After discussion with Charles, implemented a new "helper" class  
TEikScrollBarFrameLayout, to solve the problem of a scrollbar frame  
mis-adjusting scrollbar models in some inclusive-size constant cases  
  
17) This class contains fields for inclusive margins (or borders)  
that go outside everything in the window, for the client margin, and  
for the tiling mode and the "client area granularity"; this class  
allows for fine control over the way the scrollbar frame works,  
whilst the design has kept in mind the requirement that "simple"  
users of scrollbars shouldn't need to bother with any of this  
  
18) Changed list-boxes, edit windows, and (especially) the console  
window, as required by the existence of TEikScrollBarFrameLayout  
  
19) Fixed a bug found by DanH in CreateOrRemoveRequiredScrollBarsL  
where the wrong set of flags was being altered  
  
From SimonC:  
------------  
20) Some modifications to TLBox1 and to hierarchical list box  
classes, to allow TLBox1 to compile and link for the rack  
  
21) Changed the directory contents listbox to handle reading a  
corrupt drive, although TLBox1 will still give an alert if any  
attempt is made to expand a corrupt drive  
  
From Bret:  
----------  
22) Some modifications to TMenuB0 so that it now runs on the rack  
  
From DavidW:  
------------  
23) Whenever the Eikon Shell starts up, it now attempts to format the  
internal drive (C: on the rack, Y: on WINS)  
  
24) On a suggestion from MartinB, made  
MEikScrollBarObserver::HandleScrollEventL() pure virtual, removing  
the need for this class to have its own v-table  
  
25) Added a few more exported ctors and dtors.  
  
  
Version 0.01.049  
================  
(Made by DavidW, 25 Apr 1996)  
  
Uses:   E32/056 F32/020 STORE/011 BAFL/026  
        GDI/018 FNTSTORE/012 FBS/018 BITGDI/018 WSERV/028  
        PDRSTORE/002 PRINT/007 CLOCK/013  
        CONE/070 ETEXT/031 TBOX/048 FONTS/019 EALWL/016  
        E32TOOLS/021 EIKTOOLS/103 RCOMP/303  
  
Uses CLOCK 013 for the first time  
  
Three Eikon programs now run on the rack: System, TCal, and TDialg1  
(though not all at the same time! - goodness knows why)  
  
In principle all non file-handling aspects of Eikon programs should  
be able to run on the rack; however you'll probably find you need to  
adjust Eikon header files to allow you to link fully (and then  
rebuild Eikon); if so, please send me these changes, and I'll include  
them in the next merge  
  
Note that the rom image u:\eikon049.img starts by switching the rack  
off.  Don't be alarmed at this; switch it back on again and continue;  
Steve Townsend and I have each found, empirically, that the system  
software has more chance of starting up successfully when there's a  
call to UserHal::TurnOff() at a suitably early place (goodness knows  
why)  
  
Only the ASCII Debug and GCC Release variants are released  
  
Pending Eikon contributions from other authors remain on my in-tray  
  
From DavidW:  
------------  
1)  Changed the main window of the Eikon System application to  
display console-style output (using CEikConsoleScreen), as is useful  
when debugging on the rack (eg it presently logs the coordinates of  
all pointer events received by the System application)  
  
2)  For the time being (because the System button doesn't work on the  
rack), the keypress Ctrl-Alt-Esc will task switch  
  
3)  Various changes to Eikon to allow more test applications to run  
on the rack  
  
4)  Stopped MNT GETREL from trying to download the EMARM release  
component in any case when it does not exist (ie because that release  
did not include EMARM)  
  
From SimonC:  
------------  
5)  The directory contents list box in TLBox1 now displays all file  
details (with size and date in a smaller font)  
  
6)  There's a new bitmap to represent the parent directory, FSELPRNT  
  
7)  It is now possible to navigate the file selector by using the  
pointer in the right-hand box (as well as the left-hand box)  
  
8)  All file selector bitmaps are now drawn using BitBlt() rather  
than DrawBitmap(), for increased speed (though at the cost of some  
additional work client side, setting up clipping regions)  
  
9)  Renamed EEikCeHierItemStateChanged to  
EEikCeListBoxItemStateChanged so it can be used for other kinds of  
list boxes as well  
  
10) Other internal changes to listboxes and file selector code  
  
From Bret:  
----------  
11) Introduced range checking prior to changing the calendar view to  
ensure that dates outside the range specified in the resource file do  
not come into view  
  
12) Tidied up TCal, as preparation for it running on the rack.  
  
  
Version 0.01.048  
================  
(Made by DavidW, 24 Apr 1996)  
  
Uses:   E32/056 F32/020 STORE/011 BAFL/026  
        GDI/018 FNTSTORE/012 FBS/018 BITGDI/018 WSERV/028  
        PDRSTORE/002 PRINT/007 CLOCK/012  
        CONE/070 ETEXT/031 TBOX/048 FONTS/019 EALWL/016  
        E32TOOLS/021 EIKTOOLS/103 RCOMP/303  
  
Uses CLOCK 012 and E32TOOLS 021 for the first time  
  
This is an interim release, of only the ASCII Debug variant; it  
includes some (but not all) of the work sent to me by the Eikon team  
over the last few days  
  
Known limitation: the various changes have had the side-effect that  
the Window Server now crashes on exit, with a memory leak having been  
detected  
  
From Neil:  
----------  
1)  With Pieter, converted the console window to use the scrollbar  
frame instead of the (obsolescent) scrollbar manager  
  
2)  The above changes have shown up an limitations with the scrollbar  
frame; a workaround is in place for the moment, which is an extra  
optional parameter TSize* passed to TileL(); watch this space for  
details of a more comprehensive solution  
  
3)  Added (and propagated) trailing ...L's on function names that  
could leave, such as the HandleListUpdateL and UpdateScrollBarsL  
functions of CEikListBox (note: this has a knock-on effect in quite a  
few pieces of test code)  
  
4)  Removed TScrlB0's dependence on CEikScrollBarManager, so once  
Julian and DanH likewise convert to using CEikScrollBarFrame, the  
module EIKSBMAN.* can be deleted  
  
From Bret:  
----------  
5)  Removed IMPORT/EXPORT declarations from non-virtual private  
functions in CEikCalendar  
  
6)  Various other internal changes in CEikCalendar code, eg improved  
struct naming  
  
7)  Added scrolling when the cursor attempts to move off the edges of  
a calendar view; the amount scrolled depends on settings in the  
resource file  
  
8)  Added some more options to the test code TCal, in particular some  
identical calendar layouts with differing scroll values - eg a 2x6  
month view with 6-month scrolling, a la 3a, and with 12 month  
scrolling, as planned for Protea  
  
From Julian:  
------------  
9)  The code for the print dialogs has been changed to use  
MPdrModelNameArray for getting a list of printer devices, rather than  
CDesCArray  
  
10) A new class CEikPrinterModelNameArray derived from MArray can  
convert the MPdrModelNameArray contents into the format required for  
CEikChoiceList  
  
From DavidW:  
------------  
11) If the Eikon Server is unexpectedly tasked to foreground (as  
sometimes presently happens when another application exits), it now  
immediately puts itself to background again, avoiding the impression  
that all keys are getting lost  
  
12) Apps were previously being launched with a required minimum heap  
size of 0x200000, which meant that trying to launch a second app on  
the rack gave out-of-memory; now fixed to require only a minimum heap  
of 0x10000, allowing more than one app to be run at a time  
  
13) Various internal changes in preparation for running more Eikon  
code on the rack  
  
14) As a temporary measure, modified Eikon's GETCOMPS to delete any  
T*.GDR found in \e32data (to avoid people running into a FNTSTORE  
bug); watch out for this if there's any file of that name in your  
\e32data that you want to keep.  
  
  
Version 0.01.047  
================  
(Made by DavidW, 23 Apr 1996)  
  
Uses:   E32/056 F32/020 STORE/011 BAFL/026  
        GDI/018 FNTSTORE/012 FBS/018 BITGDI/018 WSERV/028  
        PDRSTORE/002 PRINT/007 CLOCK/011  
        CONE/070 ETEXT/031 TBOX/048 FONTS/019 EALWL/016  
        E32TOOLS/020 EIKTOOLS/103 RCOMP/303  
  
Uses CLOCK 011, ETEXT 031 and TBOX 048 for the first time  
  
This is the first release for which (some) Eikon code can run on  
racks; try programming my u:\eikonrom.img onto a rack and playing  
with that  
  
Apologies to all those in the Eikon team who gave me code to merge,  
but which I have ignored this time round, due to concentrating on the  
GCC build  
  
Sizes (GCC)  
-----------  
eikon.dll       379,908  
shell.exe         4,612  
system.prg       20,966  
eikon.rsc         4,690  
system.rsc        1,593  
*.pbm            48,268  
  
The figure for eikon.dll in particular is significantly larger than  
expected; research is underway to apportion blame between compiler  
inefficiencies (due to less than optimal v-function lookup), and code  
bloat of all varieties  
  
(never mind the size; of equal concern is the very slow speed at  
which the code runs on the rack, with the appearance of windows being  
"telegraphed" long in advance by the onset of their "shadow", etc)  
  
From DavidW:  
------------  
1)  With help from Geert, finally managed to order all the template  
instantiation requests in a way that caused Eikon.DLL to link under  
GCC with no errors  
  
2)  Also managed to get Eikon's Shell.EXE (the Eikon Server) and  
System.PRG (the System Screen app) to link under GCC, but at what  
cost!  Because of GCC's stupidity when confronted with MI across the  
DLL boundaries, *all* CEikDialog derived classes need to have the  
line  
  
    void HandleControlEventL(CCoeControl* aControl,TInt aEvent)\  
        { CEikDialog::HandleControlEventL(aControl,aEvent); }  
  
(or equivalent) added to them, *all* CEikDocument derived classes  
need to have  
  
    CPictureHeader* NewPictureHeaderL() const\  
        { return(CEikDocument::NewPictureHeaderL()); }  
  
(or equivalent) added to them, and *all* CEikAppControl derived  
classes need something like  
  
    void ProcessCommand(TInt aCommand)\  
        { CEikAppControl::HandleCommandL(aCommand); }  
    void HandleAttemptDimmedSelectionL(TInt) {}  
  
If this nonsense turns out to be a non-fixable aspect of GCC then  
I'll seriously consider backtracking my support for MI within Era  
software  
  
3)  Removed all features that caused Eikon.DLL to have non-const  
static data; this included constructions like  
    const TPtrC KSomeConstPtr=...  
    const TRgb  KSomeConstCol=...  
and  
    const TChar KSomeConstChar=...  
all of which defeat the compiler and cause it to generate some BSS  
(illegal for DLLs under GCC - as E32ROM will eventually tell you);  
the above constructions have been replaced by less wonderful but more  
practical code  
  
4)  Commented out various pieces of code which caused problems on the  
RACK; probably I have left too many parts commented out  
  
5)  New Eikon release component EMARM containing, for now, the files  
        eikon.dll  
        eikon.lib  
        shell.exe  
        system.prg  
from \work\emarm  
  
6)  The release of the GCC version of EIKON.LIB means that  
applications can in principle try to link their own *.PRG files under  
GCC; in practice, however, you will no doubt find that many Eikon  
classes are still waiting to have EXPORTed ctors and dtors added  
  
7)  New file ..\tsrc\eikon.oby (and associated batch file bldimg.cmd)  
which presently doesn't include any Eikon "test application" beyond  
the System screen itself  
  
8)  New MNT verb ARMREL to build Eikon components in GCC  
  
9)  As suggested by Bill, all the MNT GETSRCxxx verbs have been  
changed so as to test (eg) "if exist \e32\nul" before doing their  
"del /s" on the directory prior to fetching the new source code; this  
avoids a worrying error message appearing on the screen  
  
10) The Eikon Server now captures the key combinations Alt-Ctrl-comma  
and Alt-Ctrl-dot, to respectively decrease/increase the LCD contrast.  
  
  
Version 0.01.046  
================  
(Made by DavidW, 22 Apr 1996)  
  
Uses:   E32/056 F32/020 STORE/011 BAFL/026  
        GDI/018 FNTSTORE/012 FBS/018 BITGDI/018 WSERV/028  
        PDRSTORE/002 PRINT/007 CLOCK/010  
        CONE/070 ETEXT/030 TBOX/047 FONTS/019 EALWL/016  
        E32TOOLS/020 EIKTOOLS/103 RCOMP/303  
  
Debug WINS variant only released  
  
Uses FONTS 019, EALWL 016 and CONE 070 for the first time  
  
All Eikon code now compiles under GCC (though with over 300 lines of  
warnings that I have no intention of fixing)  
  
This code *almost* links to produce a GCC version of Eikon.LIB, but  
this is only through using UTC releases of various components, and  
even then, more changes will be required in these other components  
before Eikon.LIB and Eikon.DLL finally exist  
  
Known limitation of this release: when an app exits, the keyboard  
focus sometimes appears to "get lost", but you can put it back to the  
System application by clicking on the System button  
  
From DavidW:  
------------  
1)  The Shell is dead; more precisely, \eikon\shell has been deleted,  
with its files being transferred (and altered en route) to  
\eikon\system, where they now build to create SYSTEM.PRG, an  
Eikon application just like any other one  
  
2)  Whereas it used to be "the shell" that got started by the Window  
Server, it is now "the Eikon Server" that fills this role instead;  
some of the code from \eikon\src\eikservp.cpp has been moved to a new  
file ESMAIN.CPP in a new directory \eikon\eiksvr, where it builds  
into SHELL.DLL (or, for GCC builds, to SHELL.EXE); as part of its  
initialization, the Eikon Server starts an instance of System  
  
3)  As well as being "the right thing to do", this change around  
should solve all synchronization problems on both system startup and  
system shutdown (problems bedevilling the previous Eikon release);  
indeed, for the first time, the Eikon Server runs through all its  
shutdown code (formerly it got left high and dry when the system as a  
whole terminated), which has brought to light various problems in  
destructor code (problems now fixed)  
  
4)  For the time being, the System application (which used to be  
called "The Shell") even displays itself inside its "Run application"  
dialog, allowing multiple copies of itself to be run (without any  
ill effects ensuing)  
  
5)  Another novelty is that shutting down the System application no  
longer terminates all other running Eikon apps; instead, these other  
apps keep running, until such time as there is none left - that is  
when the Eikon Server exits; in the meanwhile, you can press on the  
System button to cause the System application to be restarted  
  
6)  The change around in the way the Eikon Server is started requires  
a corresponding change around in the way the EAlWl Alarm Server is  
started; this was implemented in EALWL 016  
  
7)  Altered code where required to remove all C4701 warnings in  
Release mode (variables possibly used before initialized) - sometimes  
this was a pain, sometimes it led to a definite improvement in the  
code, and in one occasion there did seem to a route through the code  
that would lead to the use of an unitialized variable!  
  
8)  Many modifications to get Eikon to compile in GCC: eg disallowing  
functions to be declared as inline *in CPP files*; moving enum  
declarations higher up in header files, to avoid the need for forward  
references to enums (not supported by GCC); removing variables that  
were declared and not used (or initialized and not used - I have left  
a few lines of this sort commented out, with an "unused !!" comment  
there so I can hunt them down later and remove any that still  
remain); moved some declarations of variables (such as "TInt ii")  
before the beginning of the FOR loop they govern, to allow them to be  
re-used in later FOR loops without the GCC compiler throwing a  
wobbly; provided explicit casts for some of the variables in an  
expression of the sort "x? a: b" to make it clear that a and b share  
a common type (something GCC is zealous about) ...  
  
(on the other hand I have *not* attempted to get a zero-warning  
compile under GCC, since some of the warnings are particularly  
brain-dead, and we ought to find out how to disable them - either by  
.ARM file surgery, or by obtaining a new version of GCC)  
  
9)  Added template instantiation requests where required to allow  
Eikon to link in GCC; some of the more generic of these requests have  
been gathered together at the top of EIKENV.CPP, and the more  
specific ones have been supplied nearer the point of use  
  
(it's probably not worth other people trying to build a GCC version  
of Eikon yet, because you need the above-mentioned UTC versions of  
other components, and it also takes no less than 40 minutes!)  
  
10) Changed CEikOffScreenWindow to derive from CCoeWinArea instead of  
CCoeControl; its custom observer, MEikOfWinObserver, no longer  
derives from MCoeControlObserver, and its HandleOfWinEventL function  
is now pure virtual  
  
11) Some test applications were multiply deriving their app control  
classes from MCoeControlObserver unnecessarily (and were caught out  
when the HandleControlEventL() function became pure virtual) - these  
derivations have now been removed  
  
From Neil:  
----------  
12) Fixed a bug whereby a whole listbox could disappear - by defining  
and calling a CListItemViewer::ResetGc() function, to avoid the Gc  
being left in a state with eg ENullBrush set  
  
13) It's no longer possible for a listbox to be left in a state with  
unnecessary empty space at the bottom (usually as a result of  
expanding the listbox, or reducing the number of items in it) - a  
state that caused problems for a vertical scrollbar, since that  
scrollbar was set to an "illegal" (greater than max) value; fixed by  
the addition of a function CEikListBox::AdjustTopItemIndex(), which  
ensures that the view is always filled when there are enough items  
  
14) Fixed an occasional redrawing bug in listboxes, caused by not  
resetting a Gc clipping region when the viewRect was changed.  
  
  
Version 0.01.045  
================  
(Made by DavidW, 19 Apr 1996)  
  
Uses:   E32/056 F32/020 STORE/011 BAFL/026  
        GDI/018 FNTSTORE/012 FBS/018 BITGDI/018 WSERV/028  
        PDRSTORE/002 PRINT/007 CLOCK/010  
        CONE/069 ETEXT/030 TBOX/047 FONTS/018 ALWL/014  
        E32TOOLS/020 EIKTOOLS/103 RCOMP/303  
  
Debug WINS variant only released  
  
From DavidW:  
------------  
1)  Converted to new releases E32/056 etc as listed above; converted  
all live Eikon test code so that it runs more-or-less as before; note  
that there are very many new facilities available in upstream  
software components, that Eikon hasn't exploited yet  
  
2)  Some acknowledged limitations (beyond those mentioned in other  
release notes): you will usually get a crash on closedown (but after  
your own app has disappeared - this also causes the Window Server to  
shut down, leaving the Eikon Server in an unhappy state - some kind  
of fix will be put in place in the next release of CONE); bold text  
gets drawn in italics (and vice versa); applying character formatting  
(such as a font change) to Global Text has no effect; if you press  
keys too quickly while the system is booting they somehow get  
captured to the Eikon Server and never get seen again; picture save  
and load is broken  
  
3)  For WINS, note that you no longer run SHELLD.EXE, but instead the  
Window Server released file WSEXED.EXE (or WSEXE.EXE in Release  
mode); in turn this looks for a file SHELLD.DLL (or SHELL.DLL); so  
the Eikon Shell no longer builds and releases a SHELLD.EXE; instead  
it builds and releases a SHELLD.DLL  
  
(Note that the Window Server *also* releases a file called  
SHELLD.DLL; be sure not to confuse this with the one created by  
Eikon; shortly, a new naming convention will be worked out to allow  
these two Shells to coexist - togther with "Bill's Shell" later)  
  
4)  Changes to MNT.CMD (which you may need to mirror in your own  
MNT.CMDs): PDRSTORE is now a required subcomponent (since it is used  
by the latest PRINT); the names of most release components have  
changed, from (eg) BITGDI to EWINS; Eikon itself now releases EWINS  
and EWINSDB components instead of EIKON and EIKONPDB as before; the  
"AlWl" release is now fetched from the R:\EALWL directory rather than  
the R:\TIMEW directory; "MNT TOOLS" now fetches E32TOOLS as well as  
EIKTOOLS and RCOMP; note that the version of RCOMP now fetched is  
303; added to the set of extensions excluded from "MNT BACKUP"  
  
5)  Changed #include statements where required by recent filename  
changes, eg BNDARRAY.H -> BABNDA.H, COEDESCA.H -> BADESCA.H,  
COEMATCH.H -> BAMATCH.H, COERSBUF.H -> BARSREAD.H, BLOMAIN.* ->  
BABLO.H  
  
6)  Lots and lots and lots of global renames required by changes in  
other system components, eg:  
  
7)  Changed all TCoeResourceReader to TResourceReader  
  
8)  Changed ->modifier and ->code to ->iModifier and ->iCode  
  
9)  Changed ->type to ->iType and ->position to ->iPosition  
  
10) Changed TPointerEvent::ELeftXxx to TPointerEvent::EButton1Xxx  
  
11) ... and so on; I even got into the act myself in a moment of  
weakness, by renaming every XxxTickBoxYyy to XxxCheckBoxYyy, as  
recommended by the international naming committee (and EIKTKBX.* has  
been deleted, in favour of the new module EIKCHKBX.*)  
  
12) Note that various test programs will now have to link to  
BAFLD.LIB (and BAFL.LIB) for the first time (whereas before that  
functionality was delivered from CONED.LIB)  
  
13) Spotted by DavidA: the flags field of the EDWIN struct has had to  
change from WORD to LONG, since the set of possible flags (as defined  
in EIKCTRLS.HRH) exceeds 16 bits (there has been a corresponding  
change in the function CEikEdwin::RestoreL)  
  
14) Modified the Eikon Server to understand that there are now nine  
program buttons, and that they have a different order from before  
  
15) Old PROGBUTS.REG files in \e32data will fail to be loaded (since  
there's no merit in mapping the data for the eight old buttons into  
assignments for the nine new ones)  
  
16) Important!  You must ensure that your E32Dll() function returns,  
not ETrue, but KErrNone - or else your app will fail to be loaded by  
the O/S  
  
17) The O/S now tracks "cleanup stack heaven", and you may now get a  
Panic(EClnLevelNotEmpty) if you have been lax here; various flaws in  
cleanup stack handling in the test code and DLL code have been fixed  
- usually by putting in a call to CleanupStack::PopAndDestroy() to  
match an earlier call to CreateResourceReaderLC()  
  
From Julian:  
------------  
18) New virtual function ChangeFormatL() defined at the CEikPicture  
level, with a concrete implementation at the CEikDoor subclass  
  
19) This concrete implementation launches the new "Picture format"  
dialog (from the new module EIKPICDG.*) allowing the scale factor and  
the crop margins to be specified for the picture (this dialog is  
currently a "home-brewed" version of what will become in due course a  
multi-page dialog)  
  
20) The API to DrawGlassDoor has changed, to pass additional  
parameters specifying the cropping and scaling  
  
21) See the document class in TEdwin1 for an example of dealing with  
these extra parameters (note that this API is undergoing evolution  
and is subject to further change)  
  
22) The non-door pictures in TEdwin1 (ie "Simple" picture and "File  
bitmap" picture) also support scaling and cropping  
  
23) The persistence for CEikDoor has been altered to record the scale  
factor and cropping margins as well  
  
24) New utility function GetCropInPixels() in CEikPicture, which is a  
candidate for migration to CEikDoor  
  
From Siamak:  
------------  
25) Modified CListBoxView::DeselectItem() so that it no longer panics  
if asked to deselect an item that no longer exists (under the  
rationale that it has just been removed and that it is convenient to  
allow this lassitude to the caller); the item index will be removed  
from the array of selected items, but no attempt will be made to  
redraw the item  
  
26) Defined a new enumerated type called TListItemViewerColors in  
order to avoid global constants for the color values used by the list  
item viewers  
  
27) Modified CListBoxView::VScroll() so that it now hides the  
incremental matcher cursor (if any) before scrolling, and shows it  
after scrolling (but only if it still visible)  
  
28) Modified CEikChoiceList::DoCreatePopoutL() so that it now calls  
the recently added function UpdateScrollBarThumbs() of the popout  
listbox (to avoid the thumbs being wrongly located, in the case when  
the initial current item index is non-zero).  
  
  
Version 0.01.044  
================  
(Made by DavidW, 18 Apr 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/068 ETEXT/029 TBOX/046 PRINT/006 FONTS/015 ALWL/012  
  
Enough is enough!  This is the 26th Eikon release based on E32/054.   
It will also be the *last* Eikon release based on E32/054.  The next  
one (whenever it arrives) will be based on E32/056 (or later!).  
  
Debug variant only released  
  
From Bret:  
----------  
1)  The Eikon calendar control now exists, in the new module EIKCAL.*  
(There are now 65 different *.CPP source files in \eikon\src)  
  
2)  CEikCalendar is a very flexible control, imposing little policy  
decisions in its own right; in general, its behaviour is customized  
by filling in the CALENDAR struct in a resource file definition  
  
3)  For several examples of what's possible, see the new test code  
TCal (don't be surprised by the fact that nothing apparently happens  
when you start it up - it's just lacking a "client window" display  
for now - but press F9 and choose an item from its menu)  
  
From Simon:  
-----------  
4)  TLBox1 has been converted to use a Directory Contents list box  
(for its "right hand side" displays) rather than a vanilla one; at  
present, this listbox only show filenames and a bitmap  
  
5)  For now, a directory that has a parent is indicated by the first  
item in the list being ".."; selecting this will navigate to the  
parent directory  
  
6)  It is now possible to select sub-directories in the DC listbox,  
which will navigate to them (previously this was only possible from  
the left-hand side: the hierarchical directory browser)  
  
7)  CListBox::ItemSize() now takes a TInt as a parameter - this was  
needed for hierarchical lists to calculate their sizes accurately  
  
8)  Made the bitmap FSELFILE.PBM slightly wider, so it wouldn't be  
stretched in the DC listbox  
  
9)  Removed the events EEikCeItemCollapsed and ...ItemExpanded from  
EIKEVENT.H, introducing EEikCeHierItemStateChanged instead  
  
From Neil:  
----------  
10) Fixed a bug in CEikEdwin whereby sizing could go wrong after  
removing both scrollbars because the scrollbar frame was being  
destroyed too early; fixed the corresponding bug in CEikListBox  
  
11) Fixed bug in CEikMultiColumnListBox::CalcDataWidth() which gave  
one less than the true value in most cases (remainder was being  
ignored) which resulted in a misleading horizontal scrollbar  
  
12) Fixed CEikListBox::HandlePointerEventL() no longer to ignore most  
repeat down events  
  
13) Improved position and sizing of popout listbox from choicelists  
(to cope with the presence of a vertical scrollbar in this listbox)  
  
14) Added front-end query dialogs to both TScrlB1 and TScrlB2 to  
determine scrollbar tiling mode (inclusive or exclusive) - to avoid  
having to exit/change/recompile every time  
  
15) Other minor fixes and improvements to scrollbar logic here and  
there  
  
From Siamak:  
------------  
16) Moved the "popout listbox" flag out of EIKCTRLS.HRH to a more  
appropriate place, ie EIKLBX.H  
  
17) Made the initial value of the "current item index" be 0 if the  
listbox has one or more items, and -1 if it is empty; this simplifies  
various parts of listbox code  
  
18) Modified various routines in the listbox control/view so that  
there are no panics if the listbox model is empty  
  
19) Put the color constants used by the listbox item viewer into its  
own header file so that they can more easily be used by all item  
viewers  
  
From Arwel:  
-----------  
20) New public Construct() function in CEikProgressInfo to allow  
creation of a tailored progress control without using a resource  
  
21) New struct SEikProgInfo used in the Construct() function  
  
22) Created a private BaseConstruct() function to separate out teh  
processing which is common to both Construct() and RestoreL().  
  
  
Version 0.01.043  
================  
(Made by DavidW, 17 Apr 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/068 ETEXT/029 TBOX/046 PRINT/006 FONTS/015 ALWL/012  
  
For a change (and as a sanity check), both Release and Debug variants  
are released this time  
  
From Neil:  
----------  
1)  Converted listboxes to use CEikScrollBarFrame, and as such  
support auto-scrollbar visibility  
  
(this allows pop-out listboxes to display a vertical scrollbar on an  
auto basis, ie it is shown precisely when it is needed)  
  
2)  The former flag EEikListBoxHScrollBar has split in two, ie  
EEikListBoxFixedHScrollBar and EEikListBoxAutoHScrollBar, and  
similarly for the vertical direction  
  
3)  Upgraded TScrlB2 to test this new implementation of listbox  
scrollbars  
  
From Siamak:  
------------  
4)  Modified CEikListBox::HandleListUpdate() so that now upon  
encountering an invalid top/current item index, it clears the  
selection and sets the current and top item indexes to zero  
  
5)  On a request from Bill, added two listbox events: "enter key  
pressed" and "item clicked"  
  
6)  Fixed bug in CEikListBox::SetListBoxFlags(), which now only  
creates an incremental match buffer if the incremental match flag has  
been specified and the match buffer hasn't already been created  
  
7)  Added a new (internal) listbox flag, EEikListBoxPopout, which  
should get set for any listbox that is popped out (this alters the  
events that it reports to its observer), eg a choice list sets this  
flag for the listbox it pops out  
  
8)  Changed the OfferKeyL() and HandlePointerEventL() functions of  
CEikListBox so that Interaction Confirmed/ Cancelled events now only  
get generated for popout listboxes (not embedded listboxes)  
  
From Kevin:  
-----------  
9)  Various changes to MFNEs, prior to the introduction of the  
forthcoming combined Date/Time editor (all on one line option, as  
required in the Agenda):  
  
10) New panics added, and more __ASSERT_DEBUGs  
  
11) Some functions which could Leave have had ...L added  
  
12) Integer editors with only single fields can now be 'bumped' up  
and down with the left/right arrow keys, and display ears when  
emphasized  
  
13) When typing into a field, the cursor can no longer be moved;  
attempting to do so moves to the next/previous field  
  
From MartinD:  
-------------  
14) Upgraded test code TComBox to the CEikDocument architecture, and  
to the new implementation of combo boxes.  
  
  
Version 0.01.042  
================  
(Made by DavidW, 13 Apr 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/068 ETEXT/029 TBOX/046 PRINT/006 FONTS/015 ALWL/012  
  
Debug variant only released  
  
"MNT TOOLS" has been upgraded to fetch build 103 of EIKTOOLS  
  
The demise of ..\incg:  
----------------------  
1)  You should rd /s your ..\incg directories, and be sure you type  
"MNT TOOLS" (or, more selectively, "MNT EIKTOOLS") to fetch build 103  
of EIKTOOLS; on careful reflection, ..\incg is a menace, since people  
can too easily be caught out by having one version of (eg) EIKON.RSG  
in one of these places, and another version in the other  
  
2)  EIKRS.BAT and related batch files now create the generated *.RSG  
file directly in \e32inc, just as the generated *.RSC is always put  
direcly in \e32data; this is a much simpler scheme  
  
3)  You can edit your System Setup on your PC to remove all reference  
to "..\incg" from the INCLUDE environment variable (and, if you like,  
you can remove it from the search path for the preprocessor inside  
Project Settings for programs - this has been done for all live Eikon  
test code)  
  
4)  While on the subject of MNT.CMD, I modified its GETSRC verb, to  
make sure that EIKPRG.DEF is always copied from ..\inc to \e32inc  
  
5)  Removed all mention of the "old" RCOMP (and the associated "HCIL  
TOOLS") from MNT.CMD  
  
From Julian:  
------------  
6)  The code in CEikChoiceList has been moved in part to a new base  
class, CEikChoiceListBase, from which CEikChoiceList now derives;  
other subclasses can supply a different kind of "popout"  
  
7)  New class CEikGray16Selector demonstrates the use of the new  
CEikGray16Palette control as its popout, rather than the standard  
listbox (both these CEikGray16Xxx classes will be used in Paint, and  
will also be available for use by other applications; their code is  
in the new module EIKGYSEL)  
  
8)  CEikGray16Selector also replaces the DrawContent() function of  
CEikChoiceList, to pleasing effect (showing a rectangle in the shade  
of gray to be selected)  
  
9)  Changed the Color dialog in TDialg1 to use a Gray16 selector  
rather than a number editor as before  
  
10) Restructured the combo box control CEikComboBox so that it can be  
used in a dialog (previously it was restricted to custom use by  
applications in their own views); eg Find dialogs (such as in TextEd)  
should be able to use it  
  
11) CEikComboBox no longer automatically adds new text entries typed  
by the user, into its associated array, but provides a function  
InsertTextIntoArrayL() for this purpose; in a dialog, this would  
normally be called from the OkayToExitL() function; other windows  
owning a combo box control will have to make their own decisions  
  
12) Shoe-horned an example of a combo box in a dialog into the  
Floating Point editor in TDialg1  
  
From Siamak:  
------------  
13) Modified hierarchical listboxes to the new listbox model design;  
TLBox1 is reinstated as live Eikon test code  
  
14) Added basic support for bitmap drawing to  
CBitmapAndTextListItemViewer (not finished yet)  
  
15) Fixed HandleListUpdate() in CEikListBox so that it now checks to  
ensure the current and top items are still valid; if the top item  
index is invalid, it gets reset to 0; if the current item index is  
invalid, it gets reset to the top item index  
  
From SimonC:  
------------  
16) Further internal changes to hierarchical listboxes (however they  
are a bit fragile at the moment, in the wake of the recent  
reorganization)  
  
17) Started a new module EIKDCLBX.* for the Directory Contents  
listbox to be used in file selectors (at the moment TLBox1 still uses  
a standard listbox, pending the removal of bugs in the DC listbox)  
  
18) Shrunk the bitmaps used by the sort order buttons in the file  
selector dialog, and set the dense packing flag for them  
  
19) New bitmap FSELFILE.PBM for use in the DC listbox  
  
20) Adjusted the drawing code for buttons to reset the font to the  
system font if necessary on completion.  
  
  
Version 0.01.041  
================  
(Made by DavidW, 12 Apr 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/068 ETEXT/029 TBOX/046 PRINT/006 FONTS/015 ALWL/012  
  
Debug variant only released  
  
"MNT TOOLS" has been upgraded to fetch build 302 of RC3 and build 102  
of EIKTOOLS  
  
From Siamak:  
------------  
1)  The first phase of a set of design changes to listbox model  
classes:  
  
2)  CEikItemList has been split into two mixin classes:  
MListBoxModel, and MBitmapAndTextListBoxModel (this is only really of  
interest to people who want to create their own listbox model  
classes) with consequent changes in API  
  
3)  CEikSimpleItemList has been renamed to CStandardListBoxModel;  
this inherits from CBase and from the above-mentioned two mixins  
  
4)  The function List() in CEikListBox, which was used for getting a  
pointer to a listbox control's model, has been renamed to Model()  
  
5)  The ConstructL() functions of all types of listboxes now take two  
additional parameters: a pointer to a listbox model and a pointer to  
a list item viewer; you can however simply pass NULL for these  
parameters and instances of the standard list box model and item  
viewer will be created for you automatically  
  
6)  As can be seen, the prefix "Eik" has been removed from various  
classes which are actually independent of the core of Eikon (and  
which could easily be relocated in a separate DLL if required)  
  
(Note that these changes haven't been finished yet, particularly in  
the area of hierarchical listboxes, which has been commented out for  
the time being - and TLBox1 has been temporarily REMed out of the list  
of live Eikon test applications in \eikon\tsrc\bld.cmd; various other  
cosmetic problems are known about and are receiving attention)  
  
From Neil:  
----------  
7)  Implemented CEikScrollBar::SetLengthAndModel()  
  
8)  Added an argument to CEikScrollBar::MoveResizeThumb() which  
enables the caller to force the shaft and thumb to be completely  
redrawn (this fixes bugs like the one seen in TScrlB1 when increasing  
the length of the scrollbar has no effect on the size and position  
of the thumb and so the shaft wasn't being redrawn - leaving images  
of the buttons there)  
  
9)  Made CEikScrollBar::MinVisibleLength() static, by requiring the  
flags to be passed in; this is very useful for the scrollbar frame  
  
10) Various changes in CEikScrollBarManager to keep things consistent  
for now (before the eventual demise of this class)  
  
11) Rewrote some of the CEikScrollBarFrame code determining scrollbar  
visibility; storing the scrollbar widths as part of the scrollbar  
frame, along with CEikScrollBar::MinVisibleLength() being static,  
means that scrollbar creation/destruction can now be deferred until  
ALL size/model considerations are taken into account  
  
12) Two new flags to prevent the models of the horizontal/vertical  
scrollbars being modified - useful for wrapping cases in edwins; this  
code handles "vertical wrapping" (as in snaking column list boxes) as  
well as "horizontal wrapping" (as in edwins)  
  
13) Changed CEikScrollBarFrame to use SetLengthAndModelL() function  
of CEikScrollBar, for less flickery tiling  
  
14) Fixed the edwin code to enable/disable wrapping (which had  
previously been temporarily commented out)  
  
15) CEikEdwin now sets its scrollbar models ignoring scrollbar  
presence (with its subsequent impact on window size), leaving it up  
to the scrollbar frame to deal with this epicycle  
  
From Natascha:  
--------------  
16) Added "preview" controls (using CEikTag) to the Number Format,  
Time/Date Format, and Currency Format dialogs in the Shell - this  
takes Eikon dialog technology to a new level of user feedback  
  
From Brendan:  
-------------  
17) Changed CEikClock family back to the "original" control design,  
instead of trying to offset Rect() by Position(); changed the way  
that "dynamic clocks" (currently in TBmp test code) are implemented  
as a result - now using a container control  
  
18) Changed iOffset field in clocks to be a TInt64, so it can hold  
microseconds  
  
19) Changed source to take a TInt32 so that a clock can be offset by  
the number of seconds in a day  
  
From DavidW:  
------------  
20) Improved cleanup code after an EditL failed for a sub-document.  
  
  
Version 0.01.040  
================  
(Made by DavidW, 11 Apr 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/068 ETEXT/029 TBOX/046 PRINT/006 FONTS/015 ALWL/012  
  
Debug variant only released  
  
Uses FONTS 015 for the first time  
  
"MNT TOOLS" has been upgraded to fetch build 301 of RC3 and build 101  
of EIKTOOLS  
  
From DavidW:  
------------  
1)  Eikon now supports pictures and doors "properly", with the  
classes CEikPicture, CEikPictureHeader and CEikDoor in the new module  
EIKDOOR.*  
  
2)  The test application Write is currently the only "door  
container"; use its Insert Picture command, and choose "Object.." to  
insert (and edit) a glass door of the TEdwin1 type (you'll need to  
have built TEdwin1 first); inside TEdwin1, you get five one-line  
editors; when you "close the door" (by Quit-ing TEdwin1) you see the  
contents of these editors drawn in miniature, in Tiny font, inside a  
glass door  
  
3)  TEdwin1 is currently the only application that *actively*  
supports drawing a glass door, but all applications inherit a  
"default" glass door, which is a grey rectangular blob  
  
4)  Use the "Change object type" command in the Edit menu of Write  
(or press Ctrl-Shift-O) to alter the default object type in Write  
from TEdwin1 to anything else that takes your fancy - eg Paint (if  
you have built Paint - start from its code from the 004 build) or  
TEdwin0; each of these applications will allow you to run them up as  
a sub-application, and will edit the data Write stores on their  
behalf; it's just that, for now, they won't show any of this data in  
their glass door  
  
5)  New functions in CEikDocument to support doors: DrawAsGlassDoor()  
and GlassDoorSizeL(); if your application supports these functions,  
it should draw glass doors properly too; see TEdwin1 as an example  
  
6)  Other things your application need to do for this to work: save  
changes on Exit automatically, and respect any need to draw up a  
"Title window" (which might have text in it like "Picture in Write")  
  
(The "Change object type" dialog in Write is a temporary kludge; a  
version coming soon will present a list taken from some kind of  
registry of glass door-supporting applications)  
  
7)  Eikon supports both door-pictures and non-door pictures, as can  
be seen in Write: the "Insert picture" dialog here offers a choice of  
a "simple" picture, and "bitmap from file" picture, and an "object";  
the first two involve a dialog to specify them and edit them, whereas  
the third involves a whole application  
  
8)  CEikDocument now inherits from MPictureHeaderFactory (as well as  
CBase), supplying the function NewPictureHeaderL which creates an  
instance of CEikPictureHeader; CEikPictureHeader only knows about  
door-pictures, and applications with non-door pictures have to  
override the NewPictureHeaderL function to create an instance of an  
application-specific subclass of CEikPictureHeader (see Write for the  
details)  
  
9)  Once you've inserted a picture, of any type, its type gets  
remembered automatically, and next time you Edit it (in Write, use  
Ctrl-E) it will automatically do the right thing - running up a  
dialog as required, or the applicable application  
  
10) The protocol for an application being told about a change in a  
sub-document has changed: the callback function is now located in  
CEikAppControl and is called HandleSubDocumentChangeL(); a pointer to  
the sub-document CEikDocument object is passed as a parameter  
  
11) Removed the iProfileChanged TBool field in CEikAppControl, to  
encourage applications to write out profile changes immediately, as  
is the new philosophy, rather than hanging on to them until the next  
Exit command  
  
12) Fixed a few old StoreL() and RestoreL() functions that ought to  
have had their names changed to InternalizeL() and ExternalizeL()  
ages ago  
  
13) Made some more of the functions of TEikDocHeader public, to allow  
other data to be streamed into the same stream with the  
TEikDocHeader; for example, this happens with CEikDoor, which stores  
its own private data in advance of the document header data  
  
14) Miscellaneous rationalization of the code in Write  
  
From Pieter:  
------------  
15) Significant re-write of parts of the console subsystem and its  
test module TCons0:  
  
16) Added Font() method which returns the fontspec of the current   
console font  
  
17) Extended SetScrollBarVisibilityL(TInt aHBarWanted,TInt   
aVBarWanted,TInt aHBarFlags=0,TInt aVBarFlags=0);  
   Note the L at the end. It should have been there in the first   
place)  
  
18) Cleaned up the code, made some useful comments, removed two   
never-used variables, renamed some others to clearer terms  
  
19) CEikConsoleWindow (the platformdependent part of the console) now  
does not subclass HandleRedrawEvent any more, but rather the Draw()   
methods. It now behaves much more like a window should (i.e. you can   
use DrawNow, SetExtentL etc.). It will also NEVER invalidate anything  
(but rather immediately update what it used to invalidate) so that you  
can now use it with a backed-up window  
  
20) Centralized some low-level stuff into UpdateArea, which will  
adjust the console to the currently visible area, and is called by   
SetExtentL, SetFont and SetScrollBarVisibilityL  
  
21) Cleaned out stuff from TCons0 that had nothing to do with the  
console. All menu options now have something to do with the console  
and (mostly) actually do something  
  
22) TCons0 now shows:  
     - claiming a console  
     - selecting scrollbars  
     - styles (normal,bold,italic,inverse,underlined   
               and combinations, or color)  
     - changing the cursor size  
     - zoom in, zoom out, switching fonts  
     - show/hide cursor, track/ignore cursor,   
     - scroll lock on/off  
     - print all/print printable  
     - moving the cursor around (with arrows)  
     - selecting pieces of text (with SHIFT-arrows), copy, paste  
     - changing the screen size  
     - all of the above with or without using a backed-up window  
  
From Natascha:  
--------------  
23) Improvements to the Number Formats and Currency Formats dialogs  
in the Shell:  
  
24) To constrain and inform the user in choosing decimal and  
thousands separators, there's now a choice list rather than an  
editor; if the current value doesn't belong to the set in the  
original choice list, it gets added on dynamically  
  
25) The Currency Format dialog now supports changing the currency  
symbol (however the E32 routine it calls to effect the change doesn't  
work).  
  
  
Version 0.01.039  
================  
(Made by DavidW, 9 Apr 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/068 ETEXT/029 TBOX/046 PRINT/006 FONTS/013 ALWL/012  
  
Debug variant only released  
  
From Brendan:  
-------------  
1)  Changed the alarm alert to keep track of its current state, so  
that drawing is improved; this results in significantly quicker  
button response time  
  
2)  Changed TBmp, TBmpTag and TWldSl to use a container window as  
their main view, to hold their various controls, rather than  
subverting the control stack features of the CEikAppControl for this  
purpose (and getting into trouble as a result)  
  
3)  Tidied some aspects of the alarm header files  
  
From DavidW:  
------------  
4)  Rearranged some of the code in TEdwin0 to bring it more into line  
with the standard form of an application, ie with the CGlobalText  
object now being owned by the CEikDocument class, rather than by the  
CEikEdwin (since in general for this kind of app, the CGlobalText must  
survive the demise of the CEikEdwin)  
  
5)  Added a menubar to TEdwin1, adding (working) commands for  
FileNew, FileRevert, FileQuitNoSave, EditCut, EditCopy, EditPaste,  
ProfileOpen, and ProfileSaveAs  
  
6)  New utility functions CmdFileRevertL and CmdFileQuitNoSaveL in  
CEikAppControl, which should be suitable to be called directly by all  
applications that support these commands (see TEdwin1 for an example)  
  
7)  New functions OpenByFileL() and SaveByFileL() in CEikAppProfile,  
providing the functionality of the ProfileOpen and ProfileSaveAs menu  
commands in eg TEdwin1, allowing the user to make a new profile file  
from the current settings, or to switch to using a different file  
  
8)  New functions CmdProfileOpenL and CmdProfileSaveAsL in  
CEikAppControl, which should be suitable to be called directly by all  
applications that (for test purposes at least) support these commands  
(see TEdwin1 or TBut0 for examples)  
  
(the "Open profile" dialog used here is currently a bit rudimentary,  
allowing the user to select a profile belonging to an inappropriate  
application - though no harm comes from this)  
  
9)  The "application name" field in the document header now refers by  
default to a Profile *.APF file, rather than (as before) to a Program  
*.PRG file - though if no profile with the given name is found, the  
name is next interpreted as being a *.PRG file after all (this means  
that the changeover doesn't require existing document files to be  
trashed)  
  
10) For example, you can create more than one different profile for  
TEdwin1 - eg one with a "gray" background and one with a "white"  
background - and then assign documents to these two profiles; the  
dialogs in the Shell will report which profile each document belongs  
to (and also which program each profile belongs to) and will run the  
write program (using the right profile) in each case  
  
11) Added support for changing profiles to TBut0, via a pop-up menu  
activated by holding the pointer down and still on the main window  
for one second; seeing that the contents of the TBut0 profile is the  
layout of its toolbar, this allows a whole family of different  
toolbar layouts to be prepared in advance, and then quickly selected  
(not intended as a realistic application scenario, but rather to  
exercise the profile technology)  
  
12) Split up the EikDll::StartPrgDllL() function, which used to take  
four parameters, into three different single-parameter functions:  
    StartPrgFromApfNameL(const TDesC* aApfName);  
    StartPrgFromDocNameL(const TDesC* aDocName);  
    StartPrgFromPrgNameL(const TDesC* aPrgName);  
with the result that there is less code in the Shell dialogs  
associated with these various "program start" options, and more code  
in the EikDll class; in all cases, the thread-name is now calculated  
from the other parameters (by default from the profile name)  
  
13) Reinstated some support for sub-applications, ie applications  
running within each other: Write still can't run Paint  
sub-applications, but can now run TEdwin1 sub-applications, and the  
(presently hard-wired) list box of picture types Write supports has  
been extended to include "TEdwin1"  
  
14) TEdwin1 objects don't (yet) show as *glass* doors inside Write,  
but instead as a shaded rectangle, which you need to "Edit picture"  
on (or Ctrl-E) in order to see the contents; one *big* change from  
before, however, is that these pictures handle the document  
architecture correctly, ie there is a CEikDocument instance for each  
picture; also there is no longer any memory leak just by virtue of  
running up the sub-application  
  
15) The above has required some clarification in the former CEikDll  
function "StartLocalPrgDllL", which has itself vanished, being  
replaced (most nearly) simply by the existing EditL function of  
CEikDocument; part of its functionality has been taken over by a new  
EikDll function CreateDocumentL taking a const TDesC* aApfName  
parameter  
  
16) Supporting CEikDocuments created without a corresponding  
CEikAppControl has shown up one flaw in the overall start-up scheme,  
which has meant that the VirtualConstructL function of CEikDocument  
now needs to be called slightly earlier than before; this is now  
called (as is obvious in retrospect) in all cases when a CEikDocument  
instance is created, regardless of whether or not it is about to be  
EditL()ed; at the time when VirtualConstructL was called before,  
there's now a new virtual call to CEikDocument, called (it turns out)  
NotifyProfileLoadedL (because that's what it is); most applications  
won't need to supply a NotifyProfileLoadedL function.  
  
  
Version 0.01.038  
================  
(Made by DavidW, 6 Apr 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/068 ETEXT/029 TBOX/046 PRINT/006 FONTS/013 ALWL/012  
  
Debug variant only released  
  
From DavidW:  
------------  
1)  Many changes to application startup and closedown code, in line  
with the developments in CONE 068  
  
2)  The old module EIKAPF.* has been renamed to EIKAPFHD.*, for the  
Application Profile File Header class TEikApfHeader, and there is now  
a new module EIKAPF.* containing CEikAppProfile, the application  
profile class  
  
3)  Note that the format of the header of APF files has changed, so  
you should delete all \PROFILES\*.APF files (though if you do not,  
the new profile header loading code ought to give you a reasonably  
helpful error message as to why an app has failed to start)  
  
4)  As the name implies, CEikAppProfile takes over the "profile"  
parts of the functionality of CEikDocument; note that, in general,  
the cardinality of CEikAppProfile instances will differ from that of  
CEikDocument instances, since there can be two (or more) documents in  
an environment, sharing the same profile (eg an EMail application  
modelessly editing two different messages at the same time)  
  
5)  CEikDocument now defines a new virtual function,  
CreateAppProfileL(), which by default returns NULL, meaning that the  
application is too simple to require a profile; replace this function  
(as in TEdwin1) to cause the system to create a profile object for  
you when required  
  
6)  There's a bit of an asymmetry between the two virtual functions  
CreateAppProfileL and CreateAppControl in CEikDocument: the former is  
optional, and Leaves on failure (to allow system code to distinguish  
an intentional NULL return from an OOM failure), whereas the latter  
is presently compulsory, and is therefore declared *pure* virtual  
  
7)  Note that your application profile can now have a different  
file format version number from your document files; just supply a  
GetProfileVersion() function, to override the default behaviour  
(which uses the same version number for both)  
  
8)  Instead of providing an EikonEnvironmentReadyL() function, in  
your CEikAppControl-derived subclass, you now provide a function  
named VirtualConstructL(); part of the reason for the name change is  
that the EikonEnvironmentReadyL callback from CEikAppControl and the  
ControlEnvironmentReadyL callback from CCoeAppControl have been  
merged, as a result of general streamlining of the startup system  
  
9)  New function CEikonEnv::CustomLeave(TInt), taking a resource ID  
as a parameter, which is similar to User::Leave(TInt aError), except  
that in the latter case, the resulting alert dialog shows the system  
error text for the given error number, whereas in the former case,  
the alert dialog shows the text of the specified resource TBUF  
  
10) As an example of the use of CustomLeave, you should now get a  
more friendly error message if you try to run a PRG (or PRD) file  
that hasn't been linked with the latest Eikon, or which doesn't  
provide the required EXPORT function  
  
11) Another consequence of the rearrangement of the startup code is  
that non-existent applications get reported to the user, eg try  
clicking on the Data button (assuming you don't have a DATA.PRG file  
handy, and also assuming you haven't redefined what the Data button  
means) and there will now be a "File does not exist" alert  
  
12) Removed the CPrintSetup* field from CEikDocument, since it is up  
to applications whether this belongs inside their document class,  
their profile class, or neither  
  
13) Removed CEikDocument::Destruct(); just use the C++ destructor  
instead  
  
14) The beginnings of a CEikProcess class are in place, in the new  
module EIKPROC.*; CEikProcess contains a pointer to the "main  
document" of the environment, which it is regarded as owning (whereas  
other documents in the environment will tend to be owned by objects,  
such as pictures, inside the first document  
  
15) Documents ask the CEikProcess object for the handle to their  
Profile object, if they are going to need it; eg see the line of code  
  
    CEikProcess::GetProfileHandleL(document,&startData->ApfName());  
  
from CEikonEnv::ConstructEikonEnvL, where the first parameter is the  
CEikDocument class in question, and the second is the name of the  
profile APF file; the CEikProcess class will spot if a CEikProfile  
with that name is already loaded, in which case that will be used for  
the new document as well; otherwise the CreateAppProfileL() function  
of the document will be invoked; in either case, the "access count"  
of the CEikAppProfile gets incremented  
  
16) CEikDocument now contains a CEikAppProfile* pointer; upon  
destruction of the document, the following code is executed  
  
    if (iAppProfile)  
        iAppProfile->RemoveDoc(this);  
  
so that the access count in the CEikAppProfile gets decremented; the  
CEikAppProfile will auto-destruct on reaching a zero access count:  
  
EXPORT_C void CEikAppProfile::RemoveDoc(CEikDocument* aDocument)  
    {  
    TInt pos=FindPos(aDocument);  
    Delete(pos);  
    if (!Count())  
        delete(this);  
    }  
  
17) Removed all PNT*.PBM files from \eikon\srcdata, with ownership of  
these files being transferred to the Paint application (which is  
renaming them).  You should do a "del \e32data\pnt*.pbm"  
  
18) Fixed a bug in CEikEdwin::HandlePointerEventL, which meant that  
clicking on a Edwin sometimes failed to give it the focus  
  
19) Renamed all TXxxData classes in TDialg1 to TXxxModel classes  
instead, in line with prevailing naming conventions; there's no  
*single* document model in TDialg1 (though it wouldn't be hard to  
create one), but many  
  
20) Rewrote TEdwin1 substantially, making it fully profile- and  
document- store-aware; it also has separate "DocumentModel" and  
"ProfileModel" classes  
  
21) Note that system startup involves the creation and initialization  
of (up to) four key interconnected objects: instances of (subclasses  
of) CEikonEnv, CEikDocument, CEikAppProfile, and CEikAppControl;  
there are many "chicken and egg" situations here, with the object  
creation being separated from the initialization ("construction"),  
and with the "construction" taking several stages; the four objects  
get created in the order listed above  
  
22) In all four cases, there's a function called VirtualConstructL  
which is intended for applications to replace, and which gets called  
at a suitable stage, once that object has already been partially  
constructed; ignoring the CEikonEnv case (which is primarily for  
system code), the order in which these callbacks occur is  
CEikAppProfile first, then CEikDocument, then CEikAppControl; the  
profile gets loaded from file (if the file exists) in between the  
VirtualConstructLs of CEikAppProfile and CEikDocument  
  
23) System closedown has lots of "chicken and egg" problems in  
reverse; a particularly thorny problem has been the timing of the  
destruction of the CEikProcess object (and with it the main  
document); for now, this is done in the new DestroyScreen() callback  
from CControlEnv, just prior to the screen device being deleted (but  
after the AppControl for the document has been destroyed)  
  
24) There's no longer a reserved slot in the APF header for a stream  
ID of toolbar customization data; instead, applications are free to  
put this data somewhere in their document instead, if they wish (or  
not to put it anywhere); TBut0 has been revised to show how to put  
the toolbar customization data in its APF file  
  
25) Both TBut0 and TEdwin1 show the mechanism for getting changes in  
profile data reflected back to the application; after changing the  
data, they simply call the SaveProfileL function in CEikAppControl  
(which in turn layers upon a similar function in CEikDocument); in  
due course the document class receives a NotifyProfileChangedL()  
message, which by default (as in TBut0 and TEdwin1) just sends on a  
HandleProfileChangedL() message to the CEikAppControl  
  
26) Note that the HandleProfileChangedL() function in CEikAppControl  
is partnered by a HandleDocChangedL() function, with similar meaning,  
which can get triggered by the CEikDocument object sending itself a  
NotifyAppControlNewDocL() message (as in TEdwin1)  
  
27) Converted all live test code to the latest software ("live" means  
its entry hasn't been REMed out of the BLD.CMD batch file for that  
\eikon\xxx directory), with the exception that there's presently a  
blocker preventing any attempt to run Paint from within Write (partly  
because I haven't updated Paint, and partly because the system for  
running sub-applications is almost certainly broken at the moment)  
  
From Siamak:  
------------  
28) Simplified and improved horizontal scrolling in MC (multi-column)  
listboxes; the horizontal scrollbar is now set in terms of columns  
rather than pixels  
  
29) Modified the PgUp/Dn handling code for MC listboxes, to prevent  
the highlight from disappearing from view  
  
30) Modified CEikListBox::SetEmphasis so that it now calls a function  
RedrawItemsAffectedByChangeInEmphasis() rather than having the effect  
of drawing all visible items.  
  
  
Version 0.01.037  
================  
(Made by DavidW, 4 Apr 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/067 ETEXT/029 TBOX/046 PRINT/006 FONTS/013 ALWL/012  
  
Uses TBOX 046 and CONE 067 for the first time  
  
(It's no longer necessary to copy any file r:\eikon\temp\tboxd.dll  
into your \e32sys directory)  
  
Debug variant only released  
  
From Neil:  
----------  
1)  CEikScrollBarFrame::Tile() now returns a TBool to tell whether or  
not the "output rect" was changed  
  
2)  Improvements to CEikEdwin::SetScrollBars() to stop the view being  
reset or the window resized after any key that changes the scrollbar  
model(s); it now only gets redrawn if necessary  
  
3)  Added a CEikEdwin::SetScrollBarVisibilityL() routine to  
dynamically change scrollbar visibilities  
  
4)  Change to CEikEdwin::ResetViewL() to try to workaround various  
limitations in CTextView - not yet fully satisfactory, though, and  
new functionality in CTextView is awaited with interest  
  
5)  Upgraded TScrlB1 test code Properties dialog to allow  
manipulation of most of the scrollbar settings  
  
6)  Various internal optimizations to scrollbar code  
  
From SimonC:  
------------  
7)  Added ExpandAllL() and CollapseAll() functions to the  
hierarchical list box model  
  
8)  For consistency with CEikListBox, added ConstructL functions to  
the directory tree list box  
  
9)  Removed the option of specifying only a single drive in  
CFileSelectorContainer, as there is as yet no suitable way to  
navigate to the drives choice list via the keyboard; for now, all  
drives are always displayed  
  
10) Improved the handling of errors reported by the file server  
  
From DavidW:  
------------  
11) Various changes in line with the changes in CONE 067:  
  
12) Changed many calls to Exit(0) (eg in test code) to just be Exit()  
instead  
  
13) Parts of the construction of CEikonEnv that presuppose the  
existence of a root control (as a control stack) have been removed  
from the ConstructDetailedEnvironmentL() call, and are now deferred  
until the root control calls SetRootControlL(); in particular,  
creating the alert window and the "debug keys control", both of which  
presuppose a control stack  
  
14) CControlEnv::AlertWin() has been changed to test for the  
existence of iAlertWin before proceeding; if it does not exist (as  
can be the case during environment startup) it now sends an IPC  
message to the Eikon Server, to display the alert message on its  
behalf  
  
15) Rationalized some of the IPC routing calls between the Eikon DLL  
and the Eikon Server; also rationalized some of the (rather ancient)  
code inside parts of the Eikon Server  
  
16) Changed the means by which Eikon DLL code knows when it is  
running on behalf of the Eikon Server (which it sometimes needs to  
know); there is no longer a flag CEikAppControlIsEikServer - since  
the root control is now inaccessible to the environment during the  
early phases of system startup - but instead the Eikon Server  
provides its own subclass of CEikonEnv (normally applications *can't*  
subclass CEikonEnv, since they don't control the environment into  
which they may be launched, but the Eikon Server application is an  
exception)  
  
  
Version 0.01.036  
================  
(Made by DavidW, 3 Apr 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/066 ETEXT/029 TBOX/045 PRINT/006 FONTS/013 ALWL/012  
  
Uses FONTS 013 for the first time (so degree symbols get displayed in  
LatLong editors)  
  
Debug variant only released  
  
From Delma:  
-----------  
1)  Supplied simple test code for LatLong editor, in Numbers dialog  
in TDialg1 (largely by removing comments formerly commenting out code  
originally written by Kevin)  
  
From Julian:  
------------  
2)  Buttons now support being dimmed (displaying themselves  
differently, and refusing pointer events)  
  
3)  An example of a dimmed button has been shoe-horned into the  
Numbers dialog in TDialg1: toggling the "Change Max / Min" tick box  
has the side-effect of dimming/undimming the "Dummy" button in this  
dialog  
  
4)  Improved the drawing code for the Mover region in dialogs, so as  
to reduce flicker when the title is dynamically changed (as can be  
tested using the Buttons dialog in TDialg1)  
  
From Brendan:  
-------------  
5)  Changed the Alarm Alert to be a container window, rather than a  
simple control  
  
6)  Drag events are now enabled in the Alarm Alert (so that users can  
"roll off" buttons and see them come up again immediately)  
  
7)  The Alarm Alert now interacts more correctly with any other  
visible dialogs (such as the Task List dialog) displayed by the Eikon  
Server (change effected by keeping the Control Stack informed as to  
the state of the Alarm Alert)  
  
8)  Added an inline templated function DeleteAndNullPointer<T> to  
EIKREQD.H, with the contents { delete(aPtr); aPtr=NULL; }  
  
9)  Other internal improvements to the Alarm Alert code  
  
(As an overall result of these changes, the clock in the Alarm Alert  
now animates straightaway, and the Silence button visibly dims when  
required)  
  
From SimonC:  
------------  
10) Internal changes to the THierListItem struct, for improved speed  
and reduced storage requirements  
  
11) Fixed various bugs in the Add and Remove item functions in the  
directory browser  
  
12) Added a choice list containing available drives to the  
CFileSelectorContainer (currently living in TLBox1); this doesn't yet  
have any effect on other controls  
  
13) Had to change CalculateRequiredSizeL in eikchlst.h from protected  
to public  
  
From Neil:  
----------  
14) Further progress with CEikScrollBarFrame, which now lives in its  
own new module EIKSBFRM.*  
  
15) Converted CEikEdwin to use CEikScrollBarFrame (though there are  
still some strange effects that will need further attention, and some  
elements of CEikEdwin function may not fully work for the time being)  
  
16) Each former edwin scrollbar flag has now split in two, eg there  
is now EEikEdwinFixedHScrollBar and EEikEdwinAutoHScrollBar, ie there  
are both "fixed" and "auto" variants  
  
17) Finally renamed the "m" field in CEikScrollBar to "iModel" as per  
usual naming conventions  
  
From DavidW:  
------------  
18) Various internal changes, in line with the conversion to CONE 066  
  
  
Version 0.01.035  
================  
(Made by DavidW, 2 Apr 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/065 ETEXT/029 TBOX/045 PRINT/006 FONTS/012 ALWL/012  
  
This is an interim build, with a series of further changes imminent.  
Only the Debug version EIKOND.DLL is being released; you can easily  
build a Release version yourself if need be  
  
From Brendan:  
-------------  
1)  Put in place an alert dialog system, that can easily be made  
extensible  
  
2)  Alert dialogs are derived from the mixin class MEikAlertControl;  
the alarm alert controller is in a new set of files EIKALMC.*  
  
3)  Added the start of the alarm alert, including a plethora of  
supporting classes  
  
4) TWldSl has two new toolbar buttons that allow you to set clock  
alarms - either for "Now" or for in the near future  
  
5) Some internal reorganization and renaming of Eikon Server code  
  
6) Made "reset width and pos" public in CEikTagBase  
  
The alert dialog system has highlighted a range of problems in  
various parts of system code:  
  
*)  The clocks in the Alarm alert do not start animating until  
Ctrl-Shift-Alt-R is pressed  
  
*)  Buttons cannot be dimmed yet  
  
*)  Setting session alarms sometimes panics when the name of the  
session is fetched  
  
*)  Snoozing cannot be properly accomplished at the moment, pending  
changes in the alarm server  
  
  
Version 0.01.034  
================  
(Made by DavidW, 2 Apr 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/065 ETEXT/029 TBOX/045 PRINT/006 FONTS/012 ALWL/012  
  
This is an interim build, with a series of further changes imminent.  
Only the Debug version EIKOND.DLL is being released; you can easily  
build a Release version yourself if need be.  
  
From SimonC:  
------------  
1)  The hierarchical listbox now draws lines connecting parent and  
child/sibling entries  
  
2)  Added two new members to THierListItem to facilitate the above:  
iParentIndex and iItemFlags  
  
3)  Improved the file selector container's error handling: it's now  
much harder to get an alert when attempting to read an empty drive  
  
4)  Reduced the public interface of the hierarchical listbox model  
  
5)  Several other internal changes to fit in with the new design, eg  
models are now called Models rather than ItemLists  
  
From Natascha:  
--------------  
6)  Added various "locale" dialogs to the Eikon Shell, allowing the  
editing of currency formats, date and time formats, and number  
formats; altering the settings in these dialogs has an effect on  
controls such as twips editors or date editors in other applications  
  
7)  Made the titles for the Spacing and Indents dialogs dependent on  
the locale settings for units (imperial vs metric), ie in English  
either "(in)" or "(cm)" gets appended as required  
  
8)  Made a start on indeterminate states being allowed in various  
other controls, eg choice lists and twips editors display blanks, and  
if ok'd in this blank state will actually leave the alignment  
settings as they were for each paragraph  
  
9)  Altered the validation routine for twips editors, which normally  
disallows blank data, to accept it in the case when the twips editor  
was initially in the indeterminate state  
  
From Delma:  
-----------  
10) Uncommented the latitude/longitude editor code in EIKNUMED.*,  
and made various changes to it so that it worked  
  
(Test code will be available to demonstrate this shortly)  
  
From DavidW:  
------------  
11) Converted CEikEdwin to use TBox 045; as a result, among other  
things edit boxes support underlining again  
  
(However for the time being CTextView fails to turn off flashing  
cursors when required, or displays flashing cursors in the wrong edit  
box; also CTextView will crash when asked to de-highlight emphasised  
text - which you can avoid as a temporary measure by copying  
r:\eikon\temp\tboxd.dll into your \e32sys)  
  
12) As a potentially interim measure, made CEikListBox::SetStateL  
call CreateViewL() before it does anything else, to workaround a  
problem found by MartinD concerning in-place listboxes in dialogs  
  
13) Changed what MNT BLDALL does, by commenting out the lines calling  
MNT BLDUDEB and MNT BLDUREL, to avoid lots of wasted time (since  
these variants aren't supported presently) should someone actually  
invoke the BLDALL verb.  
  
  
Version 0.01.033  
================  
(Made by DavidW, 27 Mar 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/065 ETEXT/029 TBOX/044 PRINT/006 FONTS/012 ALWL/012  
  
Uses CONE 065 for the first time  
  
From Natasha:  
-------------  
1)  Added the Paragraph format dialogs to Write: Set Spacing, Set  
Indents, and Set Alignment  
  
2)  As would be expected, in Write these dialogs produce paragraphs  
with varying formats, whereas in TEdwin0 they alter the global  
formatting  
  
From Vipul:  
-----------  
3)  TCons0 now optionally runs either with a backed up window or a  
"normal" window (there's a startup query dialog to specify this at  
runtime)  
  
4)  Altered a few parts of TCons0 code to prevent crashes if an  
inappropriate function is called on a backed up window  
  
(but more work remains to be done, to go beyond avoiding the panic,  
to achieving the correct screen appearance, eg on pressing Ctrl-F to  
change the font in the backed up window case)  
  
From DavidW:  
------------  
5)  Removed all mention of PAINT and TEXTED from Eikon's MNT.CMD; you  
should rd /s any \eikon\paint and \eikon\texted directories  
  
6)  Finally fixed the "non-latching latching buttons" problem in the  
Write toolbar, by defining separate command IDs numbers for eg the  
Bold toolbar button and the "Set Bold" menu command itself  
  
7)  Fixed the memory leak in Write due to the presence of pictures;  
the other leak, arising whenever Paint is run up inside Write, will  
require the *proper* ("no cheating") application architecture, to  
sort it out.  
  
  
Version 0.01.032  
================  
(Made by DavidW, 26 Mar 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/064 ETEXT/029 TBOX/044 PRINT/006 FONTS/012 ALWL/012  
  
Change in version of resource compiler:  
---------------------------------------  
1)  The BLD batch files for Eikon now all presuppose that you have  
installed RC3.EXE, the "32-bit" version of the resource compiler  
developed by Martin Willitts  
  
2)  Invoke "MNT TOOLS" from Eikon, to cause RC3.EXE plus some  
supporting files to be placed in your %drv%\tools, and various batch  
files (EIKRS.BAT etc) in the same place; see the release notes for  
EIKTOOLS 100 and RCOMP 300 for more details  
  
3)  The older MNT verbs TOOLRCOMP and TOOLHCIL are being retained for  
the moment, but will soon be removed  
  
From Vamsi:  
-----------  
4)  New CEikEdwin function SetWordWrapL(TBool), to toggle whether  
word-wrap is on or off: see TextEd for an example of changing this  
dynamically (see the Preferences dialog)  
  
5)  New flag EEikEdwinPartialFormat to cause CTextView to only format  
the visible portion of the document (as opposed to the entire  
document); this gets set in TextEd - see how quickly it can now load  
in a large file such as release.txt!  
  
6)  Improvements to the function CEikEdwin::GuessVThumbPos(), used to  
estimate the position of the vertical scrollbar in the case when the  
document is only partially formatted (however this area looks like it  
may need a lot more work done on it)  
  
From Neil:  
----------  
7)  New header file EIKSBOBS.H containing the scrollbar observer  
class and the definition of TEikScrollEvent  
  
8)  Modified EIKLBX.H, EIKCONSO.H etc to reflect this fact - they now  
depend just on EIKSBOBS.H and not on EIKSCRLB.H  
  
9)  Further progress on the CEikScrollBarFrame class  
  
10) Added constructor to TEikScrollBarModel, with some default  
parameters  
  
From Siamak:  
------------  
11) Scrolling upwards in listboxes wasn't correctly validating the  
new text drawn, resulting in a double draw in due course; now fixed  
  
12) Fixed some similar validation and drawing problems when scrolling  
horizontally in some listboxes  
  
13) The GetState() function for single-selection listboxes now always  
returns simply the index of the current item, if any, avoiding  
complications if the current item isn't selected (according to the  
strict definition of the term "selected")  
  
14) Redefined DrawItem() in the hierarchical view class so that the  
area preceding the rect for a given item is cleared  
  
15) Modified CEikListBox::HandleRedrawEventL() not to re-initialize  
the brush color in the Gc before proceeding (otherwise occasional  
black flashes could occur)  
  
16) Improved CEikListBox::VScroll() by avoiding calling the Draw()  
function when you have only scrolled up/down by one item; in such  
cases, now only the top/bottom item is drawn  
  
17) When pressing the arrow or the page up/down keys, only the thumb  
portion of the relevant scrollbar is now updated, thereby eliminating  
unnecessary (and potentially expensive) calculations; result - faster  
scrolling through longer lists  
  
From SimonC:  
------------  
18) Changed hierarchical listboxes so that nodes can be expanded/  
collapsed via Tab (+ and - can still be used)  
  
19) Fixed bug that was preventing the list item in a hierarchical  
listbox from being collapsed  
  
20) Fixed bug in HandlePointerEventL shown up by clicking below the  
last item but still inside the listbox  
  
21) Other internal file selector changes  
  
From Brendan:  
-------------  
22) Converted test code TWldSl to the CEikDocument system  
  
23) Modified world selectors to optionally set their background color  
to white and to optionally have a flashing cursor  
  
24) New flags are defined in EIKCTRLS.HRH to allow these options to  
be set for dialog controls  
  
25) World selectors are now drawn slightly smaller, by default, than  
before, with extra space above and to the right of the text so that  
the text does not touch the borders  
  
26) Made a start on the Eikon implementation of the Alert Server, in  
modules EIKSALRT.* and EIKALRM.*  
  
From Julian:  
------------  
27) Added Undo and Redo facilities to Paint  
  
28) Multi-level Undo turned out to be virtually as easy as  
single-level Undo; so Paint presently has a ten-level Undo stack  
  
From DavidW:  
------------  
29) Fixed a bug in TEdwin2 involving ownership of the paragraph and  
character format layers, that was causing a crash on exit  
  
30) Fixed another bug in TEdwin2 causing eg Ctrl-B to set Bold Italic  
and Underline all at the same time (amongst other problems); this was  
due to a test for (buttonState&EEikButtonClear) which is, however,  
guaranteed always to be zero, since EEikButtonClear is zero; better  
to test against EEikButtonSet instead  
  
31) Supplied working Open, Save, SaveAs, and Import functions for  
TEdwin2, with automatic save of changes on Quit, etc  
  
32) Not only is this store and restore of rich text for the first  
time at the Eikon level, it is also store and restore of pictures for  
the first time at the Eikon level: all three kinds of pictures  
("Simple", "Bitmap from file", and "Paint") get stored to file and  
then successfully restored later  
  
(but not without a few hiccups along the way, eg Write will now  
usually crash on exit with a memory leak - one for each picture, and  
another one for each time Paint has been visited - but not before  
saving the document to file; also the picture restoration currently  
doesn't do quite the right thing as regards scaling)  
  
33) Changed the name of TEdwin2.* to Write.*  
  
34) On a suggestion from MartinB, slightly altered the meanings of  
the CEikDocument functions RestoreComponentsL and StoreComponentsL;  
as it turned out these changes were independently required in order  
to get picture save and load working inside rich text  
  
35) For short-term convenience in CEikEdwin, changed the iSBManager*  
property in MEikScrollFrameOwner from private to protected  
  
36) In line with architecture team recommendations, renamed  
iOrphanWindow to iCornerWindow in scrollbar frame code  
  
37) Added a Wrap on/off setting to the Properties dialog in TScrlB1;  
TScrlB1 now defaults to wrap off, allowing the horizontal scrolling  
of edwins to be tested  
  
38) TScrlB1 now has an Import Text option, seeded with the *.CPP  
files from \eikon\src; TScrlB1 now launches this dialog automatically  
on start up  
  
39) On a suggestion from Bill, renamed all Eikon resources from  
R_EIKON_XXX to R_EIK_XXX  
  
Removal of PAINT and TEXTED from the Eikon group  
------------------------------------------------  
Please note that this is the last build of Eikon which will include  
Paint and TextEd as part of the Eikon group.  The source code for  
these applications will now be moved to their own groups, and they  
will have their own separate MNT.CMD files, etc.  
  
  
Version 0.01.031  
================  
(Made by DavidW, 25 Mar 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/064 ETEXT/029 TBOX/044 PRINT/006 FONTS/012 ALWL/012  
  
From DavidW:  
------------  
1)  Converted TEdwin2 so that it now runs under the CEikDocument  
scheme; TEdwin2 is a rich-text editor, that supports pictures  
  
(However, TEdwin2 is currently a bit fragile, prone to panics on  
exit, or when a piece of text is highlighted; setting text to be Bold  
often has the unexpected side-effect of making it italic and  
underlined as well; etc)  
  
2)  Upgraded the piece of code in TEdwin2 that can launch Paint to  
edit Paint objects embedded in TEdwin2  
  
3)  Started changing the name of TEdwin2 to Write (since the intended  
functionality of TEdwin2 is a reasonable match to that of Windows  
Write)  
  
(There's no Save/Open functionality working in TEdwin2 yet)  
  
4)  Up till now, it was impossible to declare a listbox in a resource  
file with features such as multiple selection or a scrollbar; this  
was because the list box view was created in the SetParentWindowL  
function, before the RestoreL function had had a chance to set any  
internal flags from resource file data; this has been fixed to  
delaying the creation the listbox view until the first call to  
SetExtentL(), thereby following the CEikEdwin pattern more closely  
  
5)  See the "List" dialog in TDialg0 for a listbox supporting  
multiple selection and a vertical scrollbar, in a dialog  
  
6)  Changed code as required by various name changes in CONE 064.  
  
  
Version 0.01.030  
================  
(Made by DavidW, 23 Mar 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/063 ETEXT/029 TBOX/044 PRINT/006 FONTS/012 ALWL/012  
  
INCLUDES FONTS 012 for the first time  
  
Please note this release only contains a Debug variant  
  
From Julian:  
------------  
1)  Transfered the print setup dialogs out of Paint into the new  
module EIKPRTDG.* (this now requires EIKON.DLL itself to link to  
PRINT.LIB for the first time)  
  
2)  Modularized Paint by splitting it up into four separate modules:  
BITMED for the bitmap editor, GRAYSL for the gray color selector,  
PNTDLG for the dialogs used by the application, and PAINT for the  
main application  
  
3)  Paint now demonstrates saving and loading preference data to its  
profile file, including the settings of its gray color selector and  
the print setup  
  
4)  The bitmap editor will now only export a bitmap drawing to a file  
when a region is selected (this feature is the same as in Paintbrush  
and the MSVC bitmap editor)  
  
From SimonC:  
------------  
5)  Started work on CFileSelectorDialog, which can be invoked from  
a toolbar button in TLBox1  
  
6)  Fixed a bug that was preventing listboxes with no horizontal  
scrollbar from scrolling horizontally (ie when Left/Right is pressed)  
  
7)  Changed the CalcDataWidth() routine in the hierarchical item  
list, to try to get a more accurate value (though this now seems to  
result in the lists scrolling too far!)  
  
8)  Renamed CSimpleContainerControl and CFileSelectorContainerControl  
in TLBox1 to CFileSelectorContainerBase and CFileSelectorContainer  
respectively, and moved as much code as possible into the Base class  
  
9)  Improved emphasis handling in TLBox1 (eg when a dialog is  
launched or exited)  
  
From Natascha:  
--------------  
10) Modifications to TEdwin0, giving access to the Paragraph  
Alignment, Spacing, and Indents dialogs from the menu bar  
  
From Neil:  
----------  
11) CEikScrollBar now derives from CCoeWinArea instead of CCoeControl  
  
12) Scrollbars now use their own observer MEikScrollBarObserver  
instead of CCoeControlObserver; the callback function is now  
HandleScrollEventL()  
  
13) Renamed SEikScrollBarModel to TEikScrollBarModel  
  
14) Started work on the new CEikScrollBarFrame class, in line with  
recent discussions with Charles  
  
15) Interim changes to CEikScrollBarManager and MEikScrollFrameOwner  
before these finally disappear, to keep the code afloat for now  
  
16) Updated CEikEdwin, CEikListBox, CEikConsoleWindow, Paint, and  
TScrlB0 to use the latest scrollbar code  
  
17) Fixed the problem of the non-appearance of anything interesting  
in TScrlB0 (due to an orphan window being created the size of the  
whole screen!)  
  
From Vipul:  
-----------  
18) Enhanced TCons0 test program: Ctrl-F now changes the font.  
  
  
Version 0.01.029  
================  
(Made by DavidW, 22 Mar 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/063 ETEXT/029 TBOX/044 PRINT/006 FONTS/011 ALWL/012  
  
Includes PRINT 006 for the first time  
  
From Julian:  
------------  
1)  Several dialogs in the Print Setup suite have been created for  
Paint (and will shortly migrate to Eikon, for use by other  
applications)  
  
2)  The present version of the Print Setup dialogs uses an interim  
alternative to multi-page dialogs, and will change over to that  
scheme instead when it becomes available  
  
3)  The Print Setup dialogs edit the contents of the CPrintSetup  
object owned by CEikDocument  
  
4)  Added an accessor function CEikDocument::PrintSetup()  
  
5)  Paint currently has its own dummy list of printer models; this  
will be replaced in due course by a list obtained from PDRSTORE  
  
6)  Moved some code from CEikButton to CEikButtonBase, to solve a  
drawing problem for densely packed buttons in some button arrays  
  
7)  Changed the call to OkayToExitL in CEikDialog to call the  
HandleControlFocusLossL function beforehand, for the current item, if  
the flag is set (see below), before calling the dialog-specific  
OkayToExitL()  
  
From Vamsi:  
-----------  
8)  Rewrote the tabs dialog in TextEd, based around storing the  
tabwidth in character widths, and calculating the value in twips when  
needed  
  
9)  The tabs setting now automatically updates correctly whenever the  
font is changed  
  
From MartinD:  
-------------  
10) CEikComboBox now has an iMaxArraySize variable which is set by  
default to 5 but can be set to any value by the caller; this  
determines the number of historical items that are stored in the  
array  
  
11) Changed the DesCArray() function in CEikChoiceList from protected  
to public  
  
From SimonC:  
------------  
12) Changed the appearance of the "sort order" buttons in TLBox1 to  
look more like in the Shell spec (ie with bitmaps and text)  
  
(This requires the new FSEL*.PBM files which are put into your  
\e32data directory by Eikon's MNT GETREL)  
  
13) These "sort order" buttons now function, to control the order of  
the displayed files  
  
From Siamak:  
------------  
14) Speed optimizations in listboxes, eg caching the bottom item  
index rather than recalculating it each time, to speed up scrolling  
  
15) Reducing the amount of item redraws, eg when scrolling  
  
16) Added basic support for the PgUp and PgDn keys in listboxes  
  
17) First letter matching logic in listboxes now ensures the item  
found (if any) is made visible  
  
18) In order to further improve the flicker-free quality of listbox  
displays, the flag ECoeWinAreaAutoClearOnRedraw() is now set, and the  
listbox constructor calls SetBackgroundColor()  
  
19) Dragging in a listbox now works again (had got broken recently)  
  
20) Eliminated some code duplication in listbox code  
  
21) Defined some new generic event types: EEikCeItemDoubleClicked,  
EEikCeItemExpanded, and EEikCeItemCollapsed; a hierarchical listboxes  
now report the latter two events to their observers  
  
22) TLBox1 no longer creates and destroys a file server session each  
time it wants to update the file details listbox; instead, it uses  
the session pointer created by Cone  
  
23) As you navigate up/down the directory tree listbox in TLBox1, the  
file details listbox no longer tries to keep up straightaway, but  
rather updates itself on the completion of an idle object  
  
From DavidW:  
------------  
24) Various changes in TextEd, bringing it closer to the design in  
\design\eon\eon.mdl (eg different data is stored in its profile)  
  
25) Added GETPRINT and GETSRCPRINT verbs to MNT.CMD  
  
26) The definition of the DLG_LINE resource struct now includes a  
flags field, with value defaulting to zero; for now, the only bit  
that can be set in it is EEikDlgLineReportFocusLoss (as is set in  
some resources for the Print Setup dialogs); more flags will be added  
shortly  
  
27) On account of the above change, I have changed the internal  
signature number for Eikon resource files, to force all resource  
files to be recompiled before Eikon will load them.  
  
  
Version 0.01.028  
================  
(Made by DavidW, 21 Mar 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/063 ETEXT/029 TBOX/044 FONTS/011 ALWL/012  
  
Includes CONE 063 for the first time  
  
From DavidA:  
------------  
1)  Minor change to the ways CEikEdwin's get constructed, to provide  
more flexibility (and to fix a problem whereby some functions were  
consulting flags parameters that hadn't been restored yet)  
  
2)  There's now a separate function BaseConstructL() which all  
CEikEdwin construction routes have to pass through; some test code has  
needed to be modified  
  
3)  New flag EEikEdwinNoHorizScrolling, which currently only has an  
effect for single line editors; by default, these editors get the  
EEikEdwinNoWrap flag set for them automatically, and the purpose of  
this new flag is to prevent that behaviour; in turn this can be  
desirable for a single line editor that happens to be right-aligned  
(as in the Calculator app), since otherwise TBox calculates the  
position of the text as being at positive infinity!  
  
From Vipul:  
-----------  
4)  The various ConstructL functions of CEikConsoleScreen and  
CEikConsoleWindow now all take one more (optional) parameter, TInt  
aFlags, defaulting to zero, which gets set into the iFlags field of  
the console window before the call to its CreateWindowL() is made; as  
a result, it is now possible to have a console with a backed up  
window (as required for some uses in Opl)  
  
5)  There's also a new CEikConsoleScreen function, ConsoleWin(),  
returning the handle of the CEikConsoleWindow component  
  
From SimonC:  
------------  
6)  An array of buttons have been added to the two-list file manager  
control, to specify sort order (not implemented yet)  
  
7)  The file manager no longer occasionally crashes on changing from  
a longer list to a shorter list  
  
8)  Various improvements to the display of entries in the file  
manager  
  
9)  Moved bitmap creation out of the model level into the control  
level of the directory browser, to remove Cone dependency from the  
model  
  
10) Changed the model to use a file server connection passed in,  
rather than repeatedly creating and destroying its own connection  
  
11) Cut down on the number of functions that are EXPORT_Ced  
  
From DavidW:  
------------  
12) Changed numerous "iWin." instances to "iWin->", and some to  
"Window()." instead (where the function called is not defined by  
RDrawableWindow) - this change is required by the upgrade to CONE 063  
  
13) Note that tests for whether a window has already been created  
change from  
    if (iWin.Handle())  
to the simpler  
    if (iWin)  
  
14) Changed CEikChoiceList to have a pointer to an MDesCList, rather  
than a pointer to a CDesCArray; this makes it presuppose less about  
the actual array used  
  
15) There's also a utility function DesCArray() in CEikChoiceList, to  
return the CDesCArray* pointer corresponding to the MDesCList*  
pointer, though needless to say this function should only be called  
if you are confident this cast can be made; see EIKFNSLWN.CPP for  
examples  
  
16) Similar changes in EIKLBXM.H.  
  
  
Version 0.01.027  
================  
(Made by DavidW, 20 Mar 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/062 ETEXT/029 TBOX/044 FONTS/011 ALWL/012  
  
From SimonC:  
------------  
1)  For the first time, TLBox1 now looks seriously like a File  
Manager, with two list boxes working in tandem: the left list box  
lists the directory hierarchy, and the right list box shows the files  
for the current directory; the data displayed is real, ie the  
contents of the directories on your hard disk and the network drives  
  
2)  For now, use the + and - keys to expand or collapse a branch, or  
double click it  
  
3)  Moved THLBX.* into Eikon, as the new module EIKHLBX.* containing  
the hierarchical list box classes  
  
4)  The directory item list now displays bitmaps indicating whether  
the folders are open or closed, and indents each item a set amount  
further than its parent (there are still some minor display problems  
to be sorted out soon)  
  
5)  Minor change in EIKCLOCK.CPP so that SetOffset(TInt aOffset) sets  
an offset in terms of seconds rather than micro-seconds  
  
From Siamak:  
------------  
6)  More scrolling/ navigation/ display bugs fixed in listboxes  
  
7)  Some speed improvements when dealing with long lists  
  
8)  Note that the HandleListUpdate() function now does more than  
before, so list box clients should be sure to call this, rather than  
just calling eg UpdateScrollBars() by themselves (typically, a call  
to UpdateScrollBars will be replaced by a call to HandleListUpdate)  
  
From Neil:  
----------  
9)  Created new mixin class MEikScrollFrameOwner to take much of the  
common code in setting up scrollbars, managers, visibility etc, away  
from individual controls  
  
10) To use it, controls *must* supply UpdateScrollBars() and  
SetClientRect() functions, since these are declared as pure virtual  
at the MEikScrollFrameOwner level.  Also if the scrollbars are to be  
positioned inside any kind of border (or margin) they should override  
BorderWidth() declared as virtual at the CCoeControl level  
  
11) Any private flags indicating scrollbar/manager presence in such  
controls should not be used (in eg UpdateScrollBars()) after  
initializing the scroll frame owner; instead, use the flags from the  
scroll frame owner, which are kept up to date when scrollbars are  
destroyed or made invisible etc; see EIKEDWIN.CPP SetScrollBars() for  
an example  
  
12) Converted CEikEdwin to derive from MEikScrollFrameOwner  
  
13) Updated TScrlB1 to test the scroll frame owner features:  
scrollbars in it can now be turned off/on as in TScrlB2; the "visible  
lines" editor in the properties dialog has been replaced by a height  
one (in pixels) for greater flexibility  
  
14) Internal improvements to TScrlB2  
  
15) Removed a few redundant lines from EIKLBX.CPP  
  
From Vamsi:  
-----------  
16) Supplied code for the "Indentation" (tabs) dialog in TextEd,  
allowing regular tabstops to be set, in units of character width  
  
17) This exposed a bug in CEikEdwin::OfferKeyEventL(), which was not  
setting the correct character code when trying to insert a tab  
character into the editable text; now fixed  
  
(In turn this has exposed a bug in TBox in which, for mono-spaced  
fonts, a plus/minus symbol is displayed for the tab character)  
  
From Julian:  
------------  
18) Another rationalization of button code, visible in the API (and  
requiring all resource files to be recompiled again!): a button  
*state* can no longer be initialized via a resource file, which only  
allows button *flags* to be specified; this results in a reduction in  
the size of all button structs in resource files  
  
19) To set a button state, you need to supply code, either in the  
application itself, or in a dialog; this brings buttons more in line  
with other controls  
  
20) Variables such as EEikButtonLatchedUp/Down for setting button  
state have been removed from EIKCTRLS.HRH to EIKBUT.H, and have had  
their names changed, for safety, to EEikButtonClear/Set, in  
conformance with tick box and radio buttons; this affects lots of  
test code, which has all been updated  
  
21) The typedef TButtonState has been withdrawn: just use TInt  
instead  
  
22) Fix in Paint for the case when descenders of text could get  
chopped off when text was input to a bitmap  
  
23) Various cases in Paint where the "document changed" flag was  
failing to be set, have now been fixed (to avoid a loss of these  
changes when the application quits)  
  
24) Changed the implementation of "Import bitmap" to place the new  
bitmap on a moveable region (as for Paste, etc) to allow it to be  
positioned appropriately on top of the existing bitmap  
  
25) Improved the handling of the case when a Pasted or Imported  
bitmap exceeded the size of the current bitmap  
  
From DavidW:  
------------  
26) Changed the HandlePointerEventL function in CEikListBox so that  
an EEikCeStateChanged event was reported as appropriate.  
  
  
Version 0.01.026  
================  
(Made by DavidW, 19 Mar 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/062 ETEXT/029 TBOX/044 FONTS/011 ALWL/012  
  
From Julian:  
------------  
1)  Paint now has the facility to insert text; there is an "Insert  
text" dialog which has a multi-line editor, as well as a "Font"  
button allowing the font to be specified  
  
2)  After the input text is specified, the bitmap editor  
automatically goes into "select region" mode, to allow the text to be  
positioned as the user wishes  
  
From Brendan:  
-------------  
3)  Removed the test application TDynClk since it has been merged  
into TBmp  
  
4)  Converted TBmp and TBmpTag to the current CEikDocument scheme  
(both these test programs run, like all the others, equally well in  
Release mode as in Debug mode)  
  
5)  Changes to CEikClock to cope with some of the requirements of the  
"dynamic clock" uses (as in TBmp and in the TimeW application)  
  
6)  New bitmap SMILE.PBM which gives a prettier picture in TBmp  
(click on the face to make it smile/frown)  
  
7)  Internal changes to CEikTag code  
  
8)  Changed the EXPORT verb of MNT.CMD to export *.inl files as well  
  
From Siamak:  
------------  
9)  Fixed various horizontal scrolling problems for both standard and  
multi-column listboxes; note that the "data size" is now calculated  
correctly (from, by default, the widest item in the list) rather than  
being hard-wired to 640 as before; that means the scrollbar thumb is  
now the correct size  
  
10) Fixed bug in hierarchical listbox whereby the control was asking  
its base class to process left/right arrow events after it had  
already processed them itself  
  
11) Various other internal changes to listbox code (listbox code is  
still in a state of flux however, with several known problems - both  
old and new - awaiting attention)  
  
From Neil:  
----------  
12) Fixed a couple of bugs in scrollbars and the scrollbar manager.  
  
  
Version 0.01.025  
================  
(Made by DavidW, 18 Mar 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/062 ETEXT/029 TBOX/044 FONTS/011 ALWL/012  
  
This build uses FONTS 011 for the first time; there is a richer set  
of fonts available in the Fonts Dialog (eg in TEdwin0 or TextEd) than  
ever before, including the "Tiny" fonts intended eg for Print Preview  
purposes.  
  
From SimonC:  
------------  
1)  Improved directory browser so that, in TLBox1, it now starts off  
with all drives listed, rather than from the root directory of any  
one drive (the test code still provides the option of displaying a  
list of this latter sort)  
  
2)  Removed all known memory leaks from the directory browser  
  
3)  Changed the method of storage in THierListItem to use an HBufC*  
to provide variable length storage, rather thatn a TBuf<256>  
  
4)  Removed all knowledge of the method of list storage (ie array,  
linked list etc) from CDirectoryItemList  
  
From Neil:  
----------  
5)  The scrollbar manager now takes care of the "orphan rectangle" at  
the "intersection" of the two scrollbars, so that controls with two  
scrollbars no longer need to redraw this area themselves (nor will  
they receive pointer events if the user clicks in this area)  
  
6)  Removed the restriction in the scrollbar manager that the  
"client", had to be non-NULL, and changed the name of this data from  
iClient to iParentWindow  
  
7)  In CEikEdwin, re-introduced the line iWin->SetBackgroundColor(),  
at MartinB's request, so that a DrawNow() will no longer cause any  
flicker (this change was possible in the wake of the scrollbar  
manager now handling the "orphan rectangle")  
  
8)  Improved horizontal scrolling in CEikEdwin (but still far from  
perfect, pending additional assistance from Form)  
  
9)  In test code TScrlB2, now keep the number of items in the  
properties dialog up-to-date, when the scrollbar visibility is  
changed  
  
From Vamsi:  
-----------  
10) Fixed the memory leak in a CEikEdwin with line cursor, by creating  
the line cursor in a different part of code  
  
11) Developed the implementation of "Find" in TextEd  
  
From Julian:  
------------  
12) Further development of the Color Selector control, as seen in the  
Paint sample app; the keyboard focus can now be moved into this  
control (in Paint, by using Tab) and the selected color is indicated  
by an emphasized border  
  
13) In Paint, the Color Selector can be placed at various edges of  
the screen (left, right, bottom) or hidden altogether; when at the  
bottom of the screen, it has horizontal layout, instead of vertical  
  
14) Changed the implementation of buttons, separating the "flags" and  
"state" variable, to solve the problem that applications calling eg  
SetControlStateL for buttons can unintentionally remove subsidiary  
information like the position of a bitmap relative to the text  
  
15) Added a new button flag, EEikButtonBehaveLikeRadioButton, which  
can be used for a set of mutually exclusive latchings buttons, as  
used in the Paint toolbar, simplifying application code  
  
16) Modified various other pieces of code, eg in test applications,  
and in CEikButtonArray, as required by the separation of button state  
and button flags; note that all resource files ought to be recompiled  
  
From DavidW:  
------------  
17) New treatment of paragraph and character format layers in  
CEikEdwin, with the withdrawal of GetTextFormatLayersL() and the  
introduction of SetFormatLayers() instead; see the various Edwin test  
programs for some examples  
  
18) Edwin now panics if an request is made to change its char format  
layer (eg by running the Font Dialog) but that edwin is still using  
the shared char format for the environment (ie no call to  
SetFormatLayers, specifying a non-NULL char format pointer, has been  
made); similarly for a request to change its para format layer  
  
19) Shared some code between the RunAlignDialogL, RunIndentDialogL  
and RunSpaceDialogL functions of CEikEdwin, creating the new utility  
function ApplyParaFormatL in CEikEdwin  
  
20) Moved the Edwin Find dialog into Eikon, in its own module  
EIKFINDD.*, and created CEikEdwin::Find() from code formerly in  
TextEd  
  
21) New public utility function CEikEdwin::SelectAllL()  
  
22) The above developments in CEikEdwin mean that TextEd and other  
applications with edwins no longer need to subclass CEikEdwin  
  
23) Created the new control event, EEikCeFormatChanged, and changed  
edwin code to report this instead of EEikCeStateChanged whenever the  
change could require the application *profile* to be saved, rather  
than the application document  
  
24) Changed TextEd so that it now stores its font data, tab settings,  
etc, in its Profile, rather than in each document file  
  
25) Defined a virtual function ConstructL() for CEikDocument, which  
is called prior to the EnvironmentReadyL() callback to the  
CEikAppControl subclass; by default this function does nothing  
  
26) Upgraded TEdwin0 to work with the latest set of Eikon classes  
  
27) A slightly better choice for build settings now means that  
Eikon.DLL is no longer larger than EikonD.DLL (!)  
  
  
Version 0.01.024  
================  
(Made by DavidW, 15 Mar 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/062 ETEXT/029 TBOX/044 FONTS/010 ALWL/012  
  
*.PRG files and ... *.PRD files  
-------------------------------  
1)  The release of Eikon now fetches EIKOND.DLL and EIKON.DLL, the  
Debug and Release versions respectively; likewise it fetches  
SHELLD.EXE and SHELL.EXE, Debug and Release versions of the Shell;  
note in particular that typing "Shell" will run the Release version  
  
2)  SHELL.EXE will try to run *.PRG files as PRoGram DLLs; not so  
SHELLD.EXE, which will try instead to run *.PRD files; so for example  
the project settings for the TextEd application have been altered, to  
build TextEd.PRG in Release build and TextEd.PRD in Debug build  
  
3)  Various code flagged as "Unreachable" by the Release build  
compiler has been commented out  
  
4)  Note that the settings in the "Release" section of the Project  
Settings dialog, for many test programs, were very badly wrong, and  
have been altered; eg they should Optimize for "Minimum Size" rather  
than for "Maximum Speed"  
  
(The Release build tends to run much faster, anyway, by virtue of  
missing out floods of __ASSERTs; eg an operation that took 90 seconds  
for TextEd.PRD took only 25 seconds for TextEd.PRG - this was  
Importing the file "\eikon\group\release.txt"; too bad that it's  
still about 24« seconds slower than eg Brief)  
  
How to know which test programs have been updated:  
--------------------------------------------------  
5)  A much larger number of Eikon test programs have been converted  
to the new CEikDocument scheme - about 14 in all, including TDialg0  
and TDialg1; the way you can tell is by looking at the various  
BLD.CMD batch files, eg in ..\TSRC; the programs that have still to  
be converted have been REMed out of the build instructions; test code  
that runs as a .PRD file will also run (rebuilt) as a .PRG file  
  
6)  Note that the former program TBitEd0 has been moved out of  
..\TSRC and into its own new directory \EIKON\PAINT, being  
rechristened as "Paint" in the process (one consequence of this is  
that *.PNT files saved earlier will refuse to load inside the new  
application, since its internal name has changed)  
  
From Julian:  
------------  
7)  Paint now displays scrollbars, which can be toggled off or on as  
required  
  
8)  Paint now displays its own 16-gray scales color selector (this  
will display dithered shadings in 4-gray scale mode) down the side of  
the screen  
  
9)  The mechanism for displaying the cursor has changed, so that it  
no longer disappears when over dark gray (it now gets XORed with  
"gray level 14", with the result that it always changes color)  
  
10) Added a "Quit, lose changes" menu command  
  
11) When drawing a line, the end pixel is now included (friendlier  
for end users)  
  
From SimonC:  
------------  
12) Converted TBut0 and TLBox1 to the new CEikDocument scheme  
  
13) Changed to a new design for the hierarchical list box classes, in  
which eg the model (array) class no longer knows anything about the  
control classes  
  
14) Created a new module, temporarily named THLBX.* in ..\tsrc,  
separating out the general hierarchical list box classes, from their  
original home in test code TLBox1  
  
15) Created two more *.PBM files, placed into \e32data by Eikon's MNT  
GETREL, which will be used shortly to display the open/closed status  
of branches in a hierarchical listbox (but they are not in use yet,  
pending further changes in the main list box classes)  
  
From Siamak:  
------------  
16) Preliminary implementation of horizontal scrolling for both  
standard and multi-column listboxes  
  
(currently the "full width" of any listbox, for scrolling purposes, is  
hard-wired to 640 pixels; a more flexible scheme will be in place  
RSN)  
  
From Neil:  
----------  
17) Converted TScrlB0, TScrlB1, and TScrlB2 to the CEikDocument  
scheme  
  
18) TScrlB2 now has two tick boxes in its Properties dialog, to turn  
each scrollbar on/off separately  
  
19) CEikListBox has a new function SetScrollBarVisibility(), and  
CEikScrollBarManager has a RemoveScrollBar()  
  
From Bret:  
----------  
20) Converted TMenuB0 and TMenuP0 to the CEikDocument scheme  
  
From DavidW:  
------------  
21) Minor alteration to TextEd to provide a setting for whether to  
restrict the display to a mono-spaced font; this is inside the Set  
Preferences dialog (but this line of that dialog is the only one that  
works for now)  
  
22) Using the above feature of TextEd, you can see, for the first  
time, the proposed "EFF Roman" font, as delivered to us by EFF, the  
Electronic Font Foundry, and included in build 010 of FONTS (used for  
the first time by this build of Eikon); alternatively you can use  
TScrlB1 (none of the other "edwin-like" test programs have been  
converted to the CEikDocument scheme yet); comments about this EFF  
font to Natascha please  
  
23) Changed the names of some CEikDocument functions to exclude  
"Doc", eg InternalizeDocL() has become InternalizeL()  
  
24) Added a CPrintSetup* to CEikDocument  
  
25) There is now a default value for the fourth ("flags") parameter  
to the constructor of the fonts dialog, allowing access, by default,  
to all fonts.  
  
  
Version 0.01.023  
================  
(Made by DavidW, 14 Mar 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/062 ETEXT/029 TBOX/044 FONTS/009 ALWL/012  
  
Warning:  
--------  
This is very much an interim release, with only four test programs  
having been converted to the emerging new document architecture  
contained in Eikon for the first time today.  
  
These test applications are:  
    TCalcUi  
    TCons0  
    TLBox  
    TextEd  
  
It's not hard to convert other test applications, so long as they're  
not "store aware".  (See below for the details.)  
  
But if your application supports eg Open, SaveAs commands, the  
conversion will take longer, and you may wish to keep working with  
a previous build of Eikon, for the time being  
  
Document architecture!  
----------------------  
1)  There's now a class CEikDocument, taking over the "document"  
parts of the functionality from CEikAppControl from before; just as  
every PRG has to provide a subclass of CEikAppControl, so too must  
every PRG from now on provide a subclass of CEikDocument  
  
2)  A key difference between CEikDocument and CEikAppControl is that  
an instance of the former can exist without an instance of the latter  
existing; for example, if one of your documents is being printed from  
the Shell, searched from the Shell, previewed from the Shell, or  
displayed as a glass door from inside an enclosing application, the  
chances are an instance of your CEikDocument will exist, but not an  
instance of your CEikAppControl; the CEikAppControl subclass only  
gets created when the user wants to *edit* the document (or, more  
generally - for read-only documents etc - to *view* the document in  
a process all of its own)  
  
3)  Your EikMain() function, which used to look something like  
  
    EXPORT_C CEikAppControl* EikMain()  
        {  
        return new CTextEdAppControl;  
        }  
  
should now instead look something like  
  
    EXPORT_C CEikDocument* EikMain()  
        {  
        return new CTextEdDocument;  
        }  
  
Even if it looked like  
  
    EXPORT_C CEikAppControl* EikMain()  
	{  
	CEikAppControl* appControl=new CSimpleAppControl;  
	appControl->SetAppControlFlags(EEikAppControlNoAppResourceFile);  
	return(appControl);  
	}  
  
it will just just look like  
  
    EXPORT_C CEikDocument* EikMain()  
        {  
        return new CSimpleDocument;  
        }  
  
and the place where you set the "app control flags" is in the  
callback CreateAppControl() (see below)  
  
4)  Because the signature of EikMain() has changed, the contents of  
EIKPRG.DEF has changed too (if you look closely, you'll see that,  
underneath all the hieroglyphics, all that's changed is that  
"AppControl" has been directly replaced by "Document")  
  
5)  CEikDocument declares a function CreateAppControl() as pure  
virtual, meaning that you are obliged to provide one; at the very  
minimum, you will end up with a few lines near the end of your *.CPP  
file, looking something like  
  
    class CTestDocument : public CEikDocument  
        {  
    private:  
        CEikAppControl* CreateAppControl();  
        };  
  
    CEikAppControl* CTestDocument::CreateAppControl()  
        {  
        return new CTestAppControl;  
        }  
  
An alternative version of CreateAppControl would look like  
  
    CEikAppControl* CSimpleDocument::CreateAppControl()  
	{  
	CEikAppControl* appControl=new CSimpleAppControl;  
	appControl->SetAppControlFlags(EEikAppControlNoAppResourceFile);  
	return(appControl);  
	}  
  
so that, as you can see, what used to be in your EikMain() is  
essentially now in your CreateAppControl() instead  
  
6)  The following functions have moved (sometimes changing their names  
a bit in the process) from CEikAppControl to CEikDocument:  
  
    SetDocNameL();  
    LoadProfileL();  
    SaveProfileL();  
    ParseWithAppName();  
    GetAppName();  
    GetAppVersion();  
    StoreDocComponentsL();  
    RestoreDocComponentsL();  
    ExternalizeDocL();  
    InternalizeDocL();  
  
Eg if you used to provide an ExternalizeDocL() function in your  
subclass of CEikAppControl, you should now provide it in your  
subclass of CEikDocument  
  
7)  The former EIKDOC.*, which contains the document header class,  
TEikDocHeader, has been renamed to EIKDOCHD.*, and the name EIKDOC.*  
is now used for the module for CEikDocument  
  
8)  CEikAppControl and CEikDocument contain several new utility  
functions, intended to simplify and unify store-related code in  
applications (and to cut down on duplication); more details will be  
publicized shortly, once things have settled down a bit  
  
Eikon now runs in release mode(?)  
---------------------------------  
9)  Eikon now uses TBOX 044 (and ETEXT 029) for the first time, and  
as a result can now in principle run in Release mode as well as Debug  
mode (but not tested yet)  
  
(the UTC version of ETEXTD.DLL in R:\EIKON\TEMP is no longer needed,  
and has been deleted)  
  
10) Because ETEXT 029 has its own copy of clipboard functionality,  
the modules EIKCLIPB.* are withdrawn; instead of #include-ing  
EIKCLIPB.H, you now #include TXTCLIPB.H; note that the file  
EIKCLIBH.HRH remains, though, since it defines some Eikon-level  
clipboard format type numbers (but if you used EClipboardRichTextType  
before, switch to using EXxxClipboardRichTextType for now)  
  
From Neil and Pieter:  
---------------------  
11) Added scrollbar facilities to the console window  
  
12) Improved various aspects of the console test program, TCons0, eg  
adding tests for changing the visibility of the scrollbars, and for  
changing the visibility of the cursor  
  
13) Fixed a regression in yesterday's release, in which a listbox or  
edwin with only one scrollbar could crash  
  
From Vamsi:  
-----------  
14) Added a new flag EEikEdwinLineCursor to EIKCTRLS.HRH, with the  
effect that any Edwin can now get a "line cursor" displayed for it,  
in a left margin region at the side of the editing area; on the S3,  
this "cursor" is a pointing triangle shape; for the time being, in  
Eikon you just get a '+' character  
  
(unfortunately, in the present implementation, there are memory leaks  
associated with line cursors, and any application using them will  
crash during exit)  
  
15) Set the EEikEdwinLineCursor flag for TextEd  
  
16) Fixed a problem with the Font Selector dialog that was introduced  
during the merge phase of the previous build, in which the set of  
font heights shown, on the first display of the dialog, did not  
always match the set provided for the first font shown  
  
From Siamak:  
------------  
17) Changed the visuals of the way list boxes highlight the current  
item and any selected items: they now use inverse video instead of a  
dotted rectangular outline for the current item, and tick marks to  
show selected items (somewhat similar to menus)  
  
18) The CEikListItemViewer and CEikTextListItemViewer classes have  
been merged, with the result that CEikListItemViewer is no longer  
abstract; it can now cope with items that are just text, just a  
bitmap, or a combination of bitmap plus text  
  
19) This new design also makes it easier to create new kinds of list  
item viewers, and to customize the behaviour of CEikListItemViewer  
itself (eg via flags).  
  
  
Version 0.01.022  
================  
(Made by DavidW, 13 Mar 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/062 ETEXT/028 TBOX/043 FONTS/009 ALWL/012  
  
From Julian:  
------------  
1)  The toolbar in the bitmap editor now has buttons with icons on  
them, rather than text (all the icons being, of course, designed  
using the bitmap editor!); this requires all the PNT*.PBM files which  
are now placed in your \e32data by Eikon's MNT GETREL  
  
2)  The size of a bitmap drawing can now be changed ("cropped") to  
that of a selected region, by a new menu command  
  
3)  The bitmap editor now has a "Show cursor position" option, to  
provide the user with feedback about the current cursor position, via  
a series of infomsgs  
  
4)  The menu bar now contains all the commands that can be actioned  
from the toolbar, and uses radio button displays to show which of  
various grouped items is now current (which drawing mode, and which  
color); a tick display shows whether "Show cursor" is active; items  
are displayed dimmed when appropriate (eg for Cut/Copy, and Zoom when  
already zoomed to extremities)  
  
5)  There is now a New File menu command, so that a new blank file  
can be created at any time  
  
From Neil:  
----------  
6)  Further improvements to the tiling logic in the scrollbar  
manager, to cope better with interdependencies between scrollbars  
when deciding scrollbar visibility; the vertical scrollbar is now  
explicitly given priority in any case of conflict  
  
7)  Improved the MinVisibleLength() function of CEikScrollBar to give  
a more realistic return value  
  
8)  Added a new (private) function AddShaftIfPossible(), called at  
the end of CalcDisplayFlags() which will recreate the shaft, if  
necessary, into any excess space obtained by removing pairs of  
scrollbar buttons in some particularly tight situations  
  
9)  Fixed a bug in listboxes whereby paging up or down would have no  
effect if only one (or less) items was visible  
  
10) Improved test code TScrlB1 and TScrlB2 so that if a Properties  
dialog would result in two separate resize calls to the respective  
main windows in the application, these are now bundled into one call,  
lessening the number of visual updates, and demonstrating better  
coding practice  
  
From Vamsi:  
-----------  
11) The Fonts dialog now obeys a flag (passed in on construction)  
saying whether only monospaced fonts should be shown  
  
12) The TextEd application calls the Fonts dialog with the "mono  
only" flag set  
  
13) TextEd now initializes its font to be monospaced  
  
14) Created some dummy dialogs, for Set Tabs and Set Preferences.  
  
  
Version 0.01.021  
================  
(Made by DavidW, 12 Mar 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/009  
        CONE/062 ETEXT/028 TBOX/043 FONTS/009 ALWL/012  
  
The solution to LNK 4049 warning messages  
-----------------------------------------  
1)  (As suggested by Geert) After downloading the build components,  
edit line 10 of \e32inc\e32def.h, changing it from  
  
    #define IMPORT_C __declspec(dllimport)  
  
to  
  
    #define IMPORT_C __declspec(dllexport)  
  
(so that, under MSVC builds, IMPORT_C and EXPORT_C mean exactly the  
same thing; note that this change has no effect at all on GCC  
builds).  All linker warning messages should cease  
  
2)  However, this change precipitates the need for all PRG files to  
be linked with an option such as  
  
    /DEF:\e32inc\eikprg.def  
  
added to the "Project options" box of the Link page of the Project  
Settings dialog (you simply have to add this in by hand, eg after all  
the other settings)  
  
3)  A copy of EIKPRG.DEF (a plain text file) is zipped up with all  
the other EIKON "include" releaseables in the INCC zip component;  
alternatively, just copy it over to \e32inc from \eikon\inc  
  
(If you already have another .DEF file of your own, you can keep on  
using that instead; EIKPRG.DEF presumes that the entry point to your  
PRG has the function signature "CEikAppControl* EikMain()")  
  
(The reason you now need a .DEF file is that defining IMPORT_C as  
EXPORT_C means that you end up with at least one additional export  
function, namely a hidden generated function which is a default  
constructor for TFontStyle, of all things; MSVC generates this  
function, in Debug builds at least, because the only constructor for  
TFontStyle - in GDI.H - takes no fewer than three default parameters  
- violating Code Review Principle HA-44 as it happens!)  
  
From Brendan:  
-------------  
4)  The control factory now recognizes CEikTag, CTikBufTag,  
CEikBitmap, and CWorldSelector  
  
5)  Added resource reading for tags, bitmaps, and world selectors  
  
6)  Changed CEikTagBase so that a minimum width can be set - this was  
the easiest way to demonstrate centered and right aligned text in  
dialogs  
  
7)  Fixed a bug in world selectors where cities weren't always being  
found when the selector was locked to a particular country  
  
8)  Minor name changes and other improvements to TBMP, TBMPTAG and  
TWLDSL test code (eg the "Test" buttons now say what they're going to  
do, instead of just "Test1" etc)  
  
9)  New test program TDynClk in which a clock factory and a dynamic  
clock class are defined, eg the clocks can be seamlessly changed from  
analog to digital  
  
From MartinT:  
-------------  
10) Many of the control header files (eg EIKCHLST.H, EIKNUMED.H, ...)  
have been commented to distinguish functions in controls that get and  
set the state, from other functions (construct/ destruct, processing  
required by CONE, internal support functions).  This enables a clear  
distinction to be made when documenting controls.  When coding new  
controls, you should try to follow this model  
  
11) Note that GetState() and SetStateL() remain non-public functions,  
and should always be coded in terms of the most common get/set  
functions in the group above.  This may not be the case for all  
controls at present.  Future Eikon releases will correct this where  
necessary  
  
12) Internationalized the spelling of the Initialise() function in  
CEikVerticalRadioButtonsManager, to Initialize()  
  
From Julian:  
------------  
13) The bitmap editor now supports Cut Copy and Paste; try it and  
see!  Note in particular that after a Paste, you get put into "Region  
moving mode" automatically, to allow you to position the new bitmap  
region where you want  
  
14) Several bugs have been fixed in the bitmap editor, eg the cursor  
and the selected region should now get redrawn properly after a  
popout menu is removed  
  
15) Other bitmap editor code improvements, to make it run more  
smoothly  
  
From Neil:  
----------  
16) Improved scrollbar manager's behaviour when resizing windows so  
that it no longer sometimes obliterates the border of the listbox/  
edwin (but there still seem to be a couple of problems with very  
small edwins)  
  
17) Extra scrolling functionality is now in place in Edwin, though it  
waits for new Form functionality to be supplied before it all works  
as fully intended  
  
18) Changed the ResetViewL() function in Edwin to use the Form flag  
EFViewFillBottomOfScreen which when functional should fix the problem  
of leaving empty space at the bottom (eg after changing font)  
  
From SimonC:  
------------  
19) In preparation for making the classes in the hierarchical listbox  
system more portable (more useable in a wider set of circumstances),  
moved various code from eg the application control class in TLBox1  
into the new classes CDesCDirectoryArray and CTreeItemList  
  
20) The recent change to info messages had meant that they were no  
longer being displayed on the first request; now fixed  
  
From Siamak:  
------------  
21) Implemented basic support for use of all four arrow keys in  
multi-column listboxes  
  
From DavidW:  
------------  
22) Converted to the latest build of CLOCK (009), taking advantage of  
an easier mechanism for defining digital clocks  
  
23) Now implement "no wrapping" edwins (such as in TextEd) by calling  
the CTextLayout function SetToNoWrapping(), rather than specifying an  
arbitrarily huge width  
  
24) All Edwins with just one line now get the "no wrapping" flag set  
automatically.  
  
  
Version 0.01.020  
================  
(Made by DavidW, 11 Mar 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/008  
        CONE/061 ETEXT/028 TBOX/043 FONTS/009 ALWL/012  
  
From DavidW:  
------------  
1)  Renamed CEikAppControl::HandleNonStandardCmdL to HandleCommandL;  
note that your applications will fail to receive any commands unless  
you rename your version of this function  
  
2)  CEikAppControl no longer defines CmdFileOpenL() or  
CmdFileSaveAsL(), and no longer treats the corresponding Cmd numbers  
as different from any of the others (intercepting them and invoking  
the above functions automatically); you have to add case statements  
for these into your HandleCommandL()  
  
3)  On the other hand, the set of pre-defined Cmd numbers in  
EIKCMDS.HRH has been significantly increased; use these numbers  
(rather than corresponding ones of your own) if in due course you  
want your toolbar buttons for these commands to automatically pick up  
the right icon (and there is likely to be other benefits of keeping  
the same numbers constant across applications)  
  
(The set of numbers in EIKCMDS.HRH is of course subject to  
considerable further evolution)  
  
4)  Converted many of the test apps to use the new EEikCmdXxx values,  
where applicable, instead of their own values; one automatic benefit  
of this is that commands selected via the sidebar popup menus now  
often end up doing something meaningful, rather than being ignored  
  
5)  Withdrew the special pseudo-Cmd number EEikCmdDisplayMenu (it's  
no longer needed, now that the sidebar works)  
  
6)  Numerous changes inside TextEd application  
  
7)  Added a function InsertFromTextFileL() to CEikEdwin, allowing any  
edwin to import data from a plain text file (however, this can be  
astonishingly slow for even moderately-sized *.TXT files)  
  
8)  Added a new flag EEikEdwinNoWrap to disable word-wrap in an  
edwin, as is appropriate eg for a program editor  
  
9)  As a temporary workaround, added a "Directory" button to the  
standard File Open dialog, allowing the user to navigate to a  
directory other than the one initially seeding the dialog (and it is  
also possible to specify a different wildcard match)  
  
10) Removed the aResourceId parameter from all CEikEdwin functions  
like RunFontDialogL() and RunCharMapDialogL(), with the function  
supplying the id number internally (so there's no longer any  
requirement for the caller to know this value).  
  
  
Version 0.01.019  
================  
(Made by DavidW, 9 Mar 1996)  
  
Uses:   E32/054 F32/018 STORE/009 BAFL/021  
        GDI/014 FNTSTORE/008 FBS/014 BITGDI/014 WSERV/027 CLOCK/008  
        CONE/061 ETEXT/028 TBOX/043 FONTS/009 ALWL/012  
  
From DavidW:  
------------  
1)  Converted to E32(054) etc; here, the "etc" was about 90% of the  
work involved in the conversion; there has been a great deal of new  
code developed at all levels of EON system software; see the release  
notes of all these system components for more details  
  
2)  Note in particular that you now link with WS32D.LIB instead of  
with W32D.LIB, that TStream has changed to TStreamId, that E32ADT.H  
has changed its name to E32BASE.H, that the interface to clocks has  
been changed, that all TBuf_nn typedefs have been withdrawn, that  
several StoreL/ RestoreL functions have become ExternalizeL/  
InternalizeL functions, that various EText enums that used to be  
global are now scoped, that ServiceL() functions have to move from  
CServer subclasses to CSession subclasses (sometimes for better,  
sometimes for worse), and that various sets of header files have been  
rationalized, so you may find you need to #include different files  
from before  
  
3)  Possibly the best single improvement, arising from the conversion,  
is that you can now run Eikon programs outside the debugger, eg by  
just typing "shell" from the CMD line; you can go one stage further,  
and type eg "shell tbmptag" to start up the Eikon Shell and have it  
start up, in turn, the *.PRG file you've specified (in this case,  
TBmpTag.PRG)  
  
4)  In case you have any trouble with crashes in the Window Server,  
Store, or EText, you may find it useful, after installing EIKON 019,  
to copy the UTC (under-the-counter) files from R:\EIKON\TEMP into  
your \E32SYS  
  
(You should also delete old document files - especially those with  
global text in them - and start your collection of saved files  
afresh)  
  
5)  All Eikon test code has been converted to the new software, with  
the exceptions that: THKeys0 and THKeys1 have been deleted (being  
regarded as superseded by other test code - the only pieces of unique  
code in them have been moved into a rejuvenated TMenuB1); TCalcBut  
and TRecLd have been superseded by the new test program TCalcUi (see  
below); and TEdwin2 will be converted later (it contains instances of  
CPicture, and its conversion will require more care) - whilst TEdwin2  
runs and you can do many things with it, you can't insert any  
pictures  
  
6)  Altered the BACKUP verb of MNT.CMD to -x*.NCB files, ie to exclude  
*.NCB files from the backup zip - which makes a huge difference!  
  
7)  Altered the status of *.MAK files in LI.PRJ listings from text to  
binary, because it seems that they change more often under MSVC4 than  
under MSVC2, and I'm fed up with vdiff.lis listings being swamped by  
lists of changes in *.MAK files  
  
8)  Altered MNT DELWORK to delete any EIKON*.* files in \E32SYS  
  
9)  There's a new system in place for switching to an underlined  
font: there's no longer any dedicated underlined system fonts;  
instead, you just call eg SystemGc().SetUnderlineStyle(...)  
  
10) As an experiment, hooked the Zoom In and Zoom Out commands  
selected from the Zoom pop-up menu into the relevant functions in the  
bitmap editor  
  
11) Simplified and tidied a lot of code, all over the place, in the  
course of making the conversion to the new software componentes  
  
12) The SaveAs code for Demo wasn't setting the flag to say that a  
document was loaded, with the result that the user got queried for a  
filename again on exit; this bug had been replicated to lots of other  
test code; all fixed now  
  
13) If the text of the info message is changed while the previous  
info message is still showing, the changeover now happens more  
prettily (fixes bug HA-78); added test code for this case to TMenuB1  
  
From Vamsi:  
-----------  
14) The text editor application is now released as part of Eikon, for  
the time being, in its own new source directory \eikon\texted  
  
15) The main view is a standard global text editor; you can type in  
text, save it (to the native *.TED format), load it in again, or  
"import" a plain text file, such as a RELEASE.TXT or even a  
TEXTED.CPP file  
  
16) TextEd has a reasonably full menu bar, with most of the items  
leading for the moment to a "Not implemented yet" info print; dummy  
dialogs exist for Find, Replace, and Goto  
  
17) The Word Count menu item reports the number of words in the  
document  
  
18) Provided a new STRUCT definition in EIKDEF.RH, called  
TOOLBAR_LABEL, to allow applications to put text labels eg at the top  
of their toolbars (TextEd is considering putting the name of the  
current document at the top of its toolbar)  
  
From DavidA:  
------------  
19) New test code TCalcUi (superseding TCalcBut and TRecLd, which are  
withdrawn) features a prototype of the top-level calculator view  
  
20) This features recursive loading of controls within borders, using  
classes that will shortly migrate, in part, into system code, where  
they will facilitate improved dialog geometries  
  
21) This also features improved "multi-label" buttons, eg with better  
text positioning when there is only one line of text  
  
From Julian:  
------------  
22) The bitmap editor now allows the user to draw filled or hollow  
rectangles and circles - in any of the "standard" colors  
  
23) The bitmap editor is now easier to use from the keyboard; eg when  
drawing a line, rectangle or circle (or even when selecting a  
region), pressing Space once will establish the first pointer down  
position (ie the "anchor") and pressing Space again (with the cursor  
moved elsewhere) finishes the operation  
  
24) Keyboard users can move a selected region by putting the cursor  
inside the selected region, and then using Shift-cursor keys (or  
PgUp/ Dn etc)  
  
25) Many internal improvements in the bitmap editor code  
  
26) Titles of dialogs are now drawn in a larger, bolder font  
(actually this change was made ages ago, but has been kept commented  
out of the code, because at the time there were problems with  
algorithmic bolding); this does, however, mean that a few dialogs  
which used to fit on the screen are now several pixels too tall  
  
From Neil:  
----------  
27) Changed both edwin and listbox code to use the new  
GetClientRect() function in CCoeWinArea (in CONE 061), simplifying  
various layout calculations; this required providing edwin with its  
own version of BorderWidth()  
  
28) Fixed a listbox bug (similar to an edwin one fixed a few days  
ago) whereby dragging into the listbox from outside changed the  
selection  
  
29) Extra functionality in the AdjustClientRect() function of the  
scrollbar manager class, allowing scrollable controls to draw in the  
area a scrollbar would normally be in, if it wasn't too small to  
display (some of the interactions here need a bit more debugging)  
  
From Siamak:  
------------  
30) Modified CEikListBox::HandleListUpdate() to make it simpler and  
more reusable; the idea now is that when clients of a listbox modify  
its model (by, say, deleting some items), they should in general take  
the following steps:  
    (a) call CEikListBox::ClearSelection()  
    (b) modify the model  
    (c) call CEikListBox::SetTopItemIndex()  
    (d) call CEikListBox::SetStateL() and/or SetCurrentItemIndex()  
    (e) call CEikListBox::HandleListUpdate()  
  
31) Fixed bug in CEikListBox::MatchTypedChar()  
  
32) Various internal listbox changes in preparation for horizontal  
scrolling and left/right navigation in multi-column listboxes  
  
From SimonC:  
------------  
33) Improved the storage mechanism used by the directory browser for  
the set of current drive names (replacing a CDesCArray with a TInt32)  
  
34) Other internal improvements to directory browser, eg improving  
the behaviour of the list after directory changes.  
  
  
Version 0.01.018  
================  
(Made by DavidW, 8 Mar 1996)  
  
Uses:   E32/053 F32/017 STORE/008 BAFL/020  
        GDI/012 FNTSTORE/007 FBS/013 BITGDI/013 WSERV/025 CLOCK/007  
        CONE/059 ETEXT/026 TBOX/042 FONTS/008 ALWL/011  
  
From SimonC:  
------------  
1)  Improved TLBox1 to stop the crashes that used to be possible  
after changing from a longer list to a shorter list  
  
2)  Trying to read the directory from eg A: when that drive is empty  
now produces an infomsg and an empty directory list, rather than an  
error alert  
  
3)  Changed the buttonarray code to allow a spacer to be added to a  
horizontal array  
  
*)  Made some changes to EIKCLOCK.* that Brendan wanted for  
Time/World, ie added a virtual CEikClock::SetBackgroundColor, and  
altered the definition of a flag to avoid a clash of values  
  
From Siamak:  
------------  
4)  Added a new public function to CEikListBox called  
HandleListUpdate(), which should be called when alterations have been  
made to the model of the listbox (such as additions or deletions); at  
present this function will reset the current and top item indices to  
0 (since the old values may no longer be valid), update the listbox's  
scrollbars (if any), and redraws the listboxes (by default)  
  
5)  Fixed bug in CEikListBox::CalcHeightBasedOnNumOfItems(), which  
was assuming that the listbox always had a "standard" border; there  
is now a new listbox function BorderWidth() that returns either  
EikStandardBorderWidth (whose definition has been added to EIKENV.H,  
namely 1) or KEikSunkenBorderWidth  
  
6)  Fixed the bug in CEikListBoxView::Draw() that was causing  
multi-column listboxes to draw incorrectly  
  
7)  Added CurrentItemIndex() and SetCurrentItemIndex() functions to  
CEikListBox  
  
From Bret:  
----------  
8)  The sidebar pop-up menus (eg for Help or Clipboard) are now  
positioned more appropriately, ie alongside the corresponding sidebar  
button  
  
9)  Altered TMenuB0 to show how, in principle, additional items can  
be dynamically into a sidebar pop-up menu (such as the Zoom menu);  
this also tests how the pop-up menu positioning code takes account of  
the length of the menu  
  
From DavidA:  
------------  
10) Made some improvements to the multi-label buttons in TCalcBut:  
  
11) Eg they are now more robust to some of the text being empty  
  
12) They now cope with four separate pieces of text, rather than  
three.  
  
  
Version 0.01.017  
================  
(Made by DavidW, 7 Mar 1996)  
  
Uses:   E32/053 F32/017 STORE/008 BAFL/020  
        GDI/012 FNTSTORE/007 FBS/013 BITGDI/013 WSERV/025 CLOCK/007  
        CONE/059 ETEXT/026 TBOX/042 FONTS/008 ALWL/011  
  
NB carefully: the *.MAK files, *.MDP files, and *.CMD files for this  
release of EIKON all presuppose MSVC 4.0.  
  
(Thanks to Brendan for pointing out that you can use MSVC 4.0, even  
with versions of E32 prior to the watershed 054)  
  
From Siamak:  
------------  
1)  Fixed bug in the first letter matching logic, which could end up  
in an infinite loop  
  
2)  Simplified the OfferKeyEventL() function in CEikListBox, making  
it smaller and more reuseable for subclasses; as a result, the  
corresponding method in CEikMultiColumnListBox is no longer needed  
  
3)  As an experiment, defined a flag for list boxes to make them  
"show list box tips" whenever the current item is changed, which  
defaults to displaying an info message with the full text of that  
item; this feature lessens the requirement for a horizontal scrollbar  
on a narrow listbox  
  
4)  Modified CEikListBoxView so that: (a) it now uses its "iViewRect"  
as its clipping region; and (b) it fills any unused space in the  
display area with the background color  
  
5)  Removed all MFI (multi-field item) stuff from Eikon (since MFI  
listboxes will not be part of Eikon; a different implementation will  
be used for eg the "file details" list box)  
  
6)  Various other internal changes to CEikListBox  
  
7)  Another change to listbox drawing code (made on Simon's PC) for a  
case when the number of items in the listbox has reduced from what it  
was previously (however, this change seems to have broken the display  
of multi-column listboxes)  
  
From SimonC:  
------------  
8)  Altered TLBox1 to include a drive selector dialog, making the  
resulting application more closely like the intended directory  
browser system component (not yet fully functional)  
  
9)  Minor changes to EIKBUTAR.* as suggested by Brendan, mainly to  
improve efficiency  
  
From Bret:  
----------  
10) Clicking on any of the five sidebar buttons is now effective in  
launching an appropriate menu or menubar (bear in mind the details of  
the picture in the emulator aren't quite right)  
  
11) The system resource file now has default menus for the clipboard  
commands, the IR commands, the zoom commands, and the help commands  
  
12) EIKCMDS.HRH now contains standard Cid numbers for commands from  
the above menus  
  
13) See TMenuB0 for an example of how an application can use the  
"Warn" mechanism to alter the contents of, eg, the Help menu  
  
From Julian:  
------------  
14) Added line-drawing facility to the bitmap editor  
  
15) Another enhancement to the bitmap editor, for the case of pointer  
events dragged outside the bitmap editor's window  
  
16) General internal improvements to bitmap editor code  
  
From Neil:  
----------  
17) Fixed an ancient edwin bug, in which clicking outside the edwin  
and then dragging onto it could have unexpected results  
  
18) Changed the list box draw code in the case of the list box being  
resized (to prevent unnecessary work being done *every* time the list  
box is drawn)  
  
From MartinD:  
-------------  
19) Internal changes to the edit combo box, to prevent it from  
crashing on destruction (mainly by removing code, and leaving it up  
to the superclass to do more!)  
  
From Brendan:  
-------------  
20) Tidied up the CEikBitmap class, making it more extensible (and  
also fixing a potential memory leak)  
  
21) Added another new test program, TBmp, to exercise these extra  
features in CEikBmp  
  
From DavidW:  
------------  
22  Converted all system code and test code to run under MSVC 4.0.  
  
  
Version 0.01.016  
================  
(Made by DavidW, 6 Mar 1996)  
  
Uses:   E32/053 F32/017 STORE/008 BAFL/020  
        GDI/012 FNTSTORE/007 FBS/013 BITGDI/013 WSERV/025 CLOCK/007  
        CONE/059 ETEXT/026 TBOX/042 FONTS/008 ALWL/011  
  
From Siamak:  
------------  
1)  Added a ConstructL() function to CEikChoiceList, to make it  
easier to construct choice lists dynamically (eg outside the context  
of a dialog)  
  
2)  Modified the choice list's key event handling so that it now  
treats Down as the same as Tab; this makes some sense in container  
controls other than dialogs, where Tab may be appropriated for other  
uses; normally it won't make any difference in dialogs, since the  
Down key won't get passed on to an individual control (but there is  
an interesting exception when there is only one focussable control in  
a dialog)  
  
3)  Modified CEikListBox::SetExtentL() so that it now "rounds down"  
(if necessary) the height of the display area of a listbox, to ensure  
that a whole number of lines is displayed  
  
4)  Both standard and multi-column listboxes now have two  
ConstructL() functions: one to specify sizes in pixels, and the other  
to specify sizes in terms of items and numbers of characters  
  
5)  Provided pointer handling for multi-column listboxes (see TLBox  
for an example)  
  
6)  Started a major extension to TLBox, to make it provide a  
framework in which more realistic testing of listboxes can take  
place; currently TLBox subclasses CCoeContainerControl to have a  
control which will be used for displaying various kinds of listboxes;  
you can navigate between these controls using the TAB key  
  
(The toolbar displayed on the right isn't operational yet)  
  
From SimonC:  
------------  
7)  Modified the hierarchical list box code in TLBox1 so that it now  
displays the contents of the current root directory  
  
8)  You can press Right (or Enter) on any expandible branch, to cause  
it to expand one level, and display its contents indented one level  
  
9)  You can also press Left, when on the head item of a branch, to  
collapse that branch again  
  
From Neil:  
----------  
10) Change to listbox drawing code to avoid junk being left in the  
margin regions after a listbox has been resized (there's a new  
function DrawMargins())  
  
11) Provided two independent fixes(!) for the problem of the bottom  
right-hand corner of an edwin not being redrawn, in the case when it  
has both a horiz and a vert scrollbar; the preferred fix is simply no  
longer to call iWin.SetBackgroundColor())  
  
12) Changing the font or extent of an edwin should now retain any  
selection region, as well as its position  
  
13) TScrlB1 now gets around the problem of requiring the user to type  
a whole lot of data into its edwin, before it can be meaningfully  
tested, by dumping a directory reading of the root directory into  
the edwin on start-up! (this may cause a slight delay)  
  
14) Added a horizontal scrollbar to TScrlB2, to test out redraws of  
resized listboxes  
  
From Julian:  
------------  
15) Reorganized bitmap editing code to cut down on storage  
requirements  
  
16) Also the code handles interim failures better, by means of a new  
function HandleUnfinishedOperation()  
  
17) A better scheme is in place for when the pointer is dragged  
outside the visible bitmap editing window  
  
18) Replaced some home-grown filename manipulation code with some  
calls to F32 services  
  
From DavidA:  
------------  
19) New test code TRecLd.* demonstrating some ideas to be used as the  
basis for recursive loading of layout information from resource files  
(such as will allow more complicated dialog geometries)  
  
20) TRecLd has its own special subclass of CCoeContainerControl,  
and parts of it are intended to migrate to CCoeContainerControl  
itself in due course (this code requires CONE 059)  
  
From Vipul:  
-----------  
21) Fix to EIKCONSO.CPP to make HideCursor() effective  
  
From DavidW:  
------------  
22) Changed TEdwin2 to (at last!) allow data exchange between it and  
a launched TBitEd0 sub-application.  So insert "Paint" style pictures  
now really does work - and they can be edited again later  
  
(caveat: this version of Eikon can't yet use the version of EText  
that supports persistence of rich text, so you can't save and load  
your TEdwin2 documents)  
  
23) Changed every CalculateRequiredSize() function to have a trailing  
...L on its name, ie CalculateRequiredSizeL(), as required by the  
corresponding change in CONE 059  
  
24) Simplified some example code in TDialg0 that accesses its toolbar  
button states, so as not to need to know about the intervening  
buttonarray object any more (this simplification requires CONE 059)  
  
25) Pixel positioning tweak in secret editor code, for slightly  
improved visuals.  
  
  
Version 0.01.015  
================  
(Made by DavidW, 5 Mar 1996)  
  
Uses:   E32/053 F32/017 STORE/008 BAFL/020  
        GDI/012 FNTSTORE/007 FBS/013 BITGDI/013 WSERV/025 CLOCK/007  
        CONE/058 ETEXT/026 TBOX/042 FONTS/008 ALWL/011  
  
From Julian:  
------------  
1)  Fixed problem (found by Pieter and diagnosed by DavidA) whereby  
setting a line in a dialog dimmed or invisible could result in  
preceding lines also being dimmed or invisiblised (this fix relies  
upon CONE 058)  
  
2)  The same fix also deals with the case of strange effects when a  
non-focussable line in a dialog has a prompt with a mnemonic  
  
3)  Added a non-focussable line to the "Text editors" dialog in  
TDialg1 to test the above fixes  
  
4)  Added File Import and File Export dialogs to the bitmap editor  
code in TBitEd0, allowing import and export of *.PBM files  
  
5)  The bitmap editor now has a permanent bitmap device (instead of  
frequently creating and destroying one) to deal with all bitmap  
manipulation, with the result that the drawing process has speeded up  
  
From Natascha:  
--------------  
6)  New module EIKPARAD.* containing code for three new system  
dialogs: the Paragraph Alignment dialog, the Paragraph Spacing  
dialog, and the Paragraph Indents dialog  
  
7)  New functions RunAlignDialogL() etc in CEikEdwin, to run eg the  
Paragraph Alignment dialog for that edwin  
  
8)  TEdwin0 now has three new toolbar buttons, allowing access to  
these three new edwin functions  
  
(TEdwin0 already saves its global character and paragraph formats to  
file, so re-opening an existing TEdwin0 document will reinstate the  
formatting present in it when it was last edited)  
  
From DavidW:  
------------  
9)  Converted TBitEd0 to be a document-oriented application, with  
files with typical extension *.PNT; save a file in TBitEd0 and you'll  
see it appear in the list offered by the Shell in its Documents  
dialog (identified as belonging to the TBitEd0 application)  
  
10) TBitEd0 is now an auto-saving application, ie saving all changes  
automatically on exit, S3-style, without prompting the user for  
confirmation  
  
11) More preparation for processing sidebar events other than clicks  
on the menu button: the code that eventually deals with these has  
been routed in the first instance through the menu bar, to ensure  
that these events are treated serially (eg so that you don't end up  
with two sidebar popup menus active at the same time)  
  
12) On the PC, just as F9 is mapped to the menu button on the  
sidebar, so now is F8 - F5 mapped to the Help, Clipboard, Irda, and  
Zoom sidebar buttons respectively  
  
13) Put a fix in place to prevent the foreground application  
receiving sidebar events when the Eikon Server has a dialog that is  
active (eg the Task List dialog).  
  
  
Version 0.01.014  
================  
(Made by DavidW, 4 Mar 1996)  
  
Uses:   E32/053 F32/017 STORE/008 BAFL/020  
        GDI/012 FNTSTORE/007 FBS/013 BITGDI/013 WSERV/025 CLOCK/007  
        CONE/057 ETEXT/026 TBOX/042 FONTS/008 ALWL/011  
  
From Neil:  
----------  
1)  Added SetXScrollBarFlags() and XScrollBarFlags() (where 'X' is  
either H or V) in CEikListBox, to enable non-default scrollbars  
  
2)  Changed listbox scrollbar flag names from "Style" to "Flags"  
since they effect functionality as well as appearance (and this also  
keeps things consistent with eg CEikEdwin)  
  
3)  Added similar ScrollBarFlags functions to CEikEdwin  
  
4)  Replaced a call to FormatTextL() in the SetExtentL() of CEikEdwin  
with a call to a new function ResetViewL(), also called from  
RunFontDialogL().  This function keeps the line with the cursor in  
the same position on the screen as best as possible, instead of  
resetting it to the first line (as FormatTextL() did).  To see the  
effect of this change, eg use TScrlB1 and resize its edwin  
  
5)  Changed SetScrollBars() in CEikEdwin to cater for horizontal as  
well as vertical scrollbars  
  
6)  Added a copy of the properties dialog from TScrlB2 into TScrlB1,  
allowing changes to the number of lines of data (not yet functional),  
the number of lines visible, and the width of the edwin  
  
(it's now clear that both scrollable listboxes and edwins have redraw  
problems when resizing - these will be addressed soon)  
  
7)  Fixed a scrollbar bug (found by SimonC) in which a scrollbar with  
dimmed button(s) got increased such that new buttons were added, but  
the new buttons didn't get dimmed as required  
  
From Julian:  
------------  
8)  In the bitmap editor, the way the focus pixel has been improved  
(following an idea in Draw), using a "+" cross in "Pixel" mode of the  
application  
  
9)  In "Region" mode, the cross changes to two crossed lines (try it  
and see), and when the focus pixel is inside the selected region, a  
"X" cross is used instead  
  
From Vasmi:  
-----------  
10) Fixed the SetFileNameL() function of CEikFileNameSelector so  
that, if a specific filename is passed in, that name (if it exists) is  
the one initially displayed in the choice list  
  
11) Made the Edit Picture function in TEdwin2 cope with either the  
"bitmap" or the "simple" kind of picture, by bringing up the correct  
dialog in either case  
  
From Brendan:  
-------------  
12) New module EIKTAG.* containing two new classes, CEikTag and  
CEikBitmap, each to be used in due course in Alert dialogs  
  
13) A CEikTag is like CEikLabel in many ways (a proper analysis of  
whether the two classes ought to be combined needs to be done); it is  
a text label that is non-focussable, can change font, can align its  
text, and does not recognize mnemonics  
  
14) There's also a CEikBufTag variant of CEikTag, that does not  
require memory allocation to alter its text  
  
15) CEikBitmap is a simple bitmap control  
  
16) See new test program TBmpTag for code that exercises CEikTag and  
CEikBitmap  
  
17) Also made some improvements to TWldSl  
  
From Siamak:  
------------  
18) More work on MC (Multi-Column) list boxes; currently, keyboard  
navigation/selection (with no scrolling) works, but scrollbars,  
pointer events, etc, are not supported yet  
  
19) See the latest TLBox for an example of an MC listbox  
  
20) Made some internal changes in listbox code to improve reusability  
  
From SimonC:  
------------  
21) Made some detailed changes to scrollbar positioning code, to try  
to ensure the borders of their buttons always get drawn properly (this  
turns out to be quite complicated, as a side-effect of the "dense  
packing" flag, which in effect allows buttons to lie about the extent  
of screen space they need to draw over)  
  
From MartinD:  
-------------  
22) The edit combo box now displays a cursor (see TCombox)  
  
23) Other internal improvements to the edit combo box code  
  
From Bret:  
----------  
24) Changes to test code TMenuB0 in preparation for testing launching  
pop-up menus on a "pen held still" event  
  
From DavidW:  
------------  
25) Re-arranged a lot of the code in TEdwin2, to avoid some memory  
leaks, and to clarify its structure generally  
  
26) In TEdwin2, there is now only only one "Insert picture" menu  
command, that leads onto a dialog with a listbox of four different  
picture types - "Paint", "Draw", "Simple", and "Bitmap from file";  
choosing "Simple" or "Bitmap from file" runs up an appropriate  
dialog; choosing "Paint" now runs up the TBitEd0 test application  
  
27) Moved the CEikTitleWindow class out of TEdwin0 test code into  
EIKAPPC.*, so that it can be used by other applications as well; in  
particular it is now used by TBitEd0, in the case when it is being  
run as a sub-program (eg from TEdwin2)  
  
28) Provided LaunchPopupMenuL() function in CEikonEnv, which can be  
called whenever an application desires; changed code in TMenuB0 to  
give an example of how to call this function; the "return value" is  
that the HandleCommandL() function of the CEikAppControl subclass is  
called (the same as for commands chosen from the menubar proper)  
  
(in principle cascade sub-menus can be launched from any such popup  
menu, but for the time being, pen navigation into these sub-menus  
won't be possible)  
  
29) Added a new utility function AddDialogLikeControlToStackL() to  
CEikonEnv, returning the CCoeControlStack* pointer of the stack the  
passed control was added to; changed code in eg EIKDIALG.CPP and  
EIKCHLST.CPP to use this new function  
  
30) The "No"/"Yes" pair of buttons in eg the Query dialog now respond  
to Alt-N and Alt-Y respectively (but not yet to N and Y)  
  
31) Fixed a bug in the "copying deferred loaded data" part of Demo,  
which could cause a crash in the case when no document file had been  
loaded.  
  
  
Version 0.01.013  
================  
(Made by DavidW, 1 Mar 1996)  
  
Uses:   E32/053 F32/017 STORE/008 BAFL/020  
        GDI/012 FNTSTORE/007 FBS/013 BITGDI/013 WSERV/025 CLOCK/007  
        CONE/057 ETEXT/026 TBOX/042 FONTS/008 ALWL/011  
  
Uses CONE/057 for the first time  
  
From Julian:  
------------  
1)  Further developments in the bitmap editor, allowing moving and  
clearing of a select region (ie including "drag and drop")  
  
From MartinD:  
-------------  
2)  First cut of an edit combo box control, ie an editor with a tab  
button to expand a list of ready-made choices (such as a history  
list); implementation in the new module EIKCMBOX.*  
  
3)  See test code TCOMBOX.* for an example (early days yet)  
  
From SimonC:  
------------  
4)  Analog clocks can now have their background color specified.  At  
present this happens only if the flag EEikAnalogClockSelectBackground  
is set, because the drawing flickers quite badly and the clock hands  
are hidden until they are animated.  For demo purposes, all the  
clocks in TDialg0 behave like this.  Hopefully the CLOCK.DLL can  
offer some more support here, otherwise the whole feature will get  
thrown out and the spec team will simply have to do without this  
particular bell-and-whistle  
  
(this new clock feature requires that a pile of new *.PBM bitmaps get  
placed in your \e32data; this happens automatically inside EIKON's  
MNT GETREL)  
  
5)  Clocks now also have their border drawn by default.  This can be  
disabled via the flag EEikClockNoBorder.  All toolbars have this set  
for now  
  
6)  Converted the toolbars in the Shell and TDialg0 to be  
buttonarrays, so that their controls get sized properly (before too  
long, it's likely that *all* toolbars will convert to this scheme)  
  
7)  Buttonarrays have been generalized to allow them to include  
spacers  
  
8)  Other minor internal changes to buttonarray code  
  
From Neil:  
----------  
9)  Upgraded CEikEdwin to use the scrollbar manager functions for  
positioning and sizing scrollbars  
  
10) Fixed a small bug in listbox code that prevented the scrollbar  
"snapping" into position on the thumb release  
  
11) Fixed a small bug (rounding error) in the calculation of the  
thumb position in scrollbars  
  
12) In TScrlB2, the "number of items" editor in the properties dialog  
is now functional  
  
From Siamak:  
------------  
13) Changed CEikListBox::Draw() to draw a 3D border if the listbox  
flag EEikListBoxSunkenBoxBorder is set  
  
14) Started work on multi-column ("snaking") list boxes, as will be  
used in the (real) Shell; implementing this control requires two new  
classes: CEikMultiColumnListBox (derived from CEikListBox) and  
CEikMultiColumnListBoxView (derived from CEikListBoxView)  
  
15) Modified the test app, TLBox, to use a CEikMultiColumnListBox  
(although this still behaves like a standard listbox at the moment)  
instead of an MFI listbox  
  
16) Other internal listbox changes  
  
From Bret:  
----------  
17) Clicking on sidebar buttons other than the menu button now  
results in an IPC message to the foreground client (previously, this  
only happened for the menu button)  
  
18) For now, the response to these other buttons is simply to display  
an info print  
  
From Brendan:  
-------------  
19) Improvements to world selector drawing code  
  
From DavidW:  
------------  
20) Renamed the "MDWORK" verb of MNT.CMD to "MAKEWORK", to match E32  
  
21) Simplified the forest of listbox classes, by throwing out all the  
mad mixins (definition: a "mad mixin" is an M class with a Base()  
function that returns a CBase pointer, clearly showing that the class  
design is mad :-)  
  
22) Various other changes to listbox classes to make them more  
flexible and easier to use (without having to duplicate lots of code)  
  
23) New test program TLBox1, showing the start of a hierarchical  
listbox, together with various classes that will end up, after due  
evolution, in Eikon.  
  
  
Version 0.01.012  
================  
(Made by DavidW, 29 Feb 1996)  
  
Uses:   E32/053 F32/017 STORE/008 BAFL/020  
        GDI/012 FNTSTORE/007 FBS/013 BITGDI/013 WSERV/025 CLOCK/007  
        CONE/056 ETEXT/026 TBOX/042 FONTS/008 ALWL/011  
  
Uses TBOX/042 and CONE/056 for the first time  
  
From Brendan:  
-------------  
1)  Incorporates first cut of Eikon world selectors; these allow you  
to select a city or a country, or a city in a particular country  
  
2)  The selectors consist of CWorldSelector and CWorldManager; the  
selectors must be linked to a manager, which keeps track of the state  
of the "world ID", by reference to the world database  
  
3)  A city selector and a country selector can exist as a pair,  
sharing their world manager  
  
4)  Default keyboard behaviour is as follows: Ctrl-L locks the search  
mode of the selectors (specific text can be displayed for a  
particular search mode); otherwise incremental matching applies  
  
5)  See the new test program TWldSl, in which various world selectors  
are created in different ways (singly and in pairs); Test1  
adds/removes a sunken box border; Test2 changes the font; Test3 shows  
the controls in a dialog  
  
From SimonC:  
------------  
6)  Defined two new toolbar flags, EEikTBarLeftOfScreen and  
EEikTBarTopOfScreen; changed TDialg0 to have its toolbar at the left  
of the screen  
  
7)  Changed CEikAppControl::GetClientExtent() to pay closer attention  
to the position of the toolbar (which side of the screen, etc)  
  
8)  Added a new function CreateSecondToolBarL to CEikAppControl,  
essentially containing the code that used to exist separately in test  
code like TBut0 and TDialg0, to ease the creation of an auxiliary  
toolbar (sometimes called "toolband") from a resource file; see TBut0  
or TDialg0 for how to use this new function  
  
9)  In an attempt to prevent the uneven line down the side of  
toolbars caused by clocks and other controls which don't draw a  
border, have gone back to having toolbars and button arrays draw a  
border; clocks at the top or bottom of a toolbar presently cover some  
of this border  
  
10) Various other small changes to the toolbar and buttonarray code  
in the wake of recent changes to the box layout engine:  
  
11) CEikSpacer now has new functions SetSpacerHeight and  
SetSpacerWidth, so that button arrays can specify eg the height of  
spacers; currently spacers are set to the same height as the system  
font, if toolbar buttons are individually stretchable, and (still)  
the same height as buttons otherwise  
  
From Neil:  
----------  
12) Started a re-write of the ScrollBarManager class, to add in extra  
functionality (eg tiling functionality) currently duplicated by  
different clients of scrollbars (such as edwin and listbox); thus  
there are new functions CalcClientRect() and TileScrollBarsL()  
  
13) The former functionality of AddScrollBarL() has had to be split  
into a number of different functions, eg CreateScrollBarL() and  
AddScrollBarToClient() (plus various SetXxxxL() functions), to cope  
with wider sets of requirements  
  
14) Converted list boxes to use the new scrollbar manager functions,  
instead of positioning the scrollbars manually  
  
15) Partially converted edwin to the new scrollbar manager scheme;  
likewise updated TScrlB0  
  
16) In TScrlB2, the visible items and width number editors in the  
Properties dialog are now functional; this has exposed a couple of  
bugs in the listbox redraw code and thumb drag scrolling  
  
From Siamak:  
------------  
17) CEikListBox now has a new ConstructL() function that allows its  
client to specify the size of the listbox in terms of the numbers of  
items and the number of character widths per item; the size of any  
scrollbars to be added on gets taken care of automatically; this  
simplifies application code such as that in TLBox  
  
From DavidA:  
------------  
18) One line fix to EIKEDWIN.CPP to prevent a crash when laying out a  
dialog like the "No buttons" dialog in TDialg0.  
  
  
Version 0.01.011  
================  
(Made by DavidW, 28 Feb 1996)  
  
Uses:   E32/053 F32/017 STORE/008 BAFL/020  
        GDI/012 FNTSTORE/007 FBS/013 BITGDI/013 WSERV/025 CLOCK/007  
        CONE/055 ETEXT/026 TBOX/041 FONTS/008 ALWL/011  
  
From SimonC:  
------------  
1)  Various improvements to the CEikClock classes, eg new flags are  
available offering a choice of clock styles.  Eg clocks can have  
shadowed hands/figures and can display a date, and the second hand is  
optional for analog clocks  
  
2)  See the three new dialogs in TDialg0 for many examples of clocks  
(eg a dialog with no fewer than four clocks in it)  
  
3)  New functions SetClockFlags and SetBackgroundColor  
  
4)  A CEikClock is now always created in its own window, to prevent  
problems with the background of the containing window obscuring part  
of the clock display  
  
5)  Clocks in toolbars are once again drawn centred rather than  
left-aligned  
  
6)  The background color is once again drawn throughout the whole  
size of a toolbar (rather than being missed out from the area around  
a clock)  
  
From Julian:  
------------  
7)  Numerous further improvements to the bitmap editor, TBitEd0  
  
8)  The individual pixels can now be altered to any one of four  
colors (black, dark gray, light gray, or white), by clicking on latch  
buttons in the toolbar  
  
9)  To start with, the bitmap editor will create a plain bitmap sized  
30x30, but this will be sized larger automatically, if the user  
alters a pixel outside this region  
  
10) Started work on Zoom In and Zoom Out feature (the grid won't be  
drawn if the bitmap ratio is too small)  
  
11) Scrolling up/down and left/right is now possible, within the  
bitmap drawing  
  
(as before, some of the problems seen in using TBitEd0 can be  
attributed to known defects in BITGDI)  
  
From Neil:  
----------  
12) A few more bug fixes for awkwardly sized scrollbars  
  
13) Moved all scroll-bar "move button" code into its own new module,  
EIKSBMB.*, to allow easier independent access to it by application  
code (eg code wanting buttons with the Up Down Left or Right  
triangles drawn on them)  
  
14) New testcode TScrlB2 with a listbox with a scrollbar, together  
with a dialog to change the number of items, number of visible items,  
and width of the scrollbar (the dialog has no effect yet)  
  
From Siamak:  
------------  
15) Added more support for horizontal scrollbars in listboxes; in  
TLBox, you can now see a horizontal scrollbar (though it's not  
functional yet)  
  
16) Fixed a bug in the CreateDefaultModel() function of CEikListBox,  
which wasn't calling the ConstructL() function for the listbox model  
it had created  
  
17) Fixed a sizing bug that was showing up in TBut0 to do with  
positioning pop-out listboxes  
  
From DavidW:  
------------  
18) Converted to the new box layout engine code, from CONE 055; the  
main change here is that the default alignment flags have changed  
from EBloAlignTop|EBloAlignLeft (which used to have the value 0) to  
EBloWholeWidth|EBloWholeHeight (which *now* has the value 0)  
  
19) Most of the layout code in Eikon seems to have been converted  
successfully; a known exception is the "No buttons" dialog in  
TDialg0, which presently panics (a fix is being undertaken); note  
that various toolbars and dialogs now look slightly different from  
before; some of these changes are positive and some are not! (further  
changes are pending here).  
  
  
Version 0.01.010  
================  
(Made by DavidW, 27 Feb 1996)  
  
Uses:   E32/053 F32/017 STORE/008 BAFL/020  
        GDI/012 FNTSTORE/007 FBS/013 BITGDI/013 WSERV/025 CLOCK/007  
        CONE/054 ETEXT/026 TBOX/041 FONTS/008 ALWL/011  
  
From Julian:  
------------  
1)  Further improvements to the bitmap editor TBitEd0, which now  
allow the bitmap to be altered and the changes saved to file  
  
2)  For now, the only possible change is to set the current pixel to  
black, which you do by pressing Space  
  
(due to a couple of known bugs in BitGdi there are problems with the  
details of this; the version of BITGDID.* now in R:\EIKON\TEMP fix  
some, but not all, of these problems)  
  
3)  If you make changes and then try to quit the program, you will  
get an opportunity to save your changes, which will overwrite the  
original file, in \e32data  
  
(you will be able to get back the original *.PBM file, if you need  
it, from \EIKON\SRCDATA)  
  
From Siamak:  
------------  
4)  Various bug fixes and improvements to the listbox code  
responsible for redrawing the selection and/or current item  
  
5)  Changed inter-item spacing in list boxes to 2 instead of 4 (so  
that more items will fit into a given space)  
  
6)  Fixed some problems with the TLBox app, eg creation of the  
listbox with the wrong height, and non-observance of cleanup stack  
guidelines  
  
From DavidW:  
------------  
7)  Many changes to storing and streaming functions, in order to  
support embedded objects and multiple streams more fully  
  
8)  Eg the CEikAppControl virtual functions StoreL and RestoreL have  
split in each case into two: StoreDocComponentsL() followed by  
ExternalizeDocL(), and InternalizeDocL() followed by  
RestoreDocComponentsL() - the order being significant!  The  
...ComponentsL() functions take a store as a parameter, whereas the  
others just take a stream  
  
9)  The end result of these changes can be seen in the latest Demo,  
which can now launch TEdwin0 (from the Frame | Global Text menu) and  
which can store and restore TEdwin0 data on behalf of its sub-program  
  
(the Demo file format version number has been incremented, and  
previous *.DEM files will fail to load)  
  
10) Corresponding changes also needed to be made to the clipboard  
class, allowing embedded objects to be streamed to and from the  
clipboard as well as "standard" streams (again, try Demo as an  
example)  
  
11) Two new classes have been introduced in Demo, which are intended  
to move to system code in due course (once they have acquired some  
stability): RTempFile and RDeferredStream  
  
12) Changed CReadClipboard not to Leave if there is no clipboard  
file, but just to put the clipboard into a state whereby all  
GetReadStream...() calls fail with KNotFound.  
  
  
Version 0.01.009  
================  
(Made by DavidW, 26 Feb 1996)  
  
Uses:   E32/053 F32/017 STORE/008 BAFL/020  
        GDI/012 FNTSTORE/007 FBS/013 BITGDI/013 WSERV/025 CLOCK/007  
        CONE/054 ETEXT/026 TBOX/041 FONTS/008 ALWL/011  
  
From DavidW:  
------------  
1)  Numerous internal changes as preparation for supporting two  
applications running inside the same Eikon environment  
  
2)  To an extent you can already see two applications running inside  
the same environment; start up the Demo app, load a file (or create a  
frame), and then use "Frame | Global text" to run up a copy of  
TEdwin0 (which you will need to have built first) inside Demo; what's  
still missing is an actual transfer of edited data between these two  
apps  
  
3)  Changed the TEikDocHeader class so that several of its functions  
are now static; see eg Demo or TEdwin0 (or TDialg0 or TEdwin1) for  
how to use TEikDocHeader in its new incarnation  
  
4)  Made changes to resource file handling, in line with new builds  
020 of BAFL and 054 of CONE  
  
5)  New functions StoreAppToStreamL and RestoreAppFromStreamL in  
CEikAppControl supersede and extend StoreAppL() and RestoreAppL(); to  
use these functions, you will need to have provided your  
CEikAppControl derived class with GetAppVersion() and GetAppName()  
functions  
  
6)  New function AppObserver() in CEikAppControl, to see (in effect)  
whether the application is being run as a sub-application by another;  
this function returns NULL for a "top-level" invocation, and  
otherwise the handle of the "calling" CEikAppControl  
  
7)  See code in TEdwin0 for when an app should be calling  
AppObserver(), and what to do with the result  
  
8)  New data member iTitle in CEikAppControl which, if present, gives  
the "title text" of this sub-application, as run from the point of  
view of its caller; again see TEdwin0 for an example  
  
9)  Renamed the DoOpenL() functions in test applications to  
DoFileOpenL(), and likewise DoSaveL() to DoFileSaveL().  
  
  
Version 0.01.008  
================  
(Made by DavidW, 23 Feb 1996)  
  
Uses:   E32/053 F32/017 STORE/008 BAFL/019  
        GDI/012 FNTSTORE/007 FBS/013 BITGDI/013 WSERV/025 CLOCK/007  
        CONE/053 ETEXT/026 TBOX/041 FONTS/008 ALWL/011  
  
From Julian:  
------------  
1)  Started work on a new test application, ..\tsrc\TBitEd0, which  
features a toy bitmap editor  
  
2)  Currently TBitEd0 displays a hard-wired bitmap, scaled and with a  
grid drawn on top of it, supporting cursor navigation, but it is not  
yet possible to alter the drawing displayed  
  
3)  Refined the clipboard interface, so that the read and write  
clipboards are now created by a NewLC() call (formerly NewL()), to  
give added system-wide protection against the clipboard file being  
left tied up due to poor application programming; clients of the  
clipboard now typically call CleanupStack::PopAndDestroy() when they  
are finished with it  
  
4)  Changed the "Double click settings" dialog in the Shell, not to  
require the use of floating point maths (hence a numeric editor is  
used rather than a floating point editor)  
  
From Neil:  
----------  
5)  More of the "weird size problems" with scrollbars at various  
awkward sizes (and awkward numbers of buttons) should have been  
resolved now, due to internal changes  
  
6)  Some of these internal changes have the side-effect that the  
SetLength() call to a scrollbar (or scrollbar manager) can Leave on  
occasion, if a new button should be created, but fails with OOM - so  
the function changes name to SetLengthL(), and callers may need to  
take appropriate evasive action  
  
From Siamak:  
------------  
7)  Made various bug fixes and minor improvements to the listbox  
code, and to MFI listboxes in particular (but things still aren't  
quite perfect yet)  
  
8)  The main new feature is that MFI listboxes now truncate text  
fields that exceed the column width, and show a trailing ellipsis,  
rather than simply relying on GDI to clip the text.  
  
  
Version 0.01.007  
================  
(Made by DavidW, 23 Feb 1996)  
  
Uses:   E32/053 F32/017 STORE/008 BAFL/019  
        GDI/012 FNTSTORE/007 FBS/013 BITGDI/013 WSERV/025 CLOCK/007  
        CONE/053 ETEXT/026 TBOX/041 FONTS/008 ALWL/011  
  
  
From Julian:  
------------  
1)  Converted Eikon code to the new double-click mechanism (present  
in Wserv 025, superseding the mechanism in CONE prior to 053)  
  
2)  The start-up code of the Eikon Server process calls the  
SetDoubleClick() function of RWsSession to initialize double click  
parameters  
  
3)  Added a dialog in the Shell to allow the user to alter the double  
click parameters (delay between clicks, and a measure of the distance  
between the clicks)  
  
4)  Altered controls as required to the new scheme (mainly by  
removing code!)  
  
From Siamak:  
------------  
5)  Various changes to the MFI (multi-field item) list box,  
especially its item viewer, which now enforces alignment of fields by  
clipping each field of an item if it exceeds the column width  
(currently, all text fields of a MFI have the same max width)  
  
6)  The MFI list box item viewer now draws the item's icon (if it  
exists); see TLBox for an example  
  
(Note that this work is not complete and further improvements to MFI  
listboxes are pending, eg better highlighting of items)  
  
From Neil:  
----------  
7)  Added draw routines for all scrollbar buttons using new functions  
DrawArrowInRect() and IconRect(), both in CEikScrollMoveButton  
  
8)  Changed the default horizontal scrollbar in TScrlB0 to be long  
enough to show all buttons, to allow TScrlB0 to test the new drawing  
routines in both horizontal and vertical cases  
  
From SimonC:  
------------  
9)  Improved the code in EIKCLOCK.* so that the three sizes of analog  
clock currently available now have hands more in proportion to their  
sizes  
  
10) Clocks also get positioned correctly now (more often!)  
  
11) Added more test cases of buttons with mnemonics, to the dialogs  
in TBut0  
  
12) Fixed a bug in the button code that was preventing a button with  
a mnemonic on its second line of text from being accessed via the  
keyboard  
  
From Bret:  
----------  
13) Corrected a bug in the selection of dimmed cascade menu items  
  
14) Changed various menu pane functions to take a TRect& as a  
parameter, rather than a TRect (the former is almost always more  
efficient)  
  
From DavidW:  
------------  
15) Updated MNT.CMD to fetch the latest RCOMP.EXE, v274, which was  
successfully used to build this release (and all the test code).  
  
  
Version 0.01.006  
================  
(Made by DavidW, 22 Feb 1996)  
  
Uses:   E32/053 F32/017 STORE/008 BAFL/019  
        GDI/012 FNTSTORE/007 FBS/013 BITGDI/013 WSERV/025 CLOCK/007  
        CONE/052 ETEXT/026 TBOX/041 FONTS/008 ALWL/011  
  
From SimonC:  
------------  
1)  Added OfferMnemonicL() and DrawMnemonic() functions to CEikButton  
so that dialog push buttons could have a mnemonic key  
  
2)  See the "Clocks" button in the Customize Toolbar dialog for an  
example of a push button that can be actioned by its mnemonic  
  
3)  To support mnemonics in buttons with two lines of text (which are  
drawn in the smaller system font), another system font had to be  
defined, "SmallerSystemUnderlineFont"  
  
4)  Added a version number to CEikToolBarData so that code that loads  
customized toolbar data from profile files oughtn't to panic if more  
fields are added later  
  
5)  Altered the CalculateRequiredSize of a button array to remove  
most of the assumptions in it that the array is laid out vertically  
  
From Bret:  
----------  
6)  Menu panes now always have space for ticks and buttons on the  
left, and space for cascade symbols on the right, irrespective of  
whether these items actually appear or nor.  This achieves a more  
consistent look for all menu panes (as suggested by MartinB) and  
makes those which had just buttons/ticks of just cascades look  
visually balanced  
  
7)  The width of the space for buttons, ticks and cascades is set by  
a constant; the above changes not only approved the visual appearance  
but also allowed coding simplifications  
  
8)  Added new function CEikMenuPane::DrawCascadeSymbol(), which is  
called by CEikMenuPane::DrawItem() and draws a cascade symbol  
algorithmically (rather than using a character in a font)  
  
9)  Set about disabling dimmed cascade items on menu panes  
(previously if a cascade was set dimmed, it would still launch a  
cascade if selected); to implement this feature in an application,  
the cascade items in the menu pane must be given a command ID; with  
this command ID, the application can call SetItemDimmed()  
  
10) Updated TMenuB0.* to toggle and test a dimmed cascade menu item  
  
From Julian:  
------------  
11) Changed various pieces of text-message preparation code to use  
Format() instead of eg Append(), so as to be more international  
  
12) Renamed the function CEikMenuPane::SetItemText() to  
SetItemTextL(), in recognition of the fact that it can Leave  
  
13) Put a query dialog into TDialg0 before going into an endless loop  
in response to the "Busy" toolbar button  
  
14) Various changes and simplifications to the detailed implementation  
of the clipboard  
  
15) See the latest code in ..\src\eikedwin.cpp or ..\demo\demain.cpp  
for examples of using the clipboard; note in particular how the code  
in ..\demo puts *two* data formats into the clipboard: one in its own  
"native" format, and the other in a kind of "global text" format  
  
16) The definition of format types has been separated into its own  
header file, EIKCLIPB.HRH, leaving EIKCLIPB.H without any specific  
assumptions about the Eikon environment  
  
From Neil:  
----------  
17) Further improvements to scrollbar resizing layout logic in  
EIKSCRLB.CPP; for now, any excess "shaft space" resulting from  
removing buttons is drawn just as a filled rectangle  
  
18) TScrlB0 is now happy with many "too short" scrollbar lengths,  
though there are still a few strange happenings that are being  
debugged  
  
From Vamsi:  
-----------  
19) In TEdwin2, the "Edit picture" dialog is now called when the  
cursor is placed either before or after a picture  
  
20) Stopped duplicating the resource for the "Edit picture" and  
"Insert picture" dialogs (which differed only in their titles); now  
re-use the same resource, and choose the relevant title at runtime,  
using CEikDialog::SetTitleL().  
  
  
Version 0.01.005  
================  
(Made by DavidW, 21 Feb 1996)  
  
Uses:   E32/053 F32/017 STORE/008 BAFL/019  
        GDI/012 FNTSTORE/007 FBS/013 BITGDI/013 WSERV/025 CLOCK/007  
        CONE/052 ETEXT/026 TBOX/041 FONTS/008 ALWL/011  
  
From DavidW:  
------------  
1)  First released compatible with the above versions of E32 etc:  
  
(The API to the Clock DLL has changed fundamentally, and the code in  
EIKCLOCK has only been partially converted to this new API.  So don't  
be too surprised if, for this release, you see clocks badly drawn!)  
  
2)  Programs that linked with FBSD.LIB now have to link with  
FBSCLID.ZIP instead  
  
3)  All "RGroupWindow"s become "RWindowGroup"s  
  
4)  As an experiment, renamed the GETJBLD verb of MNT.CMD to GETCOMPS  
(for "get components").  Thus  
    GETBLD = GETSRC + GETCOMPS  
  
  
Version 0.01.004  
================  
(Made by DavidW, 21 Feb 1996)  
  
Uses:   E32/052 F32/016 STORE/007 BAFL/017  
        GDI/010 FNTSTORE/005 FBS/012 BITGDI/012 WSERV/024 CLOCK/006  
        CONE/051 ETEXT/025 TBOX/040 FONTS/007 ALWL/010  
  
From Julian:  
------------  
1)  Converted the cliboard code into something much closer to the  
scheme described in the latest minutes of the Architecture Team  
  
(an enum for the format type is still being used for the time being,  
though, pending the arrival of UUID technology)  
  
2)  CEikClipboard has gone, being replaced with CWriteClipboard and  
CReadClipboard (both derived, behind the scenes, from CClipboard);  
the lack of "Eik" in these class names reflects the desire to move  
this class out of Eikon altogether (Store is a possible new home)  
  
3)  CEikonEnv no longer creates any clipboard instance during  
application startup, but leaves it to software components to create  
transient clipboard instances as and when needed  
  
4)  A single line editor now will only paste in text data in the  
clipboard up to the first paragraph delimiter in it (to avoid a  
single line editor ending up with multiple paragraphs in it!)  
  
5)  For the time being, picture characters in clipboard text are  
excluded during a paste operation, to prevent random damage  
  
From KevinD:  
------------  
6)  Added support for on-the-fly changing of maximum and minimum  
field values in MFNEs: use UpdateMinAndMax() - any out-of-bounds  
values are reset within the new limits  
  
7)  Updated TDialg1 so that the Number Editor dialog has a tick box  
toggling the max/min values of the CEikIntegerEd from +/- 1600 to +/-  
999  
  
8)  Changed the color of MFNE prefixes to that of the digits  
  
9)  Tweak to alignment of MFNE digits, post-fixes and pre-fixes  
  
10) Fixed bug where two pointer clicks on the start of a MFNE field  
did not display the cursor  
  
From Siamak:  
------------  
11) The vertical scrollbar for listboxes is now operational, ie it  
can be operated via the pen, causing scrolling  
  
12) Fix to bug whereby listbox heights were sometimes leaving space  
for a horizontal scrollbar, even though none is present (resulting in  
partially visible items)  
  
13) Fix to bug whereby a flashing cursor in an incrementally matching  
listbox could get temporarily separated from the highlighted item  
  
From SimonC:  
------------  
14) Customizable toolbars can now have the order of their buttons  
specified; as usual see either TBut0 or Demo  
  
15) This new "order" information is saved to the application's  
profile file automatically (in the absence - yet - of internal  
versioning numbers for toolbar customization data, this means that  
old *.APF files will fail to load properly, and indeed had better be  
deleted, to avoid panicking the app on startup)  
  
16) Altered the dimming code for radio button groups, by providing an  
explicit SetDimmed() function, thereby avoiding the need to call  
SetDimmed() on individual radio buttons inside any Draw() function  
  
From Vamsi:  
-----------  
17) The Edit Picture dialog in TEdwin2 now successfully edits  
pictures of the "simple" kind, provided the cursor is positioned just  
in front of one beforehand; their height can be altered, or their  
"brush" attribute  
  
18) Changed CEikEdwin::NotifyForwardChangedL() from protected to  
public, to allow it to be called from outside (as required by TEdwin2  
code)  
  
From Neil:  
----------  
19) Internal preparation for allowing scrollbars to be dynamically  
resized, and still cope with all their buttons (not fully working  
yet)  
  
From DavidW:  
------------  
20) Converted Demo to the scheme of automatic saving of any changes,  
on exit, and gave it an explicit "File save" menu command to boot  
  
21) Converted the "Scale bitmap" dialog in Demo to use the new  
UpdateMinAndMax() function to set the bounds for the MFNE there  
dynamically, thereby reducing application-specific code (and  
improving the UI of this dialog)  
  
22) Put a few new text messages into EIKON.RSS, eg "Saved" and  
"Nothing to save".  
  
  
Version 0.01.003  
================  
(Made by DavidW, 20 Feb 1996)  
  
Uses:   E32/052 F32/016 STORE/007 BAFL/017  
        GDI/010 FNTSTORE/005 FBS/012 BITGDI/012 WSERV/024 CLOCK/006  
        CONE/051 ETEXT/025 TBOX/040 FONTS/007 ALWL/010  
  
From Bret:  
----------  
1)  Change to the way the menubar code deals with hot keys of items  
that are dimmed: it is now clearer that cooperation from the  
application is required here; the application control should supply a  
CheckHotKeyNotDimmedL(TInt aSelection) function, and return EFalse if  
the selection is dimmed  
  
2)  According to the return value from this function, the menubar  
code called either HandleCommandL or HandleAttemptDimmedSelectionL;  
the default implementation of CheckHotKeyNotDimmedL (in the class  
MEikMenuObserver) always returns ETrue  
  
3)  Modified TMenuB0 to provide an example of the above  
  
4)  Also modified TMenuB0 to provide an example of hot-key tables  
changing when the menubar changes  
  
From Neil & Siamak:  
-------------------  
5)  List boxes now support having scrollbars, if flags  
EEikListBoxVScrollBar or ...HScrollBar are set  
  
6)  See the latest TLBox for an example of a listbox with a vertical  
scrollbar; this scrollbar moves automatically when the list is  
scrolled on account of the highlight moving (though the reverse does  
not yet happen, ie user interaction with the scrollbar has no effect  
at present)  
  
(one side-effect of this change in list-box code, strangely, is that  
it seems that "simple" listboxes can show parts of list items, rather  
than just whole numbers of them)  
  
From SimonC:  
------------  
7)  Horizontal groups of radio buttons can now be drawn dimmed if  
required  
  
8)  In the absence of forthcoming dialog technology like multi-page  
dialogs, split the Customize Toolbar dialog into two, with the part  
specifying the clock (if any) being accessed via a tab-out button  
  
9)  The "spacer" option in the Customize Toolbar dialog is now  
(partially) functional: checking this box gives a spacer after the  
button if it is visible  
  
10) Added a "button order" field to the Customize Toolbar dialog, but  
this isn't functional yet  
  
From Neil:  
----------  
11) Fixed a bug with let a scrollbar's button animate if the user  
clicked on the bottom pixel of its border, but without the event  
being recorded  
  
12) Added a new scrollbar member data iMinReqLengthToDisplay, which  
gets updated during CreateComponentsL() and will be used in resolving  
layout problems if a scrollbar isn't long enough for all its  
requested components  
  
From Vamsi:  
-----------  
13) Started work on "Edit picture" functionality in TEdwin2; the  
application can detect if the cursor is positioned just before a  
picture  
  
14) An appropriate "Edit picture" dialog is presented on demand,  
though this isn't functional yet  
  
15) Added an inline function Text() to CEikEdwin, returning the  
CGlobalText pointer to its editable text object  
  
From DavidW:  
------------  
16) TEdwin1 now auto-saves changes to its "settings" (ie the width of  
its edit windows) on exit, to a profile file  
  
17) Brought TEdwin0 into the twentieth century, by giving it a menu  
bar  
  
18) TEdwin0 is now store-aware, with a File menu with Open and SaveAs  
commands; TEdwin0 reads and writes *.ED0 files, which contain its  
formatting information (ie, which font it is using) as well as text  
  
19) For the first time in a test application, TEdwin0 also has a  
"Save" command (as opposed to just having a SaveAs command), and  
tracks whether any changes have been made to its contents; these are  
automatically saved to file on exit  
  
(there's clearly a lot of similarity between the File SaveAs (etc)  
commands of all the different test apps; the scope for additional  
code-sharing and design-sharing, with new functions in Eikon, will be  
explored shortly)  
  
20) CEikEdwin wasn't reporting EEikCeStateChanged to its observer on  
a format change (eg a font change); now fixed.  
  
  
Version 0.01.002  
================  
(Made by DavidW, 19 Feb 1996)  
  
Uses:   E32/052 F32/016 STORE/007 BAFL/017  
        GDI/010 FNTSTORE/005 FBS/012 BITGDI/012 WSERV/024 CLOCK/006  
        CONE/051 ETEXT/025 TBOX/040 FONTS/007 ALWL/010  
  
EIKMAIN.* is no more  
--------------------  
1)  EIKMAIN.* has been split into EIKENV.* and EIKAPPC.*, containing  
the classes CEikonEnv and CEikAppControl respectively (also, a small  
part of EIKMAIN.* has been relocated as BNDARRAY.* in CONE)  
  
2)  Most application *.CPP files simply change from #including  
<eikmain.h> to #including both of <eikenv.h> and <eikappc.h>  
  
3)  However, there are significantly fewer inter-dependencies between  
different Eikon source modules (which, among other things, can result  
in faster incremental builds of Eikon source code)  
  
From Vamsi:  
-----------  
4)  Further pushed back the boundaries of pictures in rich text, with  
developments in the test application TEdwin2:  
  
5)  The "Insert bitmap" dialog now allows the filename of the *.PBM  
bitmap to be specified  
  
6)  The "Insert picture" dialog now allows the "brush style" of the  
centre of the picture to be specified (eg forward diagonal,  
cross-hatch)  
  
From SimonC:  
------------  
7)  The Customize Toolbar dialog now automatically saves its settings  
to file on exit; this file is also automatically loaded the next time  
the app is started, thereby achieving seamless persistence of toolbar  
  
8)  Applications no longer need to provide two different (but  
related) resource structs, defining a toolbar - one to define the  
toolbar itself, and the other providing the choice list of button  
names for the Customize Toolbar dialog; instead, in effect the second  
list is automatically generated from the first  
  
9)  The hard-wired width in the CalculateRequiredSize of the digital  
clock was too small (because of changes in the font a while back?);  
changed this to a larger hard-wired value for now(!)  
  
From Bret:  
----------  
10) Fixed a bug pointed out by MartinB, namely if the app called  
ChangeMenuBarL() with "aDisplayNow" set to EFalse, eventually  
oversized menu panes would be drawn  
  
11) Modified the test code TMenuB0 to exhibit the above case  
  
12) Tidied up ChangeMenuBarL() generally  
  
From Julian:  
------------  
13) Further modifications in CEikClipboard (not documented in detail  
here since yet more changes are pending)  
  
14) Provided the sample app ..\demo\demo with clipboard functions,  
cut copy and paste  
  
15) If text is pasted into a edwin, the edwin will no longer allow  
its maximum character limit (if any) to be exceeded  
  
From Siamak:  
------------  
16) In order to test the reusability of the listbox code, and as a  
step towards one of the file selector views, work has started on  
"multi-field item" (MFI) listboxes  
  
17) Relatively few changes were needed to the listbox control and  
view classes to support this new style of listbox, which you can get  
in your programs by setting the EEikListBoxMultiFieldItems flag  
  
18) See the TLBox test code for an example of an MFI list box  
  
From DavidW:  
------------  
19) Added "EXPORT" verb to MNT.CMD, with the following effect  
        copy ..\inc\*.h \e32inc  
        copy ..\inc\*.rh \e32inc  
        copy ..\inc\*.hrh \e32inc  
        copy ..\incg\eikon.rsg \e32inc  
to make it easier for applications writers making changes in EIKON,  
to get the EIKON header files they change into the correct system  
includes directory (whilst they wait for an official release)  
  
20) Provided CEikHotKeysTable with a Reset() function, to fix a bug  
when a change in the menu bar involved a change in the set of hotkeys  
available  
  
21) There's a new flag CEikAppControlCustomizableToolbar, which can  
be set in your EikMain() function (see Demo or TBut0 for examples) to  
allow system code to make various simplifications on your behalf -  
such as allowing a simpler definition of your toolbar resource in the  
resource file  
  
22) Application profile files (.APF files) now have much more support  
in system software than before: there's a new class TEikApfHeader, in  
a new module EIKAPF.*  
  
23) For now, the only two test applications that save/load profiles  
are TBut0 and Demo; in each case the saving/loading happens  
transparently, without any user control over the matter (yet)  
  
24) Any application that runs the Customize Toolbar dialog will have  
a profile file generated automatically for it (if none existed  
before), containing a persistent version of the toolbar preferences  
selected  
  
25) In addition to generic profile settings (of which a customized  
toolbar is the first example), applications can add their own  
specific profile information, by overriding the CEikAppControl  
functions StoreProfileL() and RestoreProfileL(); this happens in  
Demo, which records its "auto-zoom new pictures" setting in this way  
  
26) An application can in principle call CEikAppControl::SaveProfileL  
at any time, to cause a complete *.APF file to be written up,  
containing the latest values  
  
27) CEikDll::StartPrgDllL() now takes one more parameter, giving the  
name of the profile file to be used (it will be NULL by default, in  
which case code inside CEikAppControl can generate a default name, if  
there is data to save to the profile)  
  
28) The Shell's "Profiles" menu command now works, for the first  
time, giving a file selector of all \PROFILES\*.APF files (as usual,  
the file selector will fail, if the specified directory fails to  
exist); go into either TBut0 or Demo and customize the toolbar, and  
then there will be \PROFILE\*.APF files for the Shell to view  
  
29) App name comparison inside TEikDocHeader testing (and now also  
inside TEikApfHeader testing) is no longer case-sensitive, thereby  
removing a few anomalies.  
  
  
Version 0.01.001  
================  
(Made by DavidW, 16 Feb 1996)  
  
Uses:   E32/052 F32/016 STORE/007 BAFL/017  
        GDI/010 FNTSTORE/005 FBS/012 BITGDI/012 WSERV/024 CLOCK/006  
        CONE/050 ETEXT/025 TBOX/040 FONTS/007 ALWL/010  
  
From DavidW:  
------------  
1)  Contains all EIK*.* files, and other associated files,  
transferred from their home since 11 Dec last year, in \CONE  
  
2)  Also contains files in ..\TSRC, ..\SHELL, and ..\DEMO directories  
  
3)  As will be expected, EIKON's mnt.cmd includes GETCONE and  
GETSRCCONE verbs (and also calls these from inside GETJBLD and  
GETSRCALL as appropriate)  
  
4)  CONE.RSS, CONE.RSG, and CONE.RSC become EIKON.* instead  
  
5)  Note that you have to add \e32sys\eikond.lib to the set of  
libraries linked with your test application (in the Project |  
Settings | Link dialog)  
  
***** The following added later *****  
  
6)  The code was still trying to open CONE.RSC as the system resource  
file, instead of EIKON.RSC - now fixed  
  
7)  MNT GETSRCCONE was deleting \bafl\*.* - now fixed