Changeset 190


Ignore:
Timestamp:
Apr 1, 2009 7:33:28 PM (11 years ago)
Author:
mbutscher
Message:

branches/mbutscher/work:
2.0beta02

  • Faster stop when closing WikidPad
  • Option to let selection in doc. structure automatically follow text cursor position in editor
  • Saved exports similar to saved searches
  • Wiki page files in UTF-16 encoding (with appropriate BOM) can now be read by WikidPad
  • Bug fixed: Wiki-wide search couldn't be opened if a functional page was in current editor
  • Bug fixed: Dialog to append/prepend wikiword failed
Location:
branches/mbutscher/work
Files:
33 edited

Legend:

Unmodified
Added
Removed
  • branches/mbutscher/work/Consts.py

    r188 r190  
    2323# (2, 0, 200, 0) is 2.0final
    2424
    25 VERSION_TUPLE = ("wikidPad", 2, 0, 101, 0)
    26 VERSION_STRING = "wikidPad 2.0beta01"
     25VERSION_TUPLE = ("wikidPad", 2, 0, 102, 0)
     26VERSION_STRING = "wikidPad 2.0beta02"
    2727HOMEPAGE = u"http://wikidpad.sourceforge.net"
    2828
  • branches/mbutscher/work/WikidPad.pot

    r188 r190  
    66msgstr ""
    77"Project-Id-Version: PACKAGE VERSION\n"
    8 "POT-Creation-Date: 2009-03-02 21:52\n"
     8"POT-Creation-Date: 2009-04-01 20:55\n"
    99"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1010"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    5353
    5454#: WikidPad.xrc:0
     55msgid "&Delete Export(s)"
     56msgstr ""
     57
     58#: WikidPad.xrc:0
    5559msgid "&Delete Search(es)"
    5660msgstr ""
     
    6165
    6266#: WikidPad.xrc:0
     67msgid "&Load Export"
     68msgstr ""
     69
     70#: WikidPad.xrc:0
    6371msgid "&Load Search"
    6472msgstr ""
     
    8593
    8694#: WikidPad.xrc:0
     95msgid "&Save Export"
     96msgstr ""
     97
     98#: WikidPad.xrc:0
    8799msgid "&Save Search"
    88100msgstr ""
     
    573585
    574586#: WikidPad.xrc:0
     587msgid "Load and R&un Export"
     588msgstr ""
     589
     590#: WikidPad.xrc:0
    575591msgid "Load and R&un Search"
    576592msgstr ""
     
    845861
    846862#: WikidPad.xrc:0
     863msgid "Saved Exports:"
     864msgstr ""
     865
     866#: WikidPad.xrc:0
    847867msgid "Saved Searches:"
    848868msgstr ""
     
    970990#: WikidPad.xrc:0
    971991msgid "Structure window position:"
     992msgstr ""
     993
     994#: WikidPad.xrc:0
     995msgid "Structure window selection auto-follow"
    972996msgstr ""
    973997
     
    11871211msgstr ""
    11881212
    1189 #: WikidPad.xrc:0 lib\pwiki\AdditionalDialogs.py:585
     1213#: WikidPad.xrc:0 lib\pwiki\AdditionalDialogs.py:597
    11901214msgid " OK "
    11911215msgstr ""
    11921216
    1193 #: WikidPad.xrc:0 lib\pwiki\AdditionalDialogs.py:589
     1217#: WikidPad.xrc:0 lib\pwiki\AdditionalDialogs.py:601
    11941218msgid " Cancel "
    11951219msgstr ""
    11961220
    1197 #: WikidPad.xrc:0 lib\pwiki\AdditionalDialogs.py:1043
     1221#: WikidPad.xrc:0 lib\pwiki\AdditionalDialogs.py:1070
    11981222msgid "Destination directory:"
    11991223msgstr ""
    12001224
    1201 #: WikidPad.xrc:0 lib\pwiki\AdditionalDialogs.py:1304
     1225#: WikidPad.xrc:0 lib\pwiki\AdditionalDialogs.py:1278
     1226#: lib\pwiki\SearchAndReplaceDialogs.py:1286
     1227msgid "Title:"
     1228msgstr ""
     1229
     1230#: WikidPad.xrc:0 lib\pwiki\AdditionalDialogs.py:1576
    12021231msgid "Source directory:"
    12031232msgstr ""
    12041233
    12051234#: WikidPad.xrc:0 lib\pwiki\OptionsDialog.py:130
    1206 #: lib\pwiki\OptionsDialog.py:728
     1235#: lib\pwiki\OptionsDialog.py:729
    12071236msgid "Default"
    12081237msgstr ""
    12091238
    1210 #: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1135
    1211 #: lib\pwiki\WikiTxtCtrl.py:3006
     1239#: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1137
     1240#: lib\pwiki\WikiTxtCtrl.py:3016
    12121241msgid "Undo"
    12131242msgstr ""
    12141243
    1215 #: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1139
    1216 #: lib\pwiki\WikiTxtCtrl.py:3007
     1244#: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1141
     1245#: lib\pwiki\WikiTxtCtrl.py:3017
    12171246msgid "Redo"
    12181247msgstr ""
    12191248
    1220 #: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1155
    1221 #: lib\pwiki\WikiTxtCtrl.py:3008
     1249#: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1157
     1250#: lib\pwiki\WikiTxtCtrl.py:3018
    12221251msgid "Cut"
    12231252msgstr ""
    12241253
    1225 #: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1160
    1226 #: lib\pwiki\WikiTxtCtrl.py:3009
     1254#: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1162
     1255#: lib\pwiki\WikiTxtCtrl.py:3019
    12271256msgid "Copy"
    12281257msgstr ""
    12291258
    1230 #: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1164
    1231 #: lib\pwiki\WikiTxtCtrl.py:3010
     1259#: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1166
     1260#: lib\pwiki\WikiTxtCtrl.py:3020
    12321261msgid "Paste"
    12331262msgstr ""
    12341263
    1235 #: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1545
     1264#: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1547
    12361265msgid "&Delete"
    12371266msgstr ""
    12381267
    1239 #: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1952
    1240 #: lib\pwiki\PersonalWikiFrame.py:1953
     1268#: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1954
     1269#: lib\pwiki\PersonalWikiFrame.py:1955
    12411270msgid "Open Wiki Word"
    12421271msgstr ""
    12431272
    1244 #: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1983
    1245 #: lib\pwiki\WikiTxtCtrl.py:3011
     1273#: WikidPad.xrc:0 lib\pwiki\PersonalWikiFrame.py:1985
     1274#: lib\pwiki\WikiTxtCtrl.py:3021
    12461275msgid "Delete"
    12471276msgstr ""
     
    12511280msgstr ""
    12521281
    1253 #: WikidPad.xrc:0 lib\pwiki\SearchAndReplaceDialogs.py:1285
    1254 msgid "Title:"
    1255 msgstr ""
    1256 
    12571282#: WikidPad.xrc:0 lib\pwiki\SearchAndReplaceDialogs.py:1503
    12581283msgid "Set page list"
     
    12641289
    12651290#: WikidPad.xrc:0 lib\pwiki\SearchAndReplaceDialogs.py:1756
    1266 #: lib\pwiki\SearchAndReplaceDialogs.py:1861
     1291#: lib\pwiki\SearchAndReplaceDialogs.py:1862
    12671292msgid "As Full Search"
    12681293msgstr ""
    12691294
    1270 #: WikidPad.xrc:0 lib\pwiki\SearchAndReplaceDialogs.py:2089
     1295#: WikidPad.xrc:0 lib\pwiki\SearchAndReplaceDialogs.py:2090
    12711296#: lib\pwiki\WikiHtmlView.py:626
    12721297msgid "Activate New Tab"
    12731298msgstr ""
    12741299
    1275 #: WikidPad.xrc:0 lib\pwiki\WikiTxtCtrl.py:3012
     1300#: WikidPad.xrc:0 lib\pwiki\WikiTxtCtrl.py:3022
    12761301msgid "Select All"
    12771302msgstr ""
    12781303
    1279 #: WikidPad.xrc:0 lib\pwiki\WikiTxtCtrl.py:3020
     1304#: WikidPad.xrc:0 lib\pwiki\WikiTxtCtrl.py:3030
    12801305msgid "Close Tab"
    12811306msgstr ""
     
    12891314msgstr ""
    12901315
    1291 #: WikidPadStarter.py:158
     1316#: WikidPadStarter.py:154
    12921317msgid "Error starting WikidPad"
    12931318msgstr ""
    12941319
    1295 #: WikidPadStarter.py:159 lib\pwiki\SearchAndReplaceDialogs.py:654
    1296 #: lib\pwiki\SearchAndReplaceDialogs.py:910
     1320#: WikidPadStarter.py:155 lib\pwiki\SearchAndReplaceDialogs.py:654
     1321#: lib\pwiki\SearchAndReplaceDialogs.py:911
    12971322msgid "Error!"
    12981323msgstr ""
    12991324
    1300 #: WikidPadStarter.py:166
     1325#: WikidPadStarter.py:162
    13011326msgid "Error"
    13021327msgstr ""
     
    14671492msgstr ""
    14681493
    1469 #: lib\pwiki\AdditionalDialogs.py:266 lib\pwiki\AdditionalDialogs.py:363
     1494#: lib\pwiki\AdditionalDialogs.py:153 lib\pwiki\AdditionalDialogs.py:333
     1495msgid "Links to:"
     1496msgstr ""
     1497
     1498#: lib\pwiki\AdditionalDialogs.py:278 lib\pwiki\AdditionalDialogs.py:375
    14701499msgid "'%s' is an invalid WikiWord"
    14711500msgstr ""
    14721501
    1473 #: lib\pwiki\AdditionalDialogs.py:273
     1502#: lib\pwiki\AdditionalDialogs.py:285
    14741503msgid "'%s' is not an existing wikiword. Create?"
    14751504msgstr ""
    14761505
    1477 #: lib\pwiki\AdditionalDialogs.py:274
     1506#: lib\pwiki\AdditionalDialogs.py:286
    14781507msgid "Create"
    14791508msgstr ""
    14801509
    1481 #: lib\pwiki\AdditionalDialogs.py:321
    1482 msgid "Links to:"
    1483 msgstr ""
    1484 
    1485 #: lib\pwiki\AdditionalDialogs.py:369
     1510#: lib\pwiki\AdditionalDialogs.py:381
    14861511msgid "'%s' exists already"
    14871512msgstr ""
    14881513
    1489 #: lib\pwiki\AdditionalDialogs.py:383 lib\pwiki\AdditionalDialogs.py:469
     1514#: lib\pwiki\AdditionalDialogs.py:395 lib\pwiki\AdditionalDialogs.py:481
    14901515msgid "Do you want to delete %i wiki page(s)?"
    14911516msgstr ""
    14921517
    1493 #: lib\pwiki\AdditionalDialogs.py:559
     1518#: lib\pwiki\AdditionalDialogs.py:571
    14941519msgid "Select Icon"
    14951520msgstr ""
    14961521
    1497 #: lib\pwiki\AdditionalDialogs.py:568
     1522#: lib\pwiki\AdditionalDialogs.py:580
    14981523msgid "Icon"
    14991524msgstr ""
    15001525
    1501 #: lib\pwiki\AdditionalDialogs.py:718
     1526#: lib\pwiki\AdditionalDialogs.py:730
    15021527msgid "<html>\n"
    15031528"<body bgcolor=\"#FFFFFF\">\n"
     
    15661591msgstr ""
    15671592
    1568 #: lib\pwiki\AdditionalDialogs.py:826
     1593#: lib\pwiki\AdditionalDialogs.py:838
    15691594msgid "<invalid>"
    15701595msgstr ""
    15711596
    1572 #: lib\pwiki\AdditionalDialogs.py:954
     1597#: lib\pwiki\AdditionalDialogs.py:971
    15731598msgid "Continuous Export"
    15741599msgstr ""
    15751600
    1576 #: lib\pwiki\AdditionalDialogs.py:1046
     1601#: lib\pwiki\AdditionalDialogs.py:1073
    15771602msgid "Destination file:"
    15781603msgstr ""
    15791604
    1580 #: lib\pwiki\AdditionalDialogs.py:1078
     1605#: lib\pwiki\AdditionalDialogs.py:1105
    15811606msgid "Destination directory does not exist"
    15821607msgstr ""
    15831608
    1584 #: lib\pwiki\AdditionalDialogs.py:1083
     1609#: lib\pwiki\AdditionalDialogs.py:1110
    15851610msgid "Destination must be a directory"
    15861611msgstr ""
    15871612
    1588 #: lib\pwiki\AdditionalDialogs.py:1089
     1613#: lib\pwiki\AdditionalDialogs.py:1116
    15891614msgid "Destination must be a file"
    15901615msgstr ""
    15911616
    1592 #: lib\pwiki\AdditionalDialogs.py:1099 lib\pwiki\PersonalWikiFrame.py:4533
    1593 #: lib\pwiki\PersonalWikiFrame.py:4547 lib\pwiki\Printing.py:172
     1617#: lib\pwiki\AdditionalDialogs.py:1126 lib\pwiki\PersonalWikiFrame.py:4564
     1618msgid "Exporting"
     1619msgstr ""
     1620
     1621#: lib\pwiki\AdditionalDialogs.py:1128 lib\pwiki\PersonalWikiFrame.py:4566
     1622msgid "Preparing"
     1623msgstr ""
     1624
     1625#: lib\pwiki\AdditionalDialogs.py:1148
     1626msgid "Error while exporting"
     1627msgstr ""
     1628
     1629#: lib\pwiki\AdditionalDialogs.py:1164 lib\pwiki\PersonalWikiFrame.py:4512
     1630msgid "Select Export Directory"
     1631msgstr ""
     1632
     1633#: lib\pwiki\AdditionalDialogs.py:1178 lib\pwiki\AdditionalDialogs.py:1649
     1634msgid "All files (*.*)"
     1635msgstr ""
     1636
     1637#: lib\pwiki\AdditionalDialogs.py:1183
     1638msgid "Select Export File"
     1639msgstr ""
     1640
     1641#: lib\pwiki\AdditionalDialogs.py:1210 lib\pwiki\PersonalWikiFrame.py:4535
     1642#: lib\pwiki\PersonalWikiFrame.py:4549 lib\pwiki\Printing.py:172
    15941643msgid "No real wiki word selected as root"
    15951644msgstr ""
    15961645
    1597 #: lib\pwiki\AdditionalDialogs.py:1129 lib\pwiki\PersonalWikiFrame.py:4562
    1598 msgid "Exporting"
    1599 msgstr ""
    1600 
    1601 #: lib\pwiki\AdditionalDialogs.py:1131 lib\pwiki\PersonalWikiFrame.py:4564
    1602 msgid "Preparing"
    1603 msgstr ""
    1604 
    1605 #: lib\pwiki\AdditionalDialogs.py:1153
    1606 msgid "Error while exporting"
    1607 msgstr ""
    1608 
    1609 #: lib\pwiki\AdditionalDialogs.py:1169 lib\pwiki\PersonalWikiFrame.py:4510
    1610 msgid "Select Export Directory"
    1611 msgstr ""
    1612 
    1613 #: lib\pwiki\AdditionalDialogs.py:1183 lib\pwiki\AdditionalDialogs.py:1377
    1614 msgid "All files (*.*)"
    1615 msgstr ""
    1616 
    1617 #: lib\pwiki\AdditionalDialogs.py:1188
    1618 msgid "Select Export File"
    1619 msgstr ""
    1620 
    1621 #: lib\pwiki\AdditionalDialogs.py:1307
     1646#: lib\pwiki\AdditionalDialogs.py:1279
     1647msgid "Choose export title"
     1648msgstr ""
     1649
     1650#: lib\pwiki\AdditionalDialogs.py:1288
     1651msgid "Do you want to overwrite existing export '%s'?"
     1652msgstr ""
     1653
     1654#: lib\pwiki\AdditionalDialogs.py:1289
     1655msgid "Overwrite export"
     1656msgstr ""
     1657
     1658#: lib\pwiki\AdditionalDialogs.py:1336
     1659msgid "Do you want to delete %i export(s)?"
     1660msgstr ""
     1661
     1662#: lib\pwiki\AdditionalDialogs.py:1337
     1663msgid "Delete export"
     1664msgstr ""
     1665
     1666#: lib\pwiki\AdditionalDialogs.py:1374
     1667msgid "Selected export type does not support saving"
     1668msgstr ""
     1669
     1670#: lib\pwiki\AdditionalDialogs.py:1418
     1671msgid "Export type '%s' of saved export is not supported"
     1672msgstr ""
     1673
     1674#: lib\pwiki\AdditionalDialogs.py:1429
     1675msgid "Saved export uses different version for additional options than current export\n"
     1676"Export type: '%s'\n"
     1677"Saved export version: %i\n"
     1678"Current export version: %i"
     1679msgstr ""
     1680
     1681#: lib\pwiki\AdditionalDialogs.py:1437
     1682msgid "Type of additional option storage ('%s') is unknown"
     1683msgstr ""
     1684
     1685#: lib\pwiki\AdditionalDialogs.py:1468
     1686msgid "Error during retrieving saved export: "
     1687msgstr ""
     1688
     1689#: lib\pwiki\AdditionalDialogs.py:1579
    16221690msgid "Source file:"
    16231691msgstr ""
    16241692
    1625 #: lib\pwiki\AdditionalDialogs.py:1323
     1693#: lib\pwiki\AdditionalDialogs.py:1595
    16261694msgid "Source does not exist"
    16271695msgstr ""
    16281696
    1629 #: lib\pwiki\AdditionalDialogs.py:1333
     1697#: lib\pwiki\AdditionalDialogs.py:1605
    16301698msgid "Source must be a directory"
    16311699msgstr ""
    16321700
    1633 #: lib\pwiki\AdditionalDialogs.py:1338
     1701#: lib\pwiki\AdditionalDialogs.py:1610
    16341702msgid "Source must be a file"
    16351703msgstr ""
    16361704
    1637 #: lib\pwiki\AdditionalDialogs.py:1349
     1705#: lib\pwiki\AdditionalDialogs.py:1621
    16381706msgid "Error while importing"
    16391707msgstr ""
    16401708
    1641 #: lib\pwiki\AdditionalDialogs.py:1363
     1709#: lib\pwiki\AdditionalDialogs.py:1635
    16421710msgid "Select Import Directory"
    16431711msgstr ""
    16441712
    1645 #: lib\pwiki\AdditionalDialogs.py:1378
     1713#: lib\pwiki\AdditionalDialogs.py:1650
    16461714msgid "*"
    16471715msgstr ""
    16481716
    1649 #: lib\pwiki\AdditionalDialogs.py:1382
     1717#: lib\pwiki\AdditionalDialogs.py:1654
    16501718msgid "Select Import File"
    16511719msgstr ""
    16521720
    1653 #: lib\pwiki\AdditionalDialogs.py:1493
     1721#: lib\pwiki\AdditionalDialogs.py:1765
    16541722msgid "\n"
    16551723"<html>\n"
     
    16831751"    <hr />\n"
    16841752"    \n"
    1685 "    <p />Your configuration directory is: %s\n"
    1686 "    <p />Sqlite version: %s\n"
     1753"    <p>Your configuration directory is: <b>%s</b><br />\n"
     1754"    Sqlite version: <b>%s</b><br />\n"
     1755"    wxPython version: <b>%s</b>\n"
     1756"    </p>\n"
     1757"    \n"
    16871758"</body>\n"
    16881759"</html>\n"
    16891760msgstr ""
    16901761
    1691 #: lib\pwiki\AdditionalDialogs.py:1531 lib\pwiki\PersonalWikiFrame.py:1870
     1762#: lib\pwiki\AdditionalDialogs.py:1806 lib\pwiki\PersonalWikiFrame.py:1872
    16921763msgid "About WikidPad"
    16931764msgstr ""
    16941765
    1695 #: lib\pwiki\AdditionalDialogs.py:1535 lib\pwiki\AdditionalDialogs.py:1640
    1696 #: lib\pwiki\AdditionalDialogs.py:1648
     1766#: lib\pwiki\AdditionalDialogs.py:1810 lib\pwiki\AdditionalDialogs.py:1916
     1767#: lib\pwiki\AdditionalDialogs.py:1924
    16971768msgid "N/A"
    16981769msgstr ""
    16991770
    1700 #: lib\pwiki\AdditionalDialogs.py:1544
     1771#: lib\pwiki\AdditionalDialogs.py:1820
    17011772msgid "Okay"
    17021773msgstr ""
    17031774
    1704 #: lib\pwiki\AdditionalDialogs.py:1638
     1775#: lib\pwiki\AdditionalDialogs.py:1914
    17051776msgid "Wiki database backend:"
    17061777msgstr ""
    17071778
    1708 #: lib\pwiki\AdditionalDialogs.py:1646
     1779#: lib\pwiki\AdditionalDialogs.py:1922
    17091780msgid "Number of wiki pages:"
    17101781msgstr ""
    17111782
    1712 #: lib\pwiki\AdditionalDialogs.py:1681
     1783#: lib\pwiki\AdditionalDialogs.py:1957
    17131784msgid "Number of Jobs:"
    17141785msgstr ""
     
    17461817msgstr ""
    17471818
    1748 #: lib\pwiki\DocPagePresenter.py:231 lib\pwiki\PersonalWikiFrame.py:4134
     1819#: lib\pwiki\DocPagePresenter.py:231 lib\pwiki\PersonalWikiFrame.py:4136
    17491820msgid "'%s' is an invalid wiki word. %s."
    17501821msgstr ""
     
    17581829msgstr ""
    17591830
    1760 #: lib\pwiki\DocPages.py:1740
     1831#: lib\pwiki\DocPages.py:1733
    17611832msgid "Func. tag %s does not exist"
    17621833msgstr ""
    17631834
    1764 #: lib\pwiki\DocPages.py:2006
     1835#: lib\pwiki\DocPages.py:1999
    17651836msgid "Global text blocks"
    17661837msgstr ""
    17671838
    1768 #: lib\pwiki\DocPages.py:2007
     1839#: lib\pwiki\DocPages.py:2000
    17691840msgid "Wiki text blocks"
    17701841msgstr ""
    17711842
    1772 #: lib\pwiki\DocPages.py:2008
     1843#: lib\pwiki\DocPages.py:2001
    17731844msgid "Global spell list"
    17741845msgstr ""
    17751846
    1776 #: lib\pwiki\DocPages.py:2009
     1847#: lib\pwiki\DocPages.py:2002
    17771848msgid "Wiki spell list"
    17781849msgstr ""
    17791850
    1780 #: lib\pwiki\DocPages.py:2010
     1851#: lib\pwiki\DocPages.py:2003
    17811852msgid "Global cc. blacklist"
    17821853msgstr ""
    17831854
    1784 #: lib\pwiki\DocPages.py:2011
     1855#: lib\pwiki\DocPages.py:2004
    17851856msgid "Wiki cc. blacklist"
    17861857msgstr ""
    17871858
    1788 #: lib\pwiki\DocPages.py:2012
     1859#: lib\pwiki\DocPages.py:2005
    17891860msgid "Favorite wikis"
    17901861msgstr ""
    17911862
    1792 #: lib\pwiki\Exporters.py:338
     1863#: lib\pwiki\Exporters.py:346
    17931864msgid "One HTML page"
    17941865msgstr ""
    17951866
    1796 #: lib\pwiki\Exporters.py:339
     1867#: lib\pwiki\Exporters.py:347
    17971868msgid "Set of HTML pages"
    17981869msgstr ""
    17991870
    1800 #: lib\pwiki\Exporters.py:685 lib\pwiki\Exporters.py:769
     1871#: lib\pwiki\Exporters.py:712 lib\pwiki\Exporters.py:796
    18011872msgid "Exporting %s"
    18021873msgstr ""
    18031874
    1804 #: lib\pwiki\Exporters.py:1482
     1875#: lib\pwiki\Exporters.py:1509
    18051876msgid "<pre>[Allow evaluation of insertions in \"Options\", page \"Security\", option \"Process insertion scripts\"]</pre>"
    18061877msgstr ""
    18071878
    1808 #: lib\pwiki\Exporters.py:1971
     1879#: lib\pwiki\Exporters.py:1998
    18091880msgid "[Unknown parser node with name \"%s\" found]"
    18101881msgstr ""
    18111882
    1812 #: lib\pwiki\Exporters.py:2180 lib\pwiki\Importers.py:34
     1883#: lib\pwiki\Exporters.py:2215 lib\pwiki\Importers.py:34
    18131884msgid "Multipage text"
    18141885msgstr ""
    18151886
    1816 #: lib\pwiki\Exporters.py:2193 lib\pwiki\Importers.py:47
     1887#: lib\pwiki\Exporters.py:2228 lib\pwiki\Importers.py:47
    18171888msgid "Multipage files (*.mpt)"
    18181889msgstr ""
    18191890
    1820 #: lib\pwiki\Exporters.py:2194 lib\pwiki\Importers.py:48
     1891#: lib\pwiki\Exporters.py:2229 lib\pwiki\Importers.py:48
    18211892msgid "Text file (*.txt)"
    18221893msgstr ""
    18231894
    1824 #: lib\pwiki\Exporters.py:2321
     1895#: lib\pwiki\Exporters.py:2372
    18251896msgid "No usable separator found"
    18261897msgstr ""
     
    18541925msgstr ""
    18551926
    1856 #: lib\pwiki\MainApp.py:517
     1927#: lib\pwiki\MainApp.py:524
    18571928msgid "An error occurred during this session\n"
    18581929"See file %s"
    18591930msgstr ""
    18601931
    1861 #: lib\pwiki\MainAreaPanel.py:394 lib\pwiki\WikiTxtCtrl.py:1900
     1932#: lib\pwiki\MainAreaPanel.py:394 lib\pwiki\WikiTxtCtrl.py:1910
    18621933msgid "This can only be done for the page of a wiki word"
    18631934msgstr ""
    18641935
    1865 #: lib\pwiki\MainAreaPanel.py:395 lib\pwiki\WikiTxtCtrl.py:1901
     1936#: lib\pwiki\MainAreaPanel.py:395 lib\pwiki\WikiTxtCtrl.py:1911
    18661937msgid "Not a wiki page"
    18671938msgstr ""
    18681939
    1869 #: lib\pwiki\OptionsDialog.py:591
     1940#: lib\pwiki\OptionsDialog.py:592
    18701941msgid "Application"
    18711942msgstr ""
    18721943
    1873 #: lib\pwiki\OptionsDialog.py:592
     1944#: lib\pwiki\OptionsDialog.py:593
    18741945msgid "  User interface"
    18751946msgstr ""
    18761947
    1877 #: lib\pwiki\OptionsDialog.py:593
     1948#: lib\pwiki\OptionsDialog.py:594
    18781949msgid "  Security"
    18791950msgstr ""
    18801951
    1881 #: lib\pwiki\OptionsDialog.py:594
     1952#: lib\pwiki\OptionsDialog.py:595
    18821953msgid "  Tree"
    18831954msgstr ""
    18841955
    1885 #: lib\pwiki\OptionsDialog.py:595
     1956#: lib\pwiki\OptionsDialog.py:596
    18861957msgid "  HTML preview/export"
    18871958msgstr ""
    18881959
    1889 #: lib\pwiki\OptionsDialog.py:596
     1960#: lib\pwiki\OptionsDialog.py:597
    18901961msgid "    HTML header"
    18911962msgstr ""
    18921963
    1893 #: lib\pwiki\OptionsDialog.py:597
     1964#: lib\pwiki\OptionsDialog.py:598
    18941965msgid "  Editor"
    18951966msgstr ""
    18961967
    1897 #: lib\pwiki\OptionsDialog.py:598
     1968#: lib\pwiki\OptionsDialog.py:599
    18981969msgid "    Editor Colors"
    18991970msgstr ""
    19001971
    1901 #: lib\pwiki\OptionsDialog.py:599
     1972#: lib\pwiki\OptionsDialog.py:600
    19021973msgid "    Clipboard Catcher"
    19031974msgstr ""
    19041975
    1905 #: lib\pwiki\OptionsDialog.py:600
     1976#: lib\pwiki\OptionsDialog.py:601
    19061977msgid "  File Launcher"
    19071978msgstr ""
    19081979
    1909 #: lib\pwiki\OptionsDialog.py:601
     1980#: lib\pwiki\OptionsDialog.py:602
    19101981msgid "  Mouse"
    19111982msgstr ""
    19121983
    1913 #: lib\pwiki\OptionsDialog.py:602
     1984#: lib\pwiki\OptionsDialog.py:603
    19141985msgid "  Time view"
    19151986msgstr ""
    19161987
    1917 #: lib\pwiki\OptionsDialog.py:603
     1988#: lib\pwiki\OptionsDialog.py:604
    19181989msgid "  Searching"
    19191990msgstr ""
    19201991
    1921 #: lib\pwiki\OptionsDialog.py:604 lib\pwiki\OptionsDialog.py:608
     1992#: lib\pwiki\OptionsDialog.py:605 lib\pwiki\OptionsDialog.py:609
    19221993msgid "  Advanced"
    19231994msgstr ""
    19241995
    1925 #: lib\pwiki\OptionsDialog.py:605
     1996#: lib\pwiki\OptionsDialog.py:606
    19261997msgid "    Autosave"
    19271998msgstr ""
    19281999
    1929 #: lib\pwiki\OptionsDialog.py:606
     2000#: lib\pwiki\OptionsDialog.py:607
    19302001msgid "Current Wiki"
    19312002msgstr ""
    19322003
    1933 #: lib\pwiki\OptionsDialog.py:607
     2004#: lib\pwiki\OptionsDialog.py:608
    19342005msgid "  Headings"
    19352006msgstr ""
    19362007
    1937 #: lib\pwiki\OptionsDialog.py:795
     2008#: lib\pwiki\OptionsDialog.py:796
    19382009msgid "Wave files (*.wav)|*.wav"
    19392010msgstr ""
    19402011
    1941 #: lib\pwiki\OptionsDialog.py:806 lib\pwiki\OptionsDialog.py:1054
     2012#: lib\pwiki\OptionsDialog.py:807 lib\pwiki\OptionsDialog.py:1055
    19422013msgid "All files (*.*)|*"
    19432014msgstr ""
    19442015
    1945 #: lib\pwiki\OptionsDialog.py:1044
     2016#: lib\pwiki\OptionsDialog.py:1045
    19462017msgid "Select Directory"
    19472018msgstr ""
    19482019
    1949 #: lib\pwiki\OptionsDialog.py:1052
     2020#: lib\pwiki\OptionsDialog.py:1053
    19502021msgid "Select File"
    19512022msgstr ""
    19522023
    1953 #: lib\pwiki\PersonalWikiFrame.py:152
     2024#: lib\pwiki\PersonalWikiFrame.py:153
    19542025msgid "Bad formatted command line."
    19552026msgstr ""
    19562027
    1957 #: lib\pwiki\PersonalWikiFrame.py:352
     2028#: lib\pwiki\PersonalWikiFrame.py:350
    19582029msgid "Last wiki doesn't exist: %s"
    19592030msgstr ""
    19602031
    1961 #: lib\pwiki\PersonalWikiFrame.py:630
     2032#: lib\pwiki\PersonalWikiFrame.py:632
    19622033msgid "&New"
    19632034msgstr ""
    19642035
    1965 #: lib\pwiki\PersonalWikiFrame.py:631
     2036#: lib\pwiki\PersonalWikiFrame.py:633
    19662037msgid "Create new wiki"
    19672038msgstr ""
    19682039
    1969 #: lib\pwiki\PersonalWikiFrame.py:634
     2040#: lib\pwiki\PersonalWikiFrame.py:636
    19702041msgid "&Open"
    19712042msgstr ""
    19722043
    1973 #: lib\pwiki\PersonalWikiFrame.py:636
     2044#: lib\pwiki\PersonalWikiFrame.py:638
    19742045msgid "In &This Window..."
    19752046msgstr ""
    19762047
    1977 #: lib\pwiki\PersonalWikiFrame.py:638
     2048#: lib\pwiki\PersonalWikiFrame.py:640
    19782049msgid "Open wiki in this window"
    19792050msgstr ""
    19802051
    1981 #: lib\pwiki\PersonalWikiFrame.py:640
     2052#: lib\pwiki\PersonalWikiFrame.py:642
    19822053msgid "In &New Window..."
    19832054msgstr ""
    19842055
    1985 #: lib\pwiki\PersonalWikiFrame.py:642
     2056#: lib\pwiki\PersonalWikiFrame.py:644
    19862057msgid "Open wiki in a new window"
    19872058msgstr ""
    19882059
    1989 #: lib\pwiki\PersonalWikiFrame.py:644
     2060#: lib\pwiki\PersonalWikiFrame.py:646
    19902061msgid "&Current in New Window"
    19912062msgstr ""
    19922063
    1993 #: lib\pwiki\PersonalWikiFrame.py:646
     2064#: lib\pwiki\PersonalWikiFrame.py:648
    19942065msgid "Create new window for same wiki"
    19952066msgstr ""
    19962067
    1997 #: lib\pwiki\PersonalWikiFrame.py:651
     2068#: lib\pwiki\PersonalWikiFrame.py:653
    19982069msgid "&Recent"
    19992070msgstr ""
    20002071
    2001 #: lib\pwiki\PersonalWikiFrame.py:658
     2072#: lib\pwiki\PersonalWikiFrame.py:660
    20022073msgid "F&avorites"
    20032074msgstr ""
    20042075
    2005 #: lib\pwiki\PersonalWikiFrame.py:664
     2076#: lib\pwiki\PersonalWikiFrame.py:666
    20062077msgid "&Search Wiki..."
    20072078msgstr ""
    20082079
    2009 #: lib\pwiki\PersonalWikiFrame.py:665
     2080#: lib\pwiki\PersonalWikiFrame.py:667
    20102081msgid "Search whole wiki"
    20112082msgstr ""
    20122083
    2013 #: lib\pwiki\PersonalWikiFrame.py:673
     2084#: lib\pwiki\PersonalWikiFrame.py:675
    20142085msgid "Publish as HTML"
    20152086msgstr ""
    20162087
    2017 #: lib\pwiki\PersonalWikiFrame.py:676
     2088#: lib\pwiki\PersonalWikiFrame.py:678
    20182089msgid "Wiki as Single HTML Page"
    20192090msgstr ""
    20202091
    2021 #: lib\pwiki\PersonalWikiFrame.py:677
     2092#: lib\pwiki\PersonalWikiFrame.py:679
    20222093msgid "Publish Wiki as Single HTML Page"
    20232094msgstr ""
    20242095
    2025 #: lib\pwiki\PersonalWikiFrame.py:681
     2096#: lib\pwiki\PersonalWikiFrame.py:683
    20262097msgid "Wiki as Set of HTML Pages"
    20272098msgstr ""
    20282099
    2029 #: lib\pwiki\PersonalWikiFrame.py:682
     2100#: lib\pwiki\PersonalWikiFrame.py:684
    20302101msgid "Publish Wiki as Set of HTML Pages"
    20312102msgstr ""
    20322103
    2033 #: lib\pwiki\PersonalWikiFrame.py:686
     2104#: lib\pwiki\PersonalWikiFrame.py:688
    20342105msgid "Current Wiki Word as HTML Page"
    20352106msgstr ""
    20362107
    2037 #: lib\pwiki\PersonalWikiFrame.py:687
     2108#: lib\pwiki\PersonalWikiFrame.py:689
    20382109msgid "Publish Current Wiki Word as HTML Page"
    20392110msgstr ""
    20402111
    2041 #: lib\pwiki\PersonalWikiFrame.py:691
     2112#: lib\pwiki\PersonalWikiFrame.py:693
    20422113msgid "Sub-Tree as Single HTML Page"
    20432114msgstr ""
    20442115
    2045 #: lib\pwiki\PersonalWikiFrame.py:692
     2116#: lib\pwiki\PersonalWikiFrame.py:694
    20462117msgid "Publish Sub-Tree as Single HTML Page"
    20472118msgstr ""
    20482119
    2049 #: lib\pwiki\PersonalWikiFrame.py:696
     2120#: lib\pwiki\PersonalWikiFrame.py:698
    20502121msgid "Sub-Tree as Set of HTML Pages"
    20512122msgstr ""
    20522123
    2053 #: lib\pwiki\PersonalWikiFrame.py:697
     2124#: lib\pwiki\PersonalWikiFrame.py:699
    20542125msgid "Publish Sub-Tree as Set of HTML Pages"
    20552126msgstr ""
    20562127
    2057 #: lib\pwiki\PersonalWikiFrame.py:705
     2128#: lib\pwiki\PersonalWikiFrame.py:707
    20582129msgid "Other Export..."
    20592130msgstr ""
    20602131
    2061 #: lib\pwiki\PersonalWikiFrame.py:706 lib\pwiki\PersonalWikiFrame.py:1760
     2132#: lib\pwiki\PersonalWikiFrame.py:708 lib\pwiki\PersonalWikiFrame.py:1762
    20622133msgid "Open general export dialog"
    20632134msgstr ""
    20642135
    2065 #: lib\pwiki\PersonalWikiFrame.py:710
     2136#: lib\pwiki\PersonalWikiFrame.py:712
    20662137msgid "Print..."
    20672138msgstr ""
    20682139
    2069 #: lib\pwiki\PersonalWikiFrame.py:711
     2140#: lib\pwiki\PersonalWikiFrame.py:713
    20702141msgid "Show the print dialog"
    20712142msgstr ""
    20722143
    2073 #: lib\pwiki\PersonalWikiFrame.py:716
     2144#: lib\pwiki\PersonalWikiFrame.py:718
    20742145msgid "&Properties..."
    20752146msgstr ""
    20762147
    2077 #: lib\pwiki\PersonalWikiFrame.py:717
     2148#: lib\pwiki\PersonalWikiFrame.py:719
    20782149msgid "Show general information about current wiki"
    20792150msgstr ""
    20802151
    2081 #: lib\pwiki\PersonalWikiFrame.py:721
     2152#: lib\pwiki\PersonalWikiFrame.py:723
    20822153msgid "Maintenance"
    20832154msgstr ""
    20842155
    2085 #: lib\pwiki\PersonalWikiFrame.py:725
     2156#: lib\pwiki\PersonalWikiFrame.py:727
    20862157msgid "&Rebuild Wiki..."
    20872158msgstr ""
    20882159
    2089 #: lib\pwiki\PersonalWikiFrame.py:726
     2160#: lib\pwiki\PersonalWikiFrame.py:728
    20902161msgid "Rebuild this wiki and its cache completely"
    20912162msgstr ""
    20922163
    2093 #: lib\pwiki\PersonalWikiFrame.py:731
     2164#: lib\pwiki\PersonalWikiFrame.py:733
    20942165msgid "&Update cache..."
    20952166msgstr ""
    20962167
    2097 #: lib\pwiki\PersonalWikiFrame.py:732
     2168#: lib\pwiki\PersonalWikiFrame.py:734
    20982169msgid "Update cache where marked as not up to date"
    20992170msgstr ""
    21002171
    2101 #: lib\pwiki\PersonalWikiFrame.py:737
     2172#: lib\pwiki\PersonalWikiFrame.py:739
    21022173msgid "&Initiate update..."
    21032174msgstr ""
    21042175
    2105 #: lib\pwiki\PersonalWikiFrame.py:738
     2176#: lib\pwiki\PersonalWikiFrame.py:740
    21062177msgid "Initiate full cache update which is done mainly in background"
    21072178msgstr ""
    21082179
    2109 #: lib\pwiki\PersonalWikiFrame.py:745
     2180#: lib\pwiki\PersonalWikiFrame.py:747
    21102181msgid "Show job count..."
    21112182msgstr ""
    21122183
    2113 #: lib\pwiki\PersonalWikiFrame.py:746
     2184#: lib\pwiki\PersonalWikiFrame.py:748
    21142185msgid "Show how many update jobs are waiting in background"
    21152186msgstr ""
    21162187
    2117 #: lib\pwiki\PersonalWikiFrame.py:751
     2188#: lib\pwiki\PersonalWikiFrame.py:753
    21182189msgid "Open as &Type..."
    21192190msgstr ""
    21202191
    2121 #: lib\pwiki\PersonalWikiFrame.py:752
     2192#: lib\pwiki\PersonalWikiFrame.py:754
    21222193msgid "Open wiki with a specified wiki database type"
    21232194msgstr ""
    21242195
    2125 #: lib\pwiki\PersonalWikiFrame.py:756
     2196#: lib\pwiki\PersonalWikiFrame.py:758
    21262197msgid "Reconnect..."
    21272198msgstr ""
    21282199
    2129 #: lib\pwiki\PersonalWikiFrame.py:757
     2200#: lib\pwiki\PersonalWikiFrame.py:759
    21302201msgid "Reconnect to database after connection failure"
    21312202msgstr ""
    21322203
    2133 #: lib\pwiki\PersonalWikiFrame.py:763
     2204#: lib\pwiki\PersonalWikiFrame.py:765
    21342205msgid "&Optimise Database"
    21352206msgstr ""
    21362207
    2137 #: lib\pwiki\PersonalWikiFrame.py:764
     2208#: lib\pwiki\PersonalWikiFrame.py:766
    21382209msgid "Free unused space in database"
    21392210msgstr ""
    21402211
    2141 #: lib\pwiki\PersonalWikiFrame.py:771
     2212#: lib\pwiki\PersonalWikiFrame.py:773
    21422213msgid "&Copy .wiki files to database"
    21432214msgstr ""
    21442215
    2145 #: lib\pwiki\PersonalWikiFrame.py:772
     2216#: lib\pwiki\PersonalWikiFrame.py:774
    21462217msgid "Copy .wiki files to database"
    21472218msgstr ""
    21482219
    2149 #: lib\pwiki\PersonalWikiFrame.py:782
     2220#: lib\pwiki\PersonalWikiFrame.py:784
    21502221msgid "E&xit"
    21512222msgstr ""
    21522223
    2153 #: lib\pwiki\PersonalWikiFrame.py:782 lib\pwiki\PersonalWikiFrame.py:5405
     2224#: lib\pwiki\PersonalWikiFrame.py:784 lib\pwiki\PersonalWikiFrame.py:5407
    21542225msgid "Exit"
    21552226msgstr ""
    21562227
    2157 #: lib\pwiki\PersonalWikiFrame.py:947
     2228#: lib\pwiki\PersonalWikiFrame.py:949
    21582229msgid "Reread text blocks"
    21592230msgstr ""
    21602231
    2161 #: lib\pwiki\PersonalWikiFrame.py:948
     2232#: lib\pwiki\PersonalWikiFrame.py:950
    21622233msgid "Reread the text block file(s) and recreate menu"
    21632234msgstr ""
    21642235
    2165 #: lib\pwiki\PersonalWikiFrame.py:1004
     2236#: lib\pwiki\PersonalWikiFrame.py:1006
    21662237msgid "Add wiki"
    21672238msgstr ""
    21682239
    2169 #: lib\pwiki\PersonalWikiFrame.py:1005
     2240#: lib\pwiki\PersonalWikiFrame.py:1007
    21702241msgid "Add a wiki to the favorites"
    21712242msgstr ""
    21722243
    2173 #: lib\pwiki\PersonalWikiFrame.py:1010 lib\pwiki\PersonalWikiFrame.py:1011
     2244#: lib\pwiki\PersonalWikiFrame.py:1012 lib\pwiki\PersonalWikiFrame.py:1013
    21742245msgid "Manage favorites"
    21752246msgstr ""
    21762247
    2177 #: lib\pwiki\PersonalWikiFrame.py:1032 lib\pwiki\PersonalWikiFrame.py:1809
    2178 #: lib\pwiki\PersonalWikiFrame.py:2321 lib\pwiki\PersonalWikiFrame.py:4745
    2179 #: lib\pwiki\PersonalWikiFrame.py:5022
     2248#: lib\pwiki\PersonalWikiFrame.py:1034 lib\pwiki\PersonalWikiFrame.py:1811
     2249#: lib\pwiki\PersonalWikiFrame.py:2323 lib\pwiki\PersonalWikiFrame.py:4747
     2250#: lib\pwiki\PersonalWikiFrame.py:5024
    21802251msgid "Error while starting new WikidPad instance"
    21812252msgstr ""
    21822253
    2183 #: lib\pwiki\PersonalWikiFrame.py:1134
     2254#: lib\pwiki\PersonalWikiFrame.py:1136
    21842255msgid "&Undo"
    21852256msgstr ""
    21862257
    2187 #: lib\pwiki\PersonalWikiFrame.py:1138
     2258#: lib\pwiki\PersonalWikiFrame.py:1140
    21882259msgid "&Redo"
    21892260msgstr ""
    21902261
    2191 #: lib\pwiki\PersonalWikiFrame.py:1146
     2262#: lib\pwiki\PersonalWikiFrame.py:1148
    21922263msgid "&Search and Replace..."
    21932264msgstr ""
    21942265
    2195 #: lib\pwiki\PersonalWikiFrame.py:1148
     2266#: lib\pwiki\PersonalWikiFrame.py:1150
    21962267msgid "Search and replace inside current page"
    21972268msgstr ""
    21982269
    2199 #: lib\pwiki\PersonalWikiFrame.py:1154
     2270#: lib\pwiki\PersonalWikiFrame.py:1156
    22002271msgid "Cu&t"
    22012272msgstr ""
    22022273
    2203 #: lib\pwiki\PersonalWikiFrame.py:1159
     2274#: lib\pwiki\PersonalWikiFrame.py:1161
    22042275msgid "&Copy"
    22052276msgstr ""
    22062277
    2207 #: lib\pwiki\PersonalWikiFrame.py:1163
     2278#: lib\pwiki\PersonalWikiFrame.py:1165
    22082279msgid "&Paste"
    22092280msgstr ""
    22102281
    2211 #: lib\pwiki\PersonalWikiFrame.py:1170
     2282#: lib\pwiki\PersonalWikiFrame.py:1172
    22122283msgid "Copy to Sc&ratchPad"
    22132284msgstr ""
    22142285
    2215 #: lib\pwiki\PersonalWikiFrame.py:1172
     2286#: lib\pwiki\PersonalWikiFrame.py:1174
    22162287msgid "Copy selected text to ScratchPad"
    22172288msgstr ""
    22182289
    2219 #: lib\pwiki\PersonalWikiFrame.py:1178
     2290#: lib\pwiki\PersonalWikiFrame.py:1180
    22202291msgid "Paste T&extblock"
    22212292msgstr ""
    22222293
    2223 #: lib\pwiki\PersonalWikiFrame.py:1186
     2294#: lib\pwiki\PersonalWikiFrame.py:1188
    22242295msgid "C&lipboard Catcher"
    22252296msgstr ""
    22262297
    2227 #: lib\pwiki\PersonalWikiFrame.py:1189 lib\pwiki\PersonalWikiFrame.py:3993
     2298#: lib\pwiki\PersonalWikiFrame.py:1191 lib\pwiki\PersonalWikiFrame.py:3995
    22282299msgid "Set at Page"
    22292300msgstr ""
    22302301
    2231 #: lib\pwiki\PersonalWikiFrame.py:1191
     2302#: lib\pwiki\PersonalWikiFrame.py:1193
    22322303msgid "Text copied to clipboard is also appended to this page"
    22332304msgstr ""
    22342305
    2235 #: lib\pwiki\PersonalWikiFrame.py:1197
     2306#: lib\pwiki\PersonalWikiFrame.py:1199
    22362307msgid "Set at Cursor"
    22372308msgstr ""
    22382309
    2239 #: lib\pwiki\PersonalWikiFrame.py:1199
     2310#: lib\pwiki\PersonalWikiFrame.py:1201
    22402311msgid "Text copied to clipboard is also added to cursor position"
    22412312msgstr ""
    22422313
    2243 #: lib\pwiki\PersonalWikiFrame.py:1205
     2314#: lib\pwiki\PersonalWikiFrame.py:1207
    22442315msgid "Set Off"
    22452316msgstr ""
    22462317
    2247 #: lib\pwiki\PersonalWikiFrame.py:1207
     2318#: lib\pwiki\PersonalWikiFrame.py:1209
    22482319msgid "Switch off clipboard catcher"
    22492320msgstr ""
    22502321
    2251 #: lib\pwiki\PersonalWikiFrame.py:1218
     2322#: lib\pwiki\PersonalWikiFrame.py:1220
    22522323msgid "Spell Check..."
    22532324msgstr ""
    22542325
    2255 #: lib\pwiki\PersonalWikiFrame.py:1220
     2326#: lib\pwiki\PersonalWikiFrame.py:1222
    22562327msgid "Spell check current and possibly further pages"
    22572328msgstr ""
    22582329
    2259 #: lib\pwiki\PersonalWikiFrame.py:1260
     2330#: lib\pwiki\PersonalWikiFrame.py:1262
    22602331msgid "&Insert"
    22612332msgstr ""
    22622333
    2263 #: lib\pwiki\PersonalWikiFrame.py:1262
     2334#: lib\pwiki\PersonalWikiFrame.py:1264
    22642335msgid "&File URL..."
    22652336msgstr ""
    22662337
    2267 #: lib\pwiki\PersonalWikiFrame.py:1263
     2338#: lib\pwiki\PersonalWikiFrame.py:1265
    22682339msgid "Use file dialog to add URL"
    22692340msgstr ""
    22702341
    2271 #: lib\pwiki\PersonalWikiFrame.py:1268
     2342#: lib\pwiki\PersonalWikiFrame.py:1270
    22722343msgid "Current &Date"
    22732344msgstr ""
    22742345
    2275 #: lib\pwiki\PersonalWikiFrame.py:1269
     2346#: lib\pwiki\PersonalWikiFrame.py:1271
    22762347msgid "Insert current date"
    22772348msgstr ""
    22782349
    2279 #: lib\pwiki\PersonalWikiFrame.py:1278
     2350#: lib\pwiki\PersonalWikiFrame.py:1280
    22802351msgid "&Settings"
    22812352msgstr ""
    22822353
    2283 #: lib\pwiki\PersonalWikiFrame.py:1281
     2354#: lib\pwiki\PersonalWikiFrame.py:1283
    22842355msgid "&Date Format..."
    22852356msgstr ""
    22862357
    2287 #: lib\pwiki\PersonalWikiFrame.py:1282
     2358#: lib\pwiki\PersonalWikiFrame.py:1284
    22882359msgid "Set date format for inserting current date"
    22892360msgstr ""
    22902361
    2291 #: lib\pwiki\PersonalWikiFrame.py:1286
     2362#: lib\pwiki\PersonalWikiFrame.py:1288
    22922363msgid "Auto-&Wrap"
    22932364msgstr ""
    22942365
    2295 #: lib\pwiki\PersonalWikiFrame.py:1287
     2366#: lib\pwiki\PersonalWikiFrame.py:1289
    22962367msgid "Set if editor should wrap long lines"
    22972368msgstr ""
    22982369
    2299 #: lib\pwiki\PersonalWikiFrame.py:1301
     2370#: lib\pwiki\PersonalWikiFrame.py:1303
    23002371msgid "Auto-&Indent"
    23012372msgstr ""
    23022373
    2303 #: lib\pwiki\PersonalWikiFrame.py:1302
     2374#: lib\pwiki\PersonalWikiFrame.py:1304
    23042375msgid "Auto indentation"
    23052376msgstr ""
    23062377
    2307 #: lib\pwiki\PersonalWikiFrame.py:1315
     2378#: lib\pwiki\PersonalWikiFrame.py:1317
    23082379msgid "Auto-&Bullets"
    23092380msgstr ""
    23102381
    2311 #: lib\pwiki\PersonalWikiFrame.py:1316
     2382#: lib\pwiki\PersonalWikiFrame.py:1318
    23122383msgid "Show bullet on next line if current has one"
    23132384msgstr ""
    23142385
    2315 #: lib\pwiki\PersonalWikiFrame.py:1331
     2386#: lib\pwiki\PersonalWikiFrame.py:1333
    23162387msgid "Tabs to spaces"
    23172388msgstr ""
    23182389
    2319 #: lib\pwiki\PersonalWikiFrame.py:1332
     2390#: lib\pwiki\PersonalWikiFrame.py:1334
    23202391msgid "Write spaces when hitting TAB key"
    23212392msgstr ""
    23222393
    2323 #: lib\pwiki\PersonalWikiFrame.py:1350
     2394#: lib\pwiki\PersonalWikiFrame.py:1352
    23242395msgid "Show T&oolbar"
    23252396msgstr ""
    23262397
    2327 #: lib\pwiki\PersonalWikiFrame.py:1352
     2398#: lib\pwiki\PersonalWikiFrame.py:1354
    23282399msgid "Show toolbar"
    23292400msgstr ""
    23302401
    2331 #: lib\pwiki\PersonalWikiFrame.py:1359
     2402#: lib\pwiki\PersonalWikiFrame.py:1361
    23322403msgid "Show &Tree View"
    23332404msgstr ""
    23342405
    2335 #: lib\pwiki\PersonalWikiFrame.py:1361
     2406#: lib\pwiki\PersonalWikiFrame.py:1363
    23362407msgid "Show Tree Control"
    23372408msgstr ""
    23382409
    2339 #: lib\pwiki\PersonalWikiFrame.py:1368
     2410#: lib\pwiki\PersonalWikiFrame.py:1370
    23402411msgid "Show &Chron. View"
    23412412msgstr ""
    23422413
    2343 #: lib\pwiki\PersonalWikiFrame.py:1370
     2414#: lib\pwiki\PersonalWikiFrame.py:1372
    23442415msgid "Show chronological view"
    23452416msgstr ""
    23462417
    2347 #: lib\pwiki\PersonalWikiFrame.py:1378
     2418#: lib\pwiki\PersonalWikiFrame.py:1380
    23482419msgid "Show &Page Structure"
    23492420msgstr ""
    23502421
    2351 #: lib\pwiki\PersonalWikiFrame.py:1380
     2422#: lib\pwiki\PersonalWikiFrame.py:1382
    23522423msgid "Show structure (headings) of the page"
    23532424msgstr ""
    23542425
    2355 #: lib\pwiki\PersonalWikiFrame.py:1392
     2426#: lib\pwiki\PersonalWikiFrame.py:1394
    23562427msgid "Show &Indentation Guides"
    23572428msgstr ""
    23582429
    2359 #: lib\pwiki\PersonalWikiFrame.py:1393
     2430#: lib\pwiki\PersonalWikiFrame.py:1395
    23602431msgid "Show indentation guides in editor"
    23612432msgstr ""
    23622433
    2363 #: lib\pwiki\PersonalWikiFrame.py:1398
     2434#: lib\pwiki\PersonalWikiFrame.py:1400
    23642435msgid "Show Line &Numbers"
    23652436msgstr ""
    23662437
    2367 #: lib\pwiki\PersonalWikiFrame.py:1399
     2438#: lib\pwiki\PersonalWikiFrame.py:1401
    23682439msgid "Show line numbers in editor"
    23692440msgstr ""
    23702441
    2371 #: lib\pwiki\PersonalWikiFrame.py:1406
     2442#: lib\pwiki\PersonalWikiFrame.py:1408
    23722443msgid "Stay on Top"
    23732444msgstr ""
    23742445
    2375 #: lib\pwiki\PersonalWikiFrame.py:1408
     2446#: lib\pwiki\PersonalWikiFrame.py:1410
    23762447msgid "Stay on Top of all other windows"
    23772448msgstr ""
    23782449
    2379 #: lib\pwiki\PersonalWikiFrame.py:1416
     2450#: lib\pwiki\PersonalWikiFrame.py:1418
    23802451msgid "&Zoom In"
    23812452msgstr ""
    23822453
    2383 #: lib\pwiki\PersonalWikiFrame.py:1417 lib\pwiki\PersonalWikiFrame.py:2015
     2454#: lib\pwiki\PersonalWikiFrame.py:1419 lib\pwiki\PersonalWikiFrame.py:2017
    23842455msgid "Zoom In"
    23852456msgstr ""
    23862457
    2387 #: lib\pwiki\PersonalWikiFrame.py:1420
     2458#: lib\pwiki\PersonalWikiFrame.py:1422
    23882459msgid "Zoo&m Out"
    23892460msgstr ""
    23902461
    2391 #: lib\pwiki\PersonalWikiFrame.py:1421 lib\pwiki\PersonalWikiFrame.py:2020
     2462#: lib\pwiki\PersonalWikiFrame.py:1423 lib\pwiki\PersonalWikiFrame.py:2022
    23922463msgid "Zoom Out"
    23932464msgstr ""
    23942465
    2395 #: lib\pwiki\PersonalWikiFrame.py:1494
     2466#: lib\pwiki\PersonalWikiFrame.py:1496
    23962467msgid "Toggle Ed./Prev"
    23972468msgstr ""
    23982469
    2399 #: lib\pwiki\PersonalWikiFrame.py:1496 lib\pwiki\PersonalWikiFrame.py:2011
     2470#: lib\pwiki\PersonalWikiFrame.py:1498 lib\pwiki\PersonalWikiFrame.py:2013
    24002471msgid "Switch between editor and preview"
    24012472msgstr ""
    24022473
    2403 #: lib\pwiki\PersonalWikiFrame.py:1500
     2474#: lib\pwiki\PersonalWikiFrame.py:1502
    24042475msgid "Enter Edit Mode"
    24052476msgstr ""
    24062477
    2407 #: lib\pwiki\PersonalWikiFrame.py:1501
     2478#: lib\pwiki\PersonalWikiFrame.py:1503
    24082479msgid "Show editor in tab"
    24092480msgstr ""
    24102481
    2411 #: lib\pwiki\PersonalWikiFrame.py:1505
     2482#: lib\pwiki\PersonalWikiFrame.py:1507
    24122483msgid "Enter Preview Mode"
    24132484msgstr ""
    24142485
    2415 #: lib\pwiki\PersonalWikiFrame.py:1507
     2486#: lib\pwiki\PersonalWikiFrame.py:1509
    24162487msgid "Show preview in tab"
    24172488msgstr ""
    24182489
    2419 #: lib\pwiki\PersonalWikiFrame.py:1531
     2490#: lib\pwiki\PersonalWikiFrame.py:1533
    24202491msgid "&Save"
    24212492msgstr ""
    24222493
    2423 #: lib\pwiki\PersonalWikiFrame.py:1532
     2494#: lib\pwiki\PersonalWikiFrame.py:1534
    24242495msgid "Save all open pages"
    24252496msgstr ""
    24262497
    2427 #: lib\pwiki\PersonalWikiFrame.py:1539
     2498#: lib\pwiki\PersonalWikiFrame.py:1541
    24282499msgid "&Rename"
    24292500msgstr ""
    24302501
    2431 #: lib\pwiki\PersonalWikiFrame.py:1540
     2502#: lib\pwiki\PersonalWikiFrame.py:1542
    24322503msgid "Rename current wiki word"
    24332504msgstr ""
    24342505
    2435 #: lib\pwiki\PersonalWikiFrame.py:1546
     2506#: lib\pwiki\PersonalWikiFrame.py:1548
    24362507msgid "Delete current wiki word"
    24372508msgstr ""
    24382509
    2439 #: lib\pwiki\PersonalWikiFrame.py:1553
     2510#: lib\pwiki\PersonalWikiFrame.py:1555
    24402511msgid "Set as Roo&t"
    24412512msgstr ""
    24422513
    2443 #: lib\pwiki\PersonalWikiFrame.py:1554
     2514#: lib\pwiki\PersonalWikiFrame.py:1556
    24442515msgid "Set current wiki word as tree root"
    24452516msgstr ""
    24462517
    2447 #: lib\pwiki\PersonalWikiFrame.py:1558
     2518#: lib\pwiki\PersonalWikiFrame.py:1560
    24482519msgid "R&eset Root"
    24492520msgstr ""
    24502521
    2451 #: lib\pwiki\PersonalWikiFrame.py:1559
     2522#: lib\pwiki\PersonalWikiFrame.py:1561
    24522523msgid "Set home wiki word as tree root"
    24532524msgstr ""
    24542525
    2455 #: lib\pwiki\PersonalWikiFrame.py:1563
     2526#: lib\pwiki\PersonalWikiFrame.py:1565
    24562527msgid "S&ynchronise Tree"
    24572528msgstr ""
    24582529
    2459 #: lib\pwiki\PersonalWikiFrame.py:1564
     2530#: lib\pwiki\PersonalWikiFrame.py:1566
    24602531msgid "Find the current wiki word in the tree"
    24612532msgstr ""
    24622533
    2463 #: lib\pwiki\PersonalWikiFrame.py:1569
     2534#: lib\pwiki\PersonalWikiFrame.py:1571
    24642535msgid "&Follow Link"
    24652536msgstr ""
    24662537
    2467 #: lib\pwiki\PersonalWikiFrame.py:1570
     2538#: lib\pwiki\PersonalWikiFrame.py:1572
    24682539msgid "Activate link/word"
    24692540msgstr ""
    24702541
    2471 #: lib\pwiki\PersonalWikiFrame.py:1575
     2542#: lib\pwiki\PersonalWikiFrame.py:1577
    24722543msgid "Follow Link in &New Tab"
    24732544msgstr ""
    24742545
    2475 #: lib\pwiki\PersonalWikiFrame.py:1576
     2546#: lib\pwiki\PersonalWikiFrame.py:1578
    24762547msgid "Activate link/word in new tab"
    24772548msgstr ""
    24782549
    2479 #: lib\pwiki\PersonalWikiFrame.py:1581
     2550#: lib\pwiki\PersonalWikiFrame.py:1583
    24802551msgid "Copy &URL to Clipboard"
    24812552msgstr ""
    24822553
    2483 #: lib\pwiki\PersonalWikiFrame.py:1583
     2554#: lib\pwiki\PersonalWikiFrame.py:1585
    24842555msgid "Copy full \"wiki:\" URL of the word to clipboard"
    24852556msgstr ""
    24862557
    2487 #: lib\pwiki\PersonalWikiFrame.py:1591
     2558#: lib\pwiki\PersonalWikiFrame.py:1593
    24882559msgid "&Bold"
    24892560msgstr ""
    24902561
    2491 #: lib\pwiki\PersonalWikiFrame.py:1592 lib\pwiki\PersonalWikiFrame.py:1996
     2562#: lib\pwiki\PersonalWikiFrame.py:1594 lib\pwiki\PersonalWikiFrame.py:1998
    24922563msgid "Bold"
    24932564msgstr ""
    24942565
    2495 #: lib\pwiki\PersonalWikiFrame.py:1598
     2566#: lib\pwiki\PersonalWikiFrame.py:1600
    24962567msgid "&Italic"
    24972568msgstr ""
    24982569
    2499 #: lib\pwiki\PersonalWikiFrame.py:1599 lib\pwiki\PersonalWikiFrame.py:2002
     2570#: lib\pwiki\PersonalWikiFrame.py:1601 lib\pwiki\PersonalWikiFrame.py:2004
    25002571msgid "Italic"
    25012572msgstr ""
    25022573
    2503 #: lib\pwiki\PersonalWikiFrame.py:1605
     2574#: lib\pwiki\PersonalWikiFrame.py:1607
    25042575msgid "&Heading"
    25052576msgstr ""
    25062577
    2507 #: lib\pwiki\PersonalWikiFrame.py:1606
     2578#: lib\pwiki\PersonalWikiFrame.py:1608
    25082579msgid "Add Heading"
    25092580msgstr ""
    25102581
    2511 #: lib\pwiki\PersonalWikiFrame.py:1614
     2582#: lib\pwiki\PersonalWikiFrame.py:1616
    25122583msgid "&Rewrap Text"
    25132584msgstr ""
    25142585
    2515 #: lib\pwiki\PersonalWikiFrame.py:1616
     2586#: lib\pwiki\PersonalWikiFrame.py:1618
    25162587msgid "Rewrap Text"
    25172588msgstr ""
    25182589
    2519 #: lib\pwiki\PersonalWikiFrame.py:1621
     2590#: lib\pwiki\PersonalWikiFrame.py:1623
    25202591msgid "&Convert"
    25212592msgstr ""
    25222593
    2523 #: lib\pwiki\PersonalWikiFrame.py:1624
     2594#: lib\pwiki\PersonalWikiFrame.py:1626
    25242595msgid "Selection to &Link"
    25252596msgstr ""
    25262597
    2527 #: lib\pwiki\PersonalWikiFrame.py:1625
     2598#: lib\pwiki\PersonalWikiFrame.py:1627
    25282599msgid "Remove non-allowed characters and make sel. a wiki word link"
    25292600msgstr ""
    25302601
    2531 #: lib\pwiki\PersonalWikiFrame.py:1630
     2602#: lib\pwiki\PersonalWikiFrame.py:1632
    25322603msgid "Selection to &Wiki Word"
    25332604msgstr ""
    25342605
    2535 #: lib\pwiki\PersonalWikiFrame.py:1632
     2606#: lib\pwiki\PersonalWikiFrame.py:1634
    25362607msgid "Put selected text in a new or existing wiki word"
    25372608msgstr ""
    25382609
    2539 #: lib\pwiki\PersonalWikiFrame.py:1645
     2610#: lib\pwiki\PersonalWikiFrame.py:1647
    25402611msgid "&Icon Name"
    25412612msgstr ""
    25422613
    2543 #: lib\pwiki\PersonalWikiFrame.py:1657
     2614#: lib\pwiki\PersonalWikiFrame.py:1659
    25442615msgid "&Color Name"
    25452616msgstr ""
    25462617
    2547 #: lib\pwiki\PersonalWikiFrame.py:1665
     2618#: lib\pwiki\PersonalWikiFrame.py:1667
    25482619msgid "&Add Attribute"
    25492620msgstr ""
    25502621
    2551 #: lib\pwiki\PersonalWikiFrame.py:1674
     2622#: lib\pwiki\PersonalWikiFrame.py:1676
    25522623msgid "&Icon Attribute"
    25532624msgstr ""
    25542625
    2555 #: lib\pwiki\PersonalWikiFrame.py:1684
     2626#: lib\pwiki\PersonalWikiFrame.py:1686
    25562627msgid "&Color Attribute"
    25572628msgstr ""
    25582629
    2559 #: lib\pwiki\PersonalWikiFrame.py:1693
     2630#: lib\pwiki\PersonalWikiFrame.py:1695
    25602631msgid "&Back"
    25612632msgstr ""
    25622633
    2563 #: lib\pwiki\PersonalWikiFrame.py:1694
     2634#: lib\pwiki\PersonalWikiFrame.py:1696
    25642635msgid "Go backward"
    25652636msgstr ""
    25662637
    2567 #: lib\pwiki\PersonalWikiFrame.py:1697
     2638#: lib\pwiki\PersonalWikiFrame.py:1699
    25682639msgid "&Forward"
    25692640msgstr ""
    25702641
    2571 #: lib\pwiki\PersonalWikiFrame.py:1698
     2642#: lib\pwiki\PersonalWikiFrame.py:1700
    25722643msgid "Go forward"
    25732644msgstr ""
    25742645
    2575 #: lib\pwiki\PersonalWikiFrame.py:1702
     2646#: lib\pwiki\PersonalWikiFrame.py:1704
    25762647msgid "&Wiki Home"
    25772648msgstr ""
    25782649
    2579 #: lib\pwiki\PersonalWikiFrame.py:1703
     2650#: lib\pwiki\PersonalWikiFrame.py:1705
    25802651msgid "Go to wiki homepage"
    25812652msgstr ""
    25822653
    2583 #: lib\pwiki\PersonalWikiFrame.py:1710
     2654#: lib\pwiki\PersonalWikiFrame.py:1712
    25842655msgid "Go to &Page..."
    25852656msgstr ""
    25862657
    2587 #: lib\pwiki\PersonalWikiFrame.py:1711
     2658#: lib\pwiki\PersonalWikiFrame.py:1713
    25882659msgid "Open wiki word"
    25892660msgstr ""
    25902661
    2591 #: lib\pwiki\PersonalWikiFrame.py:1716
     2662#: lib\pwiki\PersonalWikiFrame.py:1718
    25922663msgid "Go to P&arent..."
    25932664msgstr ""
    25942665
    2595 #: lib\pwiki\PersonalWikiFrame.py:1718
     2666#: lib\pwiki\PersonalWikiFrame.py:1720
    25962667msgid "List parents of current wiki word"
    25972668msgstr ""
    25982669
    2599 #: lib\pwiki\PersonalWikiFrame.py:1721
     2670#: lib\pwiki\PersonalWikiFrame.py:1723
    26002671msgid "List &Children..."
    26012672msgstr ""
    26022673
    2603 #: lib\pwiki\PersonalWikiFrame.py:1723
     2674#: lib\pwiki\PersonalWikiFrame.py:1725
    26042675msgid "List children of current wiki word"
    26052676msgstr ""
    26062677
    2607 #: lib\pwiki\PersonalWikiFrame.py:1726
     2678#: lib\pwiki\PersonalWikiFrame.py:1728
    26082679msgid "List Pa&rentless Pages"
    26092680msgstr ""
    26102681
    2611 #: lib\pwiki\PersonalWikiFrame.py:1728
     2682#: lib\pwiki\PersonalWikiFrame.py:1730
    26122683msgid "List nodes with no parent relations"
    26132684msgstr ""
    26142685
    2615 #: lib\pwiki\PersonalWikiFrame.py:1733
     2686#: lib\pwiki\PersonalWikiFrame.py:1735
    26162687msgid "Show &History..."
    26172688msgstr ""
    26182689
    2619 #: lib\pwiki\PersonalWikiFrame.py:1734
     2690#: lib\pwiki\PersonalWikiFrame.py:1736
    26202691msgid "View tab history"
    26212692msgstr ""
    26222693
    2623 #: lib\pwiki\PersonalWikiFrame.py:1737
     2694#: lib\pwiki\PersonalWikiFrame.py:1739
    26242695msgid "&Up History..."
    26252696msgstr ""
    26262697
    2627 #: lib\pwiki\PersonalWikiFrame.py:1738
     2698#: lib\pwiki\PersonalWikiFrame.py:1740
    26282699msgid "Up in tab history"
    26292700msgstr ""
    26302701
    2631 #: lib\pwiki\PersonalWikiFrame.py:1741
     2702#: lib\pwiki\PersonalWikiFrame.py:1743
    26322703msgid "&Down History..."
    26332704msgstr ""
    26342705
    2635 #: lib\pwiki\PersonalWikiFrame.py:1742
     2706#: lib\pwiki\PersonalWikiFrame.py:1744
    26362707msgid "Down in tab history"
    26372708msgstr ""
    26382709
    2639 #: lib\pwiki\PersonalWikiFrame.py:1747
     2710#: lib\pwiki\PersonalWikiFrame.py:1749
    26402711msgid "Add B&ookmark"
    26412712msgstr ""
    26422713
    2643 #: lib\pwiki\PersonalWikiFrame.py:1748
     2714#: lib\pwiki\PersonalWikiFrame.py:1750
    26442715msgid "Add bookmark to page"
    26452716msgstr ""
    26462717
    2647 #: lib\pwiki\PersonalWikiFrame.py:1752
     2718#: lib\pwiki\PersonalWikiFrame.py:1754
    26482719msgid "Go to &Bookmark..."
    26492720msgstr ""
    26502721
    2651 #: lib\pwiki\PersonalWikiFrame.py:1753
     2722#: lib\pwiki\PersonalWikiFrame.py:1755
    26522723msgid "List bookmarks"
    26532724msgstr ""
    26542725
    2655 #: lib\pwiki\PersonalWikiFrame.py:1759
     2726#: lib\pwiki\PersonalWikiFrame.py:1761
    26562727msgid "&Export..."
    26572728msgstr ""
    26582729
    2659 #: lib\pwiki\PersonalWikiFrame.py:1763
     2730#: lib\pwiki\PersonalWikiFrame.py:1765
    26602731msgid "&Continuous Export..."
    26612732msgstr ""
    26622733
    2663 #: lib\pwiki\PersonalWikiFrame.py:1764
     2734#: lib\pwiki\PersonalWikiFrame.py:1766
    26642735msgid "Open export dialog for continuous export of changes"
    26652736msgstr ""
    26662737
    2667 #: lib\pwiki\PersonalWikiFrame.py:1770
     2738#: lib\pwiki\PersonalWikiFrame.py:1772
    26682739msgid "&Import..."
    26692740msgstr ""
    26702741
    2671 #: lib\pwiki\PersonalWikiFrame.py:1771
     2742#: lib\pwiki\PersonalWikiFrame.py:1773
    26722743msgid "Import dialog"
    26732744msgstr ""
    26742745
    2675 #: lib\pwiki\PersonalWikiFrame.py:1777
     2746#: lib\pwiki\PersonalWikiFrame.py:1779
    26762747msgid "Scripts"
    26772748msgstr ""
    26782749
    2679 #: lib\pwiki\PersonalWikiFrame.py:1778
     2750#: lib\pwiki\PersonalWikiFrame.py:1780
    26802751msgid "Run scripts, evaluate expressions"
    26812752msgstr ""
    26822753
    2683 #: lib\pwiki\PersonalWikiFrame.py:1780
     2754#: lib\pwiki\PersonalWikiFrame.py:1782
    26842755msgid "&Eval"
    26852756msgstr ""
    26862757
    2687 #: lib\pwiki\PersonalWikiFrame.py:1781
     2758#: lib\pwiki\PersonalWikiFrame.py:1783
    26882759msgid "Evaluate script blocks"
    26892760msgstr ""
    26902761
    2691 #: lib\pwiki\PersonalWikiFrame.py:1786
     2762#: lib\pwiki\PersonalWikiFrame.py:1788
    26922763msgid "Run Function &%i"
    26932764msgstr ""
    26942765
    2695 #: lib\pwiki\PersonalWikiFrame.py:1787
     2766#: lib\pwiki\PersonalWikiFrame.py:1789
    26962767msgid "Run script function %i"
    26972768msgstr ""
    26982769
    2699 #: lib\pwiki\PersonalWikiFrame.py:1792
     2770#: lib\pwiki\PersonalWikiFrame.py:1794
    27002771msgid "O&ptions..."
    27012772msgstr ""
    27022773
    2703 #: lib\pwiki\PersonalWikiFrame.py:1793
     2774#: lib\pwiki\PersonalWikiFrame.py:1795
    27042775msgid "Set options"
    27052776msgstr ""
    27062777
    2707 #: lib\pwiki\PersonalWikiFrame.py:1813
     2778#: lib\pwiki\PersonalWikiFrame.py:1815
    27082779msgid "&Open help wiki"
    27092780msgstr ""
    27102781
    2711 #: lib\pwiki\PersonalWikiFrame.py:1814
     2782#: lib\pwiki\PersonalWikiFrame.py:1816
    27122783msgid "Open WikidPadHelp, the help wiki"
    27132784msgstr ""
    27142785
    2715 #: lib\pwiki\PersonalWikiFrame.py:1823
     2786#: lib\pwiki\PersonalWikiFrame.py:1825
    27162787msgid "&Visit Homepage"
    27172788msgstr ""
    27182789
    2719 #: lib\pwiki\PersonalWikiFrame.py:1824
     2790#: lib\pwiki\PersonalWikiFrame.py:1826
    27202791msgid "Visit wikidPad homepage"
    27212792msgstr ""
    27222793
    2723 #: lib\pwiki\PersonalWikiFrame.py:1834
     2794#: lib\pwiki\PersonalWikiFrame.py:1836
    27242795msgid "Show &License"
    27252796msgstr ""
    27262797
    2727 #: lib\pwiki\PersonalWikiFrame.py:1835
     2798#: lib\pwiki\PersonalWikiFrame.py:1837
    27282799msgid "Show license of WikidPad and used components"
    27292800msgstr ""
    27302801
    2731 #: lib\pwiki\PersonalWikiFrame.py:1870
     2802#: lib\pwiki\PersonalWikiFrame.py:1872
    27322803msgid "&About"
    27332804msgstr ""
    27342805
    2735 #: lib\pwiki\PersonalWikiFrame.py:1874
     2806#: lib\pwiki\PersonalWikiFrame.py:1876
    27362807msgid "&Wiki"
    27372808msgstr ""
    27382809
    2739 #: lib\pwiki\PersonalWikiFrame.py:1875
     2810#: lib\pwiki\PersonalWikiFrame.py:1877
    27402811msgid "&Edit"
    27412812msgstr ""
    27422813
    2743 #: lib\pwiki\PersonalWikiFrame.py:1876
     2814#: lib\pwiki\PersonalWikiFrame.py:1878
    27442815msgid "&View"
    27452816msgstr ""
    27462817
    2747 #: lib\pwiki\PersonalWikiFrame.py:1877
     2818#: lib\pwiki\PersonalWikiFrame.py:1879
    27482819msgid "&Tabs"
    27492820msgstr ""
    27502821
    2751 #: lib\pwiki\PersonalWikiFrame.py:1878
     2822#: lib\pwiki\PersonalWikiFrame.py:1880
    27522823msgid "Wiki &Page"
    27532824msgstr ""
    27542825
    2755 #: lib\pwiki\PersonalWikiFrame.py:1879
     2826#: lib\pwiki\PersonalWikiFrame.py:1881
    27562827msgid "&Format"
    27572828msgstr ""
    27582829
    2759 #: lib\pwiki\PersonalWikiFrame.py:1880
     2830#: lib\pwiki\PersonalWikiFrame.py:1882
    27602831msgid "&Navigate"
    27612832msgstr ""
    27622833
    2763 #: lib\pwiki\PersonalWikiFrame.py:1881
     2834#: lib\pwiki\PersonalWikiFrame.py:1883
    27642835msgid "E&xtra"
    27652836msgstr ""
    27662837
    2767 #: lib\pwiki\PersonalWikiFrame.py:1897
     2838#: lib\pwiki\PersonalWikiFrame.py:1899
    27682839msgid "Pl&ugins"
    27692840msgstr ""
    27702841
    2771 #: lib\pwiki\PersonalWikiFrame.py:1903
     2842#: lib\pwiki\PersonalWikiFrame.py:1905
    27722843msgid "&Help"
    27732844msgstr ""
    27742845
    2775 #: lib\pwiki\PersonalWikiFrame.py:1905
     2846#: lib\pwiki\PersonalWikiFrame.py:1907
    27762847msgid "He&lp"
    27772848msgstr ""
    27782849
    2779 #: lib\pwiki\PersonalWikiFrame.py:1931 lib\pwiki\PersonalWikiFrame.py:1932
     2850#: lib\pwiki\PersonalWikiFrame.py:1933 lib\pwiki\PersonalWikiFrame.py:1934
    27802851msgid "Back"
    27812852msgstr ""
    27822853
    2783 #: lib\pwiki\PersonalWikiFrame.py:1937 lib\pwiki\PersonalWikiFrame.py:1938
     2854#: lib\pwiki\PersonalWikiFrame.py:1939 lib\pwiki\PersonalWikiFrame.py:1940
    27842855msgid "Forward"
    27852856msgstr ""
    27862857
    2787 #: lib\pwiki\PersonalWikiFrame.py:1943 lib\pwiki\PersonalWikiFrame.py:1944
     2858#: lib\pwiki\PersonalWikiFrame.py:1945 lib\pwiki\PersonalWikiFrame.py:1946
    27882859msgid "Wiki Home"
    27892860msgstr ""
    27902861
    2791 #: lib\pwiki\PersonalWikiFrame.py:1958 lib\pwiki\PersonalWikiFrame.py:1959
     2862#: lib\pwiki\PersonalWikiFrame.py:1960 lib\pwiki\PersonalWikiFrame.py:1961
    27922863msgid "Search"
    27932864msgstr ""
    27942865
    2795 #: lib\pwiki\PersonalWikiFrame.py:1964 lib\pwiki\PersonalWikiFrame.py:1965
     2866#: lib\pwiki\PersonalWikiFrame.py:1966 lib\pwiki\PersonalWikiFrame.py:1967
    27962867msgid "Find current word in tree"
    27972868msgstr ""
    27982869
    2799 #: lib\pwiki\PersonalWikiFrame.py:1968 lib\pwiki\PersonalWikiFrame.py:1986
    2800 #: lib\pwiki\PersonalWikiFrame.py:2006
     2870#: lib\pwiki\PersonalWikiFrame.py:1970 lib\pwiki\PersonalWikiFrame.py:1988
     2871#: lib\pwiki\PersonalWikiFrame.py:2008
    28012872msgid "Separator"
    28022873msgstr ""
    28032874
    2804 #: lib\pwiki\PersonalWikiFrame.py:1972 lib\pwiki\PersonalWikiFrame.py:1973
     2875#: lib\pwiki\PersonalWikiFrame.py:1974 lib\pwiki\PersonalWikiFrame.py:1975
    28052876msgid "Save Wiki Word"
    28062877msgstr ""
    28072878
    2808 #: lib\pwiki\PersonalWikiFrame.py:1977 lib\pwiki\PersonalWikiFrame.py:1978
    2809 #: lib\pwiki\PersonalWikiFrame.py:4044 lib\pwiki\PersonalWikiFrame.py:4165
     2879#: lib\pwiki\PersonalWikiFrame.py:1979 lib\pwiki\PersonalWikiFrame.py:1980
     2880#: lib\pwiki\PersonalWikiFrame.py:4046 lib\pwiki\PersonalWikiFrame.py:4167
    28102881msgid "Rename Wiki Word"
    28112882msgstr ""
    28122883
    2813 #: lib\pwiki\PersonalWikiFrame.py:1983 lib\pwiki\PersonalWikiFrame.py:4214
     2884#: lib\pwiki\PersonalWikiFrame.py:1985 lib\pwiki\PersonalWikiFrame.py:4216
    28142885msgid "Delete Wiki Word"
    28152886msgstr ""
    28162887
    2817 #: lib\pwiki\PersonalWikiFrame.py:1990
     2888#: lib\pwiki\PersonalWikiFrame.py:1992
    28182889msgid "Heading"
    28192890msgstr ""
    28202891
    2821 #: lib\pwiki\PersonalWikiFrame.py:2010
     2892#: lib\pwiki\PersonalWikiFrame.py:2012
    28222893msgid "Switch Editor/Preview"
    28232894msgstr ""
    28242895
    2825 #: lib\pwiki\PersonalWikiFrame.py:2031
     2896#: lib\pwiki\PersonalWikiFrame.py:2033
    28262897msgid "Wikize Selected Word "
    28272898msgstr ""
    28282899
    2829 #: lib\pwiki\PersonalWikiFrame.py:2032
     2900#: lib\pwiki\PersonalWikiFrame.py:2034
    28302901msgid "Wikize Selected Word"
    28312902msgstr ""
    28322903
    2833 #: lib\pwiki\PersonalWikiFrame.py:2104
     2904#: lib\pwiki\PersonalWikiFrame.py:2106
    28342905msgid "Line: 9999 Col: 9999 Pos: 9999999988888"
    28352906msgstr ""
    28362907
    2837 #: lib\pwiki\PersonalWikiFrame.py:2258
     2908#: lib\pwiki\PersonalWikiFrame.py:2260
    28382909msgid "Regular expression error"
    28392910msgstr ""
    28402911
    2841 #: lib\pwiki\PersonalWikiFrame.py:2267
     2912#: lib\pwiki\PersonalWikiFrame.py:2269
    28422913msgid "Are you sure you want to reconnect? You may lose some data by this process."
    28432914msgstr ""
    28442915
    2845 #: lib\pwiki\PersonalWikiFrame.py:2269
     2916#: lib\pwiki\PersonalWikiFrame.py:2271
    28462917msgid "Reconnect database"
    28472918msgstr ""
    28482919
    2849 #: lib\pwiki\PersonalWikiFrame.py:2283 lib\pwiki\PersonalWikiFrame.py:3236
     2920#: lib\pwiki\PersonalWikiFrame.py:2285 lib\pwiki\PersonalWikiFrame.py:3238
    28502921msgid "Error while trying to reconnect:\n"
    28512922msgstr ""
    28522923
    2853 #: lib\pwiki\PersonalWikiFrame.py:2285
     2924#: lib\pwiki\PersonalWikiFrame.py:2287
    28542925msgid "There was an error while reconnecting the database\n"
    28552926"\n"
     
    28582929msgstr ""
    28592930
    2860 #: lib\pwiki\PersonalWikiFrame.py:2288
     2931#: lib\pwiki\PersonalWikiFrame.py:2290
    28612932msgid "Error reconnecting!"
    28622933msgstr ""
    28632934
    2864 #: lib\pwiki\PersonalWikiFrame.py:2304 lib\pwiki\PersonalWikiFrame.py:3283
     2935#: lib\pwiki\PersonalWikiFrame.py:2306 lib\pwiki\PersonalWikiFrame.py:3285
    28652936msgid "Error while trying to write:\n"
    28662937msgstr ""
    28672938
    2868 #: lib\pwiki\PersonalWikiFrame.py:2306
     2939#: lib\pwiki\PersonalWikiFrame.py:2308
    28692940msgid "There was an error while writing to the database\n"
    28702941"\n"
     
    28732944msgstr ""
    28742945
    2875 #: lib\pwiki\PersonalWikiFrame.py:2309
     2946#: lib\pwiki\PersonalWikiFrame.py:2311
    28762947msgid "Error writing!"
    28772948msgstr ""
    28782949
    2879 #: lib\pwiki\PersonalWikiFrame.py:2407
     2950#: lib\pwiki\PersonalWikiFrame.py:2409
    28802951msgid "There was an error loading the icons for the tree control."
    28812952msgstr ""
    28822953
    2883 #: lib\pwiki\PersonalWikiFrame.py:2627
     2954#: lib\pwiki\PersonalWikiFrame.py:2629
    28842955msgid "No data handler available to create database."
    28852956msgstr ""
    28862957
    2887 #: lib\pwiki\PersonalWikiFrame.py:2639
     2958#: lib\pwiki\PersonalWikiFrame.py:2641
    28882959msgid "A wiki already exists in '%s', overwrite? (This deletes everything in and below this directory!)"
    28892960msgstr ""
    28902961
    2891 #: lib\pwiki\PersonalWikiFrame.py:2641
     2962#: lib\pwiki\PersonalWikiFrame.py:2643
    28922963msgid "Warning"
    28932964msgstr ""
    28942965
    2895 #: lib\pwiki\PersonalWikiFrame.py:2682
     2966#: lib\pwiki\PersonalWikiFrame.py:2684
    28962967msgid "A wiki database already exists in this location, overwrite?"
    28972968msgstr ""
    28982969
    2899 #: lib\pwiki\PersonalWikiFrame.py:2684
     2970#: lib\pwiki\PersonalWikiFrame.py:2686
    29002971msgid "Wiki DB Exists"
    29012972msgstr ""
    29022973
    2903 #: lib\pwiki\PersonalWikiFrame.py:2696
     2974#: lib\pwiki\PersonalWikiFrame.py:2698
    29042975msgid "There was an error creating the wiki database."
    29052976msgstr ""
    29062977
    2907 #: lib\pwiki\PersonalWikiFrame.py:2765 lib\pwiki\PersonalWikiFrame.py:2766
     2978#: lib\pwiki\PersonalWikiFrame.py:2767 lib\pwiki\PersonalWikiFrame.py:2768
    29082979msgid "Choose database type"
    29092980msgstr ""
    29102981
    2911 #: lib\pwiki\PersonalWikiFrame.py:2799
     2982#: lib\pwiki\PersonalWikiFrame.py:2801
    29122983msgid "Invalid path or missing file '%s'"
    29132984msgstr ""
    29142985
    2915 #: lib\pwiki\PersonalWikiFrame.py:2850 lib\pwiki\PersonalWikiFrame.py:2930
     2986#: lib\pwiki\PersonalWikiFrame.py:2852 lib\pwiki\PersonalWikiFrame.py:2932
    29162987msgid "Error connecting to database in '%s'"
    29172988msgstr ""
    29182989
    2919 #: lib\pwiki\PersonalWikiFrame.py:2855
     2990#: lib\pwiki\PersonalWikiFrame.py:2857
    29202991msgid "The wiki needs an update to work with this version of WikidPad. Older versions of WikidPad may be unable to read the wiki after an update."
    29212992msgstr ""
    29222993
    2923 #: lib\pwiki\PersonalWikiFrame.py:2858
     2994#: lib\pwiki\PersonalWikiFrame.py:2860
    29242995msgid "Update database?"
    29252996msgstr ""
    29262997
    2927 #: lib\pwiki\PersonalWikiFrame.py:2893
     2998#: lib\pwiki\PersonalWikiFrame.py:2895
    29282999msgid "Wiki '%s' is probably in use by different\n"
    29293000"instance of WikidPad. Connect anyway (dangerous!)?"
    29303001msgstr ""
    29313002
    2932 #: lib\pwiki\PersonalWikiFrame.py:2895
     3003#: lib\pwiki\PersonalWikiFrame.py:2897
    29333004msgid "Wiki already in use"
    29343005msgstr ""
    29353006
    2936 #: lib\pwiki\PersonalWikiFrame.py:2904
     3007#: lib\pwiki\PersonalWikiFrame.py:2906
    29373008msgid "Configuration file '%s' is corrupted or missing.\n"
    29383009"You may have to change some settings in configuration page \"Current Wiki\" and below which were lost."
    29393010msgstr ""
    29403011
    2941 #: lib\pwiki\PersonalWikiFrame.py:2937
     3012#: lib\pwiki\PersonalWikiFrame.py:2939
    29423013msgid "Can't write to database '%s'"
    29433014msgstr ""
    29443015
    2945 #: lib\pwiki\PersonalWikiFrame.py:3120
     3016#: lib\pwiki\PersonalWikiFrame.py:3122
    29463017msgid "There is no (write-)access to underlying wiki\n"
    29473018"Close anyway and loose possible changes?"
    29483019msgstr ""
    29493020
    2950 #: lib\pwiki\PersonalWikiFrame.py:3122
     3021#: lib\pwiki\PersonalWikiFrame.py:3124
    29513022msgid "Close anyway"
    29523023msgstr ""
    29533024
    2954 #: lib\pwiki\PersonalWikiFrame.py:3206
     3025#: lib\pwiki\PersonalWikiFrame.py:3208
    29553026msgid "This operation requires an open database"
    29563027msgstr ""
    29573028
    2958 #: lib\pwiki\PersonalWikiFrame.py:3207
     3029#: lib\pwiki\PersonalWikiFrame.py:3209
    29593030msgid "No open database"
    29603031msgstr ""
    29613032
    2962 #: lib\pwiki\PersonalWikiFrame.py:3219
     3033#: lib\pwiki\PersonalWikiFrame.py:3221
    29633034msgid "No connection to database. Try to reconnect?"
    29643035msgstr ""
    29653036
    2966 #: lib\pwiki\PersonalWikiFrame.py:3220
     3037#: lib\pwiki\PersonalWikiFrame.py:3222
    29673038msgid "Reconnect database?"
    29683039msgstr ""
    29693040
    2970 #: lib\pwiki\PersonalWikiFrame.py:3227
     3041#: lib\pwiki\PersonalWikiFrame.py:3229
    29713042msgid "Trying to reconnect database..."
    29723043msgstr ""
    29733044
    2974 #: lib\pwiki\PersonalWikiFrame.py:3239
     3045#: lib\pwiki\PersonalWikiFrame.py:3241
    29753046msgid "Error while reconnecting database"
    29763047msgstr ""
    29773048
    2978 #: lib\pwiki\PersonalWikiFrame.py:3264
     3049#: lib\pwiki\PersonalWikiFrame.py:3266
    29793050msgid "This operation needs write access to database\n"
    29803051"Try to write?"
    29813052msgstr ""
    29823053
    2983 #: lib\pwiki\PersonalWikiFrame.py:3265
     3054#: lib\pwiki\PersonalWikiFrame.py:3267
    29843055msgid "Try writing?"
    29853056msgstr ""
    29863057
    2987 #: lib\pwiki\PersonalWikiFrame.py:3272
     3058#: lib\pwiki\PersonalWikiFrame.py:3274
    29883059msgid "Trying to write to database..."
    29893060msgstr ""
    29903061
    2991 #: lib\pwiki\PersonalWikiFrame.py:3286
     3062#: lib\pwiki\PersonalWikiFrame.py:3288
    29923063msgid "Error while writing to database"
    29933064msgstr ""
    29943065
    2995 #: lib\pwiki\PersonalWikiFrame.py:3310
     3066#: lib\pwiki\PersonalWikiFrame.py:3312
    29963067msgid "Database connection error: %s.\n"
    29973068"Try to re-establish, then run \"Wiki\"->\"Reconnect\""
    29983069msgstr ""
    29993070
    3000 #: lib\pwiki\PersonalWikiFrame.py:3312 lib\pwiki\PersonalWikiFrame.py:3329
     3071#: lib\pwiki\PersonalWikiFrame.py:3314 lib\pwiki\PersonalWikiFrame.py:3331
    30013072msgid "Connection lost"
    30023073msgstr ""
    30033074
    3004 #: lib\pwiki\PersonalWikiFrame.py:3327
     3075#: lib\pwiki\PersonalWikiFrame.py:3329
    30053076msgid "No write access to database: %s.\n"
    30063077" Try to re-establish, then run \"Wiki\"->\"Reconnect\""
    30073078msgstr ""
    30083079
    3009 #: lib\pwiki\PersonalWikiFrame.py:3346
     3080#: lib\pwiki\PersonalWikiFrame.py:3348
    30103081msgid "Trying to reconnect ..."
    30113082msgstr ""
    30123083
    3013 #: lib\pwiki\PersonalWikiFrame.py:3355
     3084#: lib\pwiki\PersonalWikiFrame.py:3357
    30143085msgid "Error while trying to reconnect:"
    30153086msgstr ""
    30163087
    3017 #: lib\pwiki\PersonalWikiFrame.py:3564
     3088#: lib\pwiki\PersonalWikiFrame.py:3566
    30183089msgid "Couldn't start file"
    30193090msgstr ""
    30203091
    3021 #: lib\pwiki\PersonalWikiFrame.py:3579
     3092#: lib\pwiki\PersonalWikiFrame.py:3581
    30223093msgid "Couldn't open wiki: %s"
    30233094msgstr ""
    30243095
    3025 #: lib\pwiki\PersonalWikiFrame.py:3609
     3096#: lib\pwiki\PersonalWikiFrame.py:3611
    30263097msgid "Mod.: %s"
    30273098msgstr ""
    30283099
    3029 #: lib\pwiki\PersonalWikiFrame.py:3610
     3100#: lib\pwiki\PersonalWikiFrame.py:3612
    30303101msgid "; Crea.: %s"
    30313102msgstr ""
    30323103
    3033 #: lib\pwiki\PersonalWikiFrame.py:3646
     3104#: lib\pwiki\PersonalWikiFrame.py:3648
    30343105msgid "Parent nodes of '%s'"
    30353106msgstr ""
    30363107
    3037 #: lib\pwiki\PersonalWikiFrame.py:3658
     3108#: lib\pwiki\PersonalWikiFrame.py:3660
    30383109msgid "Parentless nodes"
    30393110msgstr ""
    30403111
    3041 #: lib\pwiki\PersonalWikiFrame.py:3670
     3112#: lib\pwiki\PersonalWikiFrame.py:3672
    30423113msgid "Child nodes of '%s'"
    30433114msgstr ""
    30443115
    3045 #: lib\pwiki\PersonalWikiFrame.py:3683
     3116#: lib\pwiki\PersonalWikiFrame.py:3685
    30463117msgid "Bookmarks"
    30473118msgstr ""
    30483119
    3049 #: lib\pwiki\PersonalWikiFrame.py:3807
     3120#: lib\pwiki\PersonalWikiFrame.py:3809
    30503121msgid "Wiki: %s"
    30513122msgstr ""
    30523123
    3053 #: lib\pwiki\PersonalWikiFrame.py:3988
     3124#: lib\pwiki\PersonalWikiFrame.py:3990
    30543125msgid "Set at Page: %s\t%s"
    30553126msgstr ""
    30563127
    3057 #: lib\pwiki\PersonalWikiFrame.py:4004
     3128#: lib\pwiki\PersonalWikiFrame.py:4006
    30583129msgid "Error saving global configuration"
    30593130msgstr ""
    30603131
    3061 #: lib\pwiki\PersonalWikiFrame.py:4015
     3132#: lib\pwiki\PersonalWikiFrame.py:4017
    30623133msgid "Error saving current configuration"
    30633134msgstr ""
    30643135
    3065 #: lib\pwiki\PersonalWikiFrame.py:4037
     3136#: lib\pwiki\PersonalWikiFrame.py:4039
    30663137msgid "No real wiki word selected to rename"
    30673138msgstr ""
    30683139
    3069 #: lib\pwiki\PersonalWikiFrame.py:4043
     3140#: lib\pwiki\PersonalWikiFrame.py:4045
    30703141msgid "Rename '%s' to:"
    30713142msgstr ""
    30723143
    3073 #: lib\pwiki\PersonalWikiFrame.py:4057
     3144#: lib\pwiki\PersonalWikiFrame.py:4059
    30743145msgid "Description:"
    30753146msgstr ""
    30763147
    3077 #: lib\pwiki\PersonalWikiFrame.py:4058
     3148#: lib\pwiki\PersonalWikiFrame.py:4060
    30783149msgid "Store new version"
    30793150msgstr ""
    30803151
    3081 #: lib\pwiki\PersonalWikiFrame.py:4072
     3152#: lib\pwiki\PersonalWikiFrame.py:4074
    30823153msgid "Do you want to delete all stored versions?"
    30833154msgstr ""
    30843155
    3085 #: lib\pwiki\PersonalWikiFrame.py:4073
     3156#: lib\pwiki\PersonalWikiFrame.py:4075
    30863157msgid "Delete All Versions"
    30873158msgstr ""
    30883159
    3089 #: lib\pwiki\PersonalWikiFrame.py:4139
     3160#: lib\pwiki\PersonalWikiFrame.py:4141
    30903161msgid "Can't rename to itself"
    30913162msgstr ""
    30923163
    3093 #: lib\pwiki\PersonalWikiFrame.py:4143
     3164#: lib\pwiki\PersonalWikiFrame.py:4145
    30943165msgid "The scratch pad cannot be renamed."
    30953166msgstr ""
    30963167
    3097 #: lib\pwiki\PersonalWikiFrame.py:4149
     3168#: lib\pwiki\PersonalWikiFrame.py:4151
    30983169msgid "Cannot rename to '%s', word already exists"
    30993170msgstr ""
    31003171
    3101 #: lib\pwiki\PersonalWikiFrame.py:4162
    3102 msgid "Do you want to modify all links to the wiki word '%s' renamed to '%s' (this operation is unrealiable)?"
    3103 msgstr ""
    3104 
    3105 #: lib\pwiki\PersonalWikiFrame.py:4202
     3172#: lib\pwiki\PersonalWikiFrame.py:4164
     3173msgid "Do you want to modify all links to the wiki word '%s' renamed to '%s' (this operation is unreliable)?"
     3174msgstr ""
     3175
     3176#: lib\pwiki\PersonalWikiFrame.py:4204
    31063177msgid "The scratch pad cannot be deleted"
    31073178msgstr ""
    31083179
    3109 #: lib\pwiki\PersonalWikiFrame.py:4206
     3180#: lib\pwiki\PersonalWikiFrame.py:4208
    31103181msgid "No real wiki word to delete"
    31113182msgstr ""
    31123183
    3113 #: lib\pwiki\PersonalWikiFrame.py:4213
     3184#: lib\pwiki\PersonalWikiFrame.py:4215
    31143185msgid "Are you sure you want to delete wiki word '%s'?"
    31153186msgstr ""
    31163187
    3117 #: lib\pwiki\PersonalWikiFrame.py:4242
     3188#: lib\pwiki\PersonalWikiFrame.py:4244
    31183189msgid "No real wiki word to modify"
    31193190msgstr ""
    31203191
    3121 #: lib\pwiki\PersonalWikiFrame.py:4256
     3192#: lib\pwiki\PersonalWikiFrame.py:4258
    31223193msgid "Replace text by WikiWord:"
    31233194msgstr ""
    31243195
    3125 #: lib\pwiki\PersonalWikiFrame.py:4257
     3196#: lib\pwiki\PersonalWikiFrame.py:4259
    31263197msgid "Replace by Wiki Word"
    31273198msgstr ""
    31283199
    3129 #: lib\pwiki\PersonalWikiFrame.py:4266
     3200#: lib\pwiki\PersonalWikiFrame.py:4268
    31303201msgid "'%s' is an invalid wiki word."
    31313202msgstr ""
    31323203
    3133 #: lib\pwiki\PersonalWikiFrame.py:4273
     3204#: lib\pwiki\PersonalWikiFrame.py:4275
    31343205msgid "Wiki word %s exists already\n"
    31353206"Would you like to append to the word?"
    31363207msgstr ""
    31373208
    3138 #: lib\pwiki\PersonalWikiFrame.py:4276
     3209#: lib\pwiki\PersonalWikiFrame.py:4278
    31393210msgid "Word exists"
    31403211msgstr ""
    31413212
    3142 #: lib\pwiki\PersonalWikiFrame.py:4597
     3213#: lib\pwiki\PersonalWikiFrame.py:4599
    31433214msgid "Choose a file to create URL for"
    31443215msgstr ""
    31453216
    3146 #: lib\pwiki\PersonalWikiFrame.py:4649
     3217#: lib\pwiki\PersonalWikiFrame.py:4651
    31473218msgid "Are you sure you want to start a full rebuild of wiki in background?"
    31483219msgstr ""
    31493220
    3150 #: lib\pwiki\PersonalWikiFrame.py:4651
     3221#: lib\pwiki\PersonalWikiFrame.py:4653
    31513222msgid "Initiate update"
    31523223msgstr ""
    31533224
    3154 #: lib\pwiki\PersonalWikiFrame.py:4658 lib\pwiki\PersonalWikiFrame.py:4659
     3225#: lib\pwiki\PersonalWikiFrame.py:4660 lib\pwiki\PersonalWikiFrame.py:4661
    31553226msgid "     Initiating update     "
    31563227msgstr ""
    31573228
    3158 #: lib\pwiki\PersonalWikiFrame.py:4673
     3229#: lib\pwiki\PersonalWikiFrame.py:4675
    31593230msgid "Error initiating update"
    31603231msgstr ""
    31613232
    3162 #: lib\pwiki\PersonalWikiFrame.py:4682
     3233#: lib\pwiki\PersonalWikiFrame.py:4684
    31633234msgid "Are you sure you want to rebuild this wiki? You may want to backup your data first!"
    31643235msgstr ""
    31653236
    3166 #: lib\pwiki\PersonalWikiFrame.py:4684
     3237#: lib\pwiki\PersonalWikiFrame.py:4686
    31673238msgid "Rebuild wiki"
    31683239msgstr ""
    31693240
    3170 #: lib\pwiki\PersonalWikiFrame.py:4691 lib\pwiki\PersonalWikiFrame.py:4692
     3241#: lib\pwiki\PersonalWikiFrame.py:4693 lib\pwiki\PersonalWikiFrame.py:4694
    31713242msgid "     Rebuilding wiki     "
    31723243msgstr ""
    31733244
    3174 #: lib\pwiki\PersonalWikiFrame.py:4707
     3245#: lib\pwiki\PersonalWikiFrame.py:4709
    31753246msgid "Error rebuilding wiki"
    31763247msgstr ""
    31773248
    3178 #: lib\pwiki\PersonalWikiFrame.py:4755
     3249#: lib\pwiki\PersonalWikiFrame.py:4757
    31793250msgid "This could overwrite pages in the database. Continue?"
    31803251msgstr ""
    31813252
    3182 #: lib\pwiki\PersonalWikiFrame.py:4756
     3253#: lib\pwiki\PersonalWikiFrame.py:4758
    31833254msgid "Import pagefiles"
    31843255msgstr ""
    31853256
    3186 #: lib\pwiki\PersonalWikiFrame.py:4875
     3257#: lib\pwiki\PersonalWikiFrame.py:4877
    31873258msgid "Unknown dialog type"
    31883259msgstr ""
    31893260
    3190 #: lib\pwiki\PersonalWikiFrame.py:4888
     3261#: lib\pwiki\PersonalWikiFrame.py:4890
    31913262msgid "Internal Error"
    31923263msgstr ""
    31933264
    3194 #: lib\pwiki\PersonalWikiFrame.py:5004 lib\pwiki\PersonalWikiFrame.py:5012
    3195 #: lib\pwiki\PersonalWikiFrame.py:5030
     3265#: lib\pwiki\PersonalWikiFrame.py:5006 lib\pwiki\PersonalWikiFrame.py:5014
     3266#: lib\pwiki\PersonalWikiFrame.py:5032
    31963267msgid "Choose a Wiki to open"
    31973268msgstr ""
    31983269
    3199 #: lib\pwiki\PersonalWikiFrame.py:5040
     3270#: lib\pwiki\PersonalWikiFrame.py:5042
    32003271msgid "Name for new wiki (must be in the form of a WikiWord):"
    32013272msgstr ""
    32023273
    3203 #: lib\pwiki\PersonalWikiFrame.py:5041
     3274#: lib\pwiki\PersonalWikiFrame.py:5043
    32043275msgid "Create New Wiki"
    32053276msgstr ""
    32063277
    3207 #: lib\pwiki\PersonalWikiFrame.py:5055
     3278#: lib\pwiki\PersonalWikiFrame.py:5057
    32083279msgid "Directory to store new wiki"
    32093280msgstr ""
    32103281
    3211 #: lib\pwiki\PersonalWikiFrame.py:5061
    3212 #: lib\pwiki\wikidata\WikiDataManager.py:1176
     3282#: lib\pwiki\PersonalWikiFrame.py:5063
     3283#: lib\pwiki\wikidata\WikiDataManager.py:1178
    32133284msgid "'%s' is an invalid wiki word. %s"
    32143285msgstr ""
    32153286
    3216 #: lib\pwiki\PersonalWikiFrame.py:5338
     3287#: lib\pwiki\PersonalWikiFrame.py:5340
    32173288msgid "Clipboard Catcher at Cursor"
    32183289msgstr ""
    32193290
    3220 #: lib\pwiki\PersonalWikiFrame.py:5342
     3291#: lib\pwiki\PersonalWikiFrame.py:5344
    32213292msgid "Clipboard Catcher off"
    32223293msgstr ""
    32233294
    3224 #: lib\pwiki\PersonalWikiFrame.py:5403
     3295#: lib\pwiki\PersonalWikiFrame.py:5405
    32253296msgid "Restore"
    32263297msgstr ""
    32273298
    3228 #: lib\pwiki\PersonalWikiFrame.py:5404
     3299#: lib\pwiki\PersonalWikiFrame.py:5406
    32293300msgid "Save"
    32303301msgstr ""
     
    35733644#: lib\pwiki\SearchAndReplaceDialogs.py:700
    35743645#: lib\pwiki\SearchAndReplaceDialogs.py:713
     3646#: lib\pwiki\SearchAndReplaceDialogs.py:932
     3647#: lib\pwiki\SearchAndReplaceDialogs.py:1097
     3648#: lib\pwiki\SearchAndReplaceDialogs.py:1113
     3649#: lib\pwiki\SearchAndReplaceDialogs.py:1161
     3650#: lib\pwiki\SearchAndReplaceDialogs.py:1172
     3651#: lib\pwiki\SearchAndReplaceDialogs.py:1240
     3652#: lib\pwiki\SearchAndReplaceDialogs.py:1279
     3653#: lib\pwiki\SearchAndReplaceDialogs.py:1433
     3654#: lib\pwiki\SearchAndReplaceDialogs.py:2046
     3655msgid "Error in regular expression"
     3656msgstr ""
     3657
     3658#: lib\pwiki\SearchAndReplaceDialogs.py:741
     3659#: lib\pwiki\SearchAndReplaceDialogs.py:1235
     3660msgid "%i replacements done"
     3661msgstr ""
     3662
     3663#: lib\pwiki\SearchAndReplaceDialogs.py:742
     3664#: lib\pwiki\SearchAndReplaceDialogs.py:1180
     3665#: lib\pwiki\SearchAndReplaceDialogs.py:1236
     3666msgid "Replace All"
     3667msgstr ""
     3668
    35753669#: lib\pwiki\SearchAndReplaceDialogs.py:931
    3576 #: lib\pwiki\SearchAndReplaceDialogs.py:1096
    3577 #: lib\pwiki\SearchAndReplaceDialogs.py:1112
    3578 #: lib\pwiki\SearchAndReplaceDialogs.py:1160
    3579 #: lib\pwiki\SearchAndReplaceDialogs.py:1171
    3580 #: lib\pwiki\SearchAndReplaceDialogs.py:1239
    3581 #: lib\pwiki\SearchAndReplaceDialogs.py:1278
    3582 #: lib\pwiki\SearchAndReplaceDialogs.py:1433
    3583 #: lib\pwiki\SearchAndReplaceDialogs.py:2045
    3584 msgid "Error in regular expression"
    3585 msgstr ""
    3586 
    3587 #: lib\pwiki\SearchAndReplaceDialogs.py:741
    3588 #: lib\pwiki\SearchAndReplaceDialogs.py:1234
    3589 msgid "%i replacements done"
    3590 msgstr ""
    3591 
    3592 #: lib\pwiki\SearchAndReplaceDialogs.py:742
    3593 #: lib\pwiki\SearchAndReplaceDialogs.py:1179
    3594 #: lib\pwiki\SearchAndReplaceDialogs.py:1235
    3595 msgid "Replace All"
    3596 msgstr ""
    3597 
    3598 #: lib\pwiki\SearchAndReplaceDialogs.py:930
    35993670msgid "Bad regular expression '%s':\n"
    36003671"%s"
    36013672msgstr ""
    36023673
    3603 #: lib\pwiki\SearchAndReplaceDialogs.py:1179
     3674#: lib\pwiki\SearchAndReplaceDialogs.py:1180
    36043675msgid "Replace all occurrences?"
    36053676msgstr ""
    36063677
    3607 #: lib\pwiki\SearchAndReplaceDialogs.py:1286
     3678#: lib\pwiki\SearchAndReplaceDialogs.py:1287
    36083679msgid "Choose search title"
    36093680msgstr ""
    36103681
    3611 #: lib\pwiki\SearchAndReplaceDialogs.py:1296
     3682#: lib\pwiki\SearchAndReplaceDialogs.py:1297
    36123683msgid "Do you want to overwrite existing search '%s'?"
    36133684msgstr ""
    36143685
    3615 #: lib\pwiki\SearchAndReplaceDialogs.py:1297
     3686#: lib\pwiki\SearchAndReplaceDialogs.py:1298
    36163687msgid "Overwrite search"
    36173688msgstr ""
    36183689
    3619 #: lib\pwiki\SearchAndReplaceDialogs.py:1312
     3690#: lib\pwiki\SearchAndReplaceDialogs.py:1313
    36203691msgid "Invalid search string, can't save as view"
    36213692msgstr ""
     
    36333704msgstr ""
    36343705
    3635 #: lib\pwiki\SearchAndReplaceDialogs.py:1788
     3706#: lib\pwiki\SearchAndReplaceDialogs.py:1789
    36363707msgid "<Search: %s>"
    36373708msgstr ""
    36383709
    3639 #: lib\pwiki\SearchAndReplaceDialogs.py:1838
     3710#: lib\pwiki\SearchAndReplaceDialogs.py:1839
    36403711msgid "Fast Search"
    36413712msgstr ""
    36423713
    3643 #: lib\pwiki\SearchAndReplaceDialogs.py:1865
     3714#: lib\pwiki\SearchAndReplaceDialogs.py:1866
    36443715msgid "As Tab"
    36453716msgstr ""
    36463717
    3647 #: lib\pwiki\SearchAndReplaceDialogs.py:1905
     3718#: lib\pwiki\SearchAndReplaceDialogs.py:1906
    36483719msgid "Search: %s"
    36493720msgstr ""
    36503721
    3651 #: lib\pwiki\SearchAndReplaceDialogs.py:2088 lib\pwiki\WikiHtmlView.py:625
     3722#: lib\pwiki\SearchAndReplaceDialogs.py:2089 lib\pwiki\WikiHtmlView.py:625
    36523723msgid "Activate"
    36533724msgstr ""
    36543725
    3655 #: lib\pwiki\SearchAndReplaceDialogs.py:2090 lib\pwiki\WikiHtmlView.py:627
     3726#: lib\pwiki\SearchAndReplaceDialogs.py:2091 lib\pwiki\WikiHtmlView.py:627
    36563727msgid "Activate New Tab Backgrd."
    36573728msgstr ""
     
    36693740msgstr ""
    36703741
    3671 #: lib\pwiki\StringOps.py:684
     3742#: lib\pwiki\StringOps.py:688
    36723743msgid "Inval. timestamp"
    36733744msgstr ""
     
    37293800msgstr ""
    37303801
    3731 #: lib\pwiki\WikiTxtCtrl.py:1922
     3802#: lib\pwiki\WikiTxtCtrl.py:1932
    37323803msgid "Set in menu \"Wiki\", item \"Options...\", options page \"Security\", \n"
    37333804"item \"Script security\" an appropriate value to execute a script."
    37343805msgstr ""
    37353806
    3736 #: lib\pwiki\WikiTxtCtrl.py:1925
     3807#: lib\pwiki\WikiTxtCtrl.py:1935
    37373808msgid "Script execution disabled"
    37383809msgstr ""
    37393810
    3740 #: lib\pwiki\WikiTxtCtrl.py:1988
     3811#: lib\pwiki\WikiTxtCtrl.py:1998
    37413812msgid "\n"
    37423813"Exception: %s"
    37433814msgstr ""
    37443815
    3745 #: lib\pwiki\WikiTxtCtrl.py:2655
     3816#: lib\pwiki\WikiTxtCtrl.py:2665
    37463817msgid "Line: %d Col: %d Pos: %d"
    37473818msgstr ""
    37483819
    3749 #: lib\pwiki\WikiTxtCtrl.py:2801
     3820#: lib\pwiki\WikiTxtCtrl.py:2811
    37503821msgid "Couldn't copy file"
    37513822msgstr ""
    37523823
    3753 #: lib\pwiki\WikiTxtCtrl.py:3014
     3824#: lib\pwiki\WikiTxtCtrl.py:3024
    37543825msgid "Follow Link"
    37553826msgstr ""
    37563827
    3757 #: lib\pwiki\WikiTxtCtrl.py:3015
     3828#: lib\pwiki\WikiTxtCtrl.py:3025
    37583829msgid "Follow Link New Tab"
    37593830msgstr ""
    37603831
    3761 #: lib\pwiki\WikiTxtCtrl.py:3016
     3832#: lib\pwiki\WikiTxtCtrl.py:3026
    37623833msgid "Follow Link New Tab Backgrd."
    37633834msgstr ""
    37643835
    3765 #: lib\pwiki\WikiTxtCtrl.py:3018
     3836#: lib\pwiki\WikiTxtCtrl.py:3028
    37663837msgid "Copy anchor URL to clipboard"
    37673838msgstr ""
    37683839
    3769 #: lib\pwiki\WikiTxtCtrl.py:3022
     3840#: lib\pwiki\WikiTxtCtrl.py:3032
    37703841msgid "Show folding"
    37713842msgstr ""
    37723843
    3773 #: lib\pwiki\WikiTxtCtrl.py:3023
     3844#: lib\pwiki\WikiTxtCtrl.py:3033
    37743845msgid "&Toggle current folding"
    37753846msgstr ""
    37763847
    3777 #: lib\pwiki\WikiTxtCtrl.py:3024
     3848#: lib\pwiki\WikiTxtCtrl.py:3034
    37783849msgid "&Unfold All"
    37793850msgstr ""
    37803851
    3781 #: lib\pwiki\WikiTxtCtrl.py:3025
     3852#: lib\pwiki\WikiTxtCtrl.py:3035
    37823853msgid "&Fold All"
    37833854msgstr ""
     
    38123883
    38133884#: lib\pwiki\wikidata\WikiDataManager.py:62
    3814 #: lib\pwiki\wikidata\WikiDataManager.py:1501
     3885#: lib\pwiki\wikidata\WikiDataManager.py:1503
    38153886msgid "Data handler %s not available"
    38163887msgstr ""
     
    38483919msgstr ""
    38493920
    3850 #: lib\pwiki\wikidata\WikiDataManager.py:863
     3921#: lib\pwiki\wikidata\WikiDataManager.py:865
    38513922msgid "Word '%s' not in wiki"
    38523923msgstr ""
    38533924
    3854 #: lib\pwiki\wikidata\WikiDataManager.py:1027
    3855 #: lib\pwiki\wikidata\WikiDataManager.py:1091
     3925#: lib\pwiki\wikidata\WikiDataManager.py:1029
     3926#: lib\pwiki\wikidata\WikiDataManager.py:1093
    38563927msgid "Update basic link info"
    38573928msgstr ""
    38583929
    3859 #: lib\pwiki\wikidata\WikiDataManager.py:1043
     3930#: lib\pwiki\wikidata\WikiDataManager.py:1045
    38603931msgid "Starting update thread"
    38613932msgstr ""
    38623933
    3863 #: lib\pwiki\wikidata\WikiDataManager.py:1111
     3934#: lib\pwiki\wikidata\WikiDataManager.py:1113
    38643935msgid "Update attributes of %s"
    38653936msgstr ""
    38663937
    3867 #: lib\pwiki\wikidata\WikiDataManager.py:1133
     3938#: lib\pwiki\wikidata\WikiDataManager.py:1135
    38683939msgid "Update page %s"
    38693940msgstr ""
    38703941
    3871 #: lib\pwiki\wikidata\WikiDataManager.py:1151
     3942#: lib\pwiki\wikidata\WikiDataManager.py:1153
    38723943msgid "Final cleanup"
    38733944msgstr ""
    38743945
    3875 #: lib\pwiki\wikidata\WikiDataManager.py:1181
     3946#: lib\pwiki\wikidata\WikiDataManager.py:1183
    38763947msgid "Cannot rename '%s' to '%s', '%s' already exists"
    38773948msgstr ""
  • branches/mbutscher/work/WikidPad.xrc

    r188 r190  
    416416        <object class="wxCheckBox" name="cbDocStructureAutoHide">
    417417          <label>Auto-hide structure window</label>
     418        </object>
     419        <option>0</option>
     420        <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
     421        <border>5</border>
     422      </object>
     423      <object class="sizeritem">
     424        <object class="wxCheckBox" name="cbDocStructureAutoFollow">
     425          <label>Structure window selection auto-follow</label>
    418426        </object>
    419427        <option>0</option>
     
    24902498        <border>5</border>
    24912499        <minsize>200,200</minsize>
     2500      </object>
     2501      <object class="sizeritem">
     2502        <object class="wxStaticText" name="stLinkTo">
     2503          <label></label>
     2504        </object>
     2505        <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
     2506        <border>5</border>
    24922507      </object>
    24932508      <object class="sizeritem">
     
    43364351      <object class="sizeritem">
    43374352        <object class="wxPanel" name="additOptions"/>
    4338         <option>3</option>
     4353        <option>1</option>
    43394354        <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
    43404355      </object>
     
    43494364          <label>Destination directory:</label>
    43504365        </object>
    4351         <option>1</option>
     4366        <option>0</option>
    43524367        <flag>wxALL|wxEXPAND|wxALIGN_BOTTOM</flag>
    43534368        <border>5</border>
     
    43744389        <option>0</option>
    43754390        <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
     4391      </object>
     4392      <object class="sizeritem">
     4393        <object class="wxStaticLine"/>
     4394        <option>0</option>
     4395        <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
     4396        <border>5</border>
     4397      </object>
     4398      <object class="sizeritem">
     4399        <object class="wxStaticText" name="">
     4400          <label>Saved Exports:</label>
     4401        </object>
     4402        <option>0</option>
     4403        <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
     4404        <border>5</border>
     4405      </object>
     4406      <object class="sizeritem">
     4407        <object class="wxListBox" name="lbSavedExports">
     4408          <content/>
     4409          <style>wxLB_EXTENDED</style>
     4410        </object>
     4411        <option>1</option>
     4412        <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
     4413        <border>5</border>
     4414        <minsize>-1,80</minsize>
     4415      </object>
     4416      <object class="sizeritem">
     4417        <object class="wxFlexGridSizer">
     4418          <cols>2</cols>
     4419          <object class="sizeritem">
     4420            <object class="wxButton" name="btnSaveExport">
     4421              <label>&amp;Save Export</label>
     4422            </object>
     4423            <option>0</option>
     4424            <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
     4425            <border>5</border>
     4426          </object>
     4427          <object class="sizeritem">
     4428            <object class="wxButton" name="btnDeleteExports">
     4429              <label>&amp;Delete Export(s)</label>
     4430            </object>
     4431            <option>0</option>
     4432            <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
     4433            <border>5</border>
     4434          </object>
     4435          <object class="sizeritem">
     4436            <object class="wxButton" name="btnLoadExport">
     4437              <label>&amp;Load Export</label>
     4438            </object>
     4439            <option>0</option>
     4440            <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
     4441            <border>5</border>
     4442          </object>
     4443          <object class="sizeritem">
     4444            <object class="wxButton" name="btnLoadAndRunExport">
     4445              <label>Load and R&amp;un Export</label>
     4446            </object>
     4447            <option>0</option>
     4448            <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
     4449            <border>5</border>
     4450          </object>
     4451        </object>
     4452      </object>
     4453      <object class="sizeritem">
     4454        <object class="wxStaticLine"/>
     4455        <option>0</option>
     4456        <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
     4457        <border>2</border>
    43764458      </object>
    43774459      <object class="sizeritem">
  • branches/mbutscher/work/WikidPadHelp/data/ChangeLog.wiki

    r188 r190  
    11++ Change Log
     2
     3
     4Apr. 01, 2009 (2.0beta02)
     5
     6    * Option to let selection in doc. structure automatically follow
     7      text cursor position in editor.
     8      See [OptionsDialog#*Structure window selection auto-follow*]
     9    * Saved exports similar to saved searches.
     10      See [WikiExport#*Saved exports*]
     11    * Faster stop when closing WikidPad
     12    * Wiki page files in UTF-16 encoding (with appropriate BOM) can now
     13      be read by WikidPad
     14
     15    * Bug fixed: Wiki-wide search couldn't be opened if a functional page
     16      was in current editor
     17    * Bug fixed: Dialog to append/prepend wikiword failed
     18
    219
    320
  • branches/mbutscher/work/WikidPadHelp/data/InternatiönalChàracters.wiki

    r178 r190  
    1 ++ Internatiönal Chàracters
     1++ Internatiönal Chàracters
    22
    33WikiWords may contain InternatiönalChàracters.
     
    99    * XxXxÖx.
    1010
    11     * SšTtz
     11    * SšTtz
    1212
    13 zžtsš
     13zžtsš
    1414
    15 ŠSTŽZ
     15ŠSTŽZ
    1616
    1717ÓsÔsÖsÚsÜsÝ
  • branches/mbutscher/work/WikidPadHelp/data/OptionsDialog.wiki

    r188 r190  
    7575*Auto-hide structure window*
    7676After double-clicking an entry in PageStructureWindow the window is collapsed (hidden) automatically if this is checked.
     77
     78*Structure window selection auto-follow*
     79If checked and document structure window is visible, changing cursor position in editor can also change selection in structure window to always show the heading which is nearest above the current cursor position.
    7780
    7881
  • branches/mbutscher/work/WikidPadHelp/data/WikiExport.wiki

    r188 r190  
    2828
    2929When exporting as HTML all files in the file storage which are referenced by a relative URL (URL beginning with "rel://") in the exported pages are copied to a "files" directory in the destination directory. This does also apply to files in subdirectories of the "files" directory.
     30
     31
     32*Saved exports*
     33You can store your current export settings and retrieve them later to do the same export job repeatedly.
     34
     35*Save Export*
     36Asks for a name for the current settings and saves it.
     37
     38*Delete Export(s)*
     39Deletes one or more selected export(s) after confirmation.
     40
     41*Load Export*
     42Loads export which is currently selected in list. Your previous settings made in the dialog are overwritten.
     43
     44*Load and Run Export*
     45Same as first hitting "Load Export" then "OK" to start the export. Double-clicking on a saved export in the list does the same.
     46
    3047
    3148
     
    6178
    6279
     80
    6381+++ Continuous export
    6482
    6583In menu "Extra" you can also choose "Continuous Export" which allows to start an export operation which is repeated automatically each time a page previously designated for export is modified.
    6684
    67 The dialog for continuous export is the same as for normal export, but some export types are missing as currently only the HTML export types support continuous export.
     85The dialog for continuous export is the same as for normal export, but some export types are missing as currently only the HTML export types support continuous export. Also some of the saved exports are hidden if they refer to exports not supported by continuous export.
    6886
    6987After you made your choices what and where to export and pressed "OK", WikidPad first makes an initial normal export. After that every change to a page is reflected in the export *after the page was saved to database* (manually or by auto-save).
  • branches/mbutscher/work/WikidPadStarter.py

    r184 r190  
    99
    1010from Consts import CONFIG_FILENAME, CONFIG_GLOBALS_DIRNAME
    11 
    12 
    13 # # Switch off warnings about my special import management
    14 # warnings.simplefilter('ignore', RuntimeWarning)
    1511
    1612
  • branches/mbutscher/work/lib/pwiki/AdditionalDialogs.py

    r188 r190  
    44
    55from os.path import exists, isdir, isfile
     6
     7from xml.dom import minidom
    68
    79import wx, wx.html, wx.xrc
     
    2325from WikiExceptions import *
    2426import Exporters, Importers
     27import Serialization
    2528import Configuration
    2629
    27 from Consts import VERSION_STRING
     30from Consts import VERSION_STRING, DATABLOCK_STOREHINT_INTERN
    2831
    2932from SearchAndReplaceDialogs import SearchWikiDialog   # WikiPageListConstructionDialog
    30 from SearchAndReplace import SearchReplaceOperation  # ListWikiPagesOperation
     33from SearchAndReplace import SearchReplaceOperation, ListWikiPagesOperation
    3134
    3235
     
    8992            return
    9093       
     94        # Filter out anything else than real words and explicit aliases
    9195        self.listContent = self.pWiki.getWikiData().getWikiWordMatchTermsWith(
    9296                searchTxt)
     
    102106   
    103107            if not self.pWiki.getWikiDocument().isDefinedWikiLink(self.wikiWord):
    104                 self._fillListContent()
     108                self._fillListContent(self.wikiWord)
    105109                if len(self.listContent) > 0:
    106110                    self.wikiWord = self.listContent[0][2]
     
    146150        sel = self.ctrls.lb.GetSelection()
    147151        if sel != wx.NOT_FOUND:
     152            if self.listContent[sel][0] != self.listContent[sel][2]:
     153                self.ctrls.stLinkTo.SetLabel(uniToGui(_(u"Links to:") + u" " +
     154                        self.listContent[sel][2]))
     155            else:
     156                self.ctrls.stLinkTo.SetLabel(u"")
    148157            self.ignoreTextChange += 1
    149158            self.ctrls.text.SetValue(self.listContent[sel][0])
     159        else:
     160            self.ctrls.stLinkTo.SetLabel(u"")
     161
    150162
    151163
     
    936948
    937949class ExportDialog(wx.Dialog):
    938     def __init__(self, pWiki, ID, continuousExport=False, title="Export",
     950    def __init__(self, mainControl, ID, continuousExport=False, title="Export",
    939951                 pos=wx.DefaultPosition, size=wx.DefaultSize):
    940952        d = wx.PreDialog()
    941953        self.PostCreate(d)
    942954       
    943         self.pWiki = pWiki
     955        self.mainControl = mainControl
    944956        self.value = None
    945957       
    946958        self.listPagesOperation = SearchReplaceOperation()  # ListWikiPagesOperation()
    947959        self.continuousExport = continuousExport
     960        self.savedExports = None
     961       
     962        # In addition to exporter list, this set will contain type tags of all
     963        # supported exports (used for saved exports list).
     964        self.supportedExportTypes = set()
    948965        res = wx.xrc.XmlResource.Get()
    949         res.LoadOnDialog(self, self.pWiki, "ExportDialog")
    950        
     966        res.LoadOnDialog(self, self.mainControl, "ExportDialog")
     967
    951968        self.ctrls = XrcControls(self)
    952        
     969
    953970        if continuousExport:
    954971            self.SetTitle(_(u"Continuous Export"))
    955972
    956973        self.emptyPanel = None
    957        
     974
    958975        exporterList = [] # List of tuples (<exporter object>, <export tag>,
    959976                          # <readable description>, <additional options panel>)
    960        
     977
    961978        addOptSizer = LayerSizer()
    962        
    963         for ob in Exporters.describeExporters(self.pWiki):   # TODO search plugins
     979
     980        # TODO Move to ExportOperation.py
     981        for ob in Exporters.describeExporters(self.mainControl):   # TODO search plugins
    964982            for tp in ob.getExportTypes(self.ctrls.additOptions, continuousExport):
    965983                panel = tp[2]
     
    977995                #     export type description, additional options panel)
    978996                exporterList.append((ob, tp[0], tp[1], panel))
     997                self.supportedExportTypes.add(tp[0])
    979998                addOptSizer.Add(panel)
    980999
     
    9971016        self.ctrls.btnCancel.SetId(wx.ID_CANCEL)
    9981017       
    999         defdir = self.pWiki.getConfig().get("main", "export_default_dir", u"")
     1018        defdir = self.mainControl.getConfig().get("main", "export_default_dir",
     1019                u"")
    10001020        if defdir == u"":
    1001             defdir = self.pWiki.getLastActiveDir()
     1021            defdir = self.mainControl.getLastActiveDir()
    10021022
    10031023        self.ctrls.tfDestination.SetValue(defdir)
     
    10141034        self.ctrls.chExportTo.SetSelection(0) 
    10151035        self._refreshForEtype()
    1016        
     1036        self._refreshSavedExportsList()
     1037
    10171038        # Fixes focus bug under Linux
    10181039        self.SetFocus()
    1019        
     1040
    10201041        wx.EVT_CHOICE(self, GUI_ID.chExportTo, self.OnExportTo)
    10211042        wx.EVT_CHOICE(self, GUI_ID.chSelectedSet, self.OnChSelectedSet)
    10221043
     1044        wx.EVT_LISTBOX_DCLICK(self, GUI_ID.lbSavedExports, self.OnLoadAndRunExport)
     1045
    10231046        wx.EVT_BUTTON(self, wx.ID_OK, self.OnOk)
    10241047        wx.EVT_BUTTON(self, GUI_ID.btnSelectDestination, self.OnSelectDest)
     1048        wx.EVT_BUTTON(self, GUI_ID.btnSaveExport, self.OnSaveExport)
     1049        wx.EVT_BUTTON(self, GUI_ID.btnLoadExport, self.OnLoadExport)
     1050        wx.EVT_BUTTON(self, GUI_ID.btnLoadAndRunExport, self.OnLoadAndRunExport)
     1051        wx.EVT_BUTTON(self, GUI_ID.btnDeleteExports, self.OnDeleteExports)
    10251052
    10261053
     
    10291056            e[3].Show(False)
    10301057            e[3].Enable(False)
    1031            
     1058
    10321059        ob, etype, desc, panel = \
    10331060                self.exporterList[self.ctrls.chExportTo.GetSelection()][:4]
     
    10551082        selset = self.ctrls.chSelectedSet.GetSelection()
    10561083        if selset == 3:  # Custom
    1057 #             dlg = WikiPageListConstructionDialog(self, self.pWiki, -1,
    1058 #                     value=self.listPagesOperation)
    1059             dlg = SearchWikiDialog(self, self.pWiki, -1,
     1084            dlg = SearchWikiDialog(self, self.mainControl, -1,
    10601085                    value=self.listPagesOperation)
    10611086            if dlg.ShowModal() == wx.ID_OK:
     
    10641089
    10651090    def OnOk(self, evt):
    1066         import SearchAndReplace as Sar
    1067 
     1091        self._runExporter()
     1092
     1093       
     1094    def _runExporter(self):
    10681095        # Run exporter
    10691096        ob, etype, desc, panel = \
     
    10751102            # Export to a directory
    10761103            if not exists(pathEnc(self.ctrls.tfDestination.GetValue())):
    1077                 self.pWiki.displayErrorMessage(
     1104                self.mainControl.displayErrorMessage(
    10781105                        _(u"Destination directory does not exist"))
    10791106                return
    10801107           
    10811108            if not isdir(pathEnc(self.ctrls.tfDestination.GetValue())):
    1082                 self.pWiki.displayErrorMessage(
     1109                self.mainControl.displayErrorMessage(
    10831110                        _(u"Destination must be a directory"))
    10841111                return
     
    10861113            if exists(pathEnc(self.ctrls.tfDestination.GetValue())) and \
    10871114                    not isfile(pathEnc(self.ctrls.tfDestination.GetValue())):
    1088                 self.pWiki.displayErrorMessage(
     1115                self.mainControl.displayErrorMessage(
    10891116                        _(u"Destination must be a file"))
    10901117                return
    10911118
     1119        sarOp = self._getEffectiveListWikiPagesOperation()
     1120        if sarOp is None:
     1121            return
     1122
     1123        if panel is self.emptyPanel:
     1124            panel = None
     1125
     1126        pgh = ProgressHandler(_(u"Exporting"), u"", 0, self)
     1127        pgh.open(0)
     1128        pgh.update(0, _(u"Preparing"))
     1129
     1130        try:
     1131            if self.continuousExport:
     1132                ob.startContinuousExport(self.mainControl.getWikiDocument(),
     1133                        sarOp, etype, guiToUni(self.ctrls.tfDestination.GetValue()),
     1134                        self.ctrls.compatFilenames.GetValue(), ob.getAddOpt(panel),
     1135                        pgh)
     1136   
     1137                self.value = ob
     1138            else:
     1139                wordList = self.mainControl.getWikiDocument().searchWiki(sarOp,
     1140                        True)
     1141       
     1142                try:
     1143                    ob.export(self.mainControl.getWikiDocument(), wordList, etype,
     1144                            guiToUni(self.ctrls.tfDestination.GetValue()),
     1145                            self.ctrls.compatFilenames.GetValue(), ob.getAddOpt(panel),
     1146                            pgh)
     1147                except ExportException, e:
     1148                    self.mainControl.displayErrorMessage(_(u"Error while exporting"),
     1149                    unicode(e))
     1150
     1151        finally:
     1152            pgh.close()
     1153            self.EndModal(wx.ID_OK)
     1154
     1155       
     1156    def OnSelectDest(self, evt):
     1157        ob, etype, desc, panel = \
     1158                self.exporterList[self.ctrls.chExportTo.GetSelection()][:4]
     1159
     1160        expDestWildcards = ob.getExportDestinationWildcards(etype)
     1161
     1162        if expDestWildcards is None:
     1163            # Only transfer between GUI elements, so no unicode conversion
     1164            seldir = wx.DirSelector(_(u"Select Export Directory"),
     1165                    self.ctrls.tfDestination.GetValue(),
     1166                    style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON, parent=self)
     1167               
     1168            if seldir:
     1169                self.ctrls.tfDestination.SetValue(seldir)
     1170
     1171        else:
     1172            # Build wildcard string
     1173            wcs = []
     1174            for wd, wp in expDestWildcards:
     1175                wcs.append(wd)
     1176                wcs.append(wp)
     1177               
     1178            wcs.append(_(u"All files (*.*)"))
     1179            wcs.append(u"*")
     1180           
     1181            wcs = u"|".join(wcs)
     1182           
     1183            selfile = wx.FileSelector(_(u"Select Export File"),
     1184                    self.ctrls.tfDestination.GetValue(),
     1185                    default_filename = "", default_extension = "",
     1186                    wildcard = wcs, flags=wx.SAVE | wx.OVERWRITE_PROMPT,
     1187                    parent=self)
     1188
     1189            if selfile:
     1190                self.ctrls.tfDestination.SetValue(selfile)
     1191
     1192
     1193    def GetValue(self):
     1194        return self.value
     1195
     1196
     1197    def _getEffectiveListWikiPagesOperation(self):
     1198        """
     1199        Return the list operation appropriate for the current GUI settings.
     1200        Shows message in case of an error and returns None
     1201        """
     1202        import SearchAndReplace as Sar
    10921203
    10931204        # Create wordList (what to export)
    10941205        selset = self.ctrls.chSelectedSet.GetSelection()
    1095         root = self.pWiki.getCurrentWikiWord()
    1096        
     1206        root = self.mainControl.getCurrentWikiWord()
     1207
    10971208        if root is None and selset in (0, 1):
    1098             self.pWiki.displayErrorMessage(
     1209            self.mainControl.displayErrorMessage(
    10991210                    _(u"No real wiki word selected as root"))
    1100             return
    1101            
     1211            return None
     1212
     1213        if selset == 3:
     1214            return self.listPagesOperation
     1215
    11021216        lpOp = Sar.ListWikiPagesOperation()
    11031217
     
    11111225            item = Sar.ListItemWithSubtreeWikiPagesNode(lpOp, [root], -1)
    11121226            lpOp.setSearchOpTree(item)
    1113             lpOp.ordering = "asroottree"  # Slow, but more intuitive
    1114 #             wordList = self.pWiki.getWikiData().getAllSubWords([root])
     1227            lpOp.ordering = "asroottree"
    11151228        elif selset == 2:
    11161229            # whole wiki
    11171230            item = Sar.AllWikiPagesNode(lpOp)
    11181231            lpOp.setSearchOpTree(item)
    1119             lpOp.ordering = "asroottree"  # Slow, but more intuitive
    1120 #             wordList = self.pWiki.getWikiData().getAllDefinedWikiPageNames()
     1232            lpOp.ordering = "asroottree"
    11211233        else:
    1122             # custom list
    1123             lpOp = self.listPagesOperation
    1124 
    1125 
    1126         if panel is self.emptyPanel:
    1127             panel = None
    1128 
    1129         pgh = ProgressHandler(_(u"Exporting"), u"", 0, self)
    1130         pgh.open(0)
    1131         pgh.update(0, _(u"Preparing"))
    1132 
    1133         try:
    1134             if self.continuousExport:
    1135                 ob.startContinuousExport(self.pWiki.getWikiDocument(),
    1136                         lpOp, etype, guiToUni(self.ctrls.tfDestination.GetValue()),
    1137                         self.ctrls.compatFilenames.GetValue(), ob.getAddOpt(panel),
    1138                         pgh)
    1139    
    1140                 self.value = ob
    1141             else:
    1142                 wordList = self.pWiki.getWikiDocument().searchWiki(lpOp, True)
    1143        
    1144         #         self.pWiki.getConfig().set("main", "html_export_pics_as_links",
    1145         #                 self.ctrls.cbHtmlExportPicsAsLinks.GetValue())
    1146        
    1147                 try:
    1148                     ob.export(self.pWiki.getWikiDocument(), wordList, etype,
    1149                             guiToUni(self.ctrls.tfDestination.GetValue()),
    1150                             self.ctrls.compatFilenames.GetValue(), ob.getAddOpt(panel),
    1151                             pgh)
    1152                 except ExportException, e:
    1153                     self.pWiki.displayErrorMessage(_(u"Error while exporting"),
    1154                     unicode(e))
    1155 
    1156         finally:
    1157             pgh.close()
    1158             self.EndModal(wx.ID_OK)
    1159 
    1160        
    1161     def OnSelectDest(self, evt):
     1234            raise InternalError("Unknown selection for export set")
     1235
     1236        result = Sar.SearchReplaceOperation()
     1237        result.listWikiPagesOp = lpOp
     1238
     1239        return result
     1240
     1241
     1242    def _refreshSavedExportsList(self):
     1243        wikiData = self.mainControl.getWikiData()
     1244        unifNames = wikiData.getDataBlockUnifNamesStartingWith(u"savedexport/")
     1245
     1246        result = []
     1247        for un in unifNames:
     1248            name = un[12:]
     1249            content = wikiData.retrieveDataBlock(un)
     1250            xmlDoc = minidom.parseString(content)
     1251            xmlNode = xmlDoc.firstChild
     1252            etype = Serialization.serFromXmlUnicode(xmlNode, u"exportTypeName")
     1253            if etype not in self.supportedExportTypes:
     1254                # Export type of saved export not supported
     1255                continue
     1256
     1257            result.append((name, xmlNode))
     1258
     1259        self.mainControl.getCollator().sortByFirst(result)
     1260
     1261        self.savedExports = result
     1262
     1263        self.ctrls.lbSavedExports.Clear()
     1264        for exportName, xmlNode in self.savedExports:
     1265            self.ctrls.lbSavedExports.Append(uniToGui(exportName))
     1266
     1267
     1268
     1269    def OnSaveExport(self, evt):
     1270        defValue = u""
     1271       
     1272        sels = self.ctrls.lbSavedExports.GetSelections()
     1273       
     1274        if len(sels) == 1:
     1275            defValue = self.savedExports[sels[0]][0]
     1276
     1277        while True:
     1278            title = guiToUni(wx.GetTextFromUser(_(u"Title:"),
     1279                    _(u"Choose export title"), defValue, self))
     1280            if title == u"":
     1281                return  # Cancel
     1282               
     1283            if (u"savedexport/" + title) in self.mainControl.getWikiData()\
     1284                    .getDataBlockUnifNamesStartingWith(
     1285                    u"savedexport/" + title):
     1286
     1287                answer = wx.MessageBox(
     1288                        _(u"Do you want to overwrite existing export '%s'?") %
     1289                        title, _(u"Overwrite export"),
     1290                        wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION, self)
     1291                if answer == wx.NO:
     1292                    continue
     1293
     1294            xmlDoc = minidom.getDOMImplementation().createDocument(None, None, None)
     1295            xmlHead = xmlDoc.createElement(u"savedExport")
     1296
     1297            xmlNode = self._buildSavedExport(xmlHead, xmlDoc)
     1298            if xmlNode is None:
     1299                return
     1300           
     1301            xmlDoc.appendChild(xmlNode)
     1302            content = xmlDoc.toxml("utf-8")
     1303            xmlDoc.unlink()
     1304            self.mainControl.getWikiData().storeDataBlock(
     1305                    u"savedexport/" + title, content,
     1306                    storeHint=DATABLOCK_STOREHINT_INTERN)
     1307           
     1308            self._refreshSavedExportsList()
     1309            return
     1310
     1311
     1312    def OnLoadExport(self, evt):
     1313        self._loadExport()
     1314       
     1315       
     1316    def OnLoadAndRunExport(self, evt):
     1317        if self._loadExport():
     1318            self._runExporter()
     1319
     1320#     def OnLoadAndRunSearch(self, evt):
     1321#         if self._loadSearch():
     1322#             try:
     1323#                 self._refreshSavedExportsList()
     1324#             except re.error, e:
     1325#                 self.displayErrorMessage(_(u'Error in regular expression'),
     1326#                         _(unicode(e)))
     1327
     1328
     1329    def OnDeleteExports(self, evt):
     1330        sels = self.ctrls.lbSavedExports.GetSelections()
     1331       
     1332        if len(sels) == 0:
     1333            return
     1334
     1335        answer = wx.MessageBox(
     1336                _(u"Do you want to delete %i export(s)?") % len(sels),
     1337                _(u"Delete export"),
     1338                wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION, self)
     1339        if answer == wx.NO:
     1340            return
     1341
     1342        for s in sels:
     1343            self.mainControl.getWikiData().deleteDataBlock(
     1344                    u"savedexport/" + self.savedExports[s][0])
     1345        self._refreshSavedExportsList()
     1346
     1347
     1348    def _loadExport(self):
     1349        sels = self.ctrls.lbSavedExports.GetSelections()
     1350       
     1351        if len(sels) != 1:
     1352            return False
     1353
     1354        xmlNode = self.savedExports[sels[0]][1]
     1355        return self._showExportProfile(xmlNode)
     1356
     1357
     1358    def _buildSavedExport(self, xmlHead, xmlDoc):
     1359        """
     1360        Builds the saved export as XML code from GUI settings.
     1361        Returns the xmlHead (aka XML "savedExport") node or None in
     1362        case of an error.
     1363        """
     1364
    11621365        ob, etype, desc, panel = \
    11631366                self.exporterList[self.ctrls.chExportTo.GetSelection()][:4]
    1164 
    1165         expDestWildcards = ob.getExportDestinationWildcards(etype)
    1166 
    1167         if expDestWildcards is None:
    1168             # Only transfer between GUI elements, so no unicode conversion
    1169             seldir = wx.DirSelector(_(u"Select Export Directory"),
    1170                     self.ctrls.tfDestination.GetValue(),
    1171                     style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON, parent=self)
    1172                
    1173             if seldir:
    1174                 self.ctrls.tfDestination.SetValue(seldir)
    1175 
    1176         else:
    1177             # Build wildcard string
    1178             wcs = []
    1179             for wd, wp in expDestWildcards:
    1180                 wcs.append(wd)
    1181                 wcs.append(wp)
    1182                
    1183             wcs.append(_(u"All files (*.*)"))
    1184             wcs.append(u"*")
    1185            
    1186             wcs = u"|".join(wcs)
    1187            
    1188             selfile = wx.FileSelector(_(u"Select Export File"),
    1189                     self.ctrls.tfDestination.GetValue(),
    1190                     default_filename = "", default_extension = "",
    1191                     wildcard = wcs, flags=wx.SAVE | wx.OVERWRITE_PROMPT,
    1192                     parent=self)
    1193 
    1194             if selfile:
    1195                 self.ctrls.tfDestination.SetValue(selfile)
    1196 
    1197 
    1198     def GetValue(self):
    1199         return self.value
     1367       
     1368        addOptVer = ob.getAddOptVersion()
     1369       
     1370        if addOptVer == -1:
     1371            # An addOpt version of -1 means that the addOpt value does not
     1372            # have a defined format and therefore can't be stored
     1373            self.mainControl.displayErrorMessage(
     1374                    _(u"Selected export type does not support saving"))
     1375            return None   # TODO Error message!!
     1376
     1377        Serialization.serToXmlUnicode(xmlHead, xmlDoc, u"exportTypeName", etype)
     1378
     1379        Serialization.serToXmlUnicode(xmlHead, xmlDoc, u"destinationPath",
     1380                guiToUni(self.ctrls.tfDestination.GetValue()))
     1381
     1382        pageSetXml = xmlDoc.createElement(u"pageSet")
     1383        xmlHead.appendChild(pageSetXml)
     1384
     1385        sarOp = self._getEffectiveListWikiPagesOperation()
     1386        if sarOp is None:
     1387            return None
     1388
     1389#         if isinstance(lpOp, SearchReplaceOperation):
     1390#             pageSetXml.setAttribute(u"type", u"searchReplaceOperation")
     1391#         elif isinstance(lpOp, ListWikiPagesOperation):
     1392#             pageSetXml.setAttribute(u"type", u"listWikiPagesOperation")
     1393
     1394        sarOp.serializeToXml(pageSetXml, xmlDoc)
     1395
     1396        addOptXml = xmlDoc.createElement(u"additionalOptions")
     1397        xmlHead.appendChild(addOptXml)
     1398
     1399        addOptXml.setAttribute(u"version", unicode(addOptVer))
     1400        addOptXml.setAttribute(u"type", u"simpleTuple")
     1401
     1402        Serialization.convertTupleToXml(addOptXml, xmlDoc, ob.getAddOpt(panel))
     1403
     1404        return xmlHead
     1405
     1406
     1407
     1408    def _showExportProfile(self, xmlNode):
     1409        try:
     1410            etypeProfile = Serialization.serFromXmlUnicode(xmlNode,
     1411                    u"exportTypeName")
     1412           
     1413            for sel, (ob, etype, desc, panel) in enumerate(self.exporterList):
     1414                if etype == etypeProfile:
     1415                    break
     1416            else:
     1417                self.mainControl.displayErrorMessage(
     1418                        _(u"Export type '%s' of saved export is not supported") %
     1419                        etypeProfile)
     1420                return False
     1421
     1422            addOptXml = Serialization.findXmlElementFlat(xmlNode,
     1423                    u"additionalOptions")
     1424   
     1425            addOptVersion = int(addOptXml.getAttribute(u"version"))
     1426   
     1427            if addOptVersion != ob.getAddOptVersion():
     1428                self.mainControl.displayErrorMessage(
     1429                        _(u"Saved export uses different version for additional "
     1430                        "options than current export\nExport type: '%s'\n"
     1431                        "Saved export version: %i\nCurrent export version: %i") %
     1432                        (etypeProfile, addOptVersion, ob.getAddOptVersion()))
     1433                return False
     1434   
     1435            if addOptXml.getAttribute(u"type") != u"simpleTuple":
     1436                self.mainControl.displayErrorMessage(
     1437                        _(u"Type of additional option storage ('%s') is unknown") %
     1438                        addOptXml.getAttribute(u"type"))
     1439                return False
     1440   
     1441            pageSetXml = Serialization.findXmlElementFlat(xmlNode, u"pageSet")
     1442           
     1443            sarOp = SearchReplaceOperation()
     1444   
     1445    #         if pageSetXml.getAttribute(u"type") == u"searchReplaceOperation":
     1446    #             lpOp = SearchReplaceOperation()
     1447    #         elif pageSetXml.getAttribute(u"type") == u"listWikiPagesOperation":
     1448    #             lpOp = ListWikiPagesOperation()
     1449    #         else:
     1450    #             return # TODO Error message!
     1451           
     1452            sarOp.serializeFromXml(pageSetXml)
     1453   
     1454            addOpt = Serialization.convertTupleFromXml(addOptXml)
     1455   
     1456            self.listPagesOperation = sarOp
     1457            self.ctrls.chSelectedSet.SetSelection(3)
     1458            self.ctrls.chExportTo.SetSelection(sel)
     1459            ob.setAddOpt(addOpt, panel)
     1460   
     1461            self.ctrls.tfDestination.SetValue(uniToGui(
     1462                    Serialization.serFromXmlUnicode(xmlNode, u"destinationPath")))
     1463                   
     1464            self._refreshForEtype()
     1465           
     1466            return True
     1467        except SerializationException, e:
     1468            self.mainControl.displayErrorMessage(_(u"Error during retrieving "
     1469                    "saved export: ") + e.message)
    12001470
    12011471
    12021472ExportDialog.runModal = staticmethod(runDialogModalFactory(ExportDialog))
     1473
     1474
    12031475
    12041476
     
    15221794    <hr />
    15231795   
    1524     <p />Your configuration directory is: %s
    1525     <p />Sqlite version: %s
     1796    <p>Your configuration directory is: <b>%s</b><br />
     1797    Sqlite version: <b>%s</b><br />
     1798    wxPython version: <b>%s</b>
     1799    </p>
     1800   
    15261801</body>
    15271802</html>
     
    15381813
    15391814        text = _(self.TEXT_TEMPLATE) % (VERSION_STRING,
    1540                 escapeHtml(pWiki.globalConfigDir), escapeHtml(sqliteVer))
     1815                escapeHtml(pWiki.globalConfigDir), escapeHtml(sqliteVer),
     1816                escapeHtml(wx.__version__))
    15411817
    15421818        html = wx.html.HtmlWindow(self, -1)
  • branches/mbutscher/work/lib/pwiki/Configuration.py

    r188 r190  
    513513            # (between 1 and 15)
    514514    ("main", "docStructure_autohide"): "False", # Automatically hide doc structure after something was activated in it.
     515    ("main", "docStructure_autofollow"): "True", # Selection in document structure follows text cursor position
    515516
    516517    ("main", "toolbar_show"): "True",  # Show the toolbar?
  • branches/mbutscher/work/lib/pwiki/DocPages.py

    r188 r190  
    1010from WikiExceptions import *
    1111
    12 from StringOps import strToBool, fileContentToUnicode, BOM_UTF8, utf8Enc, \
    13         utf8Dec, pathEnc, loadEntireTxtFile, writeEntireFile
     12from StringOps import strToBool, fileContentToUnicode, lineendToInternal, \
     13        loadEntireTxtFile, writeEntireFile
    1414
    1515from Utilities import DUMBTHREADSTOP, FunctionThreadStop, TimeoutRLock, \
     
    3030    """
    3131   
    32 #     STATE_DEAD = 0xFFFF  # Page is dead (can only happen just before wiki document
    33 #             # is closed)
    34 #     STATE_INVALID = 1   # After page got new name or was deleted.
    35 #
    36 #     # The following two can be ORed together
    37 #     STATE_TEXTCACHE_MATCHES_DB = 2  # text cache is equal to database
    38 #     STATE_TEXTCACHE_MATCHES_EDITOR = 4  # text cache is equal to editor(s)'
    39 #             # content (always true for current implementation). This is also
    40 #             # true if no editor is assigned at all.
    41 
    4232    def __init__(self, wikiDocument):
    4333        MiscEventSourceMixin.__init__(self)
     
    13371327
    13381328
    1339     def runDatabaseUpdate(self, step=-1):
     1329    def runDatabaseUpdate(self, step=-1, threadstop=DUMBTHREADSTOP):
    13401330        with self.textOperationLock:
    13411331            if not self.isDefined():
    1342                 return
     1332                return False
    13431333            if self.isReadOnlyEffect():
    1344                 return
     1334                return False
    13451335
    13461336            liveTextPlaceHold = self.liveTextPlaceHold
     
    13481338
    13491339        try:
    1350             pageAst = self.getLivePageAst(dieOnChange=True)
    1351         except NotCurrentThreadException:
    1352             return
    1353 
    1354         # Check within lock if data is current yet
    1355         with self.textOperationLock:
    1356             if not liveTextPlaceHold is self.liveTextPlaceHold:
    1357                 return
    1358 
    1359 
    1360         if step == -1:
    1361             self._refreshMetaData(pageAst, formatDetails)
    1362 
     1340            pageAst = self.getLivePageAst(dieOnChange=True,
     1341                    threadstop=threadstop)
     1342
     1343            # Check within lock if data is current yet
    13631344            with self.textOperationLock:
    13641345                if not liveTextPlaceHold is self.liveTextPlaceHold:
    1365                     return
    1366                 if not formatDetails.isEquivTo(self.getFormatDetails()):
    1367                     self.initiateUpdate()
    1368                     return
    1369         else:
    1370             metaState = self.getWikiData().getMetaDataState(self.wikiWord)
    1371 
    1372             if metaState == Consts.WIKIWORDMETADATA_STATE_UPTODATE or \
    1373                     metaState != step:
    1374                 return False
    1375 
    1376             if step == Consts.WIKIWORDMETADATA_STATE_PROPSPROCESSED:
    1377                 return self.refreshMainDbCacheFromPageAst(pageAst)
    1378 
    1379             else: # step == Consts.WIKIWORDMETADATA_STATE_DIRTY
    1380                 return self.refreshPropertiesFromPageAst(pageAst)
    1381 
     1346                    return False
     1347   
     1348   
     1349            if step == -1:
     1350                self._refreshMetaData(pageAst, formatDetails, threadstop=threadstop)
     1351   
     1352                with self.textOperationLock:
     1353                    if not liveTextPlaceHold is self.liveTextPlaceHold:
     1354                        return False
     1355                    if not formatDetails.isEquivTo(self.getFormatDetails()):
     1356                        self.initiateUpdate()
     1357                        return False
     1358            else:
     1359                metaState = self.getWikiData().getMetaDataState(self.wikiWord)
     1360   
     1361                if metaState == Consts.WIKIWORDMETADATA_STATE_UPTODATE or \
     1362                        metaState != step:
     1363                    return False
     1364   
     1365                if step == Consts.WIKIWORDMETADATA_STATE_PROPSPROCESSED:
     1366                    return self.refreshMainDbCacheFromPageAst(pageAst,
     1367                            threadstop=threadstop)
     1368   
     1369                else: # step == Consts.WIKIWORDMETADATA_STATE_DIRTY
     1370                    return self.refreshPropertiesFromPageAst(pageAst,
     1371                            threadstop=threadstop)
     1372
     1373        except NotCurrentThreadException:
     1374            return False
    13821375
    13831376
     
    17781771        try:
    17791772            tbContent = loadEntireTxtFile(tbLoc)
    1780             return fileContentToUnicode(tbContent)
     1773            return fileContentToUnicode(lineendToInternal(tbContent))
    17811774        except:
    17821775            return u""
  • branches/mbutscher/work/lib/pwiki/DocStructureCtrl.py

    r178 r190  
    22# _prof = hotshot.Profile("hotshot.prf")
    33
    4 import os, traceback, codecs
     4import os, traceback, codecs, bisect
    55import threading
    66from time import sleep
     
    2828        self.updatingThreadHolder = Utilities.ThreadHolder()
    2929        self.tocList = [] # List of tuples (char. start in text, headLevel, heading text)
     30        self.tocListStarts = []   # List of the char. start items of self.tocList
    3031        self.mainControl.getMiscEvent().addListener(self)
    3132        self.sizeVisible = True   # False if this window has a size
    3233                # that it can't be read (one dim. less than 5 pixels)
     34        self.ignoreOnChange = False
    3335
    3436        self.docPagePresenterSink = wxKeyFunctionSink((
     
    4244        ), wx.GetApp().getMiscEvent(), self)
    4345
     46        self.__sinkMainFrame = wxKeyFunctionSink((
     47                ("constructed main window", self.onConstructedMainWindow),
     48        ), self.mainControl.getMiscEvent(), self)
    4449
    4550        currPres = self.mainControl.getCurrentDocPagePresenter()
    4651        if currPres is not None:
    4752            self.docPagePresenterSink.setEventSource(currPres.getMiscEvent())
     53       
     54        self.lastSelection = (-1, -1)
    4855
    4956        self.updateList()
     
    105112            self.handleVisibilityChange()
    106113
    107        
     114
     115    def onConstructedMainWindow(self, evt):
     116        """
     117        Now we can register idle handler.
     118        """
     119        wx.EVT_IDLE(self, self.OnIdle)
     120
     121
     122    def OnIdle(self, evt):
     123        self.checkSelectionChanged()
     124       
     125       
     126    def checkSelectionChanged(self, callAlways=False):
     127        if not self.isVisibleEffect():
     128            return
     129
     130        presenter = self.mainControl.getCurrentDocPagePresenter()
     131        if presenter is None:
     132            return
     133
     134        subCtrl = presenter.getSubControl("textedit")
     135        if subCtrl is None:
     136            return
     137       
     138        sel = subCtrl.GetSelectionCharPos()
     139       
     140        if sel != self.lastSelection or callAlways:
     141            self.lastSelection = sel
     142            self.onSelectionChanged(sel)
     143
     144
     145    def onSelectionChanged(self, sel):
     146        """
     147        This is not directly supported by Scintilla, but called by OnIdle().
     148        """
     149        if not self.mainControl.getConfig().getboolean("main",
     150                "docStructure_autofollow"):
     151            return
     152
     153        idx = bisect.bisect_right(self.tocListStarts, sel[0]) - 1
     154
     155        self.ignoreOnChange = True
     156        try:
     157            self.SelectSingle(idx, scrollVisible=True)
     158        finally:   
     159            self.ignoreOnChange = False
     160
     161
     162
    108163    def miscEventHappened(self, miscevt):
    109164        """
     
    126181
    127182    def updateList(self):
     183        if self.mainControl.getConfig().getboolean("main",
     184                "docStructure_autofollow"):
     185            self.tocListStarts = []
     186            self.SelectSingle(-1)
     187
    128188        presenter = self.mainControl.getCurrentDocPagePresenter()
     189
    129190        if presenter is None:
    130191            self.tocList = []
     192            self.tocListStarts = []
    131193            self.applyTocList()
    132194            return
     
    156218            if docPage is None:
    157219                self.tocList = []
     220                self.tocListStarts = []
    158221                Utilities.callInMainThread(self.applyTocList)
    159222                return
     
    181244
    182245            self.tocList = result
     246            self.tocListStarts = [r[0] for r in result]
    183247
    184248#             if threadstop is DUMBTHREADSTOP:
     
    201265                self.InsertStringItem(self.GetItemCount(), text)
    202266            self.SetColumnWidth(0, wx.LIST_AUTOSIZE)
     267            self.checkSelectionChanged(callAlways=True)
    203268        finally:
    204269            self.Thaw()
     
    220285        """
    221286        Display title in subcontrol of current presenter which
    222         starts at byte position start in page text.
    223        
     287        starts at char position  start in page text.
     288
    224289        focusToSubctrl -- True iff subcontrol should become focused after
    225290                displaying is done
     
    247312
    248313    def OnItemSelected(self, evt):
    249         start = self.tocList[evt.GetIndex()][0]
     314        if self.ignoreOnChange:
     315            return
     316       
     317        start = self.tocListStarts[evt.GetIndex()]
    250318        self.displayInSubcontrol(start)
    251319
  • branches/mbutscher/work/lib/pwiki/Exporters.py

    r188 r190  
    2929
    3030import DocPages
    31 
    3231
    3332
     
    8786        """
    8887        Reads additional options from panel addoptpanel.
     88        If addoptpanel is None, return default values
    8989        If getAddOptVersion() > -1, the return value must be a sequence
    9090        of simple string, unicode and/or numeric objects. Otherwise, any object
    9191        can be returned (normally the addoptpanel itself).
    92         Here, it returns a tuple with following items:
    93             * bool (as integer) if pictures should be exported as links
    94             * integer to control creation of table of contents
    95                 (0: No; 1: as tree; 2: as list)
    96             * unistring: TOC title
    97             * unistring: name of export subdir for volatile files
    98                 (= automatically generated files, e.g. formula images
    99                 from MimeTeX).
     92        """
     93        raise NotImplementedError
     94   
     95
     96    def setAddOpt(self, addOpt, addoptpanel):
     97        """
     98        Shows content of addOpt in the addoptpanel (must not be None).
     99        This function is only called if getAddOptVersion() != -1.
    100100        """
    101101        raise NotImplementedError
     
    145145
    146146
     147#     def supportsXmlOptions(self):
     148#         """
     149#         Returns True if additional options can be returned and processed
     150#         as XML.
     151#         """
     152#         return True
     153#     
     154#     def getXmlRepresentation
    147155
    148156
     
    399407            return (picsAsLinks, tableOfContents, tocTitle, u"volatile")
    400408
     409
     410    def setAddOpt(self, addOpt, addoptpanel):
     411        """
     412        Shows content of addOpt in the addoptpanel (must not be None).
     413        This function is only called if getAddOptVersion() != -1.
     414        """
     415        picsAsLinks, tableOfContents, tocTitle, volatileDir = \
     416                addOpt
     417
     418        # volatileDir is currently ignored
     419
     420        ctrls = XrcControls(addoptpanel)
     421
     422        ctrls.cbPicsAsLinks.SetValue(picsAsLinks != 0)
     423        ctrls.chTableOfContents.SetSelection(tableOfContents)
     424        ctrls.tfHtmlTocTitle.SetValue(tocTitle)
     425
     426       
     427       
    401428
    402429    def export(self, wikiDocument, wordList, exportType, exportDest,
     
    20022029
    20032030        return (
    2004             ("raw_files", 'Set of *.wiki files', textPanel),
     2031            (u"raw_files", 'Set of *.wiki files', textPanel),
    20052032            )
    20062033
     
    20592086            return (ctrls.chTextEncoding.GetSelection(),)
    20602087
    2061            
     2088
     2089    def setAddOpt(self, addOpt, addoptpanel):
     2090        """
     2091        Shows content of addOpt in the addoptpanel (must not be None).
     2092        This function is only called if getAddOptVersion() != -1.
     2093        """
     2094        ctrls = XrcControls(addoptpanel)
     2095        ctrls.chTextEncoding.SetSelection(addOpt[0])
     2096
    20622097
    20632098    def export(self, wikiDocument, wordList, exportType, exportDest,
     
    22332268
    22342269
     2270    def setAddOpt(self, addOpt, addoptpanel):
     2271        """
     2272        Shows content of addOpt in the addoptpanel (must not be None).
     2273        This function is only called if getAddOptVersion() != -1.
     2274        """
     2275        fileVersion, writeWikiFuncPages, writeSavedSearches = \
     2276                addOpt
     2277
     2278        ctrls = addoptpanel.ctrls   # XrcControls(addoptpanel)?
     2279
     2280        ctrls.chFileVersion.SetSelection(fileVersion)
     2281        ctrls.cbWriteWikiFuncPages.SetValue(writeWikiFuncPages != 0)
     2282        ctrls.cbWriteSavedSearches.SetValue(writeSavedSearches != 0)
     2283
     2284
     2285
    22352286    # TODO Check also wiki func pages !!!
    22362287    def _checkPossibleSeparator(self, sep):
     
    24092460            MultiPageTextExporter(mainControl))
    24102461   
     2462
  • branches/mbutscher/work/lib/pwiki/MainApp.py

    r188 r190  
    460460        pass
    461461       
    462     def getDbExecutor(self):
    463         return self.dbExecutor
    464 
     462#     def getDbExecutor(self):
     463#         return self.dbExecutor
     464       
     465    def pauseBackgroundThreads(self):
     466        self.fireMiscEventKeys(("pause background threads",))
     467#        self.dbExecutor.pause()
     468
     469    def resumeBackgroundThreads(self):
     470#        self.dbExecutor.start()
     471        self.fireMiscEventKeys(("resume background threads",))
    465472
    466473    def onGlobalConfigurationChanged(self, miscevt):
  • branches/mbutscher/work/lib/pwiki/OptionsDialog.py

    r188 r190  
    380380            ("docStructure_depth", "scDocStructureDepth", "spin"),
    381381            ("docStructure_autohide", "cbDocStructureAutoHide", "b"),
     382            ("docStructure_autofollow", "cbDocStructureAutoFollow", "b"),
    382383
    383384
  • branches/mbutscher/work/lib/pwiki/PersonalWikiFrame.py

    r188 r190  
    6565
    6666import Exporters
    67 from StringOps import uniToGui, guiToUni, mbcsDec, mbcsEnc, strToBool, \
    68         BOM_UTF8, fileContentToUnicode, splitIndent, \
    69         unescapeWithRe, escapeForIni, unescapeForIni, \
     67from StringOps import uniToGui, guiToUni, mbcsDec, mbcsEnc, \
     68        unescapeForIni, \
    7069        wikiUrlToPathWordAndAnchor, urlFromPathname, flexibleUrlUnquote, \
    7170        strftimeUB, pathEnc, loadEntireFile, writeEntireFile, \
     
    144143    def __init__(self, parent, id, title, wikiAppDir, globalConfigDir,
    145144            globalConfigSubDir, cmdLineAction):
     145        # Do not use member variables starting with "externalPlugin_"! They
     146        # are reserved for external plugins.
    146147        wx.Frame.__init__(self, parent, -1, title, size = (700, 550),
    147148                         style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE)
     
    181182camelCaseWordsEnabled: false;a=[camelCaseWordsEnabled: false]\\n
    182183""", True)
    183 #         self.globalConfigLoc = join(globalConfigDir, "WikidPad.config")
    184184        self.configuration = wx.GetApp().createCombinedConfiguration()
    185185       
    186186        # Listen to application events
    187187        wx.GetApp().getMiscEvent().addListener(self)
    188 
     188       
    189189        self.wikiPadHelp = join(self.wikiAppDir, 'WikidPadHelp',
    190190                'WikidPadHelp.wiki')
     
    203203       
    204204        self.mainAreaPanel = None
    205 #         self._mainAreaPanelCreated = False
    206205        self.mainmenu = None
    207206
     
    226225        self.eventRoundtrip = 0
    227226
    228 #         self.currentDocPagePresenterProxyEvent = ProxyMiscEvent(self)
    229227        self.currentWikiDocumentProxyEvent = ProxyMiscEvent(self)
    230228        self.currentWikiDocumentProxyEvent.addListener(self)
     
    235233                join(self.wikiAppDir, u'extensions') )
    236234        self.pluginManager = PluginManager(dirs)
     235
     236#         wx.GetApp().pauseBackgroundThreads()
    237237
    238238        self.hooks = self.pluginManager.registerPluginAPI(("hooks",1),
     
    255255        # trigger hook
    256256        self.hooks.startup(self)
    257 
    258 #         # Connect page history
    259 #         self.pageHistory = PageHistory(self)
    260257
    261258        # Initialize printing
     
    348345                self.openWiki(wikiToOpen, wikiWordsToOpen,
    349346                        anchorToOpen=anchorToOpen)
     347#                 wx.GetApp().pauseBackgroundThreads()
    350348            else:
    351349                self.statusBar.SetStatusText(
     
    365363        EVT_REMOTE_COMMAND(self, self.OnRemoteCommand)
    366364
    367 #         wx.FileSystem.AddHandler(wx.ZipFSHandler())
     365        # Inform that idle handlers and window-specific threads can now be started
     366        self.fireMiscEventKeys(("constructed main window",))
     367
     368#         finally:
     369#             wx.GetApp().resumeBackgroundThreads()
    368370
    369371
    370372    def loadExtensions(self):
    371         self.wikidPadHooks = self.getExtension('WikidPadHooks', u'WikidPadHooks.py')
     373#         self.wikidPadHooks = self.getExtension('WikidPadHooks', u'WikidPadHooks.py')
    372374        self.keyBindings = KeyBindingsCache(
    373375                self.getExtension('KeyBindings', u'KeyBindings.py'))
     
    41614163                result = wx.MessageBox(
    41624164                        _(u"Do you want to modify all links to the wiki word "
    4163                         u"'%s' renamed to '%s' (this operation is unrealiable)?") %
     4165                        u"'%s' renamed to '%s' (this operation is unreliable)?") %
    41644166                        (wikiWord, toWikiWord),
    41654167                        _(u'Rename Wiki Word'),
  • branches/mbutscher/work/lib/pwiki/SearchAndReplace.py

    r188 r190  
    1 import re
     1import re, traceback
    22from struct import pack, unpack
    33
    44from WikiExceptions import *
    55
    6 from Serialization import SerializeStream
     6from Serialization import SerializeStream, findXmlElementFlat, \
     7        iterXmlElementFlat, serToXmlUnicode, serFromXmlUnicode, \
     8        serToXmlBool, serFromXmlBool, serToXmlInt, serFromXmlInt
     9
     10
    711
    812from StringOps import utf8Enc, utf8Dec, boolToChar, charToBool, strToBin, \
     
    4953        """
    5054#         return self.testText(text)
    51         assert 0  # Abstract
     55        raise NotImplementedError
    5256       
    5357
     
    7377        stream -- StringOps.SerializeStream object
    7478        """
    75         assert 0 #abstract
     79        raise NotImplementedError
     80   
     81    def serializeToXml(self, xmlNode, xmlDoc):
     82        """
     83        Add to xmlNode all information about this object.
     84        """
     85        raise NotImplementedError
     86
     87
     88    def serializeFromXml(self, xmlNode):
     89        """
     90        Set object state from data in xmlNode)
     91        """
     92        raise NotImplementedError
    7693
    7794
     
    171188        """
    172189        leftret = self.left.orderNatural(wordSet, coll)
    173        
     190
    174191        if len(wordSet) == 0:
    175192            return leftret
    176193
    177194        rightret = self.right.orderNatural(wordSet, coll)
    178        
     195
    179196        return leftret + rightret
    180        
    181        
     197
     198
    182199class NotSearchNode(AbstractSearchNode):
    183200    """
     
    226243
    227244
     245    def serializeToXml(self, xmlNode, xmlDoc):
     246        """
     247        Modify XML node to contain all information about this object.
     248        """
     249        subNode = xmlDoc.createElement(u"node")
     250        _serNodeToXml(subNode, xmlDoc, self.sub)
     251        xmlNode.appendChild(subNode)
     252
     253
     254    def serializeFromXml(self, xmlNode):
     255        """
     256        Set object state from data in xmlNode)
     257        """
     258        subNode = findXmlElementFlat(xmlNode, u"node")
     259        self.sub = _serNodeFromXml(subNode, self.sarOp)
     260
     261
     262
    228263# ----- Page list construction nodes -----
    229264
     
    238273        AbstractSearchNode.__init__(self, sarOp)
    239274        self.wikiName = None
     275#         print "--AllWikiPagesNode4"
     276#         traceback.print_stack()
    240277   
    241278    def beginWikiSearch(self, wikiDocument):
     
    270307        if version != 0:
    271308            raise SerializationException
     309
     310    def serializeToXml(self, xmlNode, xmlDoc):
     311        """
     312        Modify XML node to contain all information about this object.
     313        """
     314        pass
     315
     316
     317    def serializeFromXml(self, xmlNode):
     318        """
     319        Set object state from data in xmlNode)
     320        """
     321        pass
     322
    272323
    273324    def getRootWords(self):
     
    310361            self.compPat = re.compile(pattern,
    311362                re.DOTALL | re.UNICODE | re.MULTILINE)  # TODO MULTILINE?
    312                
     363
     364    def serializeToXml(self, xmlNode, xmlDoc):
     365        """
     366        Modify XML node to contain all information about this object.
     367        """
     368        serToXmlUnicode(xmlNode, xmlDoc, u"pattern", self.compPat.pattern)
     369
     370
     371    def serializeFromXml(self, xmlNode):
     372        """
     373        Set object state from data in xmlNode)
     374        """
     375        pattern = serFromXmlUnicode(xmlNode, u"pattern")
     376        if pattern != self.compPat.pattern:
     377            self.compPat = re.compile(pattern,
     378                re.DOTALL | re.UNICODE | re.MULTILINE)  # TODO MULTILINE?
     379
    313380    def getPattern(self):
    314381        """
     
    417484
    418485
     486    def serializeToXml(self, xmlNode, xmlDoc):
     487        """
     488        Modify XML node to contain all information about this object.
     489        """
     490        serToXmlInt(xmlNode, xmlDoc, u"level", self.level)
     491
     492        for item in self.rootWords:
     493            subNode = xmlDoc.createElement(u"wikiword")
     494            subNode.appendChild(xmlDoc.createTextNode(item))
     495            xmlNode.appendChild(subNode)
     496
     497    def serializeFromXml(self, xmlNode):
     498        """
     499        Set object state from data in xmlNode)
     500        """
     501       
     502        words = []
     503       
     504        for subNode in iterXmlElementFlat(xmlNode, u"wikiword"):
     505            words.append(subNode.firstChild.data)
     506
     507        self.rootWords = words
     508        self.level = serFromXmlInt(xmlNode, u"level")
     509
     510
    419511    def getRootWords(self):
    420512        """
     
    455547
    456548
     549def _serNodeToXml(xmlNode, xmlDoc, obj):
     550    xmlNode.setAttribute(u"persistenceClass", unicode(obj.CLASS_PERSID))
     551    obj.serializeToXml(xmlNode, xmlDoc)
     552#     xmlNode.appendChild(subNode)
     553    return obj
     554
     555
     556def _serNodeFromXml(xmlNode, sarOp):
     557    global _PERSID_TO_CLASS_MAP
     558    persId = xmlNode.getAttribute(u"persistenceClass")
     559    cl = _PERSID_TO_CLASS_MAP[persId]
     560    obj = cl(sarOp)
     561    obj.serializeFromXml(xmlNode)
     562    return obj
     563
     564
    457565
    458566# -------------------- Text search criteria --------------------
     
    649757        self.ordering = stream.serString(self.ordering)
    650758        self.searchOpTree = _serNode(stream, self, self.searchOpTree)
     759
     760
     761    def serializeToXml(self, xmlNode, xmlDoc):
     762        """
     763        Modify XML node to contain all information about this object.
     764        """
     765        serToXmlUnicode(xmlNode, xmlDoc, u"ordering", self.ordering)
     766       
     767        subNode = xmlDoc.createElement(u"optree")
     768        subNode2 = xmlDoc.createElement(u"node")
     769        _serNodeToXml(subNode2, xmlDoc, self.searchOpTree)
     770        subNode.appendChild(subNode2)
     771        xmlNode.appendChild(subNode)
     772
     773
     774
     775    def serializeFromXml(self, xmlNode):
     776        """
     777        Set object state from data in xmlNode)
     778        """
     779        self.ordering = serFromXmlUnicode(xmlNode, u"ordering")
     780
     781        subNode = findXmlElementFlat(xmlNode, u"optree")
     782        subNode = findXmlElementFlat(subNode, u"node")
     783
     784        self.searchOpTree = _serNodeFromXml(subNode, self)
    651785
    652786
     
    9031037
    9041038        self.wildCard = stream.serString(self.wildCard)
    905        
     1039
    9061040        if version > 0:
    9071041            self.listWikiPagesOp.serializeBin(stream)
     
    9101044            # Reset listWikiPagesOp to default
    9111045            self.listWikiPagesOp = ListWikiPagesOperation()
     1046
     1047
     1048    def serializeToXml(self, xmlNode, xmlDoc):
     1049        """
     1050        Modify XML node to contain all information about this object.
     1051        """
     1052        serToXmlUnicode(xmlNode, xmlDoc, u"searchPattern", self.searchStr)
     1053        serToXmlUnicode(xmlNode, xmlDoc, u"replacePattern", self.replaceStr)
     1054
     1055        serToXmlBool(xmlNode, xmlDoc, u"replaceOperation", self.replaceOp)
     1056        serToXmlBool(xmlNode, xmlDoc, u"wholeWord", self.wholeWord)
     1057        serToXmlBool(xmlNode, xmlDoc, u"caseSensitive", self.caseSensitive)
     1058        serToXmlBool(xmlNode, xmlDoc, u"cycleToStart", self.cycleToStart)
     1059        serToXmlBool(xmlNode, xmlDoc, u"booleanOperation", self.booleanOp)
     1060
     1061        serToXmlUnicode(xmlNode, xmlDoc, u"wildCardMode", unicode(self.wildCard))
     1062
     1063        subNode = xmlDoc.createElement(u"listWikiPagesOperation")
     1064        xmlNode.appendChild(subNode)
     1065
     1066        self.listWikiPagesOp.serializeToXml(subNode, xmlDoc)
     1067
     1068
     1069    def serializeFromXml(self, xmlNode):
     1070        """
     1071        Set object state from data in xmlNode)
     1072        """
     1073        self.searchStr = serFromXmlUnicode(xmlNode, u"searchPattern")
     1074        self.replaceStr = serFromXmlUnicode(xmlNode, u"replacePattern")
     1075
     1076        self.replaceOp = serFromXmlBool(xmlNode, u"replaceOperation")
     1077        self.wholeWord = serFromXmlBool(xmlNode, u"wholeWord")
     1078        self.caseSensitive = serFromXmlBool(xmlNode, u"caseSensitive")
     1079        self.cycleToStart = serFromXmlBool(xmlNode, u"cycleToStart")
     1080        self.booleanOp = serFromXmlBool(xmlNode, u"booleanOperation")
     1081
     1082        self.wildCard = serFromXmlUnicode(xmlNode, u"wildCardMode")
     1083
     1084        subNode = findXmlElementFlat(xmlNode, u"listWikiPagesOperation")
     1085
     1086        self.listWikiPagesOp = ListWikiPagesOperation()
     1087        self.listWikiPagesOp.serializeFromXml(subNode)
    9121088
    9131089
  • branches/mbutscher/work/lib/pwiki/SearchAndReplaceDialogs.py

    r188 r190  
    782782            self.ctrls.btnCancel.Show(False)
    783783
    784         self.ctrls.tfPageListToAdd.SetValue(uniToGui(
    785                 self.mainControl.getCurrentWikiWord()))
     784        currWord = self.mainControl.getCurrentWikiWord()
     785        if currWord is not None:
     786            self.ctrls.tfPageListToAdd.SetValue(uniToGui(currWord))
    786787
    787788        self.ctrls.cbSearch.SetWindowStyle(self.ctrls.cbSearch.GetWindowStyle()
     
    13881389                .getDataBlockUnifNamesStartingWith(u"savedsearch/")
    13891390
    1390 #         self.savedSearches = self.pWiki.getWikiData().getSavedSearchTitles()
    13911391        self.savedSearches = [name[12:] for name in unifNames]
    13921392        self.mainControl.getCollator().sort(self.savedSearches)
     
    17571757        buttonSizer.Add(self.btnAsWwSearch, 0, wx.EXPAND)
    17581758
    1759         buttonSizer.AddStretchSpacer()
     1759#         buttonSizer.AddStretchSpacer()
     1760        buttonSizer.Add((0, 0), 1)
    17601761
    17611762        res = wx.xrc.XmlResource.Get()
     
    18651866                label=_(u"As Tab"))    # TODO Allow hotkey for button
    18661867        buttonSizer.Add(self.btnAsTab, 0, wx.EXPAND)
    1867         buttonSizer.AddStretchSpacer()
    1868 
     1868#         buttonSizer.AddStretchSpacer()
     1869        buttonSizer.Add((0, 0), 1)
    18691870
    18701871        sizer.Add(buttonSizer, 0, wx.EXPAND)
  • branches/mbutscher/work/lib/pwiki/Serialization.py

    r166 r190  
    22import cStringIO as StringIO
    33
    4 from StringOps import utf8Dec, utf8Enc
     4from StringOps import utf8Dec, utf8Enc, strToBool, base64BlockEncode, \
     5        base64BlockDecode
    56
    67
     
    173174           
    174175        return an
    175        
    176 
    177176
    178177    def close(self):
     
    182181        self.fileObj.close()
    183182
     183
     184
     185def findXmlElementFlat(xmlNode, tag, excOnFail=True):
     186    """
     187    Search children of xmlNode until finding an element with tag  tag  and
     188    return it. Raises SerializationException if not found (excOnFail==True) or
     189    returns (excOnFail==False).
     190    """
     191    for subNode in xmlNode.childNodes:
     192        if subNode.nodeType != subNode.ELEMENT_NODE:
     193            continue
     194       
     195        if subNode.tagName == tag:
     196            return subNode
     197   
     198    if excOnFail:
     199        raise SerializationException(
     200                "XML conversion: Element '%s' not found inside '%s'" %
     201                (tag, xmlNode.tagName))
     202    else:
     203        return None
     204
     205
     206def iterXmlElementFlat(xmlNode, tag):
     207    """
     208    Return iterator through all children of xmlNode with tag  tag.
     209    """
     210    for subNode in xmlNode.childNodes:
     211        if subNode.nodeType != subNode.ELEMENT_NODE:
     212            continue
     213       
     214        if subNode.tagName == tag:
     215            yield subNode
     216
     217
     218def serToXmlUnicode(xmlNode, xmlDoc, tag, data):
     219    subNode = xmlDoc.createElement(tag)
     220    subNode.appendChild(xmlDoc.createTextNode(data))
     221    xmlNode.appendChild(subNode)
     222
     223
     224def serFromXmlUnicode(xmlNode, tag):
     225    subNode = findXmlElementFlat(xmlNode, tag)
     226    child = subNode.firstChild
     227    if child is None:
     228        return u""
     229    return child.data
     230
     231
     232def serToXmlBool(xmlNode, xmlDoc, tag, data):
     233    serToXmlUnicode(xmlNode, xmlDoc, tag, unicode(repr(data)))
     234
     235
     236def serFromXmlBool(xmlNode, tag):
     237    return strToBool(serFromXmlUnicode(xmlNode, tag))
     238
     239
     240def serToXmlInt(xmlNode, xmlDoc, tag, data):
     241    serToXmlUnicode(xmlNode, xmlDoc, tag, unicode(repr(data)))
     242
     243def serFromXmlInt(xmlNode, tag):
     244    return int(serFromXmlUnicode(xmlNode, tag))
     245
     246
     247
     248_TYPE_TO_TYPENAME = (
     249        (bool, u"bool"),
     250        (int, u"int"),
     251        (long, u"long"),
     252        (float, u"float"),
     253        (unicode, u"unicode"),
     254        (str, u"str")
     255    )
     256
     257
     258
     259_TYPENAME_TO_FACTORY = {
     260        u"int": int,
     261        u"long": long,
     262        u"float": float,
     263        u"unicode": unicode,
     264        u"str": base64BlockDecode,
     265        u"bool": strToBool
     266    }
     267
     268
     269def convertTupleToXml(xmlNode, xmlDoc, addOpt):
     270#     mainEl = xmlDoc.createElement(u"addoptions")
     271#     mainEl.setAttribute(u"type", u"simpletuple")
     272    for opt in addOpt:
     273        dtype = None
     274        for t, tn in _TYPE_TO_TYPENAME:
     275            if isinstance(opt, t):
     276                dtype = tn
     277                break
     278
     279        if dtype is None:
     280            raise SerializationException(
     281                    "XML conversion: Unknown item type in tuple: " + repr(opt))
     282
     283        if dtype == u"str":
     284            # Maybe binary data, so do base64 encoding
     285            opt = base64BlockEncode(opt)
     286
     287        subEl = xmlDoc.createElement(u"item")
     288        subEl.setAttribute(u"type", dtype)
     289
     290        subEl.appendChild(xmlDoc.createTextNode(unicode(opt)))
     291
     292        xmlNode.appendChild(subEl)
     293
     294
     295
     296def convertTupleFromXml(xmlNode):
     297#     # TODO More error checking
     298#     if mainEl.tagName != u"addoptions":
     299#         raise SerializationException(
     300#                 "Unknown XML element " + repr(mainEl.tagName) +
     301#                 ", expected 'addoptions'")
     302#
     303#     if mainEl.getAttribute("type") != u"simpletuple":
     304#         raise SerializationException(
     305#                 "XML element 'addoptions' can only have type attribute 'simpletuple', found " +
     306#                 repr(mainEl.getAttribute("type")) +" instead")
     307
     308    result = []
     309    for subEl in iterXmlElementFlat(xmlNode, u"item"):
     310        dtype = subEl.getAttribute(u"type")
     311        fact = _TYPENAME_TO_FACTORY.get(dtype)
     312        if fact is None:
     313            raise SerializationException(
     314                    "XML conversion: XML element 'item' can't have type attribute '" +
     315                    repr(dtype))
     316
     317        data = subEl.firstChild.data
     318        result.append(fact(data))
     319
     320    return tuple(result)
     321
  • branches/mbutscher/work/lib/pwiki/StringOps.py

    r188 r190  
    248248    """
    249249    if content.startswith(BOM_UTF8):
    250         return utf8Dec(content[len(BOM_UTF8):], "replace")[0]
     250        return content[len(BOM_UTF8):].decode("utf-8", "replace")
     251    elif content.startswith(BOM_UTF16_BE):
     252        return content[len(BOM_UTF16_BE):].decode("utf-16-be", "replace")
     253    elif content.startswith(BOM_UTF16_LE):
     254        return content[len(BOM_UTF16_LE):].decode("utf-16-le", "replace")
    251255    else:
    252256        return mbcsDec(content, "replace")[0]
  • branches/mbutscher/work/lib/pwiki/Utilities.py

    r185 r190  
    1919class BasicThreadStop(object):
    2020    """
    21     Used for synchronous operations where no thread stop condition is necessary
     21    An object of this or a derived class are handed over to long running
     22    operations which might run in a separate thread and maybe must be stopped
     23    for some reason (e.g. a parsing operation should be stopped if the
     24    parsed text was changed and the operation on the old text therefore becomes
     25    useless).
     26    During the operation the function isRunning() or testRunning() should be
     27    called from time to time to check if op. should be stopped.
     28
     29    This class is used for synchronous operations where no thread stop
     30    condition is necessary.
    2231    """
    2332    __slots__ = ()
    24    
     33
    2534    def isRunning(self):
     35        """
     36        Returns True if operation should continue.
     37        """
    2638        return True
    27        
     39
    2840    def testRunning(self):
     41        """
     42        Throws a NotCurrentThreadException if op. should stop, does nothing
     43        otherwise.
     44        """
    2945        pass
    3046
    31        
     47
    3248DUMBTHREADSTOP = BasicThreadStop()
    3349
     
    111127
    112128
    113 class SingleThreadExecutor(object):
     129class SingleThreadExecutor(BasicThreadStop):
    114130    def __init__(self, dequeCount=1, daemon=False):
    115131        self.dequeCondition = threading.Condition()
     
    119135        self.deques = None
    120136        self.thread = None
    121 
     137        self.paused = False
     138        self.currentThreadStop = None
     139
     140    def isRunning(self):
     141        return self.deques is not None
     142       
     143    def testRunning(self):
     144        if self.deques is None:
     145            raise NotCurrentThreadException()
    122146
    123147    def start(self):
    124         if self.thread is not None and self.thread.isAlive():
    125             return
    126 
    127         with self.dequeCondition:
     148        with self.dequeCondition:
     149            self.paused = False
     150            if self.thread is not None and self.thread.isAlive():
     151                return
     152
    128153            if self.deques is None:
    129154                self.deques = tuple(collections.deque()
     
    199224                    return
    200225
    201                 fct, args, kwargs, event, retObj = job
     226                fct, args, kwargs, event, retObj, tstop = job
    202227            try:
    203228                if fct is SingleThreadExecutor.ENDOBJECT:
     
    207232                    with self.dequeCondition:
    208233                        if self.getJobCount() == 0:
    209                             return
     234                           return
    210235
    211236                        self.deques[-1].appendleft(
     
    213238                                None, None))
    214239                        continue
    215 
     240                elif self.paused:
     241                    # Operation should pause, this means to kill the thread, but
     242                    # to keep the deques as they are.
     243                    # To resume, start() is called
     244                    with self.dequeCondition:
     245                        return
    216246
    217247#                 tracer.runctx('retObj.result = fct(*args, **kwargs)', globals(), locals())
     248                if tstop:
     249                    kwargs["threadstop"] = self
     250
    218251                retObj.setResult(fct(*args, **kwargs))
    219252
     
    233266            raise InternalError("Called SingleThreadExecutor.execute() after "
    234267                    "queue was killed")
    235        
     268
    236269        event = threading.Event()
    237270        retObj = ExecutionResult()
    238271
    239272        with self.dequeCondition:
    240             self.deques[idx].appendleft((fct, args, kwargs, event, retObj))
     273            self.deques[idx].appendleft((fct, args, kwargs, event, retObj, None))
    241274            self.dequeCondition.notify()
    242275
     
    258291
    259292        with self.dequeCondition:
    260             self.deques[idx].appendleft((fct, args, kwargs, None, retObj))
     293            self.deques[idx].appendleft((fct, args, kwargs, None, retObj, False))
     294            self.dequeCondition.notify()
     295
     296        return retObj
     297
     298
     299    def executeAsyncWithThreadStop(self, idx, fct, *args, **kwargs):
     300        retObj = ExecutionResult()
     301
     302        if self.deques is None:
     303            return retObj  # Error?
     304
     305        with self.dequeCondition:
     306            self.deques[idx].appendleft((fct, args, kwargs, None, retObj, True))
    261307            self.dequeCondition.notify()
    262308
     
    287333            else:
    288334                self.deques[-1].appendleft(
    289                         (SingleThreadExecutor.ENDOBJECT, None, None, None, None))
     335                        (SingleThreadExecutor.ENDOBJECT, None, None, None, None,
     336                        False))
    290337            self.dequeCondition.notify()
    291338
    292339        self.thread.join(120)
    293        
     340
    294341        if self.thread.isAlive():
    295342            raise DeadBlockPreventionTimeOutError()
    296        
     343
    297344        self.thread = None
     345
     346
     347    def pause(self):
     348        with self.dequeCondition:
     349            if self.thread is None or not self.thread.isAlive():
     350                return
     351               
     352            self.paused = True
    298353
    299354
     
    483538
    484539
    485 
    486 
    487 
    488 
    489540def seqStartsWith(seq, startSeq):
    490541    """
  • branches/mbutscher/work/lib/pwiki/WikiTreeCtrl.py

    r188 r190  
    14591459
    14601460        self.setNodePresentation(parentnodeid, nodeStyle)
    1461        
     1461
    14621462        if not nodeStyle.hasChildren and self.expandedNodePathes is not None:
    14631463            self.expandedNodePathes.discardStartsWith(
     
    16861686
    16871687            page.appendLiveText(u"\n" +
    1688                     langHelper.createStableLinksFromWikiWords(toWikiWord))
     1688                    langHelper.createStableLinksFromWikiWords((toWikiWord,)))
    16891689
    16901690
     
    16991699            langHelper = wx.GetApp().createWikiLanguageHelper(
    17001700                    page.getWikiLanguageName())
    1701 
     1701                   
     1702            text = page.getLiveText()
    17021703            page.replaceLiveText(
    1703                     langHelper.createStableLinksFromWikiWords(toWikiWord) +
     1704                    langHelper.createStableLinksFromWikiWords((toWikiWord,)) +
    17041705                    u"\n" + text)
    17051706
  • branches/mbutscher/work/lib/pwiki/WikiTxtCtrl.py

    r188 r190  
    412412        ), wx.GetApp().getMiscEvent(), self)
    413413
     414        self.__sinkMainFrame = wxKeyFunctionSink((
     415                ("constructed main window", self.onConstructedMainWindow),
     416        ), self.presenter.getMainControl().getMiscEvent(), self)
     417
    414418#         self.presenter.getMiscEvent().addListener(self.presenterListener)
    415419
     
    438442        wx.EVT_SET_FOCUS(self, self.OnSetFocus)
    439443
    440         wx.EVT_IDLE(self, self.OnIdle)
    441444        wx.EVT_CONTEXT_MENU(self, self.OnContextMenu)
    442445       
     
    502505        self.presenterListener.disconnect()
    503506#         self.presenter.getMiscEvent().removeListener(self.presenterListener)
     507
     508
     509    def onConstructedMainWindow(self, evt):
     510        """
     511        Now we can register idle handler.
     512        """
     513        wx.EVT_IDLE(self, self.OnIdle)
    504514
    505515
  • branches/mbutscher/work/lib/pwiki/wikidata/WikiDataManager.py

    r188 r190  
    1414from pwiki.WikiExceptions import *
    1515
    16 from pwiki.Utilities import TimeoutRLock, SingleThreadExecutor
     16from pwiki.Utilities import TimeoutRLock, SingleThreadExecutor, DUMBTHREADSTOP
    1717
    1818from pwiki.MiscEvent import MiscEventSourceMixin
     
    504504#                         word)
    505505
    506     def _runDatabaseUpdate(self, word, step):
     506    def _runDatabaseUpdate(self, word, step, threadstop=DUMBTHREADSTOP):
    507507        time.sleep(0.1)
    508508        try:
     
    510510
    511511            if step == Consts.WIKIWORDMETADATA_STATE_DIRTY and \
    512                     page.runDatabaseUpdate(step=step):
    513                 self.updateExecutor.executeAsync(1, self._runDatabaseUpdate,
     512                    page.runDatabaseUpdate(step=step, threadstop=threadstop):
     513                self.updateExecutor.executeAsyncWithThreadStop(1, self._runDatabaseUpdate,
    514514                        word, Consts.WIKIWORDMETADATA_STATE_PROPSPROCESSED)
    515515            else:
    516                 page.runDatabaseUpdate(step=step)
     516                page.runDatabaseUpdate(step=step, threadstop=threadstop)
    517517
    518518        except WikiWordNotFoundException:
     
    743743
    744744    def pushUpdatePage(self, page):
    745         self.updateExecutor.executeAsync(0, page.runDatabaseUpdate)
     745        self.updateExecutor.executeAsyncWithThreadStop(0, page.runDatabaseUpdate)
    746746#         with self.pageUpdateDequeCondition:
    747747#             self.pageUpdateDeque.appendleft(page)
     
    784784            with self.updateExecutor.getDequeCondition():
    785785                for word in words0:
    786                     self.updateExecutor.executeAsync(1, self._runDatabaseUpdate,
     786                    self.updateExecutor.executeAsyncWithThreadStop(1, self._runDatabaseUpdate,
    787787                            word, Consts.WIKIWORDMETADATA_STATE_DIRTY)
    788788   
    789789                for word in words1:
    790                     self.updateExecutor.executeAsync(1, self._runDatabaseUpdate,
     790                    self.updateExecutor.executeAsyncWithThreadStop(1, self._runDatabaseUpdate,
    791791                            word, Consts.WIKIWORDMETADATA_STATE_PROPSPROCESSED)
    792792
     
    820820        return self.wikiData.isDefinedWikiLink(wikiWord)
    821821
    822        
     822    # For plugin compatibility
     823    isDefinedWikiWord = isDefinedWikiLink
     824
    823825    def isCreatableWikiWord(self, wikiWord):
    824826        """
     
    15321534            if miscevt.has_key("reread cc blacklist needed"):
    15331535                self._updateCcWordBlacklist()
     1536            elif miscevt.has_key("pause background threads"):
     1537                self.updateExecutor.pause()
     1538            elif miscevt.has_key("resume background threads"):
     1539                self.updateExecutor.start()
    15341540        elif isinstance(miscevt.getSource(), DocPage):
    15351541            # These messages come from (classes derived from) DocPage,
  • branches/mbutscher/work/lib/pwiki/wikidata/original_gadfly/WikiData.py

    r186 r190  
    17521752                    # It is in internal data blocks
    17531753                    self.connWrap.execSql("update datablocks set data = ? where "
    1754                             "unifiedname = ?", (data, unifName))
     1754                            "unifiedname = ?", (newdata, unifName))
    17551755                    return
    17561756                   
  • branches/mbutscher/work/lib/pwiki/wikidata/original_sqlite/WikiData.py

    r188 r190  
    18431843                    # It is in internal data blocks
    18441844                    self.connWrap.execSql("update datablocks set data = ? where "
    1845                             "unifiedname = ?", (sqlite.Binary(data), unifName))
     1845                            "unifiedname = ?", (sqlite.Binary(newdata), unifName))
    18461846                    return
    1847                    
     1847
    18481848                # It may be in external data blocks
    18491849                self.deleteDataBlock(unifName)
  • branches/mbutscher/work/lib/pwiki/wxHelper.py

    r188 r190  
    792792
    793793
    794     def SelectSingle(self, idx):
     794    def SelectSingle(self, idx, scrollVisible=False):
    795795        # Unselect all selected
    796796        for prev in self.GetAllSelected():
     
    799799        if idx > -1:
    800800            self.SetItemState(idx, self._SETSSI_ITEMMASK, self._SETSSI_ITEMMASK)
    801 
    802 
    803 
    804 
     801            if scrollVisible:
     802                self.EnsureVisible(idx)
    805803
    806804# class ColoredStatusBar(wx.StatusBar):
  • branches/mbutscher/work/license.txt

    r171 r190  
    3232POSSIBILITY OF SUCH DAMAGE.
    3333
     34
    3435------------------------------------------------------------
     36Some DLLs of the Windows binary installer are copyrighted by Microsoft:
     37
     38msvcm90.dll
     39msvcp90.dll
     40msvcr90.dll
     41gdiplus.dll
     42
     43
     44------------------------------------------------------------
    3545
    3646Components used by this software:
    37 
    3847
    3948* Python
  • branches/mbutscher/work/wikidpad_unicode.iss

    r188 r190  
    4242Source: winBinAdditions\msvcr90.dll; DestDir: {app}
    4343Source: winBinAdditions\msvcm90.dll; DestDir: {app}
     44Source: winBinAdditions\gdiplus.dll; DestDir: {app}
    4445[Dirs]
    4546Name: {app}\extensions; Components: Program_files
     
    5455SolidCompression=true
    5556AppName=WikidPad
    56 AppVerName=WikidPad 2.0beta01
     57AppVerName=WikidPad 2.0beta02
    5758DefaultDirName={pf}\WikidPad
    5859DefaultGroupName=WikidPad
    5960AppID={{22A83C29-58A8-4CAB-8EDC-918D74F8429E}
    60 VersionInfoVersion=2.0.101.4
    61 VersionInfoTextVersion=WikidPad 2.0beta01
     61VersionInfoVersion=2.0.102.0
     62VersionInfoTextVersion=WikidPad 2.0beta02
    6263LicenseFile=C:\DATEN\Projekte\Wikidpad\Current\license.txt
    6364AllowNoIcons=true
    6465ShowLanguageDialog=yes
    6566Compression=lzma/ultra
    66 OutputBaseFilename=WikidPad-2.0beta01
     67OutputBaseFilename=WikidPad-2.0beta02
    6768InternalCompressLevel=ultra
    6869AppCopyright=© 2005-2009 Jason Horman, Michael Butscher, Gerhard Reitmayr
  • branches/mbutscher/work/winBinAdditions/info.txt

    r188 r190  
    11In my (Michael) working set this directory contains the files
    22
    3 msvcm90.dll
    4 msvcp90.dll
    5 msvcr90.dll
     3  msvcm90.dll
     4  msvcp90.dll
     5  msvcr90.dll
    66
    77from vcredist.exe, downloadable from
     
    1010
    1111
     12It also contains
     13
     14  gdiplus.dll
     15
     16
    1217The files are needed to build the Windows binary of WikidPad.
    1318
Note: See TracChangeset for help on using the changeset viewer.