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 Common
00032 from Koo.Common.Settings import *
00033 
00034 from Koo import Rpc
00035 
00036 from Koo.Screen import Screen
00037 from Koo.Screen.ScreenDialog import ScreenDialog
00038 from Koo.Model.Group import RecordGroup
00039 
00040 from PyQt4.QtGui import *
00041 from PyQt4.QtCore import *
00042 from PyQt4.uic import *
00043 
00044 (SearchDialogUi, SearchDialogBase) = loadUiType( Common.uiPath('win_search.ui') )
00045 
00046 class SearchDialog( QDialog, SearchDialogUi ):
00047         def __init__(self, model, sel_multi=True, ids=None, context=None, domain = None, parent = None):
00048                 QDialog.__init__( self, parent )
00049                 SearchDialogUi.__init__( self )
00050                 self.setupUi( self )
00051 
00052                 if ids is None:
00053                         ids = []
00054                 if context is None:
00055                         context = {}
00056                 if domain is None:
00057                         domain = []
00058 
00059                 self.setModal( True )
00060 
00061                 self.ids = ids
00062                 self.result = None
00063                 self.context = context
00064                 self.context.update(Rpc.session.context)
00065                 self.allowMultipleSelection = sel_multi
00066 
00067                 self.modelGroup = RecordGroup( model, context=self.context )
00068                 if Settings.value('koo.sort_mode') == 'visible_items':
00069                         self.modelGroup.setSortMode( RecordGroup.SortVisibleItems )
00070                 self.modelGroup.setDomain( domain )
00071                 if self.ids:
00072                         self.modelGroup.setFilter( [('id','in',ids)] )
00073                         
00074 
00075                 self.screen.setRecordGroup( self.modelGroup )
00076                 self.screen.setViewTypes( ['tree'] )
00077 
00078                 self.view = self.screen.currentView()
00079                 self.view.setAllowMultipleSelection( self.allowMultipleSelection )
00080                 self.view.setReadOnly( True )
00081                 self.connect( self.view, SIGNAL('activated()'), self.accepted )
00082 
00083                 self.model = model
00084 
00085                 view_form = Rpc.session.execute('/object', 'execute', self.model, 'fields_view_get', False, 'form', self.context)
00086                 self.form.setup( view_form['arch'], view_form['fields'], model, domain )
00087                 self.form.hideButtons()
00088                 self.connect( self.form, SIGNAL('keyDownPressed()'), self.setFocusToList )
00089 
00090                 self.title = _('Search: %s') % self.form.name
00091                 self.titleResults = _('Search: %s (%%d result(s))') % self.form.name
00092 
00093                 self.setWindowTitle( self.title )
00094 
00095 
00096                 
00097                 layout = self.layout()
00098                 layout.insertWidget(0, self.screen )
00099                 layout.insertWidget(0, self.form )
00100 
00101                 self.form.setFocus()
00102 
00103                 self.connect( self.pushNew, SIGNAL( "clicked()"), self.new )
00104                 self.connect( self.pushAccept, SIGNAL( "clicked()"), self.accepted )
00105                 self.connect( self.pushCancel , SIGNAL( "clicked()"), self.reject )
00106                 self.connect( self.pushFind, SIGNAL( "clicked()"), self.find )
00107                 self.connect( self.form, SIGNAL( "search()" ), self.find )
00108 
00109                 
00110                 self.select()
00111 
00112         def setFocusToList(self):
00113                 self.screen.setFocus()
00114 
00115         def find(self):
00116                 self.modelGroup.setFilter( self.form.value() )
00117                 self.reload()
00118 
00119         def reload(self):
00120                 self.modelGroup.update()
00121                 self.select()
00122 
00123         def select(self):
00124                 if self.allowMultipleSelection:
00125                         self.view.selectAll()
00126                 self.setWindowTitle( self.titleResults % self.modelGroup.count() )
00127 
00128         def accepted( self ):
00129                 self.result = self.screen.selectedIds() or self.ids
00130                 self.accept()
00131 
00132         def new(self):
00133                 self.hide()
00134                 dialog = ScreenDialog( self )
00135                 dialog.setContext( self.context )
00136                 dialog.setDomain( self.modelGroup.domain() )
00137                 dialog.setup( self.model )
00138                 if dialog.exec_() == QDialog.Accepted:
00139                         self.result = [dialog.recordId]
00140                         self.accept()
00141                 else:
00142                         self.reject()
00143 
00144