1. System Browser 윈도우가 열려있는 경우엔 닫아주십시오. GUI페인터 툴이 열려있는 경우엔 그곳으로 돌아가주십시오. 만일 닫혀있는 경우는 WebLogGUI를 열어주십시오.(레슨 6의 스텝 12-15를 참조)
2. 캔버스에 아래와 같이 위젯을 배치합니다. 배치가 가능하도록 캔버스 사이즈를 변경해주십시오.
- 세 개의 라벨(Hits, Log, Files, Most Popular Pages)
- Log Files 라벨 아래에 리스트 한 개(팔레트 상단 아홉번째 버튼)
- Most Popular Pages 라벨 아래에 텍스트 에디터 한 개(팔레트 상단 일곱번째 버튼)
- Hits 라벨 옆에 입력필드
아래 캔버스처럼 위젯을 배치해주십시오.
Entity
|
속성
|
설정
|
리스트
|
Aspect
|
#logList
|
리스트
|
변경 : (노티피케이션 탭)
|
#showStats
|
텍스트 에디터
|
Aspect
|
#logHolder pages
|
입력 필드
|
Aspect
|
#logHolder hits
|
라벨1(리스트)
|
문자열
|
Log Files
|
라벨2(입력 필드)
|
문자열
|
Hits
|
라벨3(텍스트 에디터)
|
문자열
|
Most Popular Pages
|
텍스트 에디터 위젯에서 aspect에 기술된 것을 보면, logHolder와 pages간에 스페이스가 있습니다. logHolder가 Stat 클래스의 인스턴스라는 것을 뒤에 오는 레슨에서 확인하겠습니다. Pages와 hit는 Stat 인스턴스로부터 페이지와 히트(hit)를 추출하는 메서드입니다. 로그파일이 리스트 위젯에서 선택되었을 경우, 이 위젯들은 어떻게 될까요.
4. GUI페인터 툴로 돌아가주십시오. 메인 윈도우(위젯 리스트의 첫 엔티티)를 선택해주십시오. 배치/사이즈 탭을 클릭하고 아래와 같이 설정해주십시오.
- 어드벤스 라디오 버튼을 클릭해주십시오
- 배치 아래 있는 첫 번째 라디오 버튼(시스템 표준)을 클릭해주십시오
- 사이즈 아래 있는 두 번째 라디오 버튼(지정 사이즈)를 클릭후 지정 버튼을 클릭해주십시오
5. 인스톨 버튼을 클릭하고 다음에 표시되는 다이얼로그 박스에서 OK를 클릭해주십시오.
6. 복수의 위젯을 추가했기 때문에, 하나씩 "정의"하고 있기엔 시간이 너무 오래 걸립니다. 그러니 다음과 같은 방법으로 진행하겠습니다.
경고 : 이 방법을 사용하기 위해서는 주의가 필요합니다. 하나라도 선택을 잘못하면 기존에 편집한 메서드는 무시됩니다.
메인 윈도우를 클릭(선택)후 정의 버튼을 클릭해주십시오. 모든 위젯이 표시됩니다.
7. 새로운 위젯을 제외한 모든 위젯에 있는 체크 마크를 해제해주십시오. OK를 클릭하기 전에 다이얼로그 박스가 아래 그림처럼 되어있는지 확인해주십시오. 즉, logList와 Holder만 체크되어 있을 것입니다.
일람에 표시되지 않은 위젯이 있으니, 모든 일람을 확인하기 위해 스크롤 해주십시오(statusUI입력 필드는 맨 끝에 있습니다). 이것이 체크되어있는지 확인해주십시오. logHolder는 한 개밖에 표시되지 않는 것에 주의해주십시오. 이것은 틀린 게 아닙니다. 텍스트 에디터 입력 필드의 각 logHolder에 관련된 pages와 hits는, 이 한 개의 Aspect에 할당된 메서드라는 것을 기억해주십시오.
그림 10-2. 복수 위젯의 정의(정의하지 않는 위젯 포함)
8. OK를 클릭해주십시오.
9. GUI페인터 툴의 Browse 버튼을 클릭해주십시오.
logList와 logHolder는 인스턴스 변수에 자동적으로 추가됩니다.
10. 인스턴스 탭이 선택된것을 확인해주십시오. actions프로토콜 하위에 아래와 같은 메서드를 추가해주십시오.
showStats
logHolder value: logList selection.
GUI캔버스에서 일람이 변경된(일람의 다른 항목이 선택된) 경우, 이 메서드는 실행됩니다. 일람에서 새로운 로그파일이 선택될때마다 입력필드(히트, hit)와 텍스트 에디터(인기 페이지)는 변경됩니다. 이 처리에 필요한 수정은 모두 완료하였습니다!!
11. startWebLog 메서드 맨 끝에 아래와 같은 코드를 추가해주십시오.
logList list: aWebLog stats.
이 행은 WebLog 클래스로부터 stat 컬렉션을 리스트 위젯에 할당합니다. 리스트 위젯은 컬렉션을 표시하는 최고의 위젯입니다.
12. logHolder 메서드에서, ifTure 블록 안에 있는 행을 아래와 같이 수정해주십시오.
[logHolder := Stat new asValue]
이 행은 logHolder 변수가 nil인지 아닌지 확인합니다. 만일 nil일 경우, Stat클래스의 인스턴스를 보유하도록 설계되어 있기 때문에, Stat 클래스의 새로운 인스턴스로 초기화 시킬 필요가 있습니다. Hit와 page메서드는 애스팩트의 일부이기 때문에, 입력필드와 텍스트 에디터 위젯은 Stat클래스의 인스턴스에 포함되어있는 이 변수에 의존합니다.
13. logList메서드에서, ifTure 블록 안에 있는 행을 아래와 같이 수정해주십시오.
[logList := SelectionInList with: aWebLog stats]
이 행은 logList 위젯이 nil인지 아닌지 확인합니다. 만일 nil일 경우 WebLog 클래스의 stats 변수에서 초기화할 필요가 있습니다. 어플리케이션을 실행할 때, loglist가 stats 컬렉션을 포함하고 있는 것을 알아차릴 겁니다. 하지만, 입력필드와 텍스트 에디터 위젯도 똑같이 포함되어있을 필요가 있습니다. 유저는 logList에서 아직 항목을 선택하지 않았기 때문에, 리스트를 적절히 초기화할 필요가 있습니다. 그렇기에, 리스트는 stats 컬렉션을 보유하도록 설계되어있는 것을 VisualWorks에 전합니다.
14. System Browser를 닫아주십시오. GUI페인터 툴의 윈도우 열기 버튼을 클릭해주십시오. 어플리케이션을 테스트합니다. 모두 동작하는 것을 확인해주십시오.
15. System Browser 윈도우로 돌아가주십시오. 페키지 페인(맨 좌측)WebLogStats 패키지까지 스크롤해주십시오.
16. 패키지 Pane에서 WebLogStats를 클릭(선택)해주십시오. <오퍼레이트 클릭>후 Save to File을 선택해주십시오.
17. Weblogstats_2_stage7.st를 입력해주십시오.
|