2014-06-09 21 views
5

Eclipse 4 ứng dụng RCP hỗ trợ các cửa sổ trình chỉnh sửa nổi.Làm cách nào để ngăn các cửa sổ trình chỉnh sửa nổi trong nhật thực 4 ứng dụng RCP?

Sử dụng lớp tương thích, tôi đang chuyển một tập hợp các ứng dụng RCP từ Eclipse 3.8 sang Eclipse 4.4. Các ứng dụng này chưa được thiết kế cho trình chỉnh sửa nổi. Tôi muốn hoãn chi phí thiết kế lại cho đến sau này.

Các Eclipse enhancement request for floating editor windows, trong bình luận 40, đề cập đến mức độ cần thiết của chính sách kiểm soát cho các cửa sổ biên tập:

Trong e4 chúng tôi lý tưởng có thể 'host' những gì hiện đang là một trong hai biên tập viên hoặc một cái nhìn bất cứ nơi nào trong cách bố trí. Việc lựa chọn giới hạn vị trí của nó vào vùng biên tập phải được thực thi thông qua một số 'chính sách'. Lưu ý rằng nó không thực sự đơn giản, chủ yếu là do sự khác biệt ăn sâu trong cách Menu/TB được xử lý cho các biên tập viên (tức là bất kỳ nơi lưu trữ một trình soạn thảo sẽ yêu cầu một thanh công cụ 'chính' để lưu trữ các công cụ biên tập viên.

Câu hỏi:?

  • làm thế nào tôi có thể tắt khả năng nổi cửa sổ soạn thảo
  • tôi có thể làm điều đó trong một cách mà vẫn cho phép cửa sổ soạn thảo để được kéo giữa các cửa sổ bàn làm việc
  • ?
  • Ngoài ra, nếu chúng ta cho phép các cửa sổ trình chỉnh sửa nổi, có cách nào dễ dàng để làm cho một ActionBarAdvisor hiện có được sử dụng cho một trình soạn thảo mới bị bỏ, để thiết lập trình đơn và thanh công cụ của nó không?
+0

Nếu bạn để DndAddon ra khỏi mô hình ứng dụng thì bạn sẽ ngừng cửa sổ được kéo bất cứ nơi nào. –

+0

Tôi muốn giữ lại khả năng 3.x để kéo các khung nhìn ra khỏi cửa sổ bàn làm việc. –

+0

Bạn có thể thử: a) Tạo AddOn để nghe các cửa sổ nổi và luôn di chuyển phần trở lại vào ngăn xếp cũ của nó b) mở rộng/thao tác DndAddon để chặn các cửa sổ nổi –

Trả lời

2

Tôi có một giải pháp, nhưng nó không đẹp và có một vài điều khó hiểu.

Giải pháp này yêu cầu sao chép toàn bộ gói của Eclipse DnDAddon và thực hiện một thay đổi nhỏ trong DetachedDropAgent. (Sau khi bình luận ban đầu @ greg-449 và một số nghiên cứu ban đầu, tôi đã hy vọng để thay thế DndAddon với lớp của riêng tôi mà được cài đặt một lớp con của DnDManager. Tuy nhiên, DnDManager và các lớp học quan trọng khác là gói bảo vệ.)

ý tưởng làm việc này xuất phát từ Eric Moffat, hướng dẫn phát triển cho Eclipse e4, để đáp lại yêu cầu nâng cao của tôi Disabling floating editors. Ông liệt kê hai tùy chọn khác ở đó, một trong số đó tương tự như tùy chọn @ christoph.keimel a.

Dưới đây là một số chi tiết. Điều này làm việc với ít nhất là Eclipse 4.4.

Trước tiên, bạn cần tệp mô hình ứng dụng. Nếu bạn chưa có, hãy giải nén tệp LegacyIDE.e4xmi từ trình cắm thêm Eclipse org.eclipse.ui.workbench * .jar. Sao chép nó vào trình cắm của riêng bạn bằng một tên mới (trong ví dụ này, myApp.e4xmi). Sau đó, làm cho nó được sử dụng bằng cách thêm một thuộc tính applicationXMI vào phần mở rộng sản phẩm trong tệp plugin.xml của ứng dụng của bạn.

 
    <extension 
     id="product" 
     point="org.eclipse.core.runtime.products"> 
     <product 
      application="com.mycompany.myapp" 
      name="MyApplicationName"> 
     ... 
     <property 
       name="applicationXMI" 
       value="com.my.plugin/myApp.e4xmi"> 
     </property> 
     </product> 
    </extension> 

Tiếp theo, sao chép toàn bộ gói org.eclipse.e4.ui.workbench.addons.dndaddon từ các plug-in org.eclipse.e4.ui.workbench.addons.swt * .jar vào gói riêng bạn *.ui.workbench.addons.dndaddon.

Hậu tố của tên gói đó là quan trọng.Điều quan trọng là không thay đổi tên của lớp tiện ích DnDAddon. Nếu bạn thay đổi một trong hai, bạn sẽ thấy rằng các DnDAddOn tiêu chuẩn được thêm vào thêm một sửa đổi của bạn, nhờ org.eclipse.e4.ui.workbench.addons.swt.DnDProcessor, và các biên tập viên vẫn có thể được thả nổi.

Tiếp theo, trong myApp.e4xmi, sửa đổi dòng "DnD Addon" để trỏ tới phiên bản của bạn. PACKURI bao gồm tên của trình cắm chứa phiên bản của bạn của DnDAddon và đường dẫn lớp tới nó. Ví dụ:

< addons XMI: id = "_ bqcWME2EEd-DfN2vYY4Lew" elementId = "Chia sẽ Addon" contributionURI = "bundleclass: //com.one.of.my.plugins/com.mypackage.e4. ui.workbench.addons.dndaddon.DnDAddon "/ >

Cuối cùng, trong lớp DetachedDropAgent của bạn, thay đổi phương pháp canDrop() để không cho biên tập viên tương thích. (Tôi đã viết mã được thêm vào bên dưới.)

public class DetachedDropAgent extends DropAgent { 
... 
@Override 
public boolean canDrop(MUIElement dragElement, DnDInfo info) { 
    if (info.curElement != null) 
     return false; 

    // Add this code to disable floating of editors using the compatibility layer. 
    String elementId = dragElement.getElementId(); 
    if ("org.eclipse.e4.ui.compatibility.editor".equals(elementId)) { 
     return false; 
    } 

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