mirror of
https://github.com/EiffelSoftware/eiffel-org.git
synced 2026-02-15 23:14:34 +01:00
Author:halw
Date:2008-10-25T08:00:01.000000Z git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@97 abb3cda0-5349-4a8f-a601-0c33ac3a8c38
This commit is contained in:
@@ -9,7 +9,7 @@ You can access [[EiffelBuild Notation|objects]] from both the [[Builder window|
|
||||
|
||||
{{note|Although window and dialog objects may be accessed within the [[Widget selector|widget selector]] , it is not possible to build into these objects, you should use the [[Layout constructor|layout constructor]] or [[Builder window|builder window]] directly in this situation. }}
|
||||
|
||||
For more information about an [[EiffelBuild Notation|objects]] capacity and permitted children, see the [[EiffelVision Introduction|EiffelVision2]] documentation.
|
||||
For more information about an [[EiffelBuild Notation|objects]] capacity and permitted children, see the [[EiffelVision Introduction|EiffelVision 2]] documentation.
|
||||
|
||||
{{seealso|<br/>
|
||||
[[Create an object|Create an object]] <br/>
|
||||
|
||||
@@ -7,7 +7,7 @@ This window may either be shown or hidden (default). To change between these two
|
||||
|
||||
[[Image:builder-window]]
|
||||
|
||||
The content of this window is a representation of the [[EiffelBuild Notation|objects]] you have defined in your project. Each [[EiffelBuild Notation|object]] is represented by the [[EiffelVision Introduction|EiffelVision2]] control matching its type. For example, an [[EiffelBuild Notation|object]] representing an <eiffel>EV_BUTTON</eiffel> will be displayed in here using an <eiffel>EV_BUTTON</eiffel>. As this view provides direct access to the objects ( [[EiffelBuild Notation|Pick]] any of the controls in this window), it enables you to build your interface within a view which provides rich visual feedback.
|
||||
The content of this window is a representation of the [[EiffelBuild Notation|objects]] you have defined in your project. Each [[EiffelBuild Notation|object]] is represented by the [[EiffelVision Introduction|EiffelVision 2]] control matching its type. For example, an [[EiffelBuild Notation|object]] representing an <eiffel>EV_BUTTON</eiffel> will be displayed in here using an <eiffel>EV_BUTTON</eiffel>. As this view provides direct access to the objects ( [[EiffelBuild Notation|Pick]] any of the controls in this window), it enables you to build your interface within a view which provides rich visual feedback.
|
||||
Because this window is just a view of the [[EiffelBuild Notation|objects]] , it will be always synchronized with the [[Layout constructor| layout constructor]] . This means you can [[Reparent an Object| re-parent objects]] , using the [[EiffelBuild Notation|pick and drop]] transport method, seamlessly between the two views. <br/>
|
||||
|
||||
{{note|Holding Ctrl while right clicking on an [[EiffelBuild Notation|object]] in the Builder Window creates a new [[Object editor|object editor]] targeted to the [[EiffelBuild Notation|object]] . Holding Ctrl and Shift while right clicking on an [[EiffelBuild Notation|object]] , highlights it within the [[Layout constructor|layout constructor]] .}}
|
||||
@@ -16,7 +16,7 @@ Because this window is just a view of the [[EiffelBuild Notation|objects]] , it
|
||||
|
||||
Although the builder window attempts to show you the interface you are developing, it is not a completely accurate representation (Unlike the [[Display window|display window]] ). The main difference is that all [[EiffelBuild Notation|objects]] representing descendents of EV_CONTAINER are parented in a frame. This was implemented so that you would be able to easily manipulate the containers.
|
||||
|
||||
Imagine that this was not the case, and each container [[EiffelBuild Notation|object]] was just represented by an [[EiffelVision Introduction|EiffelVision2]] object matching its type. Because these containers have no visible screen space when filled with children, manipulation of them would have been difficult, and the functionality of this view would be compromised.
|
||||
Imagine that this was not the case, and each container [[EiffelBuild Notation|object]] was just represented by an [[EiffelVision Introduction|EiffelVision 2]] object matching its type. Because these containers have no visible screen space when filled with children, manipulation of them would have been difficult, and the functionality of this view would be compromised.
|
||||
|
||||
In the screenshot above, you can see that there are two [[EiffelBuild Notation|objects]] representing containers in your project, an <eiffel>EV_VERTICAL_BOX</eiffel>, and an <eiffel>EV_HORIZONTAL_BOX</eiffel> (Excluding the <eiffel>EV_TITLED_WINDOW</eiffel> [[EiffelBuild Notation|object]] represented by this window).
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@ Alternatively, you can hold down the Ctrl key while starting a [[EiffelBuild Not
|
||||
==View types==
|
||||
|
||||
Looking at the left-hand screenshot above, you can see that the [[Image:icon-component-display-view-color]] button is depressed, meaning the component viewer is in display view mode. Clicking on [[Image:icon-component-build-view-color]] will put the component viewer into build mode view as shown in the right-hand screenshot. These modes are mutually exclusive and are described below:
|
||||
* '''Builder view''' - This view is similar to the view used by the [[Display window|display window]] . i.e. the [[EiffelVision Introduction|EiffelVision2]] controls are displayed exactly as is defined in the [[EiffelBuild Notation|component]] .
|
||||
* '''Display view''' - This view is similar to the view used by the [[Builder window|builder window]] . i.e. all [[EiffelVision Introduction|EiffelVision2]] containers are represented by frames so they are immediately visible. This makes the actual structure represented by the [[EiffelBuild Notation|component]] completely visible.
|
||||
* '''Builder view''' - This view is similar to the view used by the [[Display window|display window]] . i.e. the [[EiffelVision Introduction|EiffelVision 2]] controls are displayed exactly as is defined in the [[EiffelBuild Notation|component]] .
|
||||
* '''Display view''' - This view is similar to the view used by the [[Builder window|builder window]] . i.e. all [[EiffelVision Introduction|EiffelVision 2]] containers are represented by frames so they are immediately visible. This makes the actual structure represented by the [[EiffelBuild Notation|component]] completely visible.
|
||||
|
||||
{{note|The type of the "root_object" within the component is displayed in the toolbar of the component viewer. }}
|
||||
|
||||
|
||||
@@ -56,11 +56,11 @@ As objects are reliant on the constant you are removing, you must confirm that y
|
||||
|
||||
A String constant represents an Eiffel STRING, and may be any valid STRING. For example, in the generated constants file, for a String constant named `modify_button_text', the following code is generated:
|
||||
<code>
|
||||
modify_button_text: STRING is
|
||||
-- `Result' is STRING constant named modify_button_text.
|
||||
once
|
||||
Result := "Modify"
|
||||
end
|
||||
modify_button_text: STRING
|
||||
-- `Result' is STRING constant named modify_button_text.
|
||||
once
|
||||
Result := "Modify"
|
||||
end
|
||||
</code>
|
||||
|
||||
|
||||
@@ -68,21 +68,21 @@ A String constant represents an Eiffel STRING, and may be any valid STRING. For
|
||||
|
||||
A Integer constant represents an Eiffel INTEGER, and may be any valid INTEGER value. For example, in the generated constants file, for an Integer constant named `medium_padding', the following code is generated:
|
||||
<code>
|
||||
medium_padding: INTEGER is
|
||||
-- `Result' is INTEGER constant named medium_padding.
|
||||
once
|
||||
Result := 8
|
||||
end</code>
|
||||
medium_padding: INTEGER
|
||||
-- `Result' is INTEGER constant named medium_padding.
|
||||
once
|
||||
Result := 8
|
||||
end</code>
|
||||
|
||||
==Directory constant==
|
||||
|
||||
A Directory constant is an Eiffel representation of a directory, as a STRING value. For example, in the generated constants file, for a Directory constant named `pixmap_location', the following code is generated:
|
||||
<code>
|
||||
pixmap_location: STRING is
|
||||
-- `Result' is DIRECTORY constant named pixmap_location.
|
||||
once
|
||||
Result := "C:\pixmaps"
|
||||
end</code>
|
||||
pixmap_location: STRING
|
||||
-- `Result' is DIRECTORY constant named pixmap_location.
|
||||
once
|
||||
Result := "C:\pixmaps"
|
||||
end</code>
|
||||
|
||||
|
||||
==Pixmap constant==
|
||||
@@ -90,30 +90,30 @@ A Directory constant is an Eiffel representation of a directory, as a STRING val
|
||||
A pixmap constant is a representation of a pixmap image, and two types are available:
|
||||
* '''Absolute''' - The generated code contains a constant of type EV_PIXMAP, built from a single, absolute path, based on the location of the original pixmap on disk as follows:
|
||||
<code>
|
||||
main_pixmap: EV_PIXMAP is
|
||||
-- `Result' is PIXMAP constant named main_pixmap.
|
||||
local
|
||||
a_file_name: FILE_NAME
|
||||
once
|
||||
create Result
|
||||
create a_file_name.make_from_string ("C:\pixmaps\main_pixmap.png")
|
||||
-- Now set `Result' based on `a_file_name'.
|
||||
set_with_named_file(Result, a_file_name)
|
||||
end</code>
|
||||
main_pixmap: EV_PIXMAP
|
||||
-- `Result' is PIXMAP constant named main_pixmap.
|
||||
local
|
||||
a_file_name: FILE_NAME
|
||||
once
|
||||
create Result
|
||||
create a_file_name.make_from_string ("C:\pixmaps\main_pixmap.png")
|
||||
-- Now set `Result' based on `a_file_name'.
|
||||
set_with_named_file(Result, a_file_name)
|
||||
end</code>
|
||||
|
||||
* '''Relative''' - The generated code contains a constant of type EV_PIXMAP, built from a file name and a directory constant. This type of pixmap constant is the most frequently used, as it is more flexible. By redefining the value of the directory constant on which it is based, your systems may easily account for the installation location of the pixmap. A relative Pixmap constant is generated as follows:
|
||||
<code>
|
||||
main_pixmap: EV_PIXMAP is
|
||||
-- `Result' is PIXMAP constant named main_pixmap.
|
||||
local
|
||||
a_file_name: FILE_NAME
|
||||
once
|
||||
create Result
|
||||
create a_file_name.make_from_string (pixmap_location)
|
||||
a_file_name.set_file_name("main_pixmap.png")
|
||||
-- Now set `Result' based on `a_file_name'.
|
||||
set_with_named_file(Result, a_file_name)
|
||||
end</code>
|
||||
main_pixmap: EV_PIXMAP
|
||||
-- `Result' is PIXMAP constant named main_pixmap.
|
||||
local
|
||||
a_file_name: FILE_NAME
|
||||
once
|
||||
create Result
|
||||
create a_file_name.make_from_string (pixmap_location)
|
||||
a_file_name.set_file_name("main_pixmap.png")
|
||||
-- Now set `Result' based on `a_file_name'.
|
||||
set_with_named_file(Result, a_file_name)
|
||||
end</code>
|
||||
|
||||
Where `pixmap_location' is the name of the Directory constant to which the pixmap is relative.
|
||||
|
||||
@@ -121,25 +121,27 @@ Where `pixmap_location' is the name of the Directory constant to which the pixma
|
||||
==Font constant==
|
||||
|
||||
A Font constant represents an EV_FONT. For example, in the generated constants file, for a font constant named `times_new_roman', the following code is generated:
|
||||
<code>times_new_roman: EV_FONT is
|
||||
-- `Result' is EV_FONT constant named `times_new_roman'.
|
||||
once
|
||||
create Result
|
||||
Result.set_family (feature {EV_FONT_CONSTANTS}.Family_roman)
|
||||
Result.set_weight (feature {EV_FONT_CONSTANTS}.Weight_regular)
|
||||
Result.set_shape (feature {EV_FONT_CONSTANTS}.Shape_regular)
|
||||
Result.set_height_in_points (12)
|
||||
Result.preferred_families.extend ("Times New Roman")
|
||||
end</code>
|
||||
<code>
|
||||
times_new_roman: EV_FONT
|
||||
-- `Result' is EV_FONT constant named `times_new_roman'.
|
||||
once
|
||||
create Result
|
||||
Result.set_family (feature {EV_FONT_CONSTANTS}.Family_roman)
|
||||
Result.set_weight (feature {EV_FONT_CONSTANTS}.Weight_regular)
|
||||
Result.set_shape (feature {EV_FONT_CONSTANTS}.Shape_regular)
|
||||
Result.set_height_in_points (12)
|
||||
Result.preferred_families.extend ("Times New Roman")
|
||||
end</code>
|
||||
|
||||
==Color constant==
|
||||
|
||||
A Color constant represents an EV_COLOR. For example, in the generated constants file, for a color constant named `red', the following code is generated:
|
||||
<code>red: EV_COLOR is
|
||||
-- `Result' is EV_COLOR constant named `red'.
|
||||
once
|
||||
Result := create {EV_COLOR}.make_with_8_bit_rgb (255, 0, 0)
|
||||
end</code>
|
||||
<code>
|
||||
red: EV_COLOR
|
||||
-- `Result' is EV_COLOR constant named `red'.
|
||||
once
|
||||
Result := create {EV_COLOR}.make_with_8_bit_rgb (255, 0, 0)
|
||||
end</code>
|
||||
|
||||
===Pixmap constant dialog===
|
||||
|
||||
|
||||
@@ -7,9 +7,9 @@ This window may either be shown or hidden (default). To change between these two
|
||||
|
||||
[[Image:display-window]]
|
||||
|
||||
This view is provided so that you can really see what your project will look like when it has been generated and is running as a stand alone [[EiffelVision Introduction|EiffelVision2]] system.
|
||||
This view is provided so that you can really see what your project will look like when it has been generated and is running as a stand alone [[EiffelVision Introduction|EiffelVision 2]] system.
|
||||
|
||||
All properties that have been set on the [[EiffelBuild Notation|objects]] in your project are set in the [[EiffelVision Introduction|EiffelVision2]] control matching its type.
|
||||
All properties that have been set on the [[EiffelBuild Notation|objects]] in your project are set in the [[EiffelVision Introduction|EiffelVision 2]] control matching its type.
|
||||
|
||||
{{seealso|<br/>
|
||||
[[Builder window|Builder window]] <br/>
|
||||
|
||||
@@ -7,10 +7,18 @@ The docking mechanism permits customization of the EiffelBuild interface through
|
||||
|
||||
To dock one of the three supported tools, press and hold the left mouse button on the title of the tool, and move the mouse so that it points to the new location for the tool. Upon releasing the mouse button, the dock completes, and based on the mouse location, the following may occur:
|
||||
* '''Re-positioning in the main window''' - If the mouse is held over the three part vertical split area displayed to the left hand side of the EiffelBuild window, the position of the tool within this structure may be modified, providing simple re-ordering. A small grayed area indicates the insertion position of the tool, only displayed if the tools position will be changed upon release. The gray area indicating the new insertion point has the following appearance:
|
||||
|
||||
|
||||
[[Image:docking-insert]]
|
||||
|
||||
|
||||
In this case, the tool being docked will be moved to immediately above the component selector. If no feedback is provided regarding the insertion, upon releasing the mouse button to complete the dock, the tool is moved to an external window.
|
||||
* '''Docking externally''' - Completing a dock while not above the left hand area of the main window, or if no insert feedback is provided, causes the tool to be moved from its current location to an external window. A tool that is docked externally has the following appearance:
|
||||
|
||||
|
||||
[[Image:docked-external]]
|
||||
|
||||
|
||||
The tool may now be freely moved to any location on screen, in the same fashion as you would move any standard window. The window in which the tool is contained is always displayed "on top" of the main window. There are two methods of restoring the dialog back to its original location in the main window:
|
||||
** '''Docking back''' - Start a drag from the title of the tool, and point the mouse to the position in which you wish to insert the tool within the main window. If the position is valid, feedback (the gray bar) is displayed, and completing the dock closes the dialog, and re-inserts the tool. If no feedback is provided, the pointed position is not valid, and completing the dock simply moves the window to that position on screen.
|
||||
** '''Closing the window''' - Clicking the cross displayed to the right hand side of the windows title bar causes the window to be destroyed, and the tool contained to be restored back to its original position within the main window.
|
||||
@@ -21,6 +29,8 @@ The tool may now be freely moved to any location on screen, in the same fashion
|
||||
==Main window with externally docked tools==
|
||||
|
||||
The following screenshot illustrates the appearance of the main window with all dockable tools external:
|
||||
|
||||
|
||||
[[Image:main-window-with-docked-tools]]
|
||||
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ The layout constructor provides a view of the [[EiffelBuild Notation|objects]]
|
||||
[[Image:layout-constructor]]
|
||||
|
||||
|
||||
Each item in the tree represents one object. The screenshot above represents the following [[EiffelVision Introduction|EiffelVision2]] interface definition - An EV_TITLED_WINDOW containing one child, of type EV_VERTICAL_BOX. Within the vertical box there is an EV_HORIZONTAL_BOX and an EV_LIST. The list is empty, but the horizontal box contains three different objects of type EV_BUTTON.
|
||||
Each item in the tree represents one object. The screenshot above represents the following [[EiffelVision Introduction|EiffelVision 2]] interface definition - An EV_TITLED_WINDOW containing one child, of type EV_VERTICAL_BOX. Within the vertical box there is an EV_HORIZONTAL_BOX and an EV_LIST. The list is empty, but the horizontal box contains three different objects of type EV_BUTTON.
|
||||
|
||||
{{note|The widget displayed as the root of the Layout Constructor is the currently selected object in the [[Widget selector|Widget Selector]] . To edit the contents of a different widget, select the widget you wish to manipulate from the [[Widget selector|widget selector]] .}}
|
||||
|
||||
|
||||
@@ -29,9 +29,9 @@ When an object editor is targeted to an [[EiffelBuild Notation|object]] , you wi
|
||||
* String properties inputted via a text field are updated within the object every time a key is pressed
|
||||
* Integer properties inputted via a text field are only updated within the object when return is pressed, or the input box looses the focus.
|
||||
* Almost without exception, a push button which controls a property, will open up a dialog, allowing the property to be edited. Examples are colors, pixmaps and events.
|
||||
* If when you attempt to modify a property, it returns back to its original value, it means that the value you attempted to enter was invalid. For example, looking at the screen show above, if you enter -50 into the minimum_height text field and press return, it will revert back to 23. This is because the minimum_height of an <eiffel>EV_BUTTON</eiffel> may not be set to less than 0. To find allowable values for properties of an [[EiffelBuild Notation|object]] , consult the [[EiffelVision Introduction|EiffelVision2]] documentation.
|
||||
* If when you attempt to modify a property, it returns back to its original value, it means that the value you attempted to enter was invalid. For example, looking at the screen show above, if you enter -50 into the minimum_height text field and press return, it will revert back to 23. This is because the minimum_height of an <eiffel>EV_BUTTON</eiffel> may not be set to less than 0. To find allowable values for properties of an [[EiffelBuild Notation|object]] , consult the [[EiffelVision Introduction|EiffelVision 2]] documentation.
|
||||
|
||||
All properties that may be manipulated in an object editor correspond directly to a property of the [[EiffelVision Introduction|EiffelVision2]] control that is represented by the [[EiffelBuild Notation|object]] (Displayed in an object editor as '''type'''). There is one exception to that rule though, and that is the '''Name''' field which is specific to EiffelBuild. This field is used for your identification of the [[EiffelBuild Notation|object]] and as the attribute name in the generated code. For example, when EiffelBuild generates code corresponding to the [[EiffelBuild Notation|object]] targeted in the editor shown above, it would declare the vision2 component as - button1: EV_BUTTON
|
||||
All properties that may be manipulated in an object editor correspond directly to a property of the [[EiffelVision Introduction|EiffelVision 2]] control that is represented by the [[EiffelBuild Notation|object]] (Displayed in an object editor as '''type'''). There is one exception to that rule though, and that is the '''Name''' field which is specific to EiffelBuild. This field is used for your identification of the [[EiffelBuild Notation|object]] and as the attribute name in the generated code. For example, when EiffelBuild generates code corresponding to the [[EiffelBuild Notation|object]] targeted in the editor shown above, it would declare the EiffelVision 2 component as - button1: EV_BUTTON
|
||||
|
||||
{{note|You may have as many object editors targeted to the same [[EiffelBuild Notation|object]] as you wish. Whenever a change is made to the [[EiffelBuild Notation|object]] through one of the editors, all other editors targeted to that [[EiffelBuild Notation|object]] are synchronized. }}
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
[[Property:title|Type selector]]
|
||||
[[Property:weight|4]]
|
||||
[[Property:uuid|893343c2-417f-90c5-147e-941bc232fe43]]
|
||||
The type selector contains all the available Vision2 types supported by EiffelBuild. These are the basic building blocks for your system.
|
||||
The type selector contains all the available EiffelVision 2 types supported by EiffelBuild. These are the basic building blocks for your system.
|
||||
|
||||
[[Image:type-selector]]
|
||||
|
||||
The types are organized into three groups - Primitives, Containers and Items. All types that may be used in EiffelBuild have a text in uppercase, corresponding to their type in [[EiffelVision Introduction|EiffelVision2]] . For example, looking at the screenshot above, the <eiffel>BUTTON</eiffel> item represents an <eiffel>EV_BUTTON</eiffel>, and the <eiffel>EV_COMBO_BOX</eiffel> item represents <eiffel>EV_COMBO_BOX</eiffel>.
|
||||
The types are organized into three groups - Primitives, Containers and Items. All types that may be used in EiffelBuild have a text in uppercase, corresponding to their type in [[EiffelVision Introduction|EiffelVision 2]] . For example, looking at the screenshot above, the <eiffel>BUTTON</eiffel> item represents an <eiffel>EV_BUTTON</eiffel>, and the <eiffel>EV_COMBO_BOX</eiffel> item represents <eiffel>EV_COMBO_BOX</eiffel>.
|
||||
|
||||
{{note|The types available in the type selector are fixed, and cannot be modified. Almost all [[EiffelVision Introduction|EiffelVision2]] components are available. }}
|
||||
{{note|The types available in the type selector are fixed, and cannot be modified. Almost all [[EiffelVision Introduction|EiffelVision 2]] components are available. }}
|
||||
|
||||
==Creating a new object==
|
||||
[[EiffelBuild Notation|Objects]] are the building blocks used in EiffelBuild to construct your interface. To create a new [[EiffelBuild Notation|object]] for use in your system, [[EiffelBuild Notation|pick]] the type corresponding to the type of object you wish to create,and [[EiffelBuild Notation|drop]] onto an [[EiffelBuild Notation|object]] representation. If an object is full, or does not allow other objects of the new type to be contained, then you will not be able to [[EiffelBuild Notation|drop]] on it. <br/>
|
||||
@@ -18,7 +18,7 @@ This shows how simple it is to Build new [[EiffelBuild Notation|objects]] in Ei
|
||||
|
||||
You may drop an object directly from the Type Selector into the [[Widget selector|widget selector]] which creates the object as a "top level object" ensuring that upon generation, it is represented by an individual set of classes. These top level objects may then be re-used within your interface as desired.
|
||||
|
||||
{{note|To understand the types accepted, and the capacity of objects, you should consult the [[EiffelVision Introduction|EiffelVision2]] library reference. }}
|
||||
{{note|To understand the types accepted, and the capacity of objects, you should consult the [[EiffelVision Introduction|EiffelVision 2]] library reference. }}
|
||||
|
||||
==Changing the type of an existing object==
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[[Property:title|EiffelVision 2 Samples]]
|
||||
[[Property:weight|3]]
|
||||
[[Property:uuid|79c05bf8-367e-001d-0c13-f668e34fa5b0]]
|
||||
Vision2 ships with a number of samples provided to demonstrate different aspects of the library. If you are a new vision2 user then it is suggested that you first compile and run the
|
||||
EiffelVision 2 ships with a number of samples provided to demonstrate different aspects of the library. If you are a new EiffelVision 2 user then it is suggested that you first compile and run the
|
||||
|
||||
* [[Widgets Sample|Widgets]] sample. Demonstrates both the appearance and behavior of the available widgets.
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
After launching the application, you will see a window displayed with a similar appearance to the one above. You may exit the application at any time, by clicking on the close icon, or you may select "exit" from the "File" menu. Selected "Help", "about" displays a dialog with details about the application.
|
||||
|
||||
The left hand side of the main window contains a tree, showing the widgets available within vision2. If you select one of these widgets in the tree, then the type of widget you selected will be displayed in the middle of the main_window. Controls will also the be available to the right hand side of the widget, which allow you to modify its state. These controls do not represent all the available feature of the widget, but demonstrate many of the most common. The text area below the currently selected widget displays the events that have occurred on the widget. Only those events inherited by EV_WIDGET are displayed.
|
||||
The left hand side of the main window contains a tree, showing the widgets available within EiffelVision 2. If you select one of these widgets in the tree, then the type of widget you selected will be displayed in the middle of the main_window. Controls will also the be available to the right hand side of the widget, which allow you to modify its state. These controls do not represent all the available feature of the widget, but demonstrate many of the most common. The text area below the currently selected widget displays the events that have occurred on the widget. Only those events inherited by EV_WIDGET are displayed.
|
||||
|
||||
==Under the Hood==
|
||||
|
||||
|
||||
@@ -1,23 +1,27 @@
|
||||
[[Property:title|EiffelVision Introduction]]
|
||||
[[Property:weight|0]]
|
||||
[[Property:uuid|f964651a-e36d-4e9e-00ea-37803a26373a]]
|
||||
The EiffelVision library offers an object-oriented framework for graphical user interface (GUI) development. Using EiffelVision, developers can access all necessary GUI components, called [[Widgets|widgets]] (buttons, windows, list views) as well as truly graphical elements such as points, lines, arcs, polygons and the like -- to develop a modern, functional and good-looking graphical interactive application.
|
||||
The EiffelVision 2 library offers an object-oriented framework for graphical user interface (GUI) development. Using EiffelVision 2, developers can access all necessary GUI components, called [[Widgets|widgets]] (buttons, windows, list views) as well as truly graphical elements such as points, lines, arcs, polygons and the like -- to develop a modern, functional and good-looking graphical interactive application.
|
||||
|
||||
EiffelVision has played a major role at Eiffel Software and provided numerous Eiffel projects with a powerful, portable graphics development platform. EiffelStudio is totally reliant on EiffelVision for its graphical elements and overall interaction with the user.
|
||||
EiffelVision 2 has played a major role at Eiffel Software and provided numerous Eiffel projects with a powerful, portable graphics development platform. EiffelStudio is totally reliant on EiffelVision 2 for its graphical elements and overall interaction with the user.
|
||||
|
||||
|
||||
==Scope==
|
||||
|
||||
The EiffelVision library addresses all the major needs of developers of systems supporting modern graphical interfaces. EiffelVision runs on Microsoft Windows and all major variations of Unix (including Linux). All versions are fully source-compatible; with only a recompile, applications will run on every supported platform with the native look-and-feel.
|
||||
The EiffelVision 2 library addresses all the major needs of developers of systems supporting modern graphical interfaces. EiffelVision 2 runs on Microsoft Windows and all major variations of Unix (including Linux). All versions are fully source-compatible; with only a recompile, applications will run on every supported platform with the native look-and-feel.
|
||||
|
||||
EiffelVision provides an effective way of building advanced graphical applications using user interface standards and toolkits (such as Microsoft Windows and GTK) without having to learn the details of the toolkits. Instead, you can use EiffelVision to work entirely in terms of high level abstractions representing windows, buttons, labels, graphical figures, menus, buttons etc., and apply clearly understandable operations to the corresponding objects.
|
||||
EiffelVision 2 provides an effective way of building advanced graphical applications using user interface standards and toolkits (such as Microsoft Windows and GTK) without having to learn the details of the toolkits. Instead, you can use EiffelVision 2 to work entirely in terms of high level abstractions representing windows, buttons, labels, graphical figures, menus, buttons etc., and apply clearly understandable operations to the corresponding objects.
|
||||
|
||||
==Architecture==
|
||||
|
||||
EiffelVision relies on a two-tiered architecture illustrated by the following figure.
|
||||
[[Image:vision2--figure1]]
|
||||
EiffelVision 2 relies on a two-tiered architecture illustrated by the following figure.
|
||||
|
||||
|
||||
[[Image:vision2--figure1]]
|
||||
|
||||
|
||||
The two tiers play complementary roles:
|
||||
* At the top level, EiffelVision provides fully portable graphics.
|
||||
* At the top level, EiffelVision 2 provides fully portable graphics.
|
||||
* At the lower level, platform-specific libraries cover the graphical mechanisms of graphics platforms such as Windows and GTK.
|
||||
|
||||
The lower tier serves for the implementation of the upper tier, but can also be used independently. For example [[WEL]] has had a resounding success with Windows developers who need an advanced mechanism for building Windows-specific graphical applications, taking advantage of every facility of the Windows API (Application Programming Interface) and of the Eiffel approach, but do not need portability on the client side. The GEL library is a '''wrapper''' library, automatically generated from the entire GTK API by a tool named '''The Gote Converter'''.
|
||||
@@ -31,30 +35,46 @@ As stated before, the library has undergone some drastic changes since the previ
|
||||
|
||||
==Design==
|
||||
|
||||
EiffelVision provides programmers with high-level classes, that provide all mechanism and data structures needed to build advanced user interfaces for deployment on almost all platforms without having to worry about detailed requirements of toolkits.
|
||||
EiffelVision 2 provides programmers with high-level classes, that provide all mechanism and data structures needed to build advanced user interfaces for deployment on almost all platforms without having to worry about detailed requirements of toolkits.
|
||||
|
||||
The abstract design has been derived from an analysis of user interfaces. Therefore we have classes with names like MENU, WINDOW, BUTTON, LINE or POLYGON. The features of these classes are simple, clearly defined properties or commands, like the feature `minimize' (a command) on WINDOW or `text' (a property of type STRING) on BUTTON.
|
||||
|
||||
{{note| All class names in EiffelVision are pre-pended with EV_ to avoid name clashes with existing classes. BUTTON hence becomes <eiffel>EV_BUTTON</eiffel>, etc. }}
|
||||
{{note| All class names in EiffelVision 2 are pre-pended with EV_ to avoid name clashes with existing classes. BUTTON hence becomes <eiffel>EV_BUTTON</eiffel>, etc. }}
|
||||
|
||||
==Properties==
|
||||
|
||||
When talking about a property of a class, like `text', in fact we are talking about multiple features. One is a query of the state of the property, in this case simply the query `text'. The other is the set-routine, which is by convention named `set_text' taking exactly one argument of the type of property. A property can be read-only, which means that it cannot be set by clients of the class.
|
||||
<code>
|
||||
text: STRING
|
||||
set_text (a_text: STRING) is ...
|
||||
text: STRING
|
||||
|
||||
set_text (a_text: STRING)
|
||||
...
|
||||
do
|
||||
...
|
||||
end
|
||||
</code>
|
||||
|
||||
Boolean properties have a different convention. Instead of one set-routine, it has one enable-routine and one disable-routine. The first one sets the property to true, the second to false. This has been done like this because sometimes these enable/disable features have trivial equivalents, for example for feature `enable_visible' a clearer name is `show'.
|
||||
<code>
|
||||
is_sensitive: BOOLEAN
|
||||
enable_sensitive is ...
|
||||
disable_sensitive is ...
|
||||
is_sensitive: BOOLEAN
|
||||
|
||||
enable_sensitive
|
||||
...
|
||||
do
|
||||
...
|
||||
end
|
||||
|
||||
|
||||
disable_sensitive
|
||||
...
|
||||
do
|
||||
...
|
||||
end
|
||||
</code>
|
||||
|
||||
==Implementation==
|
||||
|
||||
For flexibility, EiffelVision is built using the bridge pattern. This means that every platform-dependent component of the library consist of two classes, plus an implementation class for each platform (currently two). One is the <eiffel>interface</eiffel>. All the features of interfaces do nothing except delegate the call to the implementation object which is coupled to it. This object has the static type of the implementation-interface with the name of the interface class, with _I appended to it. From this implementation-interface, implementation classes inherit to implement platform-specific features.
|
||||
For flexibility, EiffelVision 2 is built using the bridge pattern. This means that every platform-dependent component of the library consist of two classes, plus an implementation class for each platform (currently two). One is the <eiffel>interface</eiffel>. All the features of interfaces do nothing except delegate the call to the implementation object which is coupled to it. This object has the static type of the implementation-interface with the name of the interface class, with <eiffel>_I</eiffel> appended to it. From this implementation-interface, implementation classes inherit to implement platform-specific features.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
[[Property:title|Events]]
|
||||
[[Property:weight|4]]
|
||||
[[Property:uuid|fc32d1b5-72d6-2955-18fd-bce988ed8323]]
|
||||
This cluster contains classes for event handling within Vision2.
|
||||
This cluster contains classes for event handling within EiffelVision 2.
|
||||
|
||||
==What is an event?==
|
||||
|
||||
An event is considered to be an external action that occurs during a program's execution. Correctly dealing with events is an important part of developing a Vision2 application. For example, if a user clicks on a button, you will want to respond to this event by calling a routine that deals with the request. Vision2 contains action sequences for all kinds of widget events. To view the kind of events available to every widget, click [[ref:libraries/vision2/reference/ev_widget_action_sequences_chart|here]] .
|
||||
An event is considered to be an external action that occurs during a program's execution. Correctly dealing with events is an important part of developing a EiffelVision 2 application. For example, if a user clicks on a button, you will want to respond to this event by calling a routine that deals with the request. EiffelVision 2 contains action sequences for all kinds of widget events. To view the kind of events available to every widget, click [[ref:libraries/vision2/reference/ev_widget_action_sequences_chart|here]] .
|
||||
|
||||
==How do I connect to an event?==
|
||||
|
||||
@@ -13,10 +13,10 @@ Every widget and item has an action sequence associated with it that relates to
|
||||
|
||||
An example of adding an agent to an action_sequence is as follows.
|
||||
<code>
|
||||
button.select_actions.extend (agent print ("Button Clicked!%N"))
|
||||
button.select_actions.extend (agent print ("Button Clicked!%N"))
|
||||
</code>
|
||||
|
||||
All Vision2 action sequences inherit [[ref:libraries/vision2/reference/ev_action_sequence_chart|EV_ACTION_SEQUENCE]] and when it is called, all of the agents held within are fired, thus calling all of the procedures represented by the agents. The signature of any agent that you place in an action sequence must conform to those of the action sequences actual generic parameter.
|
||||
All EiffelVision 2 action sequences inherit [[ref:libraries/vision2/reference/ev_action_sequence_chart|EV_ACTION_SEQUENCE]] and when it is called, all of the agents held within are fired, thus calling all of the procedures represented by the agents. The signature of any agent that you place in an action sequence must conform to those of the action sequences actual generic parameter.
|
||||
|
||||
When you want an agent to be called from a certain action sequence and the signatures do not match, you may use [[ref:libraries/vision2/reference/ev_action_sequence_chart|force_extend]] . This will call your agent but has no guarantees on the arguments passed to your procedure.
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[[Property:title|Figures]]
|
||||
[[Property:weight|7]]
|
||||
[[Property:uuid|c12fee6e-5e99-ae59-8ac5-f57abb4c1878]]
|
||||
The EiffelVision figure cluster can be considered a high-level way of drawing on an [[ref:libraries/vision2/reference/ev_drawable_chart|EV_DRAWABLE]] descendant. Here are some advantages:
|
||||
The EiffelVision 2 figure cluster can be considered a high-level way of drawing on an [[ref:libraries/vision2/reference/ev_drawable_chart|EV_DRAWABLE]] descendant. Here are some advantages:
|
||||
* The model is separated from the representation by using projectors that take a world of figures and project it to any device, not just a drawing area.
|
||||
* Instead of drawing with static API's like draw_line, real figure objects are used that can move, change color or morph.
|
||||
* For projection devices that allow this, events may be caught and fired through the appropriate figure object.
|
||||
@@ -81,6 +81,7 @@ As top-level group of a world of figures you must use [[ref:libraries/vision2/re
|
||||
| a string positioned by its top-left point displayed in the specified font
|
||||
|}
|
||||
|
||||
|
||||
A closed figure is a figure that has some area enclosed when drawn that can optionally be filled with a color. Closed figures inherit [[ref:libraries/vision2/reference/ev_closed_figure_chart|EV_CLOSED_FIGURE]] which gives them the property fill_color. Open figures inherit [[ref:libraries/vision2/reference/ev_atomic_figure_chart|EV_ATOMIC_FIGURE]] directly just as [[ref:libraries/vision2/reference/ev_closed_figure_chart|EV_CLOSED_FIGURE]] .
|
||||
===Points===
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[[Property:title|Items]]
|
||||
[[Property:weight|3]]
|
||||
[[Property:uuid|3143511c-28bd-cc5c-c710-700796778982]]
|
||||
All Vision2 items inherit [[ref:libraries/vision2/reference/ev_item_chart|EV_ITEM]] .
|
||||
All EiffelVision 2 items inherit [[ref:libraries/vision2/reference/ev_item_chart|EV_ITEM]] .
|
||||
|
||||
==What is an item?==
|
||||
|
||||
@@ -25,8 +25,6 @@ Below is a structure showing the Vision2 components and the items that they acce
|
||||
**** [[ref:libraries/vision2/reference/ev_radio_menu_item_chart|EV_RADIO_MENU_ITEM]]
|
||||
**** [[ref:libraries/vision2/reference/ev_check_menu_item_chart|EV_CHECK_MENU_ITEM]]
|
||||
|
||||
|
||||
|
||||
* [[ref:libraries/vision2/reference/ev_multi_column_list_chart|EV_MULTI_COLUMN_LIST]] accepts items of type:
|
||||
** [[ref:libraries/vision2/reference/ev_multi_column_list_row_chart|EV_MULTI_COLUMN_LIST_ROW]]
|
||||
|
||||
|
||||
@@ -1,38 +1,38 @@
|
||||
[[Property:title|Properties]]
|
||||
[[Property:weight|5]]
|
||||
[[Property:uuid|0d46c1eb-bce4-2d67-0272-da4aa5950c65]]
|
||||
This cluster contains all the common properties available for Vision2 [[Widgets|widgets]] and [[Items|items]] . Every Vision2 widget has the same set of properties inherited from EV_WIDGET, but many widgets also inherit additional properties, further refining the behavior of the widget.
|
||||
This cluster contains all the common properties available for EiffelVision 2 [[Widgets|widgets]] and [[Items|items]] . Every EiffelVision 2 widget has the same set of properties inherited from EV_WIDGET, but many widgets also inherit additional properties, further refining the behavior of the widget.
|
||||
|
||||
EV_WIDGET inherits the following properties:
|
||||
* [[ref:libraries/vision2/reference/ev_pick_and_dropable_chart|EV_PICK_AND_DROPABLE]]
|
||||
** For an overview of the Pick and Drop mechanism, click [[EiffelVision Pick and Drop|here]] .
|
||||
|
||||
* [[ref:libraries/vision2/reference/ev_sensitive_chart|EV_SENSITIVE]]
|
||||
** If a Vision2 component inherits [[ref:libraries/vision2/reference/ev_sensitive_chart|EV_SENSITIVE]] , it can be made to ignore events. <br/>
|
||||
** If an EiffelVision 2 component inherits [[ref:libraries/vision2/reference/ev_sensitive_chart|EV_SENSITIVE]] , it can be made to ignore events. <br/>
|
||||
Use <eiffel>disable_sensitive</eiffel> to disable event handling, and <eiffel>enable_sensitive</eiffel> to restore event handling.
|
||||
|
||||
* [[ref:libraries/vision2/reference/ev_colorizable_chart|EV_COLORIZABLE]]
|
||||
** If a Vision2 component inherits [[ref:libraries/vision2/reference/ev_colorizable_chart|EV_COLORIZABLE]] it has facilities for modifying its foreground and background colors. <br/>
|
||||
** If a EiffelVision 2 component inherits [[ref:libraries/vision2/reference/ev_colorizable_chart|EV_COLORIZABLE]] it has facilities for modifying its foreground and background colors. <br/>
|
||||
Use <eiffel>set_foreground_color</eiffel> to set the <eiffel>foreground_color</eiffel> and <eiffel>set_background_color</eiffel> to set the <eiffel>background_color</eiffel>. <br/>
|
||||
Use <eiffel>set_default_colors</eiffel> to restore the colors to their defaults.
|
||||
|
||||
* [[ref:libraries/vision2/reference/ev_help_contextable_chart|EV_HELP_CONTEXTABLE]]
|
||||
** If a Vision2 component inherits [[ref:libraries/vision2/reference/ev_help_contextable_chart|EV_HELP_CONTEXTABLE]] , facilities are provided for associating help to the component when F1 or Shift F1 is pressed.
|
||||
** If a EiffelVision 2 component inherits [[ref:libraries/vision2/reference/ev_help_contextable_chart|EV_HELP_CONTEXTABLE]] , facilities are provided for associating help to the component when F1 or Shift F1 is pressed.
|
||||
|
||||
* [[ref:libraries/vision2/reference/ev_positioned_chart|EV_POSITIONED]]
|
||||
** If a Vision2 component inherits [[ref:libraries/vision2/reference/ev_positioned_chart|EV_POSITIONED]] it is possible to query its current position, size and minimum size. <br/>
|
||||
** If a EiffelVision 2 component inherits [[ref:libraries/vision2/reference/ev_positioned_chart|EV_POSITIONED]] it is possible to query its current position, size and minimum size. <br/>
|
||||
Use <eiffel>x_position</eiffel> and <eiffel>y_position</eiffel> to find its position relative to its parent. <br/>
|
||||
Use <eiffel>width</eiffel> and <eiffel>height</eiffel> to find its size. <br/>
|
||||
Use <eiffel>minimum_width</eiffel> and <eiffel>minimum_height</eiffel> to find its size.
|
||||
|
||||
* [[ref:libraries/vision2/reference/ev_containable_chart|EV_CONTAINABLE]]
|
||||
** If a Vision2 component inherits [[ref:libraries/vision2/reference/ev_containable_chart|EV_CONTAINABLE]] it is able question its parent. Use parent to query the current parent.
|
||||
** If a EiffelVision 2 component inherits [[ref:libraries/vision2/reference/ev_containable_chart|EV_CONTAINABLE]] it is able question its parent. Use parent to query the current parent.
|
||||
|
||||
|
||||
|
||||
{{note|[[ref:libraries/vision2/reference/ev_containable_chart|EV_CONTAINABLE]] has no features for setting the parent. In Vision2, a child has no features for setting its parent, while a parent such as ev_container contains routines for adding children (one example is <eiffel>extend</eiffel>). }}
|
||||
{{note|[[ref:libraries/vision2/reference/ev_containable_chart|EV_CONTAINABLE]] has no features for setting the parent. In EiffelVision 2, a child has no features for setting its parent, while a parent such as ev_container contains routines for adding children (one example is <eiffel>extend</eiffel>). }}
|
||||
|
||||
The following properties are also used within Vision2:
|
||||
The following properties are also used within EiffelVision 2:
|
||||
* [[ref:libraries/vision2/reference/ev_deselectable_chart|EV_DESELECTABLE]]
|
||||
* [[ref:libraries/vision2/reference/ev_drawable_chart|EV_DRAWABLE]]
|
||||
* [[ref:libraries/vision2/reference/ev_fontable_chart|EV_FONTABLE]]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[[Property:title|Revisions and Bug Fixes]]
|
||||
[[Property:weight|10]]
|
||||
[[Property:uuid|eb11a237-0c75-0427-452a-303d4f276b97]]
|
||||
This document contains details of modifications and bug fixes to the Vision2 library listed by the release version of EiffelStudio. All bug fixes and modifications are relative to the previously released version.
|
||||
This document contains details of modifications and bug fixes to the EiffelVision 2 library listed by the release version of EiffelStudio. All bug fixes and modifications are relative to the previously released version.
|
||||
|
||||
==EiffelStudio 6.2==
|
||||
|
||||
@@ -54,7 +54,7 @@ This document contains details of modifications and bug fixes to the Vision2 lib
|
||||
* '''EV_PICK_AND_DROPABLE''' - Added context menu capabilities with 'set_configurable_target_menu_mode', 'set_configurable_target_menu_handler' and 'show_configurable_target_menu' that can be used to override the existing Pick and Drop mechanism.
|
||||
* '''EV_ACTION_SEQUENCE''' - Now event_data is defined with named tuples for easier reading of the action sequence parameters.
|
||||
* '''EV_APPLICATION_ACTION_SEQUENCES'''
|
||||
** Added 'file_drop_actions' for OS based file drag and drop from exterior applications to a Vision2 application.
|
||||
** Added 'file_drop_actions' for OS based file drag and drop from exterior applications to a EiffelVision 2 application.
|
||||
** Made 'idle_actions' obsolete as it is not thread-safe
|
||||
** Now a full garbage collection occurs if the application has been idle for 30 seconds
|
||||
|
||||
@@ -101,7 +101,7 @@ This document contains details of modifications and bug fixes to the Vision2 lib
|
||||
* '''STRING_GENERAL''' - All string operations now take STRING_GENERAL instead of STRING, this allows for mixing and matching of 8 and 32-bit string objects and allows for 32bit Unicode values, the return value is always STRING_32
|
||||
* '''EV_APPLICATION'''
|
||||
** Added action sequences for querying global user events such as pointer clicks and motion
|
||||
** Vision2 is now thread-aware with the addition of thread-safe 'add_idle_action' and 'do_once_on_idle' that allow threads to add agents to update the main GUI thread in a safe manner
|
||||
** EiffelVision 2 is now thread-aware with the addition of thread-safe 'add_idle_action' and 'do_once_on_idle' that allow threads to add agents to update the main GUI thread in a safe manner
|
||||
|
||||
* '''EV_POINTER_STYLE''' - Added new pointer style class for setting the style of the mouse pointer, EV_CURSOR will be made obsolete, in the future animated cursors and transparency will be available
|
||||
* '''EV_PIXEL_BUFFER''' - New class for loading/querying and setting RGBA values from disk
|
||||
@@ -130,7 +130,7 @@ This document contains details of modifications and bug fixes to the Vision2 lib
|
||||
* '''EV_GRID_ROW''' - Added `insert_subrows' for the quick addition of multiple subrows at once.
|
||||
* '''EV_WINDOW''' - Added `is_border_enabled', `enable_border' and `disable_border'. This lets you turn on/off the border as required.
|
||||
* '''EV_HEADER_ITEM''' - Added `user_can_resize' which enables you to prevent a user from resizing the item. Also added `minimum_width' and `maximum_width' which permit you to restrict the resizing of the item within a particular range.
|
||||
* '''EV_MESSAGE_DIALOG''' - All message dialogs now use their associated message icon as the icon pixmap displayed in the title bar, instead of the standard EiffelVision2 icon.
|
||||
* '''EV_MESSAGE_DIALOG''' - All message dialogs now use their associated message icon as the icon pixmap displayed in the title bar, instead of the standard EiffelVision 2 icon.
|
||||
* '''EV_DYNAMIC_TREE_ITEM''' - The `subtree_function' is now only executed when you expand the item. In the previous version, querying the contents of the item caused the subtree function to be executed, filling the children.
|
||||
* '''EV_COMBO_BOX''' - Added `is_list_shown', `list_hidden_actions' and renamed `drop_down_actions' to `list_shown_actions'.
|
||||
* '''EV_APPLICATION''' - Added `pointer_motion_actions', `pointer_button_press_actions', `pointer_button_release_actions', `pointer_double_press_actions', `mouse_wheel_actions', `key_press_actions', `key_press_string_actions' and `key_release_actions'. Each of these action sequences pass the applicable widget as part of the event data.
|
||||
@@ -291,7 +291,7 @@ This document contains details of modifications and bug fixes to the Vision2 lib
|
||||
*** Fixed crash when removing nodes from parent nodes not present in a tree widget
|
||||
|
||||
** '''EV_RICH_TEXT'''
|
||||
*** Now `paste' uses the Vision2 clipboard directly and so all clipboard assertions are fulfilled
|
||||
*** Now `paste' uses the EiffelVision 2 clipboard directly and so all clipboard assertions are fulfilled
|
||||
*** Fixed `buffered_format' to not wipe out the text buffer of the widget and therefore stop other EV_TEXT features from functioning correctly
|
||||
*** Now `buffered_append' doesn't wipe out the screen contents of the rich text control
|
||||
|
||||
@@ -302,7 +302,7 @@ This document contains details of modifications and bug fixes to the Vision2 lib
|
||||
** '''EV_PIXMAP''' - Improved pixmap 'stretch' for smaller images
|
||||
** '''EV_WIDGET'''
|
||||
*** Optimized motion event handling so that current motion events only get requested when the previous one has been processed
|
||||
*** Fixed theme managed handling in all widgets so that fonts when changed outside of the application by the theme manager get reflected in the Vision2 application
|
||||
*** Fixed theme managed handling in all widgets so that fonts when changed outside of the application by the theme manager get reflected in the EiffelVision 2 application
|
||||
|
||||
** '''EV_DIALOG'''
|
||||
*** Fixed bug where modal and modeless dialogs were not centered to parent
|
||||
@@ -412,7 +412,7 @@ This document contains details of modifications and bug fixes to the Vision2 lib
|
||||
* '''EV_FIGURE_EQUILATERAL''' - First point generated is now based upon 'point_b'
|
||||
|
||||
'''Breaking changes'''
|
||||
* '''EV_TREE_NODE_CONTAINER''' - This class is no longer used in EiffelVision2, and if you were relying on it, you should use EV_TREE_NODE_LIST instead. The type of `parent' for tree nodes has been changed from EV_TREE_NODE_CONTAINER to EV_TREE_NODE_LIST, so if you retrieve the `parent' and then attempt to iterate, you may have declared an instance of EV_TREE_NODE_CONTAINER. In this situation, you should simply change the definition to EV_TREE_NODE_LIST instead.
|
||||
* '''EV_TREE_NODE_CONTAINER''' - This class is no longer used in EiffelVision 2, and if you were relying on it, you should use EV_TREE_NODE_LIST instead. The type of `parent' for tree nodes has been changed from EV_TREE_NODE_CONTAINER to EV_TREE_NODE_LIST, so if you retrieve the `parent' and then attempt to iterate, you may have declared an instance of EV_TREE_NODE_CONTAINER. In this situation, you should simply change the definition to EV_TREE_NODE_LIST instead.
|
||||
|
||||
'''Bug fixes'''
|
||||
* '''Platform independent'''
|
||||
@@ -599,7 +599,7 @@ The following list details some of the breaking changes, and how to fix them:
|
||||
** redefined `prunable' to `True' and implemented `prune'.
|
||||
** Added the following features - `set_item_span', `set_item_position', `set_item_span_and_position', `area_clear_excluding_widget', `item_row_span', `item_column_span', `item_row_position' and `item_column_position'.
|
||||
|
||||
* '''EV_WIDGET''' - Changed type of `focus_in_actions' and `focus_out_actions' from EV_FOCUS_ACTION_SEQUENCE to EV_NOTIFY_ACTION_SEQUENCE. `is_parent_recursive' is no longer available. It has been moved to EV_CONTAINER. This was necessary to fix a catcall encountered using vision2 under .NET. The problem manifested with widgets that held items.
|
||||
* '''EV_WIDGET''' - Changed type of `focus_in_actions' and `focus_out_actions' from EV_FOCUS_ACTION_SEQUENCE to EV_NOTIFY_ACTION_SEQUENCE. `is_parent_recursive' is no longer available. It has been moved to EV_CONTAINER. This was necessary to fix a catcall encountered using EiffelVision 2 under .NET. The problem manifested with widgets that held items.
|
||||
* '''EV_FIGURE''' - `proximity_in_actions' and `proximity_out_actions' are now obsolete.
|
||||
* '''EV_FONTABLE''' - `set_font' now sets a copy of the font internally.
|
||||
* '''EV_TREE''' - `ensure_item_visible' and `has_recursively' now take an EV_TREE_NODE as arguments, instead of an EV_TREE_ITEM.
|
||||
@@ -753,7 +753,7 @@ The following list details some of the breaking changes, and how to fix them:
|
||||
** '''EV_BUTTON''' - The result of `text_alignment' after default_create was incorrect.
|
||||
|
||||
* '''Gtk'''
|
||||
** Gtk version of Studio released (including Vision2), so no fixes from 5.0
|
||||
** Gtk version of Studio released (including EiffelVision 2), so no fixes from 5.0
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user