2011-10-05 22 views
7

Giả sử tôi đã xác định TextEditorX extends TextEditor của riêng mình. Trong kịch bản Eclipse RCP điển hình (plug-in tiêu chuẩn, bàn làm việc với Project Explorer/Navigator) hành vi khi ai đó cố gắng để đổi tên (thông qua Project Explorer hoặc Navigator) một tập tin mà một số biên tập viên đã mở là:Làm thế nào để một EditorPart bẩn cấm Eclipse đổi tên tài nguyên của nó?

  • Nếu trình chỉnh sửa không phải là dirty, cho phép đổi tên. Sau đó, editor.setInput() sẽ được gọi, với tên tệp mới làm đối số.

  • Nếu đó là dirty, một lỗi được ném ("Đổi tên tài nguyên": "xảy ra một lỗi nghiêm trọng trong khi thực hiện sắp xếp" "Tìm thấy vấn đề: doc.txt là chưa được lưu").

Câu hỏi của tôi:

  • Tại đó mức được hành vi này được xác định? Tôi đoán rằng gói org.eclipse.ltk.ui.refactoring.resource có liên quan ... Nhưng, giả sử rằng tôi muốn không cho phép đổi tên ngay cả khi trình chỉnh sửa không bị bẩn: hành vi này có thể được xác định bởi một số phương pháp trong trình chỉnh sửa (hoặc nhà cung cấp tài liệu) hay sao tôi nên mã/mở rộng một số RenameParticipant?

  • Làm cách nào để trình kết nối lại biết tài nguyên doc.txt được mở bởi phiên bản trình chỉnh sửa đó? Liệu nó có kiểm tra tất cả các biên tập viên đã mở và yêu cầu mỗi người cho editorInput, hoặc là documentProviders có liên quan không? Cụ thể, giả sử tôi có một trình soạn thảo cụ thể, ngoài tệp "chính", phụ thuộc vào các tài nguyên khác (đầu vào nhiều tệp) và muốn người đổi tên hỏi anh trước khi đổi tên bất kỳ đầu vào nào của anh ta. Làm thế nào bạn sẽ tiếp cận kịch bản này?

+0

Không có mã nguồn ở đây, vì vậy khó có thể xem các lớp nào có liên quan đến đâu, nhưng đối với câu hỏi đầu tiên của bạn, bạn có xem xét đơn giản là ghi đè 'isDirty()' để trả về 'true' trong trình soạn thảo của bạn không? Bạn vẫn có thể sử dụng 'super.isDirty()' nếu bạn cần tìm hiểu xem nó có thực sự thay đổi không ... –

+0

Sẽ không có tác dụng phụ nào là dấu hoa thị "điều này bẩn" trên tab của phần trình soạn thảo sẽ Đừng rời xa? Điều này có thể khiến người dùng gãi đầu. – stracka

Trả lời

0

Không có lý do lý thuyết nào để Eclipse ngăn chặn việc đổi tên tệp đã sửa đổi. Đối với một, trình soạn thảo có thể đăng ký ResourceChangeListener với không gian làm việc và chỉ cần cập nhật IEditorInput của nó để đáp ứng với thông báo MOVE. Không chắc chắn nếu đó là một câu trả lời hay nhưng có thể là một cách tiếp cận tốt để đi.

Các vấn đề liên quan