Notas:
Makefile
) e os ficheiros de dados necessários
para efectuar um teste do programa desenvolvido, acompanhada por uma
listagem dos ficheiros fonte (contendo código C++). Use o modelo
fornecido: StarOffice, Word,
ou RTF.
Deve também enviar uma mensagem de correio electrónico com os ficheiros de código fonte (.H
,
.C
e _impl.H
, caso existam) para Ricardo.Ribeiro@iscte.pt.
O objectivo do trabalho final da disciplina é a escrita de um editor de texto simplificado com possibilidade de desfazer e refazer acções realizadas anteriormente. O objectivo deste problema é criar o embrião desse trabalho.
Pretende-se que o aluno implemente um editor de texto muito simples usando a
biblioteca Slang++. O editor permite inserir texto corrido,
usando as teclas correspondentes a símbolos visíveis, numa única
sequência. Isto significa que o texto editado não conterá nem o
caractere fim-de-linha ('\n'
), nem o tabulador. A sequência
de caracteres que constitui o texto deve ser mostrada no ecrã com alinhamento
à esquerda e sem que sejam quebradas palavras a meio (sequências sucessivas de
caracteres não incluindo o espaço ' '
). Como
simplificação adicional, o texto é mostrado no ecrã desde o início e, por
isso, a posição do cursor pode não ser visível. As únicas acções
permitidas são:
seta direita
-- Desloca o cursor para a direita (a posição
mais à direita é uma posição fictícia depois do último caractere do
texto). Quando o editor começa não há texto e o cursor está nesta
posição fictícia. Como o texto pode ser partido em várias linhas,
esta acção pode ter como resultado a mudança de linha do cursor.seta esquerda
-- Deslocamento contrário. Não existe
posição fictícia antes do primeiro caractere do texto.delete
-- Remove o caractere correspondente à posição do
cursor, que se desloca para a direita no texto (visualmente mantém a mesma
posição).f10
-- Sair do programa. Pergunta se quer gravar o
texto num ficheiro e, em caso afirmativo, pede o seu nome ao utilizador e
guarda-o.ctrl-z
-- Desfazer. Desfaz a última acção
realizada. Deve ser possível desfazer todas as acções realizadas
desde o início da edição. As acções a fazer/desfazer incluem
deslocamentos do cursor.ctrl-x
-- Refazer. Refaz a última acção desfeita.
Só é possível refazer imediatamente após de ter desfeito alguma acção,
ou após outra operação de refazer que tenha anulado uma acção desfeita
posteriormente à anterior.Editor
.
Documento
.
Esta classe só permite alterações ao documento através de um método que
recebe a acção a realizar e através de dois métodos adicionais para
desfazer a última acção realizada e para refazer a última acção
desfeita.
Accao
e classes derivadas para as
acções concretas sobre o texto que podem ser realizadas. Qualquer Accao
deve ter métodos para fazer ou desfazer a sua acção sobre o
documento. Uma acção só pode ser desfeita se tiver sido feita e
vice-versa. Considera-se que uma acção acabada de criar é
equivalente a uma acção desfeita.