2011-08-03 5 views
8

Tôi đang tạo một trình cắm thêm cho Eclipse và tôi muốn tận dụng hành động 'Hoàn tác' của Eclipse được tích hợp sẵn (org.eclipse.core.commands.operations) bất cứ khi nào người dùng nhấn nút hoàn tác được kết hợp với trình cắm thêm .Làm cách nào để tôi viết một hoạt động hoàn tác trong một trình cắm thêm Eclipse?

Lý tưởng nhất, nó sẽ tái tạo lại những gì xảy ra khi bạn nhấn CTRL + Z, nhưng tôi đã không nhận được mô phỏng bấm phím hoạt động.

Tôi đã thử những đoạn mã:

Undo thực hiện trong một bàn làm việc:

IWorkbenchOperationSupport operationSupport = PlatformUI.getWorkbench().getOperationSupport(); 
IUndoContext context = operationSupport.getUndoContext(); 
IOperationHistory operationHistory = operationSupport.getOperationHistory();  
IStatus status = operationHistory.undo(context, null, null); 

Undo thực hiện trong một không gian làm việc:

IWorkbenchOperationSupport operationSupport = PlatformUI.getWorkbench().getOperationSupport(); 
IUndoContext context= (IUndoContext)ResourcesPlugin.getWorkspace().getAdapter(IUndoContext.class); 
IOperationHistory operationHistory = operationSupport.getOperationHistory(); 
IStatus status = operationHistory.undo(context, null, null); 

Những gì tôi sau đó tìm kiếm, Tương tự , là thế này, nhưng nó không hoạt động:

Hoàn tác được thực hiện trên trình chỉnh sửa/tài liệu:

IWorkbenchOperationSupport operationSupport = PlatformUI.getWorkbench().getOperationSupport(); 
IEditorPart currentEditor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); 
IUndoContext context = (IUndoContext) currentEditor.getAdapter(IUndoContext.class); 
IOperationHistory operationHistory = operationSupport.getOperationHistory(); 
IStatus status = operationHistory.undo(context, null, null); 
+1

Tôi cũng đang làm việc về vấn đề này. Tôi đã tìm thấy tính năng ví dụ này (org.eclipse.sdk.examples.feature) bằng cách sử dụng trang web cập nhật này (http://download.eclipse.org/eclipse/updates/4.2), và nó có một triển khai tốt đẹp làm việc tốt. Tôi chỉ cần tìm hiểu làm thế nào để có được một phần khung nhìn của tôi để tham gia vào IUndoContext để các hành động hoàn tác và làm lại hiển thị trong các mục trình đơn Hoàn tác và Làm lại Eclipse. Điều kỳ lạ là các tác vụ hoàn tác làm lại của tôi chỉ hoạt động tốt khi phần xem mẫu đang hoạt động và không hoạt động khi phần xem của tôi hoạt động. Tôi đoán tôi chưa hiểu đầy đủ về IUndoContext. – twindham

+0

Khi cố gắng cài đặt các ví dụ về Eclipse SDK bằng cách sử dụng hộp thoại Cài đặt Phần mềm Mới, hãy sử dụng hộp bộ lọc và nhập 'Ví dụ' nhưng chắc chắn bỏ chọn các Hạng mục theo Hạng mục hoặc bạn sẽ không thấy kết quả. – twindham

+0

Để phương pháp này hoạt động, bạn nên thực hiện tất cả các thay đổi trong trình soạn thảo của mình bằng cách thêm các lệnh không thể hoàn tác vào ngăn xếp hoạt động. – Basilevs

Trả lời

0

Tôi không chắc chắn nếu tôi hiểu bạn một cách chính xác, nhưng tôi nghĩ rằng đây có thể là một cái gì đó cho bạn: http://www.eclipsezone.com/eclipse/forums/t80577.html#92048329

Nó là một chút lỗi thời nhưng ý tưởng vẫn không phải là xấu.

+0

Tôi thực sự thích sử dụng gói dựng sẵn của Eclipse (org.eclipse.core.commands.operations). Tôi đã đọc rất nhiều, nhiều ví dụ trực tuyến tuyên bố gói này là lý tưởng để thực hiện chức năng này. Tôi đã thêm thành công một lớp thực hiện IUndoableOperation và có thể thực thi() các hành động, tuy nhiên tôi dường như không thể thực hiện công việc undo() ...? – blearn

1

Nếu trình chỉnh sửa của bạn có người xem trên đó (ví dụ: TextViewer, SourceViewer, ProjectionViewer), thì bạn có thể thêm hành động hoàn tác gọi thao tác hoàn tác trên trình xem, ví dụ:

Action undoAction = new Action() 
{ 
    @Override 
    public void run() 
    { 
    getViewer().doOperation(ITextOperationTarget.UNDO); 
    } 
};