2011-05-05 8 views
11

मैं ग्रहण फ़ाइल को ओवरराइड करने की कोशिश कर रहा हूं> कुछ कार्यक्षमता जोड़ने के लिए मेनू क्रिया सहेजें। मैं निम्नलिखित बातेंएक्लिप्स फ़ाइल ओवरराइड करें> एक्शन

की कोशिश की है

क) किसी नए कार्य बनाएँ और वैश्विक कार्रवाई हैंडलर

actionBars.setGlobalActionHandler(ActionFactory.SAVE.getId(), mySaveAction); actionRegistry.registerAction(action);

ख) एक नया हैंडलर बनाने के लिए जोड़ सकते हैं और ओवरराइड आदेश को बचाने

<extension point="org.eclipse.ui.handlers"> 
<handler commandId="org.eclipse.ui.file.save" 
    class="com.diagrams.ui.SaveFileHandler"> 
<enabledWhen> 
    <with variable="activePartId"> 
    <equals 
    value="com.diagrams.editors.MultiPageEditor" /> 
    </with> 
</enabledWhen> 
<activeWhen> 
    <with variable="activePartId"> 
    <equals 
    value="com.diagrams.editors.MultiPageEditor" /> 
    </with> 
</activeWhen> 
</handler> 
</extension> 

इन दोनों दृष्टिकोणों के साथ मैं कीबोर्ड Ctrl + S कार्यक्षमता को ओवरराइड करने में सक्षम हूं लेकिन "फ़ाइल> सहेजें" मेनू अलग-अलग काम करता प्रतीत होता है।

वास्तव में किसी भी मदद, धन्यवाद

उत्तर

5

एक आरसीपी आवेदन में, आप अपने ActionBarAdvisor में सेव एक्शन में योगदान दे सकते हैं। यह कार्रवाई को भी पंजीकृत करता है ताकि यह सेव कमांड से उपलब्ध हो।

लेकिन ग्रहण आईडीई में एक प्लगइन के रूप में, आईडीई एक्शनबार एडवाइज़र प्रदान करता है और फ़ाइल मेनू में सहेजें कार्रवाई को हुक करता है। क्योंकि यह तकनीकी रूप से एक कमांड नहीं है (क्रियाएं एक SWT.Selection श्रोता के ऊपर एक कदम हैं) यही कारण है कि आप फ़ाइल> सहेजें कार्रवाई को ओवरराइड नहीं कर सकते हैं।

हालांकि, प्रत्येक भाग अपना स्वयं का बचत कार्यान्वयन प्रदान करता है, ताकि आप जो भी चाहें अपने मल्टीपेज एडिटर में कर सकें।

दूसरा विकल्प org.eclipse.ui.commands.ICommandService.addExecutionListener(IExecutionListener) का उपयोग करना है और एक IExecutionListener (या IEL2) जोड़ें। यह सेव कमांड के लिए सुन सकता है, आईडी org.eclipse.ui.IWorkbenchCommandConstants में घोषित की गई है।

+0

स्पष्टीकरण पॉल के लिए धन्यवाद। क्वेरी के लिए मेरा मुख्य उद्देश्य यह था कि फ़ाइल को सहेजने के लिए मुझे सहेजने की आवश्यकता को अलग करना होगा और फ़ाइल बंद होने के कारण बुलाया जाना चाहिए। मैं अब अपने काम को पूरा करने में सक्षम हूं क्यों संपादक में ऑनसेव और isSaveNeededOnClose विधियों को ओवरराइड करना है। लेकिन यदि भविष्य में आवश्यक हो तो मैं श्रोता दृष्टिकोण को ध्यान में रखूंगा। –

+0

क्या यह अभी भी सच है? यह मेरे लिए बिल्कुल काम नहीं करता है (इंडिगो पर) :( – snim2

+0

हां, यह इंडिगो पर काम करता है (हालांकि वर्तमान में जूनो में नहीं, यह आ रहा है) –

0

यह activePartId अलग है जब मुख्य मेनू एक कीस्ट्रोक बनाम चयन किया जाता है किया जा रहा है या राइट-क्लिक मेनू का उपयोग कर के साथ कुछ हो सकता है की सराहना करते हैं। क्या आपने अन्य विस्तार बिंदुओं को देखा है?

+0

जो मैंने पाया है सक्रियपार्ट आईडी समान होना चाहिए। इसके अलावा मेरे पास अन्य क्रियाएं हैं (जो मैंने बनाई हैं) जो एक ही सक्रियपार्ट आईडी के लिए फ़ाइल मेनू में दिखाई देती हैं। मैंने कमांड और हैंडलर एक्सटेंशन पॉइंट्स को देखा और यह जाने का सही तरीका था। क्या कोई और विस्तार बिंदु है जिसका उपयोग करना चाहिए? –

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