2012-10-19 30 views
-1

我編寫了一個Eclipse插件,它允許用戶比較兩個項目之間的SLOC計數。只需突出顯示Project Explorer View中的兩個項目,右鍵單擊並選擇插件(通過上下文菜單啓動插件)即可啓動插件。無論ProjectA和ProjectB被選中的順序如何,插件始終將ProjectA與ProjectB進行比較。我想使用選擇順序來確定用戶是否將ProjectA與ProjectB或ProjectB與ProjectA進行比較。從IStructuredSelection獲取選擇順序

鑑於IStructuredSelection,我該如何判斷哪個項目首先被選中?

順便說一句 - 這似乎getFirstElement()不給你在列表中選擇的第一要素,只是第一個元素(同樣,不一定是第一個元素[項目在這種情況下]選擇)

+0

我真的不認爲這是可能的。 'IStructuredSelection'不「知道」項目的選擇順序,只有當前選擇的項目。 – Baz

+0

巴茲 - 有無論如何得到它被選中的訂單?我可以從'ExecutionEvent'中取出它,或者使用'HandlerUtil'來獲取它嗎? – user1759789

+0

我不知道任何方法。檢查Javadoc。難道你不能只使用右鍵單擊的項目作爲第一個項目嗎? – Baz

回答

0

你無法從IStructuredSelection獲得選擇的順序,但還有另一種選擇。對於菜單/彈出操作,您可以通過選擇selectionChanged(IAction操作,ISelection選擇)方法來獲取當前選擇。只要選擇更改,就會調用此方法。通常情況下,你拋出最後一個選擇並保留新的IStructuredSelection,但是如果你將之前的IStructuredSelection與傳遞給你的IStructuredSelection進行比較,你會看到自上次選擇操作以來添加和刪除的內容。通過跟蹤這些隨時間推移的變化,您應該能夠知道選擇的順序。

+0

克里斯 - 感謝您的提示。不幸的是,'selectionChanged()'方法只有在我已經選擇了第二個項目並啓動了插件運行後才進入。難道我做錯了什麼? – user1759789

+0

你可以在那裏放置一個斷點來確認嗎?在進行第一次選擇時也應調用它,除非使用拖動來同時選擇兩者。 –

+0

是的,我用斷點來確認。我認爲這是因爲我的插件公共類實現了'IObjectActionDelegate',因此'selectionChanged'只檢測關於插件而不是項目的更改(所以當我點擊插件運行它時,就會看到「選擇更改「但是當我點擊該項目時)。 。 。 – user1759789

0

你根本不應該根據選擇事件的順序來做這件事。作爲用戶,我會非常生氣,如果我不僅需要選擇2個項目,而且必須按照正確的順序點擊它們才能獲得我想要的結果。

相反,將按鈕或其他UI元素放入結果視圖中以「切換比較順序」。這對用戶來說更容易理解和記憶。

+0

感謝@Banaeweizen的建議,但是這個插件是針對非常小的用戶團隊,他們非常專門地指導如何使用它。 – user1759789