2016-01-04 8 views
40

मैंने एक साधारण wxAuiManager प्रणाली स्थापित की है जिसमें आठ टेक्स्ट नियंत्रण हैं, प्रत्येक एक फलक के रूप में स्थापित है, सभी केंद्रीय स्थिर नियंत्रण के आसपास व्यवस्थित हैं। मेरे पास दो शीर्ष, बाएं, दाएं और नीचे फलक दिशाओं पर स्नैप किए गए हैं। यह हिस्सा ठीक काम करता है।wxAuiManager पैन को WxPHP में अपनी गुणों को अपडेट करते समय रीफ्रेश कैसे करें?

अब मैं प्रत्येक फलक के गुणों को संशोधित करना चाहता हूं, जो मुझे लगता है कि संबंधित wxAuiPaneInfo को रीसेट करके किया जा सकता है। उदाहरण के लिए, मैं पिन को जोड़ना/निकालना चाहता हूं या अधिकतम आइकन जोड़ना चाहता हूं। मैं इसे अपने आप में काम करने के लिए प्राप्त कर सकता हूं, लेकिन इन गुणों को रीसेट करने के बाद प्रबंधित विंडो को फिर से निकालना एक चुनौती का थोड़ा सा साबित हो रहा है।

// Get the currently selected pane 
    $paneIndex = $this->getSelectedPaneIndex(); 
    /* @var $paneInfo wxAuiPaneInfo */ 
    $paneInfo = $this->getPaneInfoByIndex($paneIndex); 

    // Set new flag true/false on paneinfo, using setter methods 
    /* @var $ctrl wxCheckBox */ 
    $ctrl = wxDynamicCast($event->GetEventObject(), "wxCheckBox"); 
    $methods = $this->getPaneSetterMethods(); 
    $method = $methods[$ctrl->GetName()]; 
    $paneInfo->$method($ctrl->GetValue()); 

    /* @var $window \wxTextCtrl */ 
    /* @var $manager \wxAuiManager */ 
    $window = $this->getManagedWindow()->getWindowByIndex($paneIndex); 
    $manager = $this->getManagedWindow()->getAuiManager(); 

    // This sort of works, but the pane sometimes ends up being moved 
    $manager->DetachPane($window); 
    $manager->AddPane($window, $paneInfo); 

    // Now redraw the panes 
    $this->getManagedWindow()->getAuiManager()->Update(); 

आप देख सकते हैं, मैं क्या वर्तमान में कर प्रबंधक से फलक अलग करने है, यह फिर से जोड़ना है, तो पुनः बनाने का प्रबंधक मजबूर:

यहाँ कोड मैं वर्तमान में उपयोग कर रहा हूँ है सब कुछ। यह ठीक है, सिवाय इसके कि यह अक्सर खिड़की को एक नई स्थिति में हटा देता है। यह "सही महसूस नहीं करता" - इन गुणों को संशोधित करना फलक को अलग करने के लिए स्वतंत्र रूप से प्राप्त किया जाना चाहिए।

इस के बजाय मैंने सोचा कि यह, छिपाने के लिए और फलक को दिखाने के लिए कोशिश कर रहा लायक होगा कोई लाभ नहीं हुआ:

// This does not work at all 
    $paneInfo->Hide(); 
    $paneInfo->Show(); 

इसके अलावा, मैं फलक लोडर का उपयोग कर की कोशिश की है, हालांकि मैं क्या एक पता नहीं है "परिप्रेक्ष्य स्ट्रिंग" है - जहां तक ​​मैं कह सकता हूं कि यह एक नियंत्रण संपत्ति नहीं है।

// The string should be a "perspective string" 
    $this->getManagedWindow()->getAuiManager()->LoadPaneInfo('auiPane0', $paneInfo); 

तो, सारांश में: मैं एक काम कर समाधान है, लेकिन यह बाद से यह सवाल में फलक redocks, आदर्श नहीं है। मुझे लगता है कि मैं इसे एक ही स्थान पर फिर से खोलने के लिए सही कमांड का काम कर सकता हूं, लेकिन ऐसा लगता है कि मुझे इसे एक आसान फैशन में करने में सक्षम होना चाहिए।

कोई विचार?


अद्यतन: मुझे पता चला गया है कि कैसे फलक जानकारी पर कब्जा करने के दृष्टिकोण है, जो इस प्रकार किया जा सकता है का उपयोग करते हुए:

$this->winSave = []; 
for($i = 0; $i <= 7; $i++) 
{ 
    $pi = $this->getPaneInfoByIndex($i); 
    $persp = $this->getManagedWindow()->getAuiManager()->SavePaneInfo($pi); 
    echo $persp . "\n"; 
    $this->winSave[$i] = $persp; 
} 

सभी मैं अब क्या करने की जरूरत एक फलक चाल घटना पर कब्जा करने की है, और तो मैं इस डेटा का उपयोग LoadPaneInfo() के साथ कर सकता हूं। यह कुछ हद तक मुश्किल साबित हो रहा है - WxPHP ऐसा करने के लिए पर्याप्त wxEVT स्थिरांक प्रदान नहीं करता प्रतीत होता है। मेरे पास इस बारे में asked a new question है।

मैं कुछ नई चीजों को आजमा जारी रखूंगा।

+0

क्या आप इसे काम करने के लिए मिला? मेरे पास कुछ प्रोजेक्ट पर एक ही समस्या है ... – Gal

+1

@ गल, मैंने पोस्ट लिखने के बाद से कुछ भी नया नहीं किया है। मैं बल्कि विचारों से बाहर भाग गया, इसलिए मैं इसे अब सहन कर रहा हूं और उम्मीद करता हूं कि भविष्य में किसी ने इसे नोटिस किया है। क्या आप विशेष रूप से WxPHP का उपयोग कर रहे हैं, या WxWidgets किसी अन्य भाषा बाध्यकारी के साथ? – halfer

+1

मुझे उम्मीद है कि कोई इसे नोटिस करेगा और मदद करने में सक्षम होगा। मैं पाइथन बांध के साथ wxwidgets का उपयोग कर रहा हूँ। – Gal

उत्तर

-2

मैंने इसे पूरा करने से पहले इस कार्य को त्याग दिया। जैसा कि मुझे याद है, पैन रीफ्रेश करने का कोई आसान तरीका नहीं था, और वर्तमान रखरखाव ने परियोजना पर कुछ स्टर्लिंग काम किया है, लेकिन अब उनके पास काम करने का समय नहीं है और इस प्रकार यह कुछ हद तक त्याग दिया गया है। यह अजीब विश्वसनीयता बग, या संकलित PHP एक्सटेंशन बाइनरी को प्रमुख लिनक्स वितरण के आधिकारिक रिपो में प्राप्त करने की चुनौती के कारण हो सकता है।

मैं इस उत्तर को wxPHP के लिए संबंधित बग रिपोर्ट के साथ अद्यतन करने का प्रयास करूंगा, लेकिन समय के लिए उपयोगकर्ताओं के लिए यह संभव नहीं है कि वे इस समय के लिए "संभव नहीं" के रूप में मानें, क्योंकि मैंने बहुत कुछ किया है इसे हल करने की कोशिश में प्रयास। बेशक, अगर किसी को इस उद्देश्य को प्राप्त करने के लिए एक विश्वसनीय तरीका मिल जाता है, तो कृपया अपना जवाब जोड़ें और मैं इसे प्राथमिकता में चुनूंगा।

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