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

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
2006. 11. 16. 22:10 Programing/Smalltalk
1. 가계부의 원금란을 수정하면, 합산을 표시하던 NumberPresenter와 흑자/적자를 표시하던 TextPresenter가 자동으로 갱신되도록 하세요. createSchematicWiring라는 매쏘드를 만들어서 두 Presenter사이의 관계를 지어주면 됩니다.

힌트: Shell의 상위 클래스인 Presenter 클래스에는 createSchematicWiring이라는 매쏘드가 있습니다. 이 매쏘드는 창이 처음 열릴때 한 번만 호출되며, 창 자신을 포함한 모든 하위창들 사이의 메세지 핸들링을 초기화합니다. 다른 사람들이 작성한 createSchematicWiring 매쏘드를 Method Browser로 검색해보시면, 대강 감이 오실 겁니다. 잘 모르겠으면, 메신저로 연락주세요. 추가 힌트 나갑니다.


createSchematicWiring

   super createSchematicWiring.

   pocketMoney when: #valueChanged send: #refreshSumAndStatus to: self.


2. View Composer를 열어서 HouseKeepingBookShell에 메뉴바를 추가합니다.

Item/New 메뉴를 만듭니다. (메뉴속성에서 command는 #newItem로 합니다)

showOn: 해서 메뉴를 테스트해봅니다. 메뉴의 상태가 어떻습니까?

힌트: View Composer를 열어서 Modify메뉴의 Menu Bar... 라는 명령을 실행합니다.


"New"항목이 비활성화 상태입니다...


3. Class Browser로 HouseKeepingBookShell에 newItem이라는 매쏘드를 만들어 줍니다.

showOn: 해서 메뉴를 테스트해봅니다. 메뉴의 상태가 어떻게 달라졌습니까?

"New"항목이 활성화 되었습니다.



4. 3번 문제에서 만든 newItem은 HouseKeepingBookShell의 메뉴가 선택되면 불리는 매쏘드 입니다. 이 매쏘드를 편집하여 '임시'라는 이름을 가진, 가격은 30인, 날짜는 오늘인 항목하나를 추가하게 합니다. 맞게 하셨다면, 항목추가와 함께 합산과 흑/적자 표시도 동시에 갱신됨을 확인하실 수 있습니다.

제약조건: 리스트컨트롤을 직접 제어하면 안되며, HouseKeepingBookShell의 모델을 수정한 다음, Shell로 하여금 재초기화 하도록 해야 함.

newItem 정의를 답으로 제출하세요.


newItem

items model add: (
  HouseKeepingBookItem new
   name: '임시';
   value: 30;
   date: Date today
).



5. View Composer를 열어서 Item/Delete 메뉴를 만듭니다. (메뉴속성에서 command는 #deleteItem로 합니다)

HouseKeepingBookShell에 deleteItem매쏘드를 두어, 리스트에 선택된 항목들을 지우게끔 하세요. 4번과 마찬가지로, 합산과  흑/적자 표시가 갱신될겁니다.

deleteItem 매쏘드를 답으로 제출하세요.

힌트:  selection , remove: , model:


deleteItem

items model removeAtIndex: items selectionByIndex.


4~5번 관련하여 이벤트를 통한 자동갱신을 위하여 model: 메서드를 수정하였습니다.

model:>>

items model: (ListModel on: aHouseKeepingBook items).
items model when: #item:addedAtIndex: send: #refreshSumAndStatus to: self.
items model when: #item:removedAtIndex: send: #refreshSumAndStatus to: self.

6. View Composer를 열어서 PushButton을 하나 추가해서, 클릭하면 4번과 같은 동작을 하게끔 하세요.

힌트: 클래스 소스는 일절 수정할 필요가 없습니다. 오로지 View Composer만으로 해낼 수 있습니다.

어떤 방법으로 해냈는지 설명하는 글을 답으로 제출하세요.

View Composer의 우측 하단 속성창에서

commandDescription > command: #newItem





7. View Composer를 열어서 PushButton을 하나 추가해서, 클릭하면 5번과 같은 동작을 하게끔 하세요.

힌트: 클래스 소스는 일절 수정할 필요가 없습니다. 오로지 View Composer만으로 해낼 수 있습니다.

어떤 방법으로 해냈는지 설명하는 글을 답으로 제출하세요.


commandDescription > command: #deleteItem




8. 가계부 item을 삭제하면, 리스트에서 다른 item을 선택하지 않은 채, 또 삭제를 시도해 보세요. 에러가 나죠?

에러가 나지 않게, 선택한 item이 없을 때는 메뉴를 비활성화 해야 합니다. queryCommand:라는 매쏘드를 작성하면 됩니다.

queryCommand: 를 검색해서 다른 사람들은 어떻게 작성했는지 참고하세요.

힌트:  isEnabled:  를 사용하면 됩니다.


queryCommand: aCommandQuery

   super queryCommand: aCommandQuery.

   (#(deleteItem) includes: aCommandQuery command)

       ifTrue: [aCommandQuery isEnabled: items hasSelection].



9. 8번에서 작업한 것이 버튼에 어떤 영향을 미쳤는지 보고하세요.

프로그램을 실행하면 삭제 버튼이 비활성화 되있습니다.

posted by 초딩입맛제주아재