wxPythonDemo.plug in.py :  » IDE » Boa-Constructor » boa-constructor-0.6.1 » Plug-ins » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » IDE » Boa Constructor 
Boa Constructor » boa constructor 0.6.1 » Plug ins » wxPythonDemo.plug-in.py
import string, os, sys

import wx
from wx.lib.anchors import LayoutAnchors

import Preferences, Utils, Plugins
from Utils import _

from Explorers import ExplorerNodes,FileExplorer
from Models import EditorModels,EditorHelper,Controllers
from Views import EditorViews

# Register plug-in preference
Plugins.registerPreference('wxPythonDemo', 'wpWxPythonDemoFolder', "''", 
                           ['Path to the wxPython demo folder.', 
                            'If empty, wxPython/demo is used.'], 'type: dirpath')
Plugins.registerPreference('wxPythonDemo', 'wpShowWxPythonDemoTemplate', 'False', 
                           ['Should a template for an empty wxPython demo file', 
                            'be available on the Palette.'])


if Preferences.wpWxPythonDemoFolder:
    demoDir = Preferences.wpWxPythonDemoFolder
else:
    demoDir = os.path.join(os.path.dirname(wx.__file__), 'demo')

if not os.path.exists(demoDir):
    raise Plugins.SkipPlugin(_('wxPython demo directory not found.\n'
          'Please define the path under Preferences->Plug-ins'))

true = 1
false = 0

def importFromWxPyDemo(name):
    cwd = os.getcwd()
    sys.path.insert(0, demoDir)
    try:
        os.chdir(demoDir)
        try:
            return __import__(name, globals())
        finally:
            os.chdir(cwd)
            del sys.path[0]
    except Exception, err:
        print str(err)
        return None
        

def getWxPyDemoTree():
    Main = importFromWxPyDemo('Main')
    if Main:
        return Main._treeList
    else:
        return []


EditorHelper.imgWxPythonDemo = EditorHelper.addPluginImgs('Images/wxPythonDemo.png')


class SkipViewSignal(Exception):
    """ Raised when the demo is not docked """

class wxPythonDemoView(wx.Panel, EditorViews.EditorView, EditorViews.CloseableViewMix):
    viewName = tabName = 'Demo'
    viewTitle = _('Demo')
    
    def __init__(self, parent, model):
        wx.Panel.__init__(self, parent, -1)
        EditorViews.CloseableViewMix.__init__(self)
        EditorViews.EditorView.__init__(self, model, actions=self.closingActionItems)
        
        self.demoCtrl = None
        self.updateDemoCtrl()
        
        if self.demoCtrl is None:
            raise SkipViewSignal
        
    def updateDemoCtrl(self):
        demoModule = self.model.demoModule
        if demoModule:
            if self.demoCtrl:
                self.demoCtrl.Destroy()
    
            cwd = os.getcwd()
            os.chdir(demoDir)
            try:
                self.demoCtrl = demoModule.runTest(self.model.editor, self, self)
            finally:
                os.chdir(cwd)
                
            if self.demoCtrl:
                self.demoCtrl.SetSize(self.GetClientSize())
                self.SetAutoLayout(True)
                self.demoCtrl.SetConstraints(LayoutAnchors(self.demoCtrl, 
                                             True, True, True, True))
    
    def refreshCtrl(self):
        pass
    
    def WriteText(self, text):
        """ When View used as demo log """
        if not self.model: return
        
        ef = self.model.editor.erroutFrm
        ef.appendToOutput(text)
        ef.display()

    def write(self, text):
        """ When View used as demo log """
        self.WriteText(text)

class wxPythonDemoOverView(EditorViews.HTMLView, EditorViews.CloseableViewMix):
    viewName = tabName = 'Overview'
    viewTitle = _('Overview')

    def __init__(self, parent, model):
        EditorViews.CloseableViewMix.__init__(self)
        EditorViews.HTMLView.__init__(self, parent, model, actions=self.closingActionItems)
        
        self.refreshCtrl()
    
    def generatePage(self):
        if self.model.demoModule:
            return self.model.demoModule.overview
        else:
            return _('No module imported')


class wxPythonDemoNode(FileExplorer.FileSysNode):
    def open(self, editor):
        model, cntrl = editor.openOrGotoModule(self.resourcepath)
 
        if not hasattr(model, 'demoModule'):
            name = os.path.splitext(os.path.basename(model.filename))[0]
            model.demoModule = importFromWxPyDemo(name)
       
        if model.demoModule and (model, cntrl) != (None, None): 
            for View, focus in ((wxPythonDemoOverView, False), 
                                (wxPythonDemoView, True)):
                if model.views.has_key(View.viewName):
                    view = model.views[View.viewName]
                    view.updateDemoCtrl()
                else:
                    modPge = editor.getActiveModulePage()
                    try:
                        view = modPge.addView(View)
                    except SkipViewSignal:
                        view = None
                        
                if focus and view:
                    view.focus()

        return model, cntrl
    
class wxPythonDemoSectionNode(ExplorerNodes.ExplorerNode):
    protocol = 'wxpydemo.section'
    def __init__(self, name, items, clipboard, bookmarks):
        ExplorerNodes.ExplorerNode.__init__(self, name, '', clipboard, 
              EditorHelper.imgFolder)
        self.bookmarks = bookmarks
        self.vetoSort = true
        self.items = items

    def isFolderish(self):
        return true

    def createChildNode(self, name):
        mod = importFromWxPyDemo(name)
        if mod is None:
            return None
        else:
            demoFile = os.path.splitext(mod.__file__)[0]+'.py'
            imgIdx = Controllers.identifyFile(demoFile)[0].imgIdx
            return wxPythonDemoNode(name, demoFile, self.clipboard, imgIdx, 
                                    self, self.bookmarks)

    def openList(self):
        return [n for n in [self.createChildNode(name) for name in self.items] if n]
    

class wxPythonDemoDirNode(ExplorerNodes.ExplorerNode):
    protocol = 'wxpydemo'
    def __init__(self, clipboard, parent, bookmarks):
        ExplorerNodes.ExplorerNode.__init__(self, _('wxPython demo'), '', 
              clipboard, EditorHelper.imgWxPythonDemo)
        self.bookmarks = bookmarks
        self.bold = true
        self.vetoSort = true
        self.treeList = getWxPyDemoTree()
        
    def isFolderish(self):
        return true

    def createChildNode(self, section, items):
        return wxPythonDemoSectionNode(section, items, self.clipboard,
              self.bookmarks)

    def openList(self):
        return [self.createChildNode(name, items) 
                for name, items in self.treeList]


#-------------------------------------------------------------------------------
ExplorerNodes.register(wxPythonDemoDirNode, root=True)

#-------------------------------------------------------------------------------

import PaletteStore
from Models import PythonEditorModels,PythonControllers

class wxPythonDemoModuleModel(PythonEditorModels.ModuleModel):
    modelIdentifier = 'wxPythonDemoModule'
    defaultName = 'wxpythondemomodule'
    
    def getDefaultData(self):
        return '''import wx
    
#-------------------------------------------------------------------------------

# Define your demo class here and save this module in the wxPython demo folder

#-------------------------------------------------------------------------------

def runTest(frame, nb, log):
    win = wx.Panel(nb, -1) # Replace with your demo class 
    return win

#-------------------------------------------------------------------------------

overview = """<html><body>
<h2>Demo Name</h2>
<p>
</body></html>
"""
  
if __name__ == '__main__':
    import sys,os
    import run
    run.main(['', os.path.basename(sys.argv[0])])
'''

class wxPythonDemoModuleController(PythonControllers.ModuleController):
    Model = wxPythonDemoModuleModel

#-------------------------------------------------------------------------------

if Preferences.wpShowWxPythonDemoTemplate:
    Plugins.registerFileType(wxPythonDemoModuleController)

#-------------------------------------------------------------------------------

def getwxPythonDemoData():
    return \
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
\x00\x00\x97IDATx\x9c\xc5\x93\xdd\r\xc20\x0c\x84\xbf\xa2\x0e\xc2\x08\x8cp\
\x9b0J\x9c\x8d\x18\xc1l\xc0\x08\xdd$<$\xa4\x91h\xf8i\x8b\xb8\x97\x9c\xad\xf3\
I\xce%\x83 \x89\x0c\x07d\xc6\xa7pwF\x01\xa1i\x86\x10:\xf2e\x1c\xbeR\xff\xc2`\
t\t$ \xefD\x8co\x87\xcc\x1c\x10\xe0`f\xe9\x81\x96\xbf\x02X\x82|n_a\xcd\x90\
\xe4H%\xc6u\x06\xaaq\xff?\xc6\xfd/1\xc6aQh\x17\xe0T\xf8\xd1\xfa\x06\xbd\xaf`\
\x13p.\xc5u\xee\xef\xf0\x94\xddk\xd1\xf2\'\xdcf\xea\x93W\xfd\x1d\xbf|\\\xe5\
\xbf>Ca\x00\x00\x00\x00IEND\xaeB`\x82' 

def getwxPythonDemoModuleData():
    return \
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x18\x00\x00\x00\x18\x08\x06\
\x00\x00\x00\xe0w=\xf8\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\
\x00\xcaIDATx\x9c\xed\x95\xcd\r\xc20\x0cF_\x11\x03\xf8\xc8\x00\xdc1\x13\xe0\
\x8e\xc4\x06\xdd\xa03t\x036\x08\xdc9d\x84\x1c9\xb2A\xb8\xf0\xd3\x96V\xa9h%\
\x04\xea\x93"EN\xec/\x92\xbf$\x99@T\x9ax@\xcd\x18\x8b\xf7\x1e\x0cbl\r\x838\
\x05f\x16\x17\xa3\x8f\x99`\x16H\x92\x89HTm\xfa\xc8{O;6\x84\x10\x02!\x08 \x8f\
J`f\x9d\xdd\xff\x84\xa2("\xb8\x9a!\xff\xc1E\xcb\xe9KV\xc0\xe9>\x0f\xd3\x0b\
\x94\xe5\xe6i\x90\xfd\xfe0\xbd\x80\xaab\xf7wLD\xfe\xe0\xa2\xcd\x02Iz]\x94\
\xe7Y2\xf9x\x06\xd6\xb5\xc0\x05\xdc\xce\r\x13p\xaeo\xe5E\xb6\x05\xcaZ\xa0z\
\xdf\xf3\xfb=\xf8\xe6\x87sM&w5YW\x8a\x88<\xeb\xdc\x00I\xef\xca-\xb2\x8f\xf3\
\xee\x00\x00\x00\x00IEND\xaeB`\x82' 

Preferences.IS.registerImage('Images/wxPythonDemo.png', getwxPythonDemoData())
Preferences.IS.registerImage('Images/Palette/wxPythonDemoModule.png', getwxPythonDemoModuleData())
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.