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