mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-05 10:49:24 +02:00
android options dialog (finished)
added empty string after the copyright notice XHTML reader (in progress) small improvements (see changes in TODO file) git-svn-id: https://only.mawhrin.net/repos/FBReaderJ/trunk@816 6a642e6f-84f6-412e-ac94-c4a38d5a04b0
This commit is contained in:
parent
8151bfa518
commit
08442edafb
335 changed files with 4442 additions and 4364 deletions
66
TODO
66
TODO
|
@ -36,14 +36,14 @@ DONE избавиться от многократных вычислений (ZL
|
||||||
DONE fb2 (сделать чтение описания книги)
|
DONE fb2 (сделать чтение описания книги)
|
||||||
DELAYED chm
|
DELAYED chm
|
||||||
2 html
|
2 html
|
||||||
1 oeb/epub
|
0 oeb/epub
|
||||||
DELAYED openreader
|
DELAYED openreader
|
||||||
3 ztxt
|
DELAYED ztxt
|
||||||
2 palmdoc
|
2 palmdoc
|
||||||
Марина 1 plucker
|
1 plucker
|
||||||
DELAYED rtf
|
DELAYED rtf
|
||||||
DELAYED tcr
|
DELAYED tcr
|
||||||
3 txt
|
DELAYED txt
|
||||||
|
|
||||||
файловая система:
|
файловая система:
|
||||||
архивы
|
архивы
|
||||||
|
@ -55,9 +55,9 @@ DELAYED bz2
|
||||||
диалоги (abstract):
|
диалоги (abstract):
|
||||||
DONE Selection
|
DONE Selection
|
||||||
DONE открытие книги
|
DONE открытие книги
|
||||||
Оля 0 Option
|
DONE Option
|
||||||
Оля 0 настройки
|
DONE настройки
|
||||||
Оля 0 book info
|
DONE book info
|
||||||
DONE MessageBox
|
DONE MessageBox
|
||||||
DONE WaitMessage
|
DONE WaitMessage
|
||||||
DONE загрузка книги
|
DONE загрузка книги
|
||||||
|
@ -67,28 +67,28 @@ DELAYED сохранение конфига
|
||||||
DONE диалог поиска
|
DONE диалог поиска
|
||||||
DONE combobox вместо поля для текста
|
DONE combobox вместо поля для текста
|
||||||
1 multisection search
|
1 multisection search
|
||||||
3 диалог перехода на страницу по номеру
|
DELAYED диалог перехода на страницу по номеру
|
||||||
|
|
||||||
диалоги (swing):
|
диалоги (swing):
|
||||||
DONE Selection
|
DONE Selection
|
||||||
Оля 0 Option
|
DELAYED Option
|
||||||
DONE MessageBox
|
DONE MessageBox
|
||||||
Оля 0 WaitMessage
|
DELAYED WaitMessage
|
||||||
DONE другие
|
DONE другие
|
||||||
|
|
||||||
диалоги (android):
|
диалоги (android):
|
||||||
DONE Selection
|
DONE Selection
|
||||||
НМ 0 Option
|
DONE Option
|
||||||
правильное расположение парных опций
|
DELAYED правильное расположение парных опций
|
||||||
кнопки наверху -- со стрелками влево
|
DELAYED кнопки наверху -- со стрелками влево
|
||||||
DONE show/hide option views
|
DONE show/hide option views
|
||||||
DONE boolean option view
|
DONE boolean option view
|
||||||
boolean3 option view
|
DONE boolean3 option view
|
||||||
DONE spin option view
|
DONE spin option view
|
||||||
DONE string option view
|
DONE string option view
|
||||||
combo option view
|
DONE combo option view
|
||||||
DONE color option view
|
DONE color option view
|
||||||
key option view
|
DONE key option view
|
||||||
DONE choice option view
|
DONE choice option view
|
||||||
DONE MessageBox
|
DONE MessageBox
|
||||||
DONE WaitMessage
|
DONE WaitMessage
|
||||||
|
@ -130,7 +130,7 @@ DONE убрать вывод отладочной информации в анд
|
||||||
DONE ActionCode.SHOW_BOOK_INFO
|
DONE ActionCode.SHOW_BOOK_INFO
|
||||||
1 ActionCode.SCROLL_TO_START_OF_TEXT
|
1 ActionCode.SCROLL_TO_START_OF_TEXT
|
||||||
1 ActionCode.SCROLL_TO_END_OF_TEXT
|
1 ActionCode.SCROLL_TO_END_OF_TEXT
|
||||||
1 ActionCode.OPEN_PREVIOUS_BOOK
|
DONE ActionCode.OPEN_PREVIOUS_BOOK
|
||||||
1 ActionCode.GOTO_NEXT_TOC_SECTION
|
1 ActionCode.GOTO_NEXT_TOC_SECTION
|
||||||
1 ActionCode.GOTO_PREVIOUS_TOC_SECTION
|
1 ActionCode.GOTO_PREVIOUS_TOC_SECTION
|
||||||
DELAYED ActionCode.COPY_SELECTED_TEXT_TO_CLIPBOARD
|
DELAYED ActionCode.COPY_SELECTED_TEXT_TO_CLIPBOARD
|
||||||
|
@ -141,26 +141,42 @@ DELAYED ActionCode.CLEAR_SELECTION
|
||||||
DONE поиск
|
DONE поиск
|
||||||
DONE поиск следующего
|
DONE поиск следующего
|
||||||
DONE поиск предыдущего
|
DONE поиск предыдущего
|
||||||
НМ 0 написать другой how-to-start (без иконок)
|
DONE текст в пустом CollectionView
|
||||||
Марина 0 автоопределение языка/кодировки
|
0 написать другой how-to-start (без иконок)
|
||||||
Марина 0 обработка разных кодировок (в хитрых форматах типа plucker)
|
0 написать README
|
||||||
|
1 автоопределение языка/кодировки
|
||||||
|
1 обработка разных кодировок (в хитрых форматах типа plucker)
|
||||||
DONE выход по escape из view, не из приложения
|
DONE выход по escape из view, не из приложения
|
||||||
получение списка шрифтов в ZLPaintContext
|
получение списка шрифтов в ZLPaintContext
|
||||||
Марина 0 swing
|
DELAYED swing
|
||||||
DONE android
|
DONE android
|
||||||
DELAYED полноэкранный режим
|
DELAYED полноэкранный режим
|
||||||
НМ 0 tap scrolling
|
DONE tap scrolling
|
||||||
|
DONE возможность отключения
|
||||||
DELAYED обработка архивов в параметре командной строки
|
DELAYED обработка архивов в параметре командной строки
|
||||||
DELAYED добавлять в библиотеку книгу из командной строки
|
DELAYED добавлять в библиотеку книгу из командной строки
|
||||||
DONE xml: сделать нормальную поддержку namespace'ов
|
DONE xml: сделать нормальную поддержку namespace'ов
|
||||||
DONE xml: сделать поддержку внешних DTD (xhtml entities)
|
DONE xml: сделать поддержку внешних DTD (xhtml entities)
|
||||||
DONE fb2descriptionReader: interrupt()
|
DONE fb2descriptionReader: interrupt()
|
||||||
НМ 0 author sort key -> to lowercase
|
DONE author sort key -> to lowercase
|
||||||
|
|
||||||
DONE при нажатии на кнопку выхода (в swing) и на Esc (android) закрывать текущий View, а не выходить из программы
|
DONE при нажатии на кнопку выхода (в swing) и на Esc (android) закрывать текущий View, а не выходить из программы
|
||||||
|
|
||||||
проблемы в android:
|
проблемы в android:
|
||||||
combo box: цвет шрифта при первом редактировании
|
нет возможности сделать fullscreen mode
|
||||||
combo box: высота пунктов в списке
|
combo box и кнопки: цвет шрифта совпадает с цветом фона, когда контрол выделен
|
||||||
время работы GZIPInputStream
|
время работы GZIPInputStream
|
||||||
иногда падение при загрузке большой по объему книги (креш виртуальной машины)
|
иногда падение при загрузке большой по объему книги (креш виртуальной машины)
|
||||||
|
|
||||||
|
не сделано в андроид:
|
||||||
|
не имплементированы key and scrolling delays
|
||||||
|
text selection
|
||||||
|
засечки для пунктов из оглавления на индикаторе
|
||||||
|
часы на индикаторе
|
||||||
|
количество прочитанных страниц на индикаторе
|
||||||
|
Chinese support
|
||||||
|
не все форматы
|
||||||
|
bzip2 support
|
||||||
|
config autosaving (every 30 seconds)
|
||||||
|
go to page dialog
|
||||||
|
book tags support
|
||||||
|
|
|
@ -7,59 +7,6 @@
|
||||||
- <node name="defaultEncoding" value="Кодировка по умолчанию"/>
|
- <node name="defaultEncoding" value="Кодировка по умолчанию"/>
|
||||||
- <node name="useWindows1252Hack" value="Использовать windows-1252 вместо iso-8859-1"/>
|
- <node name="useWindows1252Hack" value="Использовать windows-1252 вместо iso-8859-1"/>
|
||||||
</node>
|
</node>
|
||||||
- <node name="Scrolling" value="Перелистывание">
|
|
||||||
- <node name="optionsFor" value="Настройки перелистывания">
|
|
||||||
- <node name="large" value="на большое расстояние"/>
|
|
||||||
- <node name="small" value="на небольшое расстояние"/>
|
|
||||||
- <node name="mouse" value="колесом мышки"/>
|
|
||||||
- <node name="tap" value="нажатием на экран"/>
|
|
||||||
- </node>
|
|
||||||
- <node name="delay" value="Задержка, миллисекунды"/>
|
|
||||||
- <node name="mode" value="Перелистывание">
|
|
||||||
- <node name="noOverlapping" value="без перекрытия"/>
|
|
||||||
- <node name="keepLines" value="перекрывает несколько строк"/>
|
|
||||||
- <node name="scrollLines" value="сдвигает несколько строк"/>
|
|
||||||
- <node name="scrollPercentage" value="сдвигает часть текста"/>
|
|
||||||
- <node name="disable" value="выключено"/>
|
|
||||||
- </node>
|
|
||||||
- <node name="linesToKeep" value="Сколько строк перекрывать"/>
|
|
||||||
- <node name="linesToScroll" value="Сколько строк сдвигать"/>
|
|
||||||
- <node name="percentToScroll" value="Сколько процентов сдвигать"/>
|
|
||||||
- <node name="fingerOnly" value="Только при нажатии пальцем"/>
|
|
||||||
- </node>
|
|
||||||
- <node name="Format" value="Форматирование">
|
|
||||||
- <node name="optionsFor" value="Настройки для"/>
|
|
||||||
- <node name="lineSpacing" value="Интервал">
|
|
||||||
- <node name="unchanged" value="<не менять>"/>
|
|
||||||
- </node>
|
|
||||||
- <node name="firstLineIndent" value="Красная строка"/>
|
|
||||||
- <node name="alignment" value="Выравнивание">
|
|
||||||
- <node name="left" value="левое"/>
|
|
||||||
- <node name="right" value="правое"/>
|
|
||||||
- <node name="center" value="по центру"/>
|
|
||||||
- <node name="justify" value="по краям"/>
|
|
||||||
- <node name="unchanged" value="<не менять>"/>
|
|
||||||
- </node>
|
|
||||||
- <node name="spaceBefore" value="Пропуск перед"/>
|
|
||||||
- <node name="spaceAfter" value="Пропуск после"/>
|
|
||||||
- <node name="leftIndent" value="Отступ слева"/>
|
|
||||||
- <node name="rightIndent" value="Отступ справа"/>
|
|
||||||
- </node>
|
|
||||||
- <node name="Styles" value="Стили">
|
|
||||||
- <node name="optionsFor" value="Настройки для"/>
|
|
||||||
- <node name="fontFamily" value="Шрифт">
|
|
||||||
- <node name="unchanged" value="<не менять>"/>
|
|
||||||
- </node>
|
|
||||||
- <node name="fontSize" value="Размер"/>
|
|
||||||
- <node name="fontSizeDifference" value="Размер"/>
|
|
||||||
- <node name="bold" value="Жирный"/>
|
|
||||||
- <node name="italic" value="Курсив"/>
|
|
||||||
- <node name="allowHyphenations" value="Переносы"/>
|
|
||||||
- <node name="autoHyphenations" value="Переносы"/>
|
|
||||||
- </node>
|
|
||||||
<node name="Keys" value="Клавиши">
|
|
||||||
<node name="keyDelay" value="Задержка между нажатиями на клавиши"/>
|
|
||||||
</node>
|
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node name="InfoDialog">
|
<node name="InfoDialog">
|
||||||
|
|
|
@ -1,135 +1,19 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><author><last-name>FBReader</last-name></author> <book-title>About FBReader</book-title> <lang>en</lang></title-info></description>
|
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><author><last-name>FBReader</last-name></author> <book-title>About FBReaderJ</book-title> <lang>en</lang></title-info></description>
|
||||||
<body>
|
<body>
|
||||||
<title><p>About FBReader &FBReaderVersion;</p></title>
|
<title><p>About FBReaderJ &FBReaderVersion;</p></title>
|
||||||
<p>FBReader is an e-book reader for Linux/Windows XP PDA/UMPC/desktop computer. FBReader supports several e-book formats: <code>fb2</code>, <code>html</code>, <code>chm</code>, <code>rtf</code>, <code>plucker</code>, etc. Direct reading from <code>zip</code>, <code>tar</code>, <code>gzip</code> and <code>bzip2</code> archives is also supported.</p>
|
<p>FBReaderJ is an e-book reader for the <a l:href="http://www.android.com/">Android platform</a>. It is a clone of the <a l:href="http://www.fbreader.org/">FBReader book reader</a> written in Java instead of C++. FBReaderJ supports several e-book formats: <code>oeb</code>, <code>epub</code>, <code>fb2</code>. The list of supported formats will be extended in future releases. Direct reading from <code>zip</code>, <code>tar</code> and <code>gzip</code> archives is also supported.</p>
|
||||||
|
<p>You can configure FBReaderJ to read books with a pleasure. Colors, fonts, key bindings, etc. could be changed in <code>Preferences Dialog</code>.</p>
|
||||||
<p>FBReader is distributed under the terms of the <a l:href="http://www.gnu.org/licenses/gpl.html">GNU GPL</a>.</p>
|
<p>FBReader is distributed under the terms of the <a l:href="http://www.gnu.org/licenses/gpl.html">GNU GPL</a>.</p>
|
||||||
<empty-line/>
|
<empty-line/>
|
||||||
<subtitle><p>How To Start</p></subtitle>
|
<subtitle><p>How To Start</p></subtitle>
|
||||||
<p>FBReader looks for <code>fb2</code>, <code>oeb</code> and <code>OpenReader</code> books in directories listed in the <code>Book Path</code> option. First of all you need to set this path. Open the options dialog (just click on <image l:href="#settings.png" voffset="-6"/> in the toolbar) and change the value of <code>Book Path</code> option in the <code>Library</code> tab. This option contains the list of directories containing <code>*.fb2</code>, <code>*.oebzip</code>, <code>*.orb</code> or archive files. Directories in the list are separated by colons.</p>
|
<p>FBReaderJ looks for <code>epub</code>, <code>oeb</code> and <code>fb2</code> books in directories listed in the <code>Book Path</code> option. First of all you need to set this path. Open the <code>Preferences Dialog</code> (open menu and select <code>Preferences...</code> item, or just press <code>O</code> key), select the top item (<code>Library</code>) and change the value of <code>Book Path</code> option. This option contains the list of directories containing <code>*.epub</code>, <code>*.oebzip</code>, <code>*.fb2</code> or archive files. Directories in the list are separated by colons.</p>
|
||||||
<p>Open <code>library</code> (click on <image l:href="#books.png" voffset="-6"/>), select a book from the list and read it.</p>
|
<p>Open <code>library</code> (<code>menu->Library->Open</code> or <code>L</code> key), select a book from the list and read it.</p>
|
||||||
<p>To read a file in another format, you need to add it to the library. Start <code>add to library dialog</code> (<image l:href="#addbook.png"/>), select a file and edit the file information. Next time you can open this file using <code>library</code> (<image l:href="#books.png" voffset="-6"/>).</p>
|
<p>Alternatively, you can manually add a file to the library. Start <code>add to library dialog</code> (<code>menu->Library->Add Book...</code> or <code>A</code> key), select a file and edit the file information. Next time you can open this file using <code>library</code>.</p>
|
||||||
<empty-line/>
|
<empty-line/>
|
||||||
<subtitle><p>Related sites</p></subtitle>
|
<subtitle><p>Related sites</p></subtitle>
|
||||||
<p>More information about this program can be found at <a l:href="http://www.fbreader.org">FBReader homepage</a>.</p>
|
<p>More information about FBReader and FBReaderJ can be found at <a l:href="http://www.fbreader.org">FBReader site</a>.</p>
|
||||||
<p>If you want to be notified about new releases, please subscribe to <a l:href="http://freshmeat.net/projects/fbreader">FBReader project at freshmeat</a>.</p>
|
<p>If you want to be notified about new releases, please subscribe to <a l:href="http://freshmeat.net/projects/fbreaderj">FBReaderJ project at freshmeat</a>.</p>
|
||||||
<p>If you have any questions or suggestions, please use <a l:href="http://groups.google.com/group/fbreader">FBReader group at googlegroups</a>.</p>
|
<p>If you have any questions or suggestions, please use <a l:href="http://groups.google.com/group/fbreader">FBReader group at googlegroups</a>.</p>
|
||||||
</body>
|
</body>
|
||||||
<binary content-type="image/png" id="settings.png">
|
|
||||||
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
|
|
||||||
L6EAAAAASUVORK5CYII=
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="books.png">
|
|
||||||
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
|
|
||||||
7G/d4Snob6JgdQAAAABJRU5ErkJggg==
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="addbook.png">
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/
|
|
||||||
AP+gvaeTAAAACXBIWXMAAA+XAAAPlwEpEhtWAAAAB3RJTUUH1wIFEDYsKRN7
|
|
||||||
gwAABC5JREFUWMO1V11IW2cYfr6Tk5MTE40ajkm0xVbbatkaFUY7xoadbWGF
|
|
||||||
UZlMZOxijIErbHRXg93uYtdju2yvynq1tWyR4XBjjMFaxsQiapuqtNRqJelJ
|
|
||||||
NMbEnJyf791FjtmqVZMYHzgf5IHzvs/3fu/3nDcOlAkl3H/FE+ikjfjs0y38
|
|
||||||
K55A55GN+OxiOfGEMpN/Uu/MfC0LWmgLf9IfbBkF0FHuhsQykn/QVJP7NnxM
|
|
||||||
EVZW09eavW/05XUjZsJ1CErbYLC9R0nGbuFABCjh/nf9cu5auL1RkJxOBJv8
|
|
||||||
SrDJf0UzOOZSjfAcOQ1N11AJhBKSX2xw5W50HWtwSpKzyOsmYW7VB++R16Dl
|
|
||||||
LVQKYY/kvT4p90N3e71LdklF3rAIs0kP6tpeR24fyXcVoIT7T9c6tUh3e53H
|
|
||||||
7XYVeYsTHqgy6tp7kdU49gthh+SnPKI22t3m9Xlq3EWecyAad8J3/E1kqpD8
|
|
||||||
hQKUcP9xtyM/1n3U46/11hR5IiAaF+A7cQ7rOUK1IGwn+M/hVjnkq/M8x88s
|
|
||||||
6vCdOI90DlXFNgFNh9qCMa0BeYOKZx5d5nAFXobBZFQb23wgGApg8J2PcCsy
|
|
||||||
irS6BCbXo7nnFOJP5nbehZiFt/U7dLXe/7jmU+mCTY+NDOvXKzKiw4F6Ghq4
|
|
||||||
xJaTGcSTGcSSWex26kzQ0XEyi/Ndn58h0Jl0dhXf3/4mAeB6hdeQgTFGAmME
|
|
||||||
xggMxPYIJIkyLGcWCXoAr9tXeQ8QbZXy37o3mB2DV8+KSwIVl4JfkFWyarHi
|
|
||||||
jIyDgQBGYIKxmdpeLQAQL12V3FvfHBnWc/sS4A2NorXzT7js2Mxe6r0dILsK
|
|
||||||
gsAQaGy5TKDLm5UhEFLpJACd7SqgFI87Fx6C4lfAwQuhiYPAkTGTBVGSgYuv
|
|
||||||
DoGDg2DBIhMCEzF25yaA7H6PgLBuPMPTtTuwyLD3xsHJAocFTiYsMsFhwiID
|
|
||||||
nAoia0UFGk+X0AO0twCDNITkTlhkwIIJToUnqS8gZSbQLL9kizJh2aJedMMq
|
|
||||||
qgA3vfjt9u/Fa0cEiA5CsIWjtVMBAGhZA+N3x1cAxOwSEQFEfLuEsntgQz2L
|
|
||||||
DfVs8bfsciAT+0MNvP+Lsnn/LTLBLboxMqx/VoEPlP6plV0i1hYmli3X+ECh
|
|
||||||
E6yigAM3IpckYn1pMhFbmL9wtPfeQyJedEC+LwElFECSRORiM2vLj6JvqVOR
|
|
||||||
+wDItEwIphu11IJ8GRNy2T0gOUXoidns4vz02+pUZMKmtdXV1M3xvyeZ7U0M
|
|
||||||
wHTVrdgpOpBX57SF6N0BdSry1//sNQVgsFpD6Y5FsNYeG49m/nlPnYr8emAT
|
|
||||||
kWGY4Px5DYLAkNc2rIf3Jj5UpyI/VXMkc2wl8mKjvpLjfc0thwVdN5HVLSw9
|
|
||||||
ntPnp8e/eDb549Vqz4Rsh/8FfY1NoS/9gVBPKpmIqstPvqr2zjfxL9Ru5qeZ
|
|
||||||
IAUkAAAAAElFTkSuQmCC
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
</FictionBook>
|
</FictionBook>
|
||||||
|
|
|
@ -1,135 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><author><last-name>FBReader</last-name></author> <book-title>Tietoja FBReaderista</book-title> <lang>fi</lang></title-info></description>
|
|
||||||
<body>
|
|
||||||
<title><p>Tietoja FBReaderista &FBReaderVersion;</p></title>
|
|
||||||
<p>FBReader on sähköisten kirjojen (e-kirja) lukemiseen tarkoitettu ohjelmisto Linux, Windows XP, PDA ja UMPC -tietokoneille. FBReader tukee mm. seuraavia e-kirjojen tiedostomuotoja: <code>fb2</code>, <code>html</code>, <code>chm</code>, <code>rtf</code>, <code>plucker</code>. Kirjojen lukeminen onnistuu suoraan myös <code>zip</code>, <code>tar</code>, <code>gzip</code> ja <code>bzip2</code>-muotoihin pakatuista tiedostoista.</p>
|
|
||||||
<p>FBReader ohjelmistoa levitetään <a l:href="http://www.gnu.org/licenses/gpl.html">GNU GPL</a>-lisenssin mukaisilla ehdoilla.</p>
|
|
||||||
<empty-line/>
|
|
||||||
<subtitle><p>Aloitusohje</p></subtitle>
|
|
||||||
<p>FBReader etsii <code>fb2</code>, <code>oeb</code> ja <code>OpenReader</code>-muodossa olevia kirjoja asetusten <code>Kirjaston polku</code>-kohdassa olevista kansioista. Avaa asetukset valintaikkuna (työkalupalkin <image l:href="#settings.png" voffset="-6"/>-kuvakkeesta) ja muuta <code>Kirjasto</code>-välilehdellä olevaa <code>Kirjaston polku</code>-asetusta. Tämä asetus sisältää listauksen niistä kansioista, jotka sisältävät <code>*.fb2</code>, <code>*.oebzip</code>, <code>*.orb</code> tai kyseisiä tiedostomuotoja sisältäviä pakattuja tiedostoja. Määritettäessä useita kansioita, tulee ne erottaa toisistaan puolipilkulla.</p>
|
|
||||||
<p>Avaa <code>kirjasto</code> (työkalupalkin <image l:href="#books.png" voffset="-6"/>-kuvakkeesta), valitse kirja listasta ja voit aloittaa sen lukemisen.</p>
|
|
||||||
<p>Lukeaksesi jossakin muussa tiedostomuodossa olevan kirjan, sinuun täytyy ensin lisätä kyseinen kirja kirjastoosi. Avaa <code>lisää kirja kirjastoon</code>-valintaikkuna (työkalupalkin <image l:href="#addbook.png"/>-kuvakkeesta). Valitse kirjan tiedosto ja muokkaa kirjan tiedot haluamiksesi. Tämän jälkeen voit avata lisätyn kirjan työkalupalkin <code>kirjasto-kuvakkeen</code> (<image l:href="#books.png" voffset="-6"/>) listauksesta.</p>
|
|
||||||
<empty-line/>
|
|
||||||
<subtitle><p>Liittyvät sivustot</p></subtitle>
|
|
||||||
<p>Tästä ohjelmasta löytyy englanniksi lisätietoja <a l:href="http://www.fbreader.org">FBReaderin kotisivulta</a>.</p>
|
|
||||||
<p>Jos haluat tiedon uusien versioiden julkaisuista, tilaa <a l:href="http://freshmeat.net/projects/fbreader">FBReader-projekti freshmeat palvelussa</a>.</p>
|
|
||||||
<p>Jos sinulla on kysymyksiä tai ehdotuksia, käytä <a l:href="http://groups.google.com/group/fbreader">FBReader-ryhmää googlegroups palvelussa</a>.</p>
|
|
||||||
</body>
|
|
||||||
<binary content-type="image/png" id="settings.png">
|
|
||||||
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
|
|
||||||
L6EAAAAASUVORK5CYII=
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="books.png">
|
|
||||||
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
|
|
||||||
7G/d4Snob6JgdQAAAABJRU5ErkJggg==
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="addbook.png">
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/
|
|
||||||
AP+gvaeTAAAACXBIWXMAAA+XAAAPlwEpEhtWAAAAB3RJTUUH1wIFEDYsKRN7
|
|
||||||
gwAABC5JREFUWMO1V11IW2cYfr6Tk5MTE40ajkm0xVbbatkaFUY7xoadbWGF
|
|
||||||
UZlMZOxijIErbHRXg93uYtdju2yvynq1tWyR4XBjjMFaxsQiapuqtNRqJelJ
|
|
||||||
NMbEnJyf791FjtmqVZMYHzgf5IHzvs/3fu/3nDcOlAkl3H/FE+ikjfjs0y38
|
|
||||||
K55A55GN+OxiOfGEMpN/Uu/MfC0LWmgLf9IfbBkF0FHuhsQykn/QVJP7NnxM
|
|
||||||
EVZW09eavW/05XUjZsJ1CErbYLC9R0nGbuFABCjh/nf9cu5auL1RkJxOBJv8
|
|
||||||
SrDJf0UzOOZSjfAcOQ1N11AJhBKSX2xw5W50HWtwSpKzyOsmYW7VB++R16Dl
|
|
||||||
LVQKYY/kvT4p90N3e71LdklF3rAIs0kP6tpeR24fyXcVoIT7T9c6tUh3e53H
|
|
||||||
7XYVeYsTHqgy6tp7kdU49gthh+SnPKI22t3m9Xlq3EWecyAad8J3/E1kqpD8
|
|
||||||
hQKUcP9xtyM/1n3U46/11hR5IiAaF+A7cQ7rOUK1IGwn+M/hVjnkq/M8x88s
|
|
||||||
6vCdOI90DlXFNgFNh9qCMa0BeYOKZx5d5nAFXobBZFQb23wgGApg8J2PcCsy
|
|
||||||
irS6BCbXo7nnFOJP5nbehZiFt/U7dLXe/7jmU+mCTY+NDOvXKzKiw4F6Ghq4
|
|
||||||
xJaTGcSTGcSSWex26kzQ0XEyi/Ndn58h0Jl0dhXf3/4mAeB6hdeQgTFGAmME
|
|
||||||
xggMxPYIJIkyLGcWCXoAr9tXeQ8QbZXy37o3mB2DV8+KSwIVl4JfkFWyarHi
|
|
||||||
jIyDgQBGYIKxmdpeLQAQL12V3FvfHBnWc/sS4A2NorXzT7js2Mxe6r0dILsK
|
|
||||||
gsAQaGy5TKDLm5UhEFLpJACd7SqgFI87Fx6C4lfAwQuhiYPAkTGTBVGSgYuv
|
|
||||||
DoGDg2DBIhMCEzF25yaA7H6PgLBuPMPTtTuwyLD3xsHJAocFTiYsMsFhwiID
|
|
||||||
nAoia0UFGk+X0AO0twCDNITkTlhkwIIJToUnqS8gZSbQLL9kizJh2aJedMMq
|
|
||||||
qgA3vfjt9u/Fa0cEiA5CsIWjtVMBAGhZA+N3x1cAxOwSEQFEfLuEsntgQz2L
|
|
||||||
DfVs8bfsciAT+0MNvP+Lsnn/LTLBLboxMqx/VoEPlP6plV0i1hYmli3X+ECh
|
|
||||||
E6yigAM3IpckYn1pMhFbmL9wtPfeQyJedEC+LwElFECSRORiM2vLj6JvqVOR
|
|
||||||
+wDItEwIphu11IJ8GRNy2T0gOUXoidns4vz02+pUZMKmtdXV1M3xvyeZ7U0M
|
|
||||||
wHTVrdgpOpBX57SF6N0BdSry1//sNQVgsFpD6Y5FsNYeG49m/nlPnYr8emAT
|
|
||||||
kWGY4Px5DYLAkNc2rIf3Jj5UpyI/VXMkc2wl8mKjvpLjfc0thwVdN5HVLSw9
|
|
||||||
ntPnp8e/eDb549Vqz4Rsh/8FfY1NoS/9gVBPKpmIqstPvqr2zjfxL9Ru5qeZ
|
|
||||||
IAUkAAAAAElFTkSuQmCC
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
</FictionBook>
|
|
|
@ -1,135 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><author><last-name>FBReader</last-name></author> <book-title>À propos de FBReader</book-title> <lang>fr</lang></title-info></description>
|
|
||||||
<body>
|
|
||||||
<title><p>À propos de FBReader &FBReaderVersion;</p></title>
|
|
||||||
<p>FBReader est un lecteur de livres électroniques (e-books) pour PDA, ordinateur de bureau et UMPC sous Linux ou Windows XP. FBReader supporte plusieurs formats de livres électroniques : <code>fb2</code>, <code>html</code>, <code>chm</code>, <code>rtf</code>, <code>plucker</code>, etc. La lecture directe à partir d'archives <code>zip</code>, <code>tar</code>, <code>gzip</code> et <code>bzip2</code> est également supportée.</p>
|
|
||||||
<p>FBReader est distribué selon les termes de la licence <a l:href="http://www.gnu.org/licenses/gpl.html">GNU GPL</a>.</p>
|
|
||||||
<empty-line/>
|
|
||||||
<subtitle><p>Débuts avec FBReader</p></subtitle>
|
|
||||||
<p>FBReader cherche des livres aux formats <code>fb2</code>, <code>oeb</code> et <code>OpenReader</code> dans les répertoires indiqués dans l'option <code>Chemin des livres</code>. La première chose à faire est de remplir ce chemin. Ouvrez la boîte de dialogue d'options (il suffit de cliquer sur <image l:href="#settings.png" voffset="-6"/> dans la barre d'outils) et changez la valeur de l'option <code>Chemin des livres</code> dans l'onglet <code>Bibliothèque</code>. Cette option contient la liste des répertoires contenant des fichiers <code>*.fb2</code>, <code>*.oebzip</code>, <code>*.orb</code> ou des fichiers archives. Les répertoires de cette liste sont séparés par des caractères deux-points.</p>
|
|
||||||
<p>Ouvrez la <code>bibliothèque</code> (cliques sur <image l:href="#books.png" voffset="-6"/>) et sélectionnez un livre de la liste afin de le lire.</p>
|
|
||||||
<p>Pour lire un fichier dans un autre format, vous devez l'ajouter à la bibliothèque. Ouvrez le dialogue <code>Ajouter un livre</code> (<image l:href="#addbook.png"/>), sélectionnez un fichier et éditez les informations correspondantes. Dans l'avenir, vous pourrez ouvrir ce livre directement depuis la <code>bibliothèque</code> (<image l:href="#books.png" voffset="-6"/>).</p>
|
|
||||||
<empty-line/>
|
|
||||||
<subtitle><p>Informations complémentaires</p></subtitle>
|
|
||||||
<p>Davantage d'informations sur ce programme se trouvent sur la <a l:href="http://www.fbreader.org">page Web de FBReader</a>.</p>
|
|
||||||
<p>Si vous souhaitez être prévenu des nouvelles versions, veuillez vous inscrire au <a l:href="http://freshmeat.net/projects/fbreader">projet FBReader de freshmeat</a>.</p>
|
|
||||||
<p>Si vous avez des questions ou des suggestions, veuillez utiliser le <a l:href="http://groups.google.com/group/fbreader">groupe FBReader de googlegroups</a>.</p>
|
|
||||||
</body>
|
|
||||||
<binary content-type="image/png" id="settings.png">
|
|
||||||
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
|
|
||||||
L6EAAAAASUVORK5CYII=
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="books.png">
|
|
||||||
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
|
|
||||||
7G/d4Snob6JgdQAAAABJRU5ErkJggg==
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="addbook.png">
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/
|
|
||||||
AP+gvaeTAAAACXBIWXMAAA+XAAAPlwEpEhtWAAAAB3RJTUUH1wIFEDYsKRN7
|
|
||||||
gwAABC5JREFUWMO1V11IW2cYfr6Tk5MTE40ajkm0xVbbatkaFUY7xoadbWGF
|
|
||||||
UZlMZOxijIErbHRXg93uYtdju2yvynq1tWyR4XBjjMFaxsQiapuqtNRqJelJ
|
|
||||||
NMbEnJyf791FjtmqVZMYHzgf5IHzvs/3fu/3nDcOlAkl3H/FE+ikjfjs0y38
|
|
||||||
K55A55GN+OxiOfGEMpN/Uu/MfC0LWmgLf9IfbBkF0FHuhsQykn/QVJP7NnxM
|
|
||||||
EVZW09eavW/05XUjZsJ1CErbYLC9R0nGbuFABCjh/nf9cu5auL1RkJxOBJv8
|
|
||||||
SrDJf0UzOOZSjfAcOQ1N11AJhBKSX2xw5W50HWtwSpKzyOsmYW7VB++R16Dl
|
|
||||||
LVQKYY/kvT4p90N3e71LdklF3rAIs0kP6tpeR24fyXcVoIT7T9c6tUh3e53H
|
|
||||||
7XYVeYsTHqgy6tp7kdU49gthh+SnPKI22t3m9Xlq3EWecyAad8J3/E1kqpD8
|
|
||||||
hQKUcP9xtyM/1n3U46/11hR5IiAaF+A7cQ7rOUK1IGwn+M/hVjnkq/M8x88s
|
|
||||||
6vCdOI90DlXFNgFNh9qCMa0BeYOKZx5d5nAFXobBZFQb23wgGApg8J2PcCsy
|
|
||||||
irS6BCbXo7nnFOJP5nbehZiFt/U7dLXe/7jmU+mCTY+NDOvXKzKiw4F6Ghq4
|
|
||||||
xJaTGcSTGcSSWex26kzQ0XEyi/Ndn58h0Jl0dhXf3/4mAeB6hdeQgTFGAmME
|
|
||||||
xggMxPYIJIkyLGcWCXoAr9tXeQ8QbZXy37o3mB2DV8+KSwIVl4JfkFWyarHi
|
|
||||||
jIyDgQBGYIKxmdpeLQAQL12V3FvfHBnWc/sS4A2NorXzT7js2Mxe6r0dILsK
|
|
||||||
gsAQaGy5TKDLm5UhEFLpJACd7SqgFI87Fx6C4lfAwQuhiYPAkTGTBVGSgYuv
|
|
||||||
DoGDg2DBIhMCEzF25yaA7H6PgLBuPMPTtTuwyLD3xsHJAocFTiYsMsFhwiID
|
|
||||||
nAoia0UFGk+X0AO0twCDNITkTlhkwIIJToUnqS8gZSbQLL9kizJh2aJedMMq
|
|
||||||
qgA3vfjt9u/Fa0cEiA5CsIWjtVMBAGhZA+N3x1cAxOwSEQFEfLuEsntgQz2L
|
|
||||||
DfVs8bfsciAT+0MNvP+Lsnn/LTLBLboxMqx/VoEPlP6plV0i1hYmli3X+ECh
|
|
||||||
E6yigAM3IpckYn1pMhFbmL9wtPfeQyJedEC+LwElFECSRORiM2vLj6JvqVOR
|
|
||||||
+wDItEwIphu11IJ8GRNy2T0gOUXoidns4vz02+pUZMKmtdXV1M3xvyeZ7U0M
|
|
||||||
wHTVrdgpOpBX57SF6N0BdSry1//sNQVgsFpD6Y5FsNYeG49m/nlPnYr8emAT
|
|
||||||
kWGY4Px5DYLAkNc2rIf3Jj5UpyI/VXMkc2wl8mKjvpLjfc0thwVdN5HVLSw9
|
|
||||||
ntPnp8e/eDb549Vqz4Rsh/8FfY1NoS/9gVBPKpmIqstPvqr2zjfxL9Ru5qeZ
|
|
||||||
IAUkAAAAAElFTkSuQmCC
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
</FictionBook>
|
|
|
@ -1,135 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><author><last-name>FBReader</last-name></author> <book-title>Mengenai FBReader</book-title> <lang>id</lang></title-info></description>
|
|
||||||
<body>
|
|
||||||
<title><p>Mengenai FBReader &FBReaderVersion;</p></title>
|
|
||||||
<p>FBReader adalah aplikasi pembaca buku elektronik (e-book) untuk komputer PDA/UMPC/desktop dengan sistem operasi Linux/Windows XP. FBReader mendukung beberapa format buku elektronik: <code>fb2</code>, <code>html</code>, <code>chm</code>, <code>rtf</code>, <code>plucker</code>, dan lain-lain. Juga mendukung pembacaan langsung dari berkas terkompresi dalam format <code>zip</code>, <code>tar</code>, <code>gzip</code> dan <code>bzip2</code>.</p>
|
|
||||||
<p>FBReader didistribusikan di bawah lisensi <a l:href="http://www.gnu.org/licenses/gpl.html">GNU GPL</a>.</p>
|
|
||||||
<empty-line/>
|
|
||||||
<subtitle><p>Bagaimana Memulainya</p></subtitle>
|
|
||||||
<p>FBReader mencari buku format <code>fb2</code>, <code>oeb</code> dan <code>OpenReader</code> dalam direktori yang tercantum dalam pengaturan <code>Lokasi Buku</code>. Anda perlu mengatur lokasi ini terlebih dahulu. Buka dialog pengaturan (klik pada ikon <image l:href="#settings.png" voffset="-6"/> di toolbar) dan ubah pengaturan <code>Lokasi Buku</code> pada halaman <code>Pustaka</code>. Pengaturan ini berisi daftar direktori yang terdapat berkas <code>*.fb2</code>, <code>*.oebzip</code>, <code>*.orb</code> atau berkas terkompresi. Daftar direktori ini dipisahkan oleh titik dua.</p>
|
|
||||||
<p>Buka <code>pustaka</code> (klik pada ikon <image l:href="#books.png" voffset="-6"/>), pilih sebuah buku dari daftar dan Anda bisa mulai membaca.</p>
|
|
||||||
<p>Untuk membaca berkas dalam format lain, Anda perlu menambahkannya ke pustaka. Mulailah <code>dialog tambah ke pustaka</code> (<image l:href="#addbook.png"/>), pilih sebuah berkas dan ubah informasi berkasnya jika perlu. Di lain waktu Anda dapat membuka berkas ini menggunakan <code>pustaka</code> (<image l:href="#books.png" voffset="-6"/>).</p>
|
|
||||||
<empty-line/>
|
|
||||||
<subtitle><p>Alamat yang berkaitan</p></subtitle>
|
|
||||||
<p>Informasi tambahan mengenai aplikasi ini dapat ditemukan di <a l:href="http://www.fbreader.org">situs FBReader</a>.</p>
|
|
||||||
<p>Jika ingin menerima informasi mengenai rilis baru aplikasi ini, silakan daftarkan diri ke <a l:href="http://freshmeat.net/projects/fbreader">proyek FBReader di freshmeat</a>.</p>
|
|
||||||
<p>Jika Anda memiliki pertanyaan atau masukan, silakan gunakan <a l:href="http://groups.google.com/group/fbreader">grup FBReader di googlegroups</a>.</p>
|
|
||||||
</body>
|
|
||||||
<binary content-type="image/png" id="settings.png">
|
|
||||||
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
|
|
||||||
L6EAAAAASUVORK5CYII=
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="books.png">
|
|
||||||
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
|
|
||||||
7G/d4Snob6JgdQAAAABJRU5ErkJggg==
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="addbook.png">
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/
|
|
||||||
AP+gvaeTAAAACXBIWXMAAA+XAAAPlwEpEhtWAAAAB3RJTUUH1wIFEDYsKRN7
|
|
||||||
gwAABC5JREFUWMO1V11IW2cYfr6Tk5MTE40ajkm0xVbbatkaFUY7xoadbWGF
|
|
||||||
UZlMZOxijIErbHRXg93uYtdju2yvynq1tWyR4XBjjMFaxsQiapuqtNRqJelJ
|
|
||||||
NMbEnJyf791FjtmqVZMYHzgf5IHzvs/3fu/3nDcOlAkl3H/FE+ikjfjs0y38
|
|
||||||
K55A55GN+OxiOfGEMpN/Uu/MfC0LWmgLf9IfbBkF0FHuhsQykn/QVJP7NnxM
|
|
||||||
EVZW09eavW/05XUjZsJ1CErbYLC9R0nGbuFABCjh/nf9cu5auL1RkJxOBJv8
|
|
||||||
SrDJf0UzOOZSjfAcOQ1N11AJhBKSX2xw5W50HWtwSpKzyOsmYW7VB++R16Dl
|
|
||||||
LVQKYY/kvT4p90N3e71LdklF3rAIs0kP6tpeR24fyXcVoIT7T9c6tUh3e53H
|
|
||||||
7XYVeYsTHqgy6tp7kdU49gthh+SnPKI22t3m9Xlq3EWecyAad8J3/E1kqpD8
|
|
||||||
hQKUcP9xtyM/1n3U46/11hR5IiAaF+A7cQ7rOUK1IGwn+M/hVjnkq/M8x88s
|
|
||||||
6vCdOI90DlXFNgFNh9qCMa0BeYOKZx5d5nAFXobBZFQb23wgGApg8J2PcCsy
|
|
||||||
irS6BCbXo7nnFOJP5nbehZiFt/U7dLXe/7jmU+mCTY+NDOvXKzKiw4F6Ghq4
|
|
||||||
xJaTGcSTGcSSWex26kzQ0XEyi/Ndn58h0Jl0dhXf3/4mAeB6hdeQgTFGAmME
|
|
||||||
xggMxPYIJIkyLGcWCXoAr9tXeQ8QbZXy37o3mB2DV8+KSwIVl4JfkFWyarHi
|
|
||||||
jIyDgQBGYIKxmdpeLQAQL12V3FvfHBnWc/sS4A2NorXzT7js2Mxe6r0dILsK
|
|
||||||
gsAQaGy5TKDLm5UhEFLpJACd7SqgFI87Fx6C4lfAwQuhiYPAkTGTBVGSgYuv
|
|
||||||
DoGDg2DBIhMCEzF25yaA7H6PgLBuPMPTtTuwyLD3xsHJAocFTiYsMsFhwiID
|
|
||||||
nAoia0UFGk+X0AO0twCDNITkTlhkwIIJToUnqS8gZSbQLL9kizJh2aJedMMq
|
|
||||||
qgA3vfjt9u/Fa0cEiA5CsIWjtVMBAGhZA+N3x1cAxOwSEQFEfLuEsntgQz2L
|
|
||||||
DfVs8bfsciAT+0MNvP+Lsnn/LTLBLboxMqx/VoEPlP6plV0i1hYmli3X+ECh
|
|
||||||
E6yigAM3IpckYn1pMhFbmL9wtPfeQyJedEC+LwElFECSRORiM2vLj6JvqVOR
|
|
||||||
+wDItEwIphu11IJ8GRNy2T0gOUXoidns4vz02+pUZMKmtdXV1M3xvyeZ7U0M
|
|
||||||
wHTVrdgpOpBX57SF6N0BdSry1//sNQVgsFpD6Y5FsNYeG49m/nlPnYr8emAT
|
|
||||||
kWGY4Px5DYLAkNc2rIf3Jj5UpyI/VXMkc2wl8mKjvpLjfc0thwVdN5HVLSw9
|
|
||||||
ntPnp8e/eDb549Vqz4Rsh/8FfY1NoS/9gVBPKpmIqstPvqr2zjfxL9Ru5qeZ
|
|
||||||
IAUkAAAAAElFTkSuQmCC
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
</FictionBook>
|
|
|
@ -1,135 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><author><last-name>FBReader</last-name></author> <book-title>Informazioni su FBReader</book-title> <lang>it</lang></title-info></description>
|
|
||||||
<body>
|
|
||||||
<title><p>Informazioni su FBReader &FBReaderVersion;</p></title>
|
|
||||||
<p>FBReader è un lettore di e-book per PDA/UMPC/computer Linux/Windows. FBReader supporta diversi formati di e-book: <code>fb2</code>, <code>html</code>, <code>chm</code>, <code>rtf</code>, <code>plucker</code>, etc. E' anche supportata la lettura diretta da archivi <code>zip</code>, <code>tar</code>, <code>gzip</code> e <code>bzip2</code>.</p>
|
|
||||||
<p>FBReader è distribuito nei termini is della licenza <a l:href="http://www.gnu.org/licenses/gpl.html">GNU GPL</a>.</p>
|
|
||||||
<empty-line/>
|
|
||||||
<subtitle><p>Come Iniziare</p></subtitle>
|
|
||||||
<p>FBReader cerca i libri <code>fb2</code>, <code>oeb</code> e <code>OpenReader</code> nelle cartelle elencate nell'opzione <code>Percorso Libri</code>. Prima di tutto occorre impostare questo percorso. Apri la finestra Opzioni (basta fare clic su <image l:href="#settings.png" voffset="-6"/> nella barra degli strumenti) and cambiare il valore dell'opzione <code>Percorso Libri</code> nella scheda <code>Biblioteca</code>. Questa opzione contiene l'elenco delle cartelle contenenti file <code>*.fb2</code>, <code>*.oebzip</code>, <code>*.orb</code> o archivi. Le cartelle dell'elenco sono separate da due punti.</p>
|
|
||||||
<p>Apri <code>biblioteca</code> (fare clic su <image l:href="#books.png" voffset="-6"/>), seleziona un libro dall'elenco e leggi.</p>
|
|
||||||
<p>Per leggere un file in un altro formato, devi aggiungerlo alla biblioteca. Apri la <code>finestra aggiungi alla biblioteca</code> (<image l:href="#addbook.png"/>), seleziona un file e modifica le informazioni sul file. La prossima volta puoi aprire questo file usando la <code>biblioteca</code> (<image l:href="#books.png" voffset="-6"/>).</p>
|
|
||||||
<empty-line/>
|
|
||||||
<subtitle><p>Siti correlati</p></subtitle>
|
|
||||||
<p>Ulteriori informazioni su questo programma possono essere trovate alla <a l:href="http://www.fbreader.org">homepage di FBReader</a>.</p>
|
|
||||||
<p>Se vuoi essere informato sull'uscita di nuove versioni, per favore iscriviti al <a l:href="http://freshmeat.net/projects/fbreader">progetto FBReader su freshmeat</a>.</p>
|
|
||||||
<p>Se hai domande o suggerimenti, per favore usa il <a l:href="http://groups.google.com/group/fbreader">gruppo di FBReader su google gruppi</a>.</p>
|
|
||||||
</body>
|
|
||||||
<binary content-type="image/png" id="settings.png">
|
|
||||||
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
|
|
||||||
L6EAAAAASUVORK5CYII=
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="books.png">
|
|
||||||
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
|
|
||||||
7G/d4Snob6JgdQAAAABJRU5ErkJggg==
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="addbook.png">
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/
|
|
||||||
AP+gvaeTAAAACXBIWXMAAA+XAAAPlwEpEhtWAAAAB3RJTUUH1wIFEDYsKRN7
|
|
||||||
gwAABC5JREFUWMO1V11IW2cYfr6Tk5MTE40ajkm0xVbbatkaFUY7xoadbWGF
|
|
||||||
UZlMZOxijIErbHRXg93uYtdju2yvynq1tWyR4XBjjMFaxsQiapuqtNRqJelJ
|
|
||||||
NMbEnJyf791FjtmqVZMYHzgf5IHzvs/3fu/3nDcOlAkl3H/FE+ikjfjs0y38
|
|
||||||
K55A55GN+OxiOfGEMpN/Uu/MfC0LWmgLf9IfbBkF0FHuhsQykn/QVJP7NnxM
|
|
||||||
EVZW09eavW/05XUjZsJ1CErbYLC9R0nGbuFABCjh/nf9cu5auL1RkJxOBJv8
|
|
||||||
SrDJf0UzOOZSjfAcOQ1N11AJhBKSX2xw5W50HWtwSpKzyOsmYW7VB++R16Dl
|
|
||||||
LVQKYY/kvT4p90N3e71LdklF3rAIs0kP6tpeR24fyXcVoIT7T9c6tUh3e53H
|
|
||||||
7XYVeYsTHqgy6tp7kdU49gthh+SnPKI22t3m9Xlq3EWecyAad8J3/E1kqpD8
|
|
||||||
hQKUcP9xtyM/1n3U46/11hR5IiAaF+A7cQ7rOUK1IGwn+M/hVjnkq/M8x88s
|
|
||||||
6vCdOI90DlXFNgFNh9qCMa0BeYOKZx5d5nAFXobBZFQb23wgGApg8J2PcCsy
|
|
||||||
irS6BCbXo7nnFOJP5nbehZiFt/U7dLXe/7jmU+mCTY+NDOvXKzKiw4F6Ghq4
|
|
||||||
xJaTGcSTGcSSWex26kzQ0XEyi/Ndn58h0Jl0dhXf3/4mAeB6hdeQgTFGAmME
|
|
||||||
xggMxPYIJIkyLGcWCXoAr9tXeQ8QbZXy37o3mB2DV8+KSwIVl4JfkFWyarHi
|
|
||||||
jIyDgQBGYIKxmdpeLQAQL12V3FvfHBnWc/sS4A2NorXzT7js2Mxe6r0dILsK
|
|
||||||
gsAQaGy5TKDLm5UhEFLpJACd7SqgFI87Fx6C4lfAwQuhiYPAkTGTBVGSgYuv
|
|
||||||
DoGDg2DBIhMCEzF25yaA7H6PgLBuPMPTtTuwyLD3xsHJAocFTiYsMsFhwiID
|
|
||||||
nAoia0UFGk+X0AO0twCDNITkTlhkwIIJToUnqS8gZSbQLL9kizJh2aJedMMq
|
|
||||||
qgA3vfjt9u/Fa0cEiA5CsIWjtVMBAGhZA+N3x1cAxOwSEQFEfLuEsntgQz2L
|
|
||||||
DfVs8bfsciAT+0MNvP+Lsnn/LTLBLboxMqx/VoEPlP6plV0i1hYmli3X+ECh
|
|
||||||
E6yigAM3IpckYn1pMhFbmL9wtPfeQyJedEC+LwElFECSRORiM2vLj6JvqVOR
|
|
||||||
+wDItEwIphu11IJ8GRNy2T0gOUXoidns4vz02+pUZMKmtdXV1M3xvyeZ7U0M
|
|
||||||
wHTVrdgpOpBX57SF6N0BdSry1//sNQVgsFpD6Y5FsNYeG49m/nlPnYr8emAT
|
|
||||||
kWGY4Px5DYLAkNc2rIf3Jj5UpyI/VXMkc2wl8mKjvpLjfc0thwVdN5HVLSw9
|
|
||||||
ntPnp8e/eDb549Vqz4Rsh/8FfY1NoS/9gVBPKpmIqstPvqr2zjfxL9Ru5qeZ
|
|
||||||
IAUkAAAAAElFTkSuQmCC
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
</FictionBook>
|
|
|
@ -1,135 +1,19 @@
|
||||||
<?xml version="1.0" encoding="koi8-r"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><author><last-name>FBReader</last-name></author> <book-title>ï ÐÒÏÇÒÁÍÍÅ FBReader</book-title> <lang>ru</lang></title-info></description>
|
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><author><last-name>FBReader</last-name></author> <book-title>О программе FBReaderJ</book-title> <lang>ru</lang></title-info></description>
|
||||||
<body>
|
<body>
|
||||||
<title><p>ï ÐÒÏÇÒÁÍÍÅ FBReader &FBReaderVersion;</p></title>
|
<title><p>О программе FBReaderJ &FBReaderVersion;</p></title>
|
||||||
<p>FBReader – ÐÒÏÇÒÁÍÍÁ ÄÌÑ ÞÔÅÎÉÑ ÜÌÅËÔÒÏÎÎÙÈ ËÎÉÇ, ÒÁÂÏÔÁÀÝÁÑ ÐÏÄ ÏÐÅÒÁÃÉÏÎÎÙÍÉ ÓÉÓÔÅÍÁÍÉ Linux, FreeBSD, Windows XP. FBReader ÐÏÚ×ÏÌÑÅÔ ÞÉÔÁÔØ ËÎÉÇÉ ×Ï ÍÎÏÇÉÈ ÆÏÒÍÁÔÁÈ: <code>fb2</code>, <code>html</code>, <code>chm</code>, <code>rtf</code>, <code>plucker</code>, É Ô. Ä. æÁÊÌÙ ÍÏÖÎÏ ÞÉÔÁÔØ ÎÁÐÒÑÍÕÀ ÉÚ ÁÒÈÉ×Ï× <code>zip</code>, <code>tar</code>, <code>gzip</code> É <code>bzip2</code>.</p>
|
<p>FBReaderJ – программа для чтения электронных книг, работающая на платформе <a l:href="http://www.android.com/">Android</a>. Она представляет из себя клон программы <a l:href="http://www.fbreader.org/">FBReader</a>, написанный на Java вместо C++. FBReaderJ позволяет читать книги в разных форматах: <code>oeb</code>, <code>epub</code>, <code>fb2</code>. Список поддерживаемых форматов увеличится в новых версиях. Файлы можно читать напрямую из архивов <code>zip</code>, <code>tar</code> и <code>gzip</code>.</p>
|
||||||
<p>FBReader ÒÁÓÐÒÏÓÔÒÁÎÑÅÔÓÑ Ó×ÏÂÏÄÎÏ, ×ËÌÀÞÁÑ ÉÓÈÏÄÎÙÅ ÔÅËÓÔÙ, ÐÏÄ ÌÉÃÅÎÚÉÅÊ <a l:href="http://www.gnu.org/licenses/gpl.html">GNU GPL</a>.</p>
|
<p>Вы можете настроить FBReaderJ, чтобы читать так, как удобнее именно вам. Цвета, шрифты, настройки клавиш и многое другое можно поменять в <code>диалоге настроек</code>.</p>
|
||||||
|
<p>FBReaderJ распространяется свободно, включая исходные тексты, под лицензией <a l:href="http://www.gnu.org/licenses/gpl.html">GNU GPL</a>.</p>
|
||||||
<empty-line/>
|
<empty-line/>
|
||||||
<subtitle><p>ó ÞÅÇÏ ÎÁÞÁÔØ</p></subtitle>
|
<subtitle><p>С чего начать</p></subtitle>
|
||||||
<p>FBReader Á×ÔÏÍÁÔÉÞÅÓËÉ ÓÏÂÉÒÁÅÔ × ÂÉÂÌÉÏÔÅËÕ ÆÁÊÌÙ ÆÏÒÍÁÔÏ× <code>fb2</code>, <code>oeb</code> É <code>OpenReader</code>, ÌÅÖÁÝÉÅ × ËÁÔÁÌÏÇÁÈ, ÚÁÄÁÎÎÙÈ ÐÁÒÁÍÅÔÒÏÍ <code>«ëÁÔÁÌÏÇÉ Ó ËÎÉÇÁÍÉ»</code>. ðÏÜÔÏÍÕ ÐÒÅÖÄÅ ×ÓÅÇÏ ÎÕÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÜÔÏÔ ÐÁÒÁÍÅÔÒ. ïÔËÒÏÊÔÅ ÄÉÁÌÏÇ ÎÁÓÔÒÏÅË (ÎÁÖÍÉÔÅ ÎÁ ËÎÏÐËÕ <image l:href="#settings.png" voffset="-6"/>) É ÏÔÒÅÄÁËÔÒÕÊÔÅ <code>«ËÁÔÁÌÏÇÉ Ó ËÎÉÇÁÍÉ»</code> × ÒÁÚÄÅÌÅ <code>«âÉÂÌÉÏÔÅËÁ»</code>. ëÁÔÁÌÏÇÉ ÐÅÒÅÞÉÓÌÑÀÔÓÑ ÞÅÒÅÚ Ä×ÏÅÔÏÞÉÅ, × ÜÔÉÈ ËÁÔÁÌÏÇÁÈ ÄÏÌÖÎÙ ÌÅÖÁÔØ ÆÁÊÌÙ Ó ÒÁÓÛÉÒÅÎÉÑÍÉ <code>fb2</code>, <code>oebzip</code> ÉÌÉ <code>orb</code>, ÉÌÉ ÓÏÄÅÒÖÁÝÉÅ ÉÈ ÁÒÈÉ×Ù.</p>
|
<p>FBReader автоматически собирает в библиотеку файлы форматов <code>epub</code>, <code>oeb</code> и <code>fb2</code>, лежащие в каталогах, заданных параметром <code>«Каталоги с книгами»</code>. Поэтому прежде всего нужно определить этот параметр. Откройте диалог настроек (выберите в меню пункт «Настройки...» или просто нажмите букву «O») и отредактруйте <code>«каталоги с книгами»</code> в разделе <code>«Библиотека»</code>. Каталоги перечисляются через двоеточие, в этих каталогах должны лежать файлы с расширениями <code>epub</code>, <code>oebzip</code> или <code>fb2</code>, или содержащие их архивы.</p>
|
||||||
<p>ôÅÐÅÒØ ÏÔËÒÏÊÔÅ <code>ÂÉÂÌÉÏÔÅËÕ</code> (ÎÁÖÍÉÔÅ ÎÁ <image l:href="#books.png" voffset="-6"/>), ×ÙÂÅÒÉÔÅ ËÎÉÇÕ, É ÐÒÉÓÔÕÐÁÊÔÅ Ë ÞÔÅÎÉÀ.</p>
|
<p>Теперь откройте <code>библиотеку</code> («меню->Библиотека->Открыть» или буква «L»), выберите книгу, и приступайте к чтению.</p>
|
||||||
<p>þÔÏÂÙ ÞÉÔÁÔØ ËÎÉÇÕ × ÄÒÕÇÏÍ ÆÏÒÍÁÔÅ, ÅÅ ÎÕÖÎÏ ×ÒÕÞÎÕÀ ÄÏÂÁ×ÉÔØ × ÂÉÂÌÉÏÔÅËÕ. úÁÐÕÓÔÉÔÅ <code>ÄÉÁÌÏÇ ÄÏÂÁ×ÌÅÎÉÑ ËÎÉÇÉ</code> (<image l:href="#addbook.png"/>), ×ÙÂÅÒÉÔÅ ÆÁÊÌ É ÏÔÒÅÄÁËÔÉÒÕÊÔÅ ÉÎÆÏÒÍÁÃÉÀ Ï ËÎÉÇÅ. ÷ ÓÌÅÄÕÀÝÉÊ ÒÁÚ ×Ù ÓÍÏÖÅÔÅ ÏÔËÒÙÔØ ÜÔÕ ËÎÉÇÕ ÕÖÅ Ó ÐÏÍÏÝØÀ <code>ÂÉÂÌÉÏÔÅËÉ</code> (<image l:href="#books.png" voffset="-6"/>).</p>
|
<p>Есть и другой вариант, книгу можно вручную добавить в библиотеку. Запустите <code>диалог добавления книги</code> («меню->Библиотека->Добавить...» или буква «A»), выберите файл и отредактируйте информацию о книге. В следующий раз вы сможете открыть эту книгу уже с помощью <code>библиотеки</code>.</p>
|
||||||
<empty-line/>
|
<empty-line/>
|
||||||
<subtitle><p>óÓÙÌËÉ</p></subtitle>
|
<subtitle><p>Ссылки</p></subtitle>
|
||||||
<p>éÎÆÏÒÍÁÃÉÀ Ï FBReader'Å É Ó×ÅÖÕÀ ×ÅÒÓÉÀ ÐÒÏÇÒÁÍÍÙ ÍÏÖÎÏ ÎÁÊÔÉ ÎÁ <a l:href="http://www.fbreader.org">ÓÁÊÔÅ FBReader'Á</a>.</p>
|
<p>Информацию о программах FBReader и FBReaderJ и их свежие версии можно найти на <a l:href="http://www.fbreader.org">сайте FBReader'а</a>.</p>
|
||||||
<p>åÓÌÉ ×Ù ÈÏÔÉÔÅ ÐÏÌÕÞÁÔØ ÓÏÏÂÝÅÎÉÑ Ï ÎÏ×ÙÈ ×ÅÒÓÉÑÈ, ÐÏÄÐÉÛÉÔÅÓØ ÎÁ <a l:href="http://freshmeat.net/projects/fbreader">ÐÒÏÅËÔ FBReader ÎÁ freshmeat</a>.</p>
|
<p>Если вы хотите получать сообщения о новых версиях, подпишитесь на <a l:href="http://freshmeat.net/projects/fbreaderj">проект FBReaderJ на freshmeat</a>.</p>
|
||||||
<p>þÔÏÂÙ Ó×ÑÚÁÔØÓÑ Ó Á×ÔÏÒÁÍÉ ÐÒÏÇÒÁÍÍÙ, ×ÏÓÐÏÌØÚÕÊÔÅÓØ <a l:href="http://groups.google.com/group/fbreader">ÇÒÕÐÐÏÊ FBReader ÎÁ googlegroups</a>.</p>
|
<p>Чтобы связаться с авторами программы, воспользуйтесь <a l:href="http://groups.google.com/group/fbreader">группой FBReader на googlegroups</a>.</p>
|
||||||
</body>
|
</body>
|
||||||
<binary content-type="image/png" id="settings.png">
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgI
|
|
||||||
fAhkiAAACAhJREFUWIXtlmtQVOcZx//nuvddgWXBZUEuahWQmzqI8UKsouJE
|
|
||||||
Y2qt7Uynrdrxi1OVYEF0UqcpsGJ1tNZkSIyZZDptwrRaDUaIhqGdxppO0iji
|
|
||||||
hQUVuS3swsIuLHvupx/CZlYFsZMP/dJn5pn3fc95n+f/e573nTMH+L/9j42Y
|
|
||||||
bkNNTdVymqXfB0gdCNyXBeHDYFB46/Dhw9zzilQff6dIA/WLkpKdvv8K4MiR
|
|
||||||
IyaVkAJpqbORl7sQ/kAArbdbOO+g180FhYKDBw8OTCd+5MS7+xVVqaEoqlsQ
|
|
||||||
pOWHSnc+inxPPiu4rKxslCapld09j8b9gYDiSHBg7Zr12qzM7CSDSXf+WbF1
|
|
||||||
dXXU0VPvnWV1ml8tLihAYkqKnWGof1eeeDvruQEAoLS0/O+cKK365MplUlVV
|
|
||||||
XpIkZC3Ipgx6w4Lqo68XTlr1kXdMDwfGm0xm89acvEUGVqNBgsNB2R2OaFIl
|
|
||||||
b9bW1jJTAlRVVcU8+axif8XnAPyiKPYCAM/zSE1NM7C0Zsuk1Drqq/j4+Pys
|
|
||||||
3BwDRVMAAFmR4fV6ggRB/HjXrl3ipABOZ+VaklYHT5068f3I59XHqnMBWGia
|
|
||||||
DtI0DZIkYTQaCZqmUybTJ1TEzJmdohEEAaLAQxJ5tN9t4wRebCjfu/0PkXsf
|
|
||||||
A2A0zNmc7FxIivTH2to3XgaAmprKHEJSLs1Jm/uawWBI0Wg00Gq14DhOBeB+
|
|
||||||
UtzprLXIijxDkkQIfAiyKGDQ41F9Q94RgpN/9uR++jEAhhlKdCTZk2el0H+9
|
|
||||||
eO68s6YSCoDMBQtOrVhWWKGqqlaSJNA0jd7eHkkUxccKOFxbqyc4tnn+vDRR
|
|
||||||
lSXG7/MhFBpHX5+HIBRlU1nZztGnuhW5OH6ipjJ9fmZZbs5CiiQfvx6yLCMY
|
|
||||||
DEJRFDAMA17g0dBQzwmSuG1/SfmFw7W1em2IacrKmJNntpiYllbXeCAwdhcq
|
|
||||||
PoWKa+Ul2y9MelyRi8rKyjijWe/a8spWM8uykGUZJEmCIAhIkgSKouDz+dDa
|
|
||||||
2gqbzQZbnA0NDfUcL8obFSb2YF7mvIKoKCN741b7+PCw/82yvdtLJxONNCpy
|
|
||||||
0dTUFCxat8btcrWtcyQ4aKvVCoZhwDAMZFmGPzACRVYgiiII4mv29IwM2vVw
|
|
||||||
4EdZ6d9xxNmi2dY7HSHv4Mjb5fu2l0wn/lQHwnb0qHMTzdJnjAajLsZqJYPB
|
|
||||||
oOLxDNCiKGo2FL+kCrxIAICqqmh1dcMaEw37zFi03Ong+93eM+X7dux+HvEp
|
|
||||||
AYCvv2QPHtxLVykijlSIMYbR35Tl0ByKYT9bW7TeIPAiceteJywWCxId8bjT
|
|
||||||
9hDuni6BV4ZmH3r1UPe3BpjMktZXpceasSMjgdq9YuE8NsZiwKwkO9o6HoEh
|
|
||||||
CSTZZyjXrn82ND7GZ1RUVHifJ+e0n+KwpW6o3q5lmX+9sm7FnpAmlfrd+Q4Y
|
|
||||||
LdHouN8NKDLS5yYhISGRzM7KjdYZNV86nU7L8+Slpt8CpGyo2siy7Nkfbi7U
|
|
||||||
Fy5MJrV6Azk8yuODxpvITTUjP2cuaJoGz/NwOBJJWZIN/tHhzUvyC95tbm4W
|
|
||||||
n5V7WoDk4qp8mqIubi5epg/yKv5xy41O9zDsNgsGPH5ZHnfLS3LnUAABiqLA
|
|
||||||
cRySk1NIf8AfJYr82vz8gvebm5vlqfI/8whmra9eRZHUlfWr8/UKQcHrG4P7
|
|
||||||
fgu6736O8WAQoyE+6A2K+y43fswpqgJFUUCSJAKBAF4oWE7H2mw5MdYZ9XV1
|
|
||||||
dVMWOiVAWnHVLoalPtpcvMyk1emIPo8fw333EAqOIMGRiI5Or8Dzwo3zpw+e
|
|
||||||
VkTp5YbGS7wsSwAAgiAQDAZRuGIVazZbVg54+/6kquqkF/4pgLkv/daassFZ
|
|
||||||
rzPoj/1gU6FeISmIAo+xARf8wz7Y7QkYGiWF7r6BdoTUjQBQWlreqKjKlsuN
|
|
||||||
lwRe4EEQBGRZBs/zWP3dIlar0W48/cbJN6cFSC6u+oUE8aHdbluzbfOLBgUE
|
|
||||||
HDFa9Dy4De/gIOLj4zE0RgmdPQMucHjhwdVyfzj21b2/rIeCbZ9cucxzHAea
|
|
||||||
pr+BWPXiGg1FMz89+ftjB54E+KYtKcXOFayG+Shzfpo5KyMFM/QUZkZpce7j
|
|
||||||
ZnR29SAu1gqBskht7b0u8FgaKR5px08e3UaoxHurV69lWYZFIBDA4OAgHA4H
|
|
||||||
Gq9c5kReth84cGD4qQ6oUFfF2WJMq5fOQ0aSGWkzTTjXeB2dj3pgNppA6qy4
|
|
||||||
19E3KhBS0VTiAFCyZ/8HJE3tvHq1UQhxIfj9fng8HgQCAURFRckkqSya4giU
|
|
||||||
Ti1Dhkw6Gl39AZy58AU6H3aAZjSITUhFa1t3iB/zbu2pP+TDE/8REd2kAWj2
|
|
||||||
7N73Z57jS5qbPxWioqOQnp4Og9GAkZFhMhQS2yKDKAAsAL0qjHk5rePnoDTa
|
|
||||||
UU5C14M2CLyApJS56Hb7BZ+3/2JPk/MvALQANBNx5IQoC0A/4QYAhqtXm1x5
|
|
||||||
eTked797+YCnX3C57knDwyOHXv/1b65P6BIAFAKAZSKp1rboJytNM+fXLl2c
|
|
||||||
qeUD/QCjh0IZ8OVXt8f7/vnW93hf5yAALsLlCZciimEBMOG51WolsrOzo9vb
|
|
||||||
23u7uroCAAQA4sTIEwBMYQAAGtviHUUGW9pRs9kgkxRDDfv85FjPjdcGWz78
|
|
||||||
WzhowrmIuRwhTE/AhKtUASgRoOEcQrgDRASxDgBjTMyKNiYsWQiS1Ad7W26M
|
|
||||||
PrrmiahWiOiAOJE88h6QE2PY1QiI8PyxgMkuU3iMfK9ikgTf1v4DrpeFJVeZ
|
|
||||||
L6EAAAAASUVORK5CYII=
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="books.png">
|
|
||||||
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
|
|
||||||
7G/d4Snob6JgdQAAAABJRU5ErkJggg==
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="addbook.png">
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/
|
|
||||||
AP+gvaeTAAAACXBIWXMAAA+XAAAPlwEpEhtWAAAAB3RJTUUH1wIFEDYsKRN7
|
|
||||||
gwAABC5JREFUWMO1V11IW2cYfr6Tk5MTE40ajkm0xVbbatkaFUY7xoadbWGF
|
|
||||||
UZlMZOxijIErbHRXg93uYtdju2yvynq1tWyR4XBjjMFaxsQiapuqtNRqJelJ
|
|
||||||
NMbEnJyf791FjtmqVZMYHzgf5IHzvs/3fu/3nDcOlAkl3H/FE+ikjfjs0y38
|
|
||||||
K55A55GN+OxiOfGEMpN/Uu/MfC0LWmgLf9IfbBkF0FHuhsQykn/QVJP7NnxM
|
|
||||||
EVZW09eavW/05XUjZsJ1CErbYLC9R0nGbuFABCjh/nf9cu5auL1RkJxOBJv8
|
|
||||||
SrDJf0UzOOZSjfAcOQ1N11AJhBKSX2xw5W50HWtwSpKzyOsmYW7VB++R16Dl
|
|
||||||
LVQKYY/kvT4p90N3e71LdklF3rAIs0kP6tpeR24fyXcVoIT7T9c6tUh3e53H
|
|
||||||
7XYVeYsTHqgy6tp7kdU49gthh+SnPKI22t3m9Xlq3EWecyAad8J3/E1kqpD8
|
|
||||||
hQKUcP9xtyM/1n3U46/11hR5IiAaF+A7cQ7rOUK1IGwn+M/hVjnkq/M8x88s
|
|
||||||
6vCdOI90DlXFNgFNh9qCMa0BeYOKZx5d5nAFXobBZFQb23wgGApg8J2PcCsy
|
|
||||||
irS6BCbXo7nnFOJP5nbehZiFt/U7dLXe/7jmU+mCTY+NDOvXKzKiw4F6Ghq4
|
|
||||||
xJaTGcSTGcSSWex26kzQ0XEyi/Ndn58h0Jl0dhXf3/4mAeB6hdeQgTFGAmME
|
|
||||||
xggMxPYIJIkyLGcWCXoAr9tXeQ8QbZXy37o3mB2DV8+KSwIVl4JfkFWyarHi
|
|
||||||
jIyDgQBGYIKxmdpeLQAQL12V3FvfHBnWc/sS4A2NorXzT7js2Mxe6r0dILsK
|
|
||||||
gsAQaGy5TKDLm5UhEFLpJACd7SqgFI87Fx6C4lfAwQuhiYPAkTGTBVGSgYuv
|
|
||||||
DoGDg2DBIhMCEzF25yaA7H6PgLBuPMPTtTuwyLD3xsHJAocFTiYsMsFhwiID
|
|
||||||
nAoia0UFGk+X0AO0twCDNITkTlhkwIIJToUnqS8gZSbQLL9kizJh2aJedMMq
|
|
||||||
qgA3vfjt9u/Fa0cEiA5CsIWjtVMBAGhZA+N3x1cAxOwSEQFEfLuEsntgQz2L
|
|
||||||
DfVs8bfsciAT+0MNvP+Lsnn/LTLBLboxMqx/VoEPlP6plV0i1hYmli3X+ECh
|
|
||||||
E6yigAM3IpckYn1pMhFbmL9wtPfeQyJedEC+LwElFECSRORiM2vLj6JvqVOR
|
|
||||||
+wDItEwIphu11IJ8GRNy2T0gOUXoidns4vz02+pUZMKmtdXV1M3xvyeZ7U0M
|
|
||||||
wHTVrdgpOpBX57SF6N0BdSry1//sNQVgsFpD6Y5FsNYeG49m/nlPnYr8emAT
|
|
||||||
kWGY4Px5DYLAkNc2rIf3Jj5UpyI/VXMkc2wl8mKjvpLjfc0thwVdN5HVLSw9
|
|
||||||
ntPnp8e/eDb549Vqz4Rsh/8FfY1NoS/9gVBPKpmIqstPvqr2zjfxL9Ru5qeZ
|
|
||||||
IAUkAAAAAElFTkSuQmCC
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
</FictionBook>
|
</FictionBook>
|
||||||
|
|
|
@ -1,135 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><author><last-name>FBReader</last-name></author> <book-title>Om FBReader</book-title> <lang>sv</lang></title-info></description>
|
|
||||||
<body>
|
|
||||||
<title><p>Om FBReader &FBReaderVersion;</p></title>
|
|
||||||
<p>FBReader är en e-boksläsare för Linux/Windows XP PDA/UMPC/skrivbordsdator. FBReader har stöd för flera e-boksformat: <code>fb2</code>, <code>html</code>, <code>chm</code>, <code>rtf</code>, <code>plucker</code>, etc. Direktläsning från arkivformaten <code>zip</code>, <code>tar</code>, <code>gzip</code> och <code>bzip2</code> stöds också.</p>
|
|
||||||
<p>FBReader distribueras under villkoren för <a l:href="http://www.gnu.org/licenses/gpl.html">GNU GPL</a>.</p>
|
|
||||||
<empty-line/>
|
|
||||||
<subtitle><p>Hur man kommer igång</p></subtitle>
|
|
||||||
<p>FBReader letar efter böcker i formaten <code>fb2</code>, <code>oeb</code> och <code>OpenReader</code> i kataloger som listas i alternativet <code>Boksökväg</code>. Först måste du ange denna sökväg. Öppna alternativdialogrutan (klicka helt enkelt på <image l:href="#settings.png" voffset="-6"/> i verktygsraden) och ändra värdet för alternativet <code>Boksökväg</code> under fliken <code>Bibliotek</code>. Detta alternativ innehåller listan över kataloger som innehåller <code>*.fb2</code>, <code>*.oebzip</code>, <code>*.orb</code> eller arkivfiler. Kataloger i listan separeras med kolon.</p>
|
|
||||||
<p>Öppna <code>biblioteket</code> (klicka på <image l:href="#books.png" voffset="-6"/>), välj en bok från listan och läs den.</p>
|
|
||||||
<p>För att läsa en fil i ett annat format måste du lägga till den till biblioteket. Starta <code>Lägg till i biblioteket</code> (<image l:href="#addbook.png"/>), välj en fil och redigera filinformationen. Nästa gång så kan du öppna denna fil med <code>biblioteket</code> (<image l:href="#books.png" voffset="-6"/>).</p>
|
|
||||||
<empty-line/>
|
|
||||||
<subtitle><p>Relaterade webbplatser</p></subtitle>
|
|
||||||
<p>Mer information om det här programmet kan hittas på <a l:href="http://www.fbreader.org">FBReaders webbplats</a>.</p>
|
|
||||||
<p>Om du vill bli informerad om nya utgåvor kan du prenumerera på <a l:href="http://freshmeat.net/projects/fbreader">FBReaders projektsida på Freshmeat</a>.</p>
|
|
||||||
<p>Om du har några frågor eller förslag kan du använda <a l:href="http://groups.google.com/group/fbreader">FBReaders grupp hos Google Groups</a>.</p>
|
|
||||||
</body>
|
|
||||||
<binary content-type="image/png" id="settings.png">
|
|
||||||
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
|
|
||||||
L6EAAAAASUVORK5CYII=
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="books.png">
|
|
||||||
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
|
|
||||||
7G/d4Snob6JgdQAAAABJRU5ErkJggg==
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="addbook.png">
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/
|
|
||||||
AP+gvaeTAAAACXBIWXMAAA+XAAAPlwEpEhtWAAAAB3RJTUUH1wIFEDYsKRN7
|
|
||||||
gwAABC5JREFUWMO1V11IW2cYfr6Tk5MTE40ajkm0xVbbatkaFUY7xoadbWGF
|
|
||||||
UZlMZOxijIErbHRXg93uYtdju2yvynq1tWyR4XBjjMFaxsQiapuqtNRqJelJ
|
|
||||||
NMbEnJyf791FjtmqVZMYHzgf5IHzvs/3fu/3nDcOlAkl3H/FE+ikjfjs0y38
|
|
||||||
K55A55GN+OxiOfGEMpN/Uu/MfC0LWmgLf9IfbBkF0FHuhsQykn/QVJP7NnxM
|
|
||||||
EVZW09eavW/05XUjZsJ1CErbYLC9R0nGbuFABCjh/nf9cu5auL1RkJxOBJv8
|
|
||||||
SrDJf0UzOOZSjfAcOQ1N11AJhBKSX2xw5W50HWtwSpKzyOsmYW7VB++R16Dl
|
|
||||||
LVQKYY/kvT4p90N3e71LdklF3rAIs0kP6tpeR24fyXcVoIT7T9c6tUh3e53H
|
|
||||||
7XYVeYsTHqgy6tp7kdU49gthh+SnPKI22t3m9Xlq3EWecyAad8J3/E1kqpD8
|
|
||||||
hQKUcP9xtyM/1n3U46/11hR5IiAaF+A7cQ7rOUK1IGwn+M/hVjnkq/M8x88s
|
|
||||||
6vCdOI90DlXFNgFNh9qCMa0BeYOKZx5d5nAFXobBZFQb23wgGApg8J2PcCsy
|
|
||||||
irS6BCbXo7nnFOJP5nbehZiFt/U7dLXe/7jmU+mCTY+NDOvXKzKiw4F6Ghq4
|
|
||||||
xJaTGcSTGcSSWex26kzQ0XEyi/Ndn58h0Jl0dhXf3/4mAeB6hdeQgTFGAmME
|
|
||||||
xggMxPYIJIkyLGcWCXoAr9tXeQ8QbZXy37o3mB2DV8+KSwIVl4JfkFWyarHi
|
|
||||||
jIyDgQBGYIKxmdpeLQAQL12V3FvfHBnWc/sS4A2NorXzT7js2Mxe6r0dILsK
|
|
||||||
gsAQaGy5TKDLm5UhEFLpJACd7SqgFI87Fx6C4lfAwQuhiYPAkTGTBVGSgYuv
|
|
||||||
DoGDg2DBIhMCEzF25yaA7H6PgLBuPMPTtTuwyLD3xsHJAocFTiYsMsFhwiID
|
|
||||||
nAoia0UFGk+X0AO0twCDNITkTlhkwIIJToUnqS8gZSbQLL9kizJh2aJedMMq
|
|
||||||
qgA3vfjt9u/Fa0cEiA5CsIWjtVMBAGhZA+N3x1cAxOwSEQFEfLuEsntgQz2L
|
|
||||||
DfVs8bfsciAT+0MNvP+Lsnn/LTLBLboxMqx/VoEPlP6plV0i1hYmli3X+ECh
|
|
||||||
E6yigAM3IpckYn1pMhFbmL9wtPfeQyJedEC+LwElFECSRORiM2vLj6JvqVOR
|
|
||||||
+wDItEwIphu11IJ8GRNy2T0gOUXoidns4vz02+pUZMKmtdXV1M3xvyeZ7U0M
|
|
||||||
wHTVrdgpOpBX57SF6N0BdSry1//sNQVgsFpD6Y5FsNYeG49m/nlPnYr8emAT
|
|
||||||
kWGY4Px5DYLAkNc2rIf3Jj5UpyI/VXMkc2wl8mKjvpLjfc0thwVdN5HVLSw9
|
|
||||||
ntPnp8e/eDb549Vqz4Rsh/8FfY1NoS/9gVBPKpmIqstPvqr2zjfxL9Ru5qeZ
|
|
||||||
IAUkAAAAAElFTkSuQmCC
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
</FictionBook>
|
|
|
@ -1,135 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><author><last-name>FBReader</last-name></author> <book-title>Про програму FBReader</book-title> <lang>uk</lang></title-info></description>
|
|
||||||
<body>
|
|
||||||
<title><p>Про програму FBReader &FBReaderVersion;</p></title>
|
|
||||||
<p>FBReader – програма для читання електронних книг, яка працює під операційними системами Linux, FreeBSD, Windows XP. FBReader дозволяє читати книги у багатьох форматах: <code>fb2</code>, <code>html</code>, <code>chm</code>, <code>rtf</code>, <code>plucker</code>, і т. д. Файли можна читати напряму з архівів <code>zip</code>, <code>tar</code>, <code>gzip</code> та <code>bzip2</code>.</p>
|
|
||||||
<p>FBReader поширюється вільно, разом з джерельними текстами, під лицензією <a l:href="http://www.gnu.org/licenses/gpl.html">GNU GPL</a>.</p>
|
|
||||||
<empty-line/>
|
|
||||||
<subtitle><p>З чого почати</p></subtitle>
|
|
||||||
<p>FBReader автоматично збирає у бібліотеку файли форматів <code>fb2</code>, <code>oeb</code> та <code>OpenReader</code>, що лежать у каталогах, які задані параметром <code>“Каталоги з книгами”</code>. Тому передусім треба визначити цей параметр. Відкрийте діалог налаштувань (натисніть на кнопку <image l:href="#settings.png" voffset="-6"/>) і відредагуйте <code>“каталоги з книгами”</code> у розділі <code>“Бібліотека”</code>. Каталоги перелічуються через двокрапку i повинні містити файли з розширеннями <code>fb2</code>, <code>oebzip</code> або <code>orb</code>, чи архіви, що їх містять.</p>
|
|
||||||
<p>Тепер відкрийте <code>бібліотеку</code> (натисніть на <image l:href="#books.png" voffset="-6"/>), виберіть книгу і починайте читати.</p>
|
|
||||||
<p>Щоб читати книгу у іншому форматі, її потрібно вручну додати у бібліотеку. Запустіть <code>діалог додавання книги</code> (<image l:href="#addbook.png"/>), виберіть файл і відредагуйте інформацію про книгу. Наступного разу ви зможете відкрити цю книгу вже за допомогою <code>бібліотеки</code> (<image l:href="#books.png" voffset="-6"/>).</p>
|
|
||||||
<empty-line/>
|
|
||||||
<subtitle><p>Посилання</p></subtitle>
|
|
||||||
<p>Інформацію про FBReader та нову версію програми можна знайти на <a l:href="http://www.fbreader.org">сайтi FBReader'у</a>.</p>
|
|
||||||
<p>Якщо ви бажаєте отримувати повідомлення про нові версії, підпишіться на <a l:href="http://freshmeat.net/projects/fbreader">проект FBReader на freshmeat</a>.</p>
|
|
||||||
<p>Для зв'язку з авторами програми скористуйтесь <a l:href="http://groups.google.com/group/fbreader">групою FBReader на googlegroups</a>.</p>
|
|
||||||
</body>
|
|
||||||
<binary content-type="image/png" id="settings.png">
|
|
||||||
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
|
|
||||||
L6EAAAAASUVORK5CYII=
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="books.png">
|
|
||||||
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
|
|
||||||
7G/d4Snob6JgdQAAAABJRU5ErkJggg==
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
<binary content-type="image/png" id="addbook.png">
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/
|
|
||||||
AP+gvaeTAAAACXBIWXMAAA+XAAAPlwEpEhtWAAAAB3RJTUUH1wIFEDYsKRN7
|
|
||||||
gwAABC5JREFUWMO1V11IW2cYfr6Tk5MTE40ajkm0xVbbatkaFUY7xoadbWGF
|
|
||||||
UZlMZOxijIErbHRXg93uYtdju2yvynq1tWyR4XBjjMFaxsQiapuqtNRqJelJ
|
|
||||||
NMbEnJyf791FjtmqVZMYHzgf5IHzvs/3fu/3nDcOlAkl3H/FE+ikjfjs0y38
|
|
||||||
K55A55GN+OxiOfGEMpN/Uu/MfC0LWmgLf9IfbBkF0FHuhsQykn/QVJP7NnxM
|
|
||||||
EVZW09eavW/05XUjZsJ1CErbYLC9R0nGbuFABCjh/nf9cu5auL1RkJxOBJv8
|
|
||||||
SrDJf0UzOOZSjfAcOQ1N11AJhBKSX2xw5W50HWtwSpKzyOsmYW7VB++R16Dl
|
|
||||||
LVQKYY/kvT4p90N3e71LdklF3rAIs0kP6tpeR24fyXcVoIT7T9c6tUh3e53H
|
|
||||||
7XYVeYsTHqgy6tp7kdU49gthh+SnPKI22t3m9Xlq3EWecyAad8J3/E1kqpD8
|
|
||||||
hQKUcP9xtyM/1n3U46/11hR5IiAaF+A7cQ7rOUK1IGwn+M/hVjnkq/M8x88s
|
|
||||||
6vCdOI90DlXFNgFNh9qCMa0BeYOKZx5d5nAFXobBZFQb23wgGApg8J2PcCsy
|
|
||||||
irS6BCbXo7nnFOJP5nbehZiFt/U7dLXe/7jmU+mCTY+NDOvXKzKiw4F6Ghq4
|
|
||||||
xJaTGcSTGcSSWex26kzQ0XEyi/Ndn58h0Jl0dhXf3/4mAeB6hdeQgTFGAmME
|
|
||||||
xggMxPYIJIkyLGcWCXoAr9tXeQ8QbZXy37o3mB2DV8+KSwIVl4JfkFWyarHi
|
|
||||||
jIyDgQBGYIKxmdpeLQAQL12V3FvfHBnWc/sS4A2NorXzT7js2Mxe6r0dILsK
|
|
||||||
gsAQaGy5TKDLm5UhEFLpJACd7SqgFI87Fx6C4lfAwQuhiYPAkTGTBVGSgYuv
|
|
||||||
DoGDg2DBIhMCEzF25yaA7H6PgLBuPMPTtTuwyLD3xsHJAocFTiYsMsFhwiID
|
|
||||||
nAoia0UFGk+X0AO0twCDNITkTlhkwIIJToUnqS8gZSbQLL9kizJh2aJedMMq
|
|
||||||
qgA3vfjt9u/Fa0cEiA5CsIWjtVMBAGhZA+N3x1cAxOwSEQFEfLuEsntgQz2L
|
|
||||||
DfVs8bfsciAT+0MNvP+Lsnn/LTLBLboxMqx/VoEPlP6plV0i1hYmli3X+ECh
|
|
||||||
E6yigAM3IpckYn1pMhFbmL9wtPfeQyJedEC+LwElFECSRORiM2vLj6JvqVOR
|
|
||||||
+wDItEwIphu11IJ8GRNy2T0gOUXoidns4vz02+pUZMKmtdXV1M3xvyeZ7U0M
|
|
||||||
wHTVrdgpOpBX57SF6N0BdSry1//sNQVgsFpD6Y5FsNYeG49m/nlPnYr8emAT
|
|
||||||
kWGY4Px5DYLAkNc2rIf3Jj5UpyI/VXMkc2wl8mKjvpLjfc0thwVdN5HVLSw9
|
|
||||||
ntPnp8e/eDb549Vqz4Rsh/8FfY1NoS/9gVBPKpmIqstPvqr2zjfxL9Ru5qeZ
|
|
||||||
IAUkAAAAAElFTkSuQmCC
|
|
||||||
====
|
|
||||||
</binary>
|
|
||||||
</FictionBook>
|
|
|
@ -372,6 +372,6 @@
|
||||||
<node name="caption" value="Library"/>
|
<node name="caption" value="Library"/>
|
||||||
<node name="allBooks" value="All Books"/>
|
<node name="allBooks" value="All Books"/>
|
||||||
<node name="booksWithoutTags" value="Books with no Tags"/>
|
<node name="booksWithoutTags" value="Books with no Tags"/>
|
||||||
<node name="noBooks" value="FBReader found no books in the configured locations. Please specify the path to your books in the Preferences Dialog (“Library” tab, “Book Path” entry). Alternatively, you can add books to your library using “Add Book” button."/>
|
<node name="noBooks" value="FBReader found no books in the configured locations. Please specify the path to your books in the Preferences Dialog (“Library” tab, “Book Path” entry). Alternatively, you can add books to your library using “Add Book” menu item."/>
|
||||||
</node>
|
</node>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -25,4 +25,5 @@
|
||||||
<binding key="<Ctrl>+<DownArrow>" action="nextTOCSection"/>
|
<binding key="<Ctrl>+<DownArrow>" action="nextTOCSection"/>
|
||||||
<binding key="<Ctrl>+<UpArrow>" action="previousTOCSection"/>
|
<binding key="<Ctrl>+<UpArrow>" action="previousTOCSection"/>
|
||||||
<binding key="<Ctrl>+<C>" action="copyToClipboard"/>
|
<binding key="<Ctrl>+<C>" action="copyToClipboard"/>
|
||||||
|
<binding key="<1>" action="previousBook"/>
|
||||||
</keymap>
|
</keymap>
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.sqliteconfig;
|
package org.geometerplus.zlibrary.core.sqliteconfig;
|
||||||
|
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.sqliteconfig;
|
package org.geometerplus.zlibrary.core.sqliteconfig;
|
||||||
|
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.application;
|
package org.geometerplus.zlibrary.ui.android.application;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.dialogs;
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.dialogs;
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
|
@ -0,0 +1,137 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2007-2008 Geometer Plus <contact@geometerplus.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
* 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.*;
|
||||||
|
import android.widget.*;
|
||||||
|
|
||||||
|
import org.geometerplus.zlibrary.core.util.ZLBoolean3;
|
||||||
|
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||||
|
import org.geometerplus.zlibrary.core.dialogs.ZLBoolean3OptionEntry;
|
||||||
|
|
||||||
|
class ZLAndroidBoolean3OptionView extends ZLAndroidOptionView {
|
||||||
|
private TextView myLabel;
|
||||||
|
private Spinner mySpinner;
|
||||||
|
|
||||||
|
protected ZLAndroidBoolean3OptionView(ZLAndroidDialogContent tab, String name, ZLBoolean3OptionEntry option) {
|
||||||
|
super(tab, name, option);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void createItem() {
|
||||||
|
final Context context = myTab.getView().getContext();
|
||||||
|
if (myName != null) {
|
||||||
|
myLabel = new TextView(context);
|
||||||
|
myLabel.setText(myName);
|
||||||
|
myLabel.setPadding(0, 12, 0, 12);
|
||||||
|
myLabel.setTextSize(18);
|
||||||
|
}
|
||||||
|
|
||||||
|
mySpinner = new Spinner(context);
|
||||||
|
final ComboAdapter adapter = new ComboAdapter();
|
||||||
|
mySpinner.setAdapter(adapter);
|
||||||
|
mySpinner.setOnItemSelectedListener(adapter);
|
||||||
|
mySpinner.setSelection(((ZLBoolean3OptionEntry)myOption).initialState());
|
||||||
|
}
|
||||||
|
|
||||||
|
void addAndroidViews() {
|
||||||
|
myTab.addAndroidView(myLabel, false);
|
||||||
|
myTab.addAndroidView(mySpinner, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void reset() {
|
||||||
|
// TODO: implement
|
||||||
|
/*
|
||||||
|
final ZLBoolean3OptionEntry comboEntry = (ZLBoolean3OptionEntry)myOption;
|
||||||
|
comboEntry.onReset();
|
||||||
|
*/
|
||||||
|
if (mySpinner != null) {
|
||||||
|
mySpinner.setSelection(((ZLBoolean3OptionEntry)myOption).initialState());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void _onAccept() {
|
||||||
|
int index = mySpinner.getSelectedItemPosition();
|
||||||
|
if (index != -1) {
|
||||||
|
((ZLBoolean3OptionEntry)myOption).onAccept(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ComboAdapter extends BaseAdapter implements Spinner.OnItemSelectedListener {
|
||||||
|
EditText myEditor;
|
||||||
|
|
||||||
|
public void onItemSelected(AdapterView parent, View v, int position, long id) {
|
||||||
|
//final ZLBoolean3OptionEntry comboEntry = (ZLBoolean3OptionEntry)myOption;
|
||||||
|
//comboEntry.onValueSelected(position);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onNothingSelected(AdapterView parent) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public View getDropDownView(int position, View convertView, ViewGroup parent) {
|
||||||
|
if (convertView == null) {
|
||||||
|
TextView textView = new TextView(parent.getContext());
|
||||||
|
textView.setPadding(0, 12, 0, 12);
|
||||||
|
textView.setTextSize(20);
|
||||||
|
textView.setText((String)getItem(position));
|
||||||
|
convertView = textView;
|
||||||
|
}
|
||||||
|
return convertView;
|
||||||
|
}
|
||||||
|
|
||||||
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
|
if (convertView == null) {
|
||||||
|
EditText editor = new EditText(parent.getContext()) {
|
||||||
|
protected boolean getDefaultEditable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
editor.setText((String)getItem(position));
|
||||||
|
return editor;
|
||||||
|
}
|
||||||
|
return convertView;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCount() {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getItem(int position) {
|
||||||
|
final ZLResource resource = ZLResource.resource("boolean3");
|
||||||
|
switch (position) {
|
||||||
|
case ZLBoolean3.B3_TRUE:
|
||||||
|
return resource.getResource("on").getValue();
|
||||||
|
case ZLBoolean3.B3_FALSE:
|
||||||
|
return resource.getResource("off").getValue();
|
||||||
|
default:
|
||||||
|
case ZLBoolean3.B3_UNDEFINED:
|
||||||
|
return resource.getResource("unchanged").getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getItemId(int position) {
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean stableIds() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.dialogs;
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
|
|
||||||
import android.view.*;
|
import android.view.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.dialogs;
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.dialogs;
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
|
@ -16,16 +16,17 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.dialogs;
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.view.*;
|
import android.view.*;
|
||||||
import android.widget.*;
|
import android.widget.*;
|
||||||
import android.database.DataSetObserver;
|
|
||||||
|
|
||||||
import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry;
|
import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry;
|
||||||
|
|
||||||
class ZLAndroidComboOptionView extends ZLAndroidOptionView {
|
class ZLAndroidComboOptionView extends ZLAndroidOptionView {
|
||||||
|
private TextView myLabel;
|
||||||
private Spinner mySpinner;
|
private Spinner mySpinner;
|
||||||
|
|
||||||
protected ZLAndroidComboOptionView(ZLAndroidDialogContent tab, String name, ZLComboOptionEntry option) {
|
protected ZLAndroidComboOptionView(ZLAndroidDialogContent tab, String name, ZLComboOptionEntry option) {
|
||||||
|
@ -33,27 +34,57 @@ class ZLAndroidComboOptionView extends ZLAndroidOptionView {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void createItem() {
|
protected void createItem() {
|
||||||
mySpinner = new Spinner(myTab.getView().getContext());
|
final Context context = myTab.getView().getContext();
|
||||||
mySpinner.setAdapter(new ComboAdapter());
|
if (myName != null) {
|
||||||
|
myLabel = new TextView(context);
|
||||||
|
myLabel.setText(myName);
|
||||||
|
myLabel.setPadding(0, 12, 0, 12);
|
||||||
|
myLabel.setTextSize(18);
|
||||||
|
}
|
||||||
|
|
||||||
|
mySpinner = new Spinner(context);
|
||||||
|
final ComboAdapter adapter = new ComboAdapter();
|
||||||
|
mySpinner.setAdapter(adapter);
|
||||||
|
mySpinner.setOnItemSelectedListener(adapter);
|
||||||
|
mySpinner.setSelection(initialIndex((ZLComboOptionEntry)myOption));
|
||||||
}
|
}
|
||||||
|
|
||||||
void addAndroidViews() {
|
void addAndroidViews() {
|
||||||
|
myTab.addAndroidView(myLabel, false);
|
||||||
myTab.addAndroidView(mySpinner, true);
|
myTab.addAndroidView(mySpinner, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int initialIndex(ZLComboOptionEntry comboEntry) {
|
||||||
|
int index = comboEntry.getValues().indexOf(comboEntry.initialValue());
|
||||||
|
return (index >= 0) ? index : 0;
|
||||||
|
}
|
||||||
|
|
||||||
protected void reset() {
|
protected void reset() {
|
||||||
((ZLComboOptionEntry)myOption).onReset();
|
final ZLComboOptionEntry comboEntry = (ZLComboOptionEntry)myOption;
|
||||||
// TODO: implement
|
comboEntry.onReset();
|
||||||
|
if (mySpinner != null) {
|
||||||
|
mySpinner.setSelection(initialIndex(comboEntry));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void _onAccept() {
|
protected void _onAccept() {
|
||||||
EditText editor = ((ComboAdapter)mySpinner.getAdapter()).myEditor;
|
final EditText editor = ((ComboAdapter)mySpinner.getAdapter()).myEditor;
|
||||||
((ZLComboOptionEntry)myOption).onAccept(editor.getText().toString());
|
if (editor != null) {
|
||||||
|
((ZLComboOptionEntry)myOption).onAccept(editor.getText().toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ComboAdapter implements SpinnerAdapter {
|
private class ComboAdapter extends BaseAdapter implements Spinner.OnItemSelectedListener {
|
||||||
EditText myEditor;
|
EditText myEditor;
|
||||||
|
|
||||||
|
public void onItemSelected(AdapterView parent, View v, int position, long id) {
|
||||||
|
final ZLComboOptionEntry comboEntry = (ZLComboOptionEntry)myOption;
|
||||||
|
comboEntry.onValueSelected(position);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onNothingSelected(AdapterView parent) {
|
||||||
|
}
|
||||||
|
|
||||||
public View getDropDownView(int position, View convertView, ViewGroup parent) {
|
public View getDropDownView(int position, View convertView, ViewGroup parent) {
|
||||||
if (convertView == null) {
|
if (convertView == null) {
|
||||||
TextView textView = new TextView(parent.getContext());
|
TextView textView = new TextView(parent.getContext());
|
||||||
|
@ -66,9 +97,13 @@ class ZLAndroidComboOptionView extends ZLAndroidOptionView {
|
||||||
}
|
}
|
||||||
|
|
||||||
public View getView(int position, View convertView, ViewGroup parent) {
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
((ZLComboOptionEntry)myOption).onValueSelected(position);
|
final ZLComboOptionEntry comboEntry = (ZLComboOptionEntry)myOption;
|
||||||
if (convertView == null) {
|
if (convertView == null) {
|
||||||
myEditor = new EditText(parent.getContext());
|
myEditor = new EditText(parent.getContext()) {
|
||||||
|
protected boolean getDefaultEditable() {
|
||||||
|
return comboEntry.isEditable();
|
||||||
|
}
|
||||||
|
};
|
||||||
myEditor.setSingleLine(true);
|
myEditor.setSingleLine(true);
|
||||||
myEditor.setText((String)getItem(position), TextView.BufferType.EDITABLE);
|
myEditor.setText((String)getItem(position), TextView.BufferType.EDITABLE);
|
||||||
convertView = myEditor;
|
convertView = myEditor;
|
||||||
|
@ -76,11 +111,6 @@ class ZLAndroidComboOptionView extends ZLAndroidOptionView {
|
||||||
return convertView;
|
return convertView;
|
||||||
}
|
}
|
||||||
|
|
||||||
public View getMeasurementView(ViewGroup parent) {
|
|
||||||
// TODO: implement
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCount() {
|
public int getCount() {
|
||||||
return ((ZLComboOptionEntry)myOption).getValues().size();
|
return ((ZLComboOptionEntry)myOption).getValues().size();
|
||||||
}
|
}
|
||||||
|
@ -93,18 +123,8 @@ class ZLAndroidComboOptionView extends ZLAndroidOptionView {
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNewSelectionForKey(int currentSelection, int keyCode, KeyEvent event) {
|
|
||||||
return NO_SELECTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean stableIds() {
|
public boolean stableIds() {
|
||||||
return true;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
public void registerDataSetObserver(DataSetObserver observer) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterDataSetObserver(DataSetObserver observer) {
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.dialogs;
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.dialogs;
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -76,11 +77,8 @@ class ZLAndroidDialogContent extends ZLDialogContent {
|
||||||
void invalidateView() {
|
void invalidateView() {
|
||||||
if (!myAndroidViews.isEmpty()) {
|
if (!myAndroidViews.isEmpty()) {
|
||||||
myAndroidViews.clear();
|
myAndroidViews.clear();
|
||||||
android.util.Log.i("invalidateView", "0");
|
|
||||||
myListView.setAdapter(new ViewAdapter());
|
myListView.setAdapter(new ViewAdapter());
|
||||||
android.util.Log.i("invalidateView", "1");
|
|
||||||
myListView.invalidate();
|
myListView.invalidate();
|
||||||
android.util.Log.i("invalidateView", "2");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,7 +94,9 @@ class ZLAndroidDialogContent extends ZLDialogContent {
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case ZLOptionKind.BOOLEAN3:
|
case ZLOptionKind.BOOLEAN3:
|
||||||
// view = new Boolean3OptionView(name, tooltip, (ZLBoolean3OptionEntry*)option, *this, from, to);
|
view = new ZLAndroidBoolean3OptionView(
|
||||||
|
this, name, (ZLBoolean3OptionEntry)option
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case ZLOptionKind.STRING:
|
case ZLOptionKind.STRING:
|
||||||
view = new ZLAndroidStringOptionView(
|
view = new ZLAndroidStringOptionView(
|
||||||
|
@ -124,7 +124,9 @@ class ZLAndroidDialogContent extends ZLDialogContent {
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case ZLOptionKind.KEY:
|
case ZLOptionKind.KEY:
|
||||||
// view = new KeyOptionView(name, tooltip, (ZLKeyOptionEntry*)option, *this, from, to);
|
view = new ZLAndroidKeyOptionView(
|
||||||
|
this, name, (ZLKeyOptionEntry)option
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case ZLOptionKind.ORDER:
|
case ZLOptionKind.ORDER:
|
||||||
// TODO: implement
|
// TODO: implement
|
||||||
|
@ -165,13 +167,7 @@ class ZLAndroidDialogContent extends ZLDialogContent {
|
||||||
private class ViewAdapter extends BaseAdapter {
|
private class ViewAdapter extends BaseAdapter {
|
||||||
public View getView(int position, View convertView, ViewGroup parent) {
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
if (convertView == null) {
|
if (convertView == null) {
|
||||||
final ArrayList views = getAndroidViews();
|
convertView = (View)getAndroidViews().get(position);
|
||||||
// just a hack
|
|
||||||
// TODO: make a correct fix for a problem in Scrollings tab
|
|
||||||
if (position >= views.size()) {
|
|
||||||
position = views.size() - 1;
|
|
||||||
}
|
|
||||||
convertView = (View)views.get(position);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return convertView;
|
return convertView;
|
||||||
|
|
|
@ -16,111 +16,112 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
package org.geometerplus.zlibrary.ui.android.dialogs;
|
|
||||||
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
import android.app.*;
|
|
||||||
import android.view.View;
|
import android.app.*;
|
||||||
import android.content.*;
|
import android.view.View;
|
||||||
import android.os.*;
|
import android.content.*;
|
||||||
|
import android.os.*;
|
||||||
import org.geometerplus.zlibrary.core.dialogs.*;
|
|
||||||
import org.geometerplus.zlibrary.core.application.ZLApplication;
|
import org.geometerplus.zlibrary.core.dialogs.*;
|
||||||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
import org.geometerplus.zlibrary.core.application.ZLApplication;
|
||||||
import org.geometerplus.zlibrary.ui.android.application.ZLAndroidApplicationWindow;
|
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||||
|
import org.geometerplus.zlibrary.ui.android.application.ZLAndroidApplicationWindow;
|
||||||
import org.geometerplus.zlibrary.ui.android.library.*;
|
|
||||||
|
import org.geometerplus.zlibrary.ui.android.library.*;
|
||||||
public class ZLAndroidDialogManager extends ZLDialogManager {
|
|
||||||
private final Activity myActivity;
|
public class ZLAndroidDialogManager extends ZLDialogManager {
|
||||||
|
private final Activity myActivity;
|
||||||
public ZLAndroidDialogManager(Activity activity) {
|
|
||||||
myActivity = activity;
|
public ZLAndroidDialogManager(Activity activity) {
|
||||||
}
|
myActivity = activity;
|
||||||
|
}
|
||||||
public void runSelectionDialog(String key, ZLTreeHandler handler, Runnable actionOnAccept) {
|
|
||||||
new ZLAndroidSelectionDialog(myActivity, getDialogTitle(key), handler, actionOnAccept).run();
|
public void runSelectionDialog(String key, ZLTreeHandler handler, Runnable actionOnAccept) {
|
||||||
}
|
new ZLAndroidSelectionDialog(myActivity, getDialogTitle(key), handler, actionOnAccept).run();
|
||||||
|
}
|
||||||
public void showErrorBox(String key, String message) {
|
|
||||||
showAlert(0, key, message);
|
public void showErrorBox(String key, String message) {
|
||||||
}
|
showAlert(0, key, message);
|
||||||
|
}
|
||||||
public void showInformationBox(String key, String message) {
|
|
||||||
showAlert(0, key, message);
|
public void showInformationBox(String key, String message) {
|
||||||
}
|
showAlert(0, key, message);
|
||||||
|
}
|
||||||
private void showAlert(int iconId, String key, String message) {
|
|
||||||
AlertDialog.show(myActivity, null, iconId, message, getButtonText(OK_BUTTON), null, true, null);
|
private void showAlert(int iconId, String key, String message) {
|
||||||
}
|
AlertDialog.show(myActivity, null, iconId, message, getButtonText(OK_BUTTON), null, true, null);
|
||||||
|
}
|
||||||
private static class AlertListener implements DialogInterface.OnClickListener {
|
|
||||||
private final Runnable myAction0, myAction1, myAction2;
|
private static class AlertListener implements DialogInterface.OnClickListener {
|
||||||
|
private final Runnable myAction0, myAction1, myAction2;
|
||||||
public AlertListener(Runnable action0, Runnable action1, Runnable action2) {
|
|
||||||
myAction0 = action0;
|
public AlertListener(Runnable action0, Runnable action1, Runnable action2) {
|
||||||
myAction1 = action1;
|
myAction0 = action0;
|
||||||
myAction2 = action2;
|
myAction1 = action1;
|
||||||
}
|
myAction2 = action2;
|
||||||
|
}
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
Runnable action = null;
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
switch (which) {
|
Runnable action = null;
|
||||||
case DialogInterface.BUTTON1:
|
switch (which) {
|
||||||
action = myAction0;
|
case DialogInterface.BUTTON1:
|
||||||
break;
|
action = myAction0;
|
||||||
case DialogInterface.BUTTON2:
|
break;
|
||||||
action = myAction1;
|
case DialogInterface.BUTTON2:
|
||||||
break;
|
action = myAction1;
|
||||||
case DialogInterface.BUTTON3:
|
break;
|
||||||
action = myAction2;
|
case DialogInterface.BUTTON3:
|
||||||
break;
|
action = myAction2;
|
||||||
}
|
break;
|
||||||
if (action != null) {
|
}
|
||||||
new Handler().post(action);
|
if (action != null) {
|
||||||
}
|
new Handler().post(action);
|
||||||
dialog.dismiss();
|
}
|
||||||
}
|
dialog.dismiss();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public void showQuestionBox(String key, String message, String button0, Runnable action0, String button1, Runnable action1, String button2, Runnable action2) {
|
|
||||||
final AlertListener al = new AlertListener(action0, action1, action2);
|
public void showQuestionBox(String key, String message, String button0, Runnable action0, String button1, Runnable action1, String button2, Runnable action2) {
|
||||||
AlertDialog.show(myActivity, null, 0, message, button0, al, button1, al, button2, al, true, null);
|
final AlertListener al = new AlertListener(action0, action1, action2);
|
||||||
}
|
AlertDialog.show(myActivity, null, 0, message, button0, al, button1, al, button2, al, true, null);
|
||||||
|
}
|
||||||
public ZLAndroidApplicationWindow createApplicationWindow(ZLApplication application) {
|
|
||||||
// TODO: implement
|
public ZLAndroidApplicationWindow createApplicationWindow(ZLApplication application) {
|
||||||
//myApplicationWindow = new ZLAndroidApplicationWindow(application);
|
// TODO: implement
|
||||||
//return myApplicationWindow;
|
//myApplicationWindow = new ZLAndroidApplicationWindow(application);
|
||||||
return null;
|
//return myApplicationWindow;
|
||||||
}
|
return null;
|
||||||
|
}
|
||||||
/*
|
|
||||||
static JButton createButton(String key) {
|
/*
|
||||||
String text = getButtonText(key).replace("&", "");
|
static JButton createButton(String key) {
|
||||||
return new JButton(text);
|
String text = getButtonText(key).replace("&", "");
|
||||||
}
|
return new JButton(text);
|
||||||
*/
|
}
|
||||||
|
*/
|
||||||
public ZLOptionsDialog createOptionsDialog(String key, Runnable exitAction, Runnable applyAction, boolean showApplyButton) {
|
|
||||||
return new ZLAndroidOptionsDialog(myActivity, getResource().getResource(key), exitAction, applyAction);
|
public ZLOptionsDialog createOptionsDialog(String key, Runnable exitAction, Runnable applyAction, boolean showApplyButton) {
|
||||||
}
|
return new ZLAndroidOptionsDialog(myActivity, getResource().getResource(key), exitAction, applyAction);
|
||||||
|
}
|
||||||
public ZLDialog createDialog(String key) {
|
|
||||||
return new ZLAndroidDialog(myActivity, getResource().getResource(key));
|
public ZLDialog createDialog(String key) {
|
||||||
}
|
return new ZLAndroidDialog(myActivity, getResource().getResource(key));
|
||||||
|
}
|
||||||
public void wait(String key, final Runnable runnable) {
|
|
||||||
final ProgressDialog progress = ProgressDialog.show(myActivity, null, getWaitMessageText(key), true, true);
|
public void wait(String key, final Runnable runnable) {
|
||||||
final Handler handler = new Handler() {
|
final ProgressDialog progress = ProgressDialog.show(myActivity, null, getWaitMessageText(key), true, false);
|
||||||
public void handleMessage(Message message) {
|
final Handler handler = new Handler() {
|
||||||
progress.dismiss();
|
public void handleMessage(Message message) {
|
||||||
}
|
progress.dismiss();
|
||||||
};
|
}
|
||||||
new Thread(new Runnable() {
|
};
|
||||||
public void run() {
|
new Thread(new Runnable() {
|
||||||
runnable.run();
|
public void run() {
|
||||||
handler.sendEmptyMessage(0);
|
runnable.run();
|
||||||
}
|
handler.sendEmptyMessage(0);
|
||||||
}).start();
|
}
|
||||||
}
|
}).start();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,154 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2007-2008 Geometer Plus <contact@geometerplus.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
* 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.*;
|
||||||
|
import android.widget.*;
|
||||||
|
import android.text.*;
|
||||||
|
|
||||||
|
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||||
|
import org.geometerplus.zlibrary.core.dialogs.ZLKeyOptionEntry;
|
||||||
|
|
||||||
|
import org.geometerplus.zlibrary.ui.android.util.ZLAndroidKeyUtil;
|
||||||
|
|
||||||
|
class ZLAndroidKeyOptionView extends ZLAndroidOptionView {
|
||||||
|
private TextView myLabel;
|
||||||
|
private EditText myEditor;
|
||||||
|
private Spinner mySpinner;
|
||||||
|
|
||||||
|
protected ZLAndroidKeyOptionView(ZLAndroidDialogContent tab, String name, ZLKeyOptionEntry option) {
|
||||||
|
super(tab, name, option);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setKeyName(String keyName) {
|
||||||
|
myEditor.setText(keyName);
|
||||||
|
myTab.invalidateView();
|
||||||
|
final ZLKeyOptionEntry keyEntry = (ZLKeyOptionEntry)myOption;
|
||||||
|
mySpinner.setSelection(keyEntry.actionIndex(keyName));
|
||||||
|
keyEntry.onKeySelected(keyName);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void createItem() {
|
||||||
|
final Context context = myTab.getView().getContext();
|
||||||
|
|
||||||
|
myLabel = new TextView(context);
|
||||||
|
myLabel.setText(ZLResource.resource("keyOptionView").getResource("actionFor").getValue());
|
||||||
|
myLabel.setPadding(0, 12, 0, 12);
|
||||||
|
myLabel.setTextSize(18);
|
||||||
|
|
||||||
|
final ZLKeyOptionEntry keyEntry = (ZLKeyOptionEntry)myOption;
|
||||||
|
|
||||||
|
myEditor = new EditText(context) {
|
||||||
|
protected boolean getDefaultEditable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||||
|
setKeyName(ZLAndroidKeyUtil.getKeyNameByCode(keyCode));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
myEditor.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
|
||||||
|
|
||||||
|
mySpinner = new Spinner(context);
|
||||||
|
final ComboAdapter adapter = new ComboAdapter(keyEntry.getActionNames());
|
||||||
|
mySpinner.setAdapter(adapter);
|
||||||
|
mySpinner.setOnItemSelectedListener(adapter);
|
||||||
|
}
|
||||||
|
|
||||||
|
void addAndroidViews() {
|
||||||
|
myTab.addAndroidView(myLabel, false);
|
||||||
|
myTab.addAndroidView(myEditor, true);
|
||||||
|
if (myEditor.getText().length() > 0) {
|
||||||
|
myTab.addAndroidView(mySpinner, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void reset() {
|
||||||
|
final ZLKeyOptionEntry keyEntry = (ZLKeyOptionEntry)myOption;
|
||||||
|
keyEntry.onReset();
|
||||||
|
if (myEditor != null) {
|
||||||
|
setKeyName("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void _onAccept() {
|
||||||
|
((ZLKeyOptionEntry)myOption).onAccept();
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ComboAdapter extends BaseAdapter implements Spinner.OnItemSelectedListener {
|
||||||
|
private final ArrayList myValues;
|
||||||
|
|
||||||
|
ComboAdapter(ArrayList values) {
|
||||||
|
myValues = values;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onItemSelected(AdapterView parent, View v, int position, long id) {
|
||||||
|
final ZLKeyOptionEntry keyEntry = (ZLKeyOptionEntry)myOption;
|
||||||
|
keyEntry.onValueChanged(myEditor.getText().toString(), position);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onNothingSelected(AdapterView parent) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public View getDropDownView(int position, View convertView, ViewGroup parent) {
|
||||||
|
if (convertView == null) {
|
||||||
|
TextView textView = new TextView(parent.getContext());
|
||||||
|
textView.setPadding(0, 12, 0, 12);
|
||||||
|
textView.setTextSize(20);
|
||||||
|
textView.setText((String)getItem(position));
|
||||||
|
convertView = textView;
|
||||||
|
}
|
||||||
|
return convertView;
|
||||||
|
}
|
||||||
|
|
||||||
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
|
if (convertView == null) {
|
||||||
|
EditText editor = new EditText(parent.getContext()) {
|
||||||
|
protected boolean getDefaultEditable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
editor.setText((String)getItem(position));
|
||||||
|
return editor;
|
||||||
|
}
|
||||||
|
return convertView;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCount() {
|
||||||
|
return myValues.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getItem(int position) {
|
||||||
|
return myValues.get(position);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getItemId(int position) {
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean stableIds() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.dialogs;
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.dialogs;
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.dialogs;
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.dialogs;
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.dialogs;
|
package org.geometerplus.zlibrary.ui.android.dialogs;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.image;
|
package org.geometerplus.zlibrary.ui.android.image;
|
||||||
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.image;
|
package org.geometerplus.zlibrary.ui.android.image;
|
||||||
|
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.library;
|
package org.geometerplus.zlibrary.ui.android.library;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.library;
|
package org.geometerplus.zlibrary.ui.android.library;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.util;
|
package org.geometerplus.zlibrary.ui.android.util;
|
||||||
|
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
|
@ -134,9 +135,9 @@ public final class ZLAndroidKeyUtil {
|
||||||
case KeyEvent.KEYCODE_EXPLORER:
|
case KeyEvent.KEYCODE_EXPLORER:
|
||||||
return "<Explorer>";
|
return "<Explorer>";
|
||||||
case KeyEvent.KEYCODE_GRAVE:
|
case KeyEvent.KEYCODE_GRAVE:
|
||||||
return "<???>";
|
return "<??? 0>";
|
||||||
case KeyEvent.KEYCODE_HEADSETHOOK:
|
case KeyEvent.KEYCODE_HEADSETHOOK:
|
||||||
return "<???>";
|
return "<??? 1>";
|
||||||
case KeyEvent.KEYCODE_HOME:
|
case KeyEvent.KEYCODE_HOME:
|
||||||
return "<Home>";
|
return "<Home>";
|
||||||
case KeyEvent.KEYCODE_LEFT_BRACKET:
|
case KeyEvent.KEYCODE_LEFT_BRACKET:
|
||||||
|
@ -148,9 +149,9 @@ public final class ZLAndroidKeyUtil {
|
||||||
case KeyEvent.KEYCODE_NUM:
|
case KeyEvent.KEYCODE_NUM:
|
||||||
return "<Num>";
|
return "<Num>";
|
||||||
case KeyEvent.KEYCODE_PERIOD:
|
case KeyEvent.KEYCODE_PERIOD:
|
||||||
return "<???>";
|
return "<??? 2>";
|
||||||
case KeyEvent.KEYCODE_POUND:
|
case KeyEvent.KEYCODE_POUND:
|
||||||
return "<???>";
|
return "<??? 3>";
|
||||||
case KeyEvent.KEYCODE_POWER:
|
case KeyEvent.KEYCODE_POWER:
|
||||||
return "<Power>";
|
return "<Power>";
|
||||||
case KeyEvent.KEYCODE_RIGHT_BRACKET:
|
case KeyEvent.KEYCODE_RIGHT_BRACKET:
|
||||||
|
@ -160,9 +161,9 @@ public final class ZLAndroidKeyUtil {
|
||||||
case KeyEvent.KEYCODE_SLASH:
|
case KeyEvent.KEYCODE_SLASH:
|
||||||
return "</>";
|
return "</>";
|
||||||
case KeyEvent.KEYCODE_SOFT_LEFT:
|
case KeyEvent.KEYCODE_SOFT_LEFT:
|
||||||
return "<???>";
|
return "<Menu>";
|
||||||
case KeyEvent.KEYCODE_SOFT_RIGHT:
|
case KeyEvent.KEYCODE_SOFT_RIGHT:
|
||||||
return "<???>";
|
return "<??? 4>";
|
||||||
case KeyEvent.KEYCODE_SPACE:
|
case KeyEvent.KEYCODE_SPACE:
|
||||||
return "<Space>";
|
return "<Space>";
|
||||||
case KeyEvent.KEYCODE_STAR:
|
case KeyEvent.KEYCODE_STAR:
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.view;
|
package org.geometerplus.zlibrary.ui.android.view;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -202,15 +203,15 @@ public final class ZLAndroidPaintContext extends ZLPaintContext {
|
||||||
|
|
||||||
public String realFontFamilyName(String fontFamily) {
|
public String realFontFamilyName(String fontFamily) {
|
||||||
// TODO: implement
|
// TODO: implement
|
||||||
if ("DroidSerif".equals(fontFamily)) {
|
if ("Serif".equals(fontFamily)) {
|
||||||
return fontFamily;
|
return fontFamily;
|
||||||
}
|
}
|
||||||
return "DroidSans";
|
return "Sans";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void fillFamiliesList(ArrayList families) {
|
protected void fillFamiliesList(ArrayList families) {
|
||||||
// TODO: implement
|
// TODO: implement
|
||||||
families.add("DroidSans");
|
families.add("Sans");
|
||||||
families.add("DroidSerif");
|
families.add("Serif");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.view;
|
package org.geometerplus.zlibrary.ui.android.view;
|
||||||
|
|
||||||
import org.geometerplus.zlibrary.core.view.ZLView;
|
import org.geometerplus.zlibrary.core.view.ZLView;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.android.view;
|
package org.geometerplus.zlibrary.ui.android.view;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -136,11 +137,18 @@ public class ZLAndroidWidget extends View {
|
||||||
|
|
||||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||||
final String keyName = ZLAndroidKeyUtil.getKeyNameByCode(keyCode);
|
final String keyName = ZLAndroidKeyUtil.getKeyNameByCode(keyCode);
|
||||||
|
if (keyName.equals("<Menu>")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
myViewWidget.getView().getApplication().doActionByKey(keyName);
|
myViewWidget.getView().getApplication().doActionByKey(keyName);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
||||||
|
final String keyName = ZLAndroidKeyUtil.getKeyNameByCode(keyCode);
|
||||||
|
if (keyName.equals("<Menu>")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package java.util.zip;
|
package java.util.zip;
|
||||||
|
|
||||||
public class ZipEntry {
|
public class ZipEntry {
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package java.util.zip;
|
package java.util.zip;
|
||||||
|
|
||||||
public class ZipException extends Exception {
|
public class ZipException extends Exception {
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package java.util.zip;
|
package java.util.zip;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package java.util.zip;
|
package java.util.zip;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.util;
|
package org.geometerplus.zlibrary.core.util;
|
||||||
|
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.util;
|
package org.geometerplus.zlibrary.core.util;
|
||||||
|
|
||||||
public abstract class Collections {
|
public abstract class Collections {
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.util;
|
package org.geometerplus.zlibrary.core.util;
|
||||||
|
|
||||||
public interface Comparator {
|
public interface Comparator {
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.util;
|
package org.geometerplus.zlibrary.core.util;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.util;
|
package org.geometerplus.zlibrary.core.util;
|
||||||
|
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.util;
|
package org.geometerplus.zlibrary.core.util;
|
||||||
|
|
||||||
public final class Locale {
|
public final class Locale {
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.j2me.application;
|
package org.geometerplus.zlibrary.ui.j2me.application;
|
||||||
|
|
||||||
import org.geometerplus.zlibrary.core.application.*;
|
import org.geometerplus.zlibrary.core.application.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.j2me.config;
|
package org.geometerplus.zlibrary.ui.j2me.config;
|
||||||
|
|
||||||
import org.geometerplus.zlibrary.core.config.ZLConfig;
|
import org.geometerplus.zlibrary.core.config.ZLConfig;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.j2me.config;
|
package org.geometerplus.zlibrary.ui.j2me.config;
|
||||||
|
|
||||||
import org.geometerplus.zlibrary.core.config.ZLConfig;
|
import org.geometerplus.zlibrary.core.config.ZLConfig;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.j2me.image;
|
package org.geometerplus.zlibrary.ui.j2me.image;
|
||||||
|
|
||||||
import javax.microedition.lcdui.Image;
|
import javax.microedition.lcdui.Image;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.j2me.image;
|
package org.geometerplus.zlibrary.ui.j2me.image;
|
||||||
|
|
||||||
import javax.microedition.lcdui.Image;
|
import javax.microedition.lcdui.Image;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.j2me.library;
|
package org.geometerplus.zlibrary.ui.j2me.library;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.j2me.library;
|
package org.geometerplus.zlibrary.ui.j2me.library;
|
||||||
|
|
||||||
import javax.microedition.midlet.MIDlet;
|
import javax.microedition.midlet.MIDlet;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.j2me.view;
|
package org.geometerplus.zlibrary.ui.j2me.view;
|
||||||
|
|
||||||
import javax.microedition.lcdui.*;
|
import javax.microedition.lcdui.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.j2me.view;
|
package org.geometerplus.zlibrary.ui.j2me.view;
|
||||||
|
|
||||||
import javax.microedition.lcdui.*;
|
import javax.microedition.lcdui.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.j2me.view;
|
package org.geometerplus.zlibrary.ui.j2me.view;
|
||||||
|
|
||||||
import org.geometerplus.zlibrary.core.view.ZLViewWidget;
|
import org.geometerplus.zlibrary.core.view.ZLViewWidget;
|
||||||
|
|
|
@ -29,4 +29,5 @@
|
||||||
<binding key="<Ctrl>+<DownArrow>" action="nextTOCSection"/>
|
<binding key="<Ctrl>+<DownArrow>" action="nextTOCSection"/>
|
||||||
<binding key="<Ctrl>+<UpArrow>" action="previousTOCSection"/>
|
<binding key="<Ctrl>+<UpArrow>" action="previousTOCSection"/>
|
||||||
<binding key="<Ctrl>+<C>" action="copyToClipboard"/>
|
<binding key="<Ctrl>+<C>" action="copyToClipboard"/>
|
||||||
|
<binding key="<1>" action="previousBook"/>
|
||||||
</keymap>
|
</keymap>
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.xmlconfig;
|
package org.geometerplus.zlibrary.core.xmlconfig;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.xmlconfig;
|
package org.geometerplus.zlibrary.core.xmlconfig;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.xmlconfig;
|
package org.geometerplus.zlibrary.core.xmlconfig;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.xmlconfig;
|
package org.geometerplus.zlibrary.core.xmlconfig;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.xmlconfig;
|
package org.geometerplus.zlibrary.core.xmlconfig;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.xmlconfig;
|
package org.geometerplus.zlibrary.core.xmlconfig;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.xmlconfig;
|
package org.geometerplus.zlibrary.core.xmlconfig;
|
||||||
|
|
||||||
final class ZLOptionID {
|
final class ZLOptionID {
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.xmlconfig;
|
package org.geometerplus.zlibrary.core.xmlconfig;
|
||||||
|
|
||||||
final class ZLOptionInfo {
|
final class ZLOptionInfo {
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.xmlconfig;
|
package org.geometerplus.zlibrary.core.xmlconfig;
|
||||||
|
|
||||||
public interface ZLReader {
|
public interface ZLReader {
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.xmlconfig;
|
package org.geometerplus.zlibrary.core.xmlconfig;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.xmlconfig;
|
package org.geometerplus.zlibrary.core.xmlconfig;
|
||||||
|
|
||||||
public interface ZLWriter {
|
public interface ZLWriter {
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.core.xmlconfig;
|
package org.geometerplus.zlibrary.core.xmlconfig;
|
||||||
|
|
||||||
import org.geometerplus.zlibrary.core.config.*;
|
import org.geometerplus.zlibrary.core.config.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.application;
|
package org.geometerplus.zlibrary.ui.swing.application;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
||||||
|
|
||||||
import java.awt.GridBagConstraints;
|
import java.awt.GridBagConstraints;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
||||||
|
|
||||||
import java.awt.GridBagConstraints;
|
import java.awt.GridBagConstraints;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
|
@ -16,115 +16,113 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
|
||||||
|
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
||||||
import java.util.ArrayList;
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.*;
|
import java.awt.*;
|
||||||
import javax.swing.*;
|
import java.awt.event.*;
|
||||||
|
import javax.swing.*;
|
||||||
import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry;
|
|
||||||
|
import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry;
|
||||||
public class ZLComboOptionView extends ZLSwingOptionView {
|
|
||||||
private JComboBox myComboBox;
|
public class ZLComboOptionView extends ZLSwingOptionView {
|
||||||
private JLabel myLabel;
|
private JComboBox myComboBox;
|
||||||
private JPanel myPanel;
|
private JLabel myLabel;
|
||||||
|
private JPanel myPanel;
|
||||||
public ZLComboOptionView(String name, ZLComboOptionEntry option,
|
|
||||||
ZLSwingDialogContent tab, GridBagLayout layout) {
|
public ZLComboOptionView(String name, ZLComboOptionEntry option,
|
||||||
super(name, option, tab, layout);
|
ZLSwingDialogContent tab, GridBagLayout layout) {
|
||||||
}
|
super(name, option, tab, layout);
|
||||||
|
}
|
||||||
protected void _onAccept() {
|
|
||||||
((ZLComboOptionEntry) myOption).onAccept((String) myComboBox.getSelectedItem());
|
protected void _onAccept() {
|
||||||
}
|
((ZLComboOptionEntry) myOption).onAccept((String) myComboBox.getSelectedItem());
|
||||||
|
}
|
||||||
protected void createItem() {
|
|
||||||
final ZLComboOptionEntry option = (ZLComboOptionEntry) myOption;
|
protected void createItem() {
|
||||||
final ArrayList values = option.getValues();
|
final ZLComboOptionEntry option = (ZLComboOptionEntry)myOption;
|
||||||
final String initialValue = option.initialValue();
|
final ArrayList values = option.getValues();
|
||||||
int index = 0;
|
final String initialValue = option.initialValue();
|
||||||
for (int i = 0; i < values.size(); ++i) {
|
int index = 0;
|
||||||
if (values.get(i).equals(initialValue)) {
|
for (int i = 0; i < values.size(); ++i) {
|
||||||
index = i;
|
if (values.get(i).equals(initialValue)) {
|
||||||
break;
|
index = i;
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
myComboBox = new JComboBox(values.toArray());
|
}
|
||||||
myComboBox.setSelectedIndex(index);
|
myComboBox = new JComboBox(values.toArray());
|
||||||
myComboBox.setEditable(option.isEditable());
|
myComboBox.setSelectedIndex(index);
|
||||||
myComboBox.addItemListener(new MyItemListener());
|
myComboBox.setEditable(option.isEditable());
|
||||||
if (option.useOnValueEdited()) {
|
myComboBox.addItemListener(new MyItemListener());
|
||||||
myComboBox.getEditor().getEditorComponent().addKeyListener(new MyKeyListener());
|
if (option.useOnValueEdited()) {
|
||||||
}
|
myComboBox.getEditor().getEditorComponent().addKeyListener(new MyKeyListener());
|
||||||
if (myName == null || "".equals(myName)) {
|
}
|
||||||
myLabel = null;
|
if (myName == null || "".equals(myName)) {
|
||||||
myTab.insertWidget(myComboBox);
|
myLabel = null;
|
||||||
} else {
|
myTab.insertWidget(myComboBox);
|
||||||
myComboBox.setMinimumSize(new Dimension(0, myComboBox.getPreferredSize().height));
|
} else {
|
||||||
JPanel panel1 = new JPanel();
|
myComboBox.setMinimumSize(new Dimension(0, myComboBox.getPreferredSize().height));
|
||||||
panel1.setLayout(new BoxLayout(panel1, BoxLayout.LINE_AXIS));
|
JPanel panel1 = new JPanel();
|
||||||
myComboBox.setMaximumSize(new Dimension(myComboBox.getMaximumSize().width, myComboBox.getPreferredSize().height));
|
panel1.setLayout(new BoxLayout(panel1, BoxLayout.LINE_AXIS));
|
||||||
panel1.add(myComboBox);
|
myComboBox.setMaximumSize(new Dimension(myComboBox.getMaximumSize().width, myComboBox.getPreferredSize().height));
|
||||||
myLabel = new JLabel(myName);
|
panel1.add(myComboBox);
|
||||||
JPanel panel2 = new JPanel(new BorderLayout());
|
myLabel = new JLabel(myName);
|
||||||
panel2.add(myLabel, BorderLayout.LINE_END);
|
JPanel panel2 = new JPanel(new BorderLayout());
|
||||||
myPanel = new JPanel(new GridLayout(1, 2, 10, 0));
|
panel2.add(myLabel, BorderLayout.LINE_END);
|
||||||
myPanel.add(panel2);
|
myPanel = new JPanel(new GridLayout(1, 2, 10, 0));
|
||||||
myPanel.add(panel1);
|
myPanel.add(panel2);
|
||||||
myTab.insertWidget(myPanel);
|
myPanel.add(panel1);
|
||||||
}
|
myTab.insertWidget(myPanel);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
protected void hide() {
|
|
||||||
if (myPanel != null) {
|
protected void hide() {
|
||||||
hide(myPanel);
|
if (myPanel != null) {
|
||||||
} else {
|
hide(myPanel);
|
||||||
hide(myComboBox);
|
} else {
|
||||||
}
|
hide(myComboBox);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
protected void show() {
|
|
||||||
if (myPanel != null) {
|
protected void show() {
|
||||||
show(myPanel);
|
if (myPanel != null) {
|
||||||
} else {
|
show(myPanel);
|
||||||
show(myComboBox);
|
} else {
|
||||||
}
|
show(myComboBox);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
protected void _setActive(boolean active) {
|
|
||||||
myComboBox.setEnabled(active);
|
protected void _setActive(boolean active) {
|
||||||
}
|
myComboBox.setEnabled(active);
|
||||||
|
}
|
||||||
public void reset() {
|
|
||||||
ZLComboOptionEntry o = (ZLComboOptionEntry) myOption;
|
public void reset() {
|
||||||
o.onReset();
|
ZLComboOptionEntry o = (ZLComboOptionEntry) myOption;
|
||||||
final ArrayList values = o.getValues();
|
o.onReset();
|
||||||
final String initialValue = o.initialValue();
|
final ArrayList values = o.getValues();
|
||||||
int index = 0;
|
final String initialValue = o.initialValue();
|
||||||
for (int i = 0; i < values.size(); ++i) {
|
int index = 0;
|
||||||
if (values.get(i).equals(initialValue)) {
|
for (int i = 0; i < values.size(); ++i) {
|
||||||
index = i;
|
if (values.get(i).equals(initialValue)) {
|
||||||
break;
|
index = i;
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
myComboBox.setModel(new DefaultComboBoxModel(values.toArray()));
|
}
|
||||||
myComboBox.setSelectedIndex(index);
|
myComboBox.setModel(new DefaultComboBoxModel(values.toArray()));
|
||||||
}
|
myComboBox.setSelectedIndex(index);
|
||||||
|
}
|
||||||
private class MyItemListener implements ItemListener {
|
|
||||||
|
private class MyItemListener implements ItemListener {
|
||||||
public void itemStateChanged(ItemEvent e) {
|
public void itemStateChanged(ItemEvent e) {
|
||||||
((ZLComboOptionEntry) myOption).onValueSelected(myComboBox.getSelectedIndex());
|
((ZLComboOptionEntry) myOption).onValueSelected(myComboBox.getSelectedIndex());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
private class MyKeyListener extends KeyAdapter {
|
||||||
private class MyKeyListener extends KeyAdapter {
|
public void keyTyped(KeyEvent e) {
|
||||||
public void keyTyped(KeyEvent e) {
|
((ZLComboOptionEntry) myOption).onValueEdited((String) myComboBox.getSelectedItem());
|
||||||
((ZLComboOptionEntry) myOption).onValueEdited((String) myComboBox.getSelectedItem());
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -16,204 +16,179 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
|
||||||
|
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
||||||
import java.awt.BorderLayout;
|
|
||||||
import java.awt.Dimension;
|
import java.awt.*;
|
||||||
import java.awt.GridBagLayout;
|
import java.awt.event.*;
|
||||||
import java.awt.GridLayout;
|
import javax.swing.*;
|
||||||
import java.awt.Insets;
|
import javax.swing.text.*;
|
||||||
import java.awt.event.ItemEvent;
|
|
||||||
import java.awt.event.ItemListener;
|
import org.geometerplus.zlibrary.core.dialogs.ZLKeyOptionEntry;
|
||||||
import java.awt.event.KeyAdapter;
|
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||||
import java.awt.event.KeyEvent;
|
|
||||||
import javax.swing.BoxLayout;
|
public class ZLKeyOptionView extends ZLSwingOptionView {
|
||||||
import javax.swing.JComboBox;
|
private JComboBox myComboBox;
|
||||||
import javax.swing.JComponent;
|
private KeyEditor myKeyEditor;
|
||||||
import javax.swing.JLabel;
|
private JLabel myLabel;
|
||||||
import javax.swing.JPanel;
|
private JPanel myPanel;
|
||||||
import javax.swing.JTextField;
|
private String myCurrentKey = "";
|
||||||
import javax.swing.text.AttributeSet;
|
|
||||||
import javax.swing.text.BadLocationException;
|
public ZLKeyOptionView(String name, ZLKeyOptionEntry option, ZLSwingDialogContent tab, GridBagLayout layout) {
|
||||||
import javax.swing.text.Document;
|
super(name, option, tab, layout);
|
||||||
import javax.swing.text.PlainDocument;
|
}
|
||||||
|
|
||||||
import org.geometerplus.zlibrary.core.dialogs.ZLKeyOptionEntry;
|
protected void _onAccept() {
|
||||||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
((ZLKeyOptionEntry) myOption).onAccept();
|
||||||
|
}
|
||||||
public class ZLKeyOptionView extends ZLSwingOptionView {
|
|
||||||
private JComboBox myComboBox;
|
protected void _setActive(boolean active) {
|
||||||
private KeyEditor myKeyEditor;
|
// TODO Auto-generated method stub
|
||||||
private JLabel myLabel;
|
}
|
||||||
private JPanel myPanel;
|
|
||||||
private String myCurrentKey = "";
|
protected void createItem() {
|
||||||
|
myKeyEditor = new KeyEditor("");
|
||||||
public ZLKeyOptionView(String name, ZLKeyOptionEntry option, ZLSwingDialogContent tab,
|
myKeyEditor.setInputMap(JComponent.WHEN_FOCUSED, null);
|
||||||
GridBagLayout layout) {
|
myKeyEditor.setCaretPosition(0);
|
||||||
super(name, option, tab, layout);
|
myKeyEditor.setMargin(new Insets(0, 5, 0, 0));
|
||||||
}
|
myKeyEditor.addKeyListener(new MyKeyListener());
|
||||||
|
JPanel panel1 = new JPanel();
|
||||||
protected void _onAccept() {
|
panel1.setLayout(new BoxLayout(panel1, BoxLayout.LINE_AXIS));
|
||||||
((ZLKeyOptionEntry) myOption).onAccept();
|
myKeyEditor.setMaximumSize(new Dimension(myKeyEditor.getMaximumSize().width, myKeyEditor.getPreferredSize().height));
|
||||||
}
|
panel1.add(myKeyEditor);
|
||||||
|
myLabel = new JLabel(ZLResource.resource("keyOptionView").getResource("actionFor").getValue());
|
||||||
protected void _setActive(boolean active) {
|
JPanel panel2 = new JPanel(new BorderLayout());
|
||||||
// TODO Auto-generated method stub
|
panel2.add(myLabel, BorderLayout.LINE_END);
|
||||||
|
myPanel = new JPanel(new GridLayout(1, 2, 10, 0));
|
||||||
}
|
myPanel.add(panel2);
|
||||||
|
myPanel.add(panel1);
|
||||||
protected void createItem() {
|
myTab.insertWidget(myPanel);
|
||||||
myKeyEditor = new KeyEditor("");
|
|
||||||
myKeyEditor.setInputMap(JComponent.WHEN_FOCUSED, null);
|
myComboBox = new JComboBox(((ZLKeyOptionEntry) myOption).getActionNames().toArray());
|
||||||
myKeyEditor.setCaretPosition(0);
|
myComboBox.addItemListener(new MyItemListener());
|
||||||
myKeyEditor.setMargin(new Insets(0, 5, 0, 0));
|
myTab.insertWidget(myComboBox);
|
||||||
myKeyEditor.addKeyListener(new MyKeyListener());
|
}
|
||||||
JPanel panel1 = new JPanel();
|
|
||||||
panel1.setLayout(new BoxLayout(panel1, BoxLayout.LINE_AXIS));
|
protected void hide() {
|
||||||
myKeyEditor.setMaximumSize(new Dimension(myKeyEditor.getMaximumSize().width, myKeyEditor.getPreferredSize().height));
|
hide(myPanel);
|
||||||
panel1.add(myKeyEditor);
|
hide(myComboBox);
|
||||||
myLabel = new JLabel(ZLResource.resource("keyOptionView").getResource("actionFor").getValue());
|
}
|
||||||
JPanel panel2 = new JPanel(new BorderLayout());
|
|
||||||
panel2.add(myLabel, BorderLayout.LINE_END);
|
protected void show() {
|
||||||
myPanel = new JPanel(new GridLayout(1, 2, 10, 0));
|
show(myPanel);
|
||||||
myPanel.add(panel2);
|
if (! "".equals(myCurrentKey)) {
|
||||||
myPanel.add(panel1);
|
show(myComboBox);
|
||||||
myTab.insertWidget(myPanel);
|
}
|
||||||
|
}
|
||||||
myComboBox = new JComboBox(((ZLKeyOptionEntry) myOption).getActionNames().toArray());
|
|
||||||
myComboBox.addItemListener(new MyItemListener());
|
public void reset() {
|
||||||
myTab.insertWidget(myComboBox);
|
myCurrentKey = null;
|
||||||
}
|
myKeyEditor.setText("");
|
||||||
|
myComboBox.setVisible(false);
|
||||||
protected void hide() {
|
}
|
||||||
hide(myPanel);
|
|
||||||
hide(myComboBox);
|
private class MyItemListener implements ItemListener {
|
||||||
}
|
public void itemStateChanged(ItemEvent e) {
|
||||||
|
((ZLKeyOptionEntry) myOption).onValueChanged(myCurrentKey, myComboBox.getSelectedIndex());
|
||||||
protected void show() {
|
}
|
||||||
show(myPanel);
|
}
|
||||||
if (! "".equals(myCurrentKey)) {
|
|
||||||
show(myComboBox);
|
private class MyKeyListener extends KeyAdapter {
|
||||||
}
|
public void keyPressed(KeyEvent e) {
|
||||||
}
|
final String modifiers = e.getModifiersExText(e.getModifiersEx());
|
||||||
|
final int code = e.getKeyCode();
|
||||||
public void reset() {
|
String main;
|
||||||
myCurrentKey = null;
|
switch (code) {
|
||||||
myKeyEditor.setText("");
|
case 27:
|
||||||
myComboBox.setVisible(false);
|
main = "Esc";
|
||||||
}
|
break;
|
||||||
|
case 33:
|
||||||
private class MyItemListener implements ItemListener {
|
main = "Page Up";
|
||||||
public void itemStateChanged(ItemEvent e) {
|
break;
|
||||||
((ZLKeyOptionEntry) myOption).onValueChanged(myCurrentKey, myComboBox.getSelectedIndex());
|
case 34:
|
||||||
}
|
main = "Page Down";
|
||||||
}
|
break;
|
||||||
|
case 35:
|
||||||
private class MyKeyListener extends KeyAdapter {
|
main = "End";
|
||||||
|
break;
|
||||||
public void keyPressed(KeyEvent e) {
|
case 36:
|
||||||
final String modifiers = e.getModifiersExText(e.getModifiersEx());
|
main = "Home";
|
||||||
final int code = e.getKeyCode();
|
break;
|
||||||
String main;
|
case 37:
|
||||||
switch (code) {
|
main = "LeftArrow";
|
||||||
case 27:
|
break;
|
||||||
main = "Esc";
|
case 38:
|
||||||
break;
|
main = "UpArrow";
|
||||||
case 33:
|
break;
|
||||||
main = "Page Up";
|
case 39:
|
||||||
break;
|
main = "RightArrow";
|
||||||
case 34:
|
break;
|
||||||
main = "Page Down";
|
case 40:
|
||||||
break;
|
main = "DownArrow";
|
||||||
case 35:
|
break;
|
||||||
main = "End";
|
default:
|
||||||
break;
|
main = e.getKeyText(code);
|
||||||
case 36:
|
break;
|
||||||
main = "Home";
|
}
|
||||||
break;
|
final String keyCode = keyTextModifiersParse(modifiers) + keyTextParse(main);
|
||||||
case 37:
|
if (keyCode.equals("<Ctrl>+<Ctrl>") || keyCode.equals("<Shift>+<Shift>")) {
|
||||||
main = "LeftArrow";
|
myCurrentKey = "";
|
||||||
break;
|
} else {
|
||||||
case 38:
|
myCurrentKey = keyCode;
|
||||||
main = "UpArrow";
|
}
|
||||||
break;
|
myKeyEditor.setText(myCurrentKey);
|
||||||
case 39:
|
myComboBox.setVisible(!"".equals(myCurrentKey));
|
||||||
main = "RightArrow";
|
myComboBox.setSelectedIndex(((ZLKeyOptionEntry) myOption).actionIndex(myCurrentKey));
|
||||||
break;
|
((ZLKeyOptionEntry) myOption).onKeySelected(myCurrentKey);
|
||||||
case 40:
|
}
|
||||||
main = "DownArrow";
|
|
||||||
break;
|
private String keyTextParse(String str) {
|
||||||
default:
|
if (str.equals("Left") || str.equals("Down") ||
|
||||||
main = e.getKeyText(code);
|
str.equals("Right") || str.equals("Up")) {
|
||||||
break;
|
str = str + "Arrow";
|
||||||
}
|
} else if (str.equals("Escape")) {
|
||||||
final String keyCode = keyTextModifiersParse(modifiers) + keyTextParse(main);
|
str = "Esc";
|
||||||
if (keyCode.equals("<Ctrl>+<Ctrl>") || keyCode.equals("<Shift>+<Shift>")) {
|
} else if (str.equals("Equals")) {
|
||||||
myCurrentKey = "";
|
str = "=";
|
||||||
} else {
|
} else if (str.equals("Minus")) {
|
||||||
myCurrentKey = keyCode;
|
str = "-";
|
||||||
}
|
} else if (str.startsWith("Page")) {
|
||||||
myKeyEditor.setText(myCurrentKey);
|
str = "Page" + str.substring("Page".length() + 1, str.length());
|
||||||
myComboBox.setVisible(!"".equals(myCurrentKey));
|
} else if (str.equals("Enter")) {
|
||||||
myComboBox.setSelectedIndex(((ZLKeyOptionEntry) myOption).actionIndex(myCurrentKey));
|
str = "Return";
|
||||||
((ZLKeyOptionEntry) myOption).onKeySelected(myCurrentKey);
|
}
|
||||||
}
|
|
||||||
|
return "<" + str + ">";
|
||||||
private String keyTextParse(String str) {
|
}
|
||||||
if (str.equals("Left") || str.equals("Down") ||
|
|
||||||
str.equals("Right") || str.equals("Up")) {
|
private String keyTextModifiersParse(String str) {
|
||||||
str = str + "Arrow";
|
if (str.equals("")) {
|
||||||
} else if (str.equals("Escape")) {
|
return "";
|
||||||
str = "Esc";
|
}
|
||||||
} else if (str.equals("Equals")) {
|
return "<" + str + ">+";
|
||||||
str = "=";
|
}
|
||||||
} else if (str.equals("Minus")) {
|
}
|
||||||
str = "-";
|
|
||||||
} else if (str.startsWith("Page")) {
|
private static class KeyEditor extends JTextField {
|
||||||
str = "Page" + str.substring("Page".length() + 1, str.length());
|
public KeyEditor(String string) {
|
||||||
} else if (str.equals("Enter")) {
|
super(string);
|
||||||
str = "Return";
|
}
|
||||||
}
|
|
||||||
|
protected Document createDefaultModel() {
|
||||||
return "<" + str + ">";
|
return new KeyEditorDocument();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String keyTextModifiersParse(String str) {
|
private static class KeyEditorDocument extends PlainDocument {
|
||||||
if (str.equals("")) {
|
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
|
||||||
return "";
|
if (str == null) {
|
||||||
}
|
return;
|
||||||
return "<" + str + ">+";
|
}
|
||||||
}
|
if (str.startsWith("<") || str.startsWith("+")) {
|
||||||
|
super.insertString(offs, str, a);
|
||||||
}
|
} else {
|
||||||
|
super.insertString(offs, "", a);
|
||||||
|
}
|
||||||
|
}
|
||||||
private static class KeyEditor extends JTextField {
|
}
|
||||||
|
}
|
||||||
public KeyEditor(String string) {
|
}
|
||||||
super(string);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Document createDefaultModel() {
|
|
||||||
return new KeyEditorDocument();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class KeyEditorDocument extends PlainDocument {
|
|
||||||
|
|
||||||
public void insertString(int offs, String str, AttributeSet a)
|
|
||||||
throws BadLocationException {
|
|
||||||
|
|
||||||
if (str == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (str.startsWith("<") || str.startsWith("+")) {
|
|
||||||
super.insertString(offs, str, a);
|
|
||||||
} else {
|
|
||||||
super.insertString(offs, "", a);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
||||||
|
|
||||||
import org.geometerplus.zlibrary.core.dialogs.ZLDialog;
|
import org.geometerplus.zlibrary.core.dialogs.ZLDialog;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
||||||
|
|
||||||
import java.awt.GridBagConstraints;
|
import java.awt.GridBagConstraints;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
||||||
|
|
||||||
import java.awt.GridBagConstraints;
|
import java.awt.GridBagConstraints;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
package org.geometerplus.zlibrary.ui.swing.dialogs;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.image;
|
package org.geometerplus.zlibrary.ui.swing.image;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.image;
|
package org.geometerplus.zlibrary.ui.swing.image;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.library;
|
package org.geometerplus.zlibrary.ui.swing.library;
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.library;
|
package org.geometerplus.zlibrary.ui.swing.library;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.util;
|
package org.geometerplus.zlibrary.ui.swing.util;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.view;
|
package org.geometerplus.zlibrary.ui.swing.view;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.zlibrary.ui.swing.view;
|
package org.geometerplus.zlibrary.ui.swing.view;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.fbreader.bookmodel;
|
package org.geometerplus.fbreader.bookmodel;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
|
@ -16,291 +16,300 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
package org.geometerplus.fbreader.bookmodel;
|
|
||||||
|
package org.geometerplus.fbreader.bookmodel;
|
||||||
import java.util.*;
|
|
||||||
import org.geometerplus.zlibrary.core.util.*;
|
import java.util.*;
|
||||||
|
import org.geometerplus.zlibrary.core.util.*;
|
||||||
import org.geometerplus.zlibrary.core.image.ZLImage;
|
|
||||||
import org.geometerplus.zlibrary.core.util.ZLArrayUtils;
|
import org.geometerplus.zlibrary.core.image.ZLImage;
|
||||||
import org.geometerplus.zlibrary.core.util.ZLTextBuffer;
|
import org.geometerplus.zlibrary.core.util.ZLArrayUtils;
|
||||||
import org.geometerplus.zlibrary.text.model.ZLTextParagraph;
|
import org.geometerplus.zlibrary.core.util.ZLTextBuffer;
|
||||||
import org.geometerplus.zlibrary.text.model.ZLTextTreeParagraph;
|
import org.geometerplus.zlibrary.text.model.ZLTextParagraph;
|
||||||
import org.geometerplus.zlibrary.text.model.impl.ZLTextPlainModelImpl;
|
import org.geometerplus.zlibrary.text.model.ZLTextTreeParagraph;
|
||||||
|
import org.geometerplus.zlibrary.text.model.impl.ZLTextPlainModelImpl;
|
||||||
public class BookReader {
|
|
||||||
private final BookModel myBookModel;
|
public class BookReader {
|
||||||
private ZLTextPlainModelImpl myCurrentTextModel = null;
|
private final BookModel myBookModel;
|
||||||
|
private ZLTextPlainModelImpl myCurrentTextModel = null;
|
||||||
private boolean myTextParagraphExists = false;
|
|
||||||
|
private boolean myTextParagraphExists = false;
|
||||||
private final ZLTextBuffer myBuffer = new ZLTextBuffer();
|
|
||||||
private boolean myBufferIsNotEmpty = false;
|
private final ZLTextBuffer myBuffer = new ZLTextBuffer();
|
||||||
private final ZLTextBuffer myContentsBuffer = new ZLTextBuffer();
|
private boolean myBufferIsNotEmpty = false;
|
||||||
|
private final ZLTextBuffer myContentsBuffer = new ZLTextBuffer();
|
||||||
private byte[] myKindStack = new byte[20];
|
|
||||||
private int myKindStackSize;
|
private byte[] myKindStack = new byte[20];
|
||||||
|
private int myKindStackSize;
|
||||||
private byte myHyperlinkKind;
|
|
||||||
private String myHyperlinkReference = "";
|
private byte myHyperlinkKind;
|
||||||
|
private String myHyperlinkReference = "";
|
||||||
private boolean myInsideTitle = false;
|
|
||||||
private boolean mySectionContainsRegularContents = false;
|
private boolean myInsideTitle = false;
|
||||||
|
private boolean mySectionContainsRegularContents = false;
|
||||||
private boolean myContentsParagraphExists = false;
|
|
||||||
private final ArrayList myTOCStack = new ArrayList();
|
private boolean myContentsParagraphExists = false;
|
||||||
private boolean myLastTOCParagraphIsEmpty = false;
|
private final ArrayList myTOCStack = new ArrayList();
|
||||||
|
private boolean myLastTOCParagraphIsEmpty = false;
|
||||||
private final char[] PERIOD = "...".toCharArray();
|
|
||||||
|
private final char[] PERIOD = "...".toCharArray();
|
||||||
public BookReader(BookModel model) {
|
|
||||||
myBookModel = model;
|
public BookReader(BookModel model) {
|
||||||
}
|
myBookModel = model;
|
||||||
|
}
|
||||||
private final void flushTextBufferToParagraph() {
|
|
||||||
if (myBufferIsNotEmpty) {
|
private final void flushTextBufferToParagraph() {
|
||||||
final ZLTextBuffer buffer = myBuffer;
|
if (myBufferIsNotEmpty) {
|
||||||
myCurrentTextModel.addText(buffer);
|
final ZLTextBuffer buffer = myBuffer;
|
||||||
buffer.clear();
|
myCurrentTextModel.addText(buffer);
|
||||||
myBufferIsNotEmpty = false;
|
buffer.clear();
|
||||||
}
|
myBufferIsNotEmpty = false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public final void addControl(byte kind, boolean start) {
|
|
||||||
if (myTextParagraphExists) {
|
public final void addControl(byte kind, boolean start) {
|
||||||
flushTextBufferToParagraph();
|
if (myTextParagraphExists) {
|
||||||
myCurrentTextModel.addControl(kind, start);
|
flushTextBufferToParagraph();
|
||||||
}
|
myCurrentTextModel.addControl(kind, start);
|
||||||
if (!start && (myHyperlinkReference.length() != 0) && (kind == myHyperlinkKind)) {
|
}
|
||||||
myHyperlinkReference = "";
|
if (!start && (myHyperlinkReference.length() != 0) && (kind == myHyperlinkKind)) {
|
||||||
}
|
myHyperlinkReference = "";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public final void pushKind(byte kind) {
|
|
||||||
byte[] stack = myKindStack;
|
public final void pushKind(byte kind) {
|
||||||
if (stack.length == myKindStackSize) {
|
byte[] stack = myKindStack;
|
||||||
stack = ZLArrayUtils.createCopy(stack, myKindStackSize, myKindStackSize << 1);
|
if (stack.length == myKindStackSize) {
|
||||||
myKindStack = stack;
|
stack = ZLArrayUtils.createCopy(stack, myKindStackSize, myKindStackSize << 1);
|
||||||
}
|
myKindStack = stack;
|
||||||
stack[myKindStackSize++] = kind;
|
}
|
||||||
}
|
stack[myKindStackSize++] = kind;
|
||||||
|
}
|
||||||
public final boolean popKind() {
|
|
||||||
if (myKindStackSize != 0) {
|
public final boolean popKind() {
|
||||||
--myKindStackSize;
|
if (myKindStackSize != 0) {
|
||||||
return true;
|
--myKindStackSize;
|
||||||
}
|
return true;
|
||||||
return false;
|
}
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
public final void beginParagraph(byte kind) {
|
|
||||||
final ZLTextPlainModelImpl textModel = myCurrentTextModel;
|
public final void beginParagraph() {
|
||||||
if (textModel != null) {
|
beginParagraph(ZLTextParagraph.Kind.TEXT_PARAGRAPH);
|
||||||
textModel.createParagraph(kind);
|
}
|
||||||
final byte[] stack = myKindStack;
|
|
||||||
final int size = myKindStackSize;
|
public final void beginParagraph(byte kind) {
|
||||||
for (int i = 0; i < size; ++i) {
|
final ZLTextPlainModelImpl textModel = myCurrentTextModel;
|
||||||
textModel.addControl(stack[i], true);
|
if (textModel != null) {
|
||||||
}
|
textModel.createParagraph(kind);
|
||||||
if (myHyperlinkReference.length() != 0) {
|
final byte[] stack = myKindStack;
|
||||||
textModel.addHyperlinkControl(myHyperlinkKind, myHyperlinkReference);
|
final int size = myKindStackSize;
|
||||||
}
|
for (int i = 0; i < size; ++i) {
|
||||||
myTextParagraphExists = true;
|
textModel.addControl(stack[i], true);
|
||||||
}
|
}
|
||||||
}
|
if (myHyperlinkReference.length() != 0) {
|
||||||
|
textModel.addHyperlinkControl(myHyperlinkKind, myHyperlinkReference);
|
||||||
public final void endParagraph() {
|
}
|
||||||
if (myTextParagraphExists) {
|
myTextParagraphExists = true;
|
||||||
flushTextBufferToParagraph();
|
}
|
||||||
myTextParagraphExists = false;
|
}
|
||||||
}
|
|
||||||
}
|
public final void endParagraph() {
|
||||||
|
if (myTextParagraphExists) {
|
||||||
// new method
|
flushTextBufferToParagraph();
|
||||||
public boolean isTextParagraphExists() {
|
myTextParagraphExists = false;
|
||||||
return myTextParagraphExists;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final void insertEndParagraph(byte kind) {
|
// new method
|
||||||
final ZLTextPlainModelImpl textModel = myCurrentTextModel;
|
public boolean isTextParagraphExists() {
|
||||||
if ((textModel != null) && mySectionContainsRegularContents) {
|
return myTextParagraphExists;
|
||||||
int size = textModel.getParagraphsNumber();
|
}
|
||||||
if ((size > 0) && (textModel.getParagraph(size-1).getKind() != kind)) {
|
|
||||||
textModel.createParagraph(kind);
|
private final void insertEndParagraph(byte kind) {
|
||||||
mySectionContainsRegularContents = false;
|
final ZLTextPlainModelImpl textModel = myCurrentTextModel;
|
||||||
}
|
if ((textModel != null) && mySectionContainsRegularContents) {
|
||||||
}
|
int size = textModel.getParagraphsNumber();
|
||||||
}
|
if ((size > 0) && (textModel.getParagraph(size-1).getKind() != kind)) {
|
||||||
|
textModel.createParagraph(kind);
|
||||||
public final void insertEndOfSectionParagraph() {
|
mySectionContainsRegularContents = false;
|
||||||
insertEndParagraph(ZLTextParagraph.Kind.END_OF_SECTION_PARAGRAPH);
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public final void unsetCurrentTextModel() {
|
|
||||||
myCurrentTextModel = null;
|
public final void insertEndOfSectionParagraph() {
|
||||||
}
|
insertEndParagraph(ZLTextParagraph.Kind.END_OF_SECTION_PARAGRAPH);
|
||||||
|
}
|
||||||
public final void enterTitle() {
|
|
||||||
myInsideTitle = true;
|
public final void unsetCurrentTextModel() {
|
||||||
}
|
myCurrentTextModel = null;
|
||||||
|
}
|
||||||
public final void exitTitle() {
|
|
||||||
myInsideTitle = false;
|
public final void enterTitle() {
|
||||||
}
|
myInsideTitle = true;
|
||||||
|
}
|
||||||
public final void setMainTextModel() {
|
|
||||||
myCurrentTextModel = myBookModel.getBookTextModel();
|
public final void exitTitle() {
|
||||||
}
|
myInsideTitle = false;
|
||||||
|
}
|
||||||
public final void setFootnoteTextModel(String id) {
|
|
||||||
myCurrentTextModel = myBookModel.getFootnoteModel(id);
|
public final void setMainTextModel() {
|
||||||
}
|
myCurrentTextModel = myBookModel.getBookTextModel();
|
||||||
|
}
|
||||||
public final void addData(char[] data) {
|
|
||||||
addData(data, 0, data.length);
|
public final void setFootnoteTextModel(String id) {
|
||||||
}
|
myCurrentTextModel = myBookModel.getFootnoteModel(id);
|
||||||
|
}
|
||||||
public final void addData(char[] data, int offset, int length) {
|
|
||||||
if (myTextParagraphExists) {
|
public final void addData(char[] data) {
|
||||||
myBuffer.append(data, offset, length);
|
addData(data, 0, data.length);
|
||||||
myBufferIsNotEmpty = true;
|
}
|
||||||
if (!myInsideTitle) {
|
|
||||||
mySectionContainsRegularContents = true;
|
public final void addData(char[] data, int offset, int length) {
|
||||||
} else {
|
if (myTextParagraphExists) {
|
||||||
addContentsData(data, offset, length);
|
myBuffer.append(data, offset, length);
|
||||||
}
|
myBufferIsNotEmpty = true;
|
||||||
}
|
if (!myInsideTitle) {
|
||||||
}
|
mySectionContainsRegularContents = true;
|
||||||
|
} else {
|
||||||
public final void addDataFinal(char[] data, int offset, int length) {
|
addContentsData(data, offset, length);
|
||||||
if (myBufferIsNotEmpty) {
|
}
|
||||||
addData(data, offset, length);
|
}
|
||||||
} else {
|
}
|
||||||
if (myTextParagraphExists) {
|
|
||||||
myCurrentTextModel.addText(data, offset, length);
|
public final void addDataFinal(char[] data, int offset, int length) {
|
||||||
if (!myInsideTitle) {
|
if (myBufferIsNotEmpty) {
|
||||||
mySectionContainsRegularContents = true;
|
addData(data, offset, length);
|
||||||
} else {
|
} else {
|
||||||
addContentsData(data, offset, length);
|
if (myTextParagraphExists) {
|
||||||
}
|
myCurrentTextModel.addText(data, offset, length);
|
||||||
}
|
if (!myInsideTitle) {
|
||||||
}
|
mySectionContainsRegularContents = true;
|
||||||
}
|
} else {
|
||||||
|
addContentsData(data, offset, length);
|
||||||
public final void addHyperlinkControl(byte kind, String label) {
|
}
|
||||||
if (myTextParagraphExists) {
|
}
|
||||||
flushTextBufferToParagraph();
|
}
|
||||||
myCurrentTextModel.addHyperlinkControl(kind, label);
|
}
|
||||||
}
|
|
||||||
myHyperlinkKind = kind;
|
public final void addHyperlinkControl(byte kind, String label) {
|
||||||
myHyperlinkReference = label;
|
if (myTextParagraphExists) {
|
||||||
}
|
flushTextBufferToParagraph();
|
||||||
|
myCurrentTextModel.addHyperlinkControl(kind, label);
|
||||||
public final void addHyperlinkLabel(String label) {
|
}
|
||||||
final ZLTextPlainModelImpl textModel = myCurrentTextModel;
|
myHyperlinkKind = kind;
|
||||||
if (textModel != null) {
|
myHyperlinkReference = label;
|
||||||
int paragraphNumber = textModel.getParagraphsNumber();
|
}
|
||||||
if (myTextParagraphExists) {
|
|
||||||
--paragraphNumber;
|
public final void addHyperlinkLabel(String label) {
|
||||||
}
|
final ZLTextPlainModelImpl textModel = myCurrentTextModel;
|
||||||
myBookModel.addHyperlinkLabel(label, textModel, paragraphNumber);
|
if (textModel != null) {
|
||||||
}
|
int paragraphNumber = textModel.getParagraphsNumber();
|
||||||
}
|
if (myTextParagraphExists) {
|
||||||
|
--paragraphNumber;
|
||||||
public final void addContentsData(char[] data) {
|
}
|
||||||
addContentsData(data, 0, data.length);
|
myBookModel.addHyperlinkLabel(label, textModel, paragraphNumber);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public final void addContentsData(char[] data, int offset, int length) {
|
|
||||||
if ((length != 0) && !myTOCStack.isEmpty()) {
|
public final void addContentsData(char[] data) {
|
||||||
myContentsBuffer.append(data, offset, length);
|
addContentsData(data, 0, data.length);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public final void addContentsData(char[] data, int offset, int length) {
|
||||||
public final void beginContentsParagraph(int referenceNumber) {
|
if ((length != 0) && !myTOCStack.isEmpty()) {
|
||||||
final ZLTextPlainModelImpl textModel = myCurrentTextModel;
|
myContentsBuffer.append(data, offset, length);
|
||||||
final ArrayList tocStack = myTOCStack;
|
}
|
||||||
if (textModel == myBookModel.getBookTextModel()) {
|
}
|
||||||
ContentsModel contentsModel = myBookModel.getContentsModel();
|
|
||||||
if (referenceNumber == -1) {
|
public final void beginContentsParagraph(int referenceNumber) {
|
||||||
referenceNumber = textModel.getParagraphsNumber();
|
final ZLTextPlainModelImpl textModel = myCurrentTextModel;
|
||||||
}
|
final ArrayList tocStack = myTOCStack;
|
||||||
int size = tocStack.size();
|
if (textModel == myBookModel.getBookTextModel()) {
|
||||||
ZLTextTreeParagraph peek = (size != 0) ? (ZLTextTreeParagraph)tocStack.get(size - 1) : null;
|
ContentsModel contentsModel = myBookModel.getContentsModel();
|
||||||
final ZLTextBuffer contentsBuffer = myContentsBuffer;
|
if (referenceNumber == -1) {
|
||||||
if (!contentsBuffer.isEmpty()) {
|
referenceNumber = textModel.getParagraphsNumber();
|
||||||
contentsModel.addText(contentsBuffer);
|
}
|
||||||
contentsBuffer.clear();
|
int size = tocStack.size();
|
||||||
myLastTOCParagraphIsEmpty = false;
|
ZLTextTreeParagraph peek = (size != 0) ? (ZLTextTreeParagraph)tocStack.get(size - 1) : null;
|
||||||
} else if (myLastTOCParagraphIsEmpty) {
|
final ZLTextBuffer contentsBuffer = myContentsBuffer;
|
||||||
contentsModel.addText(PERIOD);
|
if (!contentsBuffer.isEmpty()) {
|
||||||
}
|
contentsModel.addText(contentsBuffer);
|
||||||
ZLTextTreeParagraph para = contentsModel.createParagraph(peek);
|
contentsBuffer.clear();
|
||||||
contentsModel.addControl(FBTextKind.CONTENTS_TABLE_ENTRY, true);
|
myLastTOCParagraphIsEmpty = false;
|
||||||
contentsModel.setReference(para, referenceNumber);
|
} else if (myLastTOCParagraphIsEmpty) {
|
||||||
tocStack.add(para);
|
contentsModel.addText(PERIOD);
|
||||||
myLastTOCParagraphIsEmpty = true;
|
}
|
||||||
myContentsParagraphExists = true;
|
ZLTextTreeParagraph para = contentsModel.createParagraph(peek);
|
||||||
}
|
contentsModel.addControl(FBTextKind.CONTENTS_TABLE_ENTRY, true);
|
||||||
}
|
contentsModel.setReference(para, referenceNumber);
|
||||||
|
tocStack.add(para);
|
||||||
public final void endContentsParagraph() {
|
myLastTOCParagraphIsEmpty = true;
|
||||||
final ArrayList tocStack = myTOCStack;
|
myContentsParagraphExists = true;
|
||||||
if (!tocStack.isEmpty()) {
|
}
|
||||||
ContentsModel contentsModel = myBookModel.getContentsModel();
|
}
|
||||||
final ZLTextBuffer contentsBuffer = myContentsBuffer;
|
|
||||||
if (!contentsBuffer.isEmpty()) {
|
public final void endContentsParagraph() {
|
||||||
contentsModel.addText(contentsBuffer);
|
final ArrayList tocStack = myTOCStack;
|
||||||
contentsBuffer.clear();
|
if (!tocStack.isEmpty()) {
|
||||||
myLastTOCParagraphIsEmpty = false;
|
ContentsModel contentsModel = myBookModel.getContentsModel();
|
||||||
} else if (myLastTOCParagraphIsEmpty) {
|
final ZLTextBuffer contentsBuffer = myContentsBuffer;
|
||||||
contentsModel.addText(PERIOD);
|
if (!contentsBuffer.isEmpty()) {
|
||||||
myLastTOCParagraphIsEmpty = false;
|
contentsModel.addText(contentsBuffer);
|
||||||
}
|
contentsBuffer.clear();
|
||||||
tocStack.remove(tocStack.size() - 1);
|
myLastTOCParagraphIsEmpty = false;
|
||||||
}
|
} else if (myLastTOCParagraphIsEmpty) {
|
||||||
myContentsParagraphExists = false;
|
contentsModel.addText(PERIOD);
|
||||||
}
|
myLastTOCParagraphIsEmpty = false;
|
||||||
|
}
|
||||||
public final void setReference(int contentsParagraphNumber, int referenceNumber) {
|
tocStack.remove(tocStack.size() - 1);
|
||||||
ContentsModel contentsModel = myBookModel.getContentsModel();
|
}
|
||||||
if (contentsParagraphNumber < contentsModel.getParagraphsNumber()) {
|
myContentsParagraphExists = false;
|
||||||
contentsModel.setReference(
|
}
|
||||||
contentsModel.getTreeParagraph(contentsParagraphNumber), referenceNumber
|
|
||||||
);
|
public final void setReference(int contentsParagraphNumber, int referenceNumber) {
|
||||||
}
|
ContentsModel contentsModel = myBookModel.getContentsModel();
|
||||||
}
|
if (contentsParagraphNumber < contentsModel.getParagraphsNumber()) {
|
||||||
|
contentsModel.setReference(
|
||||||
public final boolean contentsParagraphIsOpen() {
|
contentsModel.getTreeParagraph(contentsParagraphNumber), referenceNumber
|
||||||
return myContentsParagraphExists;
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public final void beginContentsParagraph() {
|
|
||||||
beginContentsParagraph(-1);
|
public final boolean paragraphIsOpen() {
|
||||||
}
|
return myTextParagraphExists;
|
||||||
|
}
|
||||||
public final BookModel getModel() {
|
|
||||||
return myBookModel;
|
public final boolean contentsParagraphIsOpen() {
|
||||||
}
|
return myContentsParagraphExists;
|
||||||
|
}
|
||||||
public final void addImageReference(String ref, short offset) {
|
|
||||||
final ZLTextPlainModelImpl textModel = myCurrentTextModel;
|
public final void beginContentsParagraph() {
|
||||||
if (textModel != null) {
|
beginContentsParagraph(-1);
|
||||||
mySectionContainsRegularContents = true;
|
}
|
||||||
if (myTextParagraphExists) {
|
|
||||||
flushTextBufferToParagraph();
|
public final BookModel getModel() {
|
||||||
textModel.addImage(ref, myBookModel.getImageMap(), offset);
|
return myBookModel;
|
||||||
} else {
|
}
|
||||||
beginParagraph(ZLTextParagraph.Kind.TEXT_PARAGRAPH);
|
|
||||||
textModel.addControl(FBTextKind.IMAGE, true);
|
public final void addImageReference(String ref, short offset) {
|
||||||
textModel.addImage(ref, myBookModel.getImageMap(), offset);
|
final ZLTextPlainModelImpl textModel = myCurrentTextModel;
|
||||||
textModel.addControl(FBTextKind.IMAGE, false);
|
if (textModel != null) {
|
||||||
endParagraph();
|
mySectionContainsRegularContents = true;
|
||||||
}
|
if (myTextParagraphExists) {
|
||||||
}
|
flushTextBufferToParagraph();
|
||||||
}
|
textModel.addImage(ref, myBookModel.getImageMap(), offset);
|
||||||
|
} else {
|
||||||
public final void addImage(String id, ZLImage image) {
|
beginParagraph(ZLTextParagraph.Kind.TEXT_PARAGRAPH);
|
||||||
myBookModel.addImage(id, image);
|
textModel.addControl(FBTextKind.IMAGE, true);
|
||||||
}
|
textModel.addImage(ref, myBookModel.getImageMap(), offset);
|
||||||
}
|
textModel.addControl(FBTextKind.IMAGE, false);
|
||||||
|
endParagraph();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void addImage(String id, ZLImage image) {
|
||||||
|
myBookModel.addImage(id, image);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.fbreader.bookmodel;
|
package org.geometerplus.fbreader.bookmodel;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.fbreader.bookmodel;
|
package org.geometerplus.fbreader.bookmodel;
|
||||||
|
|
||||||
public interface FBTextKind {
|
public interface FBTextKind {
|
||||||
|
|
|
@ -16,320 +16,321 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
package org.geometerplus.fbreader.collection;
|
|
||||||
|
package org.geometerplus.fbreader.collection;
|
||||||
import java.io.*;
|
|
||||||
import java.util.*;
|
import java.io.*;
|
||||||
import org.geometerplus.zlibrary.core.util.*;
|
import java.util.*;
|
||||||
|
import org.geometerplus.zlibrary.core.util.*;
|
||||||
import org.geometerplus.fbreader.description.Author;
|
|
||||||
import org.geometerplus.fbreader.description.BookDescription;
|
import org.geometerplus.fbreader.description.Author;
|
||||||
import org.geometerplus.fbreader.description.BookDescriptionUtil;
|
import org.geometerplus.fbreader.description.BookDescription;
|
||||||
import org.geometerplus.fbreader.formats.FormatPlugin.PluginCollection;
|
import org.geometerplus.fbreader.description.BookDescriptionUtil;
|
||||||
import org.geometerplus.zlibrary.core.filesystem.ZLDir;
|
import org.geometerplus.fbreader.formats.FormatPlugin.PluginCollection;
|
||||||
import org.geometerplus.zlibrary.core.filesystem.ZLFile;
|
import org.geometerplus.zlibrary.core.filesystem.ZLDir;
|
||||||
import org.geometerplus.zlibrary.core.options.ZLBooleanOption;
|
import org.geometerplus.zlibrary.core.filesystem.ZLFile;
|
||||||
import org.geometerplus.zlibrary.core.options.ZLIntegerRangeOption;
|
import org.geometerplus.zlibrary.core.options.ZLBooleanOption;
|
||||||
import org.geometerplus.zlibrary.core.options.ZLOption;
|
import org.geometerplus.zlibrary.core.options.ZLIntegerRangeOption;
|
||||||
import org.geometerplus.zlibrary.core.options.ZLStringOption;
|
import org.geometerplus.zlibrary.core.options.ZLOption;
|
||||||
|
import org.geometerplus.zlibrary.core.options.ZLStringOption;
|
||||||
public class BookCollection {
|
|
||||||
public final ZLStringOption PathOption;
|
public class BookCollection {
|
||||||
public final ZLBooleanOption ScanSubdirsOption;
|
public final ZLStringOption PathOption;
|
||||||
private final static String OPTIONS = "Options";
|
public final ZLBooleanOption ScanSubdirsOption;
|
||||||
|
private final static String OPTIONS = "Options";
|
||||||
private final ArrayList/*Author*/ myAuthors = new ArrayList();
|
|
||||||
private HashMap/*<Author, ArrayList<Description>>*/ myCollection = new HashMap();
|
private final ArrayList/*Author*/ myAuthors = new ArrayList();
|
||||||
private final ArrayList myExternalBooks = new ArrayList();
|
private HashMap/*<Author, ArrayList<Description>>*/ myCollection = new HashMap();
|
||||||
|
private final ArrayList myExternalBooks = new ArrayList();
|
||||||
private String myPath;
|
|
||||||
private boolean myScanSubdirs;
|
private String myPath;
|
||||||
private boolean myDoStrongRebuild;
|
private boolean myScanSubdirs;
|
||||||
private boolean myDoWeakRebuild;
|
private boolean myDoStrongRebuild;
|
||||||
|
private boolean myDoWeakRebuild;
|
||||||
public BookCollection() {
|
|
||||||
PathOption = new ZLStringOption(ZLOption.CONFIG_CATEGORY, OPTIONS, "BookPath", "/home/geometer/FBooks");
|
public BookCollection() {
|
||||||
ScanSubdirsOption = new ZLBooleanOption(ZLOption.CONFIG_CATEGORY, OPTIONS, "ScanSubdirs", false);
|
PathOption = new ZLStringOption(ZLOption.CONFIG_CATEGORY, OPTIONS, "BookPath", "/FBooks");
|
||||||
myDoStrongRebuild = true;
|
ScanSubdirsOption = new ZLBooleanOption(ZLOption.CONFIG_CATEGORY, OPTIONS, "ScanSubdirs", false);
|
||||||
myDoWeakRebuild = false;
|
myDoStrongRebuild = true;
|
||||||
}
|
myDoWeakRebuild = false;
|
||||||
|
}
|
||||||
private void addExternalBook(BookDescription bookDescription) {
|
|
||||||
if (!myExternalBooks.contains(bookDescription)) {
|
private void addExternalBook(BookDescription bookDescription) {
|
||||||
myExternalBooks.add(bookDescription);
|
if (!myExternalBooks.contains(bookDescription)) {
|
||||||
}
|
myExternalBooks.add(bookDescription);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public ArrayList authors() {
|
|
||||||
synchronize();
|
public ArrayList authors() {
|
||||||
return myAuthors;
|
synchronize();
|
||||||
}
|
return myAuthors;
|
||||||
|
}
|
||||||
public ArrayList books(Author author) {
|
|
||||||
synchronize();
|
public ArrayList books(Author author) {
|
||||||
return (ArrayList)myCollection.get(author);
|
synchronize();
|
||||||
}
|
return (ArrayList)myCollection.get(author);
|
||||||
|
}
|
||||||
public boolean isBookExternal(BookDescription description) {
|
|
||||||
synchronize();
|
public boolean isBookExternal(BookDescription description) {
|
||||||
return myExternalBooks.contains(description);
|
synchronize();
|
||||||
}
|
return myExternalBooks.contains(description);
|
||||||
|
}
|
||||||
public void rebuild(boolean strong) {
|
|
||||||
if (strong) {
|
public void rebuild(boolean strong) {
|
||||||
myDoStrongRebuild = true;
|
if (strong) {
|
||||||
} else {
|
myDoStrongRebuild = true;
|
||||||
myDoWeakRebuild = true;
|
} else {
|
||||||
}
|
myDoWeakRebuild = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public boolean synchronize() {
|
|
||||||
boolean doStrongRebuild =
|
public boolean synchronize() {
|
||||||
myDoStrongRebuild ||
|
boolean doStrongRebuild =
|
||||||
(myScanSubdirs != ScanSubdirsOption.getValue()) ||
|
myDoStrongRebuild ||
|
||||||
(myPath != PathOption.getValue());
|
(myScanSubdirs != ScanSubdirsOption.getValue()) ||
|
||||||
|
(myPath != PathOption.getValue());
|
||||||
if (!doStrongRebuild && !myDoWeakRebuild) {
|
|
||||||
return false;
|
if (!doStrongRebuild && !myDoWeakRebuild) {
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
myPath = PathOption.getValue();
|
|
||||||
myScanSubdirs = ScanSubdirsOption.getValue();
|
myPath = PathOption.getValue();
|
||||||
myDoWeakRebuild = false;
|
myScanSubdirs = ScanSubdirsOption.getValue();
|
||||||
myDoStrongRebuild = false;
|
myDoWeakRebuild = false;
|
||||||
|
myDoStrongRebuild = false;
|
||||||
if (doStrongRebuild) {
|
|
||||||
myAuthors.clear();
|
if (doStrongRebuild) {
|
||||||
myCollection.clear();
|
myAuthors.clear();
|
||||||
myExternalBooks.clear();
|
myCollection.clear();
|
||||||
|
myExternalBooks.clear();
|
||||||
final ArrayList fileNamesSet = collectBookFileNames();
|
|
||||||
final int sizeOfSet = fileNamesSet.size();
|
final ArrayList fileNamesSet = collectBookFileNames();
|
||||||
for (int i = 0; i < sizeOfSet; ++i) {
|
final int sizeOfSet = fileNamesSet.size();
|
||||||
addDescription(BookDescription.getDescription((String)fileNamesSet.get(i)));
|
for (int i = 0; i < sizeOfSet; ++i) {
|
||||||
}
|
addDescription(BookDescription.getDescription((String)fileNamesSet.get(i)));
|
||||||
|
}
|
||||||
final ArrayList bookListFileNames = new BookList().fileNames();
|
|
||||||
final int sizeOfList = bookListFileNames.size();
|
final ArrayList bookListFileNames = new BookList().fileNames();
|
||||||
for (int i = 0; i < sizeOfList; ++i) {
|
final int sizeOfList = bookListFileNames.size();
|
||||||
final String fileName = (String)bookListFileNames.get(i);
|
for (int i = 0; i < sizeOfList; ++i) {
|
||||||
if (!fileNamesSet.contains(fileName)) {
|
final String fileName = (String)bookListFileNames.get(i);
|
||||||
BookDescription description = BookDescription.getDescription(fileName);
|
if (!fileNamesSet.contains(fileName)) {
|
||||||
if (description != null) {
|
BookDescription description = BookDescription.getDescription(fileName);
|
||||||
addDescription(description);
|
if (description != null) {
|
||||||
addExternalBook(description);
|
addDescription(description);
|
||||||
}
|
addExternalBook(description);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
//System.out.println("strange code form BookCollection");
|
} else {
|
||||||
// something strange :(
|
//System.out.println("strange code form BookCollection");
|
||||||
final BookList bookList = new BookList();
|
// something strange :(
|
||||||
final ArrayList bookListSet = bookList.fileNames();
|
final BookList bookList = new BookList();
|
||||||
final ArrayList fileNames = new ArrayList();
|
final ArrayList bookListSet = bookList.fileNames();
|
||||||
|
final ArrayList fileNames = new ArrayList();
|
||||||
// TEMPORARY COMMENTED FOR J2ME COMPILABILITY
|
|
||||||
final ArrayList list = new ArrayList(myCollection.keySet());
|
// TEMPORARY COMMENTED FOR J2ME COMPILABILITY
|
||||||
for (int i = 0; i < list.size(); ++i) {
|
final ArrayList list = new ArrayList(myCollection.keySet());
|
||||||
final ArrayList books = (ArrayList)myCollection.get(list.get(i));
|
for (int i = 0; i < list.size(); ++i) {
|
||||||
final int numberOfBooks = books.size();
|
final ArrayList books = (ArrayList)myCollection.get(list.get(i));
|
||||||
for (int j = 0; j < numberOfBooks; ++j) {
|
final int numberOfBooks = books.size();
|
||||||
final BookDescription description = (BookDescription)books.get(j);
|
for (int j = 0; j < numberOfBooks; ++j) {
|
||||||
final String fileName = description.getFileName();
|
final BookDescription description = (BookDescription)books.get(j);
|
||||||
if (!myExternalBooks.contains(description) || bookListSet.contains(fileName)) {
|
final String fileName = description.getFileName();
|
||||||
fileNames.add(fileName);
|
if (!myExternalBooks.contains(description) || bookListSet.contains(fileName)) {
|
||||||
}
|
fileNames.add(fileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
myCollection.clear();
|
|
||||||
myAuthors.clear();
|
myCollection.clear();
|
||||||
final int fileNamesSize = fileNames.size();
|
myAuthors.clear();
|
||||||
for (int i = 0; i < fileNamesSize; ++i) {
|
final int fileNamesSize = fileNames.size();
|
||||||
addDescription(BookDescription.getDescription((String)fileNames.get(i), false));
|
for (int i = 0; i < fileNamesSize; ++i) {
|
||||||
}
|
addDescription(BookDescription.getDescription((String)fileNames.get(i), false));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (myAuthors != null) {
|
|
||||||
Collections.sort(myAuthors, new Author.AuthorComparator());
|
if (myAuthors != null) {
|
||||||
}
|
Collections.sort(myAuthors, new Author.AuthorComparator());
|
||||||
DescriptionComparator descriptionComparator = new DescriptionComparator();
|
}
|
||||||
for (Iterator it = myCollection.keySet().iterator(); it.hasNext();) {
|
DescriptionComparator descriptionComparator = new DescriptionComparator();
|
||||||
ArrayList list = (ArrayList)myCollection.get(it.next());
|
for (Iterator it = myCollection.keySet().iterator(); it.hasNext();) {
|
||||||
if (list != null) {
|
ArrayList list = (ArrayList)myCollection.get(it.next());
|
||||||
Collections.sort(list, descriptionComparator);
|
if (list != null) {
|
||||||
}
|
Collections.sort(list, descriptionComparator);
|
||||||
}
|
}
|
||||||
return true;
|
}
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
private ArrayList collectDirNames() {
|
|
||||||
ArrayList nameQueue = new ArrayList();
|
private ArrayList collectDirNames() {
|
||||||
ArrayList nameSet = new ArrayList();
|
ArrayList nameQueue = new ArrayList();
|
||||||
|
ArrayList nameSet = new ArrayList();
|
||||||
String path = myPath;
|
|
||||||
int pos = path.indexOf(File.pathSeparator);
|
String path = myPath;
|
||||||
while (pos != -1) {
|
int pos = path.indexOf(File.pathSeparator);
|
||||||
nameQueue.add(path.substring(0, pos));
|
while (pos != -1) {
|
||||||
path = path.substring(0, pos + 1);
|
nameQueue.add(path.substring(0, pos));
|
||||||
pos = path.indexOf(File.pathSeparator);
|
path = path.substring(0, pos + 1);
|
||||||
}
|
pos = path.indexOf(File.pathSeparator);
|
||||||
if (path.length() != 0) {
|
}
|
||||||
nameQueue.add(path);
|
if (path.length() != 0) {
|
||||||
}
|
nameQueue.add(path);
|
||||||
|
}
|
||||||
while (!nameQueue.isEmpty()) {
|
|
||||||
String name = (String)nameQueue.get(0);
|
while (!nameQueue.isEmpty()) {
|
||||||
nameQueue.remove(0);
|
String name = (String)nameQueue.get(0);
|
||||||
if (!nameSet.contains(name)) {
|
nameQueue.remove(0);
|
||||||
if (myScanSubdirs) {
|
if (!nameSet.contains(name)) {
|
||||||
ZLDir dir = new ZLFile(name).getDirectory();
|
if (myScanSubdirs) {
|
||||||
if (dir != null) {
|
ZLDir dir = new ZLFile(name).getDirectory();
|
||||||
ArrayList subdirs = dir.collectSubDirs();
|
if (dir != null) {
|
||||||
for (int i = 0; i < subdirs.size(); ++i) {
|
ArrayList subdirs = dir.collectSubDirs();
|
||||||
nameQueue.add(dir.getItemPath((String)subdirs.get(i)));
|
for (int i = 0; i < subdirs.size(); ++i) {
|
||||||
}
|
nameQueue.add(dir.getItemPath((String)subdirs.get(i)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
nameSet.add(name);
|
}
|
||||||
}
|
nameSet.add(name);
|
||||||
}
|
}
|
||||||
return nameSet;
|
}
|
||||||
}
|
return nameSet;
|
||||||
|
}
|
||||||
private ArrayList collectBookFileNames() {
|
|
||||||
final ArrayList bookFileNames = new ArrayList();
|
private ArrayList collectBookFileNames() {
|
||||||
final ArrayList dirs = collectDirNames();
|
final ArrayList bookFileNames = new ArrayList();
|
||||||
final int numberOfDirs = dirs.size();
|
final ArrayList dirs = collectDirNames();
|
||||||
for (int i = 0; i < numberOfDirs; ++i) {
|
final int numberOfDirs = dirs.size();
|
||||||
final String dirfile = (String)dirs.get(i);
|
for (int i = 0; i < numberOfDirs; ++i) {
|
||||||
final ZLDir dir = new ZLFile(dirfile).getDirectory();
|
final String dirfile = (String)dirs.get(i);
|
||||||
if (dir == null) {
|
final ZLDir dir = new ZLFile(dirfile).getDirectory();
|
||||||
continue;
|
if (dir == null) {
|
||||||
}
|
continue;
|
||||||
|
}
|
||||||
final ArrayList files = dir.collectFiles();
|
|
||||||
|
final ArrayList files = dir.collectFiles();
|
||||||
final int numberOfFiles = files.size();
|
|
||||||
for (int j = 0; j < numberOfFiles; ++j) {
|
final int numberOfFiles = files.size();
|
||||||
String fileName = dir.getItemPath((String)files.get(j));
|
for (int j = 0; j < numberOfFiles; ++j) {
|
||||||
ZLFile file = new ZLFile(fileName);
|
String fileName = dir.getItemPath((String)files.get(j));
|
||||||
if (PluginCollection.instance().getPlugin(file, true) != null) {
|
ZLFile file = new ZLFile(fileName);
|
||||||
if (!bookFileNames.contains(fileName)) {
|
if (PluginCollection.instance().getPlugin(file, true) != null) {
|
||||||
bookFileNames.add(fileName);
|
if (!bookFileNames.contains(fileName)) {
|
||||||
}
|
bookFileNames.add(fileName);
|
||||||
// TODO: zip -> any archive
|
}
|
||||||
} else if (file.getExtension().equals("zip")) {
|
// TODO: zip -> any archive
|
||||||
if (!BookDescriptionUtil.checkInfo(file)) {
|
} else if (file.getExtension().equals("zip")) {
|
||||||
BookDescriptionUtil.resetZipInfo(file);
|
if (!BookDescriptionUtil.checkInfo(file)) {
|
||||||
BookDescriptionUtil.saveInfo(file);
|
BookDescriptionUtil.resetZipInfo(file);
|
||||||
}
|
BookDescriptionUtil.saveInfo(file);
|
||||||
final ArrayList zipEntries = new ArrayList();
|
}
|
||||||
BookDescriptionUtil.listZipEntries(file, zipEntries);
|
final ArrayList zipEntries = new ArrayList();
|
||||||
final int numberOfZipEntries = zipEntries.size();
|
BookDescriptionUtil.listZipEntries(file, zipEntries);
|
||||||
for (int k = 0; k < numberOfZipEntries; ++k) {
|
final int numberOfZipEntries = zipEntries.size();
|
||||||
String str = (String)zipEntries.get(k);
|
for (int k = 0; k < numberOfZipEntries; ++k) {
|
||||||
if (!bookFileNames.contains(str)) {
|
String str = (String)zipEntries.get(k);
|
||||||
bookFileNames.add(str);
|
if (!bookFileNames.contains(str)) {
|
||||||
}
|
bookFileNames.add(str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bookFileNames;
|
}
|
||||||
}
|
return bookFileNames;
|
||||||
|
}
|
||||||
private void addDescription(BookDescription description) {
|
|
||||||
if (description == null) {
|
private void addDescription(BookDescription description) {
|
||||||
return;
|
if (description == null) {
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
final Author author = description.getAuthor();
|
|
||||||
ArrayList books = (ArrayList)myCollection.get(author);
|
final Author author = description.getAuthor();
|
||||||
if (books == null) {
|
ArrayList books = (ArrayList)myCollection.get(author);
|
||||||
books = new ArrayList();
|
if (books == null) {
|
||||||
myCollection.put(author, books);
|
books = new ArrayList();
|
||||||
myAuthors.add(author);
|
myCollection.put(author, books);
|
||||||
}
|
myAuthors.add(author);
|
||||||
books.add(description);
|
}
|
||||||
}
|
books.add(description);
|
||||||
|
}
|
||||||
private class DescriptionComparator implements Comparator {
|
|
||||||
public int compare(Object descr1, Object descr2) {
|
private class DescriptionComparator implements Comparator {
|
||||||
BookDescription d1 = (BookDescription)descr1;
|
public int compare(Object descr1, Object descr2) {
|
||||||
BookDescription d2 = (BookDescription)descr2;
|
BookDescription d1 = (BookDescription)descr1;
|
||||||
String sequenceName1 = d1.getSequenceName();
|
BookDescription d2 = (BookDescription)descr2;
|
||||||
String sequenceName2 = d2.getSequenceName();
|
String sequenceName1 = d1.getSequenceName();
|
||||||
|
String sequenceName2 = d2.getSequenceName();
|
||||||
if ((sequenceName1.length() == 0) && (sequenceName2.length() == 0)) {
|
|
||||||
return d1.getTitle().compareTo(d2.getTitle());
|
if ((sequenceName1.length() == 0) && (sequenceName2.length() == 0)) {
|
||||||
}
|
return d1.getTitle().compareTo(d2.getTitle());
|
||||||
if (sequenceName1.length() == 0) {
|
}
|
||||||
return d1.getTitle().compareTo(sequenceName2);
|
if (sequenceName1.length() == 0) {
|
||||||
}
|
return d1.getTitle().compareTo(sequenceName2);
|
||||||
if (sequenceName2.length() == 0) {
|
}
|
||||||
return sequenceName1.compareTo(d2.getTitle());
|
if (sequenceName2.length() == 0) {
|
||||||
}
|
return sequenceName1.compareTo(d2.getTitle());
|
||||||
if (!sequenceName1.equals(sequenceName2)) {
|
}
|
||||||
return sequenceName1.compareTo(sequenceName2);
|
if (!sequenceName1.equals(sequenceName2)) {
|
||||||
}
|
return sequenceName1.compareTo(sequenceName2);
|
||||||
return (d1.getNumberInSequence() - d2.getNumberInSequence());
|
}
|
||||||
}
|
return (d1.getNumberInSequence() - d2.getNumberInSequence());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
static public class LastOpenedBooks {
|
|
||||||
public ZLIntegerRangeOption MaxListSizeOption;
|
static public class LastOpenedBooks {
|
||||||
static private final String GROUP = "LastOpenedBooks";
|
public ZLIntegerRangeOption MaxListSizeOption;
|
||||||
static private final String BOOK = "Book";
|
static private final String GROUP = "LastOpenedBooks";
|
||||||
private final ArrayList/*BookDescription*/ myBooks = new ArrayList();
|
static private final String BOOK = "Book";
|
||||||
|
private final ArrayList/*BookDescription*/ myBooks = new ArrayList();
|
||||||
public LastOpenedBooks() {
|
|
||||||
MaxListSizeOption = new ZLIntegerRangeOption(ZLOption.STATE_CATEGORY, GROUP, "MaxSize", 1, 100, 10);
|
public LastOpenedBooks() {
|
||||||
final int size = MaxListSizeOption.getValue();
|
MaxListSizeOption = new ZLIntegerRangeOption(ZLOption.STATE_CATEGORY, GROUP, "MaxSize", 1, 100, 10);
|
||||||
for (int i = 0; i < size; ++i) {
|
final int size = MaxListSizeOption.getValue();
|
||||||
String num = BOOK;
|
for (int i = 0; i < size; ++i) {
|
||||||
num += i;
|
String num = BOOK;
|
||||||
String name = new ZLStringOption(ZLOption.STATE_CATEGORY, GROUP, num, "").getValue();
|
num += i;
|
||||||
if (name.length() != 0) {
|
String name = new ZLStringOption(ZLOption.STATE_CATEGORY, GROUP, num, "").getValue();
|
||||||
BookDescription description = BookDescription.getDescription(name);
|
if (name.length() != 0) {
|
||||||
if (description != null) {
|
BookDescription description = BookDescription.getDescription(name);
|
||||||
myBooks.add(description);
|
if (description != null) {
|
||||||
}
|
myBooks.add(description);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public void addBook(String fileName) {
|
|
||||||
for (int i = 0; i < myBooks.size(); i++) {
|
public void addBook(String fileName) {
|
||||||
if (((BookDescription)(myBooks.get(i))).getFileName().equals(fileName)) {
|
for (int i = 0; i < myBooks.size(); i++) {
|
||||||
myBooks.remove(myBooks.get(i));
|
if (((BookDescription)(myBooks.get(i))).getFileName().equals(fileName)) {
|
||||||
break;
|
myBooks.remove(myBooks.get(i));
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
BookDescription description = BookDescription.getDescription(fileName);
|
|
||||||
if (description != null) {
|
BookDescription description = BookDescription.getDescription(fileName);
|
||||||
myBooks.add(0, description);
|
if (description != null) {
|
||||||
}
|
myBooks.add(0, description);
|
||||||
|
}
|
||||||
final int maxSize = MaxListSizeOption.getValue();
|
|
||||||
while (myBooks.size() > maxSize) {
|
final int maxSize = MaxListSizeOption.getValue();
|
||||||
myBooks.remove(myBooks.size() - 1);
|
while (myBooks.size() > maxSize) {
|
||||||
}
|
myBooks.remove(myBooks.size() - 1);
|
||||||
save();
|
}
|
||||||
}
|
save();
|
||||||
|
}
|
||||||
public ArrayList/*BookDescription*/ books() {
|
|
||||||
return myBooks;
|
public ArrayList/*BookDescription*/ books() {
|
||||||
}
|
return myBooks;
|
||||||
|
}
|
||||||
public void save() {
|
|
||||||
int size = Math.min(MaxListSizeOption.getValue(), myBooks.size());
|
public void save() {
|
||||||
for (int i = 0; i < size; ++i) {
|
int size = Math.min(MaxListSizeOption.getValue(), myBooks.size());
|
||||||
String num = BOOK;
|
for (int i = 0; i < size; ++i) {
|
||||||
num += i;
|
String num = BOOK;
|
||||||
new ZLStringOption(ZLOption.STATE_CATEGORY, GROUP, num, "").setValue(((BookDescription)myBooks.get(i)).getFileName());
|
num += i;
|
||||||
}
|
new ZLStringOption(ZLOption.STATE_CATEGORY, GROUP, num, "").setValue(((BookDescription)myBooks.get(i)).getFileName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.geometerplus.fbreader.collection;
|
package org.geometerplus.fbreader.collection;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue