no image
[Flower] 디버깅 창을 구현 하였습니다.
아쉬움이 있는데 디버깅 창을 구현 하였습니다. 디버깅 버튼을 누르면 창이 생기고, 디버깅 종료 버튼을 누르면 창이 사라지도록 했습니다. 이 창은 새로 팝업 되는 창이 아니라, canvas가 위치 하는 곳의 영역 일부를 빌려 위치합니다. 실제 구현은 디버깅 버튼이 눌리면, canvas를 빼내고, JSpiltePane에 canvas와 JTable을 담은 JScrollPane(JTable담고 있음)을 담아서 canvas가 위치 한 곳에 넣어 줌니다. 실제 디버깅 툴의 UI를 보면 도킹이라고 불리는 기술을 사용하는데 저는 그것을 어떻게 구현하는지도 배울 시 간도 부족 하므로 고정된 곳에 넣어 두었습니다. 그래도 전보다 UI가 이뻐지고 있어 만족 하고 있습니다. 상세한 요구 사항을 만족하도록 커스티마이징 하였고 ..
2009.11.13
no image
[Flower] GUI 화면을 구성하고 있습니다.
오랜만에 Flower 프로젝트를 했습니다. 요즘.. 개을러 지기도 했고, 학교 과제도 많았기 때문에 조금 지체 되었습니다. 아무튼 이번달 구현해야 하는 것은 크게 몇가지가 있습니다. GUI 껍데기(?!)구현하기 기존에 구현된 기능을 GUI와 붙이기 위의 둘을 MVC 패턴을 이용하여 구현하기 순서도 그리는 모듈 미완성부분 완성하기 컴파일러 모듈과 통신을 위한 설계 회의 하기 이번주는 GUI껍데기와 기존의 순서도 모듈을 붙이는 것까지가 목표입니다. 오늘은 Property pallet부분과 debugging panel을 제외한 부분을 모두 완성 시켰습니다. 나름 이쁘게 나온 것 같아서 좋습니다.ㅋ
2009.11.10
[UI디자인을 하고 있습니다.]
Undo Redo기능을 구현하고 painter 클래스의 복잡성이 너무 커지고, 전체적인 구조가 흔들려서 과감히 리팩토링을 하고 있습니다. 일단 MVC모델을 기반으로 하려고 하고 있고(전에도 그랬었지만 view와 controller가 섞여 있었습니다.) 그 첫단계로 UI(view)를 설계하고 있습니다. 함수 기능과, 디버깅 기능을 추가 고려 하여 완벽한 버전의 UI를 만들고 있습니다. 아마 다음주 중간쯤에는 완성될 것 같네요.. 이번주말은 컴파일러 숙제가 있어서 많이 코딩을 하지는 못할 것 같습니다.
2009.11.08
no image
UndoRedo 구현을 마무리 지었습니다.
일단 마무리를 지어야 할 것 같습니다. 구현은 다 했지만 테스트를 하기 위한 환경이 갖추어 지지 않았네요.. painter 쪽, 즉, 컨트롤러 쪽이 리팩토링을 해야 할 시기가 온것 같습니다.. 오늘의 코딩 시나리오를 알려 드리죠.ㅋㅋ redo undo가 구현이 완료 되어서 history에 언제 넣는지 결정하고 소스의 해당부분에 코드를 집어 넣으려고 했습니다. painter가 redoUndomanager와 symbolManager를 모두 갖고 있었기 때문에 코드는 redoUndoManager.add(symbolManager.createMemento()); 였습니다. 하지만, 굳이 painter가 redoUndoManager를 가질 필요가 없다고 생각하여 symbolManager가 redoUndoManage..
2009.10.29
UndoRedo를 구현 하고 있습니다.4
createColne 매소드를 모든 심볼에 대해서 구현을 완료 했습니다. concreteSymbol의 clone함수를 구현하려다 보니 부모 클래스의 멤버 변수도 모두 복사해야 다 던데요.. 그부분을 각각의 concreteSymbol에 넣으니까 각 클래스에 중복된 코드가 엄청 많아 졌습니다. 부모클래스에 그 코드를 넣으려고 해도 자식클래스가 어떤 타입인지 모르기 때문에 결국 다시 하위 클래스에서 다시 복사해야 할 것 같아서 일단 모두 concreteSymbol에서 모두 복사하도록 하였습니다. 그렇게 하고 모듈 테스트를 위해 여전히 도형의 생성에 대해서만 redo undo 를 체크 했는데 생각하는 것과 다른 결과가 나왔습니다. undo를 많이 하고 나서 다른 작업을 할때는 redo할것이 없어야 합니다.( 다..
2009.10.28
no image
UndoRedo를 구현 하고 있습니다3.
Deep Copy... 과연 많이 해도 좋을지 모르겠습니다. 오전까지의 구현에서 얕은 복사를 하고 있었기 때문에 Undo, Redo를 해도 제대로 동작 하지 않았습니다. 그래서 UndoRedoManager가 관리 하는 history에 SymbolManager가 만들어 낸 memento를 넣을때 SymbolManager가 갖고 있는 멤버변수를 모두 Deep copy해야 한다는 결론이 나왔습니다. 일단, SymbolManager가 갖고 있는 멤버 변수들은 모두 colloection들로 모두 레퍼런스 변수를 담고 있습니다. 이 레퍼런스 변수는 DSymbol이라는 놈들인데요..(실제로는 DSymbol을 상속받은 것들이겠죠) 그림에 드려질 도형들입니다. 문제는 이 DSymbol안에 있는 것들도 상당한 양의 레퍼런..
2009.10.27
UndoRedo를 구현 하고 있습니다.2
어제 까지 시험이라서 설계만 하고 어제 저녁 부터 구현을 시작했습니다. memento 패턴을 이용하여 설계하였고, 추가로 UndoRedoManager를 두어 여러개의 memento를 관리하도록 했습니다. 구현을 어느정도 마친뒤에 테스트를 해보았습니다. memento를 저장해야 하는 시점을 아직 확정하지 못해서 일단 심볼들이 캔버스에 생성되는 시점만 정하고 제대로 동작하는지 디버깅 출력문을 두었습니다. 몇개의 오류를 잡았지만 생각 못한게 있었네요.. 바로바로바로 memento에 들어가는 것들이 모두 referrence 타입이라는 것입니다.ㅋ 메멘토를 만들때 저장할 것들이 reference 타입이므로 그대로 대입하면 ( var = imRefType; ) memento가 저장되는 것이 아니라 포인터만 늘어가게..
2009.10.27
no image
UndoRedo를 구현 하고 있습니다.
UndoRedo를 구현하기 위해서 Memento 패턴을 사용하고 있습니다. Command패턴과 섞어서 쓰는 것이 맞는지 모르겠지만 일단 Memento만 이용하고 있습니다. UndoRedo했을때 대상이 되는 상태를 심볼매니저에 있는 멤버변수들로 했습니다. 심볼매니저의 멤버변수에는 현재 캔버스에 그려진 심볼들, 사용자가 선택한 심볼들, 라인을 가질 후보 Figure 이 있습니다. DSymbolManager가 Originator가 되고, DMemento가 memento가 됩니다. reodo undo를 하기 위해서 memento를 많이 갖고 있어야 하므로, 그것을 관리하는 UndoRedoManager를 만 들어 관리하도록 하였습니다. 클라이언트에 해당하는 painter클래스에 DSymbolManager와 Und..
2009.10.25
typesafe enumeration 기반의 클래스를 하나 더 만들었습니다.
기존의 타입 안전 열거형 클래스는 각 심볼의 타입을 나타내기 위해서 만들었습니다. 각 심볼의 순서가 필요하지 않기 때문에 클래스에 타입정보만 들어 있었습니다. 이번에 만든 타입 안전 열거형 클래스는 심볼을 클릭하면 리사이즈 박스가 나오는데, 이때 8개의 리사이즈 박스를 나타내야 합니다. (LEFT, RIGHT, UP, DOWN, LEFTUP, LEFTDOWN, RIGHTUP, RIGHTDOWN) 8개의 리사이즈 박스 자체만으로는 순서가 필요없지만, 마우스가 어떤 리사이즈 박스를 클릭했는지 알려면 루프를 돌면서 확인을 해야 하고 그때의 딱 걸릴때의 루프 변수번째가 해당 박스라고 구현 되어 있으므로 순서를 정해 주어야 했습니다. 다음은 기존의 리사이즈 박스에 대한 Named constant을 쓰고 있는 코드..
2009.10.23