ListCompanions.py :  » IDE » Boa-Constructor » boa-constructor-0.6.1 » Companions » 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 » Companions » ListCompanions.py
#-----------------------------------------------------------------------------
# Name:        ListCompanions.py
# Purpose:
#
# Author:      Riaan Booysen
#
# Created:     2002
# RCS-ID:      $Id: ListCompanions.py,v 1.19 2007/07/02 15:01:09 riaan Exp $
# Copyright:   (c) 2002 - 2007
# Licence:     GPL
#-----------------------------------------------------------------------------
print 'importing Companions.ListCompanions'

import wx
import wx.grid

from Utils import _

from BaseCompanions import WindowDTC,ChoicedDTC,CollectionDTC,CollectionIddDTC

import Constructors
from EventCollections import *

from PropEdit.PropertyEditors import *
from PropEdit.Enumerations import *

import methodparse

class ListCtrlDTC(Constructors.MultiItemCtrlsConstr, WindowDTC):
    def __init__(self, name, designer, parent, ctrlClass):
        WindowDTC.__init__(self, name, designer, parent, ctrlClass)
        self.editors.update({'Columns':         ListColumnsColPropEdit,
                             'ImageListSmall':  ListCtrlImageListClassLinkPropEdit,
                             'ImageListNormal': ListCtrlImageListClassLinkPropEdit})
        self.windowStyles = ['wx.LC_LIST', 'wx.LC_REPORT', 'wx.LC_VIRTUAL', 'wx.LC_ICON',
                             'wx.LC_SMALL_ICON', 'wx.LC_ALIGN_TOP',
                             'wx.LC_ALIGN_LEFT', 'wx.LC_AUTOARRANGE',
                             'wx.LC_USER_TEXT', 'wx.LC_EDIT_LABELS',
                             'wx.LC_NO_HEADER', 'wx.LC_SINGLE_SEL',
                             'wx.LC_SORT_ASCENDING', 'wx.LC_SORT_DESCENDING',
                             'wx.LC_HRULES', 'wx.LC_VRULES'] + self.windowStyles
        self.subCompanions['Columns'] = ListCtrlColumnsCDTC
        self.listTypeNameMap = {'ImageListSmall'  : wx.IMAGE_LIST_SMALL,
                                'ImageListNormal' : wx.IMAGE_LIST_NORMAL}
        for name in self.listTypeNameMap.keys():
            self.customPropEvaluators[name] = self.EvalImageList
        self.customPropEvaluators['ImageList'] = self.EvalImageList

    def properties(self):
        props = WindowDTC.properties(self)
        props['Columns'] =  ('NoneRoute', None, None)

        prop = ('NameRoute', self.GetImageList, self.SetImageList)
        for name in self.listTypeNameMap.keys():
            props[name] = prop

        return props

    def designTimeSource(self, position='wx.DefaultPosition', size='wx.DefaultSize'):
        return {'pos': position,
                'size': self.getDefCtrlSize(),
                'style': 'wx.LC_ICON',
                'name': `self.name`}

    def events(self):
        return WindowDTC.events(self) + ['ListEvent']

    def hideDesignTime(self):
        return WindowDTC.hideDesignTime(self) + ['ItemCount']


#---Image list management-------------------------------------------------------
    def GetImageList(self, name):
        return (self.control.GetImageList(self.listTypeNameMap[name]),
            self.listTypeNameMap[name])

    def SetImageList(self, name, value):
        self.control.SetImageList(value[0], self.listTypeNameMap[name])

    def EvalImageList(self, exprs, objects):
        imgLst, lstTpe = exprs
        return objects[imgLst], self.eval(lstTpe)

    def notification(self, compn, action):
        WindowDTC.notification(self, compn, action)
        if action == 'delete':
            for propName, typeName in (('ImageListSmall', 'wx.IMAGE_LIST_SMALL'),
                                       ('ImageListNormal', 'wx.IMAGE_LIST_NORMAL')):
                imgLst, imgLstType = self.GetImageList(propName)
                if imgLst and `imgLst` == `compn.control`:
                    self.SetImageList(propName, (None,))
                    idx = 0
                    while idx < len(self.textPropList):
                        prop = self.textPropList[idx]
                        if prop.prop_setter == 'SetImageList' and \
                              prop.params[1] == typeName:
                            del self.textPropList[idx]
                        else:
                            idx = idx + 1

    def persistProp(self, name, setterName, value):
        if setterName == 'SetImageList':
            imgList, listType = value.split(',')
            imgList, listType = imgList.strip(), listType.strip()
            for prop in self.textPropList:
                if prop.prop_setter == setterName and prop.params[1] == listType:
                    prop.params = [imgList, listType]
                    return
            self.textPropList.append(methodparse.PropertyParse( None, self.name,
                setterName, [imgList, listType], 'SetImageList'))
        else:
            WindowDTC.persistProp(self, name, setterName, value)


class ListCtrlColumnsCDTC(CollectionDTC):
    propName = 'Columns'
    displayProp = 'heading'
    indexProp = 'col'
    insertionMethod = 'InsertColumn'
    deletionMethod = 'DeleteColumn'

    def __init__(self, name, designer, parentCompanion, ctrl):
        CollectionDTC.__init__(self, name, designer, parentCompanion, ctrl)
        self.editors = {'Width': IntConstrPropEdit,
                        'Heading': StrConstrPropEdit,
                        'Format': EnumConstrPropEdit}#StyleConstrPropEdit}
#        self.options = {'Format': formatStyle}
        self.names = {'Format': formatStyle}

    def constructor(self):
        return {'Column': 'col', 'Heading': 'heading', 'Format': 'format',
                'Width': 'width'}

    def properties(self):
        props = CollectionDTC.properties(self)
        props.update({'Column':  ('NoneRoute', None, None),
                      'Heading': ('NoneRoute', None, None),
#                      'Format':  ('IndexRoute', None, None),
                      'Width':   ('IndexRoute', wx.ListCtrl.GetColumnWidth,
                                                wx.ListCtrl.SetColumnWidth)})
        return props

    def designTimeSource(self, wId, method=None):
        return {'col': `wId`,
                'heading': `'%s%d'%(self.propName, wId)`,
                'format': 'wx.LIST_FORMAT_LEFT',
                'width': `-1`}

    def appendItem(self, method=None):
        if not (self.control.GetWindowStyleFlag() & wx.LC_REPORT):
            wx.MessageBox(_('wx.ListCtrl must be created with the wx.LC_REPORT flag.'),
                  'Error', wx.ICON_ERROR | wx.OK, self.designer)
            return
        CollectionDTC.appendItem(self, method)

    def moveItem(self, idx, dir):
        newIdx = CollectionDTC.moveItem(self, idx, dir)
        if newIdx != idx:
            li = self.control.GetColumn(idx)
            text = li.GetText()
            self.control.DeleteColumn(idx)
            self.control.InsertColumnInfo(newIdx, li)
            self.control.SetColumn(newIdx, li) # doesn't update without this
        return newIdx

    def deleteItem(self, idx):
        CollectionDTC.deleteItem(self, idx)
        del self.textConstrLst[idx]

class ListViewDTC(ListCtrlDTC): pass

class TreeCtrlDTC(Constructors.MultiItemCtrlsConstr, WindowDTC):
    def __init__(self, name, designer, parent, ctrlClass):
        WindowDTC.__init__(self, name, designer, parent, ctrlClass)
        self.editors.update({'ImageList': ImageListClassLinkPropEdit,
                             #'StateImageList': ImageListClassLinkPropEdit
                             })
        self.windowStyles = ['wx.TR_NO_BUTTONS', 'wx.TR_HAS_BUTTONS',
                             'wx.TR_EDIT_LABELS', 'wx.TR_NO_LINES',
                             'wx.TR_LINES_AT_ROOT',
                             #'wxTR_HIDE_ROOT',
                             'wx.TR_ROW_LINES',
                             #'wxTR_HAS_VARIABLE_ROW_HEIGHT',
                             'wx.TR_SINGLE', 'wx.TR_MULTIPLE', 'wx.TR_EXTENDED',
                             'wx.TR_DEFAULT_STYLE'] + self.windowStyles

    def designTimeSource(self, position = 'wx.DefaultPosition', size = 'wx.DefaultSize'):
        return {'pos': position,
                'size': size,
                'style': 'wx.TR_HAS_BUTTONS',
                'name': `self.name`}

    def hideDesignTime(self):
        return WindowDTC.hideDesignTime(self) + ['StateImageList']

    def dependentProps(self):
        return WindowDTC.dependentProps(self) + ['ImageList', 'StateImageList']

    def notification(self, compn, action):
        WindowDTC.notification(self, compn, action)
        if action == 'delete':
            if `self.control.GetImageList()` == `compn.control`:
                self.propRevertToDefault('ImageList', 'SetImageList')
                self.control.SetImageList(None)

##            if `self.control.GetStateImageList()` == `compn.control`:
##                self.propRevertToDefault('StateImageList', 'SetStateImageList')
##                self.control.SetStateImageList(None)

    def events(self):
        return WindowDTC.events(self) + ['TreeEvent']

EventCategories['ListBoxEvent'] = ('wx.EVT_LISTBOX', 'wx.EVT_LISTBOX_DCLICK')
commandCategories.append('ListBoxEvent')
class ListBoxDTC(Constructors.ListConstr, ChoicedDTC):
    def __init__(self, name, designer, parent, ctrlClass):
        ChoicedDTC.__init__(self, name, designer, parent, ctrlClass)
        self.editors['Choices'] = ChoicesConstrPropEdit
        self.windowStyles = ['wx.LB_SINGLE', 'wx.LB_MULTIPLE', 'wx.LB_EXTENDED',
                             'wx.LB_HSCROLL', 'wx.LB_ALWAYS_SB', 'wx.LB_NEEDED_SB',
                             'wx.LB_SORT'] + self.windowStyles

    def designTimeSource(self, position = 'wx.DefaultPosition', size = 'wx.DefaultSize'):
        return {'pos': position,
                'size': size,
                'choices': '[]',
                'style': '0',
                'name': `self.name`}

    def events(self):
        return ChoicedDTC.events(self) + ['ListBoxEvent']

    def defaultAction(self):
        insp = self.designer.inspector
        insp.pages.SetSelection(2)
        insp.events.doAddEvent('ListBoxEvent', 'wx.EVT_LISTBOX')


EventCategories['CheckListBoxEvent'] = ('wx.EVT_CHECKLISTBOX',)
commandCategories.append('CheckListBoxEvent')
class CheckListBoxDTC(ListBoxDTC):
    def events(self):
        return ListBoxDTC.events(self) + ['CheckListBoxEvent']

EventCategories['RadioBoxEvent'] = ('wx.EVT_RADIOBOX',)
commandCategories.append('RadioBoxEvent')
class RadioBoxDTC(ChoicedDTC):
    def __init__(self, name, designer, parent, ctrlClass):
        ChoicedDTC.__init__(self, name, designer, parent, ctrlClass)
        self.editors['MajorDimension'] = MajorDimensionConstrPropEdit
        self.windowStyles = ['wx.RA_SPECIFY_ROWS', 'wx.RA_SPECIFY_COLS'] + self.windowStyles

    def constructor(self):
        return {'Label': 'label', 'Position': 'pos', 'Size': 'size',
                'Choices': 'choices', 'MajorDimension': 'majorDimension',
                'Style': 'style', 'Name': 'name'}

    def designTimeSource(self, position = 'wx.DefaultPosition', size = 'wx.DefaultSize'):
        return {'label': `self.name`,
                'pos': position,
                'size': size,
                'choices': `['asd']`,
                'majorDimension': '1',
                'style': 'wx.RA_SPECIFY_COLS',
                'name': `self.name`}

    def events(self):
        return ChoicedDTC.events(self) + ['RadioBoxEvent']

    def defaultAction(self):
        insp = self.designer.inspector
        insp.pages.SetSelection(2)
        insp.events.doAddEvent('RadioBoxEvent', 'wx.EVT_RADIOBOX')

class GenericDirCtrlDTC(WindowDTC):
    def __init__(self, name, designer, parent, ctrlClass):
        WindowDTC.__init__(self, name, designer, parent, ctrlClass)
        self.editors['DefaultFilter'] = IntConstrPropEdit
        self.windowStyles = ['wx.DIRCTRL_DIR_ONLY', 'wx.DIRCTRL_SELECT_FIRST',
              'wx.DIRCTRL_SHOW_FILTERS', 'wx.DIRCTRL_3D_INTERNAL',
              'wx.DIRCTRL_EDIT_LABELS'] + self.windowStyles
        self.compositeCtrl = True

    def constructor(self):
        return {'Name': 'name', 'Position': 'pos', 'Size': 'size',
                'DefaultPath': 'dir', 'Style': 'style', 'Filter': 'filter',
                'DefaultFilter': 'defaultFilter'}

    def designTimeSource(self, position = 'wx.DefaultPosition', size = 'wx.DefaultSize'):
        return {'pos': position,
                'size': self.getDefCtrlSize(),
                'dir': "'.'",
                'style': 'wx.DIRCTRL_3D_INTERNAL | wx.SUNKEN_BORDER',
                'filter': "''",
                'defaultFilter': '0',
                'name': `self.name`}


EventCategories['GridEvent'] = ('wx.grid.EVT_GRID_CELL_LEFT_CLICK',
      'wx.grid.EVT_GRID_CELL_RIGHT_CLICK', 'wx.grid.EVT_GRID_CELL_LEFT_DCLICK',
      'wx.grid.EVT_GRID_CELL_RIGHT_DCLICK', 'wx.grid.EVT_GRID_LABEL_LEFT_CLICK',
      'wx.grid.EVT_GRID_LABEL_RIGHT_CLICK',
      'wx.grid.EVT_GRID_LABEL_LEFT_DCLICK',
      'wx.grid.EVT_GRID_LABEL_RIGHT_DCLICK',
      'wx.grid.EVT_GRID_ROW_SIZE', 'wx.grid.EVT_GRID_COL_SIZE',
      'wx.grid.EVT_GRID_RANGE_SELECT', 'wx.grid.EVT_GRID_CELL_CHANGE',
      'wx.grid.EVT_GRID_SELECT_CELL', 'wx.grid.EVT_GRID_EDITOR_SHOWN',
      'wx.grid.EVT_GRID_EDITOR_HIDDEN', 'wx.grid.EVT_GRID_EDITOR_CREATED',
)

class GridDTC(Constructors.WindowConstr, WindowDTC):
    def __init__(self, name, designer, parent, ctrlClass):
        WindowDTC.__init__(self, name, designer, parent, ctrlClass)
        self.editors['Editable'] = self.editors['GridLinesEnabled'] = BoolPropEdit
        self.editors['SelectionMode'] = EnumPropEdit
        self.compositeCtrl = True

        self.options['SelectionMode'] = [wx.grid.Grid.wxGridSelectCells,
                                         wx.grid.Grid.wxGridSelectRows,
                                         wx.grid.Grid.wxGridSelectColumns]
        self.names['SelectionMode'] = \
              {'wx.grid.Grid.wxGridSelectCells': wx.grid.Grid.wxGridSelectCells,
               'wx.grid.Grid.wxGridSelectRows': wx.grid.Grid.wxGridSelectRows,
               'wx.grid.Grid.wxGridSelectColumns': wx.grid.Grid.wxGridSelectColumns}

    def designTimeSource(self, position = 'wx.DefaultPosition', size = 'wx.DefaultSize'):
        return {'pos': position,
                'size': self.getDefCtrlSize(),
                'style': '0',
                'name': `self.name`}

    def properties(self):
        props = WindowDTC.properties(self)
        props.update({'Editable': ('CtrlRoute',
                      wx.grid.Grid.IsEditable, wx.grid.Grid.EnableEditing),
                      'GridLinesEnabled': ('CtrlRoute',
                      wx.grid.Grid.GridLinesEnabled, wx.grid.Grid.EnableGridLines)})
        return props

    def designTimeControl(self, position, size, args = None):
        dtc = WindowDTC.designTimeControl(self, position, size, args)
        dtc.CreateGrid(0, 0)
        return dtc

    def events(self):
        return WindowDTC.events(self) + ['GridEvent']

    def writeImports(self):
        return '\n'.join( (WindowDTC.writeImports(self),
                           'import wx.grid') )

    def hideDesignTime(self):
        return WindowDTC.hideDesignTime(self) + \
              ['RowLabelAlignment', 'ColLabelAlignment', 'Table',
               'DefaultEditor', 'DefaultRenderer', 'TargetWindow', 'TargetRect',
               'DefaultCellAlignment']

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

import Plugins

Plugins.registerPalettePage('ListControls', _('List Controls'))

Plugins.registerComponents('ListControls',
      (wx.ListBox, 'wx.ListBox', ListBoxDTC),
      (wx.CheckListBox, 'wx.CheckListBox', CheckListBoxDTC),
      (wx.grid.Grid, 'wx.grid.Grid', GridDTC),
      (wx.ListCtrl, 'wx.ListCtrl', ListCtrlDTC),
      (wx.ListView, 'wx.ListView', ListViewDTC),
      (wx.TreeCtrl, 'wx.TreeCtrl', TreeCtrlDTC),
      (wx.RadioBox, 'wx.RadioBox', RadioBoxDTC),
      (wx.GenericDirCtrl, 'wx.GenericDirCtrl', GenericDirCtrlDTC),
    )
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.