블로그 이미지
초딩입맛제주아재
하고 싶은 것만 하며 살고 싶다

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
2006. 11. 16. 22:16 Programing/Smalltalk
1. Dialog 클래스 아래 HouseKeepingBookItemDialog라는 클래스를 만들고, View/New 하여 새 뷰를 만든다. 만들어진 뷰는 Shell의 뷰와는 모양이 조금 다를겁니다. 어떻게 다른가요?

Ok와 Cancel 버튼 두개가 만들어져 있습니다.

2. HouseKeepingBookItemDialog는 HouseKeepingBookItem 객체를 모델로 삼아  수정하는 Dialog가 될 것입니다. Shell에서 했던 것과 같은 방법으로 item의 name, value, date를 표현할 컨트롤들을 꾸며봅니다. (화면 캡쳐해주세요)
힌트: 
작성해야 할 매쏘드들 ...  model:   createComponents
사용할 클래스들 ... TextPresenter, DatePresenter, NumberPresenter
주의할 점: Date


createComponents

super createComponents.

namePresenter := self add: TextPresenter new name: 'name'.
valuePresenter := self add: NumberPresenter new name: 'value'.
datePresenter := self add: DatePresenter new name: 'date'.

model: aHouseKeepingBookItem

super model: aHouseKeepingBookItem.

namePresenter model: (self model aspectValue: #name).
valuePresenter model: (self model aspectValue: #value).
datePresenter model: (self model aspectValue: #date).


3. Workspace로 가서 간단한 테스트를 해봅시다.
myItem := HouseKeepingBookItem new.
HouseKeepingBookItemDialog showModalOn: myItem.

Dialog에 뭔가 적당한 값들을 기입해 줍니다. OK버튼을 누릅니다.
myItem의 값이 어떻게 되었나요?

입력한 값으로 바뀌었습니다.


4. Workspace로 가서 간단한 테스트를 해봅시다.
myItem := HouseKeepingBookItem new.
HouseKeepingBookItemDialog showModalOn: myItem.

Dialog에 뭔가 적당한 수정을 해 줍니다.
CANCEL버튼을 누릅니다.
myItem의 값이 어떻게 되었나요?

바뀌지 않았습니다.


5. HouseKeepingBookShell의 newItem매쏘드에서 임시 item을 생성했었죠? 이제, HouseKeepingBookItemDialog 가 있으니까, 정식으로 추가 할 수 있게 되었습니다.

HouseKeepingBookShell의 newItem매쏘드를 수정하여, 사용자가 입력한 값을 새 가계부 항목으로 등록하도록 수정하세요.

newItem
items model add:  (HouseKeepingBookItemDialog showModalOn: HouseKeepingBookItem new)


6. 5번 문제에서 사용자가 Cancel을 눌러버린다면? item을 추가하면 안되겠죠? newItem 매쏘드를 수정하여 그 기능을 추가하세요.

newItem

(HouseKeepingBookItemDialog showModalOn: HouseKeepingBookItem new)
ifNotNil: [:value | items model add: value].


7. IT에서 추가와 편집은 큰 차이가 없습니다. HouseKeepingBookShell에 편집메뉴명령을 추가하고 editItem 이라는 매쏘드에 그 기능을 구현하세요. 합산과 흑/적 상태가 바르게

바뀌도록 하세요. deleteItem과 마찬가지로 선택된 것이 없으면 수정할 수 없에 커맨드비활성화하는 것도 잊지마시고요.

queryCommand: aCommandQuery

super queryCommand: aCommandQuery.

#(deleteItem editItem) includes: aCommandQuery command)

  ifTrue: [aCommandQuery isEnabled: items hasSelection].

 

editItem

(HouseKeepingBookItemDialog showModalOn: ( items model at: items selectionByIndex ))
ifNotNil: [:value | items model updateItem: value]


model: 이벤트 추가

items model when: #item:updatedAtIndex: send: #refreshSumAndStatus to: self.


8. 추가와 수정이 아무리 흡사하더라도, 사용자가 구별할 수 있게 해줘야겠죠? 추가일 때는 Dialog의 제목이 '가계부 항목 추가'로, 수정일 때는 '가계부 항목 수정'으로 표시되게 하세요.
힌트: createOn:   caption:   showModal


HouseKeepingBookShell > newItem,editItem 메서드 수정

newItem

((HouseKeepingBookItemDialog createOn: HouseKeepingBookItem new) caption: '가계부 항목 추가'; showModal)
ifNotNil: [:value | items model add: value ].

editItem

((HouseKeepingBookItemDialog createOn: ( items model at: items selectionByIndex )) caption: '가계부 항목 수정'; showModal )
ifNotNil: [:value | items model updateItem: value].

'Programing > Smalltalk' 카테고리의 다른 글

가계부 만들기 - 짧은숙제  (0) 2006.11.16
가계부 만들기 - 08  (0) 2006.11.16
가계부 만들기 - 06  (0) 2006.11.16
Array를 OrderedCollection으로 바꾸기  (0) 2006.11.02
객체를 배열로 만들어주는 Array with:  (0) 2006.10.30
posted by 초딩입맛제주아재