diff --git a/build.xml b/build.xml index 5ca8d7b5a..3e1ee8853 100644 --- a/build.xml +++ b/build.xml @@ -15,15 +15,11 @@ - - - + - - - + diff --git a/platform/android/build.xml b/platform/android/build.xml index 6766a13ab..569282c70 100644 --- a/platform/android/build.xml +++ b/platform/android/build.xml @@ -70,16 +70,12 @@ - - - + - - - + diff --git a/platform/android/src/org/geometerplus/zlibrary/ui/android/application/ZLAndroidApplicationWindow.java b/platform/android/src/org/geometerplus/zlibrary/ui/android/application/ZLAndroidApplicationWindow.java index 56739419f..5062904c4 100644 --- a/platform/android/src/org/geometerplus/zlibrary/ui/android/application/ZLAndroidApplicationWindow.java +++ b/platform/android/src/org/geometerplus/zlibrary/ui/android/application/ZLAndroidApplicationWindow.java @@ -47,7 +47,7 @@ public final class ZLAndroidApplicationWindow extends ZLApplicationWindow { myMenuStack.pop(); } protected void processItem(ZLApplication.Menubar.PlainItem item) { - Menu.Item menuItem = myMenuStack.peek().add(0, myItemCount++, item.getName()); + Menu.Item menuItem = myMenuStack.peek().add(0, myItemCount++, item.Name); menuItem.setClickListener(myMenuListener); myMenuItemMap.put(menuItem, item); } @@ -59,7 +59,7 @@ public final class ZLAndroidApplicationWindow extends ZLApplicationWindow { private final Menu.OnClickListener myMenuListener = new Menu.OnClickListener() { public boolean onClick(Menu.Item item) { - getApplication().doAction(myMenuItemMap.get(item).getActionId()); + getApplication().doAction(myMenuItemMap.get(item).ActionId); return true; } }; @@ -76,7 +76,7 @@ public final class ZLAndroidApplicationWindow extends ZLApplicationWindow { protected void refresh() { super.refresh(); for (Map.Entry entry : myMenuItemMap.entrySet()) { - final String actionId = entry.getValue().getActionId(); + final String actionId = entry.getValue().ActionId; final ZLApplication application = getApplication(); entry.getKey().setShown(application.isActionVisible(actionId) && application.isActionEnabled(actionId)); } diff --git a/platform/android/src/org/geometerplus/zlibrary/ui/android/dialogs/ItemView.java b/platform/android/src/org/geometerplus/zlibrary/ui/android/dialogs/ItemView.java index 27c67e0f0..2c0c52e86 100644 --- a/platform/android/src/org/geometerplus/zlibrary/ui/android/dialogs/ItemView.java +++ b/platform/android/src/org/geometerplus/zlibrary/ui/android/dialogs/ItemView.java @@ -40,7 +40,7 @@ class ItemView extends LinearLayout { myNode = node; final ImageView imageView = new ImageView(context); - String iconName = node.pixmapName(); + final String iconName = node.PixmapName; Drawable icon = (Drawable)ourIconMap.get(iconName); if (icon == null) { try { @@ -59,7 +59,7 @@ class ItemView extends LinearLayout { final TextView textView = new TextView(context); textView.setPadding(0, 2, 0, 0); textView.setTextSize(18); - textView.setText(node.displayName()); + textView.setText(node.DisplayName); addView(textView, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); } diff --git a/platform/android/src/org/geometerplus/zlibrary/ui/android/dialogs/ZLAndroidDialogContent.java b/platform/android/src/org/geometerplus/zlibrary/ui/android/dialogs/ZLAndroidDialogContent.java index 92598237f..c2b5508a5 100644 --- a/platform/android/src/org/geometerplus/zlibrary/ui/android/dialogs/ZLAndroidDialogContent.java +++ b/platform/android/src/org/geometerplus/zlibrary/ui/android/dialogs/ZLAndroidDialogContent.java @@ -62,7 +62,7 @@ class ZLAndroidDialogContent extends ZLDialogContent { private ArrayList getAndroidViews() { if (myAndroidViews.isEmpty()) { - final ArrayList views = getViews(); + final ArrayList views = Views; final int len = views.size(); for (int i = 0; i < len; ++i) { final ZLAndroidOptionView v = (ZLAndroidOptionView)views.get(i); diff --git a/platform/android/src/org/geometerplus/zlibrary/ui/android/dialogs/ZLAndroidSelectionDialog.java b/platform/android/src/org/geometerplus/zlibrary/ui/android/dialogs/ZLAndroidSelectionDialog.java index f0e9ededb..c4fc87645 100644 --- a/platform/android/src/org/geometerplus/zlibrary/ui/android/dialogs/ZLAndroidSelectionDialog.java +++ b/platform/android/src/org/geometerplus/zlibrary/ui/android/dialogs/ZLAndroidSelectionDialog.java @@ -118,7 +118,7 @@ class ZLAndroidSelectionDialog extends ZLSelectionDialog { final ItemView view = (ItemView)getSelectedView(); if (view != null) { final ZLTreeNode node = view.getNode(); - myReturnValue = !node.isFolder(); + myReturnValue = !node.IsFolder; runNode(view.getNode()); } return false; @@ -132,7 +132,7 @@ class ZLAndroidSelectionDialog extends ZLSelectionDialog { final int y = (int)event.getY(); final ZLTreeNode node = (ZLTreeNode)getAdapter().getItem(pointToPosition(x, y)); if (node != null) { - myReturnValue = !node.isFolder(); + myReturnValue = !node.IsFolder; runNode(node); } return false; diff --git a/platform/j2me/build.xml b/platform/j2me/build.xml index d6a8b1904..42a5cb655 100644 --- a/platform/j2me/build.xml +++ b/platform/j2me/build.xml @@ -32,9 +32,7 @@ - - - + diff --git a/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLStringOptionView.java b/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLStringOptionView.java index 8e58de92d..0bc88f4ef 100644 --- a/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLStringOptionView.java +++ b/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLStringOptionView.java @@ -17,92 +17,80 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.ui.swing.dialogs; - -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.GridBagLayout; -import java.awt.GridLayout; -import java.awt.Insets; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; - -import javax.swing.BoxLayout; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JTextField; - -import org.geometerplus.zlibrary.core.dialogs.ZLStringOptionEntry; -import org.geometerplus.zlibrary.core.dialogs.ZLTextOptionEntry; - -public class ZLStringOptionView extends ZLSwingOptionView { - private JLabel myLabel; - private JTextField myTextField; - private JPanel myPanel; - - public ZLStringOptionView(String name, ZLStringOptionEntry option, - ZLSwingDialogContent tab, GridBagLayout layout) { - super(name, option, tab, layout); - } - - protected void _onAccept() { - ((ZLStringOptionEntry) myOption).onAccept(myTextField.getText()); - } - - protected void createItem() { - myTextField = new JTextField(((ZLTextOptionEntry) myOption).initialValue()); - myTextField.setCaretPosition(0); - myTextField.setMargin(new Insets(0, 5, 0, 0)); - myTextField.addKeyListener(new MyKeyListener()); - if (myName == null || "".equals(myName)) { - myLabel = null; - myTab.insertWidget(myTextField); - } else { - JPanel panel1 = new JPanel(); - panel1.setLayout(new BoxLayout(panel1, BoxLayout.LINE_AXIS)); - myTextField.setMaximumSize(new Dimension(myTextField.getMaximumSize().width, myTextField.getPreferredSize().height)); - panel1.add(myTextField); - myLabel = new JLabel(myName); - JPanel panel2 = new JPanel(new BorderLayout()); - panel2.add(myLabel, BorderLayout.LINE_END); - myPanel = new JPanel(new GridLayout(1, 2, 10, 0)); - myPanel.add(panel2); - myPanel.add(panel1); - myTab.insertWidget(myPanel); - } - } - - protected void hide() { - if (myPanel != null) { - hide(myPanel); - } else { - hide(myTextField); - } - } - - protected void show() { - if (myPanel != null) { - show(myPanel); - } else { - show(myTextField); - } - } - - protected void _setActive(boolean active) { - myTextField.setEditable(active); - } - - public void reset() { - myTextField.setText(((ZLStringOptionEntry) myOption).initialValue()); - } - - private class MyKeyListener extends KeyAdapter { - public void keyTyped(KeyEvent e) { - ZLStringOptionEntry o = (ZLStringOptionEntry) myOption; - if (o.useOnValueEdited()) { - o.onValueEdited(myTextField.getText()); - } - } - } - -} +package org.geometerplus.zlibrary.ui.swing.dialogs; + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +import org.geometerplus.zlibrary.core.dialogs.*; + +public class ZLStringOptionView extends ZLSwingOptionView { + private JLabel myLabel; + private JTextField myTextField; + private JPanel myPanel; + + public ZLStringOptionView(String name, ZLStringOptionEntry option, ZLSwingDialogContent tab, GridBagLayout layout) { + super(name, option, tab, layout); + } + + protected void _onAccept() { + ((ZLStringOptionEntry)myOption).onAccept(myTextField.getText()); + } + + protected void createItem() { + myTextField = new JTextField(((ZLStringOptionEntry)myOption).initialValue()); + myTextField.setCaretPosition(0); + myTextField.setMargin(new Insets(0, 5, 0, 0)); + myTextField.addKeyListener(new MyKeyListener()); + if (myName == null || "".equals(myName)) { + myLabel = null; + myTab.insertWidget(myTextField); + } else { + JPanel panel1 = new JPanel(); + panel1.setLayout(new BoxLayout(panel1, BoxLayout.LINE_AXIS)); + myTextField.setMaximumSize(new Dimension(myTextField.getMaximumSize().width, myTextField.getPreferredSize().height)); + panel1.add(myTextField); + myLabel = new JLabel(myName); + JPanel panel2 = new JPanel(new BorderLayout()); + panel2.add(myLabel, BorderLayout.LINE_END); + myPanel = new JPanel(new GridLayout(1, 2, 10, 0)); + myPanel.add(panel2); + myPanel.add(panel1); + myTab.insertWidget(myPanel); + } + } + + protected void hide() { + if (myPanel != null) { + hide(myPanel); + } else { + hide(myTextField); + } + } + + protected void show() { + if (myPanel != null) { + show(myPanel); + } else { + show(myTextField); + } + } + + protected void _setActive(boolean active) { + myTextField.setEditable(active); + } + + public void reset() { + myTextField.setText(((ZLStringOptionEntry)myOption).initialValue()); + } + + private class MyKeyListener extends KeyAdapter { + public void keyTyped(KeyEvent e) { + ZLStringOptionEntry o = (ZLStringOptionEntry)myOption; + if (o.useOnValueEdited()) { + o.onValueEdited(myTextField.getText()); + } + } + } +} diff --git a/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingDialogManager.java b/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingDialogManager.java index e5c381158..a2691587f 100644 --- a/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingDialogManager.java +++ b/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingDialogManager.java @@ -17,149 +17,149 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.ui.swing.dialogs; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; - -import javax.swing.*; - -import org.geometerplus.zlibrary.core.dialogs.*; -import org.geometerplus.zlibrary.core.application.ZLApplication; -import org.geometerplus.zlibrary.ui.swing.application.ZLSwingApplicationWindow; - -public class ZLSwingDialogManager extends ZLDialogManager { - private ZLSwingApplicationWindow myApplicationWindow; - - public ZLSwingDialogManager() { - } - - public void runSelectionDialog(String key, ZLTreeHandler handler, Runnable actionOnAccept) { - new ZLSwingSelectionDialog(myApplicationWindow.getFrame(), getDialogTitle(key), handler, actionOnAccept).run(); - } - - public void showErrorBox(String key, String message) { - JOptionPane.showMessageDialog(myApplicationWindow.getFrame(), message, getDialogTitle(key), 1, null); - } - - public void showInformationBox(String key, String message) { - JOptionPane.showMessageDialog(myApplicationWindow.getFrame(), message, getDialogTitle(key), 1, null); - } - - public void showQuestionBox(String key, String message, String button0, Runnable action0, String button1, Runnable action1, String button2, Runnable action2) { - Object [] options = new Object [3]; - int size = 0; - if (button0 != null) { - options[size++] = getButtonText(button0).replace("&", ""); - } - if (button1 != null) { - options[size++] = getButtonText(button1).replace("&", ""); - } - if (button2 != null) { - options[size++] = getButtonText(button2).replace("&", ""); - } - int optionType; - Object [] opt = new Object[size]; - System.arraycopy(options, 0, opt, 0, size); - switch (size) { - case 3: - optionType = JOptionPane.YES_NO_CANCEL_OPTION; - break; - case 2: - optionType = JOptionPane.YES_NO_OPTION; - break; - case 1: - optionType = JOptionPane.YES_OPTION; - break; - default: - return; - } - - Runnable action = null; - switch (JOptionPane.showOptionDialog(myApplicationWindow.getFrame(), message, - getDialogTitle(key), optionType, JOptionPane.QUESTION_MESSAGE, - null, opt, opt[0])) { - case 0: - action = action0; - break; - case 1: - action = action1; - break; - case 2: - action = action2; - break; - } - if (action != null) { - action.run(); - } - } - - public ZLSwingApplicationWindow createApplicationWindow(ZLApplication application) { - myApplicationWindow = new ZLSwingApplicationWindow(application); - return myApplicationWindow; - } - - static String createButtonText(String key) { - return getButtonText(key).replace("&", ""); - } - - public ZLDialog createDialog(String key) { - return new ZLSwingDialog(myApplicationWindow.getFrame(), getResource().getResource(key)); - } - - public ZLOptionsDialog createOptionsDialog(String key, Runnable exitAction, Runnable applyAction, boolean showApplyButton) { - return new ZLSwingOptionsDialog(myApplicationWindow.getFrame(), getResource().getResource(key), exitAction, applyAction, showApplyButton); - } - - public void wait(String key, Runnable runnable) { - Thread t = new Thread(runnable); - t.start(); - try { - t.join(500); - } catch (InterruptedException e) {} - if (t.isAlive()) { - JDialog dialog = new JDialog(); - dialog.setUndecorated(true); - JPanel panel = new JPanel(new BorderLayout()); - panel.add(new JLabel(getWaitMessageText(key)), BorderLayout.CENTER); - panel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.black), BorderFactory.createEmptyBorder(10, 10, 10, 10))); - dialog.add(panel); - if (myApplicationWindow != null) { - dialog.setLocationRelativeTo(myApplicationWindow.getFrame()); - } else { - dialog.setLocation(300, 300); - } - dialog.pack(); - dialog.setModal(true); - dialog.addWindowListener(new MyWindowListener(dialog, t)); - dialog.setVisible(true); - } - } - - private static class MyWindowListener extends WindowAdapter { - private final JDialog myDialog; - private final Thread myThread; - - public MyWindowListener(JDialog dialog, Thread thread) { - myDialog = dialog; - myThread = thread; - } - - public void windowOpened(WindowEvent e) { - try { - myThread.join(); - } catch (InterruptedException ex) {} - myDialog.dispose(); - } - } -} - -/* - * public: - - bool isClipboardSupported(ClipboardType type) const; - void setClipboardText(const std::string &text, ClipboardType type) const; - - */ +package org.geometerplus.zlibrary.ui.swing.dialogs; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +import javax.swing.*; + +import org.geometerplus.zlibrary.core.dialogs.*; +import org.geometerplus.zlibrary.core.application.ZLApplication; +import org.geometerplus.zlibrary.ui.swing.application.ZLSwingApplicationWindow; + +public class ZLSwingDialogManager extends ZLDialogManager { + private ZLSwingApplicationWindow myApplicationWindow; + + public ZLSwingDialogManager() { + } + + public void runSelectionDialog(String key, ZLTreeHandler handler, Runnable actionOnAccept) { + new ZLSwingSelectionDialog(myApplicationWindow.getFrame(), getDialogTitle(key), handler, actionOnAccept).run(); + } + + public void showErrorBox(String key, String message) { + JOptionPane.showMessageDialog(myApplicationWindow.getFrame(), message, getDialogTitle(key), 1, null); + } + + public void showInformationBox(String key, String message) { + JOptionPane.showMessageDialog(myApplicationWindow.getFrame(), message, getDialogTitle(key), 1, null); + } + + public void showQuestionBox(String key, String message, String button0, Runnable action0, String button1, Runnable action1, String button2, Runnable action2) { + Object [] options = new Object [3]; + int size = 0; + if (button0 != null) { + options[size++] = getButtonText(button0).replace("&", ""); + } + if (button1 != null) { + options[size++] = getButtonText(button1).replace("&", ""); + } + if (button2 != null) { + options[size++] = getButtonText(button2).replace("&", ""); + } + int optionType; + Object [] opt = new Object[size]; + System.arraycopy(options, 0, opt, 0, size); + switch (size) { + case 3: + optionType = JOptionPane.YES_NO_CANCEL_OPTION; + break; + case 2: + optionType = JOptionPane.YES_NO_OPTION; + break; + case 1: + optionType = JOptionPane.YES_OPTION; + break; + default: + return; + } + + Runnable action = null; + switch (JOptionPane.showOptionDialog(myApplicationWindow.getFrame(), message, + getDialogTitle(key), optionType, JOptionPane.QUESTION_MESSAGE, + null, opt, opt[0])) { + case 0: + action = action0; + break; + case 1: + action = action1; + break; + case 2: + action = action2; + break; + } + if (action != null) { + action.run(); + } + } + + public ZLSwingApplicationWindow createApplicationWindow(ZLApplication application) { + myApplicationWindow = new ZLSwingApplicationWindow(application); + return myApplicationWindow; + } + + static String createButtonText(String key) { + return getButtonText(key).replace("&", ""); + } + + public ZLDialog createDialog(String key) { + return new ZLSwingDialog(myApplicationWindow.getFrame(), getResource().getResource(key)); + } + + public ZLOptionsDialog createOptionsDialog(String key, Runnable exitAction, Runnable applyAction, boolean showApplyButton) { + return new ZLSwingOptionsDialog(myApplicationWindow.getFrame(), getResource().getResource(key), exitAction, applyAction, showApplyButton); + } + + public void wait(String key, Runnable runnable) { + Thread t = new Thread(runnable); + t.start(); + try { + t.join(500); + } catch (InterruptedException e) {} + if (t.isAlive()) { + JDialog dialog = new JDialog(); + dialog.setUndecorated(true); + JPanel panel = new JPanel(new BorderLayout()); + panel.add(new JLabel(getWaitMessageText(key)), BorderLayout.CENTER); + panel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.black), BorderFactory.createEmptyBorder(10, 10, 10, 10))); + dialog.add(panel); + if (myApplicationWindow != null) { + dialog.setLocationRelativeTo(myApplicationWindow.getFrame()); + } else { + dialog.setLocation(300, 300); + } + dialog.pack(); + dialog.setModal(true); + dialog.addWindowListener(new MyWindowListener(dialog, t)); + dialog.setVisible(true); + } + } + + private static class MyWindowListener extends WindowAdapter { + private final JDialog myDialog; + private final Thread myThread; + + public MyWindowListener(JDialog dialog, Thread thread) { + myDialog = dialog; + myThread = thread; + } + + public void windowOpened(WindowEvent e) { + try { + myThread.join(); + } catch (InterruptedException ex) {} + myDialog.dispose(); + } + } +} + +/* + * public: + + bool isClipboardSupported(ClipboardType type) const; + void setClipboardText(const std::string &text, ClipboardType type) const; + + */ diff --git a/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingOptionView.java b/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingOptionView.java index c13ec59f9..8c45a557c 100644 --- a/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingOptionView.java +++ b/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingOptionView.java @@ -17,44 +17,44 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.ui.swing.dialogs; - -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; - -import javax.swing.JComponent; - -import org.geometerplus.zlibrary.core.dialogs.ZLOptionEntry; -import org.geometerplus.zlibrary.core.dialogs.ZLOptionView; - -public abstract class ZLSwingOptionView extends ZLOptionView { - protected final ZLSwingDialogContent myTab; - protected final GridBagLayout myLayout; - - public ZLSwingOptionView(String name, ZLOptionEntry option, ZLSwingDialogContent tab, GridBagLayout layout) { - super(name, option); - myTab = tab; - myLayout = layout; - } - - // TODO: remove - protected void reset() { - } - - protected void hide(JComponent component) { - component.setVisible(false); - final GridBagConstraints constraints = myLayout.getConstraints(component); - constraints.insets.top = 0; - constraints.insets.bottom = 0; - myLayout.setConstraints(component, constraints); - } - - protected void show(JComponent component) { - final GridBagConstraints constraints = myLayout.getConstraints(component); - constraints.insets.top = 5; - constraints.insets.bottom = 5; - constraints.gridheight = 1; - myLayout.setConstraints(component, constraints); - component.setVisible(true); - } -} +package org.geometerplus.zlibrary.ui.swing.dialogs; + +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; + +import javax.swing.JComponent; + +import org.geometerplus.zlibrary.core.dialogs.ZLOptionEntry; +import org.geometerplus.zlibrary.core.dialogs.ZLOptionView; + +public abstract class ZLSwingOptionView extends ZLOptionView { + protected final ZLSwingDialogContent myTab; + protected final GridBagLayout myLayout; + + public ZLSwingOptionView(String name, ZLOptionEntry option, ZLSwingDialogContent tab, GridBagLayout layout) { + super(name, option); + myTab = tab; + myLayout = layout; + } + + // TODO: remove + protected void reset() { + } + + protected void hide(JComponent component) { + component.setVisible(false); + final GridBagConstraints constraints = myLayout.getConstraints(component); + constraints.insets.top = 0; + constraints.insets.bottom = 0; + myLayout.setConstraints(component, constraints); + } + + protected void show(JComponent component) { + final GridBagConstraints constraints = myLayout.getConstraints(component); + constraints.insets.top = 5; + constraints.insets.bottom = 5; + constraints.gridheight = 1; + myLayout.setConstraints(component, constraints); + component.setVisible(true); + } +} diff --git a/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingOptionsDialog.java b/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingOptionsDialog.java index 722a1faa6..d85c29b88 100644 --- a/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingOptionsDialog.java +++ b/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingOptionsDialog.java @@ -17,153 +17,153 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.ui.swing.dialogs; - -import java.util.*; -import java.awt.*; -import java.awt.event.*; - -import javax.swing.*; -import javax.swing.event.*; - -import org.geometerplus.zlibrary.core.options.*; -import org.geometerplus.zlibrary.core.dialogs.*; -import org.geometerplus.zlibrary.core.resources.ZLResource; - -public class ZLSwingOptionsDialog extends ZLOptionsDialog { - private final boolean myShowApplyButton; - private final JDialog myDialog; - private final JTabbedPane myTabbedPane = new JTabbedPane(); - private String mySelectedTabKey; - private final HashMap myPanelToKeyMap = new HashMap(); - - private final ZLIntegerRangeOption myWidthOption; - private final ZLIntegerRangeOption myHeightOption; - - protected ZLSwingOptionsDialog(JFrame frame, ZLResource resource, Runnable exitAction, Runnable applyAction, boolean showApplyButton) { - super(resource, exitAction, applyAction); - myDialog = new JDialog(frame); - myDialog.setTitle(getCaption()); - myShowApplyButton = showApplyButton; - final String optionGroupName = resource.Name; - myWidthOption = new ZLIntegerRangeOption(ZLOption.LOOK_AND_FEEL_CATEGORY, optionGroupName, "Width", 10, 2000, 485); - myHeightOption = new ZLIntegerRangeOption(ZLOption.LOOK_AND_FEEL_CATEGORY, optionGroupName, "Height", 10, 2000, 332); - } - - @Override - public ZLDialogContent createTab(String key) { - ZLSwingDialogContent tab = new ZLSwingDialogContent(getTabResource(key)); - JPanel contentPanel = tab.getContentPanel(); - JPanel panel = new JPanel(new BorderLayout()); - panel.add(contentPanel, BorderLayout.PAGE_START); - myPanelToKeyMap.put(tab.getKey(), panel); - myTabbedPane.addTab(tab.getDisplayName(), panel); - myTabs.add(tab); - return tab; - } - - @Override - protected String getSelectedTabKey() { - return mySelectedTabKey; - } - - @Override - protected void runInternal() { - myDialog.addWindowListener(new WindowAdapter(){ - public void windowClosing(WindowEvent e) { - myWidthOption.setValue(myDialog.getWidth()); - myHeightOption.setValue(myDialog.getHeight()); - } - }); - myDialog.setLayout(new BorderLayout()); - JPanel buttonPanel = new JPanel(); - buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); - JButton okButton = new JButton(new OptionsDialogAction(ZLSwingDialogManager.OK_BUTTON, true, true)); - Action cancelAction = new OptionsDialogAction(ZLSwingDialogManager.CANCEL_BUTTON, false, true); - JButton cancelButton = new JButton(cancelAction); - buttonPanel.add(okButton); - buttonPanel.add(cancelButton); - Dimension preferredSize = okButton.getPreferredSize(); - Dimension size = cancelButton.getPreferredSize(); - if (preferredSize.width < size.width) { - preferredSize = size; - } - if (myShowApplyButton) { - JButton applyButton = new JButton(new OptionsDialogAction(ZLSwingDialogManager.APPLY_BUTTON, true, false)); - buttonPanel.add(applyButton); - size = applyButton.getPreferredSize(); - if (preferredSize.width < size.width) { - preferredSize = size; - } - applyButton.setPreferredSize(preferredSize); - } - okButton.setPreferredSize(preferredSize); - cancelButton.setPreferredSize(preferredSize); - myDialog.add(buttonPanel, BorderLayout.SOUTH); - - myTabbedPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); - myDialog.getContentPane().add(myTabbedPane, BorderLayout.CENTER); - myTabbedPane.addChangeListener(new MyChangeListener()); - if (myPanelToKeyMap.get(mySelectedTabKey) != null) { - myTabbedPane.setSelectedComponent(myPanelToKeyMap.get(mySelectedTabKey)); - } - - okButton.requestFocusInWindow(); - - KeyStroke escape = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false); - myDialog.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE"); - myDialog.getRootPane().getActionMap().put("ESCAPE", cancelAction); - - myDialog.pack(); - - myDialog.setSize(myWidthOption.getValue(), myHeightOption.getValue()); - myDialog.setLocationRelativeTo(myDialog.getParent()); - myDialog.setModal(true); - myDialog.setVisible(true); - } - - protected void selectTab(String key) { - mySelectedTabKey = key; - } - - private void exitDialog() { - myWidthOption.setValue(myDialog.getWidth()); - myHeightOption.setValue(myDialog.getHeight()); - myDialog.dispose(); - if (myExitAction != null) { - myExitAction.run(); - } - } - - private class MyChangeListener implements ChangeListener { - public void stateChanged(ChangeEvent e) { - Component component = myTabbedPane.getSelectedComponent(); - for (Map.Entry entry : myPanelToKeyMap.entrySet()) { - if (entry.getValue().equals(component)) { - mySelectedTabKey = (String) entry.getKey(); - break; - } - } - } - } - - private class OptionsDialogAction extends AbstractAction { - private final boolean myDoAccept; - private final boolean myDoExit; - - public OptionsDialogAction(String name, boolean doAccept, boolean doExit) { - putValue(NAME, ZLSwingDialogManager.createButtonText(name)); - myDoAccept = doAccept; - myDoExit = doExit; - } - - public void actionPerformed(ActionEvent e) { - if (myDoAccept) { - accept(); - } - if (myDoExit) { - exitDialog(); - } - } - } -} +package org.geometerplus.zlibrary.ui.swing.dialogs; + +import java.util.*; + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +import javax.swing.event.*; + +import org.geometerplus.zlibrary.core.options.*; +import org.geometerplus.zlibrary.core.dialogs.*; +import org.geometerplus.zlibrary.core.resources.ZLResource; + +public class ZLSwingOptionsDialog extends ZLOptionsDialog { + private final boolean myShowApplyButton; + private final JDialog myDialog; + private final JTabbedPane myTabbedPane = new JTabbedPane(); + private String mySelectedTabKey; + private final HashMap myPanelToKeyMap = new HashMap(); + + private final ZLIntegerRangeOption myWidthOption; + private final ZLIntegerRangeOption myHeightOption; + + protected ZLSwingOptionsDialog(JFrame frame, ZLResource resource, Runnable exitAction, Runnable applyAction, boolean showApplyButton) { + super(resource, exitAction, applyAction); + myDialog = new JDialog(frame); + myDialog.setTitle(getCaption()); + myShowApplyButton = showApplyButton; + final String optionGroupName = resource.Name; + myWidthOption = new ZLIntegerRangeOption(ZLOption.LOOK_AND_FEEL_CATEGORY, optionGroupName, "Width", 10, 2000, 485); + myHeightOption = new ZLIntegerRangeOption(ZLOption.LOOK_AND_FEEL_CATEGORY, optionGroupName, "Height", 10, 2000, 332); + } + + @Override + public ZLDialogContent createTab(String key) { + ZLSwingDialogContent tab = new ZLSwingDialogContent(getTabResource(key)); + JPanel contentPanel = tab.getContentPanel(); + JPanel panel = new JPanel(new BorderLayout()); + panel.add(contentPanel, BorderLayout.PAGE_START); + myPanelToKeyMap.put(tab.getKey(), panel); + myTabbedPane.addTab(tab.getDisplayName(), panel); + myTabs.add(tab); + return tab; + } + + @Override + protected String getSelectedTabKey() { + return mySelectedTabKey; + } + + @Override + protected void runInternal() { + myDialog.addWindowListener(new WindowAdapter(){ + public void windowClosing(WindowEvent e) { + myWidthOption.setValue(myDialog.getWidth()); + myHeightOption.setValue(myDialog.getHeight()); + } + }); + myDialog.setLayout(new BorderLayout()); + JPanel buttonPanel = new JPanel(); + buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); + JButton okButton = new JButton(new OptionsDialogAction(ZLSwingDialogManager.OK_BUTTON, true, true)); + Action cancelAction = new OptionsDialogAction(ZLSwingDialogManager.CANCEL_BUTTON, false, true); + JButton cancelButton = new JButton(cancelAction); + buttonPanel.add(okButton); + buttonPanel.add(cancelButton); + Dimension preferredSize = okButton.getPreferredSize(); + Dimension size = cancelButton.getPreferredSize(); + if (preferredSize.width < size.width) { + preferredSize = size; + } + if (myShowApplyButton) { + JButton applyButton = new JButton(new OptionsDialogAction(ZLSwingDialogManager.APPLY_BUTTON, true, false)); + buttonPanel.add(applyButton); + size = applyButton.getPreferredSize(); + if (preferredSize.width < size.width) { + preferredSize = size; + } + applyButton.setPreferredSize(preferredSize); + } + okButton.setPreferredSize(preferredSize); + cancelButton.setPreferredSize(preferredSize); + myDialog.add(buttonPanel, BorderLayout.SOUTH); + + myTabbedPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + myDialog.getContentPane().add(myTabbedPane, BorderLayout.CENTER); + myTabbedPane.addChangeListener(new MyChangeListener()); + if (myPanelToKeyMap.get(mySelectedTabKey) != null) { + myTabbedPane.setSelectedComponent(myPanelToKeyMap.get(mySelectedTabKey)); + } + + okButton.requestFocusInWindow(); + + KeyStroke escape = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false); + myDialog.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE"); + myDialog.getRootPane().getActionMap().put("ESCAPE", cancelAction); + + myDialog.pack(); + + myDialog.setSize(myWidthOption.getValue(), myHeightOption.getValue()); + myDialog.setLocationRelativeTo(myDialog.getParent()); + myDialog.setModal(true); + myDialog.setVisible(true); + } + + protected void selectTab(String key) { + mySelectedTabKey = key; + } + + private void exitDialog() { + myWidthOption.setValue(myDialog.getWidth()); + myHeightOption.setValue(myDialog.getHeight()); + myDialog.dispose(); + if (myExitAction != null) { + myExitAction.run(); + } + } + + private class MyChangeListener implements ChangeListener { + public void stateChanged(ChangeEvent e) { + Component component = myTabbedPane.getSelectedComponent(); + for (Map.Entry entry : myPanelToKeyMap.entrySet()) { + if (entry.getValue().equals(component)) { + mySelectedTabKey = (String) entry.getKey(); + break; + } + } + } + } + + private class OptionsDialogAction extends AbstractAction { + private final boolean myDoAccept; + private final boolean myDoExit; + + public OptionsDialogAction(String name, boolean doAccept, boolean doExit) { + putValue(NAME, ZLSwingDialogManager.createButtonText(name)); + myDoAccept = doAccept; + myDoExit = doExit; + } + + public void actionPerformed(ActionEvent e) { + if (myDoAccept) { + accept(); + } + if (myDoExit) { + exitDialog(); + } + } + } +} diff --git a/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingSelectionDialog.java b/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingSelectionDialog.java index 55d72fe1f..99c5e4264 100644 --- a/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingSelectionDialog.java +++ b/platform/swing/src/org/geometerplus/zlibrary/ui/swing/dialogs/ZLSwingSelectionDialog.java @@ -26,16 +26,13 @@ import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; -import org.geometerplus.zlibrary.core.dialogs.ZLSelectionDialog; -import org.geometerplus.zlibrary.core.dialogs.ZLTreeHandler; -import org.geometerplus.zlibrary.core.dialogs.ZLTreeNode; -import org.geometerplus.zlibrary.core.options.ZLIntegerRangeOption; -import org.geometerplus.zlibrary.core.options.ZLOption; +import org.geometerplus.zlibrary.core.dialogs.*; +import org.geometerplus.zlibrary.core.options.*; import org.geometerplus.zlibrary.ui.swing.util.ZLSwingIconUtil; class ZLSwingSelectionDialog extends ZLSelectionDialog { private static final String OPTION_GROUP_NAME = "OpenFileDialog"; - private static final HashMap ourIcons = new HashMap(); // + private static final HashMap ourIcons = new HashMap(); private static final String ourIconDirectory = "icons/filetree/"; private final JDialog myDialog; @@ -137,8 +134,8 @@ class ZLSwingSelectionDialog extends ZLSelectionDialog { } private static ImageIcon getIcon(ZLTreeNode node) { - final String pixmapName = node.pixmapName(); - ImageIcon icon = (ImageIcon) ourIcons.get(pixmapName); + final String pixmapName = node.PixmapName; + ImageIcon icon = (ImageIcon)ourIcons.get(pixmapName); if (icon == null) { icon = ZLSwingIconUtil.getIcon(ourIconDirectory + pixmapName + ".png"); ourIcons.put(pixmapName, icon); @@ -147,9 +144,9 @@ class ZLSwingSelectionDialog extends ZLSelectionDialog { } private void changeFolder(int index) { - ZLTreeNode node = (ZLTreeNode) handler().subnodes().get(index); - myReturnValue = !node.isFolder(); - runNode(node); + ZLTreeNode node = (ZLTreeNode)handler().subnodes().get(index); + myReturnValue = !node.IsFolder; + runNode(node); } private class MyMouseListener extends MouseInputAdapter { @@ -186,14 +183,14 @@ class ZLSwingSelectionDialog extends ZLSelectionDialog { public void actionPerformed(ActionEvent e) { myReturnValue = true; - runNode((ZLTreeNode) handler().subnodes().get(myList.getSelectedIndex())); + runNode((ZLTreeNode)handler().subnodes().get(myList.getSelectedIndex())); } } private class SelectionListener implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) { int index = myList.getSelectedIndex(); - myOKAction.setEnabled(index != -1 && !((ZLTreeNode) handler().subnodes().get(index)).isFolder()); + myOKAction.setEnabled(index != -1 && !((ZLTreeNode)handler().subnodes().get(index)).IsFolder); } } @@ -206,9 +203,9 @@ class ZLSwingSelectionDialog extends ZLSelectionDialog { boolean isSelected, // is the cell selected boolean cellHasFocus) // the list and the cell have the focus { - String s = ((ZLTreeNode) value).displayName(); - setText(s); - setIcon(ZLSwingSelectionDialog.getIcon((ZLTreeNode) value)); + final ZLTreeNode node = (ZLTreeNode)value; + setText(node.DisplayName); + setIcon(ZLSwingSelectionDialog.getIcon(node)); if (isSelected) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); diff --git a/src/org/geometerplus/fbreader/bookmodel/BookModel.java b/src/org/geometerplus/fbreader/bookmodel/BookModel.java index 0e74d4008..6a2c01615 100644 --- a/src/org/geometerplus/fbreader/bookmodel/BookModel.java +++ b/src/org/geometerplus/fbreader/bookmodel/BookModel.java @@ -31,8 +31,7 @@ import org.geometerplus.zlibrary.text.model.impl.ZLModelFactory; import org.geometerplus.zlibrary.text.model.impl.ZLTextPlainModelImpl; import org.geometerplus.fbreader.description.BookDescription; -import org.geometerplus.fbreader.formats.FormatPlugin; -import org.geometerplus.fbreader.formats.FormatPlugin.PluginCollection; +import org.geometerplus.fbreader.formats.*; public final class BookModel { public final BookDescription Description; diff --git a/src/org/geometerplus/fbreader/bookmodel/ContentsModel.java b/src/org/geometerplus/fbreader/bookmodel/ContentsModel.java index dece934f8..d4a73cb54 100644 --- a/src/org/geometerplus/fbreader/bookmodel/ContentsModel.java +++ b/src/org/geometerplus/fbreader/bookmodel/ContentsModel.java @@ -17,24 +17,24 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.bookmodel; - -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.zlibrary.text.model.ZLTextTreeModel; -import org.geometerplus.zlibrary.text.model.ZLTextTreeParagraph; -import org.geometerplus.zlibrary.text.model.impl.ZLTextTreeModelImpl; - -public class ContentsModel extends ZLTextTreeModelImpl implements ZLTextTreeModel{ - private final HashMap myReferenceByParagraph = new HashMap(); - - public int getReference(ZLTextTreeParagraph paragraph) { - Integer num = (Integer)myReferenceByParagraph.get(paragraph); - return (num != null) ? num.intValue() : -1; - } - - public void setReference(ZLTextTreeParagraph paragraph, int reference) { - myReferenceByParagraph.put(paragraph, reference); - } -} +package org.geometerplus.fbreader.bookmodel; + +import java.util.*; +import org.geometerplus.zlibrary.core.util.*; + +import org.geometerplus.zlibrary.text.model.ZLTextTreeModel; +import org.geometerplus.zlibrary.text.model.ZLTextTreeParagraph; +import org.geometerplus.zlibrary.text.model.impl.ZLTextTreeModelImpl; + +public class ContentsModel extends ZLTextTreeModelImpl implements ZLTextTreeModel{ + private final HashMap myReferenceByParagraph = new HashMap(); + + public int getReference(ZLTextTreeParagraph paragraph) { + Integer num = (Integer)myReferenceByParagraph.get(paragraph); + return (num != null) ? num.intValue() : -1; + } + + public void setReference(ZLTextTreeParagraph paragraph, int reference) { + myReferenceByParagraph.put(paragraph, reference); + } +} diff --git a/src/org/geometerplus/fbreader/collection/BookCollection.java b/src/org/geometerplus/fbreader/collection/BookCollection.java index b12ba3c11..893dc2ccc 100644 --- a/src/org/geometerplus/fbreader/collection/BookCollection.java +++ b/src/org/geometerplus/fbreader/collection/BookCollection.java @@ -23,16 +23,11 @@ import java.io.*; 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.BookDescriptionUtil; -import org.geometerplus.fbreader.formats.FormatPlugin.PluginCollection; -import org.geometerplus.zlibrary.core.filesystem.ZLDir; -import org.geometerplus.zlibrary.core.filesystem.ZLFile; -import org.geometerplus.zlibrary.core.options.ZLBooleanOption; -import org.geometerplus.zlibrary.core.options.ZLIntegerRangeOption; -import org.geometerplus.zlibrary.core.options.ZLOption; -import org.geometerplus.zlibrary.core.options.ZLStringOption; +import org.geometerplus.zlibrary.core.filesystem.*; +import org.geometerplus.zlibrary.core.options.*; + +import org.geometerplus.fbreader.description.*; +import org.geometerplus.fbreader.formats.PluginCollection; public class BookCollection { public final ZLStringOption PathOption; @@ -209,13 +204,13 @@ public class BookCollection { continue; } + final PluginCollection collection = PluginCollection.instance(); final ArrayList files = dir.collectFiles(); - final int numberOfFiles = files.size(); for (int j = 0; j < numberOfFiles; ++j) { String fileName = dir.getItemPath((String)files.get(j)); ZLFile file = new ZLFile(fileName); - if (PluginCollection.instance().getPlugin(file, true) != null) { + if (collection.getPlugin(file, true) != null) { if (!bookFileNames.contains(fileName)) { bookFileNames.add(fileName); } @@ -255,12 +250,12 @@ public class BookCollection { books.add(description); } - private class DescriptionComparator implements Comparator { + private static class DescriptionComparator implements Comparator { public int compare(Object descr1, Object descr2) { BookDescription d1 = (BookDescription)descr1; BookDescription d2 = (BookDescription)descr2; - String sequenceName1 = d1.getSequenceName(); - String sequenceName2 = d2.getSequenceName(); + String sequenceName1 = d1.getSeriesName(); + String sequenceName2 = d2.getSeriesName(); if ((sequenceName1.length() == 0) && (sequenceName2.length() == 0)) { return d1.getTitle().compareTo(d2.getTitle()); @@ -274,7 +269,7 @@ public class BookCollection { if (!sequenceName1.equals(sequenceName2)) { return sequenceName1.compareTo(sequenceName2); } - return (d1.getNumberInSequence() - d2.getNumberInSequence()); + return d1.getNumberInSeries() - d2.getNumberInSeries(); } } diff --git a/src/org/geometerplus/fbreader/collection/BookList.java b/src/org/geometerplus/fbreader/collection/BookList.java index 71020cd11..50793a6b0 100644 --- a/src/org/geometerplus/fbreader/collection/BookList.java +++ b/src/org/geometerplus/fbreader/collection/BookList.java @@ -17,58 +17,58 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.collection; - -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.zlibrary.core.options.ZLIntegerOption; -import org.geometerplus.zlibrary.core.options.ZLOption; -import org.geometerplus.zlibrary.core.options.ZLStringOption; - -public class BookList { - private final static String GROUP = "BookList"; - static final String BOOK = "Book"; - static final String SIZE = "Size"; - private final ArrayList/*String*/ myFileNames = new ArrayList(); - - public BookList() { - int size = new ZLIntegerOption(ZLOption.STATE_CATEGORY, GROUP, SIZE, 0).getValue(); - for (int i = 0; i < size; ++i) { - String optionName = BOOK; - optionName += i; - ZLStringOption bookOption = new ZLStringOption(ZLOption.STATE_CATEGORY, GROUP, optionName, ""); - final String fileName = bookOption.getValue(); - if ((fileName.length() != 0) && !myFileNames.contains(fileName)) { - myFileNames.add(fileName); - } - } - } - - public ArrayList fileNames() { - return new ArrayList(myFileNames); - } - - public void addFileName(String fileName) { - if (!myFileNames.contains(fileName)) { - myFileNames.add(fileName); - save(); - } - } - - public void removeFileName(String fileName) { - myFileNames.remove(fileName); - save(); - } - - private void save() { - new ZLIntegerOption(ZLOption.STATE_CATEGORY, GROUP, SIZE, 0).setValue(myFileNames.size()); - int i = 0; - for (Iterator it = myFileNames.iterator(); it.hasNext(); ++i) { - String optionName = BOOK; - optionName += i; - new ZLStringOption(ZLOption.STATE_CATEGORY, GROUP, optionName, "").setValue((String)it.next()); - } - } -} - +package org.geometerplus.fbreader.collection; + +import java.util.*; +import org.geometerplus.zlibrary.core.util.*; + +import org.geometerplus.zlibrary.core.options.*; + +public class BookList { + private final static String GROUP = "BookList"; + private static final String BOOK = "Book"; + private static final String SIZE = "Size"; + + private final ArrayList myFileNames = new ArrayList(); + + public BookList() { + final int len = new ZLIntegerOption(ZLOption.STATE_CATEGORY, GROUP, SIZE, 0).getValue(); + final ArrayList fileNames = myFileNames; + final ZLStringOption bookOption = new ZLStringOption(ZLOption.STATE_CATEGORY, GROUP, "", ""); + for (int i = 0; i < len; ++i) { + bookOption.changeName(BOOK + i); + final String name = bookOption.getValue(); + if ((name.length() != 0) && !fileNames.contains(name)) { + fileNames.add(name); + } + } + } + + public ArrayList fileNames() { + return new ArrayList(myFileNames); + } + + public void addFileName(String fileName) { + if (!myFileNames.contains(fileName)) { + myFileNames.add(fileName); + save(); + } + } + + public void removeFileName(String fileName) { + myFileNames.remove(fileName); + save(); + } + + private void save() { + final ArrayList fileNames = myFileNames; + final int len = fileNames.size(); + new ZLIntegerOption(ZLOption.STATE_CATEGORY, GROUP, SIZE, 0).setValue(len); + final ZLStringOption bookOption = + new ZLStringOption(ZLOption.STATE_CATEGORY, GROUP, "", ""); + for (int i = 0; i < len; ++i) { + bookOption.changeName(BOOK + i); + bookOption.setValue((String)fileNames.get(i)); + } + } +} diff --git a/src/org/geometerplus/fbreader/description/BookDescription.java b/src/org/geometerplus/fbreader/description/BookDescription.java index 61f15c486..b6ad06dca 100644 --- a/src/org/geometerplus/fbreader/description/BookDescription.java +++ b/src/org/geometerplus/fbreader/description/BookDescription.java @@ -22,20 +22,19 @@ package org.geometerplus.fbreader.description; import java.util.*; import org.geometerplus.zlibrary.core.util.*; -import org.geometerplus.fbreader.formats.FormatPlugin; -import org.geometerplus.fbreader.option.FBOptions; import org.geometerplus.zlibrary.core.filesystem.ZLFile; -import org.geometerplus.zlibrary.core.options.ZLBooleanOption; -import org.geometerplus.zlibrary.core.options.ZLIntegerRangeOption; -import org.geometerplus.zlibrary.core.options.ZLStringOption; +import org.geometerplus.zlibrary.core.options.*; + +import org.geometerplus.fbreader.formats.*; +import org.geometerplus.fbreader.option.FBOptions; public class BookDescription { public final String FileName; private Author myAuthor; private String myTitle = ""; - private String mySequenceName = ""; - private int myNumberInSequence = 0; + private String mySeriesName = ""; + private int myNumberInSeries = 0; private String myLanguage = ""; private String myEncoding = ""; private final static HashMap ourDescriptions = new HashMap(); @@ -65,8 +64,8 @@ public class BookDescription { BookInfo info = new BookInfo(fileName); description.myAuthor = Author.SingleAuthor.create(info.AuthorDisplayNameOption.getValue(), info.AuthorSortKeyOption.getValue()); description.myTitle = info.TitleOption.getValue(); - description.mySequenceName = info.SequenceNameOption.getValue(); - description.myNumberInSequence = info.NumberInSequenceOption.getValue(); + description.mySeriesName = info.SeriesNameOption.getValue(); + description.myNumberInSeries = info.NumberInSeriesOption.getValue(); description.myLanguage = info.LanguageOption.getValue(); description.myEncoding = info.EncodingOption.getValue(); if (info.isFull()) { @@ -80,7 +79,7 @@ public class BookDescription { } ZLFile bookFile = new ZLFile(fileName); - FormatPlugin plugin = FormatPlugin.PluginCollection.instance().getPlugin(bookFile, false); + FormatPlugin plugin = PluginCollection.instance().getPlugin(bookFile, false); if ((plugin == null) || !plugin.readDescription(fileName, description)) { return null; } @@ -100,11 +99,10 @@ public class BookDescription { info.AuthorDisplayNameOption.setValue(description.myAuthor.getDisplayName()); info.AuthorSortKeyOption.setValue(description.myAuthor.getSortKey()); info.TitleOption.setValue(description.myTitle); - info.SequenceNameOption.setValue(description.mySequenceName); - info.NumberInSequenceOption.setValue(description.myNumberInSequence); + info.SeriesNameOption.setValue(description.mySeriesName); + info.NumberInSeriesOption.setValue(description.myNumberInSeries); info.LanguageOption.setValue(description.myLanguage); info.EncodingOption.setValue(description.myEncoding); - info.IsSequenceDefinedOption.setValue(true); } return description; } @@ -113,7 +111,7 @@ public class BookDescription { private BookDescription(String fileName) { FileName = fileName; myAuthor = null; - myNumberInSequence = 0; + myNumberInSeries = 0; } public Author getAuthor() { @@ -124,12 +122,12 @@ public class BookDescription { return myTitle; } - public String getSequenceName() { - return mySequenceName; + public String getSeriesName() { + return mySeriesName; } - public int getNumberInSequence() { - return myNumberInSequence; + public int getNumberInSeries() { + return myNumberInSeries; } public String getLanguage() { @@ -143,70 +141,41 @@ public class BookDescription { public static class BookInfo { - // This option is used to fix problem with missing sequence-related options - // in config in versions < 0.7.4k - // It makes no sense if old fbreader was never used on your device. - private final ZLBooleanOption IsSequenceDefinedOption; - public BookInfo(String fileName) { AuthorDisplayNameOption = new ZLStringOption(FBOptions.BOOKS_CATEGORY, fileName, "AuthorDisplayName", EMPTY); AuthorSortKeyOption = new ZLStringOption(FBOptions.BOOKS_CATEGORY, fileName, "AuthorSortKey", EMPTY); TitleOption = new ZLStringOption(FBOptions.BOOKS_CATEGORY, fileName, "Title", EMPTY); - SequenceNameOption = new ZLStringOption(FBOptions.BOOKS_CATEGORY, fileName, "Sequence", EMPTY); - NumberInSequenceOption = new ZLIntegerRangeOption(FBOptions.BOOKS_CATEGORY, fileName, "Number in seq", 0, 100, 0); + SeriesNameOption = new ZLStringOption(FBOptions.BOOKS_CATEGORY, fileName, "Sequence", EMPTY); + NumberInSeriesOption = new ZLIntegerRangeOption(FBOptions.BOOKS_CATEGORY, fileName, "Number in seq", 0, 100, 0); LanguageOption = new ZLStringOption(FBOptions.BOOKS_CATEGORY, fileName, "Language", UNKNOWN); EncodingOption = new ZLStringOption(FBOptions.BOOKS_CATEGORY, fileName, "Encoding", EMPTY); - IsSequenceDefinedOption = new ZLBooleanOption(FBOptions.BOOKS_CATEGORY, fileName, "SequenceDefined", new ZLFile(fileName).getExtension().equals("fb2")); - } public boolean isFull() { return - ((AuthorDisplayNameOption.getValue().length() != 0) && - (AuthorSortKeyOption.getValue().length() != 0) && - (TitleOption.getValue().length() != 0) && - (EncodingOption.getValue().length() != 0) && - IsSequenceDefinedOption.getValue()); + (AuthorDisplayNameOption.getValue().length() != 0) && + (AuthorSortKeyOption.getValue().length() != 0) && + (TitleOption.getValue().length() != 0) && + (EncodingOption.getValue().length() != 0); } void reset() { AuthorDisplayNameOption.setValue(EMPTY); AuthorSortKeyOption.setValue(EMPTY); TitleOption.setValue(EMPTY); - SequenceNameOption.setValue(EMPTY); - NumberInSequenceOption.setValue(0); + SeriesNameOption.setValue(EMPTY); + NumberInSeriesOption.setValue(0); LanguageOption.setValue(UNKNOWN); EncodingOption.setValue(EMPTY); } - private final ZLStringOption AuthorDisplayNameOption; - private final ZLStringOption AuthorSortKeyOption; - private final ZLStringOption TitleOption; - private final ZLStringOption SequenceNameOption; - private final ZLIntegerRangeOption NumberInSequenceOption; + public final ZLStringOption AuthorDisplayNameOption; + public final ZLStringOption AuthorSortKeyOption; + public final ZLStringOption TitleOption; + public final ZLStringOption SeriesNameOption; + public final ZLIntegerRangeOption NumberInSeriesOption; public final ZLStringOption LanguageOption; public final ZLStringOption EncodingOption; - - public ZLStringOption getAuthorSortKeyOption() { - return AuthorSortKeyOption; - } - - public ZLStringOption getAuthorDisplayNameOption() { - return AuthorDisplayNameOption; - } - - public ZLStringOption getSequenceNameOption() { - return SequenceNameOption; - } - - public ZLStringOption getTitleOption() { - return TitleOption; - } - - public ZLIntegerRangeOption getNumberInSequenceOption() { - return NumberInSequenceOption; - } - } static public class WritableBookDescription { @@ -269,20 +238,20 @@ public class BookDescription { myDescription.myTitle = title; } - public String getSequenceName() { - return myDescription.mySequenceName; + public String getSeriesName() { + return myDescription.mySeriesName; } - public void setSequenceName(String sequenceName) { - myDescription.mySequenceName = sequenceName; + public void setSeriesName(String sequenceName) { + myDescription.mySeriesName = sequenceName; } - public int getNumberInSequence() { - return myDescription.myNumberInSequence; + public int getNumberInSeries() { + return myDescription.myNumberInSeries; } - public void setNumberInSequence(int numberInSequence) { - myDescription.myNumberInSequence = numberInSequence; + public void setNumberInSeries(int numberInSeries) { + myDescription.myNumberInSeries = numberInSeries; } public String getFileName() { diff --git a/src/org/geometerplus/fbreader/description/BookDescriptionUtil.java b/src/org/geometerplus/fbreader/description/BookDescriptionUtil.java index 32af9237c..35a35bc06 100644 --- a/src/org/geometerplus/fbreader/description/BookDescriptionUtil.java +++ b/src/org/geometerplus/fbreader/description/BookDescriptionUtil.java @@ -17,75 +17,76 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.description; - -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.fbreader.description.BookDescription.BookInfo; -import org.geometerplus.fbreader.formats.FormatPlugin.PluginCollection; -import org.geometerplus.fbreader.option.FBOptions; -import org.geometerplus.zlibrary.core.filesystem.ZLDir; -import org.geometerplus.zlibrary.core.filesystem.ZLFile; -import org.geometerplus.zlibrary.core.options.ZLIntegerOption; -import org.geometerplus.zlibrary.core.options.ZLStringOption; - -public class BookDescriptionUtil { - private static final String SIZE = "Size"; - private static final String ENTRY = "Entry"; - private static final String ENTRIES_NUMBER = "EntriesNumber"; - - - public static boolean checkInfo(ZLFile file) { - ZLIntegerOption op = new ZLIntegerOption(FBOptions.BOOKS_CATEGORY, file.getPath(), SIZE, -1); - return op.getValue() == (int)file.size(); - - } - - public static void saveInfo(ZLFile file) { - new ZLIntegerOption(FBOptions.BOOKS_CATEGORY, file.getPath(), SIZE, -1).setValue((int)file.size()); - } - - public static void listZipEntries(ZLFile zipFile, ArrayList entries) { - int entriesNumber = new ZLIntegerOption(FBOptions.BOOKS_CATEGORY, zipFile.getPath(), ENTRIES_NUMBER, -1).getValue(); - if (entriesNumber == -1) { - //??? why so??resetZipInfo(zipFile.path()); - resetZipInfo(zipFile); - entriesNumber = new ZLIntegerOption(FBOptions.BOOKS_CATEGORY, zipFile.getPath(), ENTRIES_NUMBER, -1).getValue(); - } - for (int i = 0; i < entriesNumber; ++i) { - String optionName = ENTRY; - optionName += i; - String entry = new ZLStringOption(FBOptions.BOOKS_CATEGORY, zipFile.getPath(), optionName, "").getValue(); - if (entry.length() != 0) { - entries.add(entry); - } - } - - } - - public static void resetZipInfo(ZLFile zipFile) { - //ZLOption.clearGroup(zipFile.path()); - - ZLDir zipDir = zipFile.getDirectory(); - if (zipDir != null) { - String zipPrefix = zipFile.getPath() + ':'; - int counter = 0; - final ArrayList entries = zipDir.collectFiles(); - final int size = entries.size(); - for (int i = 0; i < size; ++i) { - String entry = (String)entries.get(i); - if (PluginCollection.instance().getPlugin(new ZLFile(entry), true) != null) { - String optionName = ENTRY; - optionName += counter; - String fullName = zipPrefix + entry; - new ZLStringOption(FBOptions.BOOKS_CATEGORY, zipFile.getPath(), optionName, "").setValue(fullName); - new BookInfo(fullName).reset(); - ++counter; - } - } - new ZLIntegerOption(FBOptions.BOOKS_CATEGORY, zipFile.getPath(), ENTRIES_NUMBER, -1).setValue(counter); - } - } - -} +package org.geometerplus.fbreader.description; + +import java.util.*; +import org.geometerplus.zlibrary.core.util.*; + +import org.geometerplus.fbreader.description.BookDescription.BookInfo; +import org.geometerplus.fbreader.formats.PluginCollection; +import org.geometerplus.fbreader.option.FBOptions; +import org.geometerplus.zlibrary.core.filesystem.ZLDir; +import org.geometerplus.zlibrary.core.filesystem.ZLFile; +import org.geometerplus.zlibrary.core.options.ZLIntegerOption; +import org.geometerplus.zlibrary.core.options.ZLStringOption; + +public class BookDescriptionUtil { + private static final String SIZE = "Size"; + private static final String ENTRY = "Entry"; + private static final String ENTRIES_NUMBER = "EntriesNumber"; + + + public static boolean checkInfo(ZLFile file) { + ZLIntegerOption op = new ZLIntegerOption(FBOptions.BOOKS_CATEGORY, file.getPath(), SIZE, -1); + return op.getValue() == (int)file.size(); + + } + + public static void saveInfo(ZLFile file) { + new ZLIntegerOption(FBOptions.BOOKS_CATEGORY, file.getPath(), SIZE, -1).setValue((int)file.size()); + } + + public static void listZipEntries(ZLFile zipFile, ArrayList entries) { + int entriesNumber = new ZLIntegerOption(FBOptions.BOOKS_CATEGORY, zipFile.getPath(), ENTRIES_NUMBER, -1).getValue(); + if (entriesNumber == -1) { + //??? why so??resetZipInfo(zipFile.path()); + resetZipInfo(zipFile); + entriesNumber = new ZLIntegerOption(FBOptions.BOOKS_CATEGORY, zipFile.getPath(), ENTRIES_NUMBER, -1).getValue(); + } + final ZLStringOption entryOption = + new ZLStringOption(FBOptions.BOOKS_CATEGORY, zipFile.getPath(), "", ""); + for (int i = 0; i < entriesNumber; ++i) { + entryOption.changeName(ENTRY + i); + final String entry = entryOption.getValue(); + if (entry.length() != 0) { + entries.add(entry); + } + } + + } + + public static void resetZipInfo(ZLFile zipFile) { + //ZLOption.clearGroup(zipFile.path()); + + ZLDir zipDir = zipFile.getDirectory(); + if (zipDir != null) { + final String zipPrefix = zipFile.getPath() + ':'; + int counter = 0; + final ArrayList entries = zipDir.collectFiles(); + final int size = entries.size(); + for (int i = 0; i < size; ++i) { + String entry = (String)entries.get(i); + final ZLStringOption entryOption = + new ZLStringOption(FBOptions.BOOKS_CATEGORY, zipFile.getPath(), "", ""); + if (PluginCollection.instance().getPlugin(new ZLFile(entry), true) != null) { + final String fullName = zipPrefix + entry; + entryOption.changeName(ENTRY + counter); + entryOption.setValue(fullName); + new BookInfo(fullName).reset(); + ++counter; + } + } + new ZLIntegerOption(FBOptions.BOOKS_CATEGORY, zipFile.getPath(), ENTRIES_NUMBER, -1).setValue(counter); + } + } +} diff --git a/src/org/geometerplus/fbreader/encoding/ZLEncodingCollection.java b/src/org/geometerplus/fbreader/encoding/ZLEncodingCollection.java index 8153af6f1..4eeaf9523 100644 --- a/src/org/geometerplus/fbreader/encoding/ZLEncodingCollection.java +++ b/src/org/geometerplus/fbreader/encoding/ZLEncodingCollection.java @@ -17,93 +17,93 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.encoding; - -import java.io.File; -import java.util.ArrayList; +package org.geometerplus.fbreader.encoding; + +import java.io.File; +import java.util.ArrayList; import java.util.HashMap; -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.zlibrary.core.config.ZLConfigManager; -import org.geometerplus.zlibrary.core.library.ZLibrary; -import org.geometerplus.zlibrary.core.options.ZLBooleanOption; -import org.geometerplus.zlibrary.core.options.ZLOption; +import org.geometerplus.zlibrary.core.util.*; + +import org.geometerplus.zlibrary.core.config.ZLConfigManager; +import org.geometerplus.zlibrary.core.library.ZLibrary; +import org.geometerplus.zlibrary.core.options.ZLBooleanOption; +import org.geometerplus.zlibrary.core.options.ZLOption; import org.geometerplus.zlibrary.core.xml.ZLStringMap; import org.geometerplus.zlibrary.core.xml.ZLXMLReaderAdapter; - -public class ZLEncodingCollection { - private static ZLEncodingCollection ourInstance; + +public class ZLEncodingCollection { + private static ZLEncodingCollection ourInstance; private static ZLBooleanOption ourUseWindows1252HackOption; private final ArrayList/**/ mySets = new ArrayList(); private final HashMap/**/ myInfosByName = new HashMap(); - private final ArrayList/**/ myProviders = new ArrayList(); + private final ArrayList/**/ myProviders = new ArrayList(); private ZLEncodingCollection() { registerProvider(new DummyEncodingConverterProvider()); // registerProvider(new MyEncodingConverterProvider()); } - - public static ZLEncodingCollection instance() { - if (ourInstance == null) { - ourInstance = new ZLEncodingCollection(); - } - return ourInstance; - } - public static String encodingDescriptionPath() { - return ZLibrary.JAR_DATA_PREFIX + "data/encodings/Encodings.xml"; - } - - public static ZLBooleanOption useWindows1252HackOption() { - if (ourUseWindows1252HackOption == null) { - ourUseWindows1252HackOption = - new ZLBooleanOption(ZLOption.CONFIG_CATEGORY, "Encoding", "UseWindows1252Hack", true); - } - return ourUseWindows1252HackOption; - } - - public static boolean useWindows1252Hack() { - return ZLConfigManager.getInstance() != null/*.isInitialised()*/ && useWindows1252HackOption().getValue(); - } - - - public ArrayList sets() { - init(); - return mySets; - } - public ZLEncodingConverterInfo info(String name) { - init(); - String lowerCaseName = name.toLowerCase(); - if (useWindows1252Hack() && (lowerCaseName == "iso-8859-1")) { - lowerCaseName = "windows-1252"; - } - return (ZLEncodingConverterInfo)myInfosByName.get(lowerCaseName); - } - - public ZLEncodingConverterInfo info(int code) { - String name = "" + code; - return info(name); - } - - public ZLEncodingConverter defaultConverter() { - return new DummyEncodingConverterProvider().createConverter(); - } - public void registerProvider(ZLEncodingConverterProvider provider) { - myProviders.add(provider); - } - + + public static ZLEncodingCollection instance() { + if (ourInstance == null) { + ourInstance = new ZLEncodingCollection(); + } + return ourInstance; + } + public static String encodingDescriptionPath() { + return ZLibrary.JAR_DATA_PREFIX + "data/encodings/Encodings.xml"; + } + + public static ZLBooleanOption useWindows1252HackOption() { + if (ourUseWindows1252HackOption == null) { + ourUseWindows1252HackOption = + new ZLBooleanOption(ZLOption.CONFIG_CATEGORY, "Encoding", "UseWindows1252Hack", true); + } + return ourUseWindows1252HackOption; + } + + public static boolean useWindows1252Hack() { + return ZLConfigManager.getInstance() != null/*.isInitialised()*/ && useWindows1252HackOption().getValue(); + } + + + public ArrayList sets() { + init(); + return mySets; + } + public ZLEncodingConverterInfo info(String name) { + init(); + String lowerCaseName = name.toLowerCase(); + if (useWindows1252Hack() && (lowerCaseName == "iso-8859-1")) { + lowerCaseName = "windows-1252"; + } + return (ZLEncodingConverterInfo)myInfosByName.get(lowerCaseName); + } + + public ZLEncodingConverterInfo info(int code) { + String name = "" + code; + return info(name); + } + + public ZLEncodingConverter defaultConverter() { + return new DummyEncodingConverterProvider().createConverter(); + } + public void registerProvider(ZLEncodingConverterProvider provider) { + myProviders.add(provider); + } + // private void addInfo(ZLEncodingConverterInfo info) {} - - ArrayList/**/ providers() { - return myProviders; - } - - private void init() { - if (mySets.isEmpty()) { + + ArrayList/**/ providers() { + return myProviders; + } + + private void init() { + if (mySets.isEmpty()) { // String prefix = encodingDescriptionPath() + File.separator; - // System.out.println("trying to read " + prefix + "Encodings.xml"); - new ZLEncodingCollectionReader(this).read(encodingDescriptionPath()); - } + // System.out.println("trying to read " + prefix + "Encodings.xml"); + new ZLEncodingCollectionReader(this).read(encodingDescriptionPath()); + } } private static class ZLEncodingCollectionReader extends ZLXMLReaderAdapter { @@ -179,6 +179,5 @@ public class ZLEncodingCollection { } return false; } - - } -} + } +} diff --git a/src/org/geometerplus/fbreader/encoding/ZLEncodingConverter.java b/src/org/geometerplus/fbreader/encoding/ZLEncodingConverter.java index 78197c9e8..28ed690cc 100644 --- a/src/org/geometerplus/fbreader/encoding/ZLEncodingConverter.java +++ b/src/org/geometerplus/fbreader/encoding/ZLEncodingConverter.java @@ -17,17 +17,17 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.encoding; - -public abstract class ZLEncodingConverter { - protected ZLEncodingConverter() {} - - //abstract public void convert(String dst, const char *srcStart, const char *srcEnd); - abstract public String convert(char [] src, int start, int end); - //convert(dst, src.toCharArray(), src.data() + src.length()); - public abstract void reset(); - public abstract boolean fillTable(int[] map); - - //private ZLEncodingConverter(ZLEncodingConverter zl); - //private ZLEncodingConverter &operator=(ZLEncodingConverter zl); -} +package org.geometerplus.fbreader.encoding; + +public abstract class ZLEncodingConverter { + protected ZLEncodingConverter() {} + + //abstract public void convert(String dst, const char *srcStart, const char *srcEnd); + abstract public String convert(char [] src, int start, int end); + //convert(dst, src.toCharArray(), src.data() + src.length()); + public abstract void reset(); + public abstract boolean fillTable(int[] map); + + //private ZLEncodingConverter(ZLEncodingConverter zl); + //private ZLEncodingConverter &operator=(ZLEncodingConverter zl); +} diff --git a/src/org/geometerplus/fbreader/encoding/ZLEncodingConverterInfo.java b/src/org/geometerplus/fbreader/encoding/ZLEncodingConverterInfo.java index d002f04b9..338627c7d 100644 --- a/src/org/geometerplus/fbreader/encoding/ZLEncodingConverterInfo.java +++ b/src/org/geometerplus/fbreader/encoding/ZLEncodingConverterInfo.java @@ -17,63 +17,63 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.encoding; - -import java.util.ArrayList; -import java.util.Iterator; - -public class ZLEncodingConverterInfo { +package org.geometerplus.fbreader.encoding; + +import java.util.ArrayList; +import java.util.Iterator; + +public class ZLEncodingConverterInfo { private String myName = ""; private String myVisibleName = ""; private ArrayList/**/ myAliases = new ArrayList(); - public ZLEncodingConverterInfo(String name, String region) { - myName = name; - myVisibleName = region + " (" + name + ")"; - addAlias(myName); - } - - public void addAlias(String alias) { - myAliases.add(alias); - } - - public String name() { - return myName; - } - - public String visibleName() { - return myVisibleName; - } - - public ZLEncodingConverter createConverter() { - ZLEncodingCollection collection = ZLEncodingCollection.instance(); - ArrayList providers = collection.providers(); - for (Iterator it = providers.iterator(); it.hasNext(); ) { - for (Iterator jt = myAliases.iterator(); jt.hasNext(); ) { - ZLEncodingConverterProvider itp = (ZLEncodingConverterProvider)it.next(); - String str = (String)jt.next(); - if (itp.providesConverter(str)) { - return itp.createConverter(str); - } - } - } - - return ZLEncodingCollection.instance().defaultConverter(); - } - - public boolean canCreateConverter() { - ZLEncodingCollection collection = ZLEncodingCollection.instance(); - ArrayList providers = collection.providers(); + public ZLEncodingConverterInfo(String name, String region) { + myName = name; + myVisibleName = region + " (" + name + ")"; + addAlias(myName); + } + + public void addAlias(String alias) { + myAliases.add(alias); + } + + public String name() { + return myName; + } + + public String visibleName() { + return myVisibleName; + } + + public ZLEncodingConverter createConverter() { + ZLEncodingCollection collection = ZLEncodingCollection.instance(); + ArrayList providers = collection.providers(); + for (Iterator it = providers.iterator(); it.hasNext(); ) { + for (Iterator jt = myAliases.iterator(); jt.hasNext(); ) { + ZLEncodingConverterProvider itp = (ZLEncodingConverterProvider)it.next(); + String str = (String)jt.next(); + if (itp.providesConverter(str)) { + return itp.createConverter(str); + } + } + } + + return ZLEncodingCollection.instance().defaultConverter(); + } + + public boolean canCreateConverter() { + ZLEncodingCollection collection = ZLEncodingCollection.instance(); + ArrayList providers = collection.providers(); for (Iterator it = providers.iterator(); it.hasNext();) { - final ZLEncodingConverterProvider privider = (ZLEncodingConverterProvider)it.next(); - for (Iterator jt = myAliases.iterator(); jt.hasNext(); ) { - if (privider.providesConverter((String)jt.next())) { - return true; - } - } - } - return false; - } - //private ZLEncodingConverterInfo(const ZLEncodingConverterInfo&); - //private ZLEncodingConverterInfo &operator=(const ZLEncodingConverterInfo&); -} + final ZLEncodingConverterProvider privider = (ZLEncodingConverterProvider)it.next(); + for (Iterator jt = myAliases.iterator(); jt.hasNext(); ) { + if (privider.providesConverter((String)jt.next())) { + return true; + } + } + } + return false; + } + //private ZLEncodingConverterInfo(const ZLEncodingConverterInfo&); + //private ZLEncodingConverterInfo &operator=(const ZLEncodingConverterInfo&); +} diff --git a/src/org/geometerplus/fbreader/encoding/ZLEncodingConverterProvider.java b/src/org/geometerplus/fbreader/encoding/ZLEncodingConverterProvider.java index b602f415f..129f77d6d 100644 --- a/src/org/geometerplus/fbreader/encoding/ZLEncodingConverterProvider.java +++ b/src/org/geometerplus/fbreader/encoding/ZLEncodingConverterProvider.java @@ -17,12 +17,12 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.encoding; - -public abstract class ZLEncodingConverterProvider { - protected ZLEncodingConverterProvider() {} - - public abstract boolean providesConverter(String encoding); - public abstract ZLEncodingConverter createConverter(String encoding); - -} +package org.geometerplus.fbreader.encoding; + +public abstract class ZLEncodingConverterProvider { + protected ZLEncodingConverterProvider() { + } + + public abstract boolean providesConverter(String encoding); + public abstract ZLEncodingConverter createConverter(String encoding); +} diff --git a/src/org/geometerplus/fbreader/encoding/ZLEncodingSet.java b/src/org/geometerplus/fbreader/encoding/ZLEncodingSet.java index 16bda2d3c..684f7bca9 100644 --- a/src/org/geometerplus/fbreader/encoding/ZLEncodingSet.java +++ b/src/org/geometerplus/fbreader/encoding/ZLEncodingSet.java @@ -17,26 +17,27 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.encoding; - -import java.util.ArrayList; - -public class ZLEncodingSet { +package org.geometerplus.fbreader.encoding; + +import java.util.ArrayList; + +public class ZLEncodingSet { private String myName = ""; private ArrayList/**/ myInfos = new ArrayList(); - public ZLEncodingSet(String name) { - - } - public void addInfo(ZLEncodingConverterInfo info) { - myInfos.add(info); - } - - public String name() { - return myName; - } - - public ArrayList/**/ infos() { - return myInfos; - } -} + public ZLEncodingSet(String name) { + + } + + public void addInfo(ZLEncodingConverterInfo info) { + myInfos.add(info); + } + + public String name() { + return myName; + } + + public ArrayList/**/ infos() { + return myInfos; + } +} diff --git a/src/org/geometerplus/fbreader/encodingOption/EncodingEntry.java b/src/org/geometerplus/fbreader/encodingOption/EncodingEntry.java index 761b60827..4c28dffc5 100644 --- a/src/org/geometerplus/fbreader/encodingOption/EncodingEntry.java +++ b/src/org/geometerplus/fbreader/encodingOption/EncodingEntry.java @@ -17,92 +17,91 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.encodingOption; - -import java.util.ArrayList; -import java.util.HashMap; - -import org.geometerplus.fbreader.encoding.ZLEncodingCollection; -import org.geometerplus.fbreader.encoding.ZLEncodingConverterInfo; -import org.geometerplus.fbreader.encoding.ZLEncodingSet; -import org.geometerplus.zlibrary.core.options.ZLStringOption; -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry; - -public class EncodingEntry extends ZLComboOptionEntry { - private static final String AUTO = "auto"; - private static ArrayList/**/ AUTO_ENCODING; - final ArrayList/**/ mySetNames = new ArrayList(); - private final HashMap/*>*/ myValues = new HashMap(); - private final HashMap/**/ myInitialValues = new HashMap(); - private final HashMap/**/ myValueByName = new HashMap(); - private ZLStringOption myEncodingOption; - String myInitialSetName = ""; - - public EncodingEntry(ZLStringOption encodingOption) { - myEncodingOption = encodingOption; - final String value = myEncodingOption.getValue(); - if (AUTO.equals(value)) { - myInitialSetName = value; - myInitialValues.put(value, value); - setActive(false); - return; - } - +package org.geometerplus.fbreader.encodingOption; + +import java.util.ArrayList; +import java.util.HashMap; + +import org.geometerplus.fbreader.encoding.ZLEncodingCollection; +import org.geometerplus.fbreader.encoding.ZLEncodingConverterInfo; +import org.geometerplus.fbreader.encoding.ZLEncodingSet; +import org.geometerplus.zlibrary.core.options.ZLStringOption; +import org.geometerplus.zlibrary.core.util.*; + +import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry; + +public class EncodingEntry extends ZLComboOptionEntry { + private static final String AUTO = "auto"; + private static ArrayList/**/ AUTO_ENCODING; + final ArrayList/**/ mySetNames = new ArrayList(); + private final HashMap/*>*/ myValues = new HashMap(); + private final HashMap/**/ myInitialValues = new HashMap(); + private final HashMap/**/ myValueByName = new HashMap(); + private ZLStringOption myEncodingOption; + String myInitialSetName = ""; + + public EncodingEntry(ZLStringOption encodingOption) { + myEncodingOption = encodingOption; + final String value = myEncodingOption.getValue(); + if (AUTO.equals(value)) { + myInitialSetName = value; + myInitialValues.put(value, value); + setActive(false); + return; + } + final ArrayList/**/ sets = ZLEncodingCollection.instance().sets(); System.out.println("sets size = " + sets.size()); - - for (int i = 0; i < sets.size(); i++) { - ZLEncodingSet es = (ZLEncodingSet) sets.get(i); + + for (int i = 0; i < sets.size(); i++) { + ZLEncodingSet es = (ZLEncodingSet) sets.get(i); final ArrayList/**/ infos = es.infos(); - // System.out.println(es.name()); - mySetNames.add(es.name()); - ArrayList/**/ names = new ArrayList(); - for (int j = 0; j < infos.size(); j++) { - ZLEncodingConverterInfo eci = (ZLEncodingConverterInfo) infos.get(j); - if (eci.name().equals(value)) { - myInitialSetName = es.name(); - myInitialValues.put(myInitialSetName, eci.visibleName()); - } - names.add(eci.visibleName()); - myValueByName.put(eci.visibleName(), eci.name()); + // System.out.println(es.name()); + mySetNames.add(es.name()); + ArrayList/**/ names = new ArrayList(); + for (int j = 0; j < infos.size(); j++) { + ZLEncodingConverterInfo eci = (ZLEncodingConverterInfo) infos.get(j); + if (eci.name().equals(value)) { + myInitialSetName = es.name(); + myInitialValues.put(myInitialSetName, eci.visibleName()); + } + names.add(eci.visibleName()); + myValueByName.put(eci.visibleName(), eci.name()); } - myValues.put(es.name(), names); - } - //TODO: - if (myInitialSetName.length() == 0 && !mySetNames.isEmpty()) { - myInitialSetName = (String) mySetNames.get(0); - } - } - - public ArrayList getValues() { - if (AUTO.equals(initialValue())) { - if (AUTO_ENCODING == null) { - AUTO_ENCODING = new ArrayList(); - AUTO_ENCODING.add(AUTO); - } - return AUTO_ENCODING; - } - return (ArrayList) myValues.get(myInitialSetName); - } - - public String initialValue() { - if ( myInitialValues.get(myInitialSetName) == null) { - myInitialValues.put(myInitialSetName, ((ArrayList) myValues.get(myInitialSetName)).get(0)); - } - return (String) myInitialValues.get(myInitialSetName); - } - - public void onAccept(String value) { - if (!AUTO.equals(initialValue())) { - myEncodingOption.setValue((String) myValueByName.get(value)); - } - } - - public void onValueSelected(int index) { - myInitialValues.put(myInitialSetName, getValues().get(index)); - } - -} + myValues.put(es.name(), names); + } + //TODO: + if (myInitialSetName.length() == 0 && !mySetNames.isEmpty()) { + myInitialSetName = (String) mySetNames.get(0); + } + } + + public ArrayList getValues() { + if (AUTO.equals(initialValue())) { + if (AUTO_ENCODING == null) { + AUTO_ENCODING = new ArrayList(); + AUTO_ENCODING.add(AUTO); + } + return AUTO_ENCODING; + } + return (ArrayList) myValues.get(myInitialSetName); + } + + public String initialValue() { + if ( myInitialValues.get(myInitialSetName) == null) { + myInitialValues.put(myInitialSetName, ((ArrayList) myValues.get(myInitialSetName)).get(0)); + } + return (String) myInitialValues.get(myInitialSetName); + } + + public void onAccept(String value) { + if (!AUTO.equals(initialValue())) { + myEncodingOption.setValue((String) myValueByName.get(value)); + } + } + + public void onValueSelected(int index) { + myInitialValues.put(myInitialSetName, getValues().get(index)); + } +} diff --git a/src/org/geometerplus/fbreader/encodingOption/EncodingSetEntry.java b/src/org/geometerplus/fbreader/encodingOption/EncodingSetEntry.java index 1db122aa4..10441a6f3 100644 --- a/src/org/geometerplus/fbreader/encodingOption/EncodingSetEntry.java +++ b/src/org/geometerplus/fbreader/encodingOption/EncodingSetEntry.java @@ -17,32 +17,31 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.encodingOption; - -import java.util.ArrayList; - -import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry; - -public class EncodingSetEntry extends ZLComboOptionEntry { - private EncodingEntry myEncodingEntry; - - public EncodingSetEntry(EncodingEntry encodingEntry) { - myEncodingEntry = encodingEntry; - } - - public ArrayList getValues() { - return myEncodingEntry.mySetNames; - } - - public String initialValue() { - return myEncodingEntry.myInitialSetName; - } - - public void onAccept(String value) {} - - public void onValueSelected(int index) { - myEncodingEntry.myInitialSetName = (String) getValues().get(index); - myEncodingEntry.resetView(); - } - -} +package org.geometerplus.fbreader.encodingOption; + +import java.util.ArrayList; + +import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry; + +public class EncodingSetEntry extends ZLComboOptionEntry { + private EncodingEntry myEncodingEntry; + + public EncodingSetEntry(EncodingEntry encodingEntry) { + myEncodingEntry = encodingEntry; + } + + public ArrayList getValues() { + return myEncodingEntry.mySetNames; + } + + public String initialValue() { + return myEncodingEntry.myInitialSetName; + } + + public void onAccept(String value) {} + + public void onValueSelected(int index) { + myEncodingEntry.myInitialSetName = (String) getValues().get(index); + myEncodingEntry.resetView(); + } +} diff --git a/src/org/geometerplus/fbreader/fbreader/BookInfoDialog.java b/src/org/geometerplus/fbreader/fbreader/BookInfoDialog.java index cc91a0274..88445045b 100644 --- a/src/org/geometerplus/fbreader/fbreader/BookInfoDialog.java +++ b/src/org/geometerplus/fbreader/fbreader/BookInfoDialog.java @@ -17,212 +17,203 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.fbreader; - -import java.util.*; - -import org.geometerplus.fbreader.collection.BookCollection; -import org.geometerplus.fbreader.description.*; -import org.geometerplus.fbreader.formats.FormatPlugin; -import org.geometerplus.zlibrary.core.dialogs.*; -import org.geometerplus.zlibrary.core.filesystem.ZLFile; -import org.geometerplus.zlibrary.core.language.ZLLanguageList; -import org.geometerplus.zlibrary.core.optionEntries.*; -import org.geometerplus.fbreader.encodingOption.*; -import org.geometerplus.fbreader.encodingOption.EncodingEntry; - -public class BookInfoDialog { - private final ZLOptionsDialog myDialog; - private final BookCollection myCollection; - private final BookDescription.BookInfo myBookInfo; -// private FormatInfoPage myFormatInfoPage; - - private AuthorDisplayNameEntry myAuthorDisplayNameEntry; - private AuthorSortKeyEntry myAuthorSortKeyEntry; - private ZLComboOptionEntry myEncodingSetEntry; - private ZLComboOptionEntry myEncodingEntry; - private ZLComboOptionEntry myLanguageEntry; - private SeriesTitleEntry mySeriesTitleEntry; - private ZLSpinOptionEntry myBookNumberEntry; - //private FormatInfoPage myFormatInfoPage; - - - public BookInfoDialog(BookCollection collection, String fileName, Runnable actionOnAccept) { - myCollection = collection; - myBookInfo = new BookDescription.BookInfo(fileName); - myDialog = ZLDialogManager.getInstance().createOptionsDialog("InfoDialog", actionOnAccept, null, false); - - ZLDialogContent commonTab = myDialog.createTab("Common"); - commonTab.addOption("file", new ZLStringInfoEntry(new ZLFile(fileName).getPath())); - commonTab.addOption("title", myBookInfo.getTitleOption()); - - myAuthorDisplayNameEntry = new AuthorDisplayNameEntry(this); - myAuthorSortKeyEntry = new AuthorSortKeyEntry(this); - myEncodingEntry = new EncodingEntry(myBookInfo.EncodingOption); - myEncodingSetEntry = - (!"auto".equals(myEncodingEntry.initialValue())) ? - new EncodingSetEntry((EncodingEntry)myEncodingEntry) : null; - ArrayList/**/ languageCodes = ZLLanguageList.languageCodes(); - languageCodes.add("de-traditional"); - myLanguageEntry = new ZLLanguageOptionEntry(myBookInfo.LanguageOption, languageCodes); - - mySeriesTitleEntry = new SeriesTitleEntry(this); - myBookNumberEntry = new ZLSimpleSpinOptionEntry(myBookInfo.getNumberInSequenceOption(), 1); - - commonTab.addOption("authorDisplayName", myAuthorDisplayNameEntry); - commonTab.addOption("authorSortKey", myAuthorSortKeyEntry); - commonTab.addOption("language", myLanguageEntry); - if (myEncodingSetEntry != null) { - commonTab.addOption("encodingSet", myEncodingSetEntry); - } - commonTab.addOption("encoding", myEncodingEntry); - - ZLDialogContent seriesTab = myDialog.createTab("Series"); - - seriesTab.addOption("seriesTitle", mySeriesTitleEntry); - seriesTab.addOption("bookNumber", myBookNumberEntry); - - mySeriesTitleEntry.onValueEdited(mySeriesTitleEntry.initialValue()); - - - FormatPlugin plugin = FormatPlugin.PluginCollection.instance().getPlugin(new ZLFile(fileName), false); - //if (plugin != null) { - //myFormatInfoPage = plugin.createInfoPage(myDialog, fileName); - //} - - } - - public ZLOptionsDialog getDialog() { - return myDialog; - } - - private static class AuthorSortKeyEntry extends ZLStringOptionEntry { - private final BookInfoDialog myInfoDialog; - - public AuthorSortKeyEntry(BookInfoDialog dialog) { - myInfoDialog = dialog; - } - - public String initialValue() { - Author currentAuthor = myInfoDialog.myAuthorDisplayNameEntry.myCurrentAuthor; - return currentAuthor == null ? - myInfoDialog.myBookInfo.getAuthorSortKeyOption().getValue() : - currentAuthor.getSortKey(); - } - - public void onAccept(String value) { - myInfoDialog.myBookInfo.getAuthorSortKeyOption().setValue(value); - } - } - - private static class AuthorDisplayNameEntry extends ZLComboOptionEntry { - private final BookInfoDialog myInfoDialog; - private final ArrayList/*String*/ myValues = new ArrayList(); - private Author myCurrentAuthor; - - public AuthorDisplayNameEntry(BookInfoDialog dialog) { - super(true); - myInfoDialog = dialog; - } - - public ArrayList getValues() { - if (myValues.size() == 0) { - final String initial = initialValue(); - boolean addInitial = true; - final ArrayList authors = myInfoDialog.myCollection.authors(); - for (int i = 0; i < authors.size(); i++) { - final String name = ((Author) authors.get(i)).getDisplayName(); - if (addInitial && (name != null && name.equals(initial))) { - addInitial = false; - } - myValues.add(name); - } - if (addInitial) { - myValues.add(initial); - } - } - return myValues; - } - - public String initialValue() { - return myInfoDialog.myBookInfo.getAuthorDisplayNameOption().getValue(); - } - - public void onAccept(String value) { - myInfoDialog.myBookInfo.getAuthorDisplayNameOption().setValue(value); - } - - public void onValueSelected(int index) { - final ArrayList authors = myInfoDialog.myCollection.authors(); - if (index < authors.size()) { - myCurrentAuthor = (Author)authors.get(index); - } - myInfoDialog.myAuthorSortKeyEntry.resetView(); - myInfoDialog.mySeriesTitleEntry.resetView(); - } - } - - private static class SeriesTitleEntry extends ZLComboOptionEntry { - private final BookInfoDialog myInfoDialog; - private final ArrayList/*String*/ myValues = new ArrayList(); - private Author myOriginalAuthor; - - public SeriesTitleEntry(BookInfoDialog dialog) { - super(true); - myInfoDialog = dialog; - final ArrayList authors = myInfoDialog.myCollection.authors(); - final String authorName = myInfoDialog.myBookInfo.getAuthorDisplayNameOption().getValue(); - final String authorKey = myInfoDialog.myBookInfo.getAuthorSortKeyOption().getValue(); - for (int i = 0; i < authors.size(); i++) { - final Author author = (Author) authors.get(i); - if ((authorName != null && authorName.equals(author.getDisplayName())) && - (authorKey != null && authorKey.equals(author.getSortKey()))) { - myOriginalAuthor = author; - break; - } - } - } - - public boolean useOnValueEdited() { - return true; - } - - public void onValueEdited(String value) { - myInfoDialog.myBookNumberEntry.setVisible(value != null && !value.equals(""));; - } - - public void onValueSelected(int index) { - myInfoDialog.myBookNumberEntry.setVisible(index != 0); - } - - public ArrayList getValues() { - myValues.clear(); - HashSet valuesSet = new HashSet(); - valuesSet.add(initialValue()); - valuesSet.add(""); - if (myOriginalAuthor != null) { - final ArrayList books = myInfoDialog.myCollection.books(myOriginalAuthor); - for (int i = 0; i < books.size(); i++) { - valuesSet.add(((BookDescription) books.get(i)).getSequenceName()); - } - } - Author currentAuthor = myInfoDialog.myAuthorDisplayNameEntry.myCurrentAuthor; - if (currentAuthor != null && (currentAuthor != myOriginalAuthor)) { - final ArrayList books = myInfoDialog.myCollection.books(currentAuthor); - for (int i = 0; i < books.size(); i++) { - valuesSet.add(((BookDescription) books.get(i)).getSequenceName()); - } - } - myValues.addAll(valuesSet); - return myValues; - } - - public String initialValue() { - return myInfoDialog.myBookInfo.getSequenceNameOption().getValue(); - } - - public void onAccept(String value) { - myInfoDialog.myBookInfo.getSequenceNameOption().setValue(value); - } - } -} +package org.geometerplus.fbreader.fbreader; + +import java.util.*; + +import org.geometerplus.zlibrary.core.dialogs.*; +import org.geometerplus.zlibrary.core.filesystem.ZLFile; +import org.geometerplus.zlibrary.core.language.ZLLanguageList; +import org.geometerplus.zlibrary.core.optionEntries.*; + +import org.geometerplus.fbreader.collection.BookCollection; +import org.geometerplus.fbreader.description.*; +import org.geometerplus.fbreader.formats.*; +import org.geometerplus.fbreader.encodingOption.*; +import org.geometerplus.fbreader.encodingOption.EncodingEntry; + +public class BookInfoDialog { + private final ZLOptionsDialog myDialog; + private final BookCollection myCollection; + private final BookDescription.BookInfo myBookInfo; +// private FormatInfoPage myFormatInfoPage; + + private AuthorDisplayNameEntry myAuthorDisplayNameEntry; + private AuthorSortKeyEntry myAuthorSortKeyEntry; + private ZLComboOptionEntry myEncodingSetEntry; + private ZLComboOptionEntry myEncodingEntry; + private ZLComboOptionEntry myLanguageEntry; + private SeriesTitleEntry mySeriesTitleEntry; + private ZLSpinOptionEntry myBookNumberEntry; + //private FormatInfoPage myFormatInfoPage; + + + public BookInfoDialog(BookCollection collection, String fileName, Runnable actionOnAccept) { + myCollection = collection; + myBookInfo = new BookDescription.BookInfo(fileName); + myDialog = ZLDialogManager.getInstance().createOptionsDialog("InfoDialog", actionOnAccept, null, false); + + ZLDialogContent commonTab = myDialog.createTab("Common"); + commonTab.addOption("file", new ZLStringInfoEntry(new ZLFile(fileName).getPath())); + commonTab.addOption("title", myBookInfo.TitleOption); + + myAuthorDisplayNameEntry = new AuthorDisplayNameEntry(); + myAuthorSortKeyEntry = new AuthorSortKeyEntry(); + myEncodingEntry = new EncodingEntry(myBookInfo.EncodingOption); + myEncodingSetEntry = + (!"auto".equals(myEncodingEntry.initialValue())) ? + new EncodingSetEntry((EncodingEntry)myEncodingEntry) : null; + ArrayList/**/ languageCodes = ZLLanguageList.languageCodes(); + languageCodes.add("de-traditional"); + myLanguageEntry = new ZLLanguageOptionEntry(myBookInfo.LanguageOption, languageCodes); + + mySeriesTitleEntry = new SeriesTitleEntry(); + myBookNumberEntry = new ZLSimpleSpinOptionEntry(myBookInfo.NumberInSeriesOption, 1); + + commonTab.addOption("authorDisplayName", myAuthorDisplayNameEntry); + commonTab.addOption("authorSortKey", myAuthorSortKeyEntry); + commonTab.addOption("language", myLanguageEntry); + if (myEncodingSetEntry != null) { + commonTab.addOption("encodingSet", myEncodingSetEntry); + } + commonTab.addOption("encoding", myEncodingEntry); + + ZLDialogContent seriesTab = myDialog.createTab("Series"); + + seriesTab.addOption("seriesTitle", mySeriesTitleEntry); + seriesTab.addOption("bookNumber", myBookNumberEntry); + + mySeriesTitleEntry.onValueEdited(mySeriesTitleEntry.initialValue()); + + + FormatPlugin plugin = PluginCollection.instance().getPlugin(new ZLFile(fileName), false); + //if (plugin != null) { + //myFormatInfoPage = plugin.createInfoPage(myDialog, fileName); + //} + + } + + public ZLOptionsDialog getDialog() { + return myDialog; + } + + private class AuthorSortKeyEntry extends ZLStringOptionEntry { + public String initialValue() { + Author currentAuthor = myAuthorDisplayNameEntry.myCurrentAuthor; + return currentAuthor == null ? + myBookInfo.AuthorSortKeyOption.getValue() : + currentAuthor.getSortKey(); + } + + public void onAccept(String value) { + myBookInfo.AuthorSortKeyOption.setValue(value); + } + } + + private class AuthorDisplayNameEntry extends ZLComboOptionEntry { + private final ArrayList myValues = new ArrayList(); + private Author myCurrentAuthor; + + public AuthorDisplayNameEntry() { + super(true); + } + + public ArrayList getValues() { + if (myValues.size() == 0) { + final String initial = initialValue(); + boolean addInitial = true; + final ArrayList authors = myCollection.authors(); + for (int i = 0; i < authors.size(); i++) { + final String name = ((Author) authors.get(i)).getDisplayName(); + if (addInitial && (name != null && name.equals(initial))) { + addInitial = false; + } + myValues.add(name); + } + if (addInitial) { + myValues.add(initial); + } + } + return myValues; + } + + public String initialValue() { + return myBookInfo.AuthorDisplayNameOption.getValue(); + } + + public void onAccept(String value) { + myBookInfo.AuthorDisplayNameOption.setValue(value); + } + + public void onValueSelected(int index) { + final ArrayList authors = myCollection.authors(); + if (index < authors.size()) { + myCurrentAuthor = (Author)authors.get(index); + } + myAuthorSortKeyEntry.resetView(); + mySeriesTitleEntry.resetView(); + } + } + + private class SeriesTitleEntry extends ZLComboOptionEntry { + private final ArrayList myValues = new ArrayList(); + private Author myOriginalAuthor; + + public SeriesTitleEntry() { + super(true); + final ArrayList authors = myCollection.authors(); + final String authorName = myBookInfo.AuthorDisplayNameOption.getValue(); + final String authorKey = myBookInfo.AuthorSortKeyOption.getValue(); + for (int i = 0; i < authors.size(); i++) { + final Author author = (Author) authors.get(i); + if ((authorName != null && authorName.equals(author.getDisplayName())) && + (authorKey != null && authorKey.equals(author.getSortKey()))) { + myOriginalAuthor = author; + break; + } + } + } + + public boolean useOnValueEdited() { + return true; + } + + public void onValueEdited(String value) { + myBookNumberEntry.setVisible(value != null && !value.equals(""));; + } + + public void onValueSelected(int index) { + myBookNumberEntry.setVisible(index != 0); + } + + public ArrayList getValues() { + myValues.clear(); + HashSet valuesSet = new HashSet(); + valuesSet.add(initialValue()); + valuesSet.add(""); + if (myOriginalAuthor != null) { + final ArrayList books = myCollection.books(myOriginalAuthor); + for (int i = 0; i < books.size(); i++) { + valuesSet.add(((BookDescription) books.get(i)).getSeriesName()); + } + } + Author currentAuthor = myAuthorDisplayNameEntry.myCurrentAuthor; + if (currentAuthor != null && (currentAuthor != myOriginalAuthor)) { + final ArrayList books = myCollection.books(currentAuthor); + for (int i = 0; i < books.size(); i++) { + valuesSet.add(((BookDescription)books.get(i)).getSeriesName()); + } + } + myValues.addAll(valuesSet); + return myValues; + } + + public String initialValue() { + return myBookInfo.SeriesNameOption.getValue(); + } + + public void onAccept(String value) { + myBookInfo.SeriesNameOption.setValue(value); + } + } +} diff --git a/src/org/geometerplus/fbreader/fbreader/CollectionModel.java b/src/org/geometerplus/fbreader/fbreader/CollectionModel.java index df1577e1d..2027c7b0d 100644 --- a/src/org/geometerplus/fbreader/fbreader/CollectionModel.java +++ b/src/org/geometerplus/fbreader/fbreader/CollectionModel.java @@ -79,13 +79,13 @@ class CollectionModel extends ZLTextTreeModelImpl { createParagraph(null); insertText(FBTextKind.REGULAR, ZLResource.resource("library").getResource("noBooks").getValue()); } else { - String currentSequenceName = ""; + String currentSeriesName = ""; ZLTextTreeParagraph sequenceParagraph; for (int i = 0; i < authors.size(); i++) { Author it = (Author)authors.get(i); final ArrayList/**/ books = myCollection.books(it); if (!books.isEmpty()) { - currentSequenceName = ""; + currentSeriesName = ""; sequenceParagraph = null; //todo ZLTextTreeParagraph authorParagraph = createParagraph(null); @@ -93,12 +93,12 @@ class CollectionModel extends ZLTextTreeModelImpl { //insertImage(AuthorInfoImageId); for (int j = 0; j < books.size(); j++) { BookDescription jt = (BookDescription)books.get(j); - final String sequenceName = jt.getSequenceName(); + final String sequenceName = jt.getSeriesName(); if (sequenceName.length() == 0) { - currentSequenceName = ""; + currentSeriesName = ""; sequenceParagraph = null; - } else if (sequenceName != currentSequenceName) { - currentSequenceName = sequenceName; + } else if (sequenceName != currentSeriesName) { + currentSeriesName = sequenceName; sequenceParagraph = createParagraph(authorParagraph); insertText(FBTextKind.LIBRARY_BOOK_ENTRY, sequenceName); //insertImage(SeriesOrderImageId); @@ -147,7 +147,7 @@ class CollectionModel extends ZLTextTreeModelImpl { ZLTextTreeParagraph paragraph = getTreeParagraph(index); int count = 1; - for (ZLTextTreeParagraph parent = paragraph.getParent(); (parent != null) && (parent.getChildren().size() == 1); parent = parent.getParent()) { + for (ZLTextTreeParagraph parent = paragraph.getParent(); (parent != null) && (parent.childNumber() == 1); parent = parent.getParent()) { ++count; } diff --git a/src/org/geometerplus/fbreader/fbreader/FBFileHandler.java b/src/org/geometerplus/fbreader/fbreader/FBFileHandler.java index 77d338f31..3b43bd632 100644 --- a/src/org/geometerplus/fbreader/fbreader/FBFileHandler.java +++ b/src/org/geometerplus/fbreader/fbreader/FBFileHandler.java @@ -17,160 +17,160 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.fbreader; - -import java.util.*; - -import org.geometerplus.fbreader.description.BookDescription; -import org.geometerplus.fbreader.formats.FormatPlugin; -import org.geometerplus.fbreader.formats.FormatPlugin.PluginCollection; -import org.geometerplus.zlibrary.core.options.*; -import org.geometerplus.zlibrary.core.util.*; -import org.geometerplus.zlibrary.core.dialogs.*; -import org.geometerplus.zlibrary.core.filesystem.*; - -public class FBFileHandler extends ZLTreeOpenHandler { - private final ZLStringOption DirectoryOption = - new ZLStringOption(ZLOption.LOOK_AND_FEEL_CATEGORY, "OpenFileDialog", "Directory", System.getProperty("user.home")); - - private ZLDir myDir; - private boolean myIsUpToDate; - private final ArrayList mySubnodes = new ArrayList(); - private BookDescription myDescription; - private int mySelectedIndex; - - private final static String FOLDER_ICON = "folder"; - private final static String ZIP_FOLDER_ICON = "zipfolder"; - private final static String UPFOLDER_ICON = "upfolder"; - private final static HashMap pluginIcons = new HashMap(); // - - public FBFileHandler() { - myIsUpToDate = false; - mySelectedIndex = 0; - myDir = (new ZLFile(DirectoryOption.getValue())).getDirectory(); - if (myDir == null) { - myDir = (new ZLFile(System.getProperty("user.home"))).getDirectory(); - } - if (myDir == null) { - myDir = ZLDir.getRoot(); - } - } - - public BookDescription getDescription() { - return myDescription; - } - - protected boolean accept(ZLTreeNode node) { - final String name = myDir.getItemPath(node.id()); - FormatPlugin plugin = PluginCollection.instance().getPlugin(new ZLFile(name), false); - final String message = (plugin == null) ? "Unknown File Format" : plugin.tryOpen(name); - if (message.length() != 0) { - final String boxKey = "openBookErrorBox"; - ZLDialogManager.getInstance().showErrorBox(boxKey, - ZLDialogManager.getDialogMessage(boxKey) + " " + message); - return false; - } - myDescription = BookDescription.getDescription(name); - return true; - } - - public void changeFolder(ZLTreeNode node) { - // TODO Auto-generated method stub - // id != null - ZLDir dir = new ZLFile(myDir.getItemPath(node.id())).getDirectory(); - if (dir != null) { - final String selectedId = myDir.getName(); - myDir = dir; - DirectoryOption.setValue(myDir.getPath()); //? - myIsUpToDate = false; - mySubnodes.clear(); - mySelectedIndex = 0; - if ("..".equals(node.id())) { - final ArrayList subnodes = this.subnodes(); - final int size = subnodes.size(); - for (int index = 0; index < size; index++) { - if (((ZLTreeNode) subnodes.get(index)).id().equals(selectedId)) { - mySelectedIndex = index; - break; - } - } - } - addUpdateInfo(UpdateType.UPDATE_ALL); - } - } - - public int selectedIndex() { - return mySelectedIndex; - } - - public String stateDisplayName() { - return myDir.getPath(); - } - - public ArrayList subnodes() { - if (!myIsUpToDate) { - ArrayList/**/ names = myDir.collectSubDirs(); - if (names != null) { - int size = names.size(); - for (int i = 0; i < size; i++) { - final String subDir = (String) names.get(i); - final String displayName = new ZLFile(subDir).getName(false); - final ZLTreeNode node = new ZLTreeNode(subDir, displayName, FOLDER_ICON, true); - mySubnodes.add(node); - } - names.clear(); - } - names = myDir.collectFiles(); - if (names != null) { - int size = names.size(); - for (int i = 0; i < size; i++) { - final String fileName = (String) names.get(i); - if ("".equals(fileName)) { - continue; - } - ZLFile file = new ZLFile(myDir.getItemPath(fileName)); - final String displayName = file.getName(false); - if ("".equals(displayName)) { - continue; - } - FormatPlugin plugin = PluginCollection.instance().getPlugin(file, false); - if (plugin != null && !file.isDirectory()) { - String icon = (String) pluginIcons.get(plugin); - if (icon == null) { - icon = plugin.getIconName(); - pluginIcons.put(plugin, icon); - } - final ZLTreeNode node = new ZLTreeNode(fileName, displayName, icon, false); - //fileNodeMap.put(displayName, node); - mySubnodes.add(node); - } else if (file.isArchive()) { - final ZLTreeNode node = new ZLTreeNode(fileName, displayName, ZIP_FOLDER_ICON, true); - //folderNodeMap.put(displayName, node); - mySubnodes.add(node); - } - } - } - - myIsUpToDate = true; - Collections.sort(mySubnodes, new ZLTreeNodeComparator()); - if (!myDir.isRoot()) { - mySubnodes.add(0, new ZLTreeNode("..", "..", UPFOLDER_ICON, true)); - } - } - - return mySubnodes; - } - - private static class ZLTreeNodeComparator implements Comparator { - public int compare(Object o1, Object o2) { - if (((ZLTreeNode) o1).isFolder() == ((ZLTreeNode) o2).isFolder()) { - return ((ZLTreeNode) o1).displayName().toLowerCase().compareTo(((ZLTreeNode) o2).displayName().toLowerCase()); - } else if (((ZLTreeNode) o1).isFolder()) { - return -1; - } else { - return 1; - } - } - } - -} +package org.geometerplus.fbreader.fbreader; + +import java.util.*; + +import org.geometerplus.zlibrary.core.options.*; +import org.geometerplus.zlibrary.core.util.*; +import org.geometerplus.zlibrary.core.dialogs.*; +import org.geometerplus.zlibrary.core.filesystem.*; + +import org.geometerplus.fbreader.description.BookDescription; +import org.geometerplus.fbreader.formats.*; + +public class FBFileHandler extends ZLTreeOpenHandler { + private final ZLStringOption DirectoryOption = + new ZLStringOption(ZLOption.LOOK_AND_FEEL_CATEGORY, "OpenFileDialog", "Directory", System.getProperty("user.home")); + + private ZLDir myDir; + private boolean myIsUpToDate; + private final ArrayList mySubnodes = new ArrayList(); + private BookDescription myDescription; + private int mySelectedIndex; + + private final static String FOLDER_ICON = "folder"; + private final static String ZIP_FOLDER_ICON = "zipfolder"; + private final static String UPFOLDER_ICON = "upfolder"; + private final static HashMap pluginIcons = new HashMap(); + + public FBFileHandler() { + myIsUpToDate = false; + mySelectedIndex = 0; + myDir = (new ZLFile(DirectoryOption.getValue())).getDirectory(); + if (myDir == null) { + myDir = (new ZLFile(System.getProperty("user.home"))).getDirectory(); + } + if (myDir == null) { + myDir = ZLDir.getRoot(); + } + } + + public BookDescription getDescription() { + return myDescription; + } + + protected boolean accept(ZLTreeNode node) { + final String name = myDir.getItemPath(node.Id); + FormatPlugin plugin = PluginCollection.instance().getPlugin(new ZLFile(name), false); + final String message = (plugin == null) ? "Unknown File Format" : plugin.tryOpen(name); + if (message.length() != 0) { + final String boxKey = "openBookErrorBox"; + ZLDialogManager.getInstance().showErrorBox(boxKey, + ZLDialogManager.getDialogMessage(boxKey) + " " + message); + return false; + } + myDescription = BookDescription.getDescription(name); + return true; + } + + public void changeFolder(ZLTreeNode node) { + // TODO Auto-generated method stub + // id != null + ZLDir dir = new ZLFile(myDir.getItemPath(node.Id)).getDirectory(); + if (dir != null) { + final String selectedId = myDir.getName(); + myDir = dir; + DirectoryOption.setValue(myDir.getPath()); //? + myIsUpToDate = false; + mySubnodes.clear(); + mySelectedIndex = 0; + if ("..".equals(node.Id)) { + final ArrayList subnodes = this.subnodes(); + final int size = subnodes.size(); + for (int index = 0; index < size; index++) { + if (((ZLTreeNode)subnodes.get(index)).Id.equals(selectedId)) { + mySelectedIndex = index; + break; + } + } + } + addUpdateInfo(ZLSelectionDialog.UPDATE_ALL); + } + } + + public int selectedIndex() { + return mySelectedIndex; + } + + public String stateDisplayName() { + return myDir.getPath(); + } + + public ArrayList subnodes() { + if (!myIsUpToDate) { + ArrayList/**/ names = myDir.collectSubDirs(); + if (names != null) { + int size = names.size(); + for (int i = 0; i < size; i++) { + final String subDir = (String) names.get(i); + final String displayName = new ZLFile(subDir).getName(false); + final ZLTreeNode node = new ZLTreeNode(subDir, displayName, FOLDER_ICON, true); + mySubnodes.add(node); + } + names.clear(); + } + names = myDir.collectFiles(); + if (names != null) { + int size = names.size(); + for (int i = 0; i < size; i++) { + final String fileName = (String) names.get(i); + if ("".equals(fileName)) { + continue; + } + ZLFile file = new ZLFile(myDir.getItemPath(fileName)); + final String displayName = file.getName(false); + if ("".equals(displayName)) { + continue; + } + FormatPlugin plugin = PluginCollection.instance().getPlugin(file, false); + if (plugin != null && !file.isDirectory()) { + String icon = (String) pluginIcons.get(plugin); + if (icon == null) { + icon = plugin.getIconName(); + pluginIcons.put(plugin, icon); + } + final ZLTreeNode node = new ZLTreeNode(fileName, displayName, icon, false); + //fileNodeMap.put(displayName, node); + mySubnodes.add(node); + } else if (file.isArchive()) { + final ZLTreeNode node = new ZLTreeNode(fileName, displayName, ZIP_FOLDER_ICON, true); + //folderNodeMap.put(displayName, node); + mySubnodes.add(node); + } + } + } + + myIsUpToDate = true; + Collections.sort(mySubnodes, new ZLTreeNodeComparator()); + if (!myDir.isRoot()) { + mySubnodes.add(0, new ZLTreeNode("..", "..", UPFOLDER_ICON, true)); + } + } + + return mySubnodes; + } + + private static class ZLTreeNodeComparator implements Comparator { + public int compare(Object o1, Object o2) { + final ZLTreeNode node1 = (ZLTreeNode)o1; + final ZLTreeNode node2 = (ZLTreeNode)o2; + if (node1.IsFolder == node2.IsFolder) { + return node1.DisplayName.compareToIgnoreCase(node2.DisplayName); + } else { + return node1.IsFolder ? -1 : 1; + } + } + } + +} diff --git a/src/org/geometerplus/fbreader/fbreader/FBReader.java b/src/org/geometerplus/fbreader/fbreader/FBReader.java index 59179d325..d27a2e4c1 100644 --- a/src/org/geometerplus/fbreader/fbreader/FBReader.java +++ b/src/org/geometerplus/fbreader/fbreader/FBReader.java @@ -112,11 +112,11 @@ public final class FBReader extends ZLApplication { public FBReader(String[] args) { myArg0 = (args.length > 0) ? args[0] : null; - addAction(ActionCode.TOGGLE_FULLSCREEN, new ZLApplication.FullscreenAction(this, true)); - addAction(ActionCode.FULLSCREEN_ON, new ZLApplication.FullscreenAction(this, false)); + addAction(ActionCode.TOGGLE_FULLSCREEN, new ZLApplication.FullscreenAction(true)); + addAction(ActionCode.FULLSCREEN_ON, new ZLApplication.FullscreenAction(false)); addAction(ActionCode.QUIT, new QuitAction(this)); addAction(ActionCode.SHOW_HELP, new ShowHelpAction(this)); - addAction(ActionCode.ROTATE_SCREEN, new ZLApplication.RotationAction(this)); + addAction(ActionCode.ROTATE_SCREEN, new ZLApplication.RotationAction()); addAction(ActionCode.UNDO, new UndoAction(this)); addAction(ActionCode.REDO, new RedoAction(this)); diff --git a/src/org/geometerplus/fbreader/formats/EncodedTextReader.java b/src/org/geometerplus/fbreader/formats/EncodedTextReader.java index c63725171..cb3a8a30d 100644 --- a/src/org/geometerplus/fbreader/formats/EncodedTextReader.java +++ b/src/org/geometerplus/fbreader/formats/EncodedTextReader.java @@ -17,14 +17,14 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.formats; +package org.geometerplus.fbreader.formats; import org.geometerplus.fbreader.encoding.ZLEncodingCollection; import org.geometerplus.fbreader.encoding.ZLEncodingConverter; import org.geometerplus.fbreader.encoding.ZLEncodingConverterInfo; - + public class EncodedTextReader { - private ZLEncodingConverter myConverter; + private ZLEncodingConverter myConverter; //?static public EncodedTextReader(final String encoding) { ZLEncodingCollection collection = ZLEncodingCollection.instance(); @@ -34,5 +34,5 @@ public class EncodedTextReader { public ZLEncodingConverter getConverter() { return myConverter; - } -} + } +} diff --git a/src/org/geometerplus/fbreader/formats/FormatPlugin.java b/src/org/geometerplus/fbreader/formats/FormatPlugin.java index c204d5f38..fa6d348e1 100644 --- a/src/org/geometerplus/fbreader/formats/FormatPlugin.java +++ b/src/org/geometerplus/fbreader/formats/FormatPlugin.java @@ -19,21 +19,15 @@ package org.geometerplus.fbreader.formats; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; +import java.io.*; +import java.util.*; import org.geometerplus.fbreader.bookmodel.BookModel; import org.geometerplus.fbreader.description.BookDescription; import org.geometerplus.fbreader.description.BookDescription.WritableBookDescription; -import org.geometerplus.fbreader.formats.fb2.FB2Plugin; -import org.geometerplus.fbreader.formats.html.HtmlPlugin; -import org.geometerplus.fbreader.formats.oeb.OEBPlugin; -import org.geometerplus.fbreader.formats.plucker.PluckerPlugin; import org.geometerplus.zlibrary.core.dialogs.ZLOptionsDialog; import org.geometerplus.zlibrary.core.filesystem.ZLFile; import org.geometerplus.zlibrary.core.language.ZLLanguageDetector; -import org.geometerplus.zlibrary.core.options.*; public abstract class FormatPlugin { public abstract boolean providesMetaInfo(); @@ -113,62 +107,7 @@ public abstract class FormatPlugin { }*/ - static class FormatInfoPage { protected FormatInfoPage() {} - }; - - public static class PluginCollection { - - private static PluginCollection ourInstance; - private final ArrayList myPlugins = new ArrayList(); - public ZLStringOption DefaultLanguageOption; - public ZLStringOption DefaultEncodingOption; - public ZLBooleanOption LanguageAutoDetectOption; - - public static PluginCollection instance() { - if (ourInstance == null) { - ourInstance = new PluginCollection(); - ourInstance.myPlugins.add(new FB2Plugin()); - ourInstance.myPlugins.add(new PluckerPlugin()); - //ourInstance->myPlugins.push_back(new DocBookPlugin()); - //ourInstance.myPlugins.add(new HtmlPlugin()); - /*ourInstance.myPlugins.add(new TxtPlugin()); - ourInstance.myPlugins.add(new PalmDocPlugin()); - ourInstance.myPlugins.add(new MobipocketPlugin()); - ourInstance.myPlugins.add(new ZTXTPlugin()); - ourInstance.myPlugins.add(new TcrPlugin()); - ourInstance.myPlugins.add(new CHMPlugin()); - */ - ourInstance.myPlugins.add(new OEBPlugin()); - //ourInstance.myPlugins.add(new RtfPlugin()); - //ourInstance.myPlugins.add(new OpenReaderPlugin()); - } - return ourInstance; - } - - public static void deleteInstance() { - if (ourInstance != null) { - ourInstance = null; - } - } - - private PluginCollection() { - LanguageAutoDetectOption = new ZLBooleanOption(ZLOption.CONFIG_CATEGORY, "Format", "AutoDetect", true); - DefaultLanguageOption = new ZLStringOption(ZLOption.CONFIG_CATEGORY, "Format", "DefaultLanguage", "en"); - DefaultEncodingOption = new ZLStringOption(ZLOption.CONFIG_CATEGORY, "Format", "DefaultEncoding", "windows-1252"); - } - - public FormatPlugin getPlugin(ZLFile file, boolean strong) { - final ArrayList plugins = myPlugins; - final int numberOfPlugins = plugins.size(); - for (int i = 0; i < numberOfPlugins; ++i) { - FormatPlugin fp = (FormatPlugin)plugins.get(i); - if ((!strong || fp.providesMetaInfo()) && fp.acceptsFile(file)) { - return fp; - } - } - return null; - } } } diff --git a/src/org/geometerplus/fbreader/formats/PluginCollection.java b/src/org/geometerplus/fbreader/formats/PluginCollection.java new file mode 100644 index 000000000..0e73515fd --- /dev/null +++ b/src/org/geometerplus/fbreader/formats/PluginCollection.java @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2007-2008 Geometer Plus + * + * 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.fbreader.formats; + +import java.util.*; + +import org.geometerplus.zlibrary.core.options.*; +import org.geometerplus.zlibrary.core.filesystem.ZLFile; + +import org.geometerplus.fbreader.formats.fb2.FB2Plugin; +import org.geometerplus.fbreader.formats.html.HtmlPlugin; +import org.geometerplus.fbreader.formats.oeb.OEBPlugin; +import org.geometerplus.fbreader.formats.plucker.PluckerPlugin; + +public class PluginCollection { + private static PluginCollection ourInstance; + private final ArrayList myPlugins = new ArrayList(); + public ZLStringOption DefaultLanguageOption; + public ZLStringOption DefaultEncodingOption; + public ZLBooleanOption LanguageAutoDetectOption; + + public static PluginCollection instance() { + if (ourInstance == null) { + ourInstance = new PluginCollection(); + ourInstance.myPlugins.add(new FB2Plugin()); + ourInstance.myPlugins.add(new PluckerPlugin()); + //ourInstance->myPlugins.push_back(new DocBookPlugin()); + //ourInstance.myPlugins.add(new HtmlPlugin()); + /*ourInstance.myPlugins.add(new TxtPlugin()); + ourInstance.myPlugins.add(new PalmDocPlugin()); + ourInstance.myPlugins.add(new MobipocketPlugin()); + ourInstance.myPlugins.add(new ZTXTPlugin()); + ourInstance.myPlugins.add(new TcrPlugin()); + ourInstance.myPlugins.add(new CHMPlugin()); + */ + ourInstance.myPlugins.add(new OEBPlugin()); + //ourInstance.myPlugins.add(new RtfPlugin()); + //ourInstance.myPlugins.add(new OpenReaderPlugin()); + } + return ourInstance; + } + + public static void deleteInstance() { + if (ourInstance != null) { + ourInstance = null; + } + } + + private PluginCollection() { + LanguageAutoDetectOption = new ZLBooleanOption(ZLOption.CONFIG_CATEGORY, "Format", "AutoDetect", true); + DefaultLanguageOption = new ZLStringOption(ZLOption.CONFIG_CATEGORY, "Format", "DefaultLanguage", "en"); + DefaultEncodingOption = new ZLStringOption(ZLOption.CONFIG_CATEGORY, "Format", "DefaultEncoding", "windows-1252"); + } + + public FormatPlugin getPlugin(ZLFile file, boolean strong) { + final ArrayList plugins = myPlugins; + final int numberOfPlugins = plugins.size(); + for (int i = 0; i < numberOfPlugins; ++i) { + FormatPlugin fp = (FormatPlugin)plugins.get(i); + if ((!strong || fp.providesMetaInfo()) && fp.acceptsFile(file)) { + return fp; + } + } + return null; + } +} diff --git a/src/org/geometerplus/fbreader/formats/fb2/Base64EncodedImage.java b/src/org/geometerplus/fbreader/formats/fb2/Base64EncodedImage.java index 117bceded..562743131 100644 --- a/src/org/geometerplus/fbreader/formats/fb2/Base64EncodedImage.java +++ b/src/org/geometerplus/fbreader/formats/fb2/Base64EncodedImage.java @@ -17,99 +17,88 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.formats.fb2; - -import org.geometerplus.zlibrary.core.util.ZLTextBuffer; -import org.geometerplus.zlibrary.core.image.ZLImage; - -final class Base64EncodedImage implements ZLImage { - private ZLTextBuffer myEncodedData = new ZLTextBuffer(); - private byte[] myData; - - public Base64EncodedImage(String contentType) { - // TODO: use contentType - } - - private static byte decodeByte(char encodedChar) { - switch (encodedChar) { - case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - return (byte)(encodedChar - 'A'); - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - return (byte)(encodedChar - 'a' + 26); - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - return (byte)(encodedChar - '0' + 52); - case '+': - return 62; - case '/': - return 63; - case '=': - return 64; - } - return -1; - } - - private void decode() { - if ((myEncodedData == null) || (myData != null)) { - return; - } - - final char[] encodedData = myEncodedData.getData(); - final int dataLength = myEncodedData.getLength(); - - final int newLength = dataLength * 3 / 4; - final byte[] data = new byte[newLength]; - for (int pos = 0, dataPos = 0; pos < dataLength; ) { - byte n0 = -1, n1 = -1, n2 = -1, n3 = -1; - while ((pos < dataLength) && (n0 == -1)) { - n0 = decodeByte(encodedData[pos++]); - } - while ((pos < dataLength) && (n1 == -1)) { - n1 = decodeByte(encodedData[pos++]); - } - while ((pos < dataLength) && (n2 == -1)) { - n2 = decodeByte(encodedData[pos++]); - } - while ((pos < dataLength) && (n3 == -1)) { - n3 = decodeByte(encodedData[pos++]); - } - data[dataPos++] = (byte) (n0 << 2 | n1 >> 4); - data[dataPos++] = (byte) (((n1 & 0xf) << 4) | ((n2 >> 2) & 0xf)); - data[dataPos++] = (byte) (n2 << 6 | n3); - } -/* if (number[2] == 64) { - byte [] tmp = new byte[newLength - 2]; - System.arraycopy(myData, 0, tmp, 0, newLength - 2); - myData = tmp; - } else if (number[3] == 64) { - byte [] tmp = new byte[newLength - 1]; - System.arraycopy(myData, 0, tmp, 0, newLength - 1); - myData = tmp; - } - -*/ - myData = data; - myEncodedData = null; - } - - public byte [] byteData() { - decode(); - return myData; - } - - void addData(char[] data, int offset, int length) { - myEncodedData.append(data, offset, length); - } - - void trimToSize() { - myEncodedData.trimToSize(); - } -} +package org.geometerplus.fbreader.formats.fb2; + +import org.geometerplus.zlibrary.core.util.ZLTextBuffer; +import org.geometerplus.zlibrary.core.image.ZLImage; + +final class Base64EncodedImage implements ZLImage { + private ZLTextBuffer myEncodedData = new ZLTextBuffer(); + private byte[] myData; + + public Base64EncodedImage(String contentType) { + // TODO: use contentType + } + + private static byte decodeByte(char encodedChar) { + switch (encodedChar) { + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + return (byte)(encodedChar - 'A'); + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + return (byte)(encodedChar - 'a' + 26); + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + return (byte)(encodedChar - '0' + 52); + case '+': + return 62; + case '/': + return 63; + case '=': + return 64; + } + return -1; + } + + private void decode() { + if ((myEncodedData == null) || (myData != null)) { + return; + } + + final char[] encodedData = myEncodedData.getData(); + final int dataLength = myEncodedData.getLength(); + + final int newLength = dataLength * 3 / 4; + final byte[] data = new byte[newLength]; + for (int pos = 0, dataPos = 0; pos < dataLength; ) { + byte n0 = -1, n1 = -1, n2 = -1, n3 = -1; + while ((pos < dataLength) && (n0 == -1)) { + n0 = decodeByte(encodedData[pos++]); + } + while ((pos < dataLength) && (n1 == -1)) { + n1 = decodeByte(encodedData[pos++]); + } + while ((pos < dataLength) && (n2 == -1)) { + n2 = decodeByte(encodedData[pos++]); + } + while ((pos < dataLength) && (n3 == -1)) { + n3 = decodeByte(encodedData[pos++]); + } + data[dataPos++] = (byte) (n0 << 2 | n1 >> 4); + data[dataPos++] = (byte) (((n1 & 0xf) << 4) | ((n2 >> 2) & 0xf)); + data[dataPos++] = (byte) (n2 << 6 | n3); + } + myData = data; + myEncodedData = null; + } + + public byte[] byteData() { + decode(); + return myData; + } + + void addData(char[] data, int offset, int length) { + myEncodedData.append(data, offset, length); + } + + void trimToSize() { + myEncodedData.trimToSize(); + } +} diff --git a/src/org/geometerplus/fbreader/formats/fb2/FB2DescriptionReader.java b/src/org/geometerplus/fbreader/formats/fb2/FB2DescriptionReader.java index cde1f6349..1882c0d57 100644 --- a/src/org/geometerplus/fbreader/formats/fb2/FB2DescriptionReader.java +++ b/src/org/geometerplus/fbreader/formats/fb2/FB2DescriptionReader.java @@ -17,179 +17,171 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.formats.fb2; - -import org.geometerplus.fbreader.description.BookDescription; -import org.geometerplus.fbreader.description.BookDescription.WritableBookDescription; -import org.geometerplus.zlibrary.core.xml.ZLStringMap; -import org.geometerplus.zlibrary.core.xml.ZLXMLProcessor; -import org.geometerplus.zlibrary.core.xml.ZLXMLProcessorFactory; -import org.geometerplus.zlibrary.core.xml.ZLXMLReaderAdapter; - -public class FB2DescriptionReader extends ZLXMLReaderAdapter { - private WritableBookDescription myDescription; - private boolean myReadSomething; - private boolean myReadTitle; - private boolean myReadAuthor; - private boolean[] myReadAuthorName = new boolean[3]; - private boolean myReadLanguage; - private String[] myAuthorNames = new String[3]; - - public FB2DescriptionReader(BookDescription description) { - myDescription = new WritableBookDescription(description); - myDescription.clearAuthor(); - myDescription.setTitle(""); - myDescription.setLanguage(""); - myAuthorNames[0] = ""; - myAuthorNames[1] = ""; - myAuthorNames[2] = ""; - } - - public boolean dontCacheAttributeValues() { - return true; - } - - public boolean readDescription(String fileName) { - myReadSomething = false; - myReadTitle = false; - myReadAuthor = false; - myReadLanguage = false; - for (int i = 0; i < 3; ++i) { - myReadAuthorName[i] = false; - } - return readDocument(fileName); - //TODO!! - //return true; - } - - public boolean startElementHandler(String tagName, ZLStringMap attributes) { - switch (FB2Tag.getTagByName(tagName)) { - case FB2Tag.BODY: - return true; - case FB2Tag.TITLE_INFO: - myReadSomething = true; - break; - case FB2Tag.BOOK_TITLE: - myReadTitle = true; - break; - case FB2Tag.AUTHOR: - myReadAuthor = true; - break; - case FB2Tag.LANG: - myReadLanguage = true; - break; - case FB2Tag.FIRST_NAME: - if (myReadAuthor) { - myReadAuthorName[0] = true; - } - break; - case FB2Tag.MIDDLE_NAME: - if (myReadAuthor) { - myReadAuthorName[1] = true; - } - break; - case FB2Tag.LAST_NAME: - if (myReadAuthor) { - myReadAuthorName[2] = true; - } - break; - case FB2Tag.SEQUENCE: - if (myReadSomething) { - String name = attributes.getValue("name"); - if (name != null) { - String sequenceName = name; - sequenceName.trim(); - myDescription.setSequenceName(sequenceName); - String number = attributes.getValue("number"); - myDescription.setNumberInSequence((number != null) ? Integer.parseInt(number) : 0); - } - } - break; - } - return false; - } - - public boolean endElementHandler(String tag) { - switch (FB2Tag.getTagByName(tag)) { - case FB2Tag.TITLE_INFO: - myReadSomething = false; - break; - case FB2Tag.BOOK_TITLE: - myReadTitle = false; - break; - case FB2Tag.AUTHOR: - if (myReadSomething) { - myAuthorNames[0].trim(); - myAuthorNames[1].trim(); - myAuthorNames[2].trim(); - String fullName = myAuthorNames[0]; - if (fullName.length() != 0 && myAuthorNames[1].length() != 0) { - fullName += ' '; - } - fullName += myAuthorNames[1]; - if (fullName.length() != 0 && myAuthorNames[2].length() != 0) { - fullName += ' '; - } - fullName += myAuthorNames[2]; - myDescription.addAuthor(fullName, myAuthorNames[2]); - myAuthorNames[0] = ""; - myAuthorNames[1] = ""; - myAuthorNames[2] = ""; - myReadAuthor = false; - } - break; - case FB2Tag.LANG: - myReadLanguage = false; - break; - case FB2Tag.FIRST_NAME: - myReadAuthorName[0] = false; - break; - case FB2Tag.MIDDLE_NAME: - myReadAuthorName[1] = false; - break; - case FB2Tag.LAST_NAME: - myReadAuthorName[2] = false; - break; - default: - break; - } - return false; - } - - public void characterDataHandler(char[] ch, int start, int length) { - //TODO + length -- remove - final String text = new String(ch).substring(start, start + length); - //for (int i = 0 ; i < ch.length; i++) { - // System.out.print(ch[i]); - //} - //System.out.println(); - //System.out.println("characterDataHandler---" +text + " start=" + start + " lenght="+length); - if (myReadSomething) { - if (myReadTitle) { - myDescription.setTitle(myDescription.getTitle()+text);//.append(text, len); - } else if (myReadLanguage) { - myDescription.setLanguage(myDescription.getLanguage()+text); - } else { - for (int i = 0; i < 3; ++i) { - if (myReadAuthorName[i]) { - myAuthorNames[i] += text; - break; - } - } - } - } - } - - //------------------------------------------------ - - //private boolean myInterrupted; - - //public void interrupt() { - // myInterrupted = true; - //} - - public boolean readDocument(String fileName) { - final ZLXMLProcessor processor = ZLXMLProcessorFactory.getInstance().createXMLProcessor(); - return processor.read(this, fileName); - } -} +package org.geometerplus.fbreader.formats.fb2; + +import org.geometerplus.fbreader.description.BookDescription; +import org.geometerplus.fbreader.description.BookDescription.WritableBookDescription; +import org.geometerplus.zlibrary.core.xml.ZLStringMap; +import org.geometerplus.zlibrary.core.xml.ZLXMLProcessor; +import org.geometerplus.zlibrary.core.xml.ZLXMLProcessorFactory; +import org.geometerplus.zlibrary.core.xml.ZLXMLReaderAdapter; + +public class FB2DescriptionReader extends ZLXMLReaderAdapter { + private WritableBookDescription myDescription; + private boolean myReadSomething; + private boolean myReadTitle; + private boolean myReadAuthor; + private boolean[] myReadAuthorName = new boolean[3]; + private boolean myReadLanguage; + private String[] myAuthorNames = new String[3]; + + public FB2DescriptionReader(BookDescription description) { + myDescription = new WritableBookDescription(description); + myDescription.clearAuthor(); + myDescription.setTitle(""); + myDescription.setLanguage(""); + myAuthorNames[0] = ""; + myAuthorNames[1] = ""; + myAuthorNames[2] = ""; + } + + public boolean dontCacheAttributeValues() { + return true; + } + + public boolean readDescription(String fileName) { + myReadSomething = false; + myReadTitle = false; + myReadAuthor = false; + myReadLanguage = false; + for (int i = 0; i < 3; ++i) { + myReadAuthorName[i] = false; + } + return readDocument(fileName); + //TODO!! + //return true; + } + + public boolean startElementHandler(String tagName, ZLStringMap attributes) { + switch (FB2Tag.getTagByName(tagName)) { + case FB2Tag.BODY: + return true; + case FB2Tag.TITLE_INFO: + myReadSomething = true; + break; + case FB2Tag.BOOK_TITLE: + myReadTitle = true; + break; + case FB2Tag.AUTHOR: + myReadAuthor = true; + break; + case FB2Tag.LANG: + myReadLanguage = true; + break; + case FB2Tag.FIRST_NAME: + if (myReadAuthor) { + myReadAuthorName[0] = true; + } + break; + case FB2Tag.MIDDLE_NAME: + if (myReadAuthor) { + myReadAuthorName[1] = true; + } + break; + case FB2Tag.LAST_NAME: + if (myReadAuthor) { + myReadAuthorName[2] = true; + } + break; + case FB2Tag.SEQUENCE: + if (myReadSomething) { + String name = attributes.getValue("name"); + if (name != null) { + String sequenceName = name; + sequenceName.trim(); + myDescription.setSeriesName(sequenceName); + String number = attributes.getValue("number"); + myDescription.setNumberInSeries((number != null) ? Integer.parseInt(number) : 0); + } + } + break; + } + return false; + } + + public boolean endElementHandler(String tag) { + switch (FB2Tag.getTagByName(tag)) { + case FB2Tag.TITLE_INFO: + myReadSomething = false; + break; + case FB2Tag.BOOK_TITLE: + myReadTitle = false; + break; + case FB2Tag.AUTHOR: + if (myReadSomething) { + myAuthorNames[0].trim(); + myAuthorNames[1].trim(); + myAuthorNames[2].trim(); + String fullName = myAuthorNames[0]; + if (fullName.length() != 0 && myAuthorNames[1].length() != 0) { + fullName += ' '; + } + fullName += myAuthorNames[1]; + if (fullName.length() != 0 && myAuthorNames[2].length() != 0) { + fullName += ' '; + } + fullName += myAuthorNames[2]; + myDescription.addAuthor(fullName, myAuthorNames[2]); + myAuthorNames[0] = ""; + myAuthorNames[1] = ""; + myAuthorNames[2] = ""; + myReadAuthor = false; + } + break; + case FB2Tag.LANG: + myReadLanguage = false; + break; + case FB2Tag.FIRST_NAME: + myReadAuthorName[0] = false; + break; + case FB2Tag.MIDDLE_NAME: + myReadAuthorName[1] = false; + break; + case FB2Tag.LAST_NAME: + myReadAuthorName[2] = false; + break; + default: + break; + } + return false; + } + + public void characterDataHandler(char[] ch, int start, int length) { + //TODO + length -- remove + final String text = new String(ch).substring(start, start + length); + //for (int i = 0 ; i < ch.length; i++) { + // System.out.print(ch[i]); + //} + //System.out.println(); + //System.out.println("characterDataHandler---" +text + " start=" + start + " lenght="+length); + if (myReadSomething) { + if (myReadTitle) { + myDescription.setTitle(myDescription.getTitle()+text);//.append(text, len); + } else if (myReadLanguage) { + myDescription.setLanguage(myDescription.getLanguage()+text); + } else { + for (int i = 0; i < 3; ++i) { + if (myReadAuthorName[i]) { + myAuthorNames[i] += text; + break; + } + } + } + } + } + + public boolean readDocument(String fileName) { + final ZLXMLProcessor processor = ZLXMLProcessorFactory.getInstance().createXMLProcessor(); + return processor.read(this, fileName); + } +} diff --git a/src/org/geometerplus/fbreader/formats/fb2/FB2Tag.java b/src/org/geometerplus/fbreader/formats/fb2/FB2Tag.java index ccf23b367..6776bae64 100644 --- a/src/org/geometerplus/fbreader/formats/fb2/FB2Tag.java +++ b/src/org/geometerplus/fbreader/formats/fb2/FB2Tag.java @@ -17,106 +17,106 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.formats.fb2; - -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; - -final class FB2Tag { - public static final byte UNKNOWN = 0; - public static final byte P = 1; - public static final byte V = 2; - public static final byte SUBTITLE = 3; - public static final byte TEXT_AUTHOR = 4; - public static final byte DATE = 5; - public static final byte CITE = 6; - public static final byte SECTION = 7; - public static final byte POEM = 8; - public static final byte STANZA = 9; - public static final byte EPIGRAPH = 10; - public static final byte ANNOTATION = 11; - public static final byte COVERPAGE = 12; - public static final byte A = 13; - public static final byte EMPTY_LINE = 14; - public static final byte SUP = 15; - public static final byte SUB = 16; - public static final byte EMPHASIS = 17; - public static final byte STRONG = 18; - public static final byte CODE = 19; - public static final byte STRIKETHROUGH = 20; - public static final byte TITLE = 21; - public static final byte BODY = 22; - public static final byte IMAGE = 23; - public static final byte BINARY = 24; - public static final byte FICTIONBOOK = 25; - - public static final byte TITLE_INFO = 26; - public static final byte BOOK_TITLE = 27; - public static final byte AUTHOR = 28; - public static final byte LANG = 29; - public static final byte FIRST_NAME = 30; - public static final byte MIDDLE_NAME = 31; - public static final byte LAST_NAME = 32; - public static final byte SEQUENCE = 33; - - - private static final HashMap ourTagByName = new HashMap(256, 0.2f); - private static final Byte ourUnknownTag; - - static { - ourTagByName.put("unknown", UNKNOWN); - ourUnknownTag = (Byte)ourTagByName.get("unknown"); - ourTagByName.put("p", P); - ourTagByName.put("v", V); - ourTagByName.put("subtitle", SUBTITLE); - ourTagByName.put("text-author", TEXT_AUTHOR); - ourTagByName.put("date", DATE); - ourTagByName.put("cite", CITE); - ourTagByName.put("section", SECTION); - ourTagByName.put("poem", POEM); - ourTagByName.put("stanza", STANZA); - ourTagByName.put("epigraph", EPIGRAPH); - ourTagByName.put("annotation", ANNOTATION); - ourTagByName.put("coverpage", COVERPAGE); - ourTagByName.put("a", A); - ourTagByName.put("empty-line", EMPTY_LINE); - ourTagByName.put("sup", SUP); - ourTagByName.put("sub", SUB); - ourTagByName.put("emphasis", EMPHASIS); - ourTagByName.put("strong", STRONG); - ourTagByName.put("code", CODE); - ourTagByName.put("strikethrough", STRIKETHROUGH); - ourTagByName.put("title", TITLE); - ourTagByName.put("title-info", TITLE_INFO); - ourTagByName.put("body", BODY); - ourTagByName.put("image", IMAGE); - ourTagByName.put("binary", BINARY); - ourTagByName.put("fictionbook", FICTIONBOOK); - ourTagByName.put("book-title", BOOK_TITLE); - ourTagByName.put("sequence", SEQUENCE); - ourTagByName.put("first-name", FIRST_NAME); - ourTagByName.put("middle-name", MIDDLE_NAME); - ourTagByName.put("last-name", LAST_NAME); - ourTagByName.put("book-title", BOOK_TITLE); - ourTagByName.put("author", AUTHOR); - ourTagByName.put("lang", LANG); - } - - public static byte getTagByName(String name) { - final HashMap tagByName = ourTagByName; - Byte num = (Byte)tagByName.get(name); - if (num == null) { - final String upperCaseName = name.toLowerCase().intern(); - num = (Byte)tagByName.get(upperCaseName); - if (num == null) { - num = ourUnknownTag; - tagByName.put(upperCaseName, num); - } - tagByName.put(name, num); - } - return num.byteValue(); - } - - private FB2Tag() { - } -} +package org.geometerplus.fbreader.formats.fb2; + +import java.util.*; +import org.geometerplus.zlibrary.core.util.*; + +final class FB2Tag { + public static final byte UNKNOWN = 0; + public static final byte P = 1; + public static final byte V = 2; + public static final byte SUBTITLE = 3; + public static final byte TEXT_AUTHOR = 4; + public static final byte DATE = 5; + public static final byte CITE = 6; + public static final byte SECTION = 7; + public static final byte POEM = 8; + public static final byte STANZA = 9; + public static final byte EPIGRAPH = 10; + public static final byte ANNOTATION = 11; + public static final byte COVERPAGE = 12; + public static final byte A = 13; + public static final byte EMPTY_LINE = 14; + public static final byte SUP = 15; + public static final byte SUB = 16; + public static final byte EMPHASIS = 17; + public static final byte STRONG = 18; + public static final byte CODE = 19; + public static final byte STRIKETHROUGH = 20; + public static final byte TITLE = 21; + public static final byte BODY = 22; + public static final byte IMAGE = 23; + public static final byte BINARY = 24; + public static final byte FICTIONBOOK = 25; + + public static final byte TITLE_INFO = 26; + public static final byte BOOK_TITLE = 27; + public static final byte AUTHOR = 28; + public static final byte LANG = 29; + public static final byte FIRST_NAME = 30; + public static final byte MIDDLE_NAME = 31; + public static final byte LAST_NAME = 32; + public static final byte SEQUENCE = 33; + + + private static final HashMap ourTagByName = new HashMap(256, 0.2f); + private static final Byte ourUnknownTag; + + static { + ourTagByName.put("unknown", UNKNOWN); + ourUnknownTag = (Byte)ourTagByName.get("unknown"); + ourTagByName.put("p", P); + ourTagByName.put("v", V); + ourTagByName.put("subtitle", SUBTITLE); + ourTagByName.put("text-author", TEXT_AUTHOR); + ourTagByName.put("date", DATE); + ourTagByName.put("cite", CITE); + ourTagByName.put("section", SECTION); + ourTagByName.put("poem", POEM); + ourTagByName.put("stanza", STANZA); + ourTagByName.put("epigraph", EPIGRAPH); + ourTagByName.put("annotation", ANNOTATION); + ourTagByName.put("coverpage", COVERPAGE); + ourTagByName.put("a", A); + ourTagByName.put("empty-line", EMPTY_LINE); + ourTagByName.put("sup", SUP); + ourTagByName.put("sub", SUB); + ourTagByName.put("emphasis", EMPHASIS); + ourTagByName.put("strong", STRONG); + ourTagByName.put("code", CODE); + ourTagByName.put("strikethrough", STRIKETHROUGH); + ourTagByName.put("title", TITLE); + ourTagByName.put("title-info", TITLE_INFO); + ourTagByName.put("body", BODY); + ourTagByName.put("image", IMAGE); + ourTagByName.put("binary", BINARY); + ourTagByName.put("fictionbook", FICTIONBOOK); + ourTagByName.put("book-title", BOOK_TITLE); + ourTagByName.put("sequence", SEQUENCE); + ourTagByName.put("first-name", FIRST_NAME); + ourTagByName.put("middle-name", MIDDLE_NAME); + ourTagByName.put("last-name", LAST_NAME); + ourTagByName.put("book-title", BOOK_TITLE); + ourTagByName.put("author", AUTHOR); + ourTagByName.put("lang", LANG); + } + + public static byte getTagByName(String name) { + final HashMap tagByName = ourTagByName; + Byte num = (Byte)tagByName.get(name); + if (num == null) { + final String upperCaseName = name.toLowerCase().intern(); + num = (Byte)tagByName.get(upperCaseName); + if (num == null) { + num = ourUnknownTag; + tagByName.put(upperCaseName, num); + } + tagByName.put(name, num); + } + return num.byteValue(); + } + + private FB2Tag() { + } +} diff --git a/src/org/geometerplus/fbreader/formats/html/HtmlTag.java b/src/org/geometerplus/fbreader/formats/html/HtmlTag.java index 4be396bd5..735ae2159 100644 --- a/src/org/geometerplus/fbreader/formats/html/HtmlTag.java +++ b/src/org/geometerplus/fbreader/formats/html/HtmlTag.java @@ -17,101 +17,101 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.formats.html; - -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; - -final class HtmlTag { - public static final byte HTML = -1; - public static final byte UNKNOWN = 0; - public static final byte HEAD = 1; - public static final byte BODY = 2; - public static final byte TITLE = 3; - public static final byte P = 4; - public static final byte H1 = 5; - public static final byte H2 = 6; - public static final byte H3 = 7; - public static final byte H4 = 8; - public static final byte H5 = 9; - public static final byte H6 = 10; - public static final byte A = 11; - public static final byte B = 12; - public static final byte I = 13; - public static final byte BR = 14; - public static final byte STRONG = 15; - public static final byte IMG = 16; - public static final byte SCRIPT = 17; - public static final byte OL = 18; - public static final byte UL = 19; - public static final byte LI = 20; - public static final byte SELECT = 21; - public static final byte DIV = 22; - public static final byte TR = 23; - public static final byte STYLE = 24; - - public static final byte S = 25; - public static final byte SUB = 26; - public static final byte SUP = 27; - public static final byte PRE = 28; - public static final byte CODE = 29; - public static final byte EM = 30; - public static final byte DFN = 31; - public static final byte CITE = 32; - - - private static final HashMap ourTagByName = new HashMap(256, 0.2f); - private static final Byte ourUnknownTag; - - static { - ourTagByName.put("unknown", UNKNOWN); - ourUnknownTag = (Byte)ourTagByName.get("unknown"); - ourTagByName.put("html", HTML); - ourTagByName.put("head", HEAD); - ourTagByName.put("body", BODY); - ourTagByName.put("title", TITLE); - ourTagByName.put("p", P); - ourTagByName.put("h1", H1); - ourTagByName.put("h2", H2); - ourTagByName.put("h3", H3); - ourTagByName.put("h4", H4); - ourTagByName.put("h5", H5); - ourTagByName.put("h6", H6); - ourTagByName.put("a", A); - ourTagByName.put("b", B); - ourTagByName.put("i", I); - ourTagByName.put("br", BR); - ourTagByName.put("strong", STRONG); - ourTagByName.put("img", IMG); - ourTagByName.put("script", SCRIPT); - ourTagByName.put("ol", OL); - ourTagByName.put("ul", UL); - ourTagByName.put("li", LI); - ourTagByName.put("select", SELECT); - ourTagByName.put("tr", TR); - ourTagByName.put("style", STYLE); - ourTagByName.put("s", S); - ourTagByName.put("sub", SUB); - ourTagByName.put("sup", SUP); - ourTagByName.put("pre", PRE); - ourTagByName.put("code", CODE); - ourTagByName.put("em", EM); - ourTagByName.put("def", DFN); - ourTagByName.put("cite", CITE); - } - - public static byte getTagByName(String name) { - final HashMap tagByName = ourTagByName; - Byte num = (Byte)tagByName.get(name); - if (num == null) { - final String lowerCaseName = name.toLowerCase().intern(); - num = (Byte)tagByName.get(lowerCaseName); - if (num == null) { - num = ourUnknownTag; - tagByName.put(lowerCaseName, num); - } - tagByName.put(name, num); - } - return num.byteValue(); - } -} +package org.geometerplus.fbreader.formats.html; + +import java.util.*; +import org.geometerplus.zlibrary.core.util.*; + +final class HtmlTag { + public static final byte HTML = -1; + public static final byte UNKNOWN = 0; + public static final byte HEAD = 1; + public static final byte BODY = 2; + public static final byte TITLE = 3; + public static final byte P = 4; + public static final byte H1 = 5; + public static final byte H2 = 6; + public static final byte H3 = 7; + public static final byte H4 = 8; + public static final byte H5 = 9; + public static final byte H6 = 10; + public static final byte A = 11; + public static final byte B = 12; + public static final byte I = 13; + public static final byte BR = 14; + public static final byte STRONG = 15; + public static final byte IMG = 16; + public static final byte SCRIPT = 17; + public static final byte OL = 18; + public static final byte UL = 19; + public static final byte LI = 20; + public static final byte SELECT = 21; + public static final byte DIV = 22; + public static final byte TR = 23; + public static final byte STYLE = 24; + + public static final byte S = 25; + public static final byte SUB = 26; + public static final byte SUP = 27; + public static final byte PRE = 28; + public static final byte CODE = 29; + public static final byte EM = 30; + public static final byte DFN = 31; + public static final byte CITE = 32; + + + private static final HashMap ourTagByName = new HashMap(256, 0.2f); + private static final Byte ourUnknownTag; + + static { + ourTagByName.put("unknown", UNKNOWN); + ourUnknownTag = (Byte)ourTagByName.get("unknown"); + ourTagByName.put("html", HTML); + ourTagByName.put("head", HEAD); + ourTagByName.put("body", BODY); + ourTagByName.put("title", TITLE); + ourTagByName.put("p", P); + ourTagByName.put("h1", H1); + ourTagByName.put("h2", H2); + ourTagByName.put("h3", H3); + ourTagByName.put("h4", H4); + ourTagByName.put("h5", H5); + ourTagByName.put("h6", H6); + ourTagByName.put("a", A); + ourTagByName.put("b", B); + ourTagByName.put("i", I); + ourTagByName.put("br", BR); + ourTagByName.put("strong", STRONG); + ourTagByName.put("img", IMG); + ourTagByName.put("script", SCRIPT); + ourTagByName.put("ol", OL); + ourTagByName.put("ul", UL); + ourTagByName.put("li", LI); + ourTagByName.put("select", SELECT); + ourTagByName.put("tr", TR); + ourTagByName.put("style", STYLE); + ourTagByName.put("s", S); + ourTagByName.put("sub", SUB); + ourTagByName.put("sup", SUP); + ourTagByName.put("pre", PRE); + ourTagByName.put("code", CODE); + ourTagByName.put("em", EM); + ourTagByName.put("def", DFN); + ourTagByName.put("cite", CITE); + } + + public static byte getTagByName(String name) { + final HashMap tagByName = ourTagByName; + Byte num = (Byte)tagByName.get(name); + if (num == null) { + final String lowerCaseName = name.toLowerCase().intern(); + num = (Byte)tagByName.get(lowerCaseName); + if (num == null) { + num = ourUnknownTag; + tagByName.put(lowerCaseName, num); + } + tagByName.put(name, num); + } + return num.byteValue(); + } +} diff --git a/src/org/geometerplus/fbreader/option/FBOptions.java b/src/org/geometerplus/fbreader/option/FBOptions.java index 8949988d5..ef65702c9 100644 --- a/src/org/geometerplus/fbreader/option/FBOptions.java +++ b/src/org/geometerplus/fbreader/option/FBOptions.java @@ -17,10 +17,10 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.option; - -public class FBOptions { - public final static String BOOKS_CATEGORY = "books"; - public final static String SEARCH_CATEGORY = "search"; - public final static String EXTERNAL_CATEGORY = "external"; -} +package org.geometerplus.fbreader.option; + +public interface FBOptions { + String BOOKS_CATEGORY = "books"; + String SEARCH_CATEGORY = "search"; + String EXTERNAL_CATEGORY = "external"; +} diff --git a/src/org/geometerplus/fbreader/optionsDialog/FormatOptionsPage.java b/src/org/geometerplus/fbreader/optionsDialog/FormatOptionsPage.java index fe673bce9..a6217bb44 100644 --- a/src/org/geometerplus/fbreader/optionsDialog/FormatOptionsPage.java +++ b/src/org/geometerplus/fbreader/optionsDialog/FormatOptionsPage.java @@ -17,99 +17,99 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.optionsDialog; - -import org.geometerplus.zlibrary.core.dialogs.ZLDialogContent; -import org.geometerplus.zlibrary.core.optionEntries.ZLSimpleSpinOptionEntry; -import org.geometerplus.zlibrary.core.resources.ZLResource; -import org.geometerplus.zlibrary.text.view.ZLTextAlignmentOptionEntry; -import org.geometerplus.zlibrary.text.view.ZLTextLineSpaceOptionEntry; -import org.geometerplus.zlibrary.text.view.style.ZLTextBaseStyle; -import org.geometerplus.zlibrary.text.view.style.ZLTextStyleCollection; -import org.geometerplus.zlibrary.text.view.style.ZLTextStyleDecoration; -import org.geometerplus.zlibrary.text.view.style.ZLTextFullStyleDecoration; - -import static org.geometerplus.fbreader.bookmodel.FBTextKind.*; - -public class FormatOptionsPage extends OptionsPage { - private static final String KEY_STYLE = "style"; - private static final String KEY_BASE = "Base"; - - private static final String KEY_DUMMY = ""; - private static final String KEY_LINESPACING = "lineSpacing"; - private static final String KEY_FIRSTLINEINDENT = "firstLineIndent"; - private static final String KEY_ALIGNMENT = "alignment"; - private static final String KEY_SPACEBEFORE = "spaceBefore"; - private static final String KEY_SPACEAFTER = "spaceAfter"; - private static final String KEY_LEFTINDENT = "leftIndent"; - private static final String KEY_RIGHTINDENT = "rightIndent"; - - public FormatOptionsPage(ZLDialogContent dialogTab) { - final ZLResource styleResource = ZLResource.resource(KEY_STYLE); - - myComboEntry = new ComboOptionEntry(this, styleResource.getResource(KEY_BASE).getValue()); - myComboEntry.addValue(myComboEntry.initialValue()); - - ZLTextStyleCollection collection = ZLTextStyleCollection.getInstance(); - byte styles[] = { REGULAR, TITLE, SECTION_TITLE, SUBTITLE, H1, H2, H3, H4, H5, H6, ANNOTATION, EPIGRAPH, PREFORMATTED, AUTHOR,/* DATEKIND,*/ POEM_TITLE, STANZA, VERSE }; - final int STYLES_NUMBER = styles.length; - for (int i = 0; i < STYLES_NUMBER; ++i) { - final ZLTextStyleDecoration decoration = collection.getDecoration(styles[i]); - if (decoration != null) { - myComboEntry.addValue(styleResource.getResource(decoration.getName()).getValue()); - } - } - dialogTab.addOption("optionsFor", myComboEntry); - - { - final String name = myComboEntry.initialValue(); - ZLTextBaseStyle baseStyle = collection.baseStyle(); - - registerEntries(dialogTab, - KEY_LINESPACING, new ZLTextLineSpaceOptionEntry(baseStyle.LineSpacePercentOption, dialogTab.getResource(KEY_LINESPACING), false), - KEY_DUMMY, null,//new ZLSimpleSpinOptionEntry("First Line Indent", baseStyle.firstLineIndentDeltaOption(), -300, 300, 1), - name - ); - - registerEntries(dialogTab, - KEY_ALIGNMENT, new ZLTextAlignmentOptionEntry(baseStyle.AlignmentOption, dialogTab.getResource(KEY_ALIGNMENT), false), - KEY_DUMMY, null, - name - ); - } - - for (int i = 0; i < STYLES_NUMBER; ++i) { - ZLTextStyleDecoration d = collection.getDecoration(styles[i]); - if ((d != null) && (d.isFullDecoration())) { - ZLTextFullStyleDecoration decoration = (ZLTextFullStyleDecoration) d; - final String name = styleResource.getResource(decoration.getName()).getValue(); - - registerEntries(dialogTab, - KEY_SPACEBEFORE, new ZLSimpleSpinOptionEntry(decoration.SpaceBeforeOption, 1), - KEY_LEFTINDENT, new ZLSimpleSpinOptionEntry(decoration.LeftIndentOption, 1), - name - ); - - registerEntries(dialogTab, - KEY_SPACEAFTER, new ZLSimpleSpinOptionEntry(decoration.SpaceAfterOption, 1), - KEY_RIGHTINDENT, new ZLSimpleSpinOptionEntry(decoration.RightIndentOption, 1), - name - ); - - registerEntries(dialogTab, - KEY_LINESPACING, new ZLTextLineSpaceOptionEntry(decoration.LineSpacePercentOption, dialogTab.getResource(KEY_LINESPACING), true), - KEY_FIRSTLINEINDENT, new ZLSimpleSpinOptionEntry(decoration.FirstLineIndentDeltaOption, 1), - name - ); - - registerEntries(dialogTab, - KEY_ALIGNMENT, new ZLTextAlignmentOptionEntry(decoration.AlignmentOption, dialogTab.getResource(KEY_ALIGNMENT), true), - KEY_DUMMY, null, - name - ); - } - } - - myComboEntry.onValueSelected(0); - } -} +package org.geometerplus.fbreader.optionsDialog; + +import org.geometerplus.zlibrary.core.dialogs.ZLDialogContent; +import org.geometerplus.zlibrary.core.optionEntries.ZLSimpleSpinOptionEntry; +import org.geometerplus.zlibrary.core.resources.ZLResource; +import org.geometerplus.zlibrary.text.view.ZLTextAlignmentOptionEntry; +import org.geometerplus.zlibrary.text.view.ZLTextLineSpaceOptionEntry; +import org.geometerplus.zlibrary.text.view.style.ZLTextBaseStyle; +import org.geometerplus.zlibrary.text.view.style.ZLTextStyleCollection; +import org.geometerplus.zlibrary.text.view.style.ZLTextStyleDecoration; +import org.geometerplus.zlibrary.text.view.style.ZLTextFullStyleDecoration; + +import static org.geometerplus.fbreader.bookmodel.FBTextKind.*; + +class FormatOptionsPage extends OptionsPage { + private static final String KEY_STYLE = "style"; + private static final String KEY_BASE = "Base"; + + private static final String KEY_DUMMY = ""; + private static final String KEY_LINESPACING = "lineSpacing"; + private static final String KEY_FIRSTLINEINDENT = "firstLineIndent"; + private static final String KEY_ALIGNMENT = "alignment"; + private static final String KEY_SPACEBEFORE = "spaceBefore"; + private static final String KEY_SPACEAFTER = "spaceAfter"; + private static final String KEY_LEFTINDENT = "leftIndent"; + private static final String KEY_RIGHTINDENT = "rightIndent"; + + public FormatOptionsPage(ZLDialogContent dialogTab) { + final ZLResource styleResource = ZLResource.resource(KEY_STYLE); + + myComboEntry = new ComboOptionEntry(this, styleResource.getResource(KEY_BASE).getValue()); + myComboEntry.addValue(myComboEntry.initialValue()); + + ZLTextStyleCollection collection = ZLTextStyleCollection.getInstance(); + byte styles[] = { REGULAR, TITLE, SECTION_TITLE, SUBTITLE, H1, H2, H3, H4, H5, H6, ANNOTATION, EPIGRAPH, PREFORMATTED, AUTHOR,/* DATEKIND,*/ POEM_TITLE, STANZA, VERSE }; + final int stylesNumber = styles.length; + for (int i = 0; i < stylesNumber; ++i) { + final ZLTextStyleDecoration decoration = collection.getDecoration(styles[i]); + if (decoration != null) { + myComboEntry.addValue(styleResource.getResource(decoration.getName()).getValue()); + } + } + dialogTab.addOption("optionsFor", myComboEntry); + + { + final String name = myComboEntry.initialValue(); + ZLTextBaseStyle baseStyle = collection.baseStyle(); + + registerEntries(dialogTab, + KEY_LINESPACING, new ZLTextLineSpaceOptionEntry(baseStyle.LineSpacePercentOption, dialogTab.getResource(KEY_LINESPACING), false), + KEY_DUMMY, null,//new ZLSimpleSpinOptionEntry("First Line Indent", baseStyle.firstLineIndentDeltaOption(), -300, 300, 1), + name + ); + + registerEntries(dialogTab, + KEY_ALIGNMENT, new ZLTextAlignmentOptionEntry(baseStyle.AlignmentOption, dialogTab.getResource(KEY_ALIGNMENT), false), + KEY_DUMMY, null, + name + ); + } + + for (int i = 0; i < stylesNumber; ++i) { + ZLTextStyleDecoration d = collection.getDecoration(styles[i]); + if ((d != null) && (d.isFullDecoration())) { + ZLTextFullStyleDecoration decoration = (ZLTextFullStyleDecoration) d; + final String name = styleResource.getResource(decoration.getName()).getValue(); + + registerEntries(dialogTab, + KEY_SPACEBEFORE, new ZLSimpleSpinOptionEntry(decoration.SpaceBeforeOption, 1), + KEY_LEFTINDENT, new ZLSimpleSpinOptionEntry(decoration.LeftIndentOption, 1), + name + ); + + registerEntries(dialogTab, + KEY_SPACEAFTER, new ZLSimpleSpinOptionEntry(decoration.SpaceAfterOption, 1), + KEY_RIGHTINDENT, new ZLSimpleSpinOptionEntry(decoration.RightIndentOption, 1), + name + ); + + registerEntries(dialogTab, + KEY_LINESPACING, new ZLTextLineSpaceOptionEntry(decoration.LineSpacePercentOption, dialogTab.getResource(KEY_LINESPACING), true), + KEY_FIRSTLINEINDENT, new ZLSimpleSpinOptionEntry(decoration.FirstLineIndentDeltaOption, 1), + name + ); + + registerEntries(dialogTab, + KEY_ALIGNMENT, new ZLTextAlignmentOptionEntry(decoration.AlignmentOption, dialogTab.getResource(KEY_ALIGNMENT), true), + KEY_DUMMY, null, + name + ); + } + } + + myComboEntry.onValueSelected(0); + } +} diff --git a/src/org/geometerplus/fbreader/optionsDialog/OptionsDialog.java b/src/org/geometerplus/fbreader/optionsDialog/OptionsDialog.java index 3a0cea777..bf5555608 100644 --- a/src/org/geometerplus/fbreader/optionsDialog/OptionsDialog.java +++ b/src/org/geometerplus/fbreader/optionsDialog/OptionsDialog.java @@ -31,7 +31,7 @@ import org.geometerplus.fbreader.encoding.ZLEncodingCollection; import org.geometerplus.fbreader.encodingOption.*; import org.geometerplus.fbreader.collection.BookCollection; import org.geometerplus.fbreader.fbreader.*; -import org.geometerplus.fbreader.formats.FormatPlugin.PluginCollection; +import org.geometerplus.fbreader.formats.PluginCollection; public class OptionsDialog { private ZLOptionsDialog myDialog; diff --git a/src/org/geometerplus/fbreader/optionsDialog/OptionsPage.java b/src/org/geometerplus/fbreader/optionsDialog/OptionsPage.java index 404cd8f71..6b17dca87 100644 --- a/src/org/geometerplus/fbreader/optionsDialog/OptionsPage.java +++ b/src/org/geometerplus/fbreader/optionsDialog/OptionsPage.java @@ -17,43 +17,41 @@ * 02110-1301, USA. */ -package org.geometerplus.fbreader.optionsDialog; - -import java.util.HashMap; -import java.util.LinkedHashMap; - -import org.geometerplus.zlibrary.core.dialogs.ZLDialogContent; -import org.geometerplus.zlibrary.core.dialogs.ZLOptionEntry; - -public class OptionsPage { - private final LinkedHashMap /**/ myEntries = new LinkedHashMap(); - protected ComboOptionEntry myComboEntry; - - protected OptionsPage() {} - - protected void registerEntry(ZLDialogContent tab, final String entryKey, ZLOptionEntry entry, final String name) { - if (entry != null) { - entry.setVisible(false); - myEntries.put(entry, name); - } - tab.addOption(entryKey, entry); - } - - protected void registerEntries(ZLDialogContent tab, final String entry0Key, - ZLOptionEntry entry0, final String entry1Key, ZLOptionEntry entry1, final String name) { - if (entry0 != null) { - entry0.setVisible(false); - myEntries.put(entry0, name); - } - if (entry1 != null) { - entry1.setVisible(false); - myEntries.put(entry1, name); - } - tab.addOptions(entry0Key, entry0, entry1Key, entry1); - } - - LinkedHashMap getEntries() { - return myEntries; - } - -} +package org.geometerplus.fbreader.optionsDialog; + +import java.util.*; + +import org.geometerplus.zlibrary.core.dialogs.*; + +class OptionsPage { + private final LinkedHashMap /**/ myEntries = new LinkedHashMap(); + protected ComboOptionEntry myComboEntry; + + protected OptionsPage() { + } + + protected void registerEntry(ZLDialogContent tab, final String entryKey, ZLOptionEntry entry, final String name) { + if (entry != null) { + entry.setVisible(false); + myEntries.put(entry, name); + } + tab.addOption(entryKey, entry); + } + + protected void registerEntries(ZLDialogContent tab, final String entry0Key, + ZLOptionEntry entry0, final String entry1Key, ZLOptionEntry entry1, final String name) { + if (entry0 != null) { + entry0.setVisible(false); + myEntries.put(entry0, name); + } + if (entry1 != null) { + entry1.setVisible(false); + myEntries.put(entry1, name); + } + tab.addOptions(entry0Key, entry0, entry1Key, entry1); + } + + LinkedHashMap getEntries() { + return myEntries; + } +} diff --git a/src/org/geometerplus/zlibrary/core/application/ZLApplication.java b/src/org/geometerplus/zlibrary/core/application/ZLApplication.java index 8786b30b0..c47dff987 100644 --- a/src/org/geometerplus/zlibrary/core/application/ZLApplication.java +++ b/src/org/geometerplus/zlibrary/core/application/ZLApplication.java @@ -275,42 +275,35 @@ public abstract class ZLApplication { abstract protected void run(); } - //full screen action - protected static class FullscreenAction extends ZLAction { - private final ZLApplication myApplication; + protected class FullscreenAction extends ZLAction { private final boolean myIsToggle; - public FullscreenAction(ZLApplication application, boolean toggle) { - myApplication = application; + public FullscreenAction(boolean toggle) { myIsToggle = toggle; } public boolean isVisible() { - return myIsToggle || !myApplication.isFullscreen(); + return myIsToggle || !isFullscreen(); } public void run() { - myApplication.setFullscreen(!myApplication.isFullscreen()); + setFullscreen(!isFullscreen()); } } - //rotation action - protected static final class RotationAction extends ZLAction { - private ZLApplication myApplication; - - public RotationAction(ZLApplication application) { - myApplication = application; + protected final class RotationAction extends ZLAction { + public RotationAction() { } - + public boolean isVisible() { - return (myApplication.myViewWidget != null) && - ((myApplication.RotationAngleOption.getValue() != ZLViewWidget.Angle.DEGREES0) || - (myApplication.myViewWidget.getRotation() != ZLViewWidget.Angle.DEGREES0)); + return (myViewWidget != null) && + ((RotationAngleOption.getValue() != ZLViewWidget.Angle.DEGREES0) || + (myViewWidget.getRotation() != ZLViewWidget.Angle.DEGREES0)); } public void run() { - int optionValue = myApplication.RotationAngleOption.getValue(); - int oldAngle = myApplication.myViewWidget.getRotation(); + int optionValue = RotationAngleOption.getValue(); + int oldAngle = myViewWidget.getRotation(); int newAngle = ZLViewWidget.Angle.DEGREES0; if (optionValue == -1) { newAngle = (oldAngle + 90) % 360; @@ -318,9 +311,9 @@ public abstract class ZLApplication { newAngle = (oldAngle == ZLViewWidget.Angle.DEGREES0) ? optionValue : ZLViewWidget.Angle.DEGREES0; } - myApplication.myViewWidget.rotate(newAngle); - myApplication.AngleStateOption.setValue(newAngle); - myApplication.refreshWindow(); + myViewWidget.rotate(newAngle); + AngleStateOption.setValue(newAngle); + refreshWindow(); } } @@ -492,20 +485,12 @@ public abstract class ZLApplication { //MenuBar public static final class Menubar extends Menu { public static final class PlainItem implements Item { - private final String myName; - private final String myActionId; + public final String Name; + public final String ActionId; public PlainItem(String name, String actionId) { - myName = name; - myActionId = actionId; - } - - public String getName() { - return myName; - } - - public String getActionId() { - return myActionId; + Name = name; + ActionId = actionId; } }; diff --git a/src/org/geometerplus/zlibrary/core/application/ZLKeyBindings.java b/src/org/geometerplus/zlibrary/core/application/ZLKeyBindings.java index 9144bd8c6..63e202c0f 100644 --- a/src/org/geometerplus/zlibrary/core/application/ZLKeyBindings.java +++ b/src/org/geometerplus/zlibrary/core/application/ZLKeyBindings.java @@ -17,95 +17,94 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.application; - -import java.util.*; -import java.util.Map.Entry; - -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.zlibrary.core.options.ZLIntegerOption; -import org.geometerplus.zlibrary.core.options.ZLIntegerRangeOption; -import org.geometerplus.zlibrary.core.options.ZLOption; -import org.geometerplus.zlibrary.core.options.ZLStringOption; - -public final class ZLKeyBindings { - private static final String BINDINGS_NUMBER = "Number"; - private static final String BINDED_KEY = "Key"; - private static final String BINDED_ACTION = "Action"; - - private final String myName; - private final HashMap myBindingsMap = new HashMap(); - private boolean myIsChanged; - - public ZLKeyBindings(String name) { - myName = name; - new ZLKeyBindingsReader(myBindingsMap).readBindings(); - loadCustomBindings(); - myIsChanged = false; - } - - public void bindKey(String key, String actionId) { - myBindingsMap.put(key, actionId); - myIsChanged = true; - } - - public String getBinding(String key) { - return (String)myBindingsMap.get(key); - } - - /* - public Set getKeys() { - return myBindingsMap.keySet(); - } - */ - - private void loadCustomBindings() { - final int size = - new ZLIntegerRangeOption(ZLOption.CONFIG_CATEGORY, myName, BINDINGS_NUMBER, 0, 256, 0).getValue(); - final ZLStringOption keyOption = - new ZLStringOption(ZLOption.CONFIG_CATEGORY, myName, "", ""); - final ZLStringOption actionOption = - new ZLStringOption(ZLOption.CONFIG_CATEGORY, myName, "", ""); - for (int i = 0; i < size; ++i) { - keyOption.changeName(BINDED_KEY + i); - String keyValue = keyOption.getValue(); - if (keyValue.length() != 0) { - actionOption.changeName(BINDED_ACTION + i); - String actionValue = actionOption.getValue(); - if (actionValue.length() != 0) { - bindKey(keyValue, actionValue); - } - } - } - } - - public void saveCustomBindings() { - if (!myIsChanged) { - return; - } - - final HashMap keymap = new HashMap(); - new ZLKeyBindingsReader(keymap).readBindings(); - - int counter = 0; - final ZLStringOption keyOption = - new ZLStringOption(ZLOption.CONFIG_CATEGORY, myName, "", ""); - final ZLStringOption actionOption = - new ZLStringOption(ZLOption.CONFIG_CATEGORY, myName, "", ""); - for (Iterator it = myBindingsMap.keySet().iterator(); it.hasNext(); ) { - final String key = (String) it.next(); - String originalValue = (String) keymap.get(key); - String value = (String) myBindingsMap.get(key); - if (!value.equals(originalValue)) { - keyOption.changeName(BINDED_KEY + counter); - actionOption.changeName(BINDED_ACTION + counter); - keyOption.setValue(key); - actionOption.setValue(value); - ++counter; - } - } - new ZLIntegerRangeOption(ZLOption.CONFIG_CATEGORY, myName, BINDINGS_NUMBER, 0, 256, 0).setValue(counter); - } - -} +package org.geometerplus.zlibrary.core.application; + +import java.util.*; +import java.util.Map.Entry; + +import org.geometerplus.zlibrary.core.util.*; + +import org.geometerplus.zlibrary.core.options.ZLIntegerOption; +import org.geometerplus.zlibrary.core.options.ZLIntegerRangeOption; +import org.geometerplus.zlibrary.core.options.ZLOption; +import org.geometerplus.zlibrary.core.options.ZLStringOption; + +public final class ZLKeyBindings { + private static final String BINDINGS_NUMBER = "Number"; + private static final String BINDED_KEY = "Key"; + private static final String BINDED_ACTION = "Action"; + + private final String myName; + private final HashMap myBindingsMap = new HashMap(); + private boolean myIsChanged; + + public ZLKeyBindings(String name) { + myName = name; + new ZLKeyBindingsReader(myBindingsMap).readBindings(); + loadCustomBindings(); + myIsChanged = false; + } + + public void bindKey(String key, String actionId) { + myBindingsMap.put(key, actionId); + myIsChanged = true; + } + + public String getBinding(String key) { + return (String)myBindingsMap.get(key); + } + + /* + public Set getKeys() { + return myBindingsMap.keySet(); + } + */ + + private void loadCustomBindings() { + final int size = + new ZLIntegerRangeOption(ZLOption.CONFIG_CATEGORY, myName, BINDINGS_NUMBER, 0, 256, 0).getValue(); + final ZLStringOption keyOption = + new ZLStringOption(ZLOption.CONFIG_CATEGORY, myName, "", ""); + final ZLStringOption actionOption = + new ZLStringOption(ZLOption.CONFIG_CATEGORY, myName, "", ""); + for (int i = 0; i < size; ++i) { + keyOption.changeName(BINDED_KEY + i); + final String keyValue = keyOption.getValue(); + if (keyValue.length() != 0) { + actionOption.changeName(BINDED_ACTION + i); + final String actionValue = actionOption.getValue(); + if (actionValue.length() != 0) { + bindKey(keyValue, actionValue); + } + } + } + } + + public void saveCustomBindings() { + if (!myIsChanged) { + return; + } + + final HashMap keymap = new HashMap(); + new ZLKeyBindingsReader(keymap).readBindings(); + + int counter = 0; + final ZLStringOption keyOption = + new ZLStringOption(ZLOption.CONFIG_CATEGORY, myName, "", ""); + final ZLStringOption actionOption = + new ZLStringOption(ZLOption.CONFIG_CATEGORY, myName, "", ""); + for (Iterator it = myBindingsMap.keySet().iterator(); it.hasNext(); ) { + final String key = (String)it.next(); + final String originalValue = (String)keymap.get(key); + final String value = (String)myBindingsMap.get(key); + if (!value.equals(originalValue)) { + keyOption.changeName(BINDED_KEY + counter); + actionOption.changeName(BINDED_ACTION + counter); + keyOption.setValue(key); + actionOption.setValue(value); + ++counter; + } + } + new ZLIntegerRangeOption(ZLOption.CONFIG_CATEGORY, myName, BINDINGS_NUMBER, 0, 256, 0).setValue(counter); + } +} diff --git a/src/org/geometerplus/zlibrary/core/application/ZLKeyBindingsReader.java b/src/org/geometerplus/zlibrary/core/application/ZLKeyBindingsReader.java index d9892cbb7..79e149652 100644 --- a/src/org/geometerplus/zlibrary/core/application/ZLKeyBindingsReader.java +++ b/src/org/geometerplus/zlibrary/core/application/ZLKeyBindingsReader.java @@ -17,34 +17,34 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.application; - -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.zlibrary.core.library.ZLibrary; -import org.geometerplus.zlibrary.core.xml.ZLStringMap; -import org.geometerplus.zlibrary.core.xml.ZLXMLReaderAdapter; - -class ZLKeyBindingsReader extends ZLXMLReaderAdapter { - private HashMap myKeymap; - - public ZLKeyBindingsReader(HashMap keymap) { - myKeymap = keymap; - } - - public boolean startElementHandler(String tag, ZLStringMap attributes) { - if ("binding".equals(tag)) { - String key = attributes.getValue("key"); - String actionId = attributes.getValue("action"); - if ((key != null) && (actionId != null)) { - myKeymap.put(key, actionId); - } - } - return false; - } - - public void readBindings() { - read(ZLibrary.JAR_DATA_PREFIX + "data/default/keymap.xml"); - } -} +package org.geometerplus.zlibrary.core.application; + +import java.util.*; +import org.geometerplus.zlibrary.core.util.*; + +import org.geometerplus.zlibrary.core.library.ZLibrary; +import org.geometerplus.zlibrary.core.xml.ZLStringMap; +import org.geometerplus.zlibrary.core.xml.ZLXMLReaderAdapter; + +class ZLKeyBindingsReader extends ZLXMLReaderAdapter { + private final HashMap myKeymap; + + public ZLKeyBindingsReader(HashMap keymap) { + myKeymap = keymap; + } + + public boolean startElementHandler(String tag, ZLStringMap attributes) { + if ("binding".equals(tag)) { + final String key = attributes.getValue("key"); + final String actionId = attributes.getValue("action"); + if ((key != null) && (actionId != null)) { + myKeymap.put(key, actionId); + } + } + return false; + } + + public void readBindings() { + read(ZLibrary.JAR_DATA_PREFIX + "data/default/keymap.xml"); + } +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/UpdateType.java b/src/org/geometerplus/zlibrary/core/dialogs/UpdateType.java deleted file mode 100644 index 94f410159..000000000 --- a/src/org/geometerplus/zlibrary/core/dialogs/UpdateType.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2007-2008 Geometer Plus - * - * 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.core.dialogs; - -public interface UpdateType { - int UPDATE_NONE = 0; - int UPDATE_STATE = 1; - int UPDATE_LIST = 2; - int UPDATE_SELECTION = 4; - int UPDATE_ALL = UPDATE_STATE | UPDATE_LIST | UPDATE_SELECTION; -} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLBooleanOptionEntry.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLBooleanOptionEntry.java index 9c3f828b4..282642fa3 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLBooleanOptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLBooleanOptionEntry.java @@ -17,24 +17,23 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -public abstract class ZLBooleanOptionEntry extends ZLOptionEntry { - protected ZLBooleanOptionEntry() { - - } - - public int getKind() { - return ZLOptionKind.BOOLEAN; - } - - public void onStateChanged(boolean state) { - } - - public abstract boolean initialState(); - - public abstract void onAccept(boolean state); - - public void onReset() { - } -} +package org.geometerplus.zlibrary.core.dialogs; + +public abstract class ZLBooleanOptionEntry extends ZLOptionEntry { + protected ZLBooleanOptionEntry() { + } + + public int getKind() { + return ZLOptionKind.BOOLEAN; + } + + public void onStateChanged(boolean state) { + } + + public abstract boolean initialState(); + + public abstract void onAccept(boolean state); + + public void onReset() { + } +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLChoiceOptionEntry.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLChoiceOptionEntry.java index b0b155fcc..34b260a25 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLChoiceOptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLChoiceOptionEntry.java @@ -17,20 +17,21 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -public abstract class ZLChoiceOptionEntry extends ZLOptionEntry { - protected ZLChoiceOptionEntry() {} - - public int getKind() { - return ZLOptionKind.CHOICE; - } - - public abstract String getText(int index); - - public abstract int choiceNumber(); - - public abstract int initialCheckedIndex(); - - public abstract void onAccept(int index); -} +package org.geometerplus.zlibrary.core.dialogs; + +public abstract class ZLChoiceOptionEntry extends ZLOptionEntry { + protected ZLChoiceOptionEntry() { + } + + public int getKind() { + return ZLOptionKind.CHOICE; + } + + public abstract String getText(int index); + + public abstract int choiceNumber(); + + public abstract int initialCheckedIndex(); + + public abstract void onAccept(int index); +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLColorOptionEntry.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLColorOptionEntry.java index 64b7c214f..4990bc20c 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLColorOptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLColorOptionEntry.java @@ -17,22 +17,24 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -import org.geometerplus.zlibrary.core.util.ZLColor; - -public abstract class ZLColorOptionEntry extends ZLOptionEntry { - protected ZLColorOptionEntry() {} - - public int getKind() { - return ZLOptionKind.COLOR; - } - - public void onReset(ZLColor color) {} - - public abstract ZLColor initialColor(); - - public abstract ZLColor getColor(); - - public abstract void onAccept(ZLColor color); -} +package org.geometerplus.zlibrary.core.dialogs; + +import org.geometerplus.zlibrary.core.util.ZLColor; + +public abstract class ZLColorOptionEntry extends ZLOptionEntry { + protected ZLColorOptionEntry() { + } + + public int getKind() { + return ZLOptionKind.COLOR; + } + + public void onReset(ZLColor color) { + } + + public abstract ZLColor initialColor(); + + public abstract ZLColor getColor(); + + public abstract void onAccept(ZLColor color); +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLDialogContent.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLDialogContent.java index 1b3d2cb6c..e628ec135 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLDialogContent.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLDialogContent.java @@ -17,98 +17,94 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -import java.util.*; - -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.zlibrary.core.resources.ZLResource; -import org.geometerplus.zlibrary.core.optionEntries.ZLSimpleBoolean3OptionEntry; -import org.geometerplus.zlibrary.core.optionEntries.ZLSimpleBooleanOptionEntry; -import org.geometerplus.zlibrary.core.optionEntries.ZLSimpleStringOptionEntry; -import org.geometerplus.zlibrary.core.options.*; - -public abstract class ZLDialogContent { - private final ZLResource myResource; - private final ArrayList myViews = new ArrayList(); - - private static ZLOptionEntry createEntryByOption(ZLSimpleOption option) { - switch (option.getType()) { - case ZLSimpleOption.Type.BOOLEAN: - return new ZLSimpleBooleanOptionEntry((ZLBooleanOption) option); - case ZLSimpleOption.Type.BOOLEAN3: - return new ZLSimpleBoolean3OptionEntry((ZLBoolean3Option) option); - case ZLSimpleOption.Type.STRING: - return new ZLSimpleStringOptionEntry((ZLStringOption) option); - default: - return null; - } - } - - protected ArrayList getViews() { - return myViews; - } - - protected ZLDialogContent(ZLResource resource) { - myResource = resource; - } - - public final String getKey() { - return myResource.Name; - } - - public final String getDisplayName() { - return myResource.getValue(); - } - - public final String getValue(String key) { - return myResource.getResource(key).getValue(); - } - - public final ZLResource getResource(String key) { - return myResource.getResource(key); - } - - public abstract void addOptionByName(String name, ZLOptionEntry option); - - public final void addOption(String key, ZLOptionEntry option) { - addOptionByName(myResource.getResource(key).getValue(), option); - } - - public final void addOption(String key, ZLSimpleOption option) { - addOption(key, createEntryByOption(option)); - } - - public abstract void addOptionsByNames(String name0, ZLOptionEntry option0, String name1, ZLOptionEntry option1); - - public final void addOptions(String key0, ZLOptionEntry option0, String key1, ZLOptionEntry option1) { - final ZLResource resource0 = myResource.getResource(key0); - final ZLResource resource1 = myResource.getResource(key1); - addOptionsByNames(resource0.getValue(), option0, resource1.getValue(), option1); - } - - public final void addOptions(String key0, ZLSimpleOption option0, String key1, ZLSimpleOption option1) { - addOptions(key0, createEntryByOption(option0), key1, createEntryByOption(option1)); - } - - final void accept() { - final int size = myViews.size(); - for (int i = 0; i < size; i++) { - ((ZLOptionView)myViews.get(i)).onAccept(); - } - } - - final void reset() { - final int size = myViews.size(); - for (int i = 0; i < size; i++) { - ((ZLOptionView)myViews.get(i)).reset(); - } - } - - protected final void addView(ZLOptionView view) { - if (view != null) { - myViews.add(view); - } - } -} +package org.geometerplus.zlibrary.core.dialogs; + +import java.util.*; + +import org.geometerplus.zlibrary.core.util.*; + +import org.geometerplus.zlibrary.core.resources.ZLResource; +import org.geometerplus.zlibrary.core.optionEntries.ZLSimpleBoolean3OptionEntry; +import org.geometerplus.zlibrary.core.optionEntries.ZLSimpleBooleanOptionEntry; +import org.geometerplus.zlibrary.core.optionEntries.ZLSimpleStringOptionEntry; +import org.geometerplus.zlibrary.core.options.*; + +public abstract class ZLDialogContent { + private final ZLResource myResource; + protected final ArrayList Views = new ArrayList(); + + private static ZLOptionEntry createEntryByOption(ZLSimpleOption option) { + switch (option.getType()) { + case ZLSimpleOption.Type.BOOLEAN: + return new ZLSimpleBooleanOptionEntry((ZLBooleanOption) option); + case ZLSimpleOption.Type.BOOLEAN3: + return new ZLSimpleBoolean3OptionEntry((ZLBoolean3Option) option); + case ZLSimpleOption.Type.STRING: + return new ZLSimpleStringOptionEntry((ZLStringOption) option); + default: + return null; + } + } + + protected ZLDialogContent(ZLResource resource) { + myResource = resource; + } + + public final String getKey() { + return myResource.Name; + } + + public final String getDisplayName() { + return myResource.getValue(); + } + + public final String getValue(String key) { + return myResource.getResource(key).getValue(); + } + + public final ZLResource getResource(String key) { + return myResource.getResource(key); + } + + public abstract void addOptionByName(String name, ZLOptionEntry option); + + public final void addOption(String key, ZLOptionEntry option) { + addOptionByName(myResource.getResource(key).getValue(), option); + } + + public final void addOption(String key, ZLSimpleOption option) { + addOption(key, createEntryByOption(option)); + } + + public abstract void addOptionsByNames(String name0, ZLOptionEntry option0, String name1, ZLOptionEntry option1); + + public final void addOptions(String key0, ZLOptionEntry option0, String key1, ZLOptionEntry option1) { + final ZLResource resource0 = myResource.getResource(key0); + final ZLResource resource1 = myResource.getResource(key1); + addOptionsByNames(resource0.getValue(), option0, resource1.getValue(), option1); + } + + public final void addOptions(String key0, ZLSimpleOption option0, String key1, ZLSimpleOption option1) { + addOptions(key0, createEntryByOption(option0), key1, createEntryByOption(option1)); + } + + final void accept() { + final int size = Views.size(); + for (int i = 0; i < size; i++) { + ((ZLOptionView)Views.get(i)).onAccept(); + } + } + + final void reset() { + final int size = Views.size(); + for (int i = 0; i < size; i++) { + ((ZLOptionView)Views.get(i)).reset(); + } + } + + protected final void addView(ZLOptionView view) { + if (view != null) { + Views.add(view); + } + } +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLDialogManager.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLDialogManager.java index 5d16ea2aa..1b1f018f4 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLDialogManager.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLDialogManager.java @@ -17,98 +17,98 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -import org.geometerplus.zlibrary.core.application.ZLApplication; -import org.geometerplus.zlibrary.core.application.ZLApplicationWindow; -import org.geometerplus.zlibrary.core.resources.ZLResource; - -public abstract class ZLDialogManager { - protected static ZLDialogManager ourInstance; - - public static final String OK_BUTTON = "ok"; - public static final String CANCEL_BUTTON = "cancel"; - public static final String YES_BUTTON = "yes"; - public static final String NO_BUTTON = "no"; - public static final String APPLY_BUTTON = "apply"; - - public static final String COLOR_KEY = "color"; - public static final String DIALOG_TITLE = "title"; - - protected ZLDialogManager() { - ourInstance = this; - } - - public static ZLDialogManager getInstance() { - return ourInstance; - } - - public abstract void runSelectionDialog(String key, ZLTreeHandler handler, Runnable actionOnAccept); - - public abstract void showInformationBox(String key, String message); - - public final void showInformationBox(String key) { - showInformationBox(key, getDialogMessage(key)); - } - - public abstract void showErrorBox(String key, String message); - - public final void showErrorBox(String key) { - showErrorBox(key, getDialogMessage(key)); - } - - public abstract void showQuestionBox(String key, String message, String button0, Runnable action0, String button1, Runnable action1, String button2, Runnable action2); - - public final void showQuestionBox(String key, String button0, Runnable action0, String button1, Runnable action1, String button2, Runnable action2) { - showQuestionBox(key, getDialogMessage(key), button0, action0, button1, action1, button2, action2); - } - - public abstract ZLApplicationWindow createApplicationWindow(ZLApplication application); - - public abstract ZLDialog createDialog(String key); - - public abstract ZLOptionsDialog createOptionsDialog(String key, Runnable exitAction, Runnable applyAction, boolean showApplyButton); - - public abstract void wait(String key, Runnable runnable); - - public static String getButtonText(String key) { - return getResource().getResource("button").getResource(key).getValue(); - } - - public static String getWaitMessageText(String key) { - return getResource().getResource("waitMessage").getResource(key).getValue(); - } - - public static String getDialogMessage(String key) { - return getResource().getResource(key).getResource("message").getValue(); - } - - public static String getDialogTitle(String key) { - return getResource().getResource(key).getResource("title").getValue(); - } - - protected static ZLResource getResource() { - return ZLResource.resource("dialog"); - } -} - - -/* - * - * - -public: - - - virtual shared_ptr createDialog(const ZLResourceKey &key) const = 0; - - virtual void wait(const ZLResourceKey &key, Runnable &runnable) const = 0; - - interface ClipboardType { - CLIPBOARD_MAIN, - CLIPBOARD_SELECTION - }; - virtual bool isClipboardSupported(ClipboardType type) const = 0; - virtual void setClipboardText(const std::string &text, ClipboardType type) const = 0; - * - */ +package org.geometerplus.zlibrary.core.dialogs; + +import org.geometerplus.zlibrary.core.application.ZLApplication; +import org.geometerplus.zlibrary.core.application.ZLApplicationWindow; +import org.geometerplus.zlibrary.core.resources.ZLResource; + +public abstract class ZLDialogManager { + protected static ZLDialogManager ourInstance; + + public static final String OK_BUTTON = "ok"; + public static final String CANCEL_BUTTON = "cancel"; + public static final String YES_BUTTON = "yes"; + public static final String NO_BUTTON = "no"; + public static final String APPLY_BUTTON = "apply"; + + public static final String COLOR_KEY = "color"; + public static final String DIALOG_TITLE = "title"; + + protected ZLDialogManager() { + ourInstance = this; + } + + public static ZLDialogManager getInstance() { + return ourInstance; + } + + public abstract void runSelectionDialog(String key, ZLTreeHandler handler, Runnable actionOnAccept); + + public abstract void showInformationBox(String key, String message); + + public final void showInformationBox(String key) { + showInformationBox(key, getDialogMessage(key)); + } + + public abstract void showErrorBox(String key, String message); + + public final void showErrorBox(String key) { + showErrorBox(key, getDialogMessage(key)); + } + + public abstract void showQuestionBox(String key, String message, String button0, Runnable action0, String button1, Runnable action1, String button2, Runnable action2); + + public final void showQuestionBox(String key, String button0, Runnable action0, String button1, Runnable action1, String button2, Runnable action2) { + showQuestionBox(key, getDialogMessage(key), button0, action0, button1, action1, button2, action2); + } + + public abstract ZLApplicationWindow createApplicationWindow(ZLApplication application); + + public abstract ZLDialog createDialog(String key); + + public abstract ZLOptionsDialog createOptionsDialog(String key, Runnable exitAction, Runnable applyAction, boolean showApplyButton); + + public abstract void wait(String key, Runnable runnable); + + public static String getButtonText(String key) { + return getResource().getResource("button").getResource(key).getValue(); + } + + public static String getWaitMessageText(String key) { + return getResource().getResource("waitMessage").getResource(key).getValue(); + } + + public static String getDialogMessage(String key) { + return getResource().getResource(key).getResource("message").getValue(); + } + + public static String getDialogTitle(String key) { + return getResource().getResource(key).getResource("title").getValue(); + } + + protected static ZLResource getResource() { + return ZLResource.resource("dialog"); + } +} + + +/* + * + * + +public: + + + virtual shared_ptr createDialog(const ZLResourceKey &key) const = 0; + + virtual void wait(const ZLResourceKey &key, Runnable &runnable) const = 0; + + interface ClipboardType { + CLIPBOARD_MAIN, + CLIPBOARD_SELECTION + }; + virtual bool isClipboardSupported(ClipboardType type) const = 0; + virtual void setClipboardText(const std::string &text, ClipboardType type) const = 0; + * + */ diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLMultilineOptionEntry.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLMultilineOptionEntry.java index 9db331b37..18d3b3b4b 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLMultilineOptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLMultilineOptionEntry.java @@ -17,12 +17,13 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -public abstract class ZLMultilineOptionEntry extends ZLTextOptionEntry { - protected ZLMultilineOptionEntry() {} - - public int getKind() { - return ZLOptionKind.MULTILINE; - } -} +package org.geometerplus.zlibrary.core.dialogs; + +public abstract class ZLMultilineOptionEntry extends ZLTextOptionEntry { + protected ZLMultilineOptionEntry() { + } + + public int getKind() { + return ZLOptionKind.MULTILINE; + } +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionEntry.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionEntry.java index 8a0311b6b..e4d68f657 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionEntry.java @@ -17,49 +17,49 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -public abstract class ZLOptionEntry { - private ZLOptionView myView; - private boolean myIsVisible; - private boolean myIsActive; - - public ZLOptionEntry() { - myIsVisible = true; - myIsActive = true; - } - - public abstract int getKind(); - - public final void setView(ZLOptionView view) { - myView = view; - } - - public final void resetView() { - if (myView != null) { - myView.reset(); - } - } - - public final boolean isVisible() { - return myIsVisible; - } - - public final boolean isActive() { - return myIsActive; - } - - public void setVisible(boolean visible) { - myIsVisible = visible; - if (myView != null) { - myView.setVisible(visible); - } - } - - public void setActive(boolean active) { - myIsActive = active; - if (myView != null) { - myView.setActive(active); - } - } -} +package org.geometerplus.zlibrary.core.dialogs; + +public abstract class ZLOptionEntry { + private ZLOptionView myView; + private boolean myIsVisible; + private boolean myIsActive; + + public ZLOptionEntry() { + myIsVisible = true; + myIsActive = true; + } + + public abstract int getKind(); + + public final void setView(ZLOptionView view) { + myView = view; + } + + public final void resetView() { + if (myView != null) { + myView.reset(); + } + } + + public final boolean isVisible() { + return myIsVisible; + } + + public final boolean isActive() { + return myIsActive; + } + + public void setVisible(boolean visible) { + myIsVisible = visible; + if (myView != null) { + myView.setVisible(visible); + } + } + + public void setActive(boolean active) { + myIsActive = active; + if (myView != null) { + myView.setActive(active); + } + } +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionKind.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionKind.java index 8658ca661..ee1a3a134 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionKind.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionKind.java @@ -17,17 +17,17 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -public interface ZLOptionKind { - int CHOICE = 0; - int BOOLEAN = 1; - int BOOLEAN3 = 2; - int STRING = 3; - int SPIN = 4; - int COMBO = 5; - int COLOR = 6; - int KEY = 7; - int ORDER = 8; - int MULTILINE = 9; -} +package org.geometerplus.zlibrary.core.dialogs; + +public interface ZLOptionKind { + int CHOICE = 0; + int BOOLEAN = 1; + int BOOLEAN3 = 2; + int STRING = 3; + int SPIN = 4; + int COMBO = 5; + int COLOR = 6; + int KEY = 7; + int ORDER = 8; + int MULTILINE = 9; +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionView.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionView.java index 262f12ca9..cc182fa09 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionView.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionView.java @@ -17,55 +17,55 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -public abstract class ZLOptionView { - protected final String myName; - protected final ZLOptionEntry myOption; - private boolean myInitialized; - - protected ZLOptionView(String name, ZLOptionEntry option) { - myName = name; - myOption = option; - myInitialized = false; - myOption.setView(this); - } - - protected abstract void reset(); - - public final void setActive(boolean active) { - if (myInitialized) { - _setActive(active); - } - } - - protected abstract void _setActive(boolean active); - - public final void setVisible(boolean visible) { - if (visible) { - if (!myInitialized) { - createItem(); - myInitialized = true; - } - setActive(myOption.isActive()); - show(); - } else { - if (myInitialized) { - hide(); - } - } - } - - protected abstract void hide(); - protected abstract void show(); - - public final void onAccept() { - if (myInitialized) { - _onAccept(); - } - } - - protected abstract void _onAccept(); - - protected abstract void createItem(); -} +package org.geometerplus.zlibrary.core.dialogs; + +public abstract class ZLOptionView { + protected final String myName; + protected final ZLOptionEntry myOption; + private boolean myInitialized; + + protected ZLOptionView(String name, ZLOptionEntry option) { + myName = name; + myOption = option; + myInitialized = false; + myOption.setView(this); + } + + protected abstract void reset(); + + public final void setActive(boolean active) { + if (myInitialized) { + _setActive(active); + } + } + + protected abstract void _setActive(boolean active); + + public final void setVisible(boolean visible) { + if (visible) { + if (!myInitialized) { + createItem(); + myInitialized = true; + } + setActive(myOption.isActive()); + show(); + } else { + if (myInitialized) { + hide(); + } + } + } + + protected abstract void hide(); + protected abstract void show(); + + public final void onAccept() { + if (myInitialized) { + _onAccept(); + } + } + + protected abstract void _onAccept(); + + protected abstract void createItem(); +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionsDialog.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionsDialog.java index ffe217271..80e774e9b 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionsDialog.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLOptionsDialog.java @@ -17,82 +17,81 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.zlibrary.core.options.ZLOption; -import org.geometerplus.zlibrary.core.options.ZLStringOption; -import org.geometerplus.zlibrary.core.resources.ZLResource; - -public abstract class ZLOptionsDialog { - private final ZLResource myResource; - protected final ArrayList /*ZLDialogContent*/ myTabs = new ArrayList(); - protected Runnable myExitAction; - protected Runnable myApplyAction; - protected ZLStringOption myTabOption; - - protected ZLOptionsDialog(ZLResource resource, Runnable exitAction, Runnable applyAction) { - myResource = resource; - myExitAction = exitAction; - myApplyAction = applyAction; - myTabOption = new ZLStringOption(ZLOption.LOOK_AND_FEEL_CATEGORY, resource.Name, "SelectedTab", ""); - } - - protected void acceptTab(ZLDialogContent tab) { - tab.accept(); - if (myApplyAction != null) { - myApplyAction.run(); - } - } - - protected void resetTab(ZLDialogContent tab) { - tab.reset(); - } - - protected void accept() { - final int size = myTabs.size(); - for (int i = 0; i < size; i++) { - ((ZLDialogContent)myTabs.get(i)).accept(); - } - if (myApplyAction != null) { - myApplyAction.run(); - } - } - - protected abstract String getSelectedTabKey(); - - protected abstract void selectTab(String key); - - protected abstract void runInternal(); - - protected final String getCaption() { - return myResource.getResource(ZLDialogManager.DIALOG_TITLE).getValue(); - } - - protected final ZLResource getTabResource(String key) { - return myResource.getResource("tab").getResource(key); - } - - public abstract ZLDialogContent createTab(String key); - - public void run() { - selectTab(myTabOption.getValue()); - runInternal(); - myTabOption.setValue(getSelectedTabKey()); - } - - /* - * protected: - static void addPlatformDependentBuilder(shared_ptr builder); - -private: - static std::vector > ourPlatformDependentBuilders; - -public void createPlatformDependentTabs() { - - } - - */ -} +package org.geometerplus.zlibrary.core.dialogs; + +import java.util.*; +import org.geometerplus.zlibrary.core.util.*; + +import org.geometerplus.zlibrary.core.options.*; +import org.geometerplus.zlibrary.core.resources.ZLResource; + +public abstract class ZLOptionsDialog { + private final ZLResource myResource; + protected final ArrayList /*ZLDialogContent*/ myTabs = new ArrayList(); + protected Runnable myExitAction; + protected Runnable myApplyAction; + protected ZLStringOption myTabOption; + + protected ZLOptionsDialog(ZLResource resource, Runnable exitAction, Runnable applyAction) { + myResource = resource; + myExitAction = exitAction; + myApplyAction = applyAction; + myTabOption = new ZLStringOption(ZLOption.LOOK_AND_FEEL_CATEGORY, resource.Name, "SelectedTab", ""); + } + + protected void acceptTab(ZLDialogContent tab) { + tab.accept(); + if (myApplyAction != null) { + myApplyAction.run(); + } + } + + protected void resetTab(ZLDialogContent tab) { + tab.reset(); + } + + protected void accept() { + final int size = myTabs.size(); + for (int i = 0; i < size; i++) { + ((ZLDialogContent)myTabs.get(i)).accept(); + } + if (myApplyAction != null) { + myApplyAction.run(); + } + } + + protected abstract String getSelectedTabKey(); + + protected abstract void selectTab(String key); + + protected abstract void runInternal(); + + protected final String getCaption() { + return myResource.getResource(ZLDialogManager.DIALOG_TITLE).getValue(); + } + + protected final ZLResource getTabResource(String key) { + return myResource.getResource("tab").getResource(key); + } + + public abstract ZLDialogContent createTab(String key); + + public void run() { + selectTab(myTabOption.getValue()); + runInternal(); + myTabOption.setValue(getSelectedTabKey()); + } + + /* + * protected: + static void addPlatformDependentBuilder(shared_ptr builder); + +private: + static std::vector > ourPlatformDependentBuilders; + +public void createPlatformDependentTabs() { + + } + + */ +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLOrderOptionEntry.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLOrderOptionEntry.java index 10b6348f7..0fdf78de9 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLOrderOptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLOrderOptionEntry.java @@ -17,21 +17,22 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; - -public abstract class ZLOrderOptionEntry extends ZLOptionEntry { - private final ArrayList/**/ myValues = new ArrayList(); - - public ZLOrderOptionEntry() {} - - public int getKind() { - return ZLOptionKind.ORDER; - } - - public ArrayList getValues() { - return myValues; - } -} +package org.geometerplus.zlibrary.core.dialogs; + +import java.util.*; +import org.geometerplus.zlibrary.core.util.*; + +public abstract class ZLOrderOptionEntry extends ZLOptionEntry { + private final ArrayList myValues = new ArrayList(); + + public ZLOrderOptionEntry() { + } + + public int getKind() { + return ZLOptionKind.ORDER; + } + + public ArrayList getValues() { + return myValues; + } +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLSelectionDialog.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLSelectionDialog.java index 5df14280e..bd7fbc978 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLSelectionDialog.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLSelectionDialog.java @@ -17,85 +17,91 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; - -public abstract class ZLSelectionDialog { - private final ZLTreeHandler myHandler; - - protected ZLSelectionDialog(ZLTreeHandler myHandler) { - this.myHandler = myHandler; - } - - private void updateSelection() { - ArrayList nodes = handler().subnodes(); - if (nodes.size() == 0) { - return; - } - - int index = handler().selectedIndex(); - if ((index < 0) || (index >= nodes.size())) { - if (handler().isOpenHandler()) { - index = 0; - } else { - return; - } - } - selectItem(index); - } - - protected ZLTreeHandler handler() { - return myHandler; - } - - protected void runNode(ZLTreeNode node) { - if (node == null) { - return; - } - if (node.isFolder()) { - myHandler.changeFolder(node); - update(); - } else if (myHandler.isOpenHandler()) { - if (((ZLTreeOpenHandler) myHandler).accept(node)) { - exitDialog(); - } else { - update(); - } - } else { - ((ZLTreeSaveHandler) myHandler).processNode(node); - update(); - } - } - - protected void runState(String state) { - if (!myHandler.isOpenHandler()) { - if (((ZLTreeSaveHandler) myHandler).accept(state)) { - exitDialog(); - } - } - } - - protected void update() { - int info = handler().updateInfo(); - if ((info & UpdateType.UPDATE_STATE) != 0) { - updateStateLine(); - } - if ((info & UpdateType.UPDATE_LIST) != 0) { - updateList(); - } - if ((info & UpdateType.UPDATE_SELECTION) != 0) { - updateSelection(); - } - myHandler.resetUpdateInfo(); - } - - protected abstract void exitDialog(); - - protected abstract void updateStateLine(); - - protected abstract void updateList(); - - protected abstract void selectItem(int index); -} +package org.geometerplus.zlibrary.core.dialogs; + +import java.util.*; +import org.geometerplus.zlibrary.core.util.*; + +public abstract class ZLSelectionDialog { + public final static int UPDATE_NONE = 0; + public final static int UPDATE_STATE = 1; + public final static int UPDATE_LIST = 2; + public final static int UPDATE_SELECTION = 4; + public final static int UPDATE_ALL = UPDATE_STATE | UPDATE_LIST | UPDATE_SELECTION; + + private final ZLTreeHandler myHandler; + + protected ZLSelectionDialog(ZLTreeHandler myHandler) { + this.myHandler = myHandler; + } + + private void updateSelection() { + ArrayList nodes = handler().subnodes(); + if (nodes.size() == 0) { + return; + } + + int index = handler().selectedIndex(); + if ((index < 0) || (index >= nodes.size())) { + if (handler().isOpenHandler()) { + index = 0; + } else { + return; + } + } + selectItem(index); + } + + protected ZLTreeHandler handler() { + return myHandler; + } + + protected void runNode(ZLTreeNode node) { + if (node == null) { + return; + } + if (node.IsFolder) { + myHandler.changeFolder(node); + update(); + } else if (myHandler.isOpenHandler()) { + if (((ZLTreeOpenHandler)myHandler).accept(node)) { + exitDialog(); + } else { + update(); + } + } else { + ((ZLTreeSaveHandler)myHandler).processNode(node); + update(); + } + } + + protected void runState(String state) { + if (!myHandler.isOpenHandler()) { + if (((ZLTreeSaveHandler)myHandler).accept(state)) { + exitDialog(); + } + } + } + + protected void update() { + int info = handler().updateInfo(); + if ((info & UPDATE_STATE) != 0) { + updateStateLine(); + } + if ((info & UPDATE_LIST) != 0) { + updateList(); + } + if ((info & UPDATE_SELECTION) != 0) { + updateSelection(); + } + myHandler.resetUpdateInfo(); + } + + protected abstract void exitDialog(); + + protected abstract void updateStateLine(); + + protected abstract void updateList(); + + protected abstract void selectItem(int index); +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLSpinOptionEntry.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLSpinOptionEntry.java index e7c16900b..f75f8c1cb 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLSpinOptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLSpinOptionEntry.java @@ -17,22 +17,23 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -public abstract class ZLSpinOptionEntry extends ZLOptionEntry { - protected ZLSpinOptionEntry() {} - - public int getKind() { - return ZLOptionKind.SPIN; - } - - public abstract int initialValue(); - - public abstract int minValue(); - - public abstract int maxValue() ; - - public abstract int getStep(); - - public abstract void onAccept(int value); -} +package org.geometerplus.zlibrary.core.dialogs; + +public abstract class ZLSpinOptionEntry extends ZLOptionEntry { + protected ZLSpinOptionEntry() { + } + + public int getKind() { + return ZLOptionKind.SPIN; + } + + public abstract int initialValue(); + + public abstract int minValue(); + + public abstract int maxValue(); + + public abstract int getStep(); + + public abstract void onAccept(int value); +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLStringOptionEntry.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLStringOptionEntry.java index 3d02aaa21..5b485a6f9 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLStringOptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLStringOptionEntry.java @@ -17,13 +17,13 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -public abstract class ZLStringOptionEntry extends ZLTextOptionEntry { - protected ZLStringOptionEntry() { - } - - public int getKind() { - return ZLOptionKind.STRING; - } -} +package org.geometerplus.zlibrary.core.dialogs; + +public abstract class ZLStringOptionEntry extends ZLTextOptionEntry { + protected ZLStringOptionEntry() { + } + + public int getKind() { + return ZLOptionKind.STRING; + } +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLTextOptionEntry.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLTextOptionEntry.java index 1d7a34cbf..6c7bfd109 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLTextOptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLTextOptionEntry.java @@ -17,17 +17,17 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -public abstract class ZLTextOptionEntry extends ZLOptionEntry { - public abstract String initialValue(); - - public abstract void onAccept(String value); - - public boolean useOnValueEdited() { - return false; - } - - public void onValueEdited(String value) { - } -} +package org.geometerplus.zlibrary.core.dialogs; + +abstract class ZLTextOptionEntry extends ZLOptionEntry { + public abstract String initialValue(); + + public abstract void onAccept(String value); + + public boolean useOnValueEdited() { + return false; + } + + public void onValueEdited(String value) { + } +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeHandler.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeHandler.java index c8f66a782..cabe670a7 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeHandler.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeHandler.java @@ -26,7 +26,7 @@ public abstract class ZLTreeHandler { private int myUpdateInfo; protected ZLTreeHandler() { - myUpdateInfo = UpdateType.UPDATE_ALL; + myUpdateInfo = ZLSelectionDialog.UPDATE_ALL; } protected void addUpdateInfo(int info) { @@ -38,7 +38,7 @@ public abstract class ZLTreeHandler { } public void resetUpdateInfo() { - myUpdateInfo = UpdateType.UPDATE_NONE; + myUpdateInfo = ZLSelectionDialog.UPDATE_NONE; } public abstract boolean isOpenHandler(); diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeNode.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeNode.java index 0a6be7a1c..3998bbe8d 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeNode.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeNode.java @@ -17,39 +17,18 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -public class ZLTreeNode { - private final String myId; - private final String myDisplayName; - private final String myPixmapName; - private final boolean myIsFolder; - - public ZLTreeNode(String myId, String myDisplayName, String myPixmapName, boolean myIsFolder) { - this.myId = myId; - this.myDisplayName = myDisplayName; - this.myPixmapName = myPixmapName; - this.myIsFolder = myIsFolder; - } - - public String displayName() { - return myDisplayName; - } - - public String id() { - return myId; - } - - public boolean isFolder() { - return myIsFolder; - } - - public String pixmapName() { - return myPixmapName; - } - - public String toString() { - return myDisplayName; - } - -} +package org.geometerplus.zlibrary.core.dialogs; + +public final class ZLTreeNode { + public final String Id; + public final String DisplayName; + public final String PixmapName; + public final boolean IsFolder; + + public ZLTreeNode(String id, String displayName, String pixmapName, boolean isFolder) { + Id = id; + DisplayName = displayName; + PixmapName = pixmapName; + IsFolder = isFolder; + } +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeOpenHandler.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeOpenHandler.java index 0b3dce673..42f22be55 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeOpenHandler.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeOpenHandler.java @@ -17,12 +17,12 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -public abstract class ZLTreeOpenHandler extends ZLTreeHandler { - public boolean isOpenHandler() { - return true; - } - - protected abstract boolean accept(ZLTreeNode node); -} +package org.geometerplus.zlibrary.core.dialogs; + +public abstract class ZLTreeOpenHandler extends ZLTreeHandler { + public boolean isOpenHandler() { + return true; + } + + protected abstract boolean accept(ZLTreeNode node); +} diff --git a/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeSaveHandler.java b/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeSaveHandler.java index 75c0887f2..79e8aff50 100644 --- a/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeSaveHandler.java +++ b/src/org/geometerplus/zlibrary/core/dialogs/ZLTreeSaveHandler.java @@ -17,14 +17,14 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.dialogs; - -public abstract class ZLTreeSaveHandler extends ZLTreeHandler { - public boolean isOpenHandler() { - return false; - } - - public abstract void processNode(ZLTreeNode node); - - public abstract boolean accept(String state); -} +package org.geometerplus.zlibrary.core.dialogs; + +public abstract class ZLTreeSaveHandler extends ZLTreeHandler { + public boolean isOpenHandler() { + return false; + } + + public abstract void processNode(ZLTreeNode node); + + public abstract boolean accept(String state); +} diff --git a/src/org/geometerplus/zlibrary/core/filesystem/ZLFSUtil.java b/src/org/geometerplus/zlibrary/core/filesystem/ZLFSUtil.java index 98efc4a5c..205d9ae11 100644 --- a/src/org/geometerplus/zlibrary/core/filesystem/ZLFSUtil.java +++ b/src/org/geometerplus/zlibrary/core/filesystem/ZLFSUtil.java @@ -17,67 +17,67 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.filesystem; - -import java.io.*; -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.zlibrary.core.library.ZLibrary; - -abstract class ZLFSUtil { - static String normalize(String path) { - if (getRootDirectoryPath().equals(path)) { - return path; - } - try { - path = new File(path).getCanonicalPath(); - } catch (IOException e) { - } - return path; - } - - //public OutputStream createOutputStream(String path); - - static ZLDir getRootDirectory() { - return new ZLFSDir(getRootDirectoryPath()); - } - - static String getRootDirectoryPath() { - return File.listRoots().length == 1 ? File.listRoots()[0].getPath().trim() : ""; - } - - static String getParentPath(String path) { - File file = new File(path); - String parent = file.getParent(); - if (parent == null) { - File [] roots = File.listRoots(); - for (int i = 0; i < roots.length; i++) { - if (roots[i].equals(file)) { - parent = getRootDirectoryPath(); - break; - } - } - } - return parent; - } - - static int findArchiveFileNameDelimiter(String path) { - int index = path.lastIndexOf(':'); - if (path.startsWith(ZLibrary.JAR_DATA_PREFIX)) { - return (index < ZLibrary.JAR_DATA_PREFIX.length()) ? -1 : index; - } - if (System.getProperty("os.name").startsWith("Windows")) { - return (index == 1) ? -1 : index; - } - return index; - } - - static int findLastFileNameDelimiter(String path) { - int index = findArchiveFileNameDelimiter(path); - if (index == -1) { - index = path.lastIndexOf(File.separatorChar); - } - return index; - } -} +package org.geometerplus.zlibrary.core.filesystem; + +import java.io.*; +import java.util.*; +import org.geometerplus.zlibrary.core.util.*; + +import org.geometerplus.zlibrary.core.library.ZLibrary; + +abstract class ZLFSUtil { + static String normalize(String path) { + if (getRootDirectoryPath().equals(path)) { + return path; + } + try { + path = new File(path).getCanonicalPath(); + } catch (IOException e) { + } + return path; + } + + //public OutputStream createOutputStream(String path); + + static ZLDir getRootDirectory() { + return new ZLFSDir(getRootDirectoryPath()); + } + + static String getRootDirectoryPath() { + return File.listRoots().length == 1 ? File.listRoots()[0].getPath().trim() : ""; + } + + static String getParentPath(String path) { + File file = new File(path); + String parent = file.getParent(); + if (parent == null) { + File [] roots = File.listRoots(); + for (int i = 0; i < roots.length; i++) { + if (roots[i].equals(file)) { + parent = getRootDirectoryPath(); + break; + } + } + } + return parent; + } + + static int findArchiveFileNameDelimiter(String path) { + int index = path.lastIndexOf(':'); + if (path.startsWith(ZLibrary.JAR_DATA_PREFIX)) { + return (index < ZLibrary.JAR_DATA_PREFIX.length()) ? -1 : index; + } + if (System.getProperty("os.name").startsWith("Windows")) { + return (index == 1) ? -1 : index; + } + return index; + } + + static int findLastFileNameDelimiter(String path) { + int index = findArchiveFileNameDelimiter(path); + if (index == -1) { + index = path.lastIndexOf(File.separatorChar); + } + return index; + } +} diff --git a/src/org/geometerplus/zlibrary/core/filesystem/ZLFile.java b/src/org/geometerplus/zlibrary/core/filesystem/ZLFile.java index 221c976c2..4366d45ca 100644 --- a/src/org/geometerplus/zlibrary/core/filesystem/ZLFile.java +++ b/src/org/geometerplus/zlibrary/core/filesystem/ZLFile.java @@ -27,14 +27,14 @@ import org.geometerplus.zlibrary.core.util.*; import org.geometerplus.zlibrary.core.library.ZLibrary; public class ZLFile { - public class ArchiveType { - public static final int NONE = 0; - public static final int GZIP = 0x0001; - public static final int BZIP2 = 0x0002; - public static final int COMPRESSED = 0x00ff; - public static final int ZIP = 0x0100; - public static final int TAR = 0x0200; - public static final int ARCHIVE = 0xff00; + public interface ArchiveType { + int NONE = 0; + int GZIP = 0x0001; + int BZIP2 = 0x0002; + int COMPRESSED = 0x00ff; + int ZIP = 0x0100; + int TAR = 0x0200; + int ARCHIVE = 0xff00; }; private final String myPath; @@ -46,12 +46,6 @@ public class ZLFile { private static final HashMap ourForcedFiles = new HashMap(); - /* - public void putForcedFile(String key, int value) { - myForcedFiles.put(key, value); - } -*/ - public boolean removeFile(String path) { File file = new File(path); return file.delete(); @@ -163,7 +157,7 @@ public class ZLFile { } public boolean isCompressed() { - return (0 != (myArchiveType & ArchiveType.COMPRESSED)); + return (0 != (myArchiveType & ArchiveType.COMPRESSED)); } public boolean isDirectory() { diff --git a/src/org/geometerplus/zlibrary/core/filesystem/ZLZipDir.java b/src/org/geometerplus/zlibrary/core/filesystem/ZLZipDir.java index a1310dc35..a7b7fc713 100644 --- a/src/org/geometerplus/zlibrary/core/filesystem/ZLZipDir.java +++ b/src/org/geometerplus/zlibrary/core/filesystem/ZLZipDir.java @@ -17,52 +17,52 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.filesystem; - -import java.io.*; -import java.util.*; -import java.util.zip.*; -import org.geometerplus.zlibrary.core.util.*; - -public class ZLZipDir extends ZLDir { - private File myFile; - - ZLZipDir(String path) { - super(path); - myFile = new File(path); - } - - public String getDelimiter() { - return ":"; - }; - - private static ArrayList EMPTY = new ArrayList(); - public ArrayList collectSubDirs() { - return EMPTY; - }; - - public ArrayList/**/ collectFiles() { - File[] dirs = myFile.listFiles(); - ArrayList/**/ newdirs = new ArrayList(); - - ZipFile zf = null; - try { - zf = new ZipFile(myFile); - } catch (ZipException e) { - // TODO Auto-generated catch block - //e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - //e.printStackTrace(); - } - if ((zf == null) || (zf.entries() == null)) { - return EMPTY; - } - Enumeration/*ZipEntry*/ en = zf.entries(); - while(en.hasMoreElements()) { - ZipEntry entry = (ZipEntry)en.nextElement(); - newdirs.add(entry.getName()); - } - return newdirs; - }; -} +package org.geometerplus.zlibrary.core.filesystem; + +import java.io.*; +import java.util.*; +import java.util.zip.*; +import org.geometerplus.zlibrary.core.util.*; + +public class ZLZipDir extends ZLDir { + private File myFile; + + ZLZipDir(String path) { + super(path); + myFile = new File(path); + } + + public String getDelimiter() { + return ":"; + }; + + private static ArrayList EMPTY = new ArrayList(); + public ArrayList collectSubDirs() { + return EMPTY; + }; + + public ArrayList/**/ collectFiles() { + File[] dirs = myFile.listFiles(); + ArrayList/**/ newdirs = new ArrayList(); + + ZipFile zf = null; + try { + zf = new ZipFile(myFile); + } catch (ZipException e) { + // TODO Auto-generated catch block + //e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + //e.printStackTrace(); + } + if ((zf == null) || (zf.entries() == null)) { + return EMPTY; + } + Enumeration/*ZipEntry*/ en = zf.entries(); + while (en.hasMoreElements()) { + ZipEntry entry = (ZipEntry)en.nextElement(); + newdirs.add(entry.getName()); + } + return newdirs; + } +} diff --git a/src/org/geometerplus/zlibrary/core/html/own/test/Main.java b/src/org/geometerplus/zlibrary/core/html/own/test/Main.java deleted file mode 100644 index 8e4774ad5..000000000 --- a/src/org/geometerplus/zlibrary/core/html/own/test/Main.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2007-2008 Geometer Plus - * - * 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.core.html.own.test; - - -import org.geometerplus.zlibrary.core.application.ZLApplication; -import org.geometerplus.zlibrary.core.html.ZLHtmlReaderAdapter; -import org.geometerplus.zlibrary.core.html.own.ZLOwnHtmlProcessorFactory; - -public class Main { - - private static ZLHtmlReaderAdapter myReader = new MyHtmlReader(); - - /** - * @param args - */ - public static void main(String[] args) { - // TODO Auto-generated method stub - new ZLOwnHtmlProcessorFactory(); - //myReader.read("src/org.geometerplus.zlibrary/core/html/own/test/test.html"); - myReader.read("src/org.geometerplus.zlibrary/core/html/own/test/subversion.htm"); - } -} diff --git a/src/org/geometerplus/zlibrary/core/html/own/test/MyHtmlReader.java b/src/org/geometerplus/zlibrary/core/html/own/test/MyHtmlReader.java deleted file mode 100644 index f2a9ba439..000000000 --- a/src/org/geometerplus/zlibrary/core/html/own/test/MyHtmlReader.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2007-2008 Geometer Plus - * - * 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.core.html.own.test; - -import org.geometerplus.zlibrary.core.html.ZLHtmlReaderAdapter; -import org.geometerplus.zlibrary.core.xml.ZLStringMap; - - -public class MyHtmlReader extends ZLHtmlReaderAdapter { - public void startDocumentHandler() { - System.out.print("START DOCUMENT"); - } - - public void endDocumentHandler() { - System.out.println("END DOCUMENT"); - } - - public void startElementHandler(String tag, ZLStringMap attributes){ - System.out.print("<" + tag); - String key; - for (int i = 0; i < attributes.getSize(); i++) { - key = attributes.getKey(i); - System.out.print(" " + key + "=\""); - System.out.print(attributes.getValue(key) + "\""); - } - System.out.print(">"); - } - - public void endElementHandler(String tag){ - System.out.print(""); - } - - public void characterDataHandler(char[] ch, int start, int length){ - } - - public void characterDataHandlerFinal(char[] ch, int start, int length){ - for (int i = 0; i < length; i++) { - System.out.print(ch[i + start]); - } - } -}; diff --git a/src/org/geometerplus/zlibrary/core/html/own/test/sub2.html b/src/org/geometerplus/zlibrary/core/html/own/test/sub2.html deleted file mode 100644 index 9cba20a22..000000000 --- a/src/org/geometerplus/zlibrary/core/html/own/test/sub2.html +++ /dev/null @@ -1,105 +0,0 @@ -Êàê èñïîëüçîâàòü Subversion. - - - -

×òî òàêîå Subversion.

-

Subversion – ñèñòåìà êîíòðîëÿ âåðñèé ôàéëîâ (â íàøåì ñëó÷àå – èñõîäíîãî -êîäà). Ñîñòîèò èç ñåðâåðà (íàõîäÿùåãîñÿ â íàøåé ñèòóàöèè íà ñàéòå -only.mawhrin.net) è êëèåíòîâ, íàõîäÿùèõñÿ íà êîìïüþòåðàõ êàæäîãî èç -ïîëüçîâàòåëåé.

-

Íà ñåðâåðå õðàíèòñÿ âåñü òåêóùèé èñõîäíûé êîä è âñÿ èñòîðèÿ åãî èçìåíåíèé. Ñ -ñåðâåðà ìîæíî ïîëó÷èòü êàê òîò íàáîð ôàéëîâ, êîòîðûé èñïîëüçóåòñÿ ñåé÷àñ, òàê è -íàáîð ôàéëîâ â ëþáîé óêàçàííûé ìîìåíò âðåìåíè. Êðîìå òîãî, ìîæíî ïîñìîòðåòü, -êòî, êîãäà è êàêèå èçìåíåíèÿ âíîñèë, à åñëè ïîëüçîâàòåëè íå ëåíÿòñÿ ïèñàòü -êîììåíòàðèè – òî è ïîÿñíåíèÿ ê ýòèì èçìåíåíèÿì.

-

Ó ïîëüçîâàòåëÿ êëèåíòà äîëæåí áûòü, ðàçóìååòñÿ, äîñòóï â Èíòåðíåò. -Ïîëüçîâàòåëü ìîæåò âçÿòü òåêóùóþ (èëè, âîîáùå ãîâîðÿ, ëþáóþ äðóãóþ) âåðñèþ -ôàéëîâ. Ïîëüçîâàòåëü ìîæåò ïîëîæèòü íà ñåðâåð íîâûå âåðñèè íåêîòîðûõ ôàéëîâ (â -òîì ÷èñëå, îí ìîæåò äîáàâèòü èëè óäàëèòü êàêèå-íèáóäü ôàéëû è/èëè êàòàëîãè).

-

Ýòà ñòðàíèöà ñîäåðæèò ìèíèìóì èíôîðìàöèè, íàñòîÿòåëüíî ðåêîìåíäóþ ïî÷èòàòü, -íàïðèìåð, âîò ýòó -êíèæêó.

-

Ñîâåòû ïî "ñòèëþ èñïîëüçîâàíèÿ" Subversion.

-
    -
  • Íå áîéòåñü âûêëàäûâàòü ñâîè èçìåíåíèÿ â ðåïîçèòîðèé. Èõ âñåãäà ìîæíî - “îòêàòèòü”. -
  • Íîðìàëüíûé ðåæèì ðàáîòû – ñîõðàíÿòü ñâîè èçìåíåíèÿ êàæäûé ðàç, êîãäà - çàâåðøåí õîòÿ áû ìàëåíüêèé êóñîê êîäà. (Ýòî îçíà÷àåò, ÷òî òèïè÷íî èçìåíåíèÿ - âûêëàäûâàþòñÿ íå ðàç â äåíü è òåì áîëåå íåäåëþ, à ïðèìåðíî ðàç â ÷àñ.) -
  • Íà÷èíàéòå ðàáîòó ñ ïîëó÷åíèÿ òåêóùåé âåðñèè êîäà èç ðåïîçèòîðèÿ. Èíà÷å âû - ìîæåòå ïîòåðÿòü âðåìÿ, åñëè íà÷íåòå ìåíÿòü ôàéëû, êîòîðûå êòî-òî óæå ïîìåíÿë. - (Âàì ïðèäåòñÿ ëèáî îáúåäèíÿòü èçìåíåíèÿ, ëèáî, ÷òî åùå îáèäíåå, âûêèäûâàòü - ñâîè èçìåíåíèÿ, åñëè ðàáîòà óæå ñäåëàíà äî âàñ.) -
  • Åäèíñòâåííîå îãðàíè÷åíèå íà âûêëàäûâàíèå êîäà – íå âûêëàäûâàéòå - íåêîìïèëèðóþùèéñÿ êîä, èíà÷å âû çäîðîâî çàòðóäíèòå ðàáîòó òåì, êòî ñëåäóåò - ïðåäûäóùåìó ñîâåòó. Íå ïîëåíèòåñü ñêîìïèëèðîâàòü êîä ïåðåä âûêëàäûâàíèåì. - Ïðîâåðüòå, ÷òî âû äåéñòâèòåëüíî ïîëîæèëè â ðåïîçèòîðèé âñå äîáàâëåííûå ôàéëû. - (Ýòî ñàìàÿ ïîïóëÿðíàÿ ïðîáëåìà, ïðèâîäÿùàÿ ê íåêîìïèëèðóþùåìóñÿ êîäó â - ðåïîçèòîðèè.) -
  • Ïåðåä âûêëàäûâàíèåì êîäà, âîçüìèòå òåêóùóþ âåðñèþ èç ðåïîçèòîðèÿ. Ýòî - ïîçâîëèò âàì èçáåæàòü ñèòóàöèè, êîãäà íåêîìïèëèðóþùèéñÿ êîä âîçíèêàåò èç-çà - äâóõ èçìåíåíèé, ñäåëàííûõ ðàçíûìè ëþäüìè â ðàçíûõ ôàéëàõ. Åñëè âûÿñíèëîñü, ÷òî - äåéñòâèòåëüíî êòî-òî ÷òî-òî ïîìåíÿë çà âðåìÿ âàøåé ðàáîòû – ïðîâåðüòå - êîìïèëèðóåìîñòü åùå ðàç. -
  • Âñåãäà ïèøèòå êîììåíòàðèé ê òîìó, ÷òî âû âûêëàäûâàåòå: âñåãî 3 ñëîâà - “óäàëåíû íåèñïîëüçóåìûå ïîëÿ” ñýêîíîìÿò êó÷ó âðåìåíè òîìó, êîìó ïðèäåòñÿ - ïîíèìàòü âàøè èçìåíåíèÿ (è íå â ïîñëåäíþþ î÷åðåäü – àâòîðó èçìåíåíèé). -
  • Íå îáõîäèòåñü òîëüêî ýòèì äîêóìåíòîì – îí î÷åíü êîðîòêèé è îïèñûâàåò - òîëüêî ñàìûå ïðîñòûå ñëó÷àè. Íàïðèìåð, â íåì íè÷åãî íå ñêàçàíî î òîì, êàê - îáúåäèíÿòü èçìåíåíèÿ, ñäåëàííûå ðàçíûìè ëþäüìè â îäíîì ôàéëå.
  • -

    Êàê èñïîëüçîâàòü Subversion èç Eclipse.

    -

    Êàê íà÷àòü ðàáîòàòü.

    -
      -
    • Íóæíî óñòàíîâèòü plugin äëÿ ðàáîòû ñ subversion èç Eclipse.  òîé âåðñèè - Eclipse, êîòîðàÿ óñòàíîâèëàñü íà ìîåì êîìïüþòåðå (ñêà÷àíà ñ http://www.eclipse.org/, âåðñèÿ 3.2.1), ïî - óìîë÷àíèþ òàêîãî plugin'a íå áûëî. ß óñòàíîâèë Subclipse, íà ñàéòå åñòü î÷åíü áëèçêàÿ - ê ïðàâäå èíñòðóêöèÿ ïî - óñòàíîâêå. -
    • Ñîçäàíèå ïðîåêòà. -
        -
      • Èäó â ìåíþ: Project.... Èç ïðåäëîæåííîãî - ñïèñêà âûáèðàþ Checkout Projects from SVN. Íàæèìàþ íà - êíîïî÷êó Next. (Äàëüøå ïðî íàæàòèÿ íà ýòó êíîïêó ïèñàòü íå áóäó.) -
      • Âûáèðàþ Create a new repository location. -
      • Âïèñûâàþ URL: https://only.mawhrin.net/repos/FBReaderJ/trunk. -
      • Ââîæó ñâîè èìÿ è ïàðîëü. -
      • Ïîìå÷àþ êîðíåâîé êàòàëîã "to be checked out from SVN". -
      •  êà÷åñòâå Project Name âïèñûâàþ FBReaderJ. Òåïåðü - êíîïêà Finish.
      • -
      • Òåïåðü ÿ ìîãó îòêðûâàòü ïðîåêò FBReaderJ (ôàéë .project èç - ñîîòâåòñòâóþùåãî êàòàëîãà) – è ðàáîòàòü.
      • -

        Êàê ïîëîæèòü ñâîè èçìåíåíèÿ â ðåïîçèòîðèé.

        -
          -
        • Â Java Perspective âûçûâàþ êîíòåêñòíîå ìåíþ äëÿ ôàéëà (èëè êàòàëîãà), - êîòîðûé ÿ õî÷ó ïîëîæèòü â ðåïîçèòîðèé. Âûáèðàþ ïóíêò - Commit.... -
        • Âïèñûâàþ êîììåíòàðèé, ñòàâëþ ãàëî÷êè íàïðîòèâ òîãî, ÷òî ðåàëüíî õî÷ó - çàêîììèòèòü. Íàæèìàþ OK.
        • -

          Êàê âçÿòü èç ðåïîçèòîðèÿ òåêóùóþ âåðñèþ êîäà.

          -
            -
          •  Java Perspective âûçûâàþ êîíòåêñòíîå ìåíþ äëÿ ôàéëà (èëè êàòàëîãà), - êîòîðûé ÿ õî÷ó ïîëó÷èòü (îáû÷íî ýòî êàòàëîã src). Âûáèðàþ ïóíêò - Synchronize with Repository.
          -

          Êàê èñïîëüçîâàòü Subversion èç êîìàíäíîé ñòðîêè (Linux).

          -

          Êàê íà÷àòü ðàáîòàòü.

          -
            -
          • Íóæíî óñòàíîâèòü subversion. Â debian'å ïàêåò òàê è íàçûâàåòñÿ - subversion. Âîçìîæåí åùå âàðèàíò svn. -
          • Ñîçäàþ êàòàëîã, â êîòîðîì áóäóò ëåæàòü ôàéëû ïðîåêòà. Çàõîæó â íåãî, ïèøó - êîìàíäó
             https://only.mawhrin.net/repos/FBReaderJ/trunk .
            (åñëè - èìÿ ïîëüçîâàòåëÿ linux ñîâïàäàåò ñ èìåíåì â ðåïîçèòîðèè, ñîîòâåòñòâóþùèé - ïàðàìåòð ìîæíî îïóñòèòü).
          • -

            Êàê ïîëîæèòü ñâîè èçìåíåíèÿ â ðåïîçèòîðèé.

            -
              -
            • Åñëè ÿ òîëüêî ïîìåíÿë íåêîòîðûå ôàéëû, íè÷åãî íå äîáàâëÿÿ è íå óäàëÿÿ, - ïðîñòî ïèøó êîìàíäó svn commit. -
            • Åñëè ÿ õî÷ó äîáàâèòü êàêèå-òî ôàéëû/êàòàëîãè – ïèøó ñïåðâà . Ýòî äåéñòâèå ïðîèñõîäèò ëîêàëüíî, áåç ñâÿçè ñ ñåðâåðîì. - Íà ñåðâåð èçìåíåíèÿ îòïðàâëÿþòñÿ òîé æå êîììàíäîé svn commit. -
            • Äëÿ óäàëåíèÿ åñòü êîìàíäà . Îíà òîæå - ðàáîòàåò ëîêàëüíî. -
            • ×òîáû ïîñìîòðåòü, êàêèå ôàéëû ëîêàëüíî èçìåíåíû/äîáàâëåíû/ïîÿâèëèñü, íî - åùå íå äîáàâëåíû, ñóùåñòâóåò êîìàíäà svn status.
            • -

              Êàê âçÿòü èç ðåïîçèòîðèÿ òåêóùóþ âåðñèþ êîäà.

              -
                -
              •  êàòàëîãå, ñîäåðæèìîå êîòîðîãî ÿ õî÷ó ïîëó÷èòü (îáû÷íî – â src), - ïèøó êîìàíäó svn update.
              END DOCUMENT diff --git a/src/org/geometerplus/zlibrary/core/html/own/test/subversion.htm b/src/org/geometerplus/zlibrary/core/html/own/test/subversion.htm deleted file mode 100644 index 4ce9b45c7..000000000 --- a/src/org/geometerplus/zlibrary/core/html/own/test/subversion.htm +++ /dev/null @@ -1,114 +0,0 @@ - - -Как иÑпользовать Subversion. - - - -

              Что такое Subversion.

              -

              Subversion – ÑиÑтема ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий файлов (в нашем Ñлучае – иÑходного -кода). СоÑтоит из Ñервера (находÑщегоÑÑ Ð² нашей Ñитуации на Ñайте -only.mawhrin.net) и клиентов, находÑщихÑÑ Ð½Ð° компьютерах каждого из -пользователей.

              -

              Ðа Ñервере хранитÑÑ Ð²ÐµÑÑŒ текущий иÑходный код и вÑÑ Ð¸ÑÑ‚Ð¾Ñ€Ð¸Ñ ÐµÐ³Ð¾ изменений. С -Ñервера можно получить как тот набор файлов, который иÑпользуетÑÑ ÑейчаÑ, так и -набор файлов в любой указанный момент времени. Кроме того, можно поÑмотреть, -кто, когда и какие Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð½Ð¾Ñил, а еÑли пользователи не ленÑÑ‚ÑÑ Ð¿Ð¸Ñать -комментарии – то и поÑÑÐ½ÐµÐ½Ð¸Ñ Ðº Ñтим изменениÑм.

              -

              У Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð° должен быть, разумеетÑÑ, доÑтуп в Интернет. -Пользователь может взÑть текущую (или, вообще говорÑ, любую другую) верÑию -файлов. Пользователь может положить на Ñервер новые верÑии некоторых файлов (в -том чиÑле, он может добавить или удалить какие-нибудь файлы и/или каталоги).

              -

              Эта Ñтраница Ñодержит минимум информации, наÑтоÑтельно рекомендую почитать, -например, вот Ñту -книжку.

              -

              Советы по "Ñтилю иÑпользованиÑ" Subversion.

              -
                -
              • Ðе бойтеÑÑŒ выкладывать Ñвои Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² репозиторий. Их вÑегда можно - “откатитьâ€. -
              • Ðормальный режим работы – ÑохранÑть Ñвои Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¹ раз, когда - завершен Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ маленький куÑок кода. (Это означает, что типично Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ - выкладываютÑÑ Ð½Ðµ раз в день и тем более неделю, а примерно раз в чаÑ.) -
              • Ðачинайте работу Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ верÑии кода из репозиториÑ. Иначе вы - можете потерÑть времÑ, еÑли начнете менÑть файлы, которые кто-то уже поменÑл. - (Вам придетÑÑ Ð»Ð¸Ð±Ð¾ объединÑть изменениÑ, либо, что еще обиднее, выкидывать - Ñвои изменениÑ, еÑли работа уже Ñделана до ваÑ.) -
              • ЕдинÑтвенное ограничение на выкладывание кода – не выкладывайте - некомпилирующийÑÑ ÐºÐ¾Ð´, иначе вы здорово затрудните работу тем, кто Ñледует - предыдущему Ñовету. Ðе поленитеÑÑŒ Ñкомпилировать код перед выкладыванием. - Проверьте, что вы дейÑтвительно положили в репозиторий вÑе добавленные файлы. - (Это ÑÐ°Ð¼Ð°Ñ Ð¿Ð¾Ð¿ÑƒÐ»ÑÑ€Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°, приводÑÑ‰Ð°Ñ Ðº некомпилирующемуÑÑ ÐºÐ¾Ð´Ñƒ в - репозитории.) -
              • Перед выкладыванием кода, возьмите текущую верÑию из репозиториÑ. Это - позволит вам избежать Ñитуации, когда некомпилирующийÑÑ ÐºÐ¾Ð´ возникает из-за - двух изменений, Ñделанных разными людьми в разных файлах. ЕÑли выÑÑнилоÑÑŒ, что - дейÑтвительно кто-то что-то поменÑл за Ð²Ñ€ÐµÐ¼Ñ Ð²Ð°ÑˆÐµÐ¹ работы – проверьте - компилируемоÑть еще раз. -
              • Ð’Ñегда пишите комментарий к тому, что вы выкладываете: вÑего 3 Ñлова - “удалены неиÑпользуемые полцÑÑкономÑÑ‚ кучу времени тому, кому придетÑÑ - понимать ваши Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ (и не в поÑледнюю очередь – автору изменений). -
              • Ðе обходитеÑÑŒ только Ñтим документом – он очень короткий и опиÑывает - только Ñамые проÑтые Ñлучаи. Ðапример, в нем ничего не Ñказано о том, как - объединÑть изменениÑ, Ñделанные разными людьми в одном файле.
              -

              Как иÑпользовать Subversion из Eclipse.

              -

              Как начать работать.

              -
                -
              • Ðужно уÑтановить plugin Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ subversion из Eclipse. Ð’ той верÑии - Eclipse, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑƒÑтановилаÑÑŒ на моем компьютере (Ñкачана Ñ http://www.eclipse.org/, верÑÐ¸Ñ 3.2.1), по - умолчанию такого plugin'a не было. Я уÑтановил Subclipse, на Ñайте еÑть очень Ð±Ð»Ð¸Ð·ÐºÐ°Ñ - к правде инÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ Ð¿Ð¾ - уÑтановке. -
              • Создание проекта. -
                  -
                • Иду в меню: File->New->Project.... Из предложенного - ÑпиÑка выбираю SVN->Checkout Projects from SVN. Ðажимаю на - кнопочку Next. (Дальше про Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð½Ð° Ñту кнопку пиÑать не буду.) -
                • Выбираю Create a new repository location. -
                • ВпиÑываю URL: https://only.mawhrin.net/repos/FBReaderJ/trunk. -
                • Ввожу Ñвои Ð¸Ð¼Ñ Ð¸ пароль. -
                • Помечаю корневой каталог "to be checked out from SVN". -
                • Ð’ качеÑтве Project Name впиÑываю FBReaderJ. Теперь - кнопка Finish.
                -
              • Теперь Ñ Ð¼Ð¾Ð³Ñƒ открывать проект FBReaderJ (файл .project из - ÑоответÑтвующего каталога) – и работать.
              -

              Как положить Ñвои Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² репозиторий.

              -
                -
              • Ð’ Java Perspective вызываю контекÑтное меню Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° (или каталога), - который Ñ Ñ…Ð¾Ñ‡Ñƒ положить в репозиторий. Выбираю пункт - Team->Commit.... -
              • ВпиÑываю комментарий, Ñтавлю галочки напротив того, что реально хочу - закоммитить. Ðажимаю OK.
              -

              Как взÑть из Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÑƒÑŽ верÑию кода.

              -
                -
              • Ð’ Java Perspective вызываю контекÑтное меню Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° (или каталога), - который Ñ Ñ…Ð¾Ñ‡Ñƒ получить (обычно Ñто каталог src). Выбираю пункт - Team->Synchronize with Repository.
              -

              Как иÑпользовать Subversion из командной Ñтроки (Linux).

              -

              Как начать работать.

              -
                -
              • Ðужно уÑтановить subversion. Ð’ debian'е пакет так и называетÑÑ - subversion. Возможен еще вариант svn. -
              • Создаю каталог, в котором будут лежать файлы проекта. Захожу в него, пишу - команду
                svn checkout --username=<my_svn_account> https://only.mawhrin.net/repos/FBReaderJ/trunk .
                (еÑли - Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ linux Ñовпадает Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ в репозитории, ÑоответÑтвующий - параметр можно опуÑтить).
              -

              Как положить Ñвои Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² репозиторий.

              -
                -
              • ЕÑли Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ поменÑл некоторые файлы, ничего не добавлÑÑ Ð¸ не удалÑÑ, - проÑто пишу команду svn commit. -
              • ЕÑли Ñ Ñ…Ð¾Ñ‡Ñƒ добавить какие-то файлы/каталоги – пишу Ñперва svn add - <filename>. Это дейÑтвие проиÑходит локально, без ÑвÑзи Ñ Ñервером. - Ðа Ñервер Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð»ÑÑŽÑ‚ÑÑ Ñ‚Ð¾Ð¹ же коммандой svn commit. -
              • Ð”Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÐµÑть команда svn remove <filename>. Она тоже - работает локально. -
              • Чтобы поÑмотреть, какие файлы локально изменены/добавлены/поÑвилиÑÑŒ, но - еще не добавлены, ÑущеÑтвует команда svn status.
              -

              Как взÑть из Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÑƒÑŽ верÑию кода.

              -
                -
              • Ð’ каталоге, Ñодержимое которого Ñ Ñ…Ð¾Ñ‡Ñƒ получить (обычно – в src), - пишу команду svn update.
              diff --git a/src/org/geometerplus/zlibrary/core/html/own/test/test.html b/src/org/geometerplus/zlibrary/core/html/own/test/test.html deleted file mode 100644 index d7e7448f8..000000000 --- a/src/org/geometerplus/zlibrary/core/html/own/test/test.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - -When the world wants to talk, it speaks Unicode - - - - -

              When the world wants to talk, it speaks Unicode

              -

              ЕÑли мир хочет общатьÑÑ, он общаетÑÑ Ð½Ð° Unicode

              -

              Cuando el mundo quiere conversar, habla Unicode

              - - \ No newline at end of file diff --git a/src/org/geometerplus/zlibrary/core/image/ZLImage.java b/src/org/geometerplus/zlibrary/core/image/ZLImage.java index 0f4d01771..5fbde6cc6 100644 --- a/src/org/geometerplus/zlibrary/core/image/ZLImage.java +++ b/src/org/geometerplus/zlibrary/core/image/ZLImage.java @@ -17,8 +17,8 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.image; -//TODO -public interface ZLImage { - byte [] byteData(); -} +package org.geometerplus.zlibrary.core.image; + +public interface ZLImage { + byte [] byteData(); +} diff --git a/src/org/geometerplus/zlibrary/core/language/ZLLanguageList.java b/src/org/geometerplus/zlibrary/core/language/ZLLanguageList.java index 32c1fca78..499556dd4 100644 --- a/src/org/geometerplus/zlibrary/core/language/ZLLanguageList.java +++ b/src/org/geometerplus/zlibrary/core/language/ZLLanguageList.java @@ -17,54 +17,54 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.language; - -import java.io.File; -import java.util.ArrayList; -import java.util.TreeSet; - -import org.geometerplus.zlibrary.core.filesystem.ZLDir; -import org.geometerplus.zlibrary.core.filesystem.ZLFile; -import org.geometerplus.zlibrary.core.library.ZLibrary; -import org.geometerplus.zlibrary.core.resources.ZLResource; - -public class ZLLanguageList { - private static ArrayList ourLanguageCodes = new ArrayList(); - - public static ArrayList languageCodes() { - if (ourLanguageCodes.isEmpty()) { - TreeSet codes = new TreeSet(); - codes.add("zh"); - ZLDir dir = patternsDirectory(); - if (dir != null) { - final ArrayList fileNames = dir.collectFiles(); - final int len = fileNames.size(); - for (int i = 0; i < len; ++i) { - String name = (String)fileNames.get(i); - final int index = name.indexOf("_"); - if (index != -1) { - String str = name.substring(0, index); - if (!codes.contains(str)) { - codes.add(str); - } - } - } - } - - ourLanguageCodes.addAll(codes); - } - - return ourLanguageCodes; - } - - public static String languageName(String code) { - return ZLResource.resource("language").getResource(code).getValue(); - } - - public static ZLDir patternsDirectory() { - String dirName = ZLibrary.JAR_DATA_PREFIX + "data/languagePatterns.tar"; - return new ZLFile(dirName).getDirectory(); - } - - private ZLLanguageList() {} -} +package org.geometerplus.zlibrary.core.language; + +import java.io.File; +import java.util.*; + +import org.geometerplus.zlibrary.core.filesystem.ZLDir; +import org.geometerplus.zlibrary.core.filesystem.ZLFile; +import org.geometerplus.zlibrary.core.library.ZLibrary; +import org.geometerplus.zlibrary.core.resources.ZLResource; + +public abstract class ZLLanguageList { + private static ArrayList ourLanguageCodes = new ArrayList(); + + private ZLLanguageList() { + } + + public static ArrayList languageCodes() { + if (ourLanguageCodes.isEmpty()) { + TreeSet codes = new TreeSet(); + codes.add("zh"); + ZLDir dir = patternsDirectory(); + if (dir != null) { + final ArrayList fileNames = dir.collectFiles(); + final int len = fileNames.size(); + for (int i = 0; i < len; ++i) { + String name = (String)fileNames.get(i); + final int index = name.indexOf("_"); + if (index != -1) { + String str = name.substring(0, index); + if (!codes.contains(str)) { + codes.add(str); + } + } + } + } + + ourLanguageCodes.addAll(codes); + } + + return ourLanguageCodes; + } + + public static String languageName(String code) { + return ZLResource.resource("language").getResource(code).getValue(); + } + + public static ZLDir patternsDirectory() { + String dirName = ZLibrary.JAR_DATA_PREFIX + "data/languagePatterns.tar"; + return new ZLFile(dirName).getDirectory(); + } +} diff --git a/src/org/geometerplus/zlibrary/core/optionEntries/ZLColorOptionBuilder.java b/src/org/geometerplus/zlibrary/core/optionEntries/ZLColorOptionBuilder.java index a11562b06..c41689322 100644 --- a/src/org/geometerplus/zlibrary/core/optionEntries/ZLColorOptionBuilder.java +++ b/src/org/geometerplus/zlibrary/core/optionEntries/ZLColorOptionBuilder.java @@ -17,114 +17,111 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.optionEntries; - -import java.util.ArrayList; -import java.util.HashMap; - -import org.geometerplus.zlibrary.core.options.ZLColorOption; -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.zlibrary.core.dialogs.ZLColorOptionEntry; -import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry; -import org.geometerplus.zlibrary.core.dialogs.ZLOptionEntry; - -public class ZLColorOptionBuilder { - private ZLColorOptionsData myData; - - public ZLColorOptionBuilder() { - myData = new ZLColorOptionsData(); - myData.myComboEntry = new ZLColorComboOptionEntry(myData); - myData.myColorEntry = new ZLMultiColorOptionEntry(myData); - } - - public void addOption(final String name, ZLColorOption option) { - myData.myOptionNames.add(name); - myData.myCurrentColors.put(name, option.getValue()); - myData.myOptions.put(name, option); - } - - public void setInitial(final String name) { - myData.myCurrentOptionName = name; - myData.myPreviousOptionName = name; - } - - public ZLOptionEntry comboEntry() { - return myData.myComboEntry; - } - - public ZLOptionEntry colorEntry() { - return myData.myColorEntry; - } - - private static class ZLMultiColorOptionEntry extends ZLColorOptionEntry { - private ZLColorOptionsData myData; - - public ZLMultiColorOptionEntry(ZLColorOptionsData data) { - myData = data; - } - - public ZLColor getColor() { - Object color = myData.myCurrentColors.get(myData.myCurrentOptionName); - return (color != null) ? (ZLColor)color : initialColor(); - } - - public ZLColor initialColor() { - return ((ZLColorOption)myData.myOptions.get(myData.myCurrentOptionName)).getValue(); - } - - public void onAccept(ZLColor color) { - onReset(color); - final ArrayList optionNames = myData.myOptionNames; - final HashMap options = myData.myOptions; - final HashMap colors = myData.myCurrentColors; - final int len = optionNames.size(); - for (int i = 0; i < len; i++) { - Object name = optionNames.get(i); - ((ZLColorOption)options.get(name)).setValue((ZLColor)colors.get(name)); - } - } - - public void onReset(ZLColor color) { - myData.myCurrentColors.put(myData.myPreviousOptionName, color); - } - } - - private static class ZLColorComboOptionEntry extends ZLComboOptionEntry { - private ZLColorOptionsData myData; - - public ZLColorComboOptionEntry(ZLColorOptionsData data) { - myData = data; - } - - public ArrayList getValues() { - return myData.myOptionNames; - } - - public String initialValue() { - return myData.myCurrentOptionName; - } - - public void onAccept(String value) {} - - public void onReset() { - myData.myCurrentColors.clear(); - } - - public void onValueSelected(int index) { - myData.myCurrentOptionName = (String)getValues().get(index); - myData.myColorEntry.resetView(); - myData.myPreviousOptionName = myData.myCurrentOptionName; - } - } - - private static class ZLColorOptionsData { - private ZLComboOptionEntry myComboEntry; - private ZLColorOptionEntry myColorEntry; - private String myCurrentOptionName; - private String myPreviousOptionName; - private final ArrayList/**/ myOptionNames = new ArrayList(); - private final HashMap/**/ myCurrentColors = new HashMap(); - private final HashMap/**/ myOptions = new HashMap(); - } -} +package org.geometerplus.zlibrary.core.optionEntries; + +import java.util.*; + +import org.geometerplus.zlibrary.core.options.ZLColorOption; +import org.geometerplus.zlibrary.core.util.*; + +import org.geometerplus.zlibrary.core.dialogs.*; + +public class ZLColorOptionBuilder { + private ZLColorOptionsData myData; + + public ZLColorOptionBuilder() { + myData = new ZLColorOptionsData(); + myData.myComboEntry = new ZLColorComboOptionEntry(myData); + myData.myColorEntry = new ZLMultiColorOptionEntry(myData); + } + + public void addOption(final String name, ZLColorOption option) { + myData.myOptionNames.add(name); + myData.myCurrentColors.put(name, option.getValue()); + myData.myOptions.put(name, option); + } + + public void setInitial(final String name) { + myData.myCurrentOptionName = name; + myData.myPreviousOptionName = name; + } + + public ZLOptionEntry comboEntry() { + return myData.myComboEntry; + } + + public ZLOptionEntry colorEntry() { + return myData.myColorEntry; + } + + private static class ZLMultiColorOptionEntry extends ZLColorOptionEntry { + private ZLColorOptionsData myData; + + public ZLMultiColorOptionEntry(ZLColorOptionsData data) { + myData = data; + } + + public ZLColor getColor() { + Object color = myData.myCurrentColors.get(myData.myCurrentOptionName); + return (color != null) ? (ZLColor)color : initialColor(); + } + + public ZLColor initialColor() { + return ((ZLColorOption)myData.myOptions.get(myData.myCurrentOptionName)).getValue(); + } + + public void onAccept(ZLColor color) { + onReset(color); + final ArrayList optionNames = myData.myOptionNames; + final HashMap options = myData.myOptions; + final HashMap colors = myData.myCurrentColors; + final int len = optionNames.size(); + for (int i = 0; i < len; i++) { + Object name = optionNames.get(i); + ((ZLColorOption)options.get(name)).setValue((ZLColor)colors.get(name)); + } + } + + public void onReset(ZLColor color) { + myData.myCurrentColors.put(myData.myPreviousOptionName, color); + } + } + + private static class ZLColorComboOptionEntry extends ZLComboOptionEntry { + private ZLColorOptionsData myData; + + public ZLColorComboOptionEntry(ZLColorOptionsData data) { + myData = data; + } + + public ArrayList getValues() { + return myData.myOptionNames; + } + + public String initialValue() { + return myData.myCurrentOptionName; + } + + public void onAccept(String value) {} + + public void onReset() { + myData.myCurrentColors.clear(); + } + + public void onValueSelected(int index) { + myData.myCurrentOptionName = (String)getValues().get(index); + myData.myColorEntry.resetView(); + myData.myPreviousOptionName = myData.myCurrentOptionName; + } + } + + private static class ZLColorOptionsData { + private ZLComboOptionEntry myComboEntry; + private ZLColorOptionEntry myColorEntry; + private String myCurrentOptionName; + private String myPreviousOptionName; + private final ArrayList/**/ myOptionNames = new ArrayList(); + private final HashMap/**/ myCurrentColors = new HashMap(); + private final HashMap/**/ myOptions = new HashMap(); + } +} diff --git a/src/org/geometerplus/zlibrary/core/optionEntries/ZLFontFamilyOptionEntry.java b/src/org/geometerplus/zlibrary/core/optionEntries/ZLFontFamilyOptionEntry.java index ab580a2b6..1bb915902 100644 --- a/src/org/geometerplus/zlibrary/core/optionEntries/ZLFontFamilyOptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/optionEntries/ZLFontFamilyOptionEntry.java @@ -17,37 +17,36 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.optionEntries; - -import java.util.ArrayList; - -import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry; -import org.geometerplus.zlibrary.core.options.ZLStringOption; -import org.geometerplus.zlibrary.core.view.ZLPaintContext; - -public class ZLFontFamilyOptionEntry extends ZLComboOptionEntry { - private ZLStringOption myOption; - private final ZLPaintContext myContext; - - public ZLFontFamilyOptionEntry(ZLStringOption option, final ZLPaintContext context) { - myOption = option; - myContext = context; - String value = option.getValue(); - if (value != null && !value.equals("")) { - option.setValue(myContext.realFontFamilyName(value)); - } - } - - public ArrayList getValues() { - return (ArrayList) myContext.fontFamilies(); - } - - public String initialValue() { - return myOption.getValue(); - } - - public void onAccept(String value) { - myOption.setValue(value); - } - -} +package org.geometerplus.zlibrary.core.optionEntries; + +import java.util.*; + +import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry; +import org.geometerplus.zlibrary.core.options.ZLStringOption; +import org.geometerplus.zlibrary.core.view.ZLPaintContext; + +public class ZLFontFamilyOptionEntry extends ZLComboOptionEntry { + private final ZLStringOption myOption; + private final ZLPaintContext myContext; + + public ZLFontFamilyOptionEntry(ZLStringOption option, ZLPaintContext context) { + myOption = option; + myContext = context; + String value = option.getValue(); + if (value != null && (value.length() > 0)) { + option.setValue(myContext.realFontFamilyName(value)); + } + } + + public ArrayList getValues() { + return myContext.fontFamilies(); + } + + public String initialValue() { + return myOption.getValue(); + } + + public void onAccept(String value) { + myOption.setValue(value); + } +} diff --git a/src/org/geometerplus/zlibrary/core/optionEntries/ZLLanguageOptionEntry.java b/src/org/geometerplus/zlibrary/core/optionEntries/ZLLanguageOptionEntry.java index 9adcc0b91..dbea8002d 100644 --- a/src/org/geometerplus/zlibrary/core/optionEntries/ZLLanguageOptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/optionEntries/ZLLanguageOptionEntry.java @@ -17,55 +17,53 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.optionEntries; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; - -import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry; -import org.geometerplus.zlibrary.core.language.ZLLanguageList; -import org.geometerplus.zlibrary.core.options.ZLIntegerOption; -import org.geometerplus.zlibrary.core.options.ZLStringOption; - -public class ZLLanguageOptionEntry extends ZLComboOptionEntry { - public ZLLanguageOptionEntry(ZLStringOption languageOption, ArrayList/**/ languageCodes) { - myLanguageOption = languageOption; - String initialCode = myLanguageOption.getValue(); - for (Iterator it = languageCodes.iterator(); it.hasNext(); ) { - String itstr = (String)it.next(); - String name = ZLLanguageList.languageName(itstr); - myValuesToCodes.put(name, itstr); - if (initialCode.equals(itstr)) { - myInitialValue = name; - } - } - for (Iterator it = myValuesToCodes.keySet().iterator(); it.hasNext(); ) { - myValues.add(it.next()); - } - String otherCode = "other"; - String otherName = ZLLanguageList.languageName(otherCode); - myValues.add(otherName); - myValuesToCodes.put(otherName,otherCode); - if ((myInitialValue == null) || (myInitialValue.length() == 0)) { - myInitialValue = otherName; - } - } - - public String initialValue() { - return myInitialValue; - } - - public ArrayList/**/ getValues() { - return myValues; - } - - public void onAccept(String value) { - myLanguageOption.setValue((String)myValuesToCodes.get(value)); - } - - private final ArrayList/**/ myValues = new ArrayList(); - private final HashMap/**/ myValuesToCodes = new HashMap(); - private String myInitialValue; - private ZLStringOption myLanguageOption; -} +package org.geometerplus.zlibrary.core.optionEntries; + +import java.util.*; + +import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry; +import org.geometerplus.zlibrary.core.language.ZLLanguageList; +import org.geometerplus.zlibrary.core.options.*; + +public class ZLLanguageOptionEntry extends ZLComboOptionEntry { + private final ArrayList myValues = new ArrayList(); + private final TreeMap myValuesToCodes = new TreeMap(); + private String myInitialValue; + private ZLStringOption myLanguageOption; + + public ZLLanguageOptionEntry(ZLStringOption languageOption, ArrayList languageCodes) { + myLanguageOption = languageOption; + final String initialCode = myLanguageOption.getValue(); + final int len = languageCodes.size(); + for (int i = 0; i < len; ++i) { + final String code = (String)languageCodes.get(i); + final String name = ZLLanguageList.languageName(code); + myValuesToCodes.put(name, code); + if (initialCode.equals(code)) { + myInitialValue = name; + } + } + for (Iterator it = myValuesToCodes.keySet().iterator(); it.hasNext(); ) { + myValues.add(it.next()); + } + final String otherCode = "other"; + final String otherName = ZLLanguageList.languageName(otherCode); + myValues.add(otherName); + myValuesToCodes.put(otherName,otherCode); + if ((myInitialValue == null) || (myInitialValue.length() == 0)) { + myInitialValue = otherName; + } + } + + public String initialValue() { + return myInitialValue; + } + + public ArrayList getValues() { + return myValues; + } + + public void onAccept(String value) { + myLanguageOption.setValue((String)myValuesToCodes.get(value)); + } +} diff --git a/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleBoolean3OptionEntry.java b/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleBoolean3OptionEntry.java index 0fffa1604..3eaccf89c 100644 --- a/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleBoolean3OptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleBoolean3OptionEntry.java @@ -17,26 +17,23 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.optionEntries; - -import org.geometerplus.zlibrary.core.dialogs.ZLBoolean3OptionEntry; -import org.geometerplus.zlibrary.core.options.ZLBoolean3Option; -import org.geometerplus.zlibrary.core.options.ZLBooleanOption; -import org.geometerplus.zlibrary.core.util.ZLBoolean3; - -public class ZLSimpleBoolean3OptionEntry extends ZLBoolean3OptionEntry { - private ZLBoolean3Option myOption; - - public ZLSimpleBoolean3OptionEntry(ZLBoolean3Option option) { - myOption = option; - } - - public int initialState() { - return myOption.getValue(); - } - - public void onAccept(int state) { - myOption.setValue(state); - } - -} +package org.geometerplus.zlibrary.core.optionEntries; + +import org.geometerplus.zlibrary.core.dialogs.ZLBoolean3OptionEntry; +import org.geometerplus.zlibrary.core.options.ZLBoolean3Option; + +public class ZLSimpleBoolean3OptionEntry extends ZLBoolean3OptionEntry { + private final ZLBoolean3Option myOption; + + public ZLSimpleBoolean3OptionEntry(ZLBoolean3Option option) { + myOption = option; + } + + public int initialState() { + return myOption.getValue(); + } + + public void onAccept(int state) { + myOption.setValue(state); + } +} diff --git a/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleBooleanOptionEntry.java b/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleBooleanOptionEntry.java index c390ad87d..3d8da17f7 100644 --- a/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleBooleanOptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleBooleanOptionEntry.java @@ -17,23 +17,23 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.optionEntries; - -import org.geometerplus.zlibrary.core.dialogs.ZLBooleanOptionEntry; -import org.geometerplus.zlibrary.core.options.ZLBooleanOption; - -public class ZLSimpleBooleanOptionEntry extends ZLBooleanOptionEntry { - private ZLBooleanOption myOption; - - public ZLSimpleBooleanOptionEntry(ZLBooleanOption option) { - myOption = option; - } - - public boolean initialState() { - return myOption.getValue(); - } - - public void onAccept(boolean state) { - myOption.setValue(state); - } -} +package org.geometerplus.zlibrary.core.optionEntries; + +import org.geometerplus.zlibrary.core.dialogs.ZLBooleanOptionEntry; +import org.geometerplus.zlibrary.core.options.ZLBooleanOption; + +public class ZLSimpleBooleanOptionEntry extends ZLBooleanOptionEntry { + private final ZLBooleanOption myOption; + + public ZLSimpleBooleanOptionEntry(ZLBooleanOption option) { + myOption = option; + } + + public boolean initialState() { + return myOption.getValue(); + } + + public void onAccept(boolean state) { + myOption.setValue(state); + } +} diff --git a/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleSpinOptionEntry.java b/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleSpinOptionEntry.java index e124747b7..296a8b80d 100644 --- a/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleSpinOptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleSpinOptionEntry.java @@ -17,37 +17,37 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.optionEntries; - -import org.geometerplus.zlibrary.core.dialogs.ZLSpinOptionEntry; -import org.geometerplus.zlibrary.core.options.ZLIntegerRangeOption; - -public class ZLSimpleSpinOptionEntry extends ZLSpinOptionEntry { - private int myStep; - private ZLIntegerRangeOption myOption; - - public ZLSimpleSpinOptionEntry(ZLIntegerRangeOption option, int step) { - myStep = step; - myOption = option; - } - - public int getStep() { - return myStep; - } - - public int initialValue() { - return myOption.getValue(); - } - - public int maxValue() { - return myOption.getMaxValue(); - } - - public int minValue() { - return myOption.getMinValue(); - } - - public void onAccept(int value) { - myOption.setValue(value); - } -} +package org.geometerplus.zlibrary.core.optionEntries; + +import org.geometerplus.zlibrary.core.dialogs.ZLSpinOptionEntry; +import org.geometerplus.zlibrary.core.options.ZLIntegerRangeOption; + +public class ZLSimpleSpinOptionEntry extends ZLSpinOptionEntry { + private final ZLIntegerRangeOption myOption; + private final int myStep; + + public ZLSimpleSpinOptionEntry(ZLIntegerRangeOption option, int step) { + myOption = option; + myStep = step; + } + + public int getStep() { + return myStep; + } + + public int initialValue() { + return myOption.getValue(); + } + + public int maxValue() { + return myOption.MaxValue; + } + + public int minValue() { + return myOption.MinValue; + } + + public void onAccept(int value) { + myOption.setValue(value); + } +} diff --git a/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleStringOptionEntry.java b/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleStringOptionEntry.java index 536da99f0..9e9749a59 100644 --- a/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleStringOptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/optionEntries/ZLSimpleStringOptionEntry.java @@ -17,23 +17,23 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.optionEntries; - -import org.geometerplus.zlibrary.core.dialogs.ZLStringOptionEntry; -import org.geometerplus.zlibrary.core.options.ZLStringOption; - -public class ZLSimpleStringOptionEntry extends ZLStringOptionEntry { - private ZLStringOption myOption; - - public ZLSimpleStringOptionEntry(ZLStringOption option) { - myOption = option; - } - - public String initialValue() { - return myOption.getValue(); - } - - public void onAccept(String value) { - myOption.setValue(value); - } -} +package org.geometerplus.zlibrary.core.optionEntries; + +import org.geometerplus.zlibrary.core.dialogs.ZLStringOptionEntry; +import org.geometerplus.zlibrary.core.options.ZLStringOption; + +public class ZLSimpleStringOptionEntry extends ZLStringOptionEntry { + private final ZLStringOption myOption; + + public ZLSimpleStringOptionEntry(ZLStringOption option) { + myOption = option; + } + + public String initialValue() { + return myOption.getValue(); + } + + public void onAccept(String value) { + myOption.setValue(value); + } +} diff --git a/src/org/geometerplus/zlibrary/core/optionEntries/ZLStringInfoEntry.java b/src/org/geometerplus/zlibrary/core/optionEntries/ZLStringInfoEntry.java index 8b95af9a6..b69ef9a51 100644 --- a/src/org/geometerplus/zlibrary/core/optionEntries/ZLStringInfoEntry.java +++ b/src/org/geometerplus/zlibrary/core/optionEntries/ZLStringInfoEntry.java @@ -17,26 +17,26 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.optionEntries; - -import org.geometerplus.zlibrary.core.dialogs.ZLStringOptionEntry; - -public class ZLStringInfoEntry extends ZLStringOptionEntry { - private String myValue; - - public ZLStringInfoEntry(String value) { - myValue = value; - setActive(false); - } - - public ZLStringInfoEntry(int value) { - myValue = String.valueOf(value); - setActive(false); - } - - public String initialValue() { - return myValue; - } - - public void onAccept(String value) {} -} +package org.geometerplus.zlibrary.core.optionEntries; + +import org.geometerplus.zlibrary.core.dialogs.ZLStringOptionEntry; + +public class ZLStringInfoEntry extends ZLStringOptionEntry { + private final String myValue; + + public ZLStringInfoEntry(String value) { + myValue = value; + setActive(false); + } + + public ZLStringInfoEntry(int value) { + this("" + value); + } + + public String initialValue() { + return myValue; + } + + public void onAccept(String value) { + } +} diff --git a/src/org/geometerplus/zlibrary/core/optionEntries/ZLToggleBooleanOptionEntry.java b/src/org/geometerplus/zlibrary/core/optionEntries/ZLToggleBooleanOptionEntry.java index 1202e7cc0..201da2b05 100644 --- a/src/org/geometerplus/zlibrary/core/optionEntries/ZLToggleBooleanOptionEntry.java +++ b/src/org/geometerplus/zlibrary/core/optionEntries/ZLToggleBooleanOptionEntry.java @@ -17,33 +17,33 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.optionEntries; - -import java.util.ArrayList; -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.zlibrary.core.dialogs.ZLOptionEntry; -import org.geometerplus.zlibrary.core.options.ZLBooleanOption; - -public class ZLToggleBooleanOptionEntry extends ZLSimpleBooleanOptionEntry { - private final ArrayList/**/ myDependentEntries = new ArrayList(); - - public ZLToggleBooleanOptionEntry(ZLBooleanOption option) { - super(option); - } - - public void addDependentEntry(ZLOptionEntry dependent) { - myDependentEntries.add(dependent); - } - - public void onStateChanged(boolean state) { - final int size = myDependentEntries.size(); - for (int i = 0; i < size; i++) { - ((ZLOptionEntry)myDependentEntries.get(i)).setVisible(state); - } - } - - public void onReset() { - onStateChanged(initialState()); - } -} +package org.geometerplus.zlibrary.core.optionEntries; + +import java.util.*; + +import org.geometerplus.zlibrary.core.util.*; +import org.geometerplus.zlibrary.core.dialogs.ZLOptionEntry; +import org.geometerplus.zlibrary.core.options.ZLBooleanOption; + +public class ZLToggleBooleanOptionEntry extends ZLSimpleBooleanOptionEntry { + private final ArrayList myDependentEntries = new ArrayList(); + + public ZLToggleBooleanOptionEntry(ZLBooleanOption option) { + super(option); + } + + public void addDependentEntry(ZLOptionEntry dependent) { + myDependentEntries.add(dependent); + } + + public void onStateChanged(boolean state) { + final int size = myDependentEntries.size(); + for (int i = 0; i < size; i++) { + ((ZLOptionEntry)myDependentEntries.get(i)).setVisible(state); + } + } + + public void onReset() { + onStateChanged(initialState()); + } +} diff --git a/src/org/geometerplus/zlibrary/core/options/ZLBoolean3Option.java b/src/org/geometerplus/zlibrary/core/options/ZLBoolean3Option.java index 146b66faa..29af703ab 100644 --- a/src/org/geometerplus/zlibrary/core/options/ZLBoolean3Option.java +++ b/src/org/geometerplus/zlibrary/core/options/ZLBoolean3Option.java @@ -17,46 +17,46 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.options; - -import org.geometerplus.zlibrary.core.util.ZLBoolean3; - -public final class ZLBoolean3Option extends ZLOption implements ZLSimpleOption { - private int myValue; - private final int myDefaultValue; - - public ZLBoolean3Option(String category, String group, String optionName, int defaultValue) { - super(category, group, optionName); - myDefaultValue = defaultValue; - myValue = myDefaultValue; - } - - public int getType() { - return Type.BOOLEAN3; - } - - public int getValue() { - if (!myIsSynchronized) { - String value = getConfigValue(null); - if (value != null) { - myValue = ZLBoolean3.getByString(value); - } - myIsSynchronized = true; - } - return myValue; - } - - public void setValue(int value) { - if (myIsSynchronized && (myValue == value)) { - return; - } - myValue = value; - myIsSynchronized = true; - - if (myValue == myDefaultValue) { - unsetConfigValue(); - } else { - setConfigValue(ZLBoolean3.getName(myValue)); - } - } -} +package org.geometerplus.zlibrary.core.options; + +import org.geometerplus.zlibrary.core.util.ZLBoolean3; + +public final class ZLBoolean3Option extends ZLOption implements ZLSimpleOption { + private int myValue; + private final int myDefaultValue; + + public ZLBoolean3Option(String category, String group, String optionName, int defaultValue) { + super(category, group, optionName); + myDefaultValue = defaultValue; + myValue = myDefaultValue; + } + + public int getType() { + return Type.BOOLEAN3; + } + + public int getValue() { + if (!myIsSynchronized) { + String value = getConfigValue(null); + if (value != null) { + myValue = ZLBoolean3.getByString(value); + } + myIsSynchronized = true; + } + return myValue; + } + + public void setValue(int value) { + if (myIsSynchronized && (myValue == value)) { + return; + } + myValue = value; + myIsSynchronized = true; + + if (myValue == myDefaultValue) { + unsetConfigValue(); + } else { + setConfigValue(ZLBoolean3.getName(myValue)); + } + } +} diff --git a/src/org/geometerplus/zlibrary/core/options/ZLBooleanOption.java b/src/org/geometerplus/zlibrary/core/options/ZLBooleanOption.java index 29bc5dc1a..9e88321e0 100644 --- a/src/org/geometerplus/zlibrary/core/options/ZLBooleanOption.java +++ b/src/org/geometerplus/zlibrary/core/options/ZLBooleanOption.java @@ -17,48 +17,47 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.options; - -public final class ZLBooleanOption extends ZLOption implements ZLSimpleOption { - private final boolean myDefaultValue; - private boolean myValue; - - public ZLBooleanOption(String category, String group, String optionName, boolean defaultValue) { - super(category, group, optionName); - myDefaultValue = defaultValue; - myValue = myDefaultValue; - } - - public int getType() { - return Type.BOOLEAN; - } - - public boolean getValue() { - if (!myIsSynchronized) { - String value = getConfigValue(null); - if (value != null) { - if ("true".equals(value)) { - myValue = true; - } else if ("false".equals(value)) { - myValue = false; - } - } - myIsSynchronized = true; - } - return myValue; - } - - public void setValue(boolean value) { - if (myIsSynchronized && (myValue == value)) { - return; - } - myValue = value; - myIsSynchronized = true; - if (myValue == myDefaultValue) { - unsetConfigValue(); - // System.out.println("unsett" + myValue); - } else { - setConfigValue(myValue ? "true" : "false"); - } - } -} +package org.geometerplus.zlibrary.core.options; + +public final class ZLBooleanOption extends ZLOption implements ZLSimpleOption { + private final boolean myDefaultValue; + private boolean myValue; + + public ZLBooleanOption(String category, String group, String optionName, boolean defaultValue) { + super(category, group, optionName); + myDefaultValue = defaultValue; + myValue = defaultValue; + } + + public int getType() { + return Type.BOOLEAN; + } + + public boolean getValue() { + if (!myIsSynchronized) { + String value = getConfigValue(null); + if (value != null) { + if ("true".equals(value)) { + myValue = true; + } else if ("false".equals(value)) { + myValue = false; + } + } + myIsSynchronized = true; + } + return myValue; + } + + public void setValue(boolean value) { + if (myIsSynchronized && (myValue == value)) { + return; + } + myValue = value; + myIsSynchronized = true; + if (value == myDefaultValue) { + unsetConfigValue(); + } else { + setConfigValue(value ? "true" : "false"); + } + } +} diff --git a/src/org/geometerplus/zlibrary/core/options/ZLColorOption.java b/src/org/geometerplus/zlibrary/core/options/ZLColorOption.java index 6e3102699..9ec42476a 100644 --- a/src/org/geometerplus/zlibrary/core/options/ZLColorOption.java +++ b/src/org/geometerplus/zlibrary/core/options/ZLColorOption.java @@ -17,62 +17,62 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.options; - -import org.geometerplus.zlibrary.core.util.ZLColor; - -/** - * êëàññ îïöèÿ öâåòà. âíóòðè îïöèè öâåò õðàíèòñÿ îäíèì ÷èñëîì, ÷òîáû óìåíüøèòü - * çàòðàòû íà ïàìÿòü (â òðè ðàçà! =)), íî îáðàùåíèå ê ýòîé îïöèè âñå ðàâíî - * îñóùåñòâëÿåòñÿ ñ ïîìîùüþ êëàññà ZLColor, êîòîðûé ðåàëèçóåò áîëåå ïðèâû÷íîå - * RGB ïðåäñòàâëåíèå öâåòà. - * - * @author Àäìèíèñòðàòîð - * - */ -public final class ZLColorOption extends ZLOption { - private final ZLColor myDefaultValue; - private ZLColor myValue; - - public ZLColorOption(String category, String group, String optionName, ZLColor defaultValue) { - super(category, group, optionName); - myDefaultValue = (defaultValue != null) ? defaultValue : new ZLColor(0); - myValue = myDefaultValue; - } - - public ZLColor getValue() { - if (!myIsSynchronized) { - String value = getConfigValue(null); - if (value != null) { - try { - int intValue = Integer.parseInt(value); - if (myValue.getIntValue() != intValue) { - myValue = new ZLColor(intValue); - } - } catch (NumberFormatException e) { - // System.err.println(e); - } - } - myIsSynchronized = true; - } - return myValue; - } - - public void setValue(ZLColor colorValue) { - if (colorValue != null) { - final boolean sameValue = myValue.equals(colorValue); - if (myIsSynchronized && sameValue) { - return; - } - if (!sameValue) { - myValue = colorValue; - } - myIsSynchronized = true; - if (myValue.equals(myDefaultValue)) { - unsetConfigValue(); - } else { - setConfigValue("" + myValue.getIntValue()); - } - } - } -} +package org.geometerplus.zlibrary.core.options; + +import org.geometerplus.zlibrary.core.util.ZLColor; + +/** + * êëàññ îïöèÿ öâåòà. âíóòðè îïöèè öâåò õðàíèòñÿ îäíèì ÷èñëîì, ÷òîáû óìåíüøèòü + * çàòðàòû íà ïàìÿòü (â òðè ðàçà! =)), íî îáðàùåíèå ê ýòîé îïöèè âñå ðàâíî + * îñóùåñòâëÿåòñÿ ñ ïîìîùüþ êëàññà ZLColor, êîòîðûé ðåàëèçóåò áîëåå ïðèâû÷íîå + * RGB ïðåäñòàâëåíèå öâåòà. + * + * @author Àäìèíèñòðàòîð + * + */ +public final class ZLColorOption extends ZLOption { + private final ZLColor myDefaultValue; + private ZLColor myValue; + + public ZLColorOption(String category, String group, String optionName, ZLColor defaultValue) { + super(category, group, optionName); + myDefaultValue = (defaultValue != null) ? defaultValue : new ZLColor(0); + myValue = myDefaultValue; + } + + public ZLColor getValue() { + if (!myIsSynchronized) { + String value = getConfigValue(null); + if (value != null) { + try { + int intValue = Integer.parseInt(value); + if (myValue.getIntValue() != intValue) { + myValue = new ZLColor(intValue); + } + } catch (NumberFormatException e) { + // System.err.println(e); + } + } + myIsSynchronized = true; + } + return myValue; + } + + public void setValue(ZLColor colorValue) { + if (colorValue != null) { + final boolean sameValue = myValue.equals(colorValue); + if (myIsSynchronized && sameValue) { + return; + } + if (!sameValue) { + myValue = colorValue; + } + myIsSynchronized = true; + if (colorValue.equals(myDefaultValue)) { + unsetConfigValue(); + } else { + setConfigValue("" + colorValue.getIntValue()); + } + } + } +} diff --git a/src/org/geometerplus/zlibrary/core/options/ZLIntegerOption.java b/src/org/geometerplus/zlibrary/core/options/ZLIntegerOption.java index a4a31a833..0b3891143 100644 --- a/src/org/geometerplus/zlibrary/core/options/ZLIntegerOption.java +++ b/src/org/geometerplus/zlibrary/core/options/ZLIntegerOption.java @@ -17,56 +17,48 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.options; - -/** - * êëàññ öåëî÷èñëåííàÿ îïöèÿ. - * - * @author Àäìèíèñòðàòîð - * - */ -public final class ZLIntegerOption extends ZLOption { - private final int myDefaultValue; - private int myValue; - - public ZLIntegerOption(String category, String group, String optionName, - int defaultValue) { - super(category, group, optionName); - myDefaultValue = defaultValue; - myValue = myDefaultValue; - } - - public void changeName(String optionName) { - super.changeName(optionName); - myValue = myDefaultValue; - } - - public int getValue() { - if (!myIsSynchronized) { - String value = getConfigValue(null); - if (value != null) { - try { - myValue = Integer.parseInt(value); - } catch (NumberFormatException e) { - // System.err.println(e); - } - } - myIsSynchronized = true; - } - return myValue; - } - - public void setValue(int value) { - if (myIsSynchronized && (myValue == value)) { - return; - } - myValue = value; - myIsSynchronized = true; - if (myValue == myDefaultValue) { - // System.out.println(optionName() + " is unset"); - unsetConfigValue(); - } else { - setConfigValue("" + myValue); - } - } -} +package org.geometerplus.zlibrary.core.options; + +public final class ZLIntegerOption extends ZLOption { + private final int myDefaultValue; + private int myValue; + + public ZLIntegerOption(String category, String group, String optionName, int defaultValue) { + super(category, group, optionName); + myDefaultValue = defaultValue; + myValue = defaultValue; + } + + public void changeName(String optionName) { + super.changeName(optionName); + myValue = myDefaultValue; + } + + public int getValue() { + if (!myIsSynchronized) { + String value = getConfigValue(null); + if (value != null) { + try { + myValue = Integer.parseInt(value); + } catch (NumberFormatException e) { + // System.err.println(e); + } + } + myIsSynchronized = true; + } + return myValue; + } + + public void setValue(int value) { + if (myIsSynchronized && (myValue == value)) { + return; + } + myValue = value; + myIsSynchronized = true; + if (value == myDefaultValue) { + unsetConfigValue(); + } else { + setConfigValue("" + value); + } + } +} diff --git a/src/org/geometerplus/zlibrary/core/options/ZLIntegerRangeOption.java b/src/org/geometerplus/zlibrary/core/options/ZLIntegerRangeOption.java index cf4a34b13..845a86753 100644 --- a/src/org/geometerplus/zlibrary/core/options/ZLIntegerRangeOption.java +++ b/src/org/geometerplus/zlibrary/core/options/ZLIntegerRangeOption.java @@ -17,70 +17,64 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.options; - -/** - * êëàññ ðàíæèðîâàííàÿ öåëî÷èñëåííàÿ îïöèÿ. åñòü âåðõíèé è íèæíèé ïðåäåëû, - * êîòîðûå òóò æå è óêàçûâàþòñÿ. - * - * @author Àäìèíèñòðàòîð - * - */ -public final class ZLIntegerRangeOption extends ZLOption { - private final int myMinValue; - private final int myMaxValue; - - private final int myDefaultValue; - private int myValue; - - public ZLIntegerRangeOption(String category, String group, String optionName, int minValue, int maxValue, int defaultValue) { - super(category, group, optionName); - myMinValue = minValue; - myMaxValue = maxValue; - myDefaultValue = Math.max(myMinValue, Math.min(myMaxValue, defaultValue)); - myValue = myDefaultValue; - } - - public int getMinValue() { - return myMinValue; - } - - public int getMaxValue() { - return myMaxValue; - } - - public int getValue() { - if (!myIsSynchronized) { - String value = getConfigValue(null); - if (value != null) { - try { - int intValue = Integer.parseInt(value); - if (intValue < myMinValue) { - intValue = myMinValue; - } else if (intValue > myMaxValue) { - intValue = myMaxValue; - } - myValue = intValue; - } catch (NumberFormatException e) { - // System.err.println(e); - } - } - myIsSynchronized = true; - } - return myValue; - } - - public void setValue(int value) { - value = Math.max(myMinValue, Math.min(myMaxValue, value)); - if (myIsSynchronized && (myValue == value)) { - return; - } - myValue = value; - myIsSynchronized = true; - if (myValue == myDefaultValue) { - unsetConfigValue(); - } else { - setConfigValue("" + myValue); - } - } -} +package org.geometerplus.zlibrary.core.options; + +public final class ZLIntegerRangeOption extends ZLOption { + public final int MinValue; + public final int MaxValue; + + private final int myDefaultValue; + private int myValue; + + public ZLIntegerRangeOption(String category, String group, String optionName, int minValue, int maxValue, int defaultValue) { + super(category, group, optionName); + MinValue = minValue; + MaxValue = maxValue; + if (defaultValue < MinValue) { + defaultValue = MinValue; + } else if (defaultValue > MaxValue) { + defaultValue = MaxValue; + } + myDefaultValue = defaultValue; + myValue = defaultValue; + } + + public int getValue() { + if (!myIsSynchronized) { + String value = getConfigValue(null); + if (value != null) { + try { + int intValue = Integer.parseInt(value); + if (intValue < MinValue) { + intValue = MinValue; + } else if (intValue > MaxValue) { + intValue = MaxValue; + } + myValue = intValue; + } catch (NumberFormatException e) { + // System.err.println(e); + } + } + myIsSynchronized = true; + } + return myValue; + } + + public void setValue(int value) { + if (value < MinValue) { + value = MinValue; + } else if (value > MaxValue) { + value = MaxValue; + } + if (myIsSynchronized && (myValue == value)) { + return; + } + myValue = value; + myIsSynchronized = true; + if (value == myDefaultValue) { + unsetConfigValue(); + } else { + setConfigValue("" + value); + } + } +} diff --git a/src/org/geometerplus/zlibrary/core/options/ZLOption.java b/src/org/geometerplus/zlibrary/core/options/ZLOption.java index 2dae8e79f..3e04dbdaa 100644 --- a/src/org/geometerplus/zlibrary/core/options/ZLOption.java +++ b/src/org/geometerplus/zlibrary/core/options/ZLOption.java @@ -17,91 +17,60 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.options; - -import org.geometerplus.zlibrary.core.config.ZLConfig; -import org.geometerplus.zlibrary.core.config.ZLConfigManager; - -public abstract class ZLOption { - public static final String LOOK_AND_FEEL_CATEGORY = "ui"; - public static final String CONFIG_CATEGORY = "options"; - public static final String STATE_CATEGORY = "state"; - public static final String EMPTY = ""; - public static final String PLATFORM_GROUP = "PlatformOptions"; - - private final String myCategory; - private final String myGroup; - private String myOptionName; - protected boolean myIsSynchronized; - - /** - * êîíñòðóêòîð - * - * @param config - * @param category - * @param group - * @param optionName - */ - protected ZLOption(String category, String group, String optionName) { - myCategory = category.intern(); - myGroup = group.intern(); - myOptionName = optionName.intern(); - myIsSynchronized = false; - - /* - * String value = myConfig.getValue(group, name, null); - * - * - * - * - * if ((value != null)) { && (ÊÀÒÅÃÎÐÈÈ ÍÅ ÐÀÂÍÛ) - * myConfig.setValue(group, name, value, category); } - */ - } - - protected void changeName(String optionName) { - myOptionName = optionName.intern(); - myIsSynchronized = false; - } - - /** - * @return èìÿ îïöèè. âåðîÿòíî íóæíî áóäåò âî view - */ - public String getName() { - return myOptionName; - } - - /** - * @return "ãðóïïó" îïöèè. âåðîÿòíî íóæíî áóäåò âî view - */ - public String getGroup() { - return myGroup; - } - - /** - * @return "êàòåãîðèþ" îïöèè. âåðîÿòíî íóæíî áóäåò âî view - */ - public String getCategory() { - return myCategory; - } - - protected final String getConfigValue(String defaultValue) { - ZLConfig config = ZLConfigManager.getConfig(); - return (config != null) ? - config.getValue(myGroup, myOptionName, defaultValue) : defaultValue; - } - - protected final void setConfigValue(String value) { - ZLConfig config = ZLConfigManager.getConfig(); - if (config != null) { - config.setValue(myGroup, myOptionName, value, myCategory); - } - } - - protected final void unsetConfigValue() { - ZLConfig config = ZLConfigManager.getConfig(); - if (config != null) { - config.unsetValue(myGroup, myOptionName); - } - } -} +package org.geometerplus.zlibrary.core.options; + +import org.geometerplus.zlibrary.core.config.ZLConfig; +import org.geometerplus.zlibrary.core.config.ZLConfigManager; + +public abstract class ZLOption { + public static final String LOOK_AND_FEEL_CATEGORY = "ui"; + public static final String CONFIG_CATEGORY = "options"; + public static final String STATE_CATEGORY = "state"; + public static final String EMPTY = ""; + public static final String PLATFORM_GROUP = "PlatformOptions"; + + private final String myCategory; + private final String myGroup; + private String myOptionName; + protected boolean myIsSynchronized; + + /** + * êîíñòðóêòîð + * + * @param config + * @param category + * @param group + * @param optionName + */ + protected ZLOption(String category, String group, String optionName) { + myCategory = category.intern(); + myGroup = group.intern(); + myOptionName = optionName.intern(); + myIsSynchronized = false; + } + + protected void changeName(String optionName) { + myOptionName = optionName.intern(); + myIsSynchronized = false; + } + + protected final String getConfigValue(String defaultValue) { + ZLConfig config = ZLConfigManager.getConfig(); + return (config != null) ? + config.getValue(myGroup, myOptionName, defaultValue) : defaultValue; + } + + protected final void setConfigValue(String value) { + ZLConfig config = ZLConfigManager.getConfig(); + if (config != null) { + config.setValue(myGroup, myOptionName, value, myCategory); + } + } + + protected final void unsetConfigValue() { + ZLConfig config = ZLConfigManager.getConfig(); + if (config != null) { + config.unsetValue(myGroup, myOptionName); + } + } +} diff --git a/src/org/geometerplus/zlibrary/core/options/ZLSimpleOption.java b/src/org/geometerplus/zlibrary/core/options/ZLSimpleOption.java index 9e56ea805..07427e699 100644 --- a/src/org/geometerplus/zlibrary/core/options/ZLSimpleOption.java +++ b/src/org/geometerplus/zlibrary/core/options/ZLSimpleOption.java @@ -17,14 +17,14 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.options; - -public interface ZLSimpleOption { - public interface Type { - int BOOLEAN = 1; - int BOOLEAN3 = 2; - int STRING = 3; - } - - int getType(); -} +package org.geometerplus.zlibrary.core.options; + +public interface ZLSimpleOption { + public interface Type { + int BOOLEAN = 1; + int BOOLEAN3 = 2; + int STRING = 3; + } + + int getType(); +} diff --git a/src/org/geometerplus/zlibrary/core/options/ZLStringOption.java b/src/org/geometerplus/zlibrary/core/options/ZLStringOption.java index be52a4261..2322ebef2 100644 --- a/src/org/geometerplus/zlibrary/core/options/ZLStringOption.java +++ b/src/org/geometerplus/zlibrary/core/options/ZLStringOption.java @@ -17,57 +17,52 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.options; - -/** - * êëàññ ñòðîêîâàÿ îïöèÿ. - * - * @author Àäìèíèñòðàòîð - */ -public final class ZLStringOption extends ZLOption implements ZLSimpleOption { - private final String myDefaultValue; - private String myValue; - - public ZLStringOption(String category, String group, String optionName, String defaultValue) { - super(category, group, optionName); - myDefaultValue = (defaultValue != null) ? defaultValue.intern() : ""; - myValue = myDefaultValue; - } - - public void changeName(String optionName) { - super.changeName(optionName); - myValue = myDefaultValue; - } - - public int getType() { - return Type.STRING; - } - - public String getValue() { - if (!myIsSynchronized) { - String value = getConfigValue(myDefaultValue); - if (value != null) { - myValue = value; - } - myIsSynchronized = true; - } - return myValue; - } - - public void setValue(String value) { - if (value == null) { - return; - } - value = value.intern(); - if (myIsSynchronized && (myValue == value)) { - return; - } - myValue = value; - if (value == myDefaultValue) { - unsetConfigValue(); - } else { - setConfigValue(value); - } - myIsSynchronized = true; - } -} +package org.geometerplus.zlibrary.core.options; + +public final class ZLStringOption extends ZLOption implements ZLSimpleOption { + private final String myDefaultValue; + private String myValue; + + public ZLStringOption(String category, String group, String optionName, String defaultValue) { + super(category, group, optionName); + myDefaultValue = (defaultValue != null) ? defaultValue.intern() : ""; + myValue = myDefaultValue; + } + + public void changeName(String optionName) { + super.changeName(optionName); + myValue = myDefaultValue; + } + + public int getType() { + return Type.STRING; + } + + public String getValue() { + if (!myIsSynchronized) { + String value = getConfigValue(myDefaultValue); + if (value != null) { + myValue = value; + } + myIsSynchronized = true; + } + return myValue; + } + + public void setValue(String value) { + if (value == null) { + return; + } + value = value.intern(); + if (myIsSynchronized && (myValue == value)) { + return; + } + myValue = value; + if (value == myDefaultValue) { + unsetConfigValue(); + } else { + setConfigValue(value); + } + myIsSynchronized = true; + } +} diff --git a/src/org/geometerplus/zlibrary/core/resources/ZLMissingResource.java b/src/org/geometerplus/zlibrary/core/resources/ZLMissingResource.java index 75bfea1d0..7bfe47acc 100644 --- a/src/org/geometerplus/zlibrary/core/resources/ZLMissingResource.java +++ b/src/org/geometerplus/zlibrary/core/resources/ZLMissingResource.java @@ -17,25 +17,25 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.resources; - -final class ZLMissingResource extends ZLResource { - static final String Value = "????????"; - static final ZLMissingResource Instance = new ZLMissingResource(); - - private ZLMissingResource() { - super(Value); - } - - public ZLResource getResource(String key) { - return this; - } - - public boolean hasValue() { - return false; - } - - public String getValue() { - return Value; - } -} +package org.geometerplus.zlibrary.core.resources; + +final class ZLMissingResource extends ZLResource { + static final String Value = "????????"; + static final ZLMissingResource Instance = new ZLMissingResource(); + + private ZLMissingResource() { + super(Value); + } + + public ZLResource getResource(String key) { + return this; + } + + public boolean hasValue() { + return false; + } + + public String getValue() { + return Value; + } +} diff --git a/src/org/geometerplus/zlibrary/core/resources/ZLResource.java b/src/org/geometerplus/zlibrary/core/resources/ZLResource.java index 975915708..bd291181c 100644 --- a/src/org/geometerplus/zlibrary/core/resources/ZLResource.java +++ b/src/org/geometerplus/zlibrary/core/resources/ZLResource.java @@ -17,38 +17,38 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.resources; - -import org.geometerplus.zlibrary.core.library.ZLibrary; - -abstract public class ZLResource { - public final String Name; - - // this static fields and set-methods were created so as to run tests - protected static String ourApplicationDirectory = ZLibrary.JAR_DATA_PREFIX + "data/resources/application/"; - protected static String ourZLibraryDirectory = ZLibrary.JAR_DATA_PREFIX + "data/resources/zlibrary/"; - - public static void setApplicationDirectory(String dir) { - ourApplicationDirectory = dir; - } - - public static void setZLibraryDirectory(String dir) { - ourZLibraryDirectory = dir; - } - - public static ZLResource resource(String key) { - ZLTreeResource.buildTree(); - if (ZLTreeResource.ourRoot == null) { - return ZLMissingResource.Instance; - } - return ZLTreeResource.ourRoot.getResource(key); - } - - protected ZLResource(String name) { - Name = name; - } - - abstract public boolean hasValue(); - abstract public String getValue(); - abstract public ZLResource getResource(String key); -} +package org.geometerplus.zlibrary.core.resources; + +import org.geometerplus.zlibrary.core.library.ZLibrary; + +abstract public class ZLResource { + public final String Name; + + // this static fields and set-methods were created so as to run tests + protected static String ourApplicationDirectory = ZLibrary.JAR_DATA_PREFIX + "data/resources/application/"; + protected static String ourZLibraryDirectory = ZLibrary.JAR_DATA_PREFIX + "data/resources/zlibrary/"; + + public static void setApplicationDirectory(String dir) { + ourApplicationDirectory = dir; + } + + public static void setZLibraryDirectory(String dir) { + ourZLibraryDirectory = dir; + } + + public static ZLResource resource(String key) { + ZLTreeResource.buildTree(); + if (ZLTreeResource.ourRoot == null) { + return ZLMissingResource.Instance; + } + return ZLTreeResource.ourRoot.getResource(key); + } + + protected ZLResource(String name) { + Name = name; + } + + abstract public boolean hasValue(); + abstract public String getValue(); + abstract public ZLResource getResource(String key); +} diff --git a/src/org/geometerplus/zlibrary/core/resources/ZLTreeResource.java b/src/org/geometerplus/zlibrary/core/resources/ZLTreeResource.java index 06c113de3..eb97a7f54 100644 --- a/src/org/geometerplus/zlibrary/core/resources/ZLTreeResource.java +++ b/src/org/geometerplus/zlibrary/core/resources/ZLTreeResource.java @@ -17,120 +17,120 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.resources; - -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.zlibrary.core.library.ZLibrary; -import org.geometerplus.zlibrary.core.xml.ZLStringMap; -import org.geometerplus.zlibrary.core.xml.ZLXMLReaderAdapter; - -final class ZLTreeResource extends ZLResource { - public static ZLTreeResource ourRoot; - - private boolean myHasValue; - private String myValue; - private HashMap myChildren; - - public static void buildTree() { - if (ourRoot == null) { - ourRoot = new ZLTreeResource("", null); - loadData("en"); - Locale locale = Locale.getDefault(); - String language = locale.getLanguage(); - if (!language.equals("en")) { - loadData(language); - } - } - } - - public static void loadData(String language) { - final String fileName = language + ".xml"; - ResourceTreeReader reader = new ResourceTreeReader(); - reader.readDocument(ourRoot, ourZLibraryDirectory + fileName); - reader.readDocument(ourRoot, ourApplicationDirectory + fileName); - } - - private ZLTreeResource(String name, String value) { - super(name); - setValue(value); - } - - private void setValue(String value) { - myHasValue = value != null; - myValue = value; - } - - public boolean hasValue() { - return myHasValue; - } - - public String getValue() { - return myHasValue ? myValue : ZLMissingResource.Value; - } - - public ZLResource getResource(String key) { - final HashMap children = myChildren; - if (children != null) { - ZLResource child = (ZLResource)children.get(key); - if (child != null) { - return child; - } - } - return ZLMissingResource.Instance; - } - - private static class ResourceTreeReader extends ZLXMLReaderAdapter { - private static final String NODE = "node"; - private final ArrayList myStack = new ArrayList(); - - public void readDocument(ZLTreeResource root, String fileName) { - myStack.clear(); - myStack.add(root); - read(fileName); - } - - public boolean dontCacheAttributeValues() { - return true; - } - - public boolean startElementHandler(String tag, ZLStringMap attributes) { - final ArrayList stack = myStack; - if (!stack.isEmpty() && (NODE.equals(tag))) { - String name = attributes.getValue("name"); - if (name != null) { - String value = attributes.getValue("value"); - ZLTreeResource peek = (ZLTreeResource)stack.get(stack.size() - 1); - ZLTreeResource node; - HashMap children = peek.myChildren; - if (children == null) { - node = null; - children = new HashMap(); - peek.myChildren = children; - } else { - node = (ZLTreeResource)children.get(name); - } - if (node == null) { - node = new ZLTreeResource(name, value); - children.put(name, node); - } else { - if (value != null) { - node.setValue(value); - } - } - stack.add(node); - } - } - return false; - } - - public boolean endElementHandler(String tag) { - final ArrayList stack = myStack; - if (!stack.isEmpty() && (NODE.equals(tag))) { - stack.remove(stack.size() - 1); - } - return false; - } - } -} +package org.geometerplus.zlibrary.core.resources; + +import java.util.*; +import org.geometerplus.zlibrary.core.util.*; + +import org.geometerplus.zlibrary.core.library.ZLibrary; +import org.geometerplus.zlibrary.core.xml.ZLStringMap; +import org.geometerplus.zlibrary.core.xml.ZLXMLReaderAdapter; + +final class ZLTreeResource extends ZLResource { + public static ZLTreeResource ourRoot; + + private boolean myHasValue; + private String myValue; + private HashMap myChildren; + + public static void buildTree() { + if (ourRoot == null) { + ourRoot = new ZLTreeResource("", null); + loadData("en"); + Locale locale = Locale.getDefault(); + String language = locale.getLanguage(); + if (!language.equals("en")) { + loadData(language); + } + } + } + + public static void loadData(String language) { + final String fileName = language + ".xml"; + ResourceTreeReader reader = new ResourceTreeReader(); + reader.readDocument(ourRoot, ourZLibraryDirectory + fileName); + reader.readDocument(ourRoot, ourApplicationDirectory + fileName); + } + + private ZLTreeResource(String name, String value) { + super(name); + setValue(value); + } + + private void setValue(String value) { + myHasValue = value != null; + myValue = value; + } + + public boolean hasValue() { + return myHasValue; + } + + public String getValue() { + return myHasValue ? myValue : ZLMissingResource.Value; + } + + public ZLResource getResource(String key) { + final HashMap children = myChildren; + if (children != null) { + ZLResource child = (ZLResource)children.get(key); + if (child != null) { + return child; + } + } + return ZLMissingResource.Instance; + } + + private static class ResourceTreeReader extends ZLXMLReaderAdapter { + private static final String NODE = "node"; + private final ArrayList myStack = new ArrayList(); + + public void readDocument(ZLTreeResource root, String fileName) { + myStack.clear(); + myStack.add(root); + read(fileName); + } + + public boolean dontCacheAttributeValues() { + return true; + } + + public boolean startElementHandler(String tag, ZLStringMap attributes) { + final ArrayList stack = myStack; + if (!stack.isEmpty() && (NODE.equals(tag))) { + String name = attributes.getValue("name"); + if (name != null) { + String value = attributes.getValue("value"); + ZLTreeResource peek = (ZLTreeResource)stack.get(stack.size() - 1); + ZLTreeResource node; + HashMap children = peek.myChildren; + if (children == null) { + node = null; + children = new HashMap(); + peek.myChildren = children; + } else { + node = (ZLTreeResource)children.get(name); + } + if (node == null) { + node = new ZLTreeResource(name, value); + children.put(name, node); + } else { + if (value != null) { + node.setValue(value); + } + } + stack.add(node); + } + } + return false; + } + + public boolean endElementHandler(String tag) { + final ArrayList stack = myStack; + if (!stack.isEmpty() && (NODE.equals(tag))) { + stack.remove(stack.size() - 1); + } + return false; + } + } +} diff --git a/src/org/geometerplus/zlibrary/core/util/ZLColor.java b/src/org/geometerplus/zlibrary/core/util/ZLColor.java index fb3af2639..82ef05475 100644 --- a/src/org/geometerplus/zlibrary/core/util/ZLColor.java +++ b/src/org/geometerplus/zlibrary/core/util/ZLColor.java @@ -17,47 +17,47 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.util; - -/** - * class Color. Color is presented as the triple of short's (Red, Green, Blue components) - * Each component should be in the range 0..255 - */ -public final class ZLColor { - public final short Red; - public final short Green; - public final short Blue; - - public ZLColor(int r, int g, int b) { - Red = (short)(r & 0xFF); - Green = (short)(g & 0xFF); - Blue = (short)(b & 0xFF); - } - - public ZLColor(int intValue) { - Red = (short)((intValue >> 16) & 0xFF); - Green = (short)((intValue >> 8) & 0xFF); - Blue = (short)(intValue & 0xFF); - } - - public int getIntValue() { - return (Red << 16) + (Green << 8) + Blue; - } - - public boolean equals(Object o) { - if (o == this) { - return true; - } - - if (!(o instanceof ZLColor)) { - return false; - } - - ZLColor color = (ZLColor)o; - return (color.Red == Red) && (color.Green == Green) && (color.Blue == Blue); - } - - public int hashCode() { - return getIntValue(); - } -} +package org.geometerplus.zlibrary.core.util; + +/** + * class Color. Color is presented as the triple of short's (Red, Green, Blue components) + * Each component should be in the range 0..255 + */ +public final class ZLColor { + public final short Red; + public final short Green; + public final short Blue; + + public ZLColor(int r, int g, int b) { + Red = (short)(r & 0xFF); + Green = (short)(g & 0xFF); + Blue = (short)(b & 0xFF); + } + + public ZLColor(int intValue) { + Red = (short)((intValue >> 16) & 0xFF); + Green = (short)((intValue >> 8) & 0xFF); + Blue = (short)(intValue & 0xFF); + } + + public int getIntValue() { + return (Red << 16) + (Green << 8) + Blue; + } + + public boolean equals(Object o) { + if (o == this) { + return true; + } + + if (!(o instanceof ZLColor)) { + return false; + } + + ZLColor color = (ZLColor)o; + return (color.Red == Red) && (color.Green == Green) && (color.Blue == Blue); + } + + public int hashCode() { + return getIntValue(); + } +} diff --git a/src/org/geometerplus/zlibrary/core/util/ZLSearchPattern.java b/src/org/geometerplus/zlibrary/core/util/ZLSearchPattern.java index b911c3acb..264c9a129 100644 --- a/src/org/geometerplus/zlibrary/core/util/ZLSearchPattern.java +++ b/src/org/geometerplus/zlibrary/core/util/ZLSearchPattern.java @@ -17,24 +17,25 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.util; - -public class ZLSearchPattern { - /*package*/ boolean IgnoreCase; - /*package*/ String LowerCasePattern; - /*package*/ String UpperCasePattern; - - public ZLSearchPattern(final String pattern, boolean ignoreCase) { - IgnoreCase = ignoreCase; - if (IgnoreCase) { - LowerCasePattern = pattern.toLowerCase(); - UpperCasePattern = pattern.toUpperCase(); - } else { - LowerCasePattern = pattern; - } - } - - public int getLength() { - return LowerCasePattern.length(); - } -} +package org.geometerplus.zlibrary.core.util; + +public class ZLSearchPattern { + final boolean IgnoreCase; + final char[] LowerCasePattern; + final char[] UpperCasePattern; + + public ZLSearchPattern(String pattern, boolean ignoreCase) { + IgnoreCase = ignoreCase; + if (IgnoreCase) { + LowerCasePattern = pattern.toLowerCase().toCharArray(); + UpperCasePattern = pattern.toUpperCase().toCharArray(); + } else { + LowerCasePattern = pattern.toCharArray(); + UpperCasePattern = null; + } + } + + public int getLength() { + return LowerCasePattern.length; + } +} diff --git a/src/org/geometerplus/zlibrary/core/util/ZLSearchUtil.java b/src/org/geometerplus/zlibrary/core/util/ZLSearchUtil.java index d46c676f2..446ce4c72 100644 --- a/src/org/geometerplus/zlibrary/core/util/ZLSearchUtil.java +++ b/src/org/geometerplus/zlibrary/core/util/ZLSearchUtil.java @@ -17,59 +17,59 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.util; - -public class ZLSearchUtil { - private ZLSearchUtil() { - } - - public static int find(char[] text, int offset, int length, final ZLSearchPattern pattern) { - return find(text, offset, length, pattern, 0); - } - - public static int find(char[] text, int offset, int length, final ZLSearchPattern pattern, int pos) { - if (pos < 0) { - pos = 0; - } - final String lower = pattern.LowerCasePattern; - final int last = offset + length - pattern.getLength(); - final int patternLast = lower.length() - 1; - if (pattern.IgnoreCase) { - final String upper = pattern.UpperCasePattern; - final char firstCharLower = lower.charAt(0); - final char firstCharUpper = upper.charAt(0); - for (int i = offset + pos; i <= last; i++) { - final char current = text[i]; - if ((current == firstCharLower) || (current == firstCharUpper)) { - int j = 1; - for (int k = i + 1; j <= patternLast; ++j, ++k) { - final char symbol = text[k]; - if ((lower.charAt(j) != symbol) && - (upper.charAt(j) != symbol)) { - break; - } - } - if (j > patternLast) { - return i - offset; - } - } - } - } else { - final char firstChar = lower.charAt(0); - for (int i = offset + pos; i <= last; i++) { - if (text[i] == firstChar) { - int j = 1; - for (int k = i + 1; j <= patternLast; ++j, ++k) { - if (lower.charAt(j) != text[k]) { - break; - } - } - if (j > patternLast) { - return i - offset; - } - } - } - } - return -1; - } -} +package org.geometerplus.zlibrary.core.util; + +public abstract class ZLSearchUtil { + private ZLSearchUtil() { + } + + public static int find(char[] text, int offset, int length, final ZLSearchPattern pattern) { + return find(text, offset, length, pattern, 0); + } + + public static int find(char[] text, int offset, int length, final ZLSearchPattern pattern, int pos) { + if (pos < 0) { + pos = 0; + } + final char[] lower = pattern.LowerCasePattern; + final int patternLength = lower.length; + final int last = offset + length - patternLength; + if (pattern.IgnoreCase) { + final char[] upper = pattern.UpperCasePattern; + final char firstCharLower = lower[0]; + final char firstCharUpper = upper[0]; + for (int i = offset + pos; i <= last; i++) { + final char current = text[i]; + if ((current == firstCharLower) || (current == firstCharUpper)) { + int j = 1; + for (int k = i + 1; j < patternLength; ++j, ++k) { + final char symbol = text[k]; + if ((lower[j] != symbol) && + (upper[j] != symbol)) { + break; + } + } + if (j >= patternLength) { + return i - offset; + } + } + } + } else { + final char firstChar = lower[0]; + for (int i = offset + pos; i <= last; i++) { + if (text[i] == firstChar) { + int j = 1; + for (int k = i + 1; j < patternLength; ++j, ++k) { + if (lower[j] != text[k]) { + break; + } + } + if (j >= patternLength) { + return i - offset; + } + } + } + } + return -1; + } +} diff --git a/src/org/geometerplus/zlibrary/core/util/ZLUnicodeUtil.java b/src/org/geometerplus/zlibrary/core/util/ZLUnicodeUtil.java index 085e08b50..78396fa3d 100644 --- a/src/org/geometerplus/zlibrary/core/util/ZLUnicodeUtil.java +++ b/src/org/geometerplus/zlibrary/core/util/ZLUnicodeUtil.java @@ -17,24 +17,25 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.util; - -public class ZLUnicodeUtil { - public static int utf8Length(byte[] buffer, int str, int len) { - int last = str + len; - int counter = 0; - while (str < last) { - if ((buffer[str] & 0x80) == 0) { - ++str; - } else if ((buffer[str] & 0x20) == 0) { - str += 2; - } else if ((buffer[str] & 0x10) == 0) { - str += 3; - } else { - str += 4; - } - ++counter; - } - return counter; - } -} +package org.geometerplus.zlibrary.core.util; + +public class ZLUnicodeUtil { + public static int utf8Length(byte[] buffer, int str, int len) { + final int last = str + len; + int counter = 0; + while (str < last) { + final int bt = buffer[str]; + if ((bt & 0x80) == 0) { + ++str; + } else if ((bt & 0x20) == 0) { + str += 2; + } else if ((bt & 0x10) == 0) { + str += 3; + } else { + str += 4; + } + ++counter; + } + return counter; + } +} diff --git a/src/org/geometerplus/zlibrary/core/view/ZLPaintContext.java b/src/org/geometerplus/zlibrary/core/view/ZLPaintContext.java index 0e67630b1..910521ce9 100644 --- a/src/org/geometerplus/zlibrary/core/view/ZLPaintContext.java +++ b/src/org/geometerplus/zlibrary/core/view/ZLPaintContext.java @@ -165,7 +165,7 @@ abstract public class ZLPaintContext { abstract public void fillRectangle(int x0, int y0, int x1, int y1); abstract public void drawFilledCircle(int x, int y, int r); - public List fontFamilies() { + public ArrayList fontFamilies() { if (myFamilies.isEmpty()) { fillFamiliesList(myFamilies); } @@ -175,5 +175,3 @@ abstract public class ZLPaintContext { abstract public String realFontFamilyName(String fontFamily); abstract protected void fillFamiliesList(ArrayList families); } - - diff --git a/src/org/geometerplus/zlibrary/core/xml/ZLXMLProcessorFactory.java b/src/org/geometerplus/zlibrary/core/xml/ZLXMLProcessorFactory.java index 9412a3cf2..37e0f4198 100644 --- a/src/org/geometerplus/zlibrary/core/xml/ZLXMLProcessorFactory.java +++ b/src/org/geometerplus/zlibrary/core/xml/ZLXMLProcessorFactory.java @@ -17,18 +17,18 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.core.xml; - -public abstract class ZLXMLProcessorFactory { - private static ZLXMLProcessorFactory ourInstance; - - public static ZLXMLProcessorFactory getInstance() { - return ourInstance; - } - - protected ZLXMLProcessorFactory() { - ourInstance = this; - } - - public abstract ZLXMLProcessor createXMLProcessor(); -} +package org.geometerplus.zlibrary.core.xml; + +public abstract class ZLXMLProcessorFactory { + private static ZLXMLProcessorFactory ourInstance; + + public static ZLXMLProcessorFactory getInstance() { + return ourInstance; + } + + protected ZLXMLProcessorFactory() { + ourInstance = this; + } + + public abstract ZLXMLProcessor createXMLProcessor(); +} diff --git a/src/org/geometerplus/zlibrary/core/xml/sax/SAXHandler.java b/src/org/geometerplus/zlibrary/core/xml/sax/SAXHandler.java deleted file mode 100644 index f9a085dff..000000000 --- a/src/org/geometerplus/zlibrary/core/xml/sax/SAXHandler.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2007-2008 Geometer Plus - * - * 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.core.xml.sax; - -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; -import org.xml.sax.helpers.DefaultHandler; -import org.geometerplus.zlibrary.core.xml.*; - -class SAXHandler extends DefaultHandler { - private ZLXMLReader myXMLReader; - private final ZLStringMap myAttributes = new ZLStringMap(); - - SAXHandler(ZLXMLReader reader) { - myXMLReader = reader; - } - - public void endElement(String uri, String localName, String qName) throws SAXException { - myXMLReader.endElementHandler(qName); - } - - public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { - ZLStringMap attributesMap = myAttributes; - int length = attributes.getLength(); - for (int i = 0; i < length; i++) { - attributesMap.put(attributes.getQName(i), attributes.getValue(i)); - } - myXMLReader.startElementHandler(qName, attributesMap); - attributesMap.clear(); - } - - public void characters(char[] ch, int start, int length) throws SAXException { - myXMLReader.characterDataHandler(ch, start, length); - } - - public void endDocument() throws SAXException { - myXMLReader.endDocumentHandler(); - } - - public void startDocument() throws SAXException { - myXMLReader.startDocumentHandler(); - } -} diff --git a/src/org/geometerplus/zlibrary/core/xml/sax/ZLSaxXMLProcessor.java b/src/org/geometerplus/zlibrary/core/xml/sax/ZLSaxXMLProcessor.java deleted file mode 100644 index 5673e63bc..000000000 --- a/src/org/geometerplus/zlibrary/core/xml/sax/ZLSaxXMLProcessor.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2007-2008 Geometer Plus - * - * 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.core.xml.sax; - -import java.io.InputStream; -import java.io.IOException; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; - -import org.xml.sax.SAXException; -import org.geometerplus.zlibrary.core.xml.ZLXMLProcessor; -import org.geometerplus.zlibrary.core.xml.ZLXMLReader; - -public class ZLSaxXMLProcessor extends ZLXMLProcessor { - public boolean read(ZLXMLReader reader, InputStream stream) { - try { - SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); - parser.parse(stream, new SAXHandler(reader)); - } catch (IOException e) { - return false; - } catch (ParserConfigurationException e) { - return false; - } catch (SAXException e) { - return false; - } - return true; - } -} diff --git a/src/org/geometerplus/zlibrary/core/xml/sax/ZLSaxXMLProcessorFactory.java b/src/org/geometerplus/zlibrary/core/xml/sax/ZLSaxXMLProcessorFactory.java deleted file mode 100644 index cfd553dfa..000000000 --- a/src/org/geometerplus/zlibrary/core/xml/sax/ZLSaxXMLProcessorFactory.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2007-2008 Geometer Plus - * - * 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.core.xml.sax; - -import org.geometerplus.zlibrary.core.xml.ZLXMLProcessorFactory; - -public class ZLSaxXMLProcessorFactory extends ZLXMLProcessorFactory { - public ZLSaxXMLProcessor createXMLProcessor() { - return new ZLSaxXMLProcessor(); - } -} diff --git a/src/org/geometerplus/zlibrary/text/model/ZLTextAlignmentType.java b/src/org/geometerplus/zlibrary/text/model/ZLTextAlignmentType.java index f9619714f..a8d5b3807 100644 --- a/src/org/geometerplus/zlibrary/text/model/ZLTextAlignmentType.java +++ b/src/org/geometerplus/zlibrary/text/model/ZLTextAlignmentType.java @@ -17,12 +17,12 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model; - -public interface ZLTextAlignmentType { - public static final byte ALIGN_UNDEFINED = 0; - public static final byte ALIGN_LEFT = 1; - public static final byte ALIGN_RIGHT = 2; - public static final byte ALIGN_CENTER = 3; - public static final byte ALIGN_JUSTIFY = 4; -} +package org.geometerplus.zlibrary.text.model; + +public interface ZLTextAlignmentType { + byte ALIGN_UNDEFINED = 0; + byte ALIGN_LEFT = 1; + byte ALIGN_RIGHT = 2; + byte ALIGN_CENTER = 3; + byte ALIGN_JUSTIFY = 4; +} diff --git a/src/org/geometerplus/zlibrary/text/model/ZLTextModel.java b/src/org/geometerplus/zlibrary/text/model/ZLTextModel.java index 625a7aaa3..488b20135 100644 --- a/src/org/geometerplus/zlibrary/text/model/ZLTextModel.java +++ b/src/org/geometerplus/zlibrary/text/model/ZLTextModel.java @@ -17,40 +17,40 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model; - -import java.util.ArrayList; - -import org.geometerplus.zlibrary.core.util.ZLTextBuffer; -import org.geometerplus.zlibrary.core.image.ZLImageMap; - -import org.geometerplus.zlibrary.text.model.impl.ZLTextForcedControlEntry; -import org.geometerplus.zlibrary.text.model.impl.ZLTextMark; - -public interface ZLTextModel { - int getParagraphsNumber(); - ZLTextParagraph getParagraph(int index); - - void addControl(byte textKind, boolean isStart); - void addText(char[] text); - void addText(char[] text, int offset, int length); - void addText(ZLTextBuffer buffer); - - void addControl(ZLTextForcedControlEntry entry); - void addHyperlinkControl(byte textKind, String label); - void addImage(String id, ZLImageMap imageMap, short vOffset); - void addFixedHSpace(short length); - - void selectParagraph(int index); - void removeAllMarks(); - ZLTextMark getFirstMark(); - ZLTextMark getLastMark(); - ZLTextMark getNextMark(ZLTextMark position); - ZLTextMark getPreviousMark(ZLTextMark position); - - ArrayList getMarks(); - - int getParagraphTextLength(int index); - - void search(final String text, int startIndex, int endIndex, boolean ignoreCase); -} +package org.geometerplus.zlibrary.text.model; + +import java.util.ArrayList; + +import org.geometerplus.zlibrary.core.util.ZLTextBuffer; +import org.geometerplus.zlibrary.core.image.ZLImageMap; + +import org.geometerplus.zlibrary.text.model.impl.ZLTextForcedControlEntry; +import org.geometerplus.zlibrary.text.model.impl.ZLTextMark; + +public interface ZLTextModel { + int getParagraphsNumber(); + ZLTextParagraph getParagraph(int index); + + void addControl(byte textKind, boolean isStart); + void addText(char[] text); + void addText(char[] text, int offset, int length); + void addText(ZLTextBuffer buffer); + + void addControl(ZLTextForcedControlEntry entry); + void addHyperlinkControl(byte textKind, String label); + void addImage(String id, ZLImageMap imageMap, short vOffset); + void addFixedHSpace(short length); + + void selectParagraph(int index); + void removeAllMarks(); + ZLTextMark getFirstMark(); + ZLTextMark getLastMark(); + ZLTextMark getNextMark(ZLTextMark position); + ZLTextMark getPreviousMark(ZLTextMark position); + + ArrayList getMarks(); + + int getParagraphTextLength(int index); + + void search(final String text, int startIndex, int endIndex, boolean ignoreCase); +} diff --git a/src/org/geometerplus/zlibrary/text/model/ZLTextParagraph.java b/src/org/geometerplus/zlibrary/text/model/ZLTextParagraph.java index 4ca45d1be..d027ec6a2 100644 --- a/src/org/geometerplus/zlibrary/text/model/ZLTextParagraph.java +++ b/src/org/geometerplus/zlibrary/text/model/ZLTextParagraph.java @@ -17,50 +17,50 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model; - -import org.geometerplus.zlibrary.text.model.impl.ZLImageEntry; - -public interface ZLTextParagraph { - interface Entry { - byte TEXT = 1; - byte IMAGE = 2; - byte CONTROL = 3; - byte FORCED_CONTROL = 4; - byte FIXED_HSPACE = 5; - } - - interface EntryIterator { - byte getType(); - - char[] getTextData(); - int getTextOffset(); - int getTextLength(); - - byte getControlKind(); - boolean getControlIsStart(); - boolean getControlIsHyperlink(); - String getHyperlinkControlLabel(); - - ZLImageEntry getImageEntry(); - - short getFixedHSpaceLength(); - - boolean hasNext(); - void next(); - } - - public EntryIterator iterator(); - - interface Kind { - byte TEXT_PARAGRAPH = 0; - byte TREE_PARAGRAPH = 1; - byte EMPTY_LINE_PARAGRAPH = 2; - byte BEFORE_SKIP_PARAGRAPH = 3; - byte AFTER_SKIP_PARAGRAPH = 4; - byte END_OF_SECTION_PARAGRAPH = 5; - byte END_OF_TEXT_PARAGRAPH = 6; - }; - - byte getKind(); -} +package org.geometerplus.zlibrary.text.model; + +import org.geometerplus.zlibrary.text.model.impl.ZLImageEntry; + +public interface ZLTextParagraph { + interface Entry { + byte TEXT = 1; + byte IMAGE = 2; + byte CONTROL = 3; + byte FORCED_CONTROL = 4; + byte FIXED_HSPACE = 5; + } + + interface EntryIterator { + byte getType(); + + char[] getTextData(); + int getTextOffset(); + int getTextLength(); + + byte getControlKind(); + boolean getControlIsStart(); + boolean getControlIsHyperlink(); + String getHyperlinkControlLabel(); + + ZLImageEntry getImageEntry(); + + short getFixedHSpaceLength(); + + boolean hasNext(); + void next(); + } + + public EntryIterator iterator(); + + interface Kind { + byte TEXT_PARAGRAPH = 0; + byte TREE_PARAGRAPH = 1; + byte EMPTY_LINE_PARAGRAPH = 2; + byte BEFORE_SKIP_PARAGRAPH = 3; + byte AFTER_SKIP_PARAGRAPH = 4; + byte END_OF_SECTION_PARAGRAPH = 5; + byte END_OF_TEXT_PARAGRAPH = 6; + }; + + byte getKind(); +} diff --git a/src/org/geometerplus/zlibrary/text/model/ZLTextPlainModel.java b/src/org/geometerplus/zlibrary/text/model/ZLTextPlainModel.java index 6d8597734..a05cbcdb6 100644 --- a/src/org/geometerplus/zlibrary/text/model/ZLTextPlainModel.java +++ b/src/org/geometerplus/zlibrary/text/model/ZLTextPlainModel.java @@ -17,8 +17,8 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model; - -public interface ZLTextPlainModel extends ZLTextModel { - void createParagraph(byte kind); -} +package org.geometerplus.zlibrary.text.model; + +public interface ZLTextPlainModel extends ZLTextModel { + void createParagraph(byte kind); +} diff --git a/src/org/geometerplus/zlibrary/text/model/ZLTextTreeModel.java b/src/org/geometerplus/zlibrary/text/model/ZLTextTreeModel.java index 64e33ec9b..e61bc31b0 100644 --- a/src/org/geometerplus/zlibrary/text/model/ZLTextTreeModel.java +++ b/src/org/geometerplus/zlibrary/text/model/ZLTextTreeModel.java @@ -17,14 +17,14 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model; - -public interface ZLTextTreeModel extends ZLTextModel { - ZLTextTreeParagraph getTreeParagraph(int index); - ZLTextTreeParagraph createParagraph(ZLTextTreeParagraph parent); - void removeParagraph(int index); - void clear(); - - //void search(String text, int startIndex, int endIndex, boolean ignoreCase); - //void selectParagraph(int index); -} +package org.geometerplus.zlibrary.text.model; + +public interface ZLTextTreeModel extends ZLTextModel { + ZLTextTreeParagraph getTreeParagraph(int index); + ZLTextTreeParagraph createParagraph(ZLTextTreeParagraph parent); + void removeParagraph(int index); + void clear(); + + //void search(String text, int startIndex, int endIndex, boolean ignoreCase); + //void selectParagraph(int index); +} diff --git a/src/org/geometerplus/zlibrary/text/model/ZLTextTreeParagraph.java b/src/org/geometerplus/zlibrary/text/model/ZLTextTreeParagraph.java index 9666f78ab..767ba7902 100644 --- a/src/org/geometerplus/zlibrary/text/model/ZLTextTreeParagraph.java +++ b/src/org/geometerplus/zlibrary/text/model/ZLTextTreeParagraph.java @@ -17,24 +17,21 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model; - -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; - -public interface ZLTextTreeParagraph extends ZLTextParagraph { - boolean isOpen(); - void open(boolean o); - void openTree(); - - int getDepth(); - - ZLTextTreeParagraph getParent(); - - boolean hasChildren(); - boolean isLastChild(); - ArrayList getChildren(); - int getFullSize(); - - void removeFromParent(); -} +package org.geometerplus.zlibrary.text.model; + +public interface ZLTextTreeParagraph extends ZLTextParagraph { + boolean isOpen(); + void open(boolean o); + void openTree(); + + int getDepth(); + + ZLTextTreeParagraph getParent(); + + boolean hasChildren(); + int childNumber(); + boolean isLastChild(); + int getFullSize(); + + void removeFromParent(); +} diff --git a/src/org/geometerplus/zlibrary/text/model/impl/ZLImageEntry.java b/src/org/geometerplus/zlibrary/text/model/impl/ZLImageEntry.java index c2ebf2de8..a65f3cab5 100644 --- a/src/org/geometerplus/zlibrary/text/model/impl/ZLImageEntry.java +++ b/src/org/geometerplus/zlibrary/text/model/impl/ZLImageEntry.java @@ -17,28 +17,24 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model.impl; - -import org.geometerplus.zlibrary.core.image.ZLImage; -import org.geometerplus.zlibrary.core.image.ZLImageMap; -import org.geometerplus.zlibrary.text.model.ZLTextParagraph; - -public final class ZLImageEntry { - private final ZLImageMap myImageMap; - private final String myId; - public final short VOffset; - - ZLImageEntry(ZLImageMap imageMap, String id, short vOffset) { - myImageMap = imageMap; - myId = id; - VOffset = vOffset; - } - - public String getId() { - return myId; - } - - public ZLImage getImage() { - return myImageMap.getImage(myId); - } -} +package org.geometerplus.zlibrary.text.model.impl; + +import org.geometerplus.zlibrary.core.image.ZLImage; +import org.geometerplus.zlibrary.core.image.ZLImageMap; +import org.geometerplus.zlibrary.text.model.ZLTextParagraph; + +public final class ZLImageEntry { + private final ZLImageMap myImageMap; + public final String Id; + public final short VOffset; + + ZLImageEntry(ZLImageMap imageMap, String id, short vOffset) { + myImageMap = imageMap; + Id = id; + VOffset = vOffset; + } + + public ZLImage getImage() { + return myImageMap.getImage(Id); + } +} diff --git a/src/org/geometerplus/zlibrary/text/model/impl/ZLModelFactory.java b/src/org/geometerplus/zlibrary/text/model/impl/ZLModelFactory.java index d0978f59a..d7544817a 100644 --- a/src/org/geometerplus/zlibrary/text/model/impl/ZLModelFactory.java +++ b/src/org/geometerplus/zlibrary/text/model/impl/ZLModelFactory.java @@ -17,48 +17,48 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model.impl; - -import org.geometerplus.zlibrary.text.model.ZLTextModel; -import org.geometerplus.zlibrary.text.model.ZLTextParagraph; -import org.geometerplus.zlibrary.text.model.ZLTextPlainModel; -import org.geometerplus.zlibrary.text.model.ZLTextTreeModel; -import org.geometerplus.zlibrary.text.model.ZLTextTreeParagraph; - - -public class ZLModelFactory { - //models - static public ZLTextPlainModel createPlainModel(int dataBlockSize) { - return new ZLTextPlainModelImpl(dataBlockSize); - } - - /*static public ZLTextPlainModel createPlainModel() { - return new ZLTextPlainModelImpl(); - }*/ - - static public ZLTextTreeModel createZLTextTreeModel() { - return new ZLTextTreeModelImpl(); - } - - //paragraphs - static public ZLTextParagraph createParagraph() { - return new ZLTextParagraphImpl(new ZLTextPlainModelImpl(4096)); - } - - static public ZLTextParagraph createSpecialParagragraph(byte kind) { - return new ZLTextSpecialParagraphImpl(kind, new ZLTextPlainModelImpl(4096)); - } - - static public ZLTextTreeParagraph createTreeParagraph(ZLTextTreeParagraph parent) { - return new ZLTextTreeParagraphImpl(parent, new ZLTextPlainModelImpl(4096)); - } - - static public ZLTextTreeParagraph createTreeParagraph() { - return new ZLTextTreeParagraphImpl(null, new ZLTextPlainModelImpl(4096)); - } - - //entries - static public ZLTextForcedControlEntry createForcedControlEntry() { - return new ZLTextForcedControlEntryImpl(); - } -} +package org.geometerplus.zlibrary.text.model.impl; + +import org.geometerplus.zlibrary.text.model.ZLTextModel; +import org.geometerplus.zlibrary.text.model.ZLTextParagraph; +import org.geometerplus.zlibrary.text.model.ZLTextPlainModel; +import org.geometerplus.zlibrary.text.model.ZLTextTreeModel; +import org.geometerplus.zlibrary.text.model.ZLTextTreeParagraph; + + +public class ZLModelFactory { + //models + static public ZLTextPlainModel createPlainModel(int dataBlockSize) { + return new ZLTextPlainModelImpl(dataBlockSize); + } + + /*static public ZLTextPlainModel createPlainModel() { + return new ZLTextPlainModelImpl(); + }*/ + + static public ZLTextTreeModel createZLTextTreeModel() { + return new ZLTextTreeModelImpl(); + } + + //paragraphs + static public ZLTextParagraph createParagraph() { + return new ZLTextParagraphImpl(new ZLTextPlainModelImpl(4096)); + } + + static public ZLTextParagraph createSpecialParagragraph(byte kind) { + return new ZLTextSpecialParagraphImpl(kind, new ZLTextPlainModelImpl(4096)); + } + + static public ZLTextTreeParagraph createTreeParagraph(ZLTextTreeParagraph parent) { + return new ZLTextTreeParagraphImpl(parent, new ZLTextPlainModelImpl(4096)); + } + + static public ZLTextTreeParagraph createTreeParagraph() { + return new ZLTextTreeParagraphImpl(null, new ZLTextPlainModelImpl(4096)); + } + + //entries + static public ZLTextForcedControlEntry createForcedControlEntry() { + return new ZLTextForcedControlEntry(); + } +} diff --git a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextForcedControlEntry.java b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextForcedControlEntry.java index 1a9bd7f29..3e84fb849 100644 --- a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextForcedControlEntry.java +++ b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextForcedControlEntry.java @@ -17,20 +17,59 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model.impl; - -import org.geometerplus.zlibrary.text.model.ZLTextParagraph; - -public interface ZLTextForcedControlEntry extends ZLTextParagraph.Entry { - boolean isLeftIndentSupported(); - short getLeftIndent(); - void setLeftIndent(short leftIndent); - - boolean isRightIndentSupported(); - short getRightIndent(); - void setRightIndent(short rightIndent); - - boolean isAlignmentTypeSupported(); - byte getAlignmentType(); - void setAlignmentType(byte alignmentType); -} +package org.geometerplus.zlibrary.text.model.impl; + +import org.geometerplus.zlibrary.text.model.ZLTextAlignmentType; + +public class ZLTextForcedControlEntry { + private final static int SUPPORTS_LEFT_INDENT = 1 << 0; + private final static int SUPPORTS_RIGHT_INDENT = 1 << 1; + private final static int SUPPORTS_ALIGNMENT_TYPE = 1 << 2; + + private int myMask; + private short myLeftIndent; + private short myRightIndent; + private byte myAlignmentType; + + ZLTextForcedControlEntry() { + } + + public boolean isLeftIndentSupported() { + return (myMask & SUPPORTS_LEFT_INDENT) == SUPPORTS_LEFT_INDENT; + } + + public short getLeftIndent() { + return myLeftIndent; + }; + + public void setLeftIndent(short leftIndent) { + myMask |= SUPPORTS_LEFT_INDENT; + myLeftIndent = leftIndent; + } + + public boolean isRightIndentSupported() { + return (myMask & SUPPORTS_RIGHT_INDENT) == SUPPORTS_RIGHT_INDENT; + } + + public short getRightIndent() { + return myRightIndent; + } + + public void setRightIndent(short rightIndent) { + myMask |= SUPPORTS_RIGHT_INDENT; + myRightIndent = rightIndent; + } + + public boolean isAlignmentTypeSupported() { + return (myMask & SUPPORTS_ALIGNMENT_TYPE) == SUPPORTS_ALIGNMENT_TYPE; + } + + public byte getAlignmentType() { + return myAlignmentType; + } + + public void setAlignmentType(byte alignmentType) { + myMask |= SUPPORTS_ALIGNMENT_TYPE; + myAlignmentType = alignmentType; + } +} diff --git a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextForcedControlEntryImpl.java b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextForcedControlEntryImpl.java deleted file mode 100644 index 3362ce7d5..000000000 --- a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextForcedControlEntryImpl.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2007-2008 Geometer Plus - * - * 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.text.model.impl; - -import org.geometerplus.zlibrary.text.model.ZLTextAlignmentType; - -class ZLTextForcedControlEntryImpl implements ZLTextForcedControlEntry { - private final static int SUPPORTS_LEFT_INDENT = 1; - private final static int SUPPORTS_RIGHT_INDENT = 2; - private final static int SUPPORTS_ALIGNMENT_TYPE = 4; - - private int myMask; - private short myLeftIndent; - private short myRightIndent; - private byte myAlignmentType; - - ZLTextForcedControlEntryImpl() { - myMask = 0; - } - - public boolean isLeftIndentSupported() { - return (myMask & SUPPORTS_LEFT_INDENT) == SUPPORTS_LEFT_INDENT; - } - - public short getLeftIndent() { - return myLeftIndent; - }; - - public void setLeftIndent(short leftIndent) { - myMask |= SUPPORTS_LEFT_INDENT; - myLeftIndent = leftIndent; - } - - public boolean isRightIndentSupported() { - return (myMask & SUPPORTS_RIGHT_INDENT) == SUPPORTS_RIGHT_INDENT; - } - - public short getRightIndent() { - return myRightIndent; - } - - public void setRightIndent(short rightIndent) { - myMask |= SUPPORTS_RIGHT_INDENT; - myRightIndent = rightIndent; - } - - public boolean isAlignmentTypeSupported() { - return (myMask & SUPPORTS_ALIGNMENT_TYPE) == SUPPORTS_ALIGNMENT_TYPE; - } - - public byte getAlignmentType() { - return myAlignmentType; - } - - public void setAlignmentType(byte alignmentType) { - myMask |= SUPPORTS_ALIGNMENT_TYPE; - myAlignmentType = alignmentType; - } -} diff --git a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextMark.java b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextMark.java index 7bde71b80..cca1396f4 100644 --- a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextMark.java +++ b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextMark.java @@ -17,48 +17,37 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model.impl; - -public class ZLTextMark { - public int ParagraphNumber; - public int Offset; - public int Length; - - public ZLTextMark() { - ParagraphNumber = -1; - Offset = -1; - Length = -1; - } - - public ZLTextMark(int paragraphNumber, int offset, int length) { - ParagraphNumber = paragraphNumber; - Offset = offset; - Length = length; - } - - public ZLTextMark(final ZLTextMark mark) { - ParagraphNumber = mark.ParagraphNumber; - Offset = mark.Offset; - Length = mark.Length; - } - - public int compareTo(ZLTextMark mark) { - if (ParagraphNumber == mark.ParagraphNumber) { - if (Offset == mark.Offset) { - return 0; - } else if (Offset < mark.Offset) { - return -1; - } else { - return 1; - } - } else if (ParagraphNumber < mark.ParagraphNumber) { - return -1; - } else { - return 1; - } - } - - public String toString() { - return (ParagraphNumber + " " + Offset + " " + Length); - } -} +package org.geometerplus.zlibrary.text.model.impl; + +public class ZLTextMark { + public final int ParagraphNumber; + public final int Offset; + public final int Length; + + public ZLTextMark() { + ParagraphNumber = -1; + Offset = -1; + Length = -1; + } + + public ZLTextMark(int paragraphNumber, int offset, int length) { + ParagraphNumber = paragraphNumber; + Offset = offset; + Length = length; + } + + public ZLTextMark(final ZLTextMark mark) { + ParagraphNumber = mark.ParagraphNumber; + Offset = mark.Offset; + Length = mark.Length; + } + + public int compareTo(ZLTextMark mark) { + final int diff = ParagraphNumber - mark.ParagraphNumber; + return (diff != 0) ? diff : Offset - mark.Offset; + } + + public String toString() { + return (ParagraphNumber + " " + Offset + " " + Length); + } +} diff --git a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextModelImpl.java b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextModelImpl.java index ac7308e0a..6c5be219d 100644 --- a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextModelImpl.java +++ b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextModelImpl.java @@ -17,396 +17,396 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model.impl; - -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.zlibrary.core.image.ZLImageMap; -import org.geometerplus.zlibrary.core.util.ZLArrayUtils; -import org.geometerplus.zlibrary.core.util.ZLTextBuffer; -import org.geometerplus.zlibrary.text.model.ZLTextModel; -import org.geometerplus.zlibrary.text.model.ZLTextParagraph; - -abstract class ZLTextModelImpl implements ZLTextModel { - private final ArrayList myEntries = new ArrayList(); - final static int INITIAL_CAPACITY = 1024; - private int[] myStartEntryIndices = new int[INITIAL_CAPACITY]; - private int[] myStartEntryOffsets = new int[INITIAL_CAPACITY]; - private int[] myParagraphLengths = new int[INITIAL_CAPACITY]; - int myParagraphsNumber; - - private final ArrayList myData = new ArrayList(1024); - private final ArrayList myMarks = new ArrayList(); - private final int myDataBlockSize; - private char[] myCurrentDataBlock; - private int myBlockOffset; - - final class EntryIteratorImpl implements ZLTextParagraph.EntryIterator { - private int myCounter; - private int myLength; - private byte myType; - - int myDataIndex; - int myDataOffset; - - private char[] myTextData; - private int myTextOffset; - private int myTextLength; - - private byte myControlKind; - private boolean myControlIsStart; - private boolean myControlIsHyperlink; - private String myHyperlinkControlLabel; - - private ZLImageEntry myImageEntry; - - private short myFixedHSpaceLength; - - EntryIteratorImpl(int index) { - myLength = myParagraphLengths[index]; - myDataIndex = myStartEntryIndices[index]; - myDataOffset = myStartEntryOffsets[index]; - } - - void reset(int index) { - myCounter = 0; - myLength = myParagraphLengths[index]; - myDataIndex = myStartEntryIndices[index]; - myDataOffset = myStartEntryOffsets[index]; - } - - public byte getType() { - return myType; - } - - public char[] getTextData() { - return myTextData; - } - public int getTextOffset() { - return myTextOffset; - } - public int getTextLength() { - return myTextLength; - } - - public byte getControlKind() { - return myControlKind; - } - public boolean getControlIsStart() { - return myControlIsStart; - } - public boolean getControlIsHyperlink() { - return myControlIsHyperlink; - } - public String getHyperlinkControlLabel() { - return myHyperlinkControlLabel; - } - - public ZLImageEntry getImageEntry() { - return myImageEntry; - } - - public short getFixedHSpaceLength() { - return myFixedHSpaceLength; - } - - public boolean hasNext() { - return myCounter < myLength; - } - - public void next() { - int dataOffset = myDataOffset; - if (dataOffset == myDataBlockSize) { - ++myDataIndex; - dataOffset = 0; - } - char[] data = (char[])myData.get(myDataIndex); - byte type = (byte)data[dataOffset]; - if (type == 0) { - data = (char[])myData.get(++myDataIndex); - dataOffset = 0; - type = (byte)data[0]; - } - myType = type; - ++dataOffset; - switch (type) { - case ZLTextParagraph.Entry.TEXT: - myTextLength = - ((int)data[dataOffset++] << 16) + - (int)data[dataOffset++]; - myTextData = data; - myTextOffset = dataOffset; - dataOffset += myTextLength; - break; - case ZLTextParagraph.Entry.CONTROL: - { - short kind = (short)data[dataOffset++]; - myControlKind = (byte)kind; - myControlIsStart = (kind & 0x0100) == 0x0100; - if ((kind & 0x0200) == 0x0200) { - myControlIsHyperlink = true; - short labelLength = (short)data[dataOffset++]; - myHyperlinkControlLabel = new String(data, dataOffset, labelLength); - dataOffset += labelLength; - } else { - myControlIsHyperlink = false; - } - break; - } - case ZLTextParagraph.Entry.IMAGE: - myImageEntry = (ZLImageEntry)myEntries.get((int)data[dataOffset++]); - break; - case ZLTextParagraph.Entry.FIXED_HSPACE: - myFixedHSpaceLength = (short)data[dataOffset++]; - break; - case ZLTextParagraph.Entry.FORCED_CONTROL: - //entry = myEntries.get((int)code); - break; - } - ++myCounter; - myDataOffset = dataOffset; - } - } - - ZLTextModelImpl(int dataBlockSize) { - myDataBlockSize = dataBlockSize; - } - - void extend() { - final int size = myStartEntryIndices.length; - myStartEntryIndices = ZLArrayUtils.createCopy(myStartEntryIndices, size, size << 1); - myStartEntryOffsets = ZLArrayUtils.createCopy(myStartEntryOffsets, size, size << 1); - myParagraphLengths = ZLArrayUtils.createCopy(myParagraphLengths, size, size << 1); - } - - final void createParagraph() { - final int index = myParagraphsNumber++; - int[] startEntryIndices = myStartEntryIndices; - if (index == startEntryIndices.length) { - extend(); - startEntryIndices = myStartEntryIndices; - } - final int dataSize = myData.size(); - startEntryIndices[index] = (dataSize == 0) ? 0 : (dataSize - 1); - myStartEntryOffsets[index] = myBlockOffset; - myParagraphLengths[index] = 0; - } - - private final char[] getDataBlock(int minimumLength) { - char[] block = myCurrentDataBlock; - if ((block == null) || (minimumLength > block.length - myBlockOffset)) { - int blockSize = myDataBlockSize; - if (minimumLength > blockSize) { - blockSize = minimumLength; - } - block = new char[blockSize]; - myData.add(block); - myCurrentDataBlock = block; - myBlockOffset = 0; - } - return block; - } - - public final void addControl(byte textKind, boolean isStart) { - final char[] block = getDataBlock(2); - ++myParagraphLengths[myParagraphsNumber - 1]; - block[myBlockOffset++] = (char)ZLTextParagraph.Entry.CONTROL; - short kind = textKind; - if (isStart) { - kind += 0x0100; - } - block[myBlockOffset++] = (char)kind; - } - - public final void addText(char[] text) { - addText(text, 0, text.length); - } - - public final void addText(ZLTextBuffer buffer) { - addText(buffer.getData(), 0, buffer.getLength()); - } - - public final void addText(char[] text, int offset, int length) { - char[] block = getDataBlock(3 + length); - ++myParagraphLengths[myParagraphsNumber - 1]; - int blockOffset = myBlockOffset; - block[blockOffset++] = (char)ZLTextParagraph.Entry.TEXT; - block[blockOffset++] = (char)(length >> 16); - block[blockOffset++] = (char)length; - System.arraycopy(text, offset, block, blockOffset, length); - myBlockOffset = blockOffset + length; - } - - - public final void addControl(ZLTextForcedControlEntry entry) { - final char[] block = getDataBlock(3); - ++myParagraphLengths[myParagraphsNumber - 1]; - block[myBlockOffset++] = (char)ZLTextParagraph.Entry.FORCED_CONTROL; - final int entryAddress = myEntries.size(); - block[myBlockOffset++] = (char)(entryAddress >> 16); - block[myBlockOffset++] = (char)entryAddress; - myEntries.add(entry); - } - - - public final void addHyperlinkControl(byte textKind, String label) { - final short labelLength = (short)label.length(); - final char[] block = getDataBlock(3 + labelLength); - ++myParagraphLengths[myParagraphsNumber - 1]; - int blockOffset = myBlockOffset; - block[blockOffset++] = (char)ZLTextParagraph.Entry.CONTROL; - block[blockOffset++] = (char)(0x0300 + textKind); - block[blockOffset++] = (char)labelLength; - label.getChars(0, labelLength, block, blockOffset); - myBlockOffset = blockOffset + labelLength; - } - - public final void addImage(String id, ZLImageMap imageMap, short vOffset) { - final char[] block = getDataBlock(2); - ++myParagraphLengths[myParagraphsNumber - 1]; - final ArrayList entries = myEntries; - block[myBlockOffset++] = (char)ZLTextParagraph.Entry.IMAGE; - block[myBlockOffset++] = (char)entries.size(); - entries.add(new ZLImageEntry(imageMap, id, vOffset)); - } - - - public final void addFixedHSpace(short length) { - final char[] block = getDataBlock(2); - ++myParagraphLengths[myParagraphsNumber - 1]; - block[myBlockOffset++] = (char)ZLTextParagraph.Entry.FIXED_HSPACE; - block[myBlockOffset++] = (char)length; - } - - public ZLTextMark getFirstMark() { - return myMarks.size() == 0 ? new ZLTextMark() : (ZLTextMark) myMarks.get(0); - } - - public ZLTextMark getLastMark() { - return myMarks.size() == 0 ? new ZLTextMark() : (ZLTextMark) myMarks.get(myMarks.size() - 1); - } - - public ZLTextMark getNextMark(ZLTextMark position) { - ZLTextMark mark = null; - for (int i = 0; i < myMarks.size(); i++) { - ZLTextMark current = (ZLTextMark) myMarks.get(i); - if (current.compareTo(position) > 0) { - if ((mark == null) || (mark.compareTo(current) > 0)) { - mark = current; - } - } - } - return (mark != null) ? mark : new ZLTextMark(); - } - - public ZLTextMark getPreviousMark(ZLTextMark position) { - ZLTextMark mark = null; - for (int i = 0; i < myMarks.size(); i++) { - ZLTextMark current = (ZLTextMark) myMarks.get(i); - if (current.compareTo(position) < 0) { - if ((mark == null) || (mark.compareTo(current) < 0)) { - mark = current; - } - } - } - return (mark != null) ? mark : new ZLTextMark(); - } - - public final void search(final String text, int startIndex, int endIndex, boolean ignoreCase) { - ZLSearchPattern pattern = new ZLSearchPattern(text, ignoreCase); - myMarks.clear(); - if (startIndex > myParagraphsNumber) { - startIndex = myParagraphsNumber; - } - if (endIndex > myParagraphsNumber) { - endIndex = myParagraphsNumber; - } - int index = startIndex; - for (EntryIteratorImpl it = new EntryIteratorImpl(index); index < endIndex; it.reset(++index)) { - int offset = 0; - while (it.hasNext()) { - it.next(); - if (it.getType() == ZLTextParagraph.Entry.TEXT) { - char[] textData = it.getTextData(); - int textOffset = it.getTextOffset(); - int textLength = it.getTextLength(); - for (int pos = ZLSearchUtil.find(textData, textOffset, textLength, pattern); pos != -1; - pos = ZLSearchUtil.find(textData, textOffset, textLength, pattern, pos + 1)) { - myMarks.add(new ZLTextMark(index, offset + pos, pattern.getLength())); - } - offset += textLength; - } - } - } - } - - public ArrayList getMarks() { - return myMarks; - } - - protected void clear() { - myParagraphsNumber = 0; - myEntries.clear(); - myData.clear(); - myMarks.clear(); - myCurrentDataBlock = null; - myBlockOffset = 0; - } - - public void removeAllMarks() { - myMarks.clear(); - } - - public void selectParagraph(int index) { - if (index < myParagraphsNumber) { - myMarks.add(new ZLTextMark(index, 0, getParagraphTextLength(index))); - } - } - - public int getParagraphTextLength(int index) { - int textLength = 0; - int dataIndex = myStartEntryIndices[index]; - int dataOffset = myStartEntryOffsets[index]; - char[] data = (char[])myData.get(dataIndex); - - for (int len = myParagraphLengths[index]; len > 0; --len) { - if (dataOffset == myDataBlockSize) { - data = (char[])myData.get(++dataIndex); - dataOffset = 0; - } - byte type = (byte)data[dataOffset]; - if (type == 0) { - data = (char[])myData.get(++dataIndex); - dataOffset = 0; - type = (byte)data[0]; - } - ++dataOffset; - switch (type) { - case ZLTextParagraph.Entry.TEXT: - int entryLength = - ((int)data[dataOffset++] << 16) + - (int)data[dataOffset++]; - dataOffset += entryLength; - textLength += entryLength; - break; - case ZLTextParagraph.Entry.CONTROL: - { - if ((data[dataOffset++] & 0x0200) == 0x0200) { - dataOffset += (short)data[dataOffset++]; - } - break; - } - case ZLTextParagraph.Entry.IMAGE: - case ZLTextParagraph.Entry.FIXED_HSPACE: - ++dataOffset; - break; - case ZLTextParagraph.Entry.FORCED_CONTROL: - //entry = myEntries.get((int)code); - break; - } - } - - return textLength; - } -} +package org.geometerplus.zlibrary.text.model.impl; + +import java.util.*; +import org.geometerplus.zlibrary.core.util.*; + +import org.geometerplus.zlibrary.core.image.ZLImageMap; +import org.geometerplus.zlibrary.core.util.ZLArrayUtils; +import org.geometerplus.zlibrary.core.util.ZLTextBuffer; +import org.geometerplus.zlibrary.text.model.ZLTextModel; +import org.geometerplus.zlibrary.text.model.ZLTextParagraph; + +abstract class ZLTextModelImpl implements ZLTextModel { + private final ArrayList myEntries = new ArrayList(); + final static int INITIAL_CAPACITY = 1024; + private int[] myStartEntryIndices = new int[INITIAL_CAPACITY]; + private int[] myStartEntryOffsets = new int[INITIAL_CAPACITY]; + private int[] myParagraphLengths = new int[INITIAL_CAPACITY]; + int myParagraphsNumber; + + private final ArrayList myData = new ArrayList(1024); + private final ArrayList myMarks = new ArrayList(); + private final int myDataBlockSize; + private char[] myCurrentDataBlock; + private int myBlockOffset; + + final class EntryIteratorImpl implements ZLTextParagraph.EntryIterator { + private int myCounter; + private int myLength; + private byte myType; + + int myDataIndex; + int myDataOffset; + + private char[] myTextData; + private int myTextOffset; + private int myTextLength; + + private byte myControlKind; + private boolean myControlIsStart; + private boolean myControlIsHyperlink; + private String myHyperlinkControlLabel; + + private ZLImageEntry myImageEntry; + + private short myFixedHSpaceLength; + + EntryIteratorImpl(int index) { + myLength = myParagraphLengths[index]; + myDataIndex = myStartEntryIndices[index]; + myDataOffset = myStartEntryOffsets[index]; + } + + void reset(int index) { + myCounter = 0; + myLength = myParagraphLengths[index]; + myDataIndex = myStartEntryIndices[index]; + myDataOffset = myStartEntryOffsets[index]; + } + + public byte getType() { + return myType; + } + + public char[] getTextData() { + return myTextData; + } + public int getTextOffset() { + return myTextOffset; + } + public int getTextLength() { + return myTextLength; + } + + public byte getControlKind() { + return myControlKind; + } + public boolean getControlIsStart() { + return myControlIsStart; + } + public boolean getControlIsHyperlink() { + return myControlIsHyperlink; + } + public String getHyperlinkControlLabel() { + return myHyperlinkControlLabel; + } + + public ZLImageEntry getImageEntry() { + return myImageEntry; + } + + public short getFixedHSpaceLength() { + return myFixedHSpaceLength; + } + + public boolean hasNext() { + return myCounter < myLength; + } + + public void next() { + int dataOffset = myDataOffset; + if (dataOffset == myDataBlockSize) { + ++myDataIndex; + dataOffset = 0; + } + char[] data = (char[])myData.get(myDataIndex); + byte type = (byte)data[dataOffset]; + if (type == 0) { + data = (char[])myData.get(++myDataIndex); + dataOffset = 0; + type = (byte)data[0]; + } + myType = type; + ++dataOffset; + switch (type) { + case ZLTextParagraph.Entry.TEXT: + myTextLength = + ((int)data[dataOffset++] << 16) + + (int)data[dataOffset++]; + myTextData = data; + myTextOffset = dataOffset; + dataOffset += myTextLength; + break; + case ZLTextParagraph.Entry.CONTROL: + { + short kind = (short)data[dataOffset++]; + myControlKind = (byte)kind; + myControlIsStart = (kind & 0x0100) == 0x0100; + if ((kind & 0x0200) == 0x0200) { + myControlIsHyperlink = true; + short labelLength = (short)data[dataOffset++]; + myHyperlinkControlLabel = new String(data, dataOffset, labelLength); + dataOffset += labelLength; + } else { + myControlIsHyperlink = false; + } + break; + } + case ZLTextParagraph.Entry.IMAGE: + myImageEntry = (ZLImageEntry)myEntries.get((int)data[dataOffset++]); + break; + case ZLTextParagraph.Entry.FIXED_HSPACE: + myFixedHSpaceLength = (short)data[dataOffset++]; + break; + case ZLTextParagraph.Entry.FORCED_CONTROL: + //entry = myEntries.get((int)code); + break; + } + ++myCounter; + myDataOffset = dataOffset; + } + } + + ZLTextModelImpl(int dataBlockSize) { + myDataBlockSize = dataBlockSize; + } + + void extend() { + final int size = myStartEntryIndices.length; + myStartEntryIndices = ZLArrayUtils.createCopy(myStartEntryIndices, size, size << 1); + myStartEntryOffsets = ZLArrayUtils.createCopy(myStartEntryOffsets, size, size << 1); + myParagraphLengths = ZLArrayUtils.createCopy(myParagraphLengths, size, size << 1); + } + + final void createParagraph() { + final int index = myParagraphsNumber++; + int[] startEntryIndices = myStartEntryIndices; + if (index == startEntryIndices.length) { + extend(); + startEntryIndices = myStartEntryIndices; + } + final int dataSize = myData.size(); + startEntryIndices[index] = (dataSize == 0) ? 0 : (dataSize - 1); + myStartEntryOffsets[index] = myBlockOffset; + myParagraphLengths[index] = 0; + } + + private final char[] getDataBlock(int minimumLength) { + char[] block = myCurrentDataBlock; + if ((block == null) || (minimumLength > block.length - myBlockOffset)) { + int blockSize = myDataBlockSize; + if (minimumLength > blockSize) { + blockSize = minimumLength; + } + block = new char[blockSize]; + myData.add(block); + myCurrentDataBlock = block; + myBlockOffset = 0; + } + return block; + } + + public final void addControl(byte textKind, boolean isStart) { + final char[] block = getDataBlock(2); + ++myParagraphLengths[myParagraphsNumber - 1]; + block[myBlockOffset++] = (char)ZLTextParagraph.Entry.CONTROL; + short kind = textKind; + if (isStart) { + kind += 0x0100; + } + block[myBlockOffset++] = (char)kind; + } + + public final void addText(char[] text) { + addText(text, 0, text.length); + } + + public final void addText(ZLTextBuffer buffer) { + addText(buffer.getData(), 0, buffer.getLength()); + } + + public final void addText(char[] text, int offset, int length) { + char[] block = getDataBlock(3 + length); + ++myParagraphLengths[myParagraphsNumber - 1]; + int blockOffset = myBlockOffset; + block[blockOffset++] = (char)ZLTextParagraph.Entry.TEXT; + block[blockOffset++] = (char)(length >> 16); + block[blockOffset++] = (char)length; + System.arraycopy(text, offset, block, blockOffset, length); + myBlockOffset = blockOffset + length; + } + + + public final void addControl(ZLTextForcedControlEntry entry) { + final char[] block = getDataBlock(3); + ++myParagraphLengths[myParagraphsNumber - 1]; + block[myBlockOffset++] = (char)ZLTextParagraph.Entry.FORCED_CONTROL; + final int entryAddress = myEntries.size(); + block[myBlockOffset++] = (char)(entryAddress >> 16); + block[myBlockOffset++] = (char)entryAddress; + myEntries.add(entry); + } + + + public final void addHyperlinkControl(byte textKind, String label) { + final short labelLength = (short)label.length(); + final char[] block = getDataBlock(3 + labelLength); + ++myParagraphLengths[myParagraphsNumber - 1]; + int blockOffset = myBlockOffset; + block[blockOffset++] = (char)ZLTextParagraph.Entry.CONTROL; + block[blockOffset++] = (char)(0x0300 + textKind); + block[blockOffset++] = (char)labelLength; + label.getChars(0, labelLength, block, blockOffset); + myBlockOffset = blockOffset + labelLength; + } + + public final void addImage(String id, ZLImageMap imageMap, short vOffset) { + final char[] block = getDataBlock(2); + ++myParagraphLengths[myParagraphsNumber - 1]; + final ArrayList entries = myEntries; + block[myBlockOffset++] = (char)ZLTextParagraph.Entry.IMAGE; + block[myBlockOffset++] = (char)entries.size(); + entries.add(new ZLImageEntry(imageMap, id, vOffset)); + } + + + public final void addFixedHSpace(short length) { + final char[] block = getDataBlock(2); + ++myParagraphLengths[myParagraphsNumber - 1]; + block[myBlockOffset++] = (char)ZLTextParagraph.Entry.FIXED_HSPACE; + block[myBlockOffset++] = (char)length; + } + + public ZLTextMark getFirstMark() { + return myMarks.size() == 0 ? new ZLTextMark() : (ZLTextMark) myMarks.get(0); + } + + public ZLTextMark getLastMark() { + return myMarks.size() == 0 ? new ZLTextMark() : (ZLTextMark) myMarks.get(myMarks.size() - 1); + } + + public ZLTextMark getNextMark(ZLTextMark position) { + ZLTextMark mark = null; + for (int i = 0; i < myMarks.size(); i++) { + ZLTextMark current = (ZLTextMark) myMarks.get(i); + if (current.compareTo(position) > 0) { + if ((mark == null) || (mark.compareTo(current) > 0)) { + mark = current; + } + } + } + return (mark != null) ? mark : new ZLTextMark(); + } + + public ZLTextMark getPreviousMark(ZLTextMark position) { + ZLTextMark mark = null; + for (int i = 0; i < myMarks.size(); i++) { + ZLTextMark current = (ZLTextMark) myMarks.get(i); + if (current.compareTo(position) < 0) { + if ((mark == null) || (mark.compareTo(current) < 0)) { + mark = current; + } + } + } + return (mark != null) ? mark : new ZLTextMark(); + } + + public final void search(final String text, int startIndex, int endIndex, boolean ignoreCase) { + ZLSearchPattern pattern = new ZLSearchPattern(text, ignoreCase); + myMarks.clear(); + if (startIndex > myParagraphsNumber) { + startIndex = myParagraphsNumber; + } + if (endIndex > myParagraphsNumber) { + endIndex = myParagraphsNumber; + } + int index = startIndex; + for (EntryIteratorImpl it = new EntryIteratorImpl(index); index < endIndex; it.reset(++index)) { + int offset = 0; + while (it.hasNext()) { + it.next(); + if (it.getType() == ZLTextParagraph.Entry.TEXT) { + char[] textData = it.getTextData(); + int textOffset = it.getTextOffset(); + int textLength = it.getTextLength(); + for (int pos = ZLSearchUtil.find(textData, textOffset, textLength, pattern); pos != -1; + pos = ZLSearchUtil.find(textData, textOffset, textLength, pattern, pos + 1)) { + myMarks.add(new ZLTextMark(index, offset + pos, pattern.getLength())); + } + offset += textLength; + } + } + } + } + + public ArrayList getMarks() { + return myMarks; + } + + protected void clear() { + myParagraphsNumber = 0; + myEntries.clear(); + myData.clear(); + myMarks.clear(); + myCurrentDataBlock = null; + myBlockOffset = 0; + } + + public void removeAllMarks() { + myMarks.clear(); + } + + public void selectParagraph(int index) { + if (index < myParagraphsNumber) { + myMarks.add(new ZLTextMark(index, 0, getParagraphTextLength(index))); + } + } + + public int getParagraphTextLength(int index) { + int textLength = 0; + int dataIndex = myStartEntryIndices[index]; + int dataOffset = myStartEntryOffsets[index]; + char[] data = (char[])myData.get(dataIndex); + + for (int len = myParagraphLengths[index]; len > 0; --len) { + if (dataOffset == myDataBlockSize) { + data = (char[])myData.get(++dataIndex); + dataOffset = 0; + } + byte type = (byte)data[dataOffset]; + if (type == 0) { + data = (char[])myData.get(++dataIndex); + dataOffset = 0; + type = (byte)data[0]; + } + ++dataOffset; + switch (type) { + case ZLTextParagraph.Entry.TEXT: + int entryLength = + ((int)data[dataOffset++] << 16) + + (int)data[dataOffset++]; + dataOffset += entryLength; + textLength += entryLength; + break; + case ZLTextParagraph.Entry.CONTROL: + { + if ((data[dataOffset++] & 0x0200) == 0x0200) { + dataOffset += (short)data[dataOffset++]; + } + break; + } + case ZLTextParagraph.Entry.IMAGE: + case ZLTextParagraph.Entry.FIXED_HSPACE: + ++dataOffset; + break; + case ZLTextParagraph.Entry.FORCED_CONTROL: + //entry = myEntries.get((int)code); + break; + } + } + + return textLength; + } +} diff --git a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextParagraphImpl.java b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextParagraphImpl.java index e04f0378f..5e7ab5f1c 100644 --- a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextParagraphImpl.java +++ b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextParagraphImpl.java @@ -17,28 +17,28 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model.impl; - -import org.geometerplus.zlibrary.text.model.ZLTextParagraph; - -class ZLTextParagraphImpl implements ZLTextParagraph { - private final ZLTextModelImpl myModel; - private final int myIndex; - - ZLTextParagraphImpl(ZLTextModelImpl model, int index) { - myModel = model; - myIndex = index; - } - - ZLTextParagraphImpl(ZLTextModelImpl model) { - this(model, model.getParagraphsNumber()); - } - - public EntryIterator iterator() { - return myModel.new EntryIteratorImpl(myIndex); - } - - public byte getKind() { - return Kind.TEXT_PARAGRAPH; - } -} +package org.geometerplus.zlibrary.text.model.impl; + +import org.geometerplus.zlibrary.text.model.ZLTextParagraph; + +class ZLTextParagraphImpl implements ZLTextParagraph { + private final ZLTextModelImpl myModel; + private final int myIndex; + + ZLTextParagraphImpl(ZLTextModelImpl model, int index) { + myModel = model; + myIndex = index; + } + + ZLTextParagraphImpl(ZLTextModelImpl model) { + this(model, model.getParagraphsNumber()); + } + + public EntryIterator iterator() { + return myModel.new EntryIteratorImpl(myIndex); + } + + public byte getKind() { + return Kind.TEXT_PARAGRAPH; + } +} diff --git a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextPlainModelImpl.java b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextPlainModelImpl.java index 13f78a2e5..d92728138 100644 --- a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextPlainModelImpl.java +++ b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextPlainModelImpl.java @@ -17,39 +17,39 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model.impl; - -import org.geometerplus.zlibrary.core.util.ZLArrayUtils; -import org.geometerplus.zlibrary.text.model.ZLTextParagraph; -import org.geometerplus.zlibrary.text.model.ZLTextPlainModel; - -public final class ZLTextPlainModelImpl extends ZLTextModelImpl implements ZLTextPlainModel { - private byte[] myParagraphKinds = new byte[INITIAL_CAPACITY]; - - public ZLTextPlainModelImpl(int dataBlockSize) { - super(dataBlockSize); - } - - public final int getParagraphsNumber() { - return myParagraphsNumber; - } - - public final ZLTextParagraph getParagraph(int index) { - final byte kind = myParagraphKinds[index]; - return (kind == ZLTextParagraph.Kind.TEXT_PARAGRAPH) ? - new ZLTextParagraphImpl(this, index) : - new ZLTextSpecialParagraphImpl(kind, this, index); - } - - void extend() { - super.extend(); - final int size = myParagraphKinds.length; - myParagraphKinds = ZLArrayUtils.createCopy(myParagraphKinds, size, size << 1); - } - - public final void createParagraph(byte kind) { - final int index = myParagraphsNumber; - createParagraph(); - myParagraphKinds[index] = kind; - } -} +package org.geometerplus.zlibrary.text.model.impl; + +import org.geometerplus.zlibrary.core.util.ZLArrayUtils; +import org.geometerplus.zlibrary.text.model.ZLTextParagraph; +import org.geometerplus.zlibrary.text.model.ZLTextPlainModel; + +public final class ZLTextPlainModelImpl extends ZLTextModelImpl implements ZLTextPlainModel { + private byte[] myParagraphKinds = new byte[INITIAL_CAPACITY]; + + public ZLTextPlainModelImpl(int dataBlockSize) { + super(dataBlockSize); + } + + public final int getParagraphsNumber() { + return myParagraphsNumber; + } + + public final ZLTextParagraph getParagraph(int index) { + final byte kind = myParagraphKinds[index]; + return (kind == ZLTextParagraph.Kind.TEXT_PARAGRAPH) ? + new ZLTextParagraphImpl(this, index) : + new ZLTextSpecialParagraphImpl(kind, this, index); + } + + void extend() { + super.extend(); + final int size = myParagraphKinds.length; + myParagraphKinds = ZLArrayUtils.createCopy(myParagraphKinds, size, size << 1); + } + + public final void createParagraph(byte kind) { + final int index = myParagraphsNumber; + createParagraph(); + myParagraphKinds[index] = kind; + } +} diff --git a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextSpecialParagraphImpl.java b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextSpecialParagraphImpl.java index 35bc25444..3e59b39fc 100644 --- a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextSpecialParagraphImpl.java +++ b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextSpecialParagraphImpl.java @@ -17,22 +17,22 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model.impl; - -class ZLTextSpecialParagraphImpl extends ZLTextParagraphImpl { - private final byte myKind; - - ZLTextSpecialParagraphImpl(byte kind, ZLTextModelImpl model) { - super(model); - myKind = kind; - } - - ZLTextSpecialParagraphImpl(byte kind, ZLTextModelImpl model, int offset) { - super(model, offset); - myKind = kind; - } - - public byte getKind() { - return myKind; - } -} +package org.geometerplus.zlibrary.text.model.impl; + +class ZLTextSpecialParagraphImpl extends ZLTextParagraphImpl { + private final byte myKind; + + ZLTextSpecialParagraphImpl(byte kind, ZLTextModelImpl model) { + super(model); + myKind = kind; + } + + ZLTextSpecialParagraphImpl(byte kind, ZLTextModelImpl model, int offset) { + super(model, offset); + myKind = kind; + } + + public byte getKind() { + return myKind; + } +} diff --git a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextTreeModelImpl.java b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextTreeModelImpl.java index 23d62486d..4ba65c596 100644 --- a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextTreeModelImpl.java +++ b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextTreeModelImpl.java @@ -17,63 +17,61 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model.impl; - -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.zlibrary.text.model.ZLTextParagraph; -import org.geometerplus.zlibrary.text.model.ZLTextTreeModel; -import org.geometerplus.zlibrary.text.model.ZLTextTreeParagraph; - -public class ZLTextTreeModelImpl extends ZLTextModelImpl implements ZLTextTreeModel { - private final ArrayList myParagraphs = new ArrayList(); - private final ZLTextTreeParagraphImpl myRoot; - - public ZLTextTreeModelImpl() { - super(4096); - myRoot = new ZLTextTreeParagraphImpl(null, this); - myRoot.open(true); - } - - public final int getParagraphsNumber() { - return myParagraphs.size(); - } - - public final ZLTextParagraph getParagraph(int index) { - final ArrayList paragraphs = myParagraphs; - if (index >= paragraphs.size()) { - index = paragraphs.size() - 1; - } - return (ZLTextParagraph)paragraphs.get(index); - } - - public final ZLTextTreeParagraph getTreeParagraph(int index) { - final ArrayList paragraphs = myParagraphs; - if (index >= paragraphs.size()) { - index = paragraphs.size() - 1; - } - return (ZLTextTreeParagraph)paragraphs.get(index); - } - - public final ZLTextTreeParagraph createParagraph(ZLTextTreeParagraph parent) { - createParagraph(); - if (parent == null) { - parent = myRoot; - } - ZLTextTreeParagraphImpl tp = new ZLTextTreeParagraphImpl(parent, this); - myParagraphs.add(tp); - return tp; - } - - public final void removeParagraph(int index) { - ZLTextTreeParagraph p = getTreeParagraph(index); - p.removeFromParent(); - myParagraphs.remove(index); - } - - public final void clear() { - super.clear(); - myParagraphs.clear(); - } -} +package org.geometerplus.zlibrary.text.model.impl; + +import java.util.*; +import org.geometerplus.zlibrary.core.util.*; + +import org.geometerplus.zlibrary.text.model.*; + +public class ZLTextTreeModelImpl extends ZLTextModelImpl implements ZLTextTreeModel { + private final ArrayList myParagraphs = new ArrayList(); + private final ZLTextTreeParagraphImpl myRoot; + + public ZLTextTreeModelImpl() { + super(4096); + myRoot = new ZLTextTreeParagraphImpl(null, this); + myRoot.open(true); + } + + public final int getParagraphsNumber() { + return myParagraphs.size(); + } + + public final ZLTextParagraph getParagraph(int index) { + final ArrayList paragraphs = myParagraphs; + if (index >= paragraphs.size()) { + index = paragraphs.size() - 1; + } + return (ZLTextParagraph)paragraphs.get(index); + } + + public final ZLTextTreeParagraph getTreeParagraph(int index) { + final ArrayList paragraphs = myParagraphs; + if (index >= paragraphs.size()) { + index = paragraphs.size() - 1; + } + return (ZLTextTreeParagraph)paragraphs.get(index); + } + + public final ZLTextTreeParagraph createParagraph(ZLTextTreeParagraph parent) { + createParagraph(); + if (parent == null) { + parent = myRoot; + } + ZLTextTreeParagraphImpl tp = new ZLTextTreeParagraphImpl(parent, this); + myParagraphs.add(tp); + return tp; + } + + public final void removeParagraph(int index) { + ZLTextTreeParagraph p = getTreeParagraph(index); + p.removeFromParent(); + myParagraphs.remove(index); + } + + public final void clear() { + super.clear(); + myParagraphs.clear(); + } +} diff --git a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextTreeParagraphImpl.java b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextTreeParagraphImpl.java index 83842c72a..f76e2825f 100644 --- a/src/org/geometerplus/zlibrary/text/model/impl/ZLTextTreeParagraphImpl.java +++ b/src/org/geometerplus/zlibrary/text/model/impl/ZLTextTreeParagraphImpl.java @@ -17,93 +17,93 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.model.impl; - -import java.util.*; -import org.geometerplus.zlibrary.core.util.*; -import org.geometerplus.zlibrary.text.model.ZLTextTreeParagraph; - -final class ZLTextTreeParagraphImpl extends ZLTextParagraphImpl implements ZLTextTreeParagraph { - private boolean myIsOpen; - private int myDepth; - private ZLTextTreeParagraphImpl myParent; - private ArrayList myChildren = null; - - ZLTextTreeParagraphImpl(ZLTextTreeParagraph parent, ZLTextModelImpl model) { - super(model); - myParent = (ZLTextTreeParagraphImpl)parent; - if (parent != null) { - myParent.addChild(this); - myDepth = parent.getDepth() + 1; - } - } - - public byte getKind() { - return Kind.TREE_PARAGRAPH; - } - - public boolean isOpen() { - return myIsOpen; - } - - public void open(boolean o) { - myIsOpen = o; - } - - public void openTree() { - ZLTextTreeParagraph parent = myParent; - while (parent != null) { - parent.open(true); - parent = parent.getParent(); - } - } - - public int getDepth() { - return myDepth; - } - - public ZLTextTreeParagraph getParent() { - return myParent; - } - - public boolean hasChildren() { - return (myChildren != null) && !myChildren.isEmpty(); - } - - public boolean isLastChild() { - if (myParent == null) { - return false; - } - ArrayList siblings = myParent.myChildren; - return this == siblings.get(siblings.size() - 1); - } - - public int getFullSize() { - int size = 1; - final ArrayList children = myChildren; - if (children != null) { - final int length = children.size(); - for (int i = 0; i < length; ++i) { - size += ((ZLTextTreeParagraph)children.get(i)).getFullSize(); - } - } - return size; - } - - public void removeFromParent() { - if (myParent != null) { - myParent.myChildren.remove(this); - } - } - - public ArrayList getChildren() { - return myChildren; - } - - private void addChild(ZLTextTreeParagraph child) { - if (myChildren == null) { - myChildren = new ArrayList(); - } - myChildren.add(child); - } -} +package org.geometerplus.zlibrary.text.model.impl; + +import java.util.*; +import org.geometerplus.zlibrary.core.util.*; +import org.geometerplus.zlibrary.text.model.ZLTextTreeParagraph; + +final class ZLTextTreeParagraphImpl extends ZLTextParagraphImpl implements ZLTextTreeParagraph { + private boolean myIsOpen; + private int myDepth; + private ZLTextTreeParagraphImpl myParent; + private ArrayList myChildren = null; + + ZLTextTreeParagraphImpl(ZLTextTreeParagraph parent, ZLTextModelImpl model) { + super(model); + myParent = (ZLTextTreeParagraphImpl)parent; + if (parent != null) { + myParent.addChild(this); + myDepth = parent.getDepth() + 1; + } + } + + public byte getKind() { + return Kind.TREE_PARAGRAPH; + } + + public boolean isOpen() { + return myIsOpen; + } + + public void open(boolean o) { + myIsOpen = o; + } + + public void openTree() { + ZLTextTreeParagraph parent = myParent; + while (parent != null) { + parent.open(true); + parent = parent.getParent(); + } + } + + public int getDepth() { + return myDepth; + } + + public ZLTextTreeParagraph getParent() { + return myParent; + } + + public boolean hasChildren() { + return (myChildren != null) && !myChildren.isEmpty(); + } + + public int childNumber() { + return (myChildren != null) ? myChildren.size() : 0; + } + + public boolean isLastChild() { + if (myParent == null) { + return false; + } + ArrayList siblings = myParent.myChildren; + return this == siblings.get(siblings.size() - 1); + } + + public int getFullSize() { + int size = 1; + final ArrayList children = myChildren; + if (children != null) { + final int length = children.size(); + for (int i = 0; i < length; ++i) { + size += ((ZLTextTreeParagraph)children.get(i)).getFullSize(); + } + } + return size; + } + + public void removeFromParent() { + if (myParent != null) { + myParent.myChildren.remove(this); + } + } + + private void addChild(ZLTextTreeParagraph child) { + if (myChildren == null) { + myChildren = new ArrayList(); + } + myChildren.add(child); + } +} diff --git a/src/org/geometerplus/zlibrary/text/view/ZLTextAlignmentOptionEntry.java b/src/org/geometerplus/zlibrary/text/view/ZLTextAlignmentOptionEntry.java index f82001f1d..0a15a5dd8 100644 --- a/src/org/geometerplus/zlibrary/text/view/ZLTextAlignmentOptionEntry.java +++ b/src/org/geometerplus/zlibrary/text/view/ZLTextAlignmentOptionEntry.java @@ -17,74 +17,67 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.view; - -import java.util.ArrayList; - -import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry; -import org.geometerplus.zlibrary.core.options.ZLIntegerOption; -import org.geometerplus.zlibrary.core.resources.ZLResource; - -public class ZLTextAlignmentOptionEntry extends ZLComboOptionEntry { - private static final String KEY_LEFT = "left"; - private static final String KEY_RIGHT = "right"; - private static final String KEY_CENTER = "center"; - private static final String KEY_JUSTIFY = "justify"; - private static final String KEY_UNCHANGED = "unchanged"; - - private static final ArrayList/**/ ourValues4 = new ArrayList(); - private static final ArrayList/**/ ourValues5 = new ArrayList(); - private final ZLResource myResource; - private ZLIntegerOption myOption; - private boolean myAllowUndefined; - - private ArrayList values4() { - if (ourValues4.size() == 0) { - ourValues4.add(myResource.getResource(KEY_LEFT).getValue()); - ourValues4.add(myResource.getResource(KEY_RIGHT).getValue()); - ourValues4.add(myResource.getResource(KEY_CENTER).getValue()); - ourValues4.add(myResource.getResource(KEY_JUSTIFY).getValue()); - } - return ourValues4; - } - - private ArrayList values5() { - if (ourValues5.size() == 0) { - ourValues5.add(myResource.getResource(KEY_UNCHANGED).getValue()); - ourValues5.add(myResource.getResource(KEY_LEFT).getValue()); - ourValues5.add(myResource.getResource(KEY_RIGHT).getValue()); - ourValues5.add(myResource.getResource(KEY_CENTER).getValue()); - ourValues5.add(myResource.getResource(KEY_JUSTIFY).getValue()); - } - return ourValues5; - } - - public ZLTextAlignmentOptionEntry(ZLIntegerOption option, final ZLResource resource, - boolean allowUndefined) { - myAllowUndefined = allowUndefined; - myOption = option; - myResource = resource; - } - - public ArrayList getValues() { - return myAllowUndefined ? values5() : values4(); - } - - public String initialValue() { - int value = myOption.getValue(); - if (value >= values5().size()) { - value = 0; - } - return (String) values5().get(value); - } - - public void onAccept(String value) { - for (int i = 0; i < values5().size(); ++i) { - if (values5().get(i).equals(value)) { - myOption.setValue(i); - break; - } - } - } - -} +package org.geometerplus.zlibrary.text.view; + +import java.util.ArrayList; + +import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry; +import org.geometerplus.zlibrary.core.options.ZLIntegerOption; +import org.geometerplus.zlibrary.core.resources.ZLResource; + +public class ZLTextAlignmentOptionEntry extends ZLComboOptionEntry { + private static final String KEY_LEFT = "left"; + private static final String KEY_RIGHT = "right"; + private static final String KEY_CENTER = "center"; + private static final String KEY_JUSTIFY = "justify"; + private static final String KEY_UNCHANGED = "unchanged"; + + private static final ArrayList ourValues4 = new ArrayList(); + private static final ArrayList ourValues5 = new ArrayList(); + + private final ZLResource myResource; + private final ZLIntegerOption myOption; + private final boolean myAllowUndefined; + + public ZLTextAlignmentOptionEntry(ZLIntegerOption option, final ZLResource resource, boolean allowUndefined) { + myAllowUndefined = allowUndefined; + myOption = option; + myResource = resource; + if (ourValues5.isEmpty()) { + ourValues5.add(resource.getResource(KEY_UNCHANGED).getValue()); + String value = resource.getResource(KEY_LEFT).getValue(); + ourValues5.add(value); + ourValues4.add(value); + value = resource.getResource(KEY_RIGHT).getValue(); + ourValues5.add(value); + ourValues4.add(value); + value = resource.getResource(KEY_CENTER).getValue(); + ourValues5.add(value); + ourValues4.add(value); + value = resource.getResource(KEY_JUSTIFY).getValue(); + ourValues5.add(value); + ourValues4.add(value); + } + } + + public ArrayList getValues() { + return myAllowUndefined ? ourValues5 : ourValues4; + } + + public String initialValue() { + int value = myOption.getValue(); + if ((value < 0) || (value >= 5)) { + value = 0; + } + return (String)ourValues5.get(value); + } + + public void onAccept(String value) { + for (int i = 0; i < 5; ++i) { + if (ourValues5.get(i).equals(value)) { + myOption.setValue(i); + break; + } + } + } +} diff --git a/src/org/geometerplus/zlibrary/text/view/ZLTextFontFamilyWithBaseOptionEntry.java b/src/org/geometerplus/zlibrary/text/view/ZLTextFontFamilyWithBaseOptionEntry.java index d56deac8c..d7cac5b04 100644 --- a/src/org/geometerplus/zlibrary/text/view/ZLTextFontFamilyWithBaseOptionEntry.java +++ b/src/org/geometerplus/zlibrary/text/view/ZLTextFontFamilyWithBaseOptionEntry.java @@ -17,40 +17,40 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.view; - -import java.util.ArrayList; - -import org.geometerplus.zlibrary.core.optionEntries.ZLFontFamilyOptionEntry; -import org.geometerplus.zlibrary.core.options.ZLStringOption; -import org.geometerplus.zlibrary.core.resources.ZLResource; -import org.geometerplus.zlibrary.core.view.ZLPaintContext; - -public class ZLTextFontFamilyWithBaseOptionEntry extends ZLFontFamilyOptionEntry { - private static final String KEY_UNCHANGED = "unchanged"; - private static final ArrayList /**/ ourAllFamilies = new ArrayList(); - private final ZLResource myResource; - - public ZLTextFontFamilyWithBaseOptionEntry(ZLStringOption option, ZLPaintContext context, ZLResource resource) { - super(option, context); - myResource = resource; - } - - public ArrayList getValues() { - if (ourAllFamilies.size() == 0) { - final ArrayList families = super.getValues(); - ourAllFamilies.add(myResource.getResource(KEY_UNCHANGED).getValue()); - ourAllFamilies.addAll(families); - } - return ourAllFamilies; - } - - public String initialValue() { - final String value = super.initialValue(); - return (value == null || value.equals("")) ? (String) (getValues().get(0)) : value; - } - - public void onAccept(String value) { - super.onAccept((value.equals(getValues().get(0))) ? "" : value); - } -} +package org.geometerplus.zlibrary.text.view; + +import java.util.ArrayList; + +import org.geometerplus.zlibrary.core.optionEntries.ZLFontFamilyOptionEntry; +import org.geometerplus.zlibrary.core.options.ZLStringOption; +import org.geometerplus.zlibrary.core.resources.ZLResource; +import org.geometerplus.zlibrary.core.view.ZLPaintContext; + +public class ZLTextFontFamilyWithBaseOptionEntry extends ZLFontFamilyOptionEntry { + private static final ArrayList ourAllFamilies = new ArrayList(); + + private final ZLResource myResource; + + public ZLTextFontFamilyWithBaseOptionEntry(ZLStringOption option, ZLPaintContext context, ZLResource resource) { + super(option, context); + myResource = resource; + } + + public ArrayList getValues() { + if (ourAllFamilies.size() == 0) { + final ArrayList families = super.getValues(); + ourAllFamilies.add(myResource.getResource("unchanged").getValue()); + ourAllFamilies.addAll(families); + } + return ourAllFamilies; + } + + public String initialValue() { + final String value = super.initialValue(); + return ((value == null) || (value.length() == 0)) ? (String)(getValues().get(0)) : value; + } + + public void onAccept(String value) { + super.onAccept((value.equals(getValues().get(0))) ? "" : value); + } +} diff --git a/src/org/geometerplus/zlibrary/text/view/ZLTextLineSpaceOptionEntry.java b/src/org/geometerplus/zlibrary/text/view/ZLTextLineSpaceOptionEntry.java index fa07a4be0..f5e7a61d7 100644 --- a/src/org/geometerplus/zlibrary/text/view/ZLTextLineSpaceOptionEntry.java +++ b/src/org/geometerplus/zlibrary/text/view/ZLTextLineSpaceOptionEntry.java @@ -17,62 +17,61 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.view; - -import java.util.ArrayList; -import org.geometerplus.zlibrary.core.util.*; - -import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry; -import org.geometerplus.zlibrary.core.options.ZLIntegerOption; -import org.geometerplus.zlibrary.core.resources.ZLResource; - - -public class ZLTextLineSpaceOptionEntry extends ZLComboOptionEntry { - private static final String KEY_UNCHANGED = "unchanged"; - private static final ArrayList/**/ ourAllValues = new ArrayList(); - private static final ArrayList/**/ ourAllValuesPlusBase = new ArrayList(); - private final ZLResource myResource; - private ZLIntegerOption myOption; - private boolean myAllowBase; - - public ZLTextLineSpaceOptionEntry(ZLIntegerOption option, final ZLResource resource, - boolean allowBase) { - myAllowBase = allowBase; - myResource = resource; - myOption = option; - if (ourAllValuesPlusBase.size() == 0) { - for (int i = 5; i <= 20; ++i) { - ourAllValues.add("" + (char)(i / 10 + '0') + '.' + (char)(i % 10 + '0')); - } - ourAllValuesPlusBase.add(myResource.getResource(KEY_UNCHANGED).getValue()); - ourAllValuesPlusBase.addAll(ourAllValues); - } - } - - public ArrayList getValues() { - return myAllowBase ? ourAllValuesPlusBase : ourAllValues; - } - - public String initialValue() { - final int value = myOption.getValue(); - if (value == -1) { - return (String) ourAllValuesPlusBase.get(0); - } - final int index = Math.max(0, Math.min(15, (value + 5) / 10 - 5)); - return (String) ourAllValues.get(index); - } - - public void onAccept(String value) { - if (ourAllValuesPlusBase.get(0).equals(value)) { - myOption.setValue(-1); - } else { - for (int i = 5; i <= 20; ++i) { - if (ourAllValues.get(i - 5).equals(value)) { - myOption.setValue(10 * i); - break; - } - } - } - } - -} +package org.geometerplus.zlibrary.text.view; + +import java.util.ArrayList; +import org.geometerplus.zlibrary.core.util.*; + +import org.geometerplus.zlibrary.core.dialogs.ZLComboOptionEntry; +import org.geometerplus.zlibrary.core.options.ZLIntegerOption; +import org.geometerplus.zlibrary.core.resources.ZLResource; + + +public class ZLTextLineSpaceOptionEntry extends ZLComboOptionEntry { + private static final String KEY_UNCHANGED = "unchanged"; + private static final ArrayList ourAllValues = new ArrayList(); + private static final ArrayList ourAllValuesPlusBase = new ArrayList(); + + private final ZLIntegerOption myOption; + private final ZLResource myResource; + private final boolean myAllowBase; + + public ZLTextLineSpaceOptionEntry(ZLIntegerOption option, final ZLResource resource, boolean allowBase) { + myOption = option; + myResource = resource; + myAllowBase = allowBase; + if (ourAllValuesPlusBase.size() == 0) { + for (int i = 5; i <= 20; ++i) { + ourAllValues.add("" + (char)(i / 10 + '0') + '.' + (char)(i % 10 + '0')); + } + ourAllValuesPlusBase.add(myResource.getResource(KEY_UNCHANGED).getValue()); + ourAllValuesPlusBase.addAll(ourAllValues); + } + } + + public ArrayList getValues() { + return myAllowBase ? ourAllValuesPlusBase : ourAllValues; + } + + public String initialValue() { + final int value = myOption.getValue(); + if (value == -1) { + return (String) ourAllValuesPlusBase.get(0); + } + final int index = Math.max(0, Math.min(15, (value + 5) / 10 - 5)); + return (String) ourAllValues.get(index); + } + + public void onAccept(String value) { + if (ourAllValuesPlusBase.get(0).equals(value)) { + myOption.setValue(-1); + } else { + for (int i = 5; i <= 20; ++i) { + if (ourAllValues.get(i - 5).equals(value)) { + myOption.setValue(10 * i); + break; + } + } + } + } +} diff --git a/src/org/geometerplus/zlibrary/text/view/ZLTextView.java b/src/org/geometerplus/zlibrary/text/view/ZLTextView.java index 42c381b65..670a380d6 100644 --- a/src/org/geometerplus/zlibrary/text/view/ZLTextView.java +++ b/src/org/geometerplus/zlibrary/text/view/ZLTextView.java @@ -41,7 +41,7 @@ public abstract class ZLTextView extends ZLView { public abstract void scrollPage(boolean forward, int scrollingMode, int value); - public abstract void search(final String text, boolean ignoreCase, boolean wholeText, boolean backward, boolean thisSectionOnly); + public abstract void search(String text, boolean ignoreCase, boolean wholeText, boolean backward, boolean thisSectionOnly); public abstract boolean canFindNext(); public abstract void findNext(); diff --git a/src/org/geometerplus/zlibrary/text/view/impl/ZLTextParagraphCursor.java b/src/org/geometerplus/zlibrary/text/view/impl/ZLTextParagraphCursor.java index 8272ceb86..fdac77a6b 100644 --- a/src/org/geometerplus/zlibrary/text/view/impl/ZLTextParagraphCursor.java +++ b/src/org/geometerplus/zlibrary/text/view/impl/ZLTextParagraphCursor.java @@ -73,7 +73,7 @@ public abstract class ZLTextParagraphCursor { if (image != null) { ZLImageData data = ZLImageManager.getInstance().getImageData(image); if (data != null) { - elements.add(new ZLTextImageElement(imageEntry.getId(), data)); + elements.add(new ZLTextImageElement(imageEntry.Id, data)); } } break; diff --git a/src/org/geometerplus/zlibrary/text/view/impl/ZLTextSelectionModel.java b/src/org/geometerplus/zlibrary/text/view/impl/ZLTextSelectionModel.java index a9f05c602..d7784983f 100644 --- a/src/org/geometerplus/zlibrary/text/view/impl/ZLTextSelectionModel.java +++ b/src/org/geometerplus/zlibrary/text/view/impl/ZLTextSelectionModel.java @@ -22,6 +22,21 @@ package org.geometerplus.zlibrary.text.view.impl; import org.geometerplus.zlibrary.core.application.ZLApplication; class ZLTextSelectionModel { + private final static class BoundElement { + boolean Exists; + int ParagraphNumber; + int TextElementNumber; + int CharNumber; + + //bool operator == (const BoundElement &element) const; + //bool operator != (const BoundElement &element) const; + }; + + private final static class Bound { + final BoundElement Before = new BoundElement(); + final BoundElement After = new BoundElement(); + }; + private final ZLTextViewImpl myView; private final ZLApplication myApplication; @@ -30,13 +45,26 @@ class ZLTextSelectionModel { private boolean myDoUpdate; private boolean myTextIsUpToDate = true; + private final Bound myFirstBound = new Bound(); + private final Bound mySecondBound = new Bound(); + ZLTextSelectionModel(ZLTextViewImpl view, ZLApplication application) { myView = view; myApplication = application; } void activate(int x, int y) { - // TODO: implement + if (myView.myTextElementMap.isEmpty()) { + return; + } + + myIsActive = true; + myIsEmpty = false; + //setBound(myFirstBound, x, y); + //mySecondBound = myFirstBound; + //myCursor.clear(); + //myText.erase(); + myTextIsUpToDate = true; } boolean extendTo(int x, int y) { @@ -66,13 +94,7 @@ class ZLTextSelectionModel { return false; } - class BoundElement { - boolean Exists; - int ParagraphNumber; - int TextElementNumber; - int CharNumber; - - //bool operator == (const BoundElement &element) const; - //bool operator != (const BoundElement &element) const; - }; + private void setBound(Bound bound, int x, int y) { + // TODO: implement + } } diff --git a/src/org/geometerplus/zlibrary/text/view/impl/ZLTextViewImpl.java b/src/org/geometerplus/zlibrary/text/view/impl/ZLTextViewImpl.java index d2cdc0c0d..377bb57a0 100644 --- a/src/org/geometerplus/zlibrary/text/view/impl/ZLTextViewImpl.java +++ b/src/org/geometerplus/zlibrary/text/view/impl/ZLTextViewImpl.java @@ -94,7 +94,7 @@ public abstract class ZLTextViewImpl extends ZLTextView { private boolean myTreeStateIsFrozen = false; - private final ZLTextRectangularAreaVector myTextElementMap + final ZLTextRectangularAreaVector myTextElementMap = new ZLTextRectangularAreaVector(); private final ZLTextRectangularAreaVector myTreeNodeMap = new ZLTextRectangularAreaVector(); @@ -511,7 +511,7 @@ public abstract class ZLTextViewImpl extends ZLTextView { for (int wordNumber = info.RealStartWordNumber; wordNumber != endWordNumber; ++wordNumber, charNumber = 0) { final ZLTextElement element = paragraph.getElement(wordNumber); if ((element instanceof ZLTextWord) || (element instanceof ZLTextImageElement)) { - ZLTextElementArea area = (ZLTextElementArea)myTextElementMap.getArea(index++); + final ZLTextElementArea area = (ZLTextElementArea)myTextElementMap.getArea(index++); if (area.ChangeStyle) { setTextStyle(area.Style); } @@ -519,9 +519,9 @@ public abstract class ZLTextViewImpl extends ZLTextView { final int y = area.YEnd - getElementDescent(context, element) - myTextStyle.getVerticalShift(); context.moveXTo(x); if (element instanceof ZLTextWord) { - drawWord(x, y, (ZLTextWord) element, charNumber, -1, false); + drawWord(x, y, (ZLTextWord)element, charNumber, -1, false); } else { - context.drawImage(x, y, ((ZLTextImageElement) element).ImageData); + context.drawImage(x, y, ((ZLTextImageElement)element).ImageData); } } } @@ -673,9 +673,7 @@ public abstract class ZLTextViewImpl extends ZLTextView { if (isFirstLine) { ZLTextElement element = paragraphCursor.getElement(currentWordIndex); while (element instanceof ZLTextControlElement) { - if (element instanceof ZLTextControlElement) { - applyControl((ZLTextControlElement) element); - } + applyControl((ZLTextControlElement)element); ++currentWordIndex; currentCharNumber = 0; if (currentWordIndex == endIndex) { @@ -744,7 +742,7 @@ public abstract class ZLTextViewImpl extends ZLTextView { wordOccurred = true; isVisible = true; } else if (element instanceof ZLTextControlElement) { - applyControl((ZLTextControlElement) element); + applyControl((ZLTextControlElement)element); } else if (element instanceof ZLTextImageElement) { wordOccurred = true; isVisible = true; @@ -894,7 +892,7 @@ public abstract class ZLTextViewImpl extends ZLTextView { } else if ((element instanceof ZLTextWord) || (element instanceof ZLTextImageElement)) { final int height = getElementHeight(element); final int descent = getElementDescent(context, element); - final int length = (element instanceof ZLTextWord) ? ((ZLTextWord) element).Length : 0; + final int length = (element instanceof ZLTextWord) ? ((ZLTextWord)element).Length : 0; myTextElementMap.add(new ZLTextElementArea(paragraphNumber, wordNumber, charNumber, length, false, changeStyle, myTextStyle, element, x, x + width - 1, y - height + 1, y + descent)); changeStyle = false; diff --git a/src/org/geometerplus/zlibrary/text/view/style/HyperlinkStyle.java b/src/org/geometerplus/zlibrary/text/view/style/HyperlinkStyle.java index b6aec7fb1..d1cdc0873 100644 --- a/src/org/geometerplus/zlibrary/text/view/style/HyperlinkStyle.java +++ b/src/org/geometerplus/zlibrary/text/view/style/HyperlinkStyle.java @@ -17,10 +17,10 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.view.style; - -interface HyperlinkStyle { - byte NONE = 0; - byte INTERNAL = 1; - byte EXTERNAL = 2; -} +package org.geometerplus.zlibrary.text.view.style; + +interface HyperlinkStyle { + byte NONE = 0; + byte INTERNAL = 1; + byte EXTERNAL = 2; +} diff --git a/src/org/geometerplus/zlibrary/text/view/style/ZLTextBaseStyle.java b/src/org/geometerplus/zlibrary/text/view/style/ZLTextBaseStyle.java index fba137400..565c32973 100644 --- a/src/org/geometerplus/zlibrary/text/view/style/ZLTextBaseStyle.java +++ b/src/org/geometerplus/zlibrary/text/view/style/ZLTextBaseStyle.java @@ -26,10 +26,10 @@ import org.geometerplus.zlibrary.text.view.ZLTextStyle; import org.geometerplus.zlibrary.text.model.ZLTextAlignmentType; public class ZLTextBaseStyle implements ZLTextStyle { - private final String CATEGORY = ZLOption.LOOK_AND_FEEL_CATEGORY; - private final String COLORS = "Colors"; - private final String GROUP = "Style"; - private final String OPTIONS = "Options"; + private static final String CATEGORY = ZLOption.LOOK_AND_FEEL_CATEGORY; + private static final String COLORS = "Colors"; + private static final String GROUP = "Style"; + private static final String OPTIONS = "Options"; public final ZLColorOption BackgroundColorOption = new ZLColorOption(CATEGORY, COLORS, "Background", new ZLColor(255, 255, 255)); diff --git a/src/org/geometerplus/zlibrary/text/view/style/ZLTextPositionIndicatorStyle.java b/src/org/geometerplus/zlibrary/text/view/style/ZLTextPositionIndicatorStyle.java deleted file mode 100644 index 56657c81c..000000000 --- a/src/org/geometerplus/zlibrary/text/view/style/ZLTextPositionIndicatorStyle.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2007-2008 Geometer Plus - * - * 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.text.view.style; - -import org.geometerplus.zlibrary.core.options.ZLBooleanOption; -import org.geometerplus.zlibrary.core.options.ZLColorOption; -import org.geometerplus.zlibrary.core.options.ZLIntegerRangeOption; - -public class ZLTextPositionIndicatorStyle { - public ZLBooleanOption ShowOption; - public ZLBooleanOption IsSensitiveOption; - public ZLBooleanOption ShowTextPositionOption; - public ZLBooleanOption ShowTimeOption; - public ZLColorOption ColorOption; - public ZLIntegerRangeOption HeightOption; - public ZLIntegerRangeOption OffsetOption; - public ZLIntegerRangeOption FontSizeOption; - - public ZLTextPositionIndicatorStyle() { -// TODO -/* final String INDICATOR = "indicator"; - ShowOption = new ZLBooleanOption(ZLOption.LOOK_AND_FEEL_CATEGORY, INDICATOR, "Show", true); - IsSensitiveOption = new ZLBooleanOption(ZLOption.LOOK_AND_FEEL_CATEGORY, INDICATOR, "TouchSensitive", true); - ShowTextPositionOption = new ZLBooleanOption(ZLOption.LOOK_AND_FEEL_CATEGORY, INDICATOR, "PositionText", true); - ShowTimeOption = new ZLBooleanOption(ZLOption.LOOK_AND_FEEL_CATEGORY, INDICATOR, "Time", true); - ColorOption = new ZLColorOption(ZLOption.LOOK_AND_FEEL_CATEGORY, INDICATOR, "Color", ZLColor(127, 127, 127)); - HeightOption = new ZLIntegerRangeOption(ZLOption.LOOK_AND_FEEL_CATEGORY, INDICATOR, "Height", 1, 100, 16); - OffsetOption = new ZLIntegerRangeOption(ZLOption.LOOK_AND_FEEL_CATEGORY, INDICATOR, "Offset", 0, 100, 3); - FontSizeOption = new ZLIntegerRangeOption(ZLOption.LOOK_AND_FEEL_CATEGORY, INDICATOR, "FontSize", 4, 72, 14); -*/ - } -} diff --git a/src/org/geometerplus/zlibrary/text/view/style/ZLTextStyleCollection.java b/src/org/geometerplus/zlibrary/text/view/style/ZLTextStyleCollection.java index 83bdfaf74..5fbd00672 100644 --- a/src/org/geometerplus/zlibrary/text/view/style/ZLTextStyleCollection.java +++ b/src/org/geometerplus/zlibrary/text/view/style/ZLTextStyleCollection.java @@ -17,149 +17,144 @@ * 02110-1301, USA. */ -package org.geometerplus.zlibrary.text.view.style; - -import org.geometerplus.zlibrary.core.library.ZLibrary; -import org.geometerplus.zlibrary.core.util.ZLBoolean3; -import org.geometerplus.zlibrary.core.xml.*; -import org.geometerplus.zlibrary.text.model.ZLTextAlignmentType; -import org.geometerplus.zlibrary.text.view.ZLTextStyle; - -public class ZLTextStyleCollection { - private static ZLTextStyleCollection ourInstance = null; - - private ZLTextBaseStyle myBaseStyle; - private ZLTextPositionIndicatorStyle myIndicatorStyle; - private final ZLTextStyleDecoration[] myDecorationMap = new ZLTextStyleDecoration[256]; - - private ZLTextStyleCollection() { - new TextStyleReader(this).read(ZLibrary.JAR_DATA_PREFIX + "data/default/styles.xml"); - if (myBaseStyle == null) { - myBaseStyle = new ZLTextBaseStyle("", 20); - } - } - - public static ZLTextStyleCollection getInstance() { - if (ourInstance == null) { - ourInstance = new ZLTextStyleCollection(); - } - return ourInstance; - } - - public static void deleteInstance() { - ourInstance = null; - } - - public ZLTextBaseStyle getBaseStyle() { - return myBaseStyle; - } - - public ZLTextPositionIndicatorStyle getIndicatorStyle() { - return myIndicatorStyle; - } - - public ZLTextStyleDecoration getDecoration(byte kind) { - return myDecorationMap[kind & 0xFF]; - } - - public ZLTextBaseStyle baseStyle() { - return myBaseStyle; - } - - private static class TextStyleReader extends ZLXMLReaderAdapter { - private ZLTextStyleCollection myCollection; - - private static int intValue(ZLStringMap attributes, String name, int defaultValue) { - int i = defaultValue; - String value = attributes.getValue(name); - if (value != null) { - try { - i = Integer.parseInt(value); - } catch (NumberFormatException e) { - e.printStackTrace(); - } - } - return i; - } - - private static boolean booleanValue(ZLStringMap attributes, String name) { - return "true" == attributes.getValue(name); - } - - private static int b3Value(ZLStringMap attributes, String name) { - return ZLBoolean3.getByString(attributes.getValue(name)); - } - - public TextStyleReader(ZLTextStyleCollection collection) { - myCollection = collection; - } - - public boolean startElementHandler(String tag, ZLStringMap attributes) { - final String BASE = "base"; - final String STYLE = "style"; - - if (BASE.equals(tag)) { - myCollection.myBaseStyle = new ZLTextBaseStyle(attributes.getValue("family"), intValue(attributes, "fontSize", 0)); - } else if (STYLE.equals(tag)) { - String idString = attributes.getValue("id"); - String name = attributes.getValue("name"); - if ((idString != null) && (name != null)) { - byte id = Byte.parseByte(idString); - ZLTextStyleDecoration decoration; - - int fontSizeDelta = intValue(attributes, "fontSizeDelta", 0); - int bold = b3Value(attributes, "bold"); - int italic = b3Value(attributes, "italic"); - int verticalShift = intValue(attributes, "vShift", 0); - int allowHyphenations = b3Value(attributes, "allowHyphenations"); - byte hyperlinkStyle = HyperlinkStyle.NONE; - String hyperlink = attributes.getValue("hyperlink"); - if (hyperlink != null) { - if ("internal".equals(hyperlink)) { - hyperlinkStyle = HyperlinkStyle.INTERNAL; - } - if ("external".equals(hyperlink)) { - hyperlinkStyle = HyperlinkStyle.EXTERNAL; - } - } - - if (booleanValue(attributes, "partial")) { - decoration = new ZLTextStyleDecoration(name, fontSizeDelta, bold, italic, verticalShift, allowHyphenations); - } else { - int spaceBefore = intValue(attributes, "spaceBefore", 0); - int spaceAfter = intValue(attributes, "spaceAfter", 0); - int leftIndent = intValue(attributes, "leftIndent", 0); - int rightIndent = intValue(attributes, "rightIndent", 0); - int firstLineIndentDelta = intValue(attributes, "firstLineIndentDelta", 0); - - byte alignment = ZLTextAlignmentType.ALIGN_UNDEFINED; - String alignmentString = attributes.getValue("alignment"); - if (alignmentString != null) { - if (alignmentString.equals("left")) { - alignment = ZLTextAlignmentType.ALIGN_LEFT; - } else if (alignmentString.equals("right")) { - alignment = ZLTextAlignmentType.ALIGN_RIGHT; - } else if (alignmentString.equals("center")) { - alignment = ZLTextAlignmentType.ALIGN_CENTER; - } else if (alignmentString.equals("justify")) { - alignment = ZLTextAlignmentType.ALIGN_JUSTIFY; - } - } - final int lineSpacePercent = intValue(attributes, "lineSpacingPercent", -1); - - decoration = new ZLTextFullStyleDecoration(name, fontSizeDelta, bold, italic, spaceBefore, spaceAfter, leftIndent, rightIndent, firstLineIndentDelta, verticalShift, alignment, lineSpacePercent, allowHyphenations); - } - decoration.setHyperlinkStyle(hyperlinkStyle); - - String fontFamily = attributes.getValue("family"); - if (fontFamily != null) { - decoration.FontFamilyOption.setValue(fontFamily); - } - - myCollection.myDecorationMap[id & 0xFF] = decoration; - } - } - return false; - } - } -} +package org.geometerplus.zlibrary.text.view.style; + +import org.geometerplus.zlibrary.core.library.ZLibrary; +import org.geometerplus.zlibrary.core.util.ZLBoolean3; +import org.geometerplus.zlibrary.core.xml.*; +import org.geometerplus.zlibrary.text.model.ZLTextAlignmentType; +import org.geometerplus.zlibrary.text.view.ZLTextStyle; + +public class ZLTextStyleCollection { + private static ZLTextStyleCollection ourInstance = null; + + private ZLTextBaseStyle myBaseStyle; + private final ZLTextStyleDecoration[] myDecorationMap = new ZLTextStyleDecoration[256]; + + private ZLTextStyleCollection() { + new TextStyleReader(this).read(ZLibrary.JAR_DATA_PREFIX + "data/default/styles.xml"); + if (myBaseStyle == null) { + myBaseStyle = new ZLTextBaseStyle("", 20); + } + } + + public static ZLTextStyleCollection getInstance() { + if (ourInstance == null) { + ourInstance = new ZLTextStyleCollection(); + } + return ourInstance; + } + + public static void deleteInstance() { + ourInstance = null; + } + + public ZLTextBaseStyle getBaseStyle() { + return myBaseStyle; + } + + public ZLTextStyleDecoration getDecoration(byte kind) { + return myDecorationMap[kind & 0xFF]; + } + + public ZLTextBaseStyle baseStyle() { + return myBaseStyle; + } + + private static class TextStyleReader extends ZLXMLReaderAdapter { + private ZLTextStyleCollection myCollection; + + private static int intValue(ZLStringMap attributes, String name, int defaultValue) { + int i = defaultValue; + String value = attributes.getValue(name); + if (value != null) { + try { + i = Integer.parseInt(value); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + } + return i; + } + + private static boolean booleanValue(ZLStringMap attributes, String name) { + return "true" == attributes.getValue(name); + } + + private static int b3Value(ZLStringMap attributes, String name) { + return ZLBoolean3.getByString(attributes.getValue(name)); + } + + public TextStyleReader(ZLTextStyleCollection collection) { + myCollection = collection; + } + + public boolean startElementHandler(String tag, ZLStringMap attributes) { + final String BASE = "base"; + final String STYLE = "style"; + + if (BASE.equals(tag)) { + myCollection.myBaseStyle = new ZLTextBaseStyle(attributes.getValue("family"), intValue(attributes, "fontSize", 0)); + } else if (STYLE.equals(tag)) { + String idString = attributes.getValue("id"); + String name = attributes.getValue("name"); + if ((idString != null) && (name != null)) { + byte id = Byte.parseByte(idString); + ZLTextStyleDecoration decoration; + + int fontSizeDelta = intValue(attributes, "fontSizeDelta", 0); + int bold = b3Value(attributes, "bold"); + int italic = b3Value(attributes, "italic"); + int verticalShift = intValue(attributes, "vShift", 0); + int allowHyphenations = b3Value(attributes, "allowHyphenations"); + byte hyperlinkStyle = HyperlinkStyle.NONE; + String hyperlink = attributes.getValue("hyperlink"); + if (hyperlink != null) { + if ("internal".equals(hyperlink)) { + hyperlinkStyle = HyperlinkStyle.INTERNAL; + } + if ("external".equals(hyperlink)) { + hyperlinkStyle = HyperlinkStyle.EXTERNAL; + } + } + + if (booleanValue(attributes, "partial")) { + decoration = new ZLTextStyleDecoration(name, fontSizeDelta, bold, italic, verticalShift, allowHyphenations); + } else { + int spaceBefore = intValue(attributes, "spaceBefore", 0); + int spaceAfter = intValue(attributes, "spaceAfter", 0); + int leftIndent = intValue(attributes, "leftIndent", 0); + int rightIndent = intValue(attributes, "rightIndent", 0); + int firstLineIndentDelta = intValue(attributes, "firstLineIndentDelta", 0); + + byte alignment = ZLTextAlignmentType.ALIGN_UNDEFINED; + String alignmentString = attributes.getValue("alignment"); + if (alignmentString != null) { + if (alignmentString.equals("left")) { + alignment = ZLTextAlignmentType.ALIGN_LEFT; + } else if (alignmentString.equals("right")) { + alignment = ZLTextAlignmentType.ALIGN_RIGHT; + } else if (alignmentString.equals("center")) { + alignment = ZLTextAlignmentType.ALIGN_CENTER; + } else if (alignmentString.equals("justify")) { + alignment = ZLTextAlignmentType.ALIGN_JUSTIFY; + } + } + final int lineSpacePercent = intValue(attributes, "lineSpacingPercent", -1); + + decoration = new ZLTextFullStyleDecoration(name, fontSizeDelta, bold, italic, spaceBefore, spaceAfter, leftIndent, rightIndent, firstLineIndentDelta, verticalShift, alignment, lineSpacePercent, allowHyphenations); + } + decoration.setHyperlinkStyle(hyperlinkStyle); + + String fontFamily = attributes.getValue("family"); + if (fontFamily != null) { + decoration.FontFamilyOption.setValue(fontFamily); + } + + myCollection.myDecorationMap[id & 0xFF] = decoration; + } + } + return false; + } + } +}