2011-08-03 8 views
8

मैं ग्रहण के लिए एक प्लग-इन बना रही हूँ और मैं निर्मित ग्रहण 'पूर्ववत करें' एक्शन (org.eclipse.core.commands.operations) का लाभ उठाने के जब भी कोई उपयोगकर्ता प्लग-इन के साथ जुड़े वापस लाएं बटन दबाता चाहते ।मैं एक्लिप्स प्लग-इन में पूर्ववत ऑपरेशन कैसे स्क्रिप्ट कर सकता हूं?

आदर्श रूप में, यह सिर्फ पुन: पेश हैं क्या होता है जब आप Ctrl + Z भी दबा है, लेकिन मैं अनुकरण काम कर keypresses नहीं मिला।

मैं इन कोड के टुकड़े की कोशिश की है:

पूर्ववत एक कार्यक्षेत्र में प्रदर्शन:

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

पूर्ववत एक कार्यक्षेत्र में प्रदर्शन:

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

क्या मैं तो के लिए, तुलनात्मक रूप से देख रहा हूँ , यह है, लेकिन यह काम नहीं करता है:

संपादक/दस्तावेज़ पर पूर्ववत प्रदर्शन:

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

मैं भी इस मुद्दे पर काम कर रहा हूँ। मुझे इस अद्यतन साइट (http://download.eclipse.org/eclipse/updates/4.2) का उपयोग करके इस उदाहरण सुविधा (org.eclipse.sdk.examples.feature) मिली है, और इसमें एक अच्छा कार्यान्वयन ठीक काम कर रहा है। मुझे बस यह पता लगाने की आवश्यकता है कि IUndoContext में भाग लेने के लिए मेरा दृश्य भाग कैसे प्राप्त करें ताकि पूर्ववत और फिर से क्रियाएं ग्रहण पूर्ववत करें और फिर से मेनू आइटम में दिखाई दें। अजीब चीज यह है कि मेरे पूर्ववत क्रियाएं केवल तभी ठीक होती हैं जब नमूना दृश्य भाग सक्रिय होता है, और जब मेरा दृश्य भाग सक्रिय नहीं होता है। मुझे लगता है कि मैं अभी तक IUndoContext को पूरी तरह समझ नहीं पा रहा हूं। – twindham

+0

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

+0

काम करने के लिए इस दृष्टिकोण के लिए आपको ऑपरेशन स्टैक में अवांछित आदेश जोड़ कर अपने संपादक में सभी परिवर्तन करना चाहिए। – Basilevs

उत्तर

0

मुझे यकीन है कि अगर मैं आप सही तरीके से समझा नहीं गया हूँ, लेकिन मैं यह आपके लिए कुछ हो सकता है लगता है: http://www.eclipsezone.com/eclipse/forums/t80577.html#92048329

यह थोड़ा पुराना है लेकिन यह विचार अभी भी बुरा नहीं है।

+0

मैं वास्तव में ग्रहण के अंतर्निहित पैकेज (org.eclipse.core.commands.operations) का उपयोग करना पसंद करूंगा। मैंने ऑनलाइन कई उदाहरण पढ़े हैं जो दावा करते हैं कि यह पैकेज इस कार्यक्षमता को लागू करने के लिए आदर्श है। मैं सफलतापूर्वक एक वर्ग जो IUndoableOperation लागू करता है और() कार्यों को निष्पादित करने में सक्षम हूँ जोड़ लिया है, फिर भी मैं पूर्ववत() काम करने के लिए प्रतीत नहीं कर सकते हैं ...? – blearn

1

यदि आपके संपादक के पास दर्शक (उदा। टेक्स्ट व्यूअर, सोर्स व्यूअर, प्रोजेक्शन व्यूअर) है, तो आप एक पूर्ववत क्रिया जोड़ सकते हैं जो दर्शक पर पूर्ववत ऑपरेशन को कॉल करता है, उदा।

Action undoAction = new Action() 
{ 
    @Override 
    public void run() 
    { 
    getViewer().doOperation(ITextOperationTarget.UNDO); 
    } 
}; 
संबंधित मुद्दे