00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 import gettext
00031 from Koo.Common import Api
00032 from Koo.Common import Common
00033 
00034 
00035 from Koo.Screen.Screen import Screen
00036 from Koo.Model.Group import RecordGroup
00037 
00038 from Koo import Rpc
00039 import time
00040 from Koo.Dialogs.SearchDialog import SearchDialog
00041 from Koo.Fields.AbstractFieldWidget import *
00042 
00043 (ActionFieldWidgetUi, ActionFieldWidgetBase) = loadUiType( Common.uiPath('paned.ui') ) 
00044 
00045 class ActionFieldWidget(AbstractFieldWidget, ActionFieldWidgetUi):
00046         def __init__(self,  parent, view, attrs={}):
00047                 AbstractFieldWidget.__init__( self, parent, view, attrs )
00048                 ActionFieldWidgetUi.__init__( self )
00049                 self.setupUi( self )
00050 
00051                 self.colors['normal'] = self.palette().color( self.backgroundRole() )   
00052                 self.act_id=attrs['name']
00053                 res = Rpc.session.execute('/object', 'execute', 'ir.actions.actions', 'read', [self.act_id], ['type'], Rpc.session.context)
00054                 if not res:
00055                         raise Exception, 'ActionNotFound'
00056                 type=res[0]['type']
00057 
00058                 
00059                 self.action = Rpc.session.execute('/object', 'execute', type, 'read', [self.act_id], False, Rpc.session.context)[0]
00060                 if 'view_mode' in attrs:
00061                         self.action['view_mode'] = attrs['view_mode']
00062 
00063                 if self.action['type']=='ir.actions.act_window':
00064                         if not self.action.get('domain', False):
00065                                 self.action['domain']='[]'
00066                         self.context = {'active_id': False, 'active_ids': []}
00067                         self.context.update(eval(self.action.get('context', '{}'), self.context.copy()))
00068                         a = self.context.copy()
00069                         a['time'] = time
00070                         self.domain = Rpc.session.evaluateExpression(self.action['domain'], a)
00071 
00072                         if self.action['view_type']=='form':
00073                                 self.view_id = []
00074                                 if self.action['view_id']:
00075                                         self.view_id = [self.action['view_id'][0]]
00076 
00077                                 self.recordGroup = RecordGroup( self.action['res_model'], context=self.context )
00078                                 self.recordGroup.setDomain( self.domain )
00079 
00080                                 
00081                                 QTimer.singleShot( 0, self.createScreen )
00082                         elif self.action['view_type']=='tree':
00083                                 pass 
00084                 self.screen = None
00085 
00086         def createScreen(self):
00087                 QApplication.setOverrideCursor( Qt.WaitCursor )
00088                 try:
00089                         self.screen = Screen( self )
00090                         self.screen.setRecordGroup( self.recordGroup )
00091                         
00092                         self.screen.setEmbedded( True )
00093                         if int( self.attrs.get('koo.show_toolbar','0') ):
00094                                 self.screen.setToolbarVisible( True )
00095                         else:
00096                                 self.screen.setToolbarVisible( False )
00097                         self.connect( self.screen, SIGNAL('activated()'), self.switch )
00098                         mode = (self.action['view_mode'] or 'form,tree').split(',')
00099                         
00100                                 
00101                         
00102                                 
00103                         self.screen.setupViews( mode, self.view_id )
00104                         self.uiTitle.setText( QString( self.attrs['string'] or "" ))
00105                         layout = QVBoxLayout( self.uiGroup )
00106                         layout.setContentsMargins( 0, 0, 0 , 0 )
00107                         layout.addWidget( self.screen )
00108 
00109                         self.connect( self.pushSearch, SIGNAL( 'clicked()' ), self.slotSearch )
00110                         self.connect( self.pushSwitchView, SIGNAL( 'clicked()'), self.switch )
00111                         self.connect( self.pushOpen, SIGNAL( 'clicked()' ), self.slotOpen )
00112 
00113                         self.setSizePolicy( QSizePolicy.Preferred, QSizePolicy.Expanding )
00114                 except Rpc.RpcException, e:
00115                         pass
00116                 QApplication.restoreOverrideCursor()
00117 
00118 
00119         def sizeHint( self ):
00120                 return QSize( 200, 400 )
00121 
00122         def switch( self ):
00123                 self.screen.switchView()
00124 
00125         def slotSearch( self ):
00126                 win = SearchDialog(self.action['res_model'], domain=self.domain, context=self.context)
00127                 win.exec_()
00128                 if win.result:
00129                         self.screen.clear()
00130                         self.screen.load(win.result)
00131 
00132         def slotOpen( self ):
00133                 Api.instance.execute(self.act_id )
00134 
00135         def storeValue(self):
00136                 self.screen.currentView().store()
00137 
00138         def showValue(self):
00139                 if self.screen:
00140                         self.screen.reload()
00141