find & replace

This commit is contained in:
Damien Elmes 2009-02-13 21:06:22 +09:00
parent 7564ddec40
commit 450d4ed354
3 changed files with 166 additions and 9 deletions

View file

@ -2,6 +2,7 @@
# Copyright: Damien Elmes <anki@ichi2.net>
# License: GNU GPL, version 3 or later; http://www.gnu.org/copyleft/gpl.html
import sre_constants
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import time, types, sys, re
@ -499,6 +500,7 @@ class EditDeck(QMainWindow):
self.connect(self.dialog.actionInvertSelection, SIGNAL("triggered()"), self.invertSelection)
self.connect(self.dialog.actionReverseOrder, SIGNAL("triggered()"), self.reverseOrder)
self.connect(self.dialog.actionSelectFacts, SIGNAL("triggered()"), self.selectFacts)
self.connect(self.dialog.actionFindReplace, SIGNAL("triggered()"), self.onFindReplace)
# jumps
self.connect(self.dialog.actionFirstCard, SIGNAL("triggered()"), self.onFirstCard)
self.connect(self.dialog.actionLastCard, SIGNAL("triggered()"), self.onLastCard)
@ -771,6 +773,40 @@ where id in %s""" % ids2str(sf))
def onRedo(self):
self.deck.redo()
# Edit: replacing
######################################################################
def onFindReplace(self):
d = QDialog(self)
frm = ankiqt.forms.findreplace.Ui_Dialog()
frm.setupUi(d)
frm.type.insertItems(0, [
_("Fields"),
_("Tags")])
if not d.exec_():
return
n = _("Find and Replace")
self.parent.setProgressParent(self)
self.deck.startProgress(2)
self.deck.updateProgress(_("Replacing..."))
self.deck.setUndoStart(n)
sf = self.selectedFacts()
self.deck.updateProgress()
try:
self.deck.findReplace(self.selectedFacts(),
unicode(frm.find.text()),
unicode(frm.replace.text()),
frm.type.currentIndex(),
frm.re.isChecked())
except sre_constants.error:
ui.utils.showInfo(_("Invalid regexp."),
parent=self)
self.deck.setUndoEnd(n)
self.deck.finishProgress()
self.parent.setProgressParent(None)
self.updateSearch()
self.updateAfterCardChange()
# Jumping
######################################################################

View file

@ -13,14 +13,6 @@
<string>Edit Items</string>
</property>
<widget class="QWidget" name="centralwidget" >
<property name="geometry" >
<rect>
<x>0</x>
<y>23</y>
<width>599</width>
<height>439</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout" >
<property name="spacing" >
<number>0</number>
@ -170,7 +162,7 @@
<x>0</x>
<y>0</y>
<width>599</width>
<height>23</height>
<height>25</height>
</rect>
</property>
<widget class="QMenu" name="menuEdit" >
@ -184,6 +176,8 @@
<addaction name="actionSelectFacts" />
<addaction name="actionInvertSelection" />
<addaction name="separator" />
<addaction name="actionFindReplace" />
<addaction name="separator" />
<addaction name="actionReverseOrder" />
</widget>
<widget class="QMenu" name="menuActions" >
@ -402,6 +396,11 @@
<string>Select &amp;Facts</string>
</property>
</action>
<action name="actionFindReplace" >
<property name="text" >
<string>Find and Re&amp;place...</string>
</property>
</action>
</widget>
<resources>
<include location="../icons.qrc" />

122
designer/findreplace.ui Normal file
View file

@ -0,0 +1,122 @@
<ui version="4.0" >
<class>Dialog</class>
<widget class="QDialog" name="Dialog" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>322</width>
<height>159</height>
</rect>
</property>
<property name="windowTitle" >
<string>Find and Replace</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout" >
<item>
<layout class="QGridLayout" name="gridLayout" >
<item row="0" column="0" >
<widget class="QLabel" name="label" >
<property name="text" >
<string>Find</string>
</property>
</widget>
</item>
<item row="0" column="1" >
<widget class="QLineEdit" name="find" />
</item>
<item row="1" column="0" >
<widget class="QLabel" name="label_2" >
<property name="text" >
<string>Replace</string>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QLineEdit" name="replace" />
</item>
<item row="2" column="1" >
<widget class="QComboBox" name="type" />
</item>
<item row="2" column="0" >
<widget class="QLabel" name="label_3" >
<property name="text" >
<string>Search</string>
</property>
</widget>
</item>
<item row="3" column="1" >
<widget class="QCheckBox" name="re" >
<property name="text" >
<string>Treat input as regular expression</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer" >
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons" >
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>find</tabstop>
<tabstop>replace</tabstop>
<tabstop>buttonBox</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>Dialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel" >
<x>252</x>
<y>127</y>
</hint>
<hint type="destinationlabel" >
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>Dialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel" >
<x>286</x>
<y>127</y>
</hint>
<hint type="destinationlabel" >
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>