- index, selectedIndex
1. 메뉴 포커스 이동 -> index 변화
2. 메뉴 선택 -> selectedIndex에 index 지정, 이전 selectedIndex와 다르면 hasChanged = true;
3. hasChanged 가 true라면 뭐든 생성 -> selectedIndex 에 해당하는 뭐든 생성, hasChanged = false;
* 외부에서 내용변경시 2번에서 시작...
- user input을 공통적으로 막을 수 있도록한다.
1. key 입력은 main에서 시작되므로 이를 main에서 관리하도록.
- 각 페이지가 갖는 서브페이지에 key input을 전달하는 방법을 모색
1. main에 _keyListener 변수로 key input을 직접 전달
2. 페이지에서 원할 때 _keyListener를 등록할 수 있음.
3. IKeyListener 로 구현
- 각 페이지들은 다른 페이지들과 연관관계가 없도록(적도록) 구성한다.
1. 페이지간의 이동이 원활해진다.
2. 데이터 참조가 목적이라면 데이터객체를 독립시켜 각각 참조하여 관계를 없앤다.
- 페이지 전환시 동작 순서
0.5. user input 막음
1. 이전 페이지 사라짐 -> 사라짐 완료
2. 현재 페이지 나타남 -> 나타남 완료
2.5. user input 시작
- 이전 페이지로 이동하는 방법 모색
1. 각 페이지는 고유의 id가 있다.
2. 현재 페이지는 이전 페이지의 id를 가지고 있다. (또는, main에서 페이지 순서를 관리한다)
3. 이전 이동시 이전 페이지의 id를 이용
- AbstractPage : 각각의 페이지 클래스
1. implements IKeyListener :: pressKey(code) : 키 입력을 받을 수 있는 객체
1.1. implements IKeyListener :: focusIn() : 키 객체로 지정되었을 때;
1.2. implements IKeyListener :: focusOut() : 키 객체가 아님으로 지정되었을 때;
2. create() : 데이터 로드 시작, 보여지는 것 생성
3. dispose() : 데이터 이외의 보여지는 것 제거
4. live() : 약한 전환을 위한 메서드, background에서 계속 진행하고 싶을 때 (약한 전환시에는 작동하지 않는 메서드)
5. kill() : 상동
6. index : 포커스가 맞춰진 index
7. selectedIndex : user가 선택한 index
8. hasChanged() : selectedIndex의 변화가 있는지 확인
9. clearChanged() : selectedIndex의 변화가 없음으로 지정
10. setChanged() : selectedIndex의 변화가 있음으로 지정
11. appear() : create()이후 나타나는 동작 시작
12. disappear() : dispose()이전 사라지는 동작 시작
- AbstractPageContainer : 페이지안에 페이지를 가질 수 있는 클래스
1. extends AbstractPage
2. addPage(AbstractPage) : 서브 페이지를 추가
3. removePage(AbstractPage) : 서브페이지를 제거
4. createSubPage() : selectedIndex의 서브페이지를 생성
5. removeSubPage() : 현재 서브페이지를 제거
6. subIndex : 서브페이지의 인덱스(선택된 서브의 sub.index or sub.selectedIndex)
* 서브페이지 생성시 addChild()는 별도로 구현한다. - 각 페이지마다 붙여지는 위치가 다르므로..