awips2/cave/com.raytheon.viz.avnconfig/localization/aviation/python/SearchDialog.py
Max Schenkelberg 6f60751ec6 Issue #2033 moved avnfps and text workstation files into respective plugins.
Change-Id: If95cb839ad81ca2a842ff7f6926847ac3928d8f2

Former-commit-id: 77e1a4d8f5237e5fae930c1e00589c752f8b3738
2013-08-15 12:21:43 -05:00

192 lines
5.7 KiB
Python

##
# This software was developed and / or modified by Raytheon Company,
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
#
# U.S. EXPORT CONTROLLED TECHNICAL DATA
# This software product contains export-restricted data whose
# export/transfer/disclosure is restricted by U.S. law. Dissemination
# to non-U.S. persons whether in the United States or abroad requires
# an export license or other authorization.
#
# Contractor Name: Raytheon Company
# Contractor Address: 6825 Pine Street, Suite 340
# Mail Stop B8
# Omaha, NE 68106
# 402.291.0100
#
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
# further licensing information.
##
#
# Name:
# SearchDialog.py
# GFS1-NHD:A3649.0000-SCRIPT;10
#
# Status:
# DELIVERED
#
# History:
# Revision 10 (DELIVERED)
# Created: 01-OCT-2007 10:41:33 OBERFIEL
# Surrounded tag_ranges() call with exception handling.
#
# Revision 9 (DELIVERED)
# Created: 07-MAY-2005 11:38:02 OBERFIEL
# Added Item Header Block
#
# Revision 8 (DELIVERED)
# Created: 01-OCT-2004 13:42:40 TROJAN
# spr 6400
#
# Revision 7 (APPROVED)
# Created: 12-JUL-2004 12:05:38 OBERFIEL
# Fixed missing BusyTkDialog messages
#
# Revision 6 (APPROVED)
# Created: 01-JUL-2004 14:59:50 OBERFIEL
# Update
#
# Revision 5 (DELIVERED)
# Created: 05-NOV-2003 19:10:16 OBERFIEL
# Initial version for 2.0
#
# Revision 4 (DELIVERED)
# Created: 24-APR-2003 14:54:51 TROJAN
# sprs 5055, 5056, 5057, 5070
#
# Revision 3 (DELIVERED)
# Created: 30-OCT-2001 20:15:25 PCMS
# Correcting heirarchy of dialog boxes.
#
# Revision 2 (DELIVERED)
# Created: 02-OCT-2001 17:48:49 PCMS
# Updating for gui changes
#
# Revision 1 (DELIVERED)
# Created: 20-AUG-2001 20:32:00 MOELLER
# Initial version
#
# Change Document History:
# 1:
# Change Document: GFS1-NHD_SPR_7337
# Action Date: 19-MAR-2008 08:04:02
# Relationship Type: In Response to
# Status: CLOSED
# Title: AvnFPS: Fixes from ATAN 893 flight category testing
#
#
from Tkinter import *
import Pmw
import Busy
class Dialog(Pmw.Dialog):
"""For use by EditDialog and its derivatives"""
def __init__(self, parent, text, **kw):
self._replacepattern = '?'
self._history = []
self._text = text
optiondefs = ()
self.defineoptions(kw, optiondefs)
Pmw.Dialog.__init__(self, parent)
self.withdraw()
self.configure(buttons=('Close',), defaultbutton=0)
interior = self.interior()
self.__findentry = Pmw.EntryField(interior, labelpos='w',
label_text='Find what:', validate=None)
self.__replaceentry = Pmw.EntryField(interior, labelpos='w',
label_text='Replace by:', validate=None)
entries = (self.__findentry, self.__replaceentry)
for entry in entries:
entry.pack(side='top', fill='x', expand='no',
padx=5, pady=5)
Pmw.alignlabels(entries)
self.__buttonbox = Pmw.ButtonBox(interior, padx=0, pady=0)
self.__buttonbox.add('Find', command=self.__find)
self.__buttonbox.add('Replace', command=self.__replace)
self.__buttonbox.add('Replace All', command=self.__replaceAll)
self.__buttonbox.add('Undo', command=self.__undo)
self.__buttonbox.pack(side=TOP, expand=NO, fill=X)
self.__buttonbox.alignbuttons()
self.initialiseoptions(Dialog)
def __find(self, quiet=0):
self._searchpattern = self.__findentry.get().rstrip().upper()
if not self._searchpattern:
return 0
self._text.selection_clear()
tkLength = IntVar()
last_pos = self._text.index('insert')
next_pos = self._text.search(self._searchpattern, last_pos,
nocase=1, count=tkLength)
if not next_pos:
if not quiet:
Busy.showinfo('Pattern not found',
self.interior())
return 0
self._text.see(next_pos)
len = tkLength.get()
self._text.tag_add(SEL, next_pos, '%s + %d char' % \
(next_pos, len))
self._text.mark_set('insert', '%s + %d char' % (next_pos, len))
return 1
def __replace(self):
pattern = self.__replaceentry.get().rstrip().upper()
if not pattern and self._replacepattern:
if not Busy.askokcancel('Replace with empty string?',
self.interior()):
return -1
self._replacepattern = pattern
if not self.__find(1):
return 0
# prevent infinite loop
if self._replacepattern == self._searchpattern:
return 0
try:
(start, end) = self._text.tag_ranges(SEL)
except ValueError:
return 0
self._text.delete(start, end)
repend = '%s + %d char' % (start, len(self._replacepattern))
if self._replacepattern:
self._text.insert(start, self._replacepattern)
self._text.tag_add(SEL, start, repend)
self._history.append((start, repend, self._searchpattern))
ll = len(self._history)
if ll > 16:
self._history = self._history[-16:]
return 1
def __replaceAll(self):
n = 0
while 1:
rc = self.__replace()
if rc == -1:
return
elif rc == 0:
break
n += 1
if n == 0:
Busy.showwarning('Replace failed', self.interior())
else:
Busy.showinfo('Replaced %d occurences' % n,
self.interior())
def __undo(self):
ll = len(self._history)
if ll == 0:
Busy.showwarning('Nothing to undo', self.interior())
return
(start, end, pattern) = self._history[-1]
self._text.delete(start, end)
self._text.insert(start, pattern)
del self._history[-1]
def setText(self, text):
self._text = text