Talk:Folding support
general TODO
Sanakan 20:37, 3 May 2006 (CEST)
syntax: phase <nr> [<who>] <deadline>
phase 0 (everyone!) saturday, may 6
- specify ADT
- generate and discuss a complete ADT of the EV_FOLDING_WIDGET here, if it's complete & correct, we can copy it over to the main page.
phase 1 (stefan, oliver, thomas, Grippus, sanakan) saturday, may 13
- implement first rough draft of the EV_FOLDING_WIDGET based on the ADT from above (see also hint below).
phase 2 (lukas, Bru, Lord Bubu, sanakan) ...
- write interface EV_FOLDING_CONTROLLER for users to use our folding widget by supplying an AST.
phase 3 (Grippus, Ledergec, salmanasar, ) ...
- extensive testing (all members)
- documentation
phase 4 (to be assigned) ...
- integration with EiffelStudio (aka. wunschtraum...)
hint
The folding support should be included the: EDITABLE_TEXT_PANEL
I agree on having those functionalities; but we do not have any changes there; i think the view (of MVC model) is resided in 57dev\Eiffel\interface\new_graphical\text_window\interface. e.g. EB_SMART_EDITOR, which inherits from EDITABLE_TEXT_PANEL (indirectly) and OUTPUT_WINDOW...
furthermore one should have an entrie in View -> Class View to activate/deactivate folding support in ES. (for debugging purposes)... (unforttunately ES still won't compile properly:-(!)
Bru 13:00, 9 May 2006 (CEST)
I think we should concentrate on finally getting together a list of specs and a BON diagram or something so that we have an idea on how to implement the fracking thing as a simple EV widget before we start thinking about ES. I guess we will have some kind of controller that offers the interface to the container on one side and the displayer on the other. I still have no idea how to start, though, I will start looking at the EDITABLE_TEXT_PANEL source after these frelling midterms.
salmanasar 13:15, 9 May 2006 (CEST)
I suggest, that every change in the classes is reported with a little comment (perhaps via the mailinglist), so that those of us who do part 3 and 4 are able to support the coders, as sanakan proposed.
ADT
WhatWhereWhenHowWhy
Sanakan 16:59, 26 April 2006 (CEST)
discuss what the ADT of the widget should be like:
Exception 14:45, 4 May 2006 (CEST)
I think we need another data type / class that specifies where folding is possible and whether it's folded or not. I propose the name EV_FOLDING_AREA.
it should have the following functions:
create: -> EV_FOLDING_AREA
the area goes from this character on.
from: EV_FOLDING_AREA -> INTEGER
the area goes from this character on.
to: EV_FOLDING_AREA -> INTEGER
the area goes until this character.
folded: EV_FOLDING_AREA -> BOOLEAN
is it folded or not?
fold: EV_FOLDING_AREA -> EV_FOLDING_AREA
fold the area.
unfold: EV_FOLDING_AREA -> EV_FOLDING_AREA
unfold the area.
content: EV_FOLDING_AREA x EV_FOLDING_WIDGET -> STRING
the content of the area.
the structure would be controlled by the controller which knows of the AST.
as always, this is only a proposal.
Bru 13:03, 9 May 2006 (CEST)
How does Eiffel implement text as a sequence of characters? line by line? That will greatly influence our implementation of the folding widget I guess. A "folding area" will then contain the lines themselves and the start and end coordinates of the area, so that when the displayer draws the editor area it gets those coordinates from the folding controller and doesn't display those lines but puts a symbol there instead. Just thinking out loud here...
--Unthomas 14:05, 1 May 2006 (CEST)
Here a link to an interesting paper about ADTs and text editors (node 15):
http://www.cs.unm.edu/~crowley/papers/sds/sds.html
Are you able to see the figures?
- no images over here, either... but here's a download of said paper: crowley98data.ps
Sanakan 01:06, 2 May 2006 (CEST)
working title of the project
A few ideas:
- Folding -> falten -> eiffel-origami
- FEES : Folding editor for Eiffel Studio
- hidden beauty project
- HYCs : Hide your code
- Folding Fields
- Heilige Dreifaltigkeit
any comments from team members?
Sanakan 22:02, 19 April 2006 (CEST)
Bayt I really like origamiE :-)
Bru origamiE is cool. Another propasal: FEdEX (Folding: an Editor EXtension or an Folding for Editors: an Eiffel eXtension)
Testing/Checking
--Salmanasar 12:35, 13 June 2006 (CEST)
I wrote a little Eiffel-program with which you can check if our folding-editor works:
indexing
description : "System's root class, Class to test if folding editor works"
author: "salmanasar"
date: "11.06.2006"
revision: "1.1"
class
ROOT_CLASS
create
make
feature -- Initialization
make is
-- Creation procedure.
local
option : INTEGER
number : INTEGER
do
-- Print some welcome text.
io.put_string("Enter your option: {1,2,3}")
io.new_line
io.put_string("=========================")
io.new_line
io.read_integer
option := io.last_integer
io.new_line
io.new_line
io.put_string("Enter a number between 1 and 20")
io.new_line
io.put_string("===============================")
io.new_line
io.read_integer
number := io.last_integer
-- if to be folded
if (number > 0) and (number < 21) then
-- inspect to be folded
inspect option
when 1 then looping(number)
when 2 then casedecision(number)
when 3 then inspecting_thing(number)
else io.put_string("no such option!!")
end
end
end
feature -- cases
looping(n: INTEGER) is
-- feature with 2 loops, 1 if-then-else printing a checkered triangle
local
i, j, star: INTEGER
do
from
i := 1
star := 1
until
i > n
loop
from
j := 1
until
j > i
loop
if j \\ 2 = star then
io.put_character (' ')
else
io.put_character ('*')
end
j := j + 1
end
star := 1 - star
i := i + 1
io.put_new_line
end
end
casedecision(n:INTEGER) is
-- feature with if then elseif
do
-- if to be folded
if n > 10
then io.put_string ("What a huge number!!!")
elseif n >5
then io.put_string ("What a little number!!!")
else io.put_string ("What a tiny number!!!")
end
end
inspecting_thing(n:INTEGER) is
-- feature with weird inspecting thing
do
-- inspect to be folded
inspect n
when 1 then io.put_string ("one")
when 2 then io.put_string ("two")
when 3 then io.put_string ("three")
when 4 then io.put_string ("four")
when 5 then io.put_string ("five")
when 6 then io.put_string ("six")
when 7 then io.put_string ("seven")
when 8 then io.put_string ("eight")
else io.put_string ("too big")
end
end
end -- class ROOT_CLASS

