2011-04-08 14 views
8

मैं मेनू मेनू में 'दृश्यमान' अभिव्यक्ति का उपयोग कर संदर्भ मेनू में कमांड की दृश्यता कॉन्फ़िगर करने का प्रयास कर रहा हूं।दृश्यमान संदर्भ मेनू में दिखाई देने के लिए जब

  1. राइट-क्लिक करें (या पैकेज देखें) संसाधन ध्यान में रखते हुए कुछ फ़ाइल प्रकारों (संसाधन)
  2. राइट-क्लिक करें: मुझे क्या करना कोशिश कर रहा हूँ आदेश संदर्भ मेनू में दिखाई केवल यदि आप बनाना है उपयुक्त संपादक जिसमें फ़ाइल प्रकार खुला है। यह पता लगा सकता है कि मेरा संपादक खुला है या संपादक के पास एक निश्चित संसाधन खुला है।

मैं पहली बार उपयोग करते हुए 'visibleWhen'> 'चयन (साथ)' भी कार्य किया है> 'पुनरावृति'> 'org.eclipse.core.resources.IResource (अनुकूलन)' तो संसाधन के लिए फाइल एक्सटेंशन जाँच । कोड नीचे सूचीबद्ध है। हालांकि, मुझे यकीन नहीं है कि वही आदेश कैसे प्राप्त करें जब आप सही संपादक पर राइट-क्लिक करें जिसमें फ़ाइल को सही एक्सटेंशन के साथ खोलें - ext1, ext2।

जांच रहा है कि मेरा संपादक सक्रिय है या नहीं, लेकिन अगर मैं उन फ़ाइलों पर क्लिक करता हूं जो मेरे प्रकार नहीं हैं, तो यह अभी भी संदर्भ मेनू में कमांड दिखाएगा।

कोई सिफारिशें? "ग्रहण प्लग-इन (तृतीय संस्करण)" संपादक संदर्भ मेनू के लिए कुछ उदाहरण दिखाता है लेकिन यह क्रियाओं का उपयोग करता है और मैं आदेशों के साथ चिपकना चाहता हूं।

धन्यवाद !!


<menuContribution 
     allPopups="false" 
     locationURI="popup:org.eclipse.ui.popup.any?before=additions"> 
    <separator 
      name="com.test.ide.separator1" 
      visible="true"> 
    </separator> 
    <menu 
      icon="icons/sample.gif" 
      label="Test Menu"> 
     <command 
       commandId="com.test.commands.testCommand1" 
       icon="icons/sample.gif" 
       label="testCommand1" 
       style="push" 
       tooltip="This is a test command"> 
      <visibleWhen 
       checkEnabled="false"> 
       <with 
        variable="selection"> 
       <iterate 
         ifEmpty="false" 
         operator="or"> 
        <adapt 
          type="org.eclipse.core.resources.IResource"> 
         <or> 
          <test 
           property="org.eclipse.core.resources.extension" 
           value="ext1"> 
          </test> 
          <test 
           property="org.eclipse.core.resources.extension" 
           value="ext2"> 
          </test> 
         </or> 
        </adapt> 
       </iterate> 
       </with> 
      </visibleWhen> 
     </command> 
    </menu> 
    </menuContribution> 

उत्तर

1

मैं इसे with चर के साथ करने में सक्षम था जो मैं पार आया। ऊपर एक ही कोड उदाहरण का उपयोग:

  • नई <or> ब्लॉक
  • में
  • प्लेस मौजूदा <adapt> ब्लॉक <iterate> ब्लॉक के भीतर एक <or> ब्लॉक जोड़ें एक नया with चर कहा जोड़ें activeEditorInput

नया कोड उदाहरण यहां दिया गया है।

<iterate ifEmpty="false" operator="or"> 
    <or> 
    <adapt type="org.eclipse.core.resources.IResource"> 
     <or> 
     ...test extensions 
     </or> 
    </adapt> 
    <with variable="activeEditorInput"> 
     <adapt type="org.eclipse.core.resources.IResource"> 
     <or> 
      ...test extensions 
     </or> 
     </adapt> 
    </with> 
    </or> 
</iterate> 
+0

यह सही है, लेकिन मैं थोड़ा पुनर्गठन अनुकूलन का सुझाव दूंगा: –

1

आप अपनी खुद की PropertyTester को लागू कर सकते हैं।

+0

धन्यवाद। मैं कस्टम प्रॉपर्टीटेस्टर के साथ अभी तक परिचित नहीं हूं, या फिर भी प्लग-इन एपीआई में से अधिकतर हूं। मैं एक और "चर" चर में आया था जिसने मुझे यह करने में मदद की! – blissfool

+0

क्या आप एक उदाहरण डालना चाहते हैं ...? – Campa

9

@blissfool, मैं थोड़ा सा पुनर्गठन का सुझाव दूंगा। आप एक org.eclipse.core.expressions.definitions ब्लॉक में अपने बुनियादी परीक्षण (जो सही है) डाल सकते हैं:

<extension point="org.eclipse.core.expressions.definitions"> 
    <definition id="org.eclipse.example.testExtension"> 
     <adapt type="org.eclipse.core.resources.IResource"> 
     <or> 
      <test property="org.eclipse.core.resources.extension" 
        value="ext1"> 
      </test> 
      <test property="org.eclipse.core.resources.extension" 
        value="ext2"> 
      </test> 
     </or> 
     </adapt> 
    </definition> 
</extension> 

फिर अपने visibleWhen में activeEditorInput परीक्षण ऊपर ले जाने के शीर्ष करने के लिए:

<visibleWhen> 
    <or> 
     <with variable="selection"> 
     <iterate ifEmtpy="false"> 
      <reference definitionId="org.eclipse.example.testExtension"/> 
     </iterate> 
     </with> 
     <with variable="activeEditorInput"> 
     <reference definitionId="org.eclipse.example.testExtension"/> 
     </with> 
    </or> 
</visibleWhen> 
+0

आह। सही। उसके लिए धन्यवाद। मैंने org.eclipse.core.expressions.definitions के बारे में पढ़ा और इस बारे में सोचा कि मैं बार-बार स्थितियों को कैसे कम कर सकता हूं लेकिन दोनों को एक साथ नहीं रखा।मैं काम करने की कार्यक्षमता प्राप्त करने पर भी केंद्रित था। चीयर्स ~ :) – blissfool

संबंधित मुद्दे