Merge lp:~openerp-dev/openobject-client/m2o_with_selection into lp:~openerp-dev/openobject-client/trunk-dev-client

Proposed by Ravi Gadhia (OpenERP)
Status: Rejected
Rejected by: Naresh(OpenERP)
Proposed branch: lp:~openerp-dev/openobject-client/m2o_with_selection
Merge into: lp:~openerp-dev/openobject-client/trunk-dev-client
Diff against target: 1858 lines (+382/-342)
13 files modified
bin/po/pt_BR.po (+151/-183)
bin/po/ur.po (+47/-38)
bin/release.py (+2/-2)
bin/widget/model/field.py (+33/-6)
bin/widget/model/record.py (+5/-1)
bin/widget/screen/screen.py (+2/-0)
bin/widget/view/form_gtk/selection.py (+54/-73)
bin/widget/view/list.py (+1/-1)
bin/widget/view/tree_gtk/editabletree.py (+7/-2)
bin/widget/view/tree_gtk/parser.py (+56/-27)
bin/widget_search/checkbox.py (+6/-5)
bin/widget_search/selection.py (+14/-4)
bin/widget_search/wid_int.py (+4/-0)
To merge this branch: bzr merge lp:~openerp-dev/openobject-client/m2o_with_selection
Reviewer Review Type Date Requested Status
Naresh(OpenERP) Needs Resubmitting
Review via email: mp+49360@code.launchpad.net

Description of the change

Hello,

Improve selection field.

Now M2O field with widget="selection" no need to pre-load selection value (at time of fields_view_get) it's get value on popup by name_search and we can apply domain as like M2O field

For selection field: if it has function to get selection value it also call at field popup time

related server branch:
https://code.launchpad.net/~openerp-dev/openobject-server/m2o_with_selection

To post a comment you must log in.
Revision history for this message
Naresh(OpenERP) (nch-openerp) wrote :

Reasons:

1: send proposal to Trunk server
2: feature should only be available for widget=selection.

Thanks

review: Needs Resubmitting

Unmerged revisions

1464. By Ravi Gadhia (OpenERP)

call field_get to get selection value because directly rpc function call raise access error when function is private

1463. By Ravi Gadhia (OpenERP)

[FIX/IMP] Clean up + fixes

1462. By Ravi Gadhia (OpenERP)

[IMP] List view: add context, domain, limit False on selection field

1461. By Ravi Gadhia (OpenERP)

[IMP] Form view: add context, domain on selection field + usability imrovement

1460. By Ravi Gadhia (OpenERP)

List view selection field improve + small fix

1459. By Ravi Gadhia (OpenERP)

[IMP] Reimplement selection field for List view

1458. By Ravi Gadhia (OpenERP)

[IMP] Reimplement selection field for form view (selection data should not pre loaded)

1457. By Ravi Gadhia (OpenERP)

Merge with trunk client

1456. By Ravi Gadhia (OpenERP)

[IMP] search_view: seletion fields

1455. By Ravi Gadhia (OpenERP)

[IMP] Search view: m20 with selection widget make rpc call when combobox popup

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bin/po/pt_BR.po'
2--- bin/po/pt_BR.po 2011-01-25 10:58:55 +0000
3+++ bin/po/pt_BR.po 2011-02-11 07:40:17 +0000
4@@ -8,13 +8,13 @@
5 "Project-Id-Version: openobject-client\n"
6 "Report-Msgid-Bugs-To: \n"
7 "POT-Creation-Date: 2010-12-13 18:11+0100\n"
8-"PO-Revision-Date: 2011-01-24 22:48+0000\n"
9-"Last-Translator: Adriano Prado <adrianojprado@hotmail.com>\n"
10+"PO-Revision-Date: 2011-02-05 12:45+0000\n"
11+"Last-Translator: Emerson <Unknown>\n"
12 "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
13 "MIME-Version: 1.0\n"
14 "Content-Type: text/plain; charset=UTF-8\n"
15 "Content-Transfer-Encoding: 8bit\n"
16-"X-Launchpad-Export-Date: 2011-01-25 04:53+0000\n"
17+"X-Launchpad-Export-Date: 2011-02-06 04:53+0000\n"
18 "X-Generator: Launchpad (build 12177)\n"
19 "Language: pt_BR\n"
20
21@@ -109,7 +109,7 @@
22
23 #: bin/modules/gui/main.py:194
24 msgid "Bad Super Administrator Password"
25-msgstr ""
26+msgstr "Senha do Super Administrador Errada"
27
28 #: bin/modules/gui/main.py:218
29 msgid "Migration Scripts"
30@@ -137,11 +137,11 @@
31
32 #: bin/modules/gui/main.py:264
33 msgid "Migrate Database"
34-msgstr "Migrar base de dados"
35+msgstr "Migrar Base de Dados"
36
37 #: bin/modules/gui/main.py:281
38 msgid "Database"
39-msgstr "Banco de Dados"
40+msgstr "Base de Dados"
41
42 #: bin/modules/gui/main.py:293
43 msgid "Your database has been upgraded."
44@@ -149,18 +149,15 @@
45
46 #: bin/modules/gui/main.py:295
47 msgid "Your databases have been upgraded."
48-msgstr "suas bases de dados já foram atualizadas."
49+msgstr "Suas bases de dados já foram atualizadas."
50
51 #: bin/modules/gui/main.py:297
52 msgid "You have not selected a database"
53-msgstr "Você não selecionou um Banco de Dados"
54+msgstr "Você não selecionou uma base de dados"
55
56-#
57-# File: bin/modules/gui/main.py, line: 165
58-# File: bin/modules/gui/main.py, line: 1161
59 #: bin/modules/gui/main.py:361
60 msgid "No database found, you must create one !"
61-msgstr "Banco de dados não encontrado, você deve criar um !"
62+msgstr "Base de dados não encontrada, você deve criar uma !"
63
64 #
65 # File: bin/modules/gui/main.py, line: 154
66@@ -185,64 +182,43 @@
67 msgid "Sorry,'"
68 msgstr "Desculpe,'"
69
70-#
71-# File: bin/modules/gui/main.py, line: 309
72-# File: bin/modules/gui/main.py, line: 312
73 #: bin/modules/gui/main.py:610 bin/modules/gui/main.py:613
74 msgid "Bad database name !"
75-msgstr "Nome do banco de dados inválido !"
76+msgstr "Nome da base de dados inválida !"
77
78-#
79-# File: bin/modules/gui/main.py, line: 312
80 #: bin/modules/gui/main.py:613
81 msgid ""
82 "The database name must contain only normal characters or \"_\".\n"
83 "You must avoid all accents, space or special characters."
84 msgstr ""
85-"O nome do banco de dados deve conter apenas caracteres normais ou \"_\".\n"
86+"O nome da base de dados deve conter apenas caracteres normais ou \"_\".\n"
87 "Você deve evitar acentos, espaços e caracteres especiais."
88
89-#
90-# File: bin/modules/gui/main.py, line: 372
91-# File: bin/modules/gui/main.py, line: 374
92-# File: bin/modules/gui/main.py, line: 376
93 #: bin/modules/gui/main.py:647 bin/modules/gui/main.py:649
94 #: bin/modules/gui/main.py:651
95 msgid "Could not create database."
96-msgstr "Não foi possível criar banco de dados."
97+msgstr "Não foi possível criar a base de dados."
98
99-#
100-# File: bin/modules/gui/main.py, line: 372
101 #: bin/modules/gui/main.py:647
102 msgid "Database already exists !"
103-msgstr "Banco de dados já existe !"
104+msgstr "Base de dados já existe !"
105
106-#
107-# File: bin/modules/gui/main.py, line: 374
108-# File: bin/modules/gui/main.py, line: 1060
109-# File: bin/modules/gui/main.py, line: 1079
110-# File: bin/modules/gui/main.py, line: 1149
111 #: bin/modules/gui/main.py:649 bin/modules/gui/main.py:1383
112 #: bin/modules/gui/main.py:1403 bin/modules/gui/main.py:1482
113 msgid "Bad database administrator password !"
114-msgstr "Senha do administrador do banco de dados inválida !"
115+msgstr "Senha do administrador da base de dados inválida !"
116
117-#
118-# File: bin/modules/gui/main.py, line: 376
119-# File: bin/modules/gui/main.py, line: 383
120 #: bin/modules/gui/main.py:651 bin/modules/gui/main.py:658
121 msgid "Error during database creation !"
122-msgstr "Erro durante a criação do banco de dados !"
123+msgstr "Erro durante a criação da base de dados !"
124
125-#
126-# File: bin/modules/gui/main.py, line: 383
127 #: bin/modules/gui/main.py:658
128 msgid ""
129 "The server crashed during installation.\n"
130 "We suggest you to drop this database."
131 msgstr ""
132 "O servidor falhou durante a instalação.\n"
133-"Sugerimos que você apague este banco de dados."
134+"Sugerimos que você apague esta base de dados."
135
136 #
137 # File: bin/modules/gui/main.py, line: 445
138@@ -285,12 +261,12 @@
139 "Please double-check the database name or contact your administrator to "
140 "verify the database status."
141 msgstr ""
142-"Por favor, verifique o nome do banco ou entre em contato com o administrador "
143-"para verificar o status de banco de dados."
144+"Por favor, verifique o nome da base ou entre em contato com o administrador "
145+"para verificar o status da base de dados."
146
147 #: bin/modules/gui/main.py:1037
148 msgid "Database cannot be accessed or does not exist"
149-msgstr "Banco de dados não pode ser acessado ou não existe"
150+msgstr "Base de dados não pode ser acessada ou não existe"
151
152 #
153 # File: bin/modules/gui/main.py, line: 746
154@@ -360,29 +336,21 @@
155 msgid "Attachments"
156 msgstr "Anexos"
157
158-#
159-# File: bin/modules/gui/main.py, line: 1051
160 #: bin/modules/gui/main.py:1374
161 msgid "Delete a database"
162-msgstr "Apagar um banco de dados"
163+msgstr "Apagar uma base de dados"
164
165-#
166-# File: bin/modules/gui/main.py, line: 1057
167 #: bin/modules/gui/main.py:1380
168 msgid "Database dropped successfully !"
169-msgstr "Banco de dados apagado com sucesso !"
170+msgstr "Base de dados apagada com sucesso !"
171
172-#
173-# File: bin/modules/gui/main.py, line: 1060
174 #: bin/modules/gui/main.py:1383
175 msgid "Could not drop database."
176-msgstr "Não foi possível apagar o banco de dados."
177+msgstr "Não foi possível apagar a base de dados."
178
179-#
180-# File: bin/modules/gui/main.py, line: 1062
181 #: bin/modules/gui/main.py:1385
182 msgid "Couldn't drop database"
183-msgstr "Não foi possível apagar o banco de dados."
184+msgstr "Não foi possível apagar a base de dados."
185
186 #
187 # File: bin/widget/view/form_gtk/image.py, line: 110
188@@ -394,23 +362,17 @@
189 msgid "Open..."
190 msgstr "Abrir..."
191
192-#
193-# File: bin/modules/gui/main.py, line: 1076
194 #: bin/modules/gui/main.py:1400
195 msgid "Database restored successfully !"
196-msgstr "Banco de dados restaurado com sucesso !"
197+msgstr "Base de dados restaurada com sucesso !"
198
199-#
200-# File: bin/modules/gui/main.py, line: 1079
201 #: bin/modules/gui/main.py:1403
202 msgid "Could not restore database."
203-msgstr "Não foi possível restaurar o banco de dados."
204+msgstr "Não foi possível restaurar a base de dados."
205
206-#
207-# File: bin/modules/gui/main.py, line: 1081
208 #: bin/modules/gui/main.py:1405
209 msgid "Couldn't restore database"
210-msgstr "Não foi possível restaurar o banco de dados."
211+msgstr "Não foi possível restaurar a base de dados."
212
213 #: bin/modules/gui/main.py:1444
214 msgid ""
215@@ -438,12 +400,9 @@
216 msgid "Error, password not changed."
217 msgstr "Erro, senha não alterada."
218
219-#
220-# File: bin/modules/gui/main.py, line: 1133
221-# File: bin/modules/gui/main.py, line: 1153
222 #: bin/modules/gui/main.py:1463 bin/modules/gui/main.py:1486
223 msgid "Backup a database"
224-msgstr "Fazer backup de um banco de dados"
225+msgstr "Fazer backup de uma base de dados"
226
227 #: bin/modules/gui/main.py:1466 bin/modules/gui/window/win_export.py:328
228 #: bin/printer/printer.py:216 bin/widget/view/form_gtk/image.py:129
229@@ -453,17 +412,15 @@
230
231 #: bin/modules/gui/main.py:1479
232 msgid "Database backed up successfully !"
233-msgstr "Base de dados salvaguardada com sucesso."
234+msgstr "Backup da base de dados criado com sucesso !"
235
236 #: bin/modules/gui/main.py:1482
237 msgid "Could not backup the database."
238-msgstr "Não pôde salvaguardar a base de dados"
239+msgstr "O backup da base de dados não pode ser criado."
240
241-#
242-# File: bin/modules/gui/main.py, line: 1151
243 #: bin/modules/gui/main.py:1484
244 msgid "Couldn't backup database."
245-msgstr "Não foi possível fazer backup do banco de dados."
246+msgstr "O backup da base de dados não pode ser criado."
247
248 #: bin/modules/gui/window/form.py:173
249 msgid "Resource ID does not exist for this object!"
250@@ -517,7 +474,7 @@
251
252 #: bin/modules/gui/window/form.py:258
253 msgid "Internal Module Data ID"
254-msgstr ""
255+msgstr "Data ID Interna do Módulo"
256
257 #
258 # File: bin/modules/gui/window/form.py, line: 230
259@@ -671,6 +628,12 @@
260 "\n"
261 "%s"
262 msgstr ""
263+"Erro na importação deste registro:\n"
264+"%s\n"
265+"Mensagem:\n"
266+"%s\n"
267+"\n"
268+"%s"
269
270 #: bin/modules/gui/window/win_import.py:69
271 msgid "Importation Error !"
272@@ -701,6 +664,8 @@
273 "Error processing your first line of the file.\n"
274 "Field %s is unknown !"
275 msgstr ""
276+"Erro no processamento da primeira linha do arquivo.\n"
277+"Campo %s desconhecido !"
278
279 #: bin/modules/gui/window/win_import.py:190
280 msgid "Import Error."
281@@ -712,7 +677,7 @@
282
283 #: bin/modules/gui/window/win_extension.py:42
284 msgid "Extension"
285-msgstr ""
286+msgstr "Extensão"
287
288 #: bin/modules/gui/window/win_extension.py:42
289 msgid "Application"
290@@ -720,7 +685,7 @@
291
292 #: bin/modules/gui/window/win_extension.py:42
293 msgid "Print Processor"
294-msgstr ""
295+msgstr "Processador de Impressão"
296
297 #
298 # File: bin/modules/gui/window/win_extension.py, line: 115
299@@ -840,7 +805,7 @@
300
301 #: bin/modules/gui/window/win_export.py:284
302 msgid "What is the name of this export ?"
303-msgstr ""
304+msgstr "Qual o nome desta exportação ?"
305
306 #: bin/modules/gui/window/win_export.py:320
307 msgid "Exportation Error !"
308@@ -908,7 +873,7 @@
309
310 #: bin/common/common.py:89
311 msgid "Close current tip"
312-msgstr ""
313+msgstr "Fechar a dica atual"
314
315 #: bin/common/common.py:90
316 msgid ""
317@@ -920,7 +885,7 @@
318
319 #: bin/common/common.py:100
320 msgid "Disable all tips"
321-msgstr ""
322+msgstr "Desligar todas as dicas"
323
324 #: bin/common/common.py:101
325 msgid ""
326@@ -929,10 +894,14 @@
327 "To re-enable tips you need to check the <b>'Menu Tips'</b> option in the "
328 "user preferences."
329 msgstr ""
330+"<span foreground=\"darkred\"><b>Desligar todas as dicas:</b></span>\n"
331+"Isto vai desligar a apresentação das dicas em todos os itens de menu.\n"
332+"Para ligar novamente marque a opção <b>'Dicas de Menu'</b> nas preferências "
333+"de usuário."
334
335 #: bin/common/common.py:115 bin/common/common.py:117
336 msgid "Tips"
337-msgstr ""
338+msgstr "Dicas"
339
340 #
341 # File: bin/modules/action/wizard.py, line: 133
342@@ -958,15 +927,15 @@
343 #: bin/common/common.py:190
344 #, python-format
345 msgid "Ensure that the file %s is correct"
346-msgstr ""
347+msgstr "Certifique-se que o arquivo %s está correto"
348
349 #: bin/common/common.py:364
350 msgid " has reported the following bug:\n"
351-msgstr ""
352+msgstr " notificou o seguinte erro:\n"
353
354 #: bin/common/common.py:364
355 msgid "remarks"
356-msgstr ""
357+msgstr "comentários"
358
359 #
360 # File: bin/common/common.py, line: 298
361@@ -1082,6 +1051,8 @@
362 #: bin/printer/printer.py:197
363 msgid "Error! No Data found. Make sure you have enough data to print!"
364 msgstr ""
365+"Erro! Nenhuma informação encontrada. Certifique-se que você tem informações "
366+"para imprimir!"
367
368 #
369 # File: bin/printer/printer.py, line: 215
370@@ -1149,7 +1120,7 @@
371
372 #: bin/widget_search/char.py:43
373 msgid "Error: "
374-msgstr ""
375+msgstr "Erro: "
376
377 #
378 # File: bin/widget_search/calendar.py, line: 55
379@@ -1182,35 +1153,35 @@
380
381 #: bin/widget_search/custom_filter.py:56
382 msgid "contains"
383-msgstr ""
384+msgstr "contém"
385
386 #: bin/widget_search/custom_filter.py:57
387 msgid "doesn't contain"
388-msgstr ""
389+msgstr "não contém"
390
391 #: bin/widget_search/custom_filter.py:58
392 msgid "is equal to"
393-msgstr ""
394+msgstr "é igual a"
395
396 #: bin/widget_search/custom_filter.py:59
397 msgid "is not equal to"
398-msgstr ""
399+msgstr "não é igual a"
400
401 #: bin/widget_search/custom_filter.py:60
402 msgid "greater than"
403-msgstr ""
404+msgstr "maior que"
405
406 #: bin/widget_search/custom_filter.py:61
407 msgid "less than"
408-msgstr ""
409+msgstr "menor que"
410
411 #: bin/widget_search/custom_filter.py:62
412 msgid "in"
413-msgstr ""
414+msgstr "em"
415
416 #: bin/widget_search/custom_filter.py:63
417 msgid "not in"
418-msgstr ""
419+msgstr "não em"
420
421 #: bin/widget_search/custom_filter.py:82
422 msgid ""
423@@ -1218,6 +1189,10 @@
424 "For Date and DateTime Formats, specify text in '%Y-%m-%d' and '%Y-%m-%d "
425 "%H:%M:%S' formats respectively."
426 msgstr ""
427+"Entre com valores separados por ',' se o operador 'em' ou 'não em' for "
428+"escolhido.\n"
429+"Para Formatos Data e Data e Hora, especifique o texto no formato '%Y-%m-%d' "
430+"e '%Y-%m-%d %H:%M:%S' respectivamente."
431
432 #
433 # File: bin/widget_search/checkbox.py, line: 36
434@@ -1240,7 +1215,7 @@
435
436 #: bin/widget/view/form.py:141
437 msgid "Action not defined !"
438-msgstr ""
439+msgstr "Ação não definida !"
440
441 #
442 # File: bin/widget/view/form.py, line: 182
443@@ -1296,19 +1271,19 @@
444
445 #: bin/widget/view/screen_container.py:73
446 msgid "--Actions--"
447-msgstr ""
448+msgstr "--Ações--"
449
450 #: bin/widget/view/screen_container.py:73
451 msgid "Save as a Shortcut"
452-msgstr ""
453+msgstr "Gravar como Atalho"
454
455 #: bin/widget/view/screen_container.py:73
456 msgid "Save as a Filter"
457-msgstr ""
458+msgstr "Gravar como Filtro"
459
460 #: bin/widget/view/screen_container.py:73
461 msgid "Manage Filters"
462-msgstr ""
463+msgstr "Gerenciar Filtros"
464
465 #: bin/widget/view/tree_gtk/parser.py:61
466 msgid ""
467@@ -1316,6 +1291,9 @@
468 "\n"
469 "Please Save them before sorting !"
470 msgstr ""
471+"Você tem registros sem gravar ! \n"
472+"\n"
473+"Favor Gravar antes de ordenar !"
474
475 #
476 # File: bin/widget/view/tree_gtk/editabletree.py, line: 125
477@@ -1367,46 +1345,46 @@
478
479 #: bin/widget/view/diagram_gtk/xdot.py:1712
480 msgid "Add New Node"
481-msgstr ""
482+msgstr "Adicionar Novo Nó"
483
484 #: bin/widget/view/diagram_gtk/xdot.py:1713
485 msgid "Add New Edge"
486-msgstr ""
487+msgstr "Adicionar Nova Borda"
488
489 #: bin/widget/view/diagram_gtk/xdot.py:1714
490 msgid "Enlarge the Diagram"
491-msgstr ""
492+msgstr "Ampliar o Diagrama"
493
494 #: bin/widget/view/diagram_gtk/xdot.py:1715
495 msgid "Shrink the Diagram"
496-msgstr ""
497+msgstr "Diminuir o Diagrama"
498
499 #: bin/widget/view/diagram_gtk/xdot.py:1716
500 msgid "Fit the diagram to the window"
501-msgstr ""
502+msgstr "Ajustar o diagrama na janela"
503
504 #: bin/widget/view/diagram_gtk/xdot.py:1717
505 msgid "Show the diagram at its normal size"
506-msgstr ""
507+msgstr "Mostrar o diagrama com tamanho normal"
508
509 #: bin/widget/view/diagram_gtk/xdot.py:1718
510 msgid "Print the Diagram"
511-msgstr ""
512+msgstr "Imprimir o Diagrama"
513
514 #: bin/widget/view/diagram_gtk/xdot.py:1789
515 #, python-format
516 msgid "Close Current %s"
517-msgstr ""
518+msgstr "Fechar %s Atual"
519
520 #: bin/widget/view/diagram_gtk/xdot.py:1790
521 #, python-format
522 msgid "Delete Current %s"
523-msgstr ""
524+msgstr "Excluir %s Atual"
525
526 #: bin/widget/view/diagram_gtk/xdot.py:1791
527 #, python-format
528 msgid "Edit Current %s"
529-msgstr ""
530+msgstr "Editar %s Atual"
531
532 #: bin/widget/view/diagram_gtk/xdot.py:1875
533 msgid " - Dot Viewer"
534@@ -1433,11 +1411,11 @@
535
536 #: bin/widget/view/form_gtk/parser.py:318
537 msgid "Field"
538-msgstr ""
539+msgstr "Campo"
540
541 #: bin/widget/view/form_gtk/parser.py:318
542 msgid "Object"
543-msgstr ""
544+msgstr "Objeto"
545
546 #: bin/widget/view/form_gtk/parser.py:630
547 msgid "Enter some text to the related field before adding translations!"
548@@ -1458,15 +1436,15 @@
549
550 #: bin/widget/view/form_gtk/one2many_list.py:64
551 msgid "Cancel"
552-msgstr ""
553+msgstr "Cancelar"
554
555 #: bin/widget/view/form_gtk/one2many_list.py:70
556 msgid "Save & Close"
557-msgstr ""
558+msgstr "Gravar & Fechar"
559
560 #: bin/widget/view/form_gtk/one2many_list.py:75
561 msgid "Save & New"
562-msgstr ""
563+msgstr "Gravar & Novo"
564
565 #
566 # File: bin/widget/view/form_gtk/interface.py, line: 47
567@@ -1503,22 +1481,22 @@
568 #: bin/widget/view/form_gtk/one2many_list.py:223
569 #: bin/widget/view/form_gtk/many2many.py:84
570 msgid "Previous Page"
571-msgstr ""
572+msgstr "Página Anterior"
573
574 #: bin/widget/view/form_gtk/one2many_list.py:227
575 #: bin/widget/view/form_gtk/many2many.py:88
576 msgid "Previous Record"
577-msgstr ""
578+msgstr "Registro Anterior"
579
580 #: bin/widget/view/form_gtk/one2many_list.py:235
581 #: bin/widget/view/form_gtk/many2many.py:96
582 msgid "Next Record"
583-msgstr ""
584+msgstr "Próximo Registro"
585
586 #: bin/widget/view/form_gtk/one2many_list.py:239
587 #: bin/widget/view/form_gtk/many2many.py:100
588 msgid "Next Page"
589-msgstr ""
590+msgstr "Próxima Página"
591
592 #: bin/widget/view/form_gtk/one2many_list.py:245
593 msgid "Switch"
594@@ -1527,7 +1505,7 @@
595 #: bin/widget/view/form_gtk/one2many_list.py:251
596 #: bin/widget/view/form_gtk/many2many.py:106
597 msgid "Choose Limit"
598-msgstr ""
599+msgstr "Escolher Limite"
600
601 #
602 # File: bin/widget/view/form_gtk/one2many_list.py, line: 269
603@@ -1569,11 +1547,11 @@
604
605 #: bin/widget/view/form_gtk/image.py:127
606 msgid "There is no image to save as !"
607-msgstr ""
608+msgstr "Não há imagem para gravar como !"
609
610 #: bin/widget/view/form_gtk/image.py:127
611 msgid "Warning"
612-msgstr ""
613+msgstr "Atenção"
614
615 #: bin/widget/view/form_gtk/many2one.py:158 bin/widget/view/form_gtk/url.py:55
616 msgid "Open this resource"
617@@ -1613,11 +1591,11 @@
618
619 #: bin/widget/view/form_gtk/interface.py:63
620 msgid "You can not set to the default value here !"
621-msgstr ""
622+msgstr "Você não pode definir um valor padão aqui !"
623
624 #: bin/widget/view/form_gtk/interface.py:63
625 msgid "Operation not permited"
626-msgstr ""
627+msgstr "Operação não permitida"
628
629 #
630 # File: bin/widget/view/form_gtk/binary.py, line: 77
631@@ -1711,6 +1689,8 @@
632 "(Any existing filter with the \n"
633 "same name will be replaced)"
634 msgstr ""
635+"(Qualquer filtro existente com \n"
636+"o mesmo nome será trocado)"
637
638 #
639 # File: bin/rpc.py, line: 143
640@@ -1740,12 +1720,9 @@
641 msgid "OpenERP - Login"
642 msgstr "OpenERP - Login"
643
644-#
645-# File: bin/openerp.glade, line: 118
646-# File: bin/openerp.glade, line: 7298
647 #: bin/openerp.glade:116 bin/openerp.glade:6450
648 msgid "Database:"
649-msgstr "Banco de dados:"
650+msgstr "Base de dados:"
651
652 #
653 # File: bin/openerp.glade, line: 133
654@@ -1779,35 +1756,25 @@
655 msgid "_Disconnect"
656 msgstr "_Desconectar"
657
658-#
659-# File: bin/openerp.glade, line: 300
660 #: bin/openerp.glade:308
661 msgid "Databases"
662-msgstr "Bancos de Dados"
663+msgstr "Bases de Dados"
664
665-#
666-# File: bin/openerp.glade, line: 307
667 #: bin/openerp.glade:315
668 msgid "_New database"
669-msgstr "Novo banco de _dados"
670+msgstr "_Nova base de dados"
671
672-#
673-# File: bin/openerp.glade, line: 322
674 #: bin/openerp.glade:330
675 msgid "_Restore database"
676-msgstr "_Restaurar banco de dados"
677+msgstr "_Restaurar base de dados"
678
679-#
680-# File: bin/openerp.glade, line: 337
681 #: bin/openerp.glade:345
682 msgid "_Backup database"
683-msgstr "Fazer _backup do banco de dados"
684+msgstr "Fazer _backup da base de dados"
685
686-#
687-# File: bin/openerp.glade, line: 352
688 #: bin/openerp.glade:360
689 msgid "Dro_p database"
690-msgstr "Apagar banco de dados"
691+msgstr "_Apagar base de dados"
692
693 #: bin/openerp.glade:380
694 msgid "_Download Migrations Code"
695@@ -1815,7 +1782,7 @@
696
697 #: bin/openerp.glade:395
698 msgid "_Migrate Database(s)"
699-msgstr "_Migrar base de dados"
700+msgstr "_Migrar base(s) de dados"
701
702 #
703 # File: bin/openerp.glade, line: 372
704@@ -2226,7 +2193,7 @@
705
706 #: bin/openerp.glade:1351
707 msgid "Diagram"
708-msgstr ""
709+msgstr "Diagrama"
710
711 #
712 # File: bin/openerp.glade, line: 1313
713@@ -2286,7 +2253,7 @@
714
715 #: bin/openerp.glade:1512
716 msgid "Company:"
717-msgstr ""
718+msgstr "Empresa:"
719
720 #: bin/openerp.glade:1535
721 msgid "Requests:"
722@@ -3103,29 +3070,21 @@
723 msgid "Port:"
724 msgstr "Porta:"
725
726-#
727-# File: bin/openerp.glade, line: 7237
728 #: bin/openerp.glade:6389
729 msgid "Choose a database..."
730-msgstr "Escolha um banco de dados..."
731+msgstr "Escolha uma base de dados..."
732
733-#
734-# File: bin/openerp.glade, line: 7252
735 #: bin/openerp.glade:6404
736 msgid "<b>Backup a database</b>"
737-msgstr "<b>Fazer Backup de um Banco de Dados</b>"
738+msgstr "<b>Fazer backup de uma base de dados</b>"
739
740-#
741-# File: bin/openerp.glade, line: 7483
742 #: bin/openerp.glade:6645
743 msgid "Restore a database"
744-msgstr "Restaurar um banco de dados"
745+msgstr "Restaurar uma base de dados"
746
747-#
748-# File: bin/openerp.glade, line: 7496
749 #: bin/openerp.glade:6658
750 msgid "<b>Restore a database</b>"
751-msgstr "<b>Restaurar um banco de dados</b>"
752+msgstr "<b>Restaurar uma base de dados</b>"
753
754 #
755 # File: bin/openerp.glade, line: 7540
756@@ -3133,11 +3092,9 @@
757 msgid "(must not contain any special char)"
758 msgstr "(não deve conter caracteres especiais)"
759
760-#
761-# File: bin/openerp.glade, line: 7569
762 #: bin/openerp.glade:6732
763 msgid "New database name:"
764-msgstr "Novo nome do banco de dados:"
765+msgstr "Nome da nova base de dados:"
766
767 #
768 # File: bin/openerp.glade, line: 7669
769@@ -3147,17 +3104,13 @@
770 msgid "http://localhost:8069"
771 msgstr "http://localhost:8069"
772
773-#
774-# File: bin/openerp.glade, line: 7743
775 #: bin/openerp.glade:6906
776 msgid "Create a new database"
777-msgstr "Criar um novo banco de dados"
778+msgstr "Criar uma nova base de dados"
779
780-#
781-# File: bin/openerp.glade, line: 7756
782 #: bin/openerp.glade:6919
783 msgid "<b>Create a new database</b>"
784-msgstr "<b>Criar um novo banco de dados</b>"
785+msgstr "<b>Criar uma nova base de dados</b>"
786
787 #
788 # File: bin/openerp.glade, line: 7827
789@@ -3173,16 +3126,15 @@
790 msgid ""
791 "<sup><b><span foreground=\"dark green\">?</span></b></sup>OpenERP Server:"
792 msgstr ""
793+"<sup><b><span foreground=\"dark green\">?</span></b></sup>Servidor OpenERP:"
794
795-#
796-# File: bin/openerp.glade, line: 7861
797 #: bin/openerp.glade:7025
798 msgid ""
799 "This is the password of the user that have the rights to administer "
800 "databases. This is not a OpenERP user, just a super administrator. If you "
801 "did not changed it, the password is 'admin' after installation."
802 msgstr ""
803-"Esta é a senha do usuário que tem direitos para administrar bancos de dados. "
804+"Esta é a senha do usuário que tem direitos para administrar bases de dados. "
805 "Este não é um usuário OpenERP, mas sim um super administrador. Se você não "
806 "alterou, a senha padrão é 'admin' após a instalação."
807
808@@ -3191,10 +3143,12 @@
809 "<sup><b><span foreground=\"dark green\">?</span></b></sup>Super "
810 "Administrator Password:"
811 msgstr ""
812+"<sup><b><span foreground=\"dark green\">?</span></b></sup>Senha de Super "
813+"Administrador:"
814
815 #: bin/openerp.glade:7048
816 msgid "admin"
817-msgstr ""
818+msgstr "admin"
819
820 #
821 # File: bin/openerp.glade, line: 7897
822@@ -3202,30 +3156,28 @@
823 msgid "(<i>admin</i>, by default)"
824 msgstr "(<i>admin</i>, por padrão)"
825
826-#
827-# File: bin/openerp.glade, line: 7962
828 #: bin/openerp.glade:7127
829 msgid ""
830 "Choose the name of the database that will be created. The name must not "
831 "contain any special character. Exemple: 'terp'."
832 msgstr ""
833-"Escolha o nome do banco de dados que será criado. O nome não deve conter "
834+"Escolha o nome da base de dados que será criada. O nome não deve conter "
835 "caracteres especiais. Exemplo: 'terp'."
836
837 #: bin/openerp.glade:7129
838 msgid ""
839 "<sup><b><span foreground=\"dark green\">?</span></b></sup>New Database Name:"
840 msgstr ""
841+"<sup><b><span foreground=\"dark green\">?</span></b></sup>Nome da Nova Base "
842+"de Dados:"
843
844-#
845-# File: bin/openerp.glade, line: 7988
846 #: bin/openerp.glade:7154
847 msgid ""
848 "Choose the default language that will be installed for this database. You "
849 "will be able to install new languages after installation through the "
850 "administration menu."
851 msgstr ""
852-"Escolha o idioma padrão que será instalado para este banco de dados. Você "
853+"Escolha o idioma padrão que será instalado para esta base de dados. Você "
854 "poderá instalar novos idiomas depois da instalação, através do menu de "
855 "administração."
856
857@@ -3233,32 +3185,38 @@
858 msgid ""
859 "<sup><b><span foreground=\"dark green\">?</span></b></sup>Default Language:"
860 msgstr ""
861+"<sup><b><span foreground=\"dark green\">?</span></b></sup>Idioma Padrão:"
862
863 #: bin/openerp.glade:7169
864 msgid ""
865 "This is the password of the 'admin' user that will be created in your new "
866 "database."
867 msgstr ""
868+"Esta é a senha para o usuário 'admin' que será criada em sua nova base de "
869+"dados."
870
871 #: bin/openerp.glade:7171
872 msgid ""
873 "<sup><b><span foreground=\"dark green\">?</span></b></sup>Administrator "
874 "Password:"
875 msgstr ""
876+"<sup><b><span foreground=\"dark green\">?</span></b></sup>Senha de "
877+"Administrador:"
878
879 #: bin/openerp.glade:7184
880 msgid ""
881 "This is the password of the 'admin' user that will be created in your new "
882 "database. It has to be the same than the above field."
883 msgstr ""
884+"Esta é a senha do usuário 'admin' que será criado em sua base de dados. "
885+"Precisa ser a mesma informada no campo acima."
886
887 #: bin/openerp.glade:7186
888 msgid ""
889 "<sup><b><span foreground=\"dark green\">?</span></b></sup>Confirm Password:"
890 msgstr ""
891+"<sup><b><span foreground=\"dark green\">?</span></b></sup>Confirme a Senha:"
892
893-#
894-# File: bin/openerp.glade, line: 8110
895 #: bin/openerp.glade:7279
896 msgid ""
897 "Check this box if you want demonstration data to be installed on your new "
898@@ -3266,14 +3224,16 @@
899 "products, partners, etc."
900 msgstr ""
901 "Marque esta caixa se você deseja que os dados de demonstração sejam "
902-"instalados no seu novo banco de dados. Estes dados vão ajudar você a "
903-"entender o OpenERP, com produtos pré-definidos, parceiros, etc."
904+"instalados no sua nova base de dados. Estes dados vão ajudar você a entender "
905+"o OpenERP, com produtos pré-definidos, parceiros, etc."
906
907 #: bin/openerp.glade:7282
908 msgid ""
909 "<sup><b><span foreground=\"dark green\">?</span></b></sup>Load Demonstration "
910 "Data:"
911 msgstr ""
912+"<sup><b><span foreground=\"dark green\">?</span></b></sup>Carregar Dados de "
913+"Demonstração:"
914
915 #
916 # File: bin/openerp.glade, line: 8170
917@@ -3387,7 +3347,7 @@
918
919 #: bin/openerp.glade:8289
920 msgid "Conditional Operators"
921-msgstr ""
922+msgstr "Operadores Condicionais"
923
924 #: bin/openerp.glade:8316
925 msgid "The Choice will be applied with next filter if any"
926@@ -3398,10 +3358,12 @@
927 "AND\n"
928 "OR"
929 msgstr ""
930+"E\n"
931+"OU"
932
933 #: bin/openerp.glade:8330
934 msgid "Remove Filter"
935-msgstr ""
936+msgstr "Remover Filtro"
937
938 #: bin/openerp.glade:8349
939 msgid "Filter Entry"
940@@ -3418,10 +3380,11 @@
941 #: bin/win_error.glade:100
942 msgid "Click here for details about the publisher warranty proposition"
943 msgstr ""
944+"Clique aqui para detalhes sobre a proposta de garantia do distribuidor"
945
946 #: bin/win_error.glade:120
947 msgid "<i>_Publisher Warranty</i>"
948-msgstr ""
949+msgstr "<i>_Garantia do Distribuidor</i>"
950
951 #: bin/win_error.glade:151
952 msgid ""
953@@ -3431,6 +3394,11 @@
954 "you shortly.\n"
955 "</i>"
956 msgstr ""
957+"<b>Contrato de Garantia do Distribuidor.</b>\n"
958+"<i>\n"
959+"Sua requisição será envidada para o OpenERP e a equipe de garantia do "
960+"distribuidor responderá rapidamente.\n"
961+"</i>"
962
963 #
964 # File: bin/win_error.glade, line: 184
965@@ -3446,11 +3414,11 @@
966
967 #: bin/win_error.glade:285
968 msgid "Send to Publisher Warranty Team"
969-msgstr ""
970+msgstr "Enviar para a Equipe de Garantia do Distribuidor"
971
972 #: bin/win_error.glade:318
973 msgid "Summary of the problem:"
974-msgstr ""
975+msgstr "Resumo do problema:"
976
977 #: bin/win_error.glade:360
978 msgid "<i>_Support Request</i>"
979
980=== modified file 'bin/po/ur.po'
981--- bin/po/ur.po 2011-01-31 04:55:13 +0000
982+++ bin/po/ur.po 2011-02-11 07:40:17 +0000
983@@ -8,13 +8,13 @@
984 "Project-Id-Version: openobject-client\n"
985 "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
986 "POT-Creation-Date: 2010-12-13 18:11+0100\n"
987-"PO-Revision-Date: 2011-01-30 17:00+0000\n"
988+"PO-Revision-Date: 2011-02-05 16:48+0000\n"
989 "Last-Translator: Aamir Riaz <Unknown>\n"
990 "Language-Team: Urdu <ur@li.org>\n"
991 "MIME-Version: 1.0\n"
992 "Content-Type: text/plain; charset=UTF-8\n"
993 "Content-Transfer-Encoding: 8bit\n"
994-"X-Launchpad-Export-Date: 2011-01-31 04:55+0000\n"
995+"X-Launchpad-Export-Date: 2011-02-06 04:53+0000\n"
996 "X-Generator: Launchpad (build 12177)\n"
997
998 #: bin/plugins/__init__.py:27
999@@ -139,6 +139,9 @@
1000 "The versions of the server (%s) and the client (%s) missmatch. The client "
1001 "may not work properly. Use it at your own risks."
1002 msgstr ""
1003+"سرورکاورژن (%s) اورکلائنٹ کاورژن (%s) \r\n"
1004+"مختلف ھیں، کلائنٹ صحیح کام نھیں کرسکتا،\r\n"
1005+" اپنی ذمھداری پر استعمال کریں"
1006
1007 #: bin/modules/gui/main.py:610
1008 msgid "Sorry,'"
1009@@ -544,38 +547,40 @@
1010 "Error processing your first line of the file.\n"
1011 "Field %s is unknown !"
1012 msgstr ""
1013+"آپ کی فائل کی پہلی سطر پر کاروائی کی خرابی.\n"
1014+"فیلڈ %s نامعلوم ہے!"
1015
1016 #: bin/modules/gui/window/win_import.py:190
1017 msgid "Import Error."
1018-msgstr ""
1019+msgstr "درآمدکی خرابی۔"
1020
1021 #: bin/modules/gui/window/win_import.py:221
1022 msgid "You have not selected any fields to import"
1023-msgstr ""
1024+msgstr "آپ نےکسی فیلڈکا انتخاب نہیں کیا درآمد کرنےکیلیے-"
1025
1026 #: bin/modules/gui/window/win_extension.py:42
1027 msgid "Extension"
1028-msgstr ""
1029+msgstr "توسیع"
1030
1031 #: bin/modules/gui/window/win_extension.py:42
1032 msgid "Application"
1033-msgstr ""
1034+msgstr "ایپلیکیشن"
1035
1036 #: bin/modules/gui/window/win_extension.py:42
1037 msgid "Print Processor"
1038-msgstr ""
1039+msgstr "پرنٹ پروسیسر"
1040
1041 #: bin/modules/gui/window/win_extension.py:114
1042 msgid "This extension is already defined"
1043-msgstr ""
1044+msgstr "اس توسیع کی پھلےسےوظاحت ھو چُکی ھے-"
1045
1046 #: bin/modules/gui/window/win_extension.py:114 bin/openerp.glade:7684
1047 msgid "Extension Manager"
1048-msgstr ""
1049+msgstr "توسیع کامینیجر"
1050
1051 #: bin/modules/gui/window/win_selection.py:51
1052 msgid "Name"
1053-msgstr ""
1054+msgstr "نام"
1055
1056 #: bin/modules/gui/window/win_selection.py:55
1057 msgid "Ressource Name"
1058@@ -627,11 +632,11 @@
1059
1060 #: bin/modules/gui/window/tree.py:234
1061 msgid "Unable to chroot: no tree resource selected"
1062-msgstr ""
1063+msgstr "وسائل کا انتخاب نھیں ھُوا tree : chroot میں ناکام"
1064
1065 #: bin/modules/gui/window/win_export.py:50
1066 msgid " record(s) saved !"
1067-msgstr ""
1068+msgstr " ريکارڈز بچا لیا!"
1069
1070 #: bin/modules/gui/window/win_export.py:53
1071 msgid ""
1072@@ -674,32 +679,32 @@
1073
1074 #: bin/options.py:110
1075 msgid "specify alternate config file"
1076-msgstr ""
1077+msgstr "متبادل وضعی فائل کی وضاحت کریں۔"
1078
1079 #: bin/options.py:111
1080 msgid "Enable basic debugging. Alias for '--log-level=debug'"
1081-msgstr ""
1082+msgstr "بنیادی ٹھیک کرنا فعال کریں. عرفیت کے لئے '--log-level=debug'"
1083
1084 #: bin/options.py:112
1085 #, python-format
1086 msgid "specify the log level: %s"
1087-msgstr ""
1088+msgstr "لاگ کے درجہ کے وضاحت کریں: %s"
1089
1090 #: bin/options.py:113
1091 msgid "specify the user login"
1092-msgstr ""
1093+msgstr "صارف لاگ ان کی وضاحت کریں"
1094
1095 #: bin/options.py:114
1096 msgid "specify the server port"
1097-msgstr ""
1098+msgstr "سرور پورٹ کی وضاحت کریں"
1099
1100 #: bin/options.py:115
1101 msgid "specify the server ip/name"
1102-msgstr ""
1103+msgstr "سرور آئپی/نام کی وضاحت کریں"
1104
1105 #: bin/common/common.py:89
1106 msgid "Close current tip"
1107-msgstr ""
1108+msgstr "موجودھ اشاروں کوبندکریں"
1109
1110 #: bin/common/common.py:90
1111 msgid ""
1112@@ -711,7 +716,7 @@
1113
1114 #: bin/common/common.py:100
1115 msgid "Disable all tips"
1116-msgstr ""
1117+msgstr "تمام اشاروں کوغیرفعال کریں"
1118
1119 #: bin/common/common.py:101
1120 msgid ""
1121@@ -754,7 +759,7 @@
1122
1123 #: bin/common/common.py:367
1124 msgid "Support request sent !"
1125-msgstr ""
1126+msgstr "مدد کی درخواست بھیج کو دیا گیا!"
1127
1128 #: bin/common/common.py:387 bin/common/common.py:430
1129 msgid ""
1130@@ -826,39 +831,43 @@
1131
1132 #: bin/common/common.py:491
1133 msgid "Error"
1134-msgstr ""
1135+msgstr "خرابی"
1136
1137 #: bin/common/common.py:646
1138 msgid "Open with..."
1139-msgstr ""
1140+msgstr "کےساتھ کھولیں۔۔۔"
1141
1142 #: bin/translate.py:183
1143 #, python-format
1144 msgid "Unable to set locale %s: %s"
1145-msgstr ""
1146+msgstr "مقامی قائم کرنے میں ناکامی %s: %s"
1147
1148 #: bin/printer/printer.py:184
1149 #, python-format
1150 msgid "Unable to handle %s filetype"
1151-msgstr ""
1152+msgstr "فائل ٹائپ کوسنبھالنےکےقابل نھیں %s"
1153
1154 #: bin/printer/printer.py:189
1155 msgid ""
1156 "Linux Automatic Printing not implemented.\n"
1157 "Use preview option !"
1158 msgstr ""
1159+"لینکس خودکار پرنٹنگ لاگو نہیں ھے۔\n"
1160+"جائزھ کاآپشن استعمال کریں!"
1161
1162 #: bin/printer/printer.py:197
1163 msgid "Error! No Data found. Make sure you have enough data to print!"
1164 msgstr ""
1165+"خرابی! پرنٹ کرنےکیلیےکوئ دیٹانھیں ھے. پرنٹ کرنے کے لئے کافی ڈیٹا یقینی "
1166+"بنائیں!"
1167
1168 #: bin/printer/printer.py:224
1169 msgid "Error writing the file!"
1170-msgstr ""
1171+msgstr "فائل لکھنے میں خرابی!"
1172
1173 #: bin/openerp-client.py:140
1174 msgid "Closing OpenERP, KeyboardInterrupt"
1175-msgstr ""
1176+msgstr "اوپن ای آر پی بند ھورھی ھے، KeyboardInterrupt"
1177
1178 #: bin/widget_search/reference.py:78 bin/widget_search/filter.py:74
1179 #: bin/widget_search/selection.py:116 bin/widget_search/spinbutton.py:72
1180@@ -893,11 +902,11 @@
1181
1182 #: bin/widget_search/char.py:43
1183 msgid "Error: "
1184-msgstr ""
1185+msgstr "خرابی: "
1186
1187 #: bin/widget_search/calendar.py:50 bin/widget_search/calendar.py:177
1188 msgid "Start date"
1189-msgstr ""
1190+msgstr "شروع کرنے کی تاریخ"
1191
1192 #: bin/widget_search/calendar.py:54 bin/widget_search/calendar.py:74
1193 #: bin/widget_search/calendar.py:181 bin/widget_search/calendar.py:201
1194@@ -908,7 +917,7 @@
1195
1196 #: bin/widget_search/calendar.py:70 bin/widget_search/calendar.py:197
1197 msgid "End date"
1198-msgstr ""
1199+msgstr "آخری تاریخ"
1200
1201 #: bin/widget_search/calendar.py:129 bin/widget_search/calendar.py:249
1202 #: bin/widget/view/form_gtk/calendar.py:135
1203@@ -918,35 +927,35 @@
1204
1205 #: bin/widget_search/custom_filter.py:56
1206 msgid "contains"
1207-msgstr ""
1208+msgstr "مُشتمل ھوتاھے"
1209
1210 #: bin/widget_search/custom_filter.py:57
1211 msgid "doesn't contain"
1212-msgstr ""
1213+msgstr "مُشتمل نھیں ھوتاھے"
1214
1215 #: bin/widget_search/custom_filter.py:58
1216 msgid "is equal to"
1217-msgstr ""
1218+msgstr "کےبرابرھے"
1219
1220 #: bin/widget_search/custom_filter.py:59
1221 msgid "is not equal to"
1222-msgstr ""
1223+msgstr "کےبرابرنھیں ھے"
1224
1225 #: bin/widget_search/custom_filter.py:60
1226 msgid "greater than"
1227-msgstr ""
1228+msgstr "سےبڑھکر"
1229
1230 #: bin/widget_search/custom_filter.py:61
1231 msgid "less than"
1232-msgstr ""
1233+msgstr "سےکمتر"
1234
1235 #: bin/widget_search/custom_filter.py:62
1236 msgid "in"
1237-msgstr ""
1238+msgstr "اندر"
1239
1240 #: bin/widget_search/custom_filter.py:63
1241 msgid "not in"
1242-msgstr ""
1243+msgstr "اندر نھیں"
1244
1245 #: bin/widget_search/custom_filter.py:82
1246 msgid ""
1247
1248=== modified file 'bin/release.py'
1249--- bin/release.py 2011-01-20 19:12:50 +0000
1250+++ bin/release.py 2011-02-11 07:40:17 +0000
1251@@ -21,8 +21,8 @@
1252 #
1253
1254 name = 'openerp-client'
1255-version = '6.0.1'
1256-major_version = '6.0'
1257+version = '6.1-dev'
1258+major_version = '6.1'
1259 description = 'OpenERP Client'
1260 long_desc = '''OpenERP is a complete ERP and CRM. The main features are accounting (analytic
1261 and financial), stock management, sales and purchases management, tasks
1262
1263=== modified file 'bin/widget/model/field.py'
1264--- bin/widget/model/field.py 2011-01-18 08:26:02 +0000
1265+++ bin/widget/model/field.py 2011-02-11 07:40:17 +0000
1266@@ -45,12 +45,31 @@
1267 klass = TYPES.get(type, CharField)
1268 return klass
1269
1270+class M2O_SelectionField(dict):
1271+ def __init__(self ,*args, **kwargs):
1272+ self.swap = {}
1273+
1274+ def __setitem__(self, key, value):
1275+ self.swap[value] = key
1276+ super(M2O_SelectionField, self).__setitem__(key, value)
1277+
1278+ def update(self, *args, **kwargs):
1279+ for key, val in args[0].items():
1280+ self.swap[val] = key
1281+ super(M2O_SelectionField, self).update(args[0])
1282+
1283+ def get_value(self, key):
1284+ return self.get(key, '')
1285+
1286+ def get_key(self,value):
1287+ return self.swap.get(value, False)
1288
1289 class CharField(object):
1290 def __init__(self, parent, attrs):
1291 self.parent = parent
1292 self.attrs = attrs
1293 self.name = attrs['name']
1294+ self.selection = M2O_SelectionField()
1295 self.internal = False
1296 self.default_attrs = {}
1297
1298@@ -103,12 +122,12 @@
1299 return True
1300
1301 def get(self, model, check_load=True, readonly=True, modified=False):
1302- return model.value.get(self.name, False) or False
1303+ return model.value.get(self.name, False)
1304
1305 def set_client(self, model, value, test_state=True, force_change=False):
1306 internal = model.value.get(self.name, False)
1307 self.set(model, value, test_state)
1308- if (internal or False) != (model.value.get(self.name,False) or False):
1309+ if (internal or False) != (model.value.get(self.name, False) or False):
1310 model.modified = True
1311 model.modified_fields.setdefault(self.name)
1312 self.sig_changed(model)
1313@@ -135,7 +154,7 @@
1314 try:
1315 attrs_changes = eval(self.attrs.get('attrs',"{}"))
1316 except:
1317- attrs_changes = eval(self.attrs.get('attrs',"{}"),model.value)
1318+ attrs_changes = eval(self.attrs.get('attrs',"{}"), model.value)
1319 for k,v in attrs_changes.items():
1320 for i in range(0,len(v)):
1321 if v[i][2]:
1322@@ -236,14 +255,21 @@
1323
1324
1325 class SelectionField(CharField):
1326+
1327+ def get(self, model, check_load=True, readonly=True, modified=False):
1328+ return model.value.get(self.name, False)
1329+
1330 def set(self, model, value, test_state=True, modified=False):
1331+ self.selection.update(dict(self.attrs.get('selection',[])))
1332+ if isinstance(value,(list,tuple)) and len(value):
1333+ self.selection[value[0]] = value[1]
1334+
1335 value = isinstance(value,(list,tuple)) and len(value) and value[0] or value
1336
1337 if not self.get_state_attrs(model).get('required', False) and value is None:
1338 super(SelectionField, self).set(model, value, test_state, modified)
1339-
1340- if value in [sel[0] for sel in self.attrs['selection']]:
1341- super(SelectionField, self).set(model, value, test_state, modified)
1342+
1343+ super(SelectionField, self).set(model, value, test_state, modified)
1344
1345 class FloatField(CharField):
1346 def validate(self, model):
1347@@ -297,6 +323,7 @@
1348 def get_client(self, model):
1349 #model._check_load()
1350 if model.value[self.name]:
1351+ self.selection.update(dict([model.value[self.name]]))
1352 return model.value[self.name][1]
1353 return False
1354
1355
1356=== modified file 'bin/widget/model/record.py'
1357--- bin/widget/model/record.py 2011-01-25 06:56:46 +0000
1358+++ bin/widget/model/record.py 2011-02-11 07:40:17 +0000
1359@@ -33,6 +33,7 @@
1360 from gtk import glade
1361 import tools
1362 from field import O2MField
1363+from field import SelectionField
1364
1365 class EvalEnvironment(object):
1366 def __init__(self, parent):
1367@@ -230,6 +231,9 @@
1368 if self.mgroup.mfields[fieldname].attrs.get('on_change',False):
1369 fields_with_on_change[fieldname] = value
1370 else:
1371+ if self.mgroup.mfields[fieldname].attrs.get('widget') == 'selection' and value:
1372+ relation = self.mgroup.mfields[fieldname].attrs['relation']
1373+ value = rpc.session.rpc_exec_auth('/object', 'execute', relation, 'name_search', '', [('id','=',value)], 'ilike')[0]
1374 self.mgroup.mfields[fieldname].set_default(self, value)
1375 for field, value in fields_with_on_change.items():
1376 self.mgroup.mfields[field].set_default(self, value)
1377@@ -291,7 +295,7 @@
1378 d['current_date'] = time.strftime('%Y-%m-%d')
1379 d['time'] = time
1380 d['context'] = self.context_get()
1381- d['active_id'] = self.id
1382+ d['active_id'] = self.id or False
1383 if self.parent:
1384 d['parent'] = EvalEnvironment(self.parent)
1385 val = tools.expr_eval(dom, d)
1386
1387=== modified file 'bin/widget/screen/screen.py'
1388--- bin/widget/screen/screen.py 2011-01-27 12:43:03 +0000
1389+++ bin/widget/screen/screen.py 2011-02-11 07:40:17 +0000
1390@@ -593,6 +593,8 @@
1391 if attrs.get('widget', False):
1392 if attrs['widget']=='one2many_list':
1393 attrs['widget']='one2many'
1394+# attrs['py_field_type'] = attrs['type']
1395+ attrs['py_type'] = fields[str(attrs['name'])]['type']
1396 attrs['type'] = attrs['widget']
1397 if attrs.get('selection',[]):
1398 attrs['selection'] = eval(attrs['selection'])
1399
1400=== modified file 'bin/widget/view/form_gtk/selection.py'
1401--- bin/widget/view/form_gtk/selection.py 2010-07-16 05:41:32 +0000
1402+++ bin/widget/view/form_gtk/selection.py 2011-02-11 07:40:17 +0000
1403@@ -23,7 +23,7 @@
1404 import interface
1405 import gtk
1406 import gobject
1407-
1408+from rpc import RPCProxy
1409 import gettext
1410
1411 class selection(interface.widget_interface):
1412@@ -31,109 +31,91 @@
1413 interface.widget_interface.__init__(self, window, parent, model, attrs)
1414
1415 self.widget = gtk.HBox(spacing=3)
1416- self.entry = gtk.ComboBoxEntry()
1417+ self.function = self.attrs.get('has_func', False)
1418+ self.name = attrs['name']
1419+ self.attrs = attrs
1420+ self.entry = gtk.combo_box_entry_new_text()
1421+ self.entry.connect('notify::popup-shown', self.popup_show)
1422 self.child = self.entry.get_child()
1423+ self.relation_model = self.attrs.get('relation', '')
1424+ self.object_model = self.attrs.get('model','')
1425 self.child.set_property('activates_default', True)
1426 self.child.connect('changed', self.sig_changed)
1427 self.child.connect('populate-popup', self._menu_open)
1428- self.child.connect('key_press_event', self.sig_key_press)
1429- self.child.connect('activate', self.sig_activate)
1430 self.child.connect_after('focus-out-event', self.sig_activate)
1431- self.entry.set_size_request(int(attrs.get('size', -1)), -1)
1432 self.widget.pack_start(self.entry, expand=True, fill=True)
1433
1434 # the dropdown button is not focusable by a tab
1435 self.widget.set_focus_chain([self.child])
1436- self.ok = True
1437+ self.set_popdown(attrs.get('selection',[]))
1438 self._selection={}
1439-
1440- self.set_popdown(attrs.get('selection', []))
1441+ self.entry_text = ""
1442+
1443+
1444+ def popup_show(self, combobox, popup_show):
1445+ text = self.child.get_text()
1446+ if self._view.modelfield.selection.get_key(text):
1447+ text = ""
1448+ if combobox.get_property('popup-shown'):
1449+ domain = self._view.modelfield.domain_get(self._view.model)
1450+ context = self._view.modelfield.context_get(self._view.model)
1451+ if self.attrs.get('widget') == 'selection':
1452+ rpc = RPCProxy(self.relation_model)
1453+ selection = rpc.name_search(text, domain, 'ilike', context, False)
1454+ self.set_popdown(selection)
1455+ if self.function:
1456+ rpc = RPCProxy(self.object_model)
1457+ selection = rpc.fields_get(self.name, context)[self.name]['selection']
1458+ self.set_popdown(selection)
1459
1460 def set_popdown(self, selection):
1461- self.model = gtk.ListStore(gobject.TYPE_STRING)
1462+ self.model = self.entry.get_model()
1463+ self.model.clear()
1464 self._selection={}
1465 lst = []
1466- for (value, name) in selection:
1467- name = str(name)
1468+ if not selection:
1469+ selection = [(False, '')]
1470+ for (i,j) in selection:
1471+ name = str(j)
1472 lst.append(name)
1473- self._selection[name] = value
1474- i = self.model.append()
1475- self.model.set(i, 0, name)
1476- self.entry.set_model(self.model)
1477- self.entry.set_text_column(0)
1478- return lst
1479+ self._selection[i]=name
1480+ self.entry.append_text(name)
1481
1482 def _readonly_set(self, value):
1483 interface.widget_interface._readonly_set(self, value)
1484 self.entry.set_sensitive(not value)
1485
1486- def value_get(self):
1487- res = self.child.get_text()
1488- return self._selection.get(res, False)
1489-
1490- def sig_key_press(self, widget, event):
1491- # allow showing available entries by hitting "ctrl+space"
1492- completion=gtk.EntryCompletion()
1493- if hasattr(completion, 'set_inline_selection'):
1494- completion.set_inline_selection(True)
1495- if (event.type == gtk.gdk.KEY_PRESS) \
1496- and ((event.state & gtk.gdk.CONTROL_MASK) != 0) \
1497- and (event.keyval == gtk.keysyms.space):
1498- self.entry.popup()
1499- elif not (event.keyval == gtk.keysyms.Up or event.keyval == gtk.keysyms.Down):
1500- completion.set_match_func(self.match_func,widget)
1501- completion.set_model(self.model)
1502- widget.set_completion(completion)
1503- completion.set_text_column(0)
1504-
1505- def match_func(self, completion, key, iter, widget):
1506- model = completion.get_model()
1507- return model[iter][0].lower().find(widget.get_text().lower()) >= 0 and True or False
1508-
1509 def sig_activate(self, *args):
1510 text = self.child.get_text()
1511- value = False
1512- if text:
1513- for txt, val in self._selection.items():
1514- if not val:
1515- continue
1516- if txt[:len(text)].lower() == text.lower():
1517- value = val
1518- if len(txt) == len(text):
1519- break
1520+ value = self._view.modelfield.selection.get_key(text)
1521+ if not value:
1522+ self.entry_text = text
1523 self._view.modelfield.set_client(self._view.model, value, force_change=True)
1524 self.display(self._view.model, self._view.modelfield)
1525
1526-
1527 def set_value(self, model, model_field):
1528- model_field.set_client(model, self.value_get())
1529-
1530- def _menu_sig_default_set(self):
1531- self.set_value(self._view.model, self._view.modelfield)
1532- super(selection, self)._menu_sig_default_set()
1533+ model_field.selection.update(self._selection)
1534+ text = self.child.get_text()
1535+ value = False
1536+ if text:
1537+ model_field.selection.get_key(text)
1538+ value = model_field.selection.get_key(text)
1539+ model_field.set_client(model, value)
1540
1541 def display(self, model, model_field):
1542- self.ok = False
1543 if not model_field:
1544 self.child.set_text('')
1545- self.ok = True
1546- return False
1547+ return
1548+ model_field.selection.update(dict(self.attrs.get('selection',[])))
1549 super(selection, self).display(model, model_field)
1550- value = model_field.get(model)
1551- if not value:
1552- self.child.set_text('')
1553- else:
1554- found = False
1555- for long_text, sel_value in self._selection.items():
1556- if sel_value == value:
1557- self.child.set_text(long_text)
1558- found = True
1559- break
1560- self.ok = True
1561+ key = model_field.get(model, False)
1562+# model_field.selection.update(self._selection)
1563+ text = model_field.selection.get_value(key)
1564+ self.child.set_text(self.entry_text or text)
1565+ self.entry_text = ""
1566
1567- def sig_changed(self, *args):
1568- if self.ok:
1569- self._focus_out()
1570+ def sig_changed(self, combox):
1571+ self._focus_out()
1572
1573 def _color_widget(self):
1574 return self.child
1575@@ -141,4 +123,3 @@
1576 def grab_focus(self):
1577 return self.entry.grab_focus()
1578 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
1579-
1580
1581=== modified file 'bin/widget/view/list.py'
1582--- bin/widget/view/list.py 2011-01-17 20:28:40 +0000
1583+++ bin/widget/view/list.py 2011-02-11 07:40:17 +0000
1584@@ -851,7 +851,7 @@
1585 if col in self.widget_tree.handlers:
1586 if self.widget_tree.handlers[col]:
1587 renderer.disconnect(self.widget_tree.handlers[col])
1588- self.widget_tree.handlers[col] = renderer.connect_after('editing-started', send_keys, self.widget_tree)
1589+ self.widget_tree.handlers[col] = renderer.connect_after('editing-started', send_keys, self.widget_tree, col.name)
1590
1591
1592 def set_invisible_attr(self):
1593
1594=== modified file 'bin/widget/view/tree_gtk/editabletree.py'
1595--- bin/widget/view/tree_gtk/editabletree.py 2010-12-23 09:52:21 +0000
1596+++ bin/widget/view/tree_gtk/editabletree.py 2011-02-11 07:40:17 +0000
1597@@ -149,7 +149,12 @@
1598 def get_cursor(self):
1599 res = super(EditableTreeView, self).get_cursor()
1600 return res
1601-
1602+
1603+ def get_current_model(self):
1604+ path, column = self.get_cursor()
1605+ store = self.get_model()
1606+ return store.get_value(store.get_iter(path), 0)
1607+
1608 def set_value(self):
1609 path, column = self.get_cursor()
1610 store = self.get_model()
1611@@ -175,7 +180,7 @@
1612 def on_keypressed(self, entry, event, cell_value):
1613 path, column = self.get_cursor()
1614 store = self.get_model()
1615- model = store.get_value(store.get_iter(path), 0)
1616+ model = self.get_current_model()
1617 if event.keyval in self.leaving_events:
1618 shift_pressed = bool(gtk.gdk.SHIFT_MASK & event.state)
1619 if isinstance(entry, gtk.Entry):
1620
1621=== modified file 'bin/widget/view/tree_gtk/parser.py'
1622--- bin/widget/view/tree_gtk/parser.py 2011-01-31 10:28:17 +0000
1623+++ bin/widget/view/tree_gtk/parser.py 2011-02-11 07:40:17 +0000
1624@@ -33,6 +33,7 @@
1625 from editabletree import EditableTreeView
1626 from widget.view import interface
1627 from widget.view.list import group_record
1628+from widget.model.field import SelectionField, M2OField
1629 import time
1630 import date_renderer
1631
1632@@ -47,13 +48,16 @@
1633 import gobject
1634 import pango
1635
1636-def send_keys(renderer, entry, position, treeview):
1637- if entry:
1638+def send_keys(renderer, entry, position, treeview, col_name):
1639+ if entry:
1640 entry.connect('key_press_event', treeview.on_keypressed, renderer.get_property('text'))
1641 entry.set_data('renderer', renderer)
1642 entry.editing_done_id = entry.connect('editing_done', treeview.on_editing_done)
1643 if isinstance(entry, gtk.ComboBoxEntry):
1644 entry.connect('changed', treeview.on_editing_done)
1645+ if isinstance(entry, gtk.ComboBoxEntry):
1646+ popup = treeview.cells[col_name].popup
1647+ entry.connect('notify::popup-shown', popup, treeview)
1648
1649 def sort_model(column, screen):
1650 unsaved_model = [x for x in screen.models if x.id == None or x.modified]
1651@@ -107,10 +111,8 @@
1652 treeview.sequence = False
1653 treeview.connect("motion-notify-event", treeview.set_tooltip)
1654 treeview.connect('key-press-event', treeview.on_tree_key_press)
1655-
1656 for node in root_node:
1657 node_attrs = tools.node_attributes(node)
1658-
1659 if node.tag == 'button':
1660 cell = Cell('button')(node_attrs['string'], treeview, node_attrs)
1661 cell.name = node_attrs['name']
1662@@ -158,16 +160,17 @@
1663 self.window)
1664 treeview.cells[fname] = cell
1665 renderer = cell.renderer
1666-
1667+ col = gtk.TreeViewColumn(None, renderer)
1668+ col.name = fname
1669 write_enable = editable and not node_attrs.get('readonly', False)
1670 if isinstance(renderer, gtk.CellRendererToggle):
1671 renderer.set_property('activatable', write_enable)
1672 elif isinstance(renderer, (gtk.CellRendererText, gtk.CellRendererCombo, date_renderer.DecoratorRenderer)):
1673 renderer.set_property('editable', write_enable)
1674 if write_enable:
1675- handler_id = renderer.connect_after('editing-started', send_keys, treeview)
1676-
1677- col = gtk.TreeViewColumn(None, renderer)
1678+ handler_id = renderer.connect_after('editing-started', send_keys, treeview, col.name)
1679+
1680+
1681 treeview.handlers[col] = handler_id
1682 col_label = gtk.Label('')
1683 if fields[fname].get('required', False):
1684@@ -176,7 +179,7 @@
1685 col_label.set_text(fields[fname]['string'])
1686 col_label.show()
1687 col.set_widget(col_label)
1688- col.name = fname
1689+
1690 col._type = fields[fname]['type']
1691 col.set_cell_data_func(renderer, cell.setter)
1692 col.set_clickable(True)
1693@@ -549,6 +552,13 @@
1694 return rpc.name_get([found[0]], context)[0]
1695 else:
1696 return False, None
1697+
1698+ def get_textual_value(self, model):
1699+ if isinstance(model[self.field_name], SelectionField):
1700+ key = model[self.field_name].get_client(model)
1701+ return model[self.field_name].selection.get_value(key)
1702+ return model[self.field_name].get_client(model) or ''
1703+
1704
1705
1706 class O2M(Char):
1707@@ -609,29 +619,48 @@
1708 def __init__(self, *args):
1709 super(Selection, self).__init__(*args)
1710 self.renderer = gtk.CellRendererCombo()
1711- selection_data = gtk.ListStore(str, str)
1712- for x in self.attrs.get('selection', []):
1713- selection_data.append(x)
1714- self.renderer.set_property('model', selection_data)
1715+ self.selection_data = gtk.ListStore(str, str)
1716+ selection = self.attrs.get('selection', [])
1717+ for x in selection:
1718+ self.selection_data.append(x)
1719+ if not selection:
1720+ self.selection_data.append([False, ''])
1721+ self.renderer.set_property('model', self.selection_data)
1722 self.renderer.set_property('text-column', 1)
1723+ self.relation = self.attrs.get('relation')
1724
1725 def get_textual_value(self, model):
1726- selection = dict(self.attrs['selection'])
1727- selection_value = selection.get(model[self.field_name].get(model), '')
1728- if isinstance(model, group_record):
1729- return selection_value + model[self.field_name].count
1730- return selection_value
1731+ if not isinstance(model, group_record):
1732+ key = model[self.field_name].get(model)
1733+ selection_value = model[self.field_name].selection.get_value(key)
1734+ return selection_value
1735+ else:
1736+ key = model[self.field_name].get(model)
1737+ return model.mgroup.mfields[self.field_name].selection.get_value(key) + model[self.field_name].count
1738+
1739+ def popup(self, combobox, para, treeview):
1740+ if combobox.get_property('popup-shown') and self.relation:
1741+ entry = combobox.get_child()
1742+ text = entry.get_property('text')
1743+ rpc = RPCProxy(self.relation)
1744+ model = treeview.get_current_model()
1745+ domain = model[self.field_name].domain_get(model)
1746+ context = model[self.field_name].context_get(model)
1747+ key = model[self.field_name].selection.get_key(text)
1748+ if key:
1749+ text = ''
1750+ selection = rpc.name_search(text, domain, 'ilike',context, False)
1751+ if selection:
1752+ self.selection_data.clear()
1753+ model = treeview.get_current_model()
1754+ model[self.field_name].selection.update(dict(selection))
1755+ for x in selection:
1756+ self.selection_data.append(x)
1757
1758 def value_from_text(self, model, text):
1759- selection = self.attrs['selection']
1760- text = tools.ustr(text)
1761- res = False
1762- for val, txt in selection:
1763- if txt[:len(text)].lower() == text.lower():
1764- if len(txt) == len(text):
1765- return val
1766- res = val
1767- return res
1768+ key = model[self.field_name].get(model)
1769+ selection_value = model[self.field_name].selection.get_value(key)
1770+ return model[self.field_name].selection.get_key(text)
1771
1772
1773 class ProgressBar(object):
1774
1775=== modified file 'bin/widget_search/checkbox.py'
1776--- bin/widget_search/checkbox.py 2010-09-21 09:39:49 +0000
1777+++ bin/widget_search/checkbox.py 2011-02-11 07:40:17 +0000
1778@@ -38,10 +38,11 @@
1779 self.entry = self.widget.child
1780 self.entry.set_property('activates_default', True)
1781 self.entry.set_editable(False)
1782- if self.default_search:
1783- if self.default_search == 1:
1784- self.default_search = 'Yes'
1785- self.widget.child.set_text(self.default_search.capitalize())
1786+ if bool(self.default_search):
1787+ self.default_search = _('Yes')
1788+ elif not self.default_search == '':
1789+ self.default_search = _('No')
1790+ self.widget.child.set_text(self.default_search.capitalize())
1791
1792 def clear(self):
1793 self.widget.child.set_text('')
1794@@ -57,7 +58,7 @@
1795 'domain':domain,
1796 'context': context
1797 }
1798-
1799+
1800 def grab_focus(self):
1801 self.widget.child.grab_focus()
1802
1803
1804=== modified file 'bin/widget_search/selection.py'
1805--- bin/widget_search/selection.py 2011-01-17 19:11:21 +0000
1806+++ bin/widget_search/selection.py 2011-02-11 07:40:17 +0000
1807@@ -28,15 +28,15 @@
1808 class selection(wid_int.wid_int):
1809 def __init__(self, name, parent, attrs={}, model=None, screen=None):
1810 wid_int.wid_int.__init__(self, name, parent, attrs, screen)
1811-
1812 self.widget = gtk.combo_box_entry_new_text()
1813+ self.widget.connect('notify::popup-shown', self.popup_show)
1814+ self.context = screen.context
1815+ self.relation_model = self.attrs.get('relation', '')
1816 self.widget.child.set_editable(True)
1817 self.attrs = attrs
1818 self._selection = {}
1819 self.name = name
1820- self.val_id = False
1821- if 'selection' in attrs:
1822- self.set_popdown(attrs.get('selection',[]))
1823+ self.set_popdown(attrs.get('selection',[]))
1824 if self.default_search:
1825 if self.attrs['type'] == 'many2one':
1826 self._value_set(int(self.default_search))
1827@@ -45,6 +45,16 @@
1828 if self.widget.child.get_text() in self._selection.keys():
1829 self.widget.set_active(self.indexes[self.widget.child.get_text()]-1)
1830
1831+ def popup_show(self, combobox, popup_show):
1832+ search_text = self.widget.child.get_text()
1833+ if self._selection.get(search_text, False):
1834+ search_text =''
1835+ if combobox.get_property('popup-shown') and self.attrs['type'] == 'many2one':
1836+ selection = rpc.session.rpc_exec_auth('/object', 'execute', self.relation_model, 'name_search', search_text , [] , 'ilike', self.context, False)
1837+ self.set_popdown(selection)
1838+ if not selection:
1839+ self.widget.child.set_text('')
1840+
1841 def set_popdown(self, selection):
1842 self.model = self.widget.get_model()
1843 self.model.clear()
1844
1845=== modified file 'bin/widget_search/wid_int.py'
1846--- bin/widget_search/wid_int.py 2010-04-02 13:49:07 +0000
1847+++ bin/widget_search/wid_int.py 2011-02-11 07:40:17 +0000
1848@@ -39,6 +39,10 @@
1849 default_context = call.context
1850 context_str = 'search_default_' + str(self.attrs['name'])
1851 self.default_search = default_context.get(context_str,False)
1852+ if attrs.get('type') == 'boolean':
1853+ if not default_context.has_key(context_str):
1854+ self.default_search = ''
1855+
1856
1857 def clear(self):
1858 self.value = ''

Subscribers

People subscribed via source and target branches