Commit 1678503d577fa8efd91021a98e8d4a7728f42f4e

Authored by Marcin Woliński
1 parent 94f296fa

dodane GUI w Javie

Autorem GUI jest Piotr Rychlik

Uwzględnione tworzenie pakietu .deb i „dysku” dla MacOS
Showing 60 changed files with 3509 additions and 3 deletions
CMakeLists.txt
... ... @@ -4,7 +4,7 @@ project (Morfeusz)
4 4  
5 5 set (Morfeusz_VERSION_MAJOR 1)
6 6 set (Morfeusz_VERSION_MINOR 9)
7   -set (Morfeusz_VERSION_PATCH 11)
  7 +set (Morfeusz_VERSION_PATCH 12)
8 8 set (Morfeusz_VERSION "${Morfeusz_VERSION_MAJOR}.${Morfeusz_VERSION_MINOR}.${Morfeusz_VERSION_PATCH}")
9 9 set (Morfeusz_LIB_VERSION "${Morfeusz_VERSION}")
10 10 if (BUILT_ON)
... ... @@ -202,6 +202,7 @@ file (COPY fsabuilder doTest.sh testJavaWrapper.sh testPythonWrapper.sh morfeusz
202 202  
203 203 add_subdirectory (morfeusz)
204 204 add_subdirectory (fsabuilder)
  205 +add_subdirectory (gui)
205 206  
206 207 ########## add tests ##########
207 208  
... ...
createGUIDeb.sh 0 → 100755
  1 +#!/bin/bash
  2 +
  3 +SRC_DIR="$1"
  4 +BIN_DIR="$2"
  5 +LIB_VERSION="$3"
  6 +ARCH="$4"
  7 +TARGET_DIR="$5"
  8 +
  9 +PKG_NAME="morfeusz2-gui"
  10 +
  11 +PKG_DIR="$BIN_DIR/CMakeFiles/gui-deb.dir/${PKG_NAME}_${LIB_VERSION}"
  12 +echo Building GUI deb in $PKG_DIR
  13 +
  14 +mkdir -p "$PKG_DIR"
  15 +install -D "$SRC_DIR/gui/morfeusz.desktop" "$PKG_DIR/usr/share/applications/morfeusz.desktop"
  16 +install -D "$BIN_DIR/morfeusz.jar" "$PKG_DIR/usr/share/java/morfeusz.jar"
  17 +install -D "$SRC_DIR/gui/morfeusz.svg" "$PKG_DIR/usr/share/morfeusz2/morfeusz.svg"
  18 +install -D "$SRC_DIR/gui/morfeusz2-gui.menu" "$PKG_DIR/usr/share/menu/morfeusz2-gui"
  19 +install -D "$SRC_DIR/gui/morfeusz2-gui" "$PKG_DIR/usr/bin/morfeusz2-gui"
  20 +
  21 +
  22 +#SRC_DIR="$( cd "$( dirname "$0" )" && pwd )"
  23 +
  24 +"$SRC_DIR/createDeb.sh" "$PKG_NAME" \
  25 + "GUI for morphological analyzer Morfeusz 2" \
  26 + "Graphical user inferface for the morphological analyzer and generator Morfeusz 2 (used mainly for Polish)" \
  27 + "java-runtime, libjmorfeusz-java" "morfeusz2-gui" "$LIB_VERSION" "$ARCH" misc "$PKG_DIR" "$TARGET_DIR"
... ...
gui/CMakeLists.txt 0 → 100644
  1 +include(UseJava)
  2 +find_package(Java REQUIRED)
  3 +
  4 +# include_directories (${JAVA_INCLUDE_PATH})
  5 +# include_directories (${JAVA_INCLUDE_PATH2})
  6 +# include_directories (${CMAKE_SOURCE_DIR}/morfeusz)
  7 +
  8 +set(GUI_SOURCES
  9 + morfeusz/AboutDialog.java
  10 + morfeusz/Agent.java
  11 + morfeusz/DictSearchPathsDialog.java
  12 + morfeusz/Morfeusz.java
  13 + morfeusz/OptionsDialog.java
  14 + morfeusz/PlaceHolder.java
  15 + morfeusz/Preferences.java
  16 + morfeusz/RecentFileAction.java
  17 + morfeusz/ResultsPane.java
  18 + morfeusz/SelectFileDialog.java
  19 + morfeusz/ToolBarButton.java
  20 + )
  21 +
  22 +# set(GUI_IMAGES
  23 +# images/book_open_disabled.png images/book_open.png
  24 +# images/book_open_pressed.png images/book_open_roll_over.png
  25 +# images/conf.png images/conf_pressed.png images/conf_roll_over.png
  26 +# images/down.gif images/end_node.gif images/font_decrease.png
  27 +# images/font_decrease_pressed.png images/font_decrease_roll_over.png
  28 +# images/font_increase.png images/font_increase_pressed.png
  29 +# images/font_increase_roll_over.png images/info.png
  30 +# images/info_pressed.png images/info_roll_over.png images/open.png
  31 +# images/open_pressed.png images/open_roll_over.png images/return.png
  32 +# images/return_pressed.png images/return_roll_over.png
  33 +# images/save_disabled.png images/save.png images/save_pressed.png
  34 +# images/save_roll_over.png images/start_node.gif
  35 +# )
  36 +
  37 +# kopiujemy, żeby zip poniżej mógł je dodać bez ścieżki:
  38 +file(GLOB IMAGE_FILES "images/*")
  39 +file(COPY ${IMAGE_FILES} DESTINATION .)
  40 +file(COPY quitaboutpreferenceshandler/ DESTINATION quitaboutpreferenceshandler/)
  41 +
  42 +# to jest w zasadzie niepotrzebne, chyba że chcemy odpalić skompilowanego morfeusz.jar bez instalacji:
  43 +#file(COPY QuitAboutPreferencesHandler.jar DESTINATION .)
  44 +
  45 +add_jar (gui-proto-jar
  46 + SOURCES "${GUI_SOURCES}"
  47 + #"${GUI_IMAGES}"
  48 +# INCLUDE_JARS jmorfeusz.jar QuitAboutPreferencesHandler.jar images.jar
  49 +# INCLUDE_JARS ${CMAKE_CURRENT_BINARY_DIR}/../morfeusz/wrappers/java/jmorfeusz.jar QuitAboutPreferencesHandler.jar Images/*.png
  50 + INCLUDE_JARS jmorfeusz QuitAboutPreferencesHandler.jar
  51 + # ENTRY_POINT morfeusz/Morfeusz
  52 + MANIFEST MANIFEST.MF
  53 + OUTPUT_NAME morfeusz
  54 + )
  55 +
  56 +add_dependencies(gui-proto-jar jmorfeusz)
  57 +
  58 +add_custom_target(gui-jar
  59 + COMMAND zip -q morfeusz.jar "*.png"
  60 + COMMAND zip -q morfeusz.jar "*.gif"
  61 + COMMAND zip -q morfeusz.jar "quitaboutpreferenceshandler/*"
  62 + DEPENDS gui-proto-jar
  63 + )
  64 +
  65 +
  66 +add_custom_target (gui-deb
  67 + COMMAND "${PROJECT_SOURCE_DIR}/createGUIDeb.sh" "${PROJECT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" "${Morfeusz_DEB_VERSION}" "${ARCHITECTURE}" "${TARGET_DIR}"
  68 + DEPENDS gui-jar
  69 + )
  70 +
  71 +if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
  72 + set(MAC_APP_DIR "dmg/Morfeusz.app")
  73 + file(COPY Morfeusz.app/ DESTINATION "${MAC_APP_DIR}")
  74 + add_custom_target(gui-dmg
  75 + COMMAND install -D "${CMAKE_CURRENT_BINARY_DIR}/../morfeusz/libmorfeusz2.dylib" "${MAC_APP_DIR}/Contents/MacOS/libmorfeusz2.dylib"
  76 + COMMAND install -D "${CMAKE_CURRENT_BINARY_DIR}/../morfeusz/wrappers/java/libjmorfeusz.jnilib" "${MAC_APP_DIR}/Contents/MacOS/libjmorfeusz.jnilib"
  77 + COMMAND install -D "${CMAKE_CURRENT_BINARY_DIR}/morfeusz.jar" "${MAC_APP_DIR}/Contents/Java/morfeusz.jar"
  78 + COMMAND install -D "${CMAKE_CURRENT_BINARY_DIR}/../morfeusz/wrappers/java/jmorfeusz.jar" "${MAC_APP_DIR}/Contents/Java/jmorfeusz.jar"
  79 + COMMAND genisoimage -V Morfeusz2 -D -R -apple -no-pad -o "$TARGET_DIR/morfeusz2-gui_${Morfeusz_LIB_VERSION}.${DICT_VERSION}-${CMAKE_SYSTEM_NAME}-${ARCHITECTURE}.dmg" "dmg/"
  80 + )
  81 +endif ()
... ...
gui/MANIFEST.MF 0 → 100644
  1 +Manifest-Version: 1.0
  2 +Class-Path: /usr/share/java/jmorfeusz.jar jmorfeusz.jar
  3 +Main-Class: morfeusz.Morfeusz
... ...
gui/Morfeusz.app/Contents/Info.plist 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>English</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>JavaAppLauncher</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>morfeusz.Morfeusz</string>
  11 + <key>CFBundleDisplayName</key>
  12 + <string>Morfeusz</string>
  13 + <key>CFBundleInfoDictionaryVersion</key>
  14 + <string>6.0</string>
  15 + <key>CFBundleName</key>
  16 + <string>Morfeusz</string>
  17 + <key>CFBundlePackageType</key>
  18 + <string>APPL</string>
  19 + <key>CFBundleShortVersionString</key>
  20 + <string>2.0</string>
  21 + <key>CFBundleSignature</key>
  22 + <string>????</string>
  23 + <key>CFBundleVersion</key>
  24 + <string>2</string>
  25 + <key>NSHumanReadableCopyright</key>
  26 + <string>Instytut Podstaw Informatyki PAN</string>
  27 + <key>JVMMainClassName</key>
  28 + <string>morfeusz.Morfeusz</string>
  29 + <key>JVMOptions</key>
  30 + <array>
  31 + </array>
  32 + <key>JVMArguments</key>
  33 + <array>
  34 + </array>
  35 +</dict>
  36 +</plist>
... ...
gui/Morfeusz.app/Contents/Java/.exists 0 → 100644
gui/Morfeusz.app/Contents/MacOS/JavaAppLauncher 0 → 100755
No preview for this file type
gui/Morfeusz.app/Contents/Resources/.exists 0 → 100644
gui/QuitAboutPreferencesHandler.jar 0 → 100644
No preview for this file type
gui/images/book_open.png 0 → 100644

2.87 KB

gui/images/book_open_disabled.png 0 → 100644

2.9 KB

gui/images/book_open_pressed.png 0 → 100644

2.86 KB

gui/images/book_open_roll_over.png 0 → 100644

2.86 KB

gui/images/conf.png 0 → 100644

4.86 KB

gui/images/conf_pressed.png 0 → 100644

4.84 KB

gui/images/conf_roll_over.png 0 → 100644

4.87 KB

gui/images/down.gif 0 → 100644

114 Bytes

gui/images/end_node.gif 0 → 100644

91 Bytes

gui/images/font_decrease.png 0 → 100644

3.36 KB

gui/images/font_decrease_pressed.png 0 → 100644

3.27 KB

gui/images/font_decrease_roll_over.png 0 → 100644

3.32 KB

gui/images/font_increase.png 0 → 100644

3.56 KB

gui/images/font_increase_pressed.png 0 → 100644

3.42 KB

gui/images/font_increase_roll_over.png 0 → 100644

3.48 KB

gui/images/info.png 0 → 100644

4.89 KB

gui/images/info_pressed.png 0 → 100644

4.77 KB

gui/images/info_roll_over.png 0 → 100644

4.88 KB

gui/images/open.png 0 → 100644

2.86 KB

gui/images/open_pressed.png 0 → 100644

2.87 KB

gui/images/open_roll_over.png 0 → 100644

2.87 KB

gui/images/return.png 0 → 100644

2.83 KB

gui/images/return_pressed.png 0 → 100644

2.82 KB

gui/images/return_roll_over.png 0 → 100644

2.83 KB

gui/images/save.png 0 → 100644

3.14 KB

gui/images/save_disabled.png 0 → 100644

3.03 KB

gui/images/save_pressed.png 0 → 100644

3.14 KB

gui/images/save_roll_over.png 0 → 100644

3.15 KB

gui/images/start_node.gif 0 → 100644

92 Bytes

gui/morfeusz.desktop 0 → 100644
  1 +[Desktop Entry]
  2 +Encoding=UTF-8
  3 +Type=Application
  4 +Name=Morfeusz
  5 +Comment=Morphological analyzer and generator Morfeusz 2
  6 +Comment[pl]=Analizator i generator fleksyjny Morfeusz 2
  7 +Icon=/usr/share/morfeusz2/morfeusz.svg
  8 +Exec=/usr/bin/morfeusz2-gui
  9 +Terminal=false
  10 +Categories=Office;Dictionary;GTK;
... ...
gui/morfeusz.svg 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<!-- Created with Inkscape (http://www.inkscape.org/) -->
  3 +
  4 +<svg
  5 + xmlns:dc="http://purl.org/dc/elements/1.1/"
  6 + xmlns:cc="http://creativecommons.org/ns#"
  7 + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  8 + xmlns:svg="http://www.w3.org/2000/svg"
  9 + xmlns="http://www.w3.org/2000/svg"
  10 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
  11 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
  12 + version="1.0"
  13 + width="113.38583"
  14 + height="113.38583"
  15 + id="svg2"
  16 + inkscape:version="0.48.4 r9939"
  17 + sodipodi:docname="morfeusz2.svg">
  18 + <metadata
  19 + id="metadata16">
  20 + <rdf:RDF>
  21 + <cc:Work
  22 + rdf:about="">
  23 + <dc:format>image/svg+xml</dc:format>
  24 + <dc:type
  25 + rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  26 + <dc:title />
  27 + </cc:Work>
  28 + </rdf:RDF>
  29 + </metadata>
  30 + <sodipodi:namedview
  31 + pagecolor="#ffffff"
  32 + bordercolor="#666666"
  33 + borderopacity="1"
  34 + objecttolerance="10"
  35 + gridtolerance="10"
  36 + guidetolerance="10"
  37 + inkscape:pageopacity="0"
  38 + inkscape:pageshadow="2"
  39 + inkscape:window-width="1366"
  40 + inkscape:window-height="692"
  41 + id="namedview14"
  42 + showgrid="false"
  43 + inkscape:zoom="2.0813888"
  44 + inkscape:cx="54.940755"
  45 + inkscape:cy="56.248551"
  46 + inkscape:window-x="0"
  47 + inkscape:window-y="24"
  48 + inkscape:window-maximized="1"
  49 + inkscape:current-layer="svg2" />
  50 + <defs
  51 + id="defs4" />
  52 + <path
  53 + style="fill:#a05a2c;fill-opacity:1;fill-rule:nonzero;stroke:none"
  54 + d="M 17.75 0 C 7.9124097 0 0 7.9124101 0 17.75 L 0 56.6875 L 0 95.625 C 0 105.4626 7.9124097 113.375 17.75 113.375 L 56.6875 113.375 L 95.625 113.375 C 105.46259 113.375 113.375 105.4626 113.375 95.625 L 113.375 56.6875 L 113.375 17.75 C 113.375 7.9124092 105.46258 0 95.625 0 L 56.6875 0 L 17.75 0 z "
  55 + id="rect1307" />
  56 + <g
  57 + id="g3860"
  58 + transform="translate(0.07142581,0.95918088)">
  59 + <path
  60 + inkscape:connector-curvature="0"
  61 + id="path3058"
  62 + d="m 49.48619,49.304254 c 3.854793,-2.652072 9.732679,-2.779341 13.524988,-10e-7"
  63 + style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
  64 + sodipodi:nodetypes="cc" />
  65 + <g
  66 + transform="translate(4.5642603,-1.2011211)"
  67 + id="g3832">
  68 + <path
  69 + sodipodi:type="arc"
  70 + style="fill:#000000;fill-opacity:1"
  71 + id="path3056"
  72 + sodipodi:cx="-26.064329"
  73 + sodipodi:cy="51.768322"
  74 + sodipodi:rx="18.377153"
  75 + sodipodi:ry="15.254238"
  76 + d="m -7.6871758,51.768322 c 0,8.424683 -8.2277322,15.254238 -18.3771532,15.254238 -10.149422,0 -18.377154,-6.829555 -18.377154,-15.254238 0,-8.424683 8.227732,-15.254238 18.377154,-15.254238 10.149421,0 18.3771532,6.829555 18.3771532,15.254238 z"
  77 + transform="matrix(1.1633987,0,0,1,55.786973,-2.6424662)" />
  78 + <path
  79 + sodipodi:type="arc"
  80 + style="fill:#ffffff;fill-opacity:1;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none"
  81 + id="path3828"
  82 + sodipodi:cx="-23.782198"
  83 + sodipodi:cy="53.329777"
  84 + sodipodi:rx="10.81009"
  85 + sodipodi:ry="8.8882961"
  86 + d="m -12.972108,53.329777 c 0,4.90887 -4.839842,8.888296 -10.81009,8.888296 -5.970248,0 -10.81009,-3.979426 -10.81009,-8.888296 0,-4.908871 4.839842,-8.888296 10.81009,-8.888296 5.970248,0 10.81009,3.979425 10.81009,8.888296 z"
  87 + transform="matrix(0.66666667,0,0,0.64864864,49.005741,11.770987)" />
  88 + </g>
  89 + <g
  90 + id="g3832-4"
  91 + transform="translate(56.933142,-0.84078676)">
  92 + <path
  93 + sodipodi:type="arc"
  94 + style="fill:#000000;fill-opacity:1"
  95 + id="path3056-3"
  96 + sodipodi:cx="-26.064329"
  97 + sodipodi:cy="51.768322"
  98 + sodipodi:rx="18.377153"
  99 + sodipodi:ry="15.254238"
  100 + d="m -7.6871758,51.768322 c 0,8.424683 -8.2277322,15.254238 -18.3771532,15.254238 -10.149422,0 -18.377154,-6.829555 -18.377154,-15.254238 0,-8.424683 8.227732,-15.254238 18.377154,-15.254238 10.149421,0 18.3771532,6.829555 18.3771532,15.254238 z"
  101 + transform="matrix(1.1633987,0,0,1,55.786973,-2.6424662)" />
  102 + <path
  103 + sodipodi:type="arc"
  104 + style="fill:#ffffff;fill-opacity:1;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none"
  105 + id="path3828-3"
  106 + sodipodi:cx="-23.782198"
  107 + sodipodi:cy="53.329777"
  108 + sodipodi:rx="10.81009"
  109 + sodipodi:ry="8.8882961"
  110 + d="m -12.972108,53.329777 c 0,4.90887 -4.839842,8.888296 -10.81009,8.888296 -5.970248,0 -10.81009,-3.979426 -10.81009,-8.888296 0,-4.908871 4.839842,-8.888296 10.81009,-8.888296 5.970248,0 10.81009,3.979425 10.81009,8.888296 z"
  111 + transform="matrix(0.66666667,0,0,0.64864864,49.005741,11.770987)" />
  112 + </g>
  113 + </g>
  114 +</svg>
... ...
gui/morfeusz/AboutDialog.java 0 → 100755
  1 +package morfeusz;
  2 +
  3 +import java.awt.*;
  4 +import java.awt.event.*;
  5 +
  6 +import javax.swing.*;
  7 +
  8 +@SuppressWarnings("serial")
  9 +public class AboutDialog extends JPanel
  10 +{
  11 +
  12 + private static final String INFO = "<html><center><h3>Morfeusz</h3></center><br/>" +
  13 + "<center>Analizator morfologiczny dla j\u0119zyka polskiego.<br/><br/>" +
  14 + "Wersja: " + pl.sgjp.morfeusz.Morfeusz.getVersion() + "</center></html>";
  15 + private JDialog dialog;
  16 + private JCheckBox pr = new JCheckBox("Program");
  17 + private JCheckBox dict = new JCheckBox("S\u0142ownik");
  18 + private JTextArea ta = new JTextArea(4, 58);
  19 + private Rectangle rect = new Rectangle(0, 0, 0, 0);
  20 + private String copyrights;
  21 + private String dictCopyrights;
  22 +
  23 + public AboutDialog(pl.sgjp.morfeusz.Morfeusz morfeusz)
  24 + {
  25 + super(new BorderLayout());
  26 +
  27 + JLabel label = new JLabel(INFO);
  28 + JPanel panel = new JPanel();
  29 + JScrollPane sp = new JScrollPane(ta);
  30 + ButtonGroup group = new ButtonGroup();
  31 + Box vbox = Box.createVerticalBox();
  32 + Box hbox = Box.createHorizontalBox();
  33 +
  34 + setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
  35 + vbox.setBorder(BorderFactory.createEmptyBorder(16, 0, 0, 0));
  36 + ta.setMargin(new Insets(4, 4, 4, 4));
  37 + ta.setEditable(false);
  38 + ta.setFont(Morfeusz.plainFont);
  39 + panel.add(label);
  40 + add(panel, BorderLayout.CENTER);
  41 + label = new JLabel("Prawa autorskie: ");
  42 + hbox.add(label);
  43 + hbox.add(pr);
  44 + hbox.add(dict);
  45 + hbox.add(Box.createHorizontalGlue());
  46 + group.add(pr);;
  47 + group.add(dict);
  48 + pr.setSelected(true);
  49 + vbox.add(hbox);
  50 + vbox.add(sp);
  51 + add(vbox, BorderLayout.SOUTH);
  52 + pr.addActionListener(new ActionListener() {
  53 + public void actionPerformed(ActionEvent e)
  54 + {
  55 + setText();
  56 + }
  57 + });
  58 + dict.addActionListener(new ActionListener() {
  59 + public void actionPerformed(ActionEvent e)
  60 + {
  61 + setText();
  62 + }
  63 + });
  64 + copyrights = pl.sgjp.morfeusz.Morfeusz.getCopyright();
  65 + copyrights = copyrights.replaceFirst("Science\n", "Sciences\n");
  66 + copyrights = copyrights.replaceFirst("\n$", "");
  67 + dictCopyrights = morfeusz.getDictCopyright();
  68 + dictCopyrights = dictCopyrights.replaceFirst("\n$", "");
  69 + setText();
  70 + }
  71 +
  72 + public void setText()
  73 + {
  74 + if (pr.isSelected()) ta.setText(copyrights);
  75 + else ta.setText(dictCopyrights);
  76 + EventQueue.invokeLater(new Runnable() {
  77 + public void run()
  78 + {
  79 + ta.scrollRectToVisible(rect);
  80 + }
  81 + });
  82 + }
  83 +
  84 + public void doDialog()
  85 + {
  86 + dialog = new JDialog();
  87 + dialog.setModal(true);
  88 + dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
  89 + dialog.setTitle("Informacje o programie");
  90 + dialog.setResizable(false);
  91 + dialog.getContentPane().add(this);
  92 + dialog.pack();
  93 + dialog.setLocationRelativeTo(null);
  94 + dialog.setVisible(true);
  95 + }
  96 +
  97 +}
... ...
gui/morfeusz/Agent.java 0 → 100755
  1 +package morfeusz;
  2 +
  3 +import java.io.*;
  4 +import java.util.*;
  5 +
  6 +import pl.sgjp.morfeusz.*;
  7 +
  8 +public class Agent
  9 +{
  10 +
  11 + private Morfeusz controller;
  12 + private String textToAnalyze;
  13 + private String lemma;
  14 + private String dictionary;
  15 + private HashSet<Integer> interpBoundaries;
  16 + private List<MorphInterpretation> analyzeResults;
  17 + private List<MorphInterpretation> generateResults;
  18 + private pl.sgjp.morfeusz.Morfeusz morfeusz;
  19 +
  20 + public static Agent createAgent(Morfeusz controller)
  21 + {
  22 + Agent agent = new Agent(controller);
  23 +
  24 + if (agent.morfeusz == null) return null;
  25 + return agent;
  26 + }
  27 +
  28 + public Agent(Morfeusz controller)
  29 + {
  30 + this.controller = controller;
  31 + textToAnalyze = null;
  32 + lemma = null;
  33 + dictionary = null;
  34 + interpBoundaries = null;
  35 + analyzeResults = null;
  36 + generateResults = null;
  37 + initializeWithDictionaryName();
  38 + }
  39 +
  40 + public void initialize()
  41 + {
  42 + Preferences prefs = controller.getPreferences();
  43 +
  44 + morfeusz.setAggl(prefs.aggl);
  45 + morfeusz.setPraet(prefs.praet);
  46 + morfeusz.setCaseHandling(prefs.caseHandling);
  47 + morfeusz.setWhitespaceHandling(prefs.whitespaceHandling);
  48 + morfeusz.setTokenNumbering(prefs.tokenNumbering);
  49 + }
  50 +
  51 + public void initializeWithDictionaryName()
  52 + {
  53 + Preferences prefs = controller.getPreferences();
  54 +
  55 + morfeusz = null;
  56 + if (prefs.dictionary != null) {
  57 + try {
  58 + morfeusz = pl.sgjp.morfeusz.Morfeusz.createInstance(prefs.dictionary, MorfeuszUsage.BOTH_ANALYSE_AND_GENERATE);
  59 + }
  60 + catch (Exception exception) {
  61 + morfeusz = null;
  62 + prefs.dictionary = null;
  63 + }
  64 + }
  65 + if (morfeusz == null) {
  66 + try {
  67 + morfeusz = pl.sgjp.morfeusz.Morfeusz.createInstance(MorfeuszUsage.BOTH_ANALYSE_AND_GENERATE);
  68 + }
  69 + catch (Exception exception) {
  70 + morfeusz = null;
  71 + }
  72 + }
  73 + if (morfeusz != null) initialize();
  74 + else prefs.dictionary = null;
  75 + }
  76 +
  77 + public void setTextToAnalyze(String text)
  78 + {
  79 + textToAnalyze = text;
  80 + }
  81 +
  82 + public void setLemma(String text)
  83 + {
  84 + lemma = text;
  85 + }
  86 +
  87 + public void clearAnalyzeResults()
  88 + {
  89 + analyzeResults.clear();
  90 + analyzeResults = null;
  91 + interpBoundaries = null;
  92 + textToAnalyze = null;
  93 + }
  94 +
  95 + public void clearGenerateResults()
  96 + {
  97 + generateResults.clear();
  98 + generateResults = null;
  99 + lemma = null;
  100 + }
  101 +
  102 + public HashSet<Integer> getInterpBoundaries()
  103 + {
  104 + return interpBoundaries;
  105 + }
  106 +
  107 + public List<MorphInterpretation> getAnalyzeResults()
  108 + {
  109 + return analyzeResults;
  110 + }
  111 +
  112 + public List<MorphInterpretation> getGenerateResults()
  113 + {
  114 + return generateResults;
  115 + }
  116 +
  117 + public boolean hasAnalyzeResults()
  118 + {
  119 + if (analyzeResults == null) return false;
  120 + return !analyzeResults.isEmpty();
  121 + }
  122 +
  123 + public boolean hasGenerateResults()
  124 + {
  125 + if (generateResults == null) return false;
  126 + return !generateResults.isEmpty();
  127 + }
  128 +
  129 + public boolean analyze()
  130 + {
  131 + analyzeResults = null;
  132 + interpBoundaries = null;
  133 + try {
  134 + analyze(textToAnalyze);
  135 + }
  136 + catch (Exception exception) {
  137 + analyzeResults = null;
  138 + interpBoundaries = null;
  139 + return false;
  140 + }
  141 + return true;
  142 + }
  143 +
  144 + public void analyze(String text)
  145 + {
  146 + StringTokenizer tokenizer = new StringTokenizer(text, "\n");
  147 +
  148 + while (tokenizer.hasMoreTokens()) {
  149 + String line = tokenizer.nextToken();
  150 + List<MorphInterpretation> res = morfeusz.analyseAsList(line);
  151 +
  152 + if (analyzeResults == null) {
  153 + analyzeResults = res;
  154 + interpBoundaries = new HashSet<Integer>();
  155 + }
  156 + else analyzeResults.addAll(res);
  157 + interpBoundaries.add(analyzeResults.size());
  158 + }
  159 + }
  160 +
  161 + public boolean generate()
  162 + {
  163 + generateResults = null;
  164 + try {
  165 + generateResults = morfeusz.generate(lemma);
  166 + }
  167 + catch (Exception exception) {
  168 + generateResults = null;
  169 + return false;
  170 + }
  171 + return true;
  172 + }
  173 +
  174 + public boolean setDictionary(String name)
  175 + {
  176 + pl.sgjp.morfeusz.Morfeusz oldMorfeusz = morfeusz;
  177 +
  178 + try {
  179 + if (name == null) {
  180 + if (dictionary != null) {
  181 + morfeusz = pl.sgjp.morfeusz.Morfeusz.createInstance(MorfeuszUsage.BOTH_ANALYSE_AND_GENERATE);
  182 + initialize();
  183 + }
  184 + }
  185 + else {
  186 + morfeusz = pl.sgjp.morfeusz.Morfeusz.createInstance(name, MorfeuszUsage.BOTH_ANALYSE_AND_GENERATE);
  187 + initialize();
  188 + }
  189 + dictionary = name;
  190 + }
  191 + catch (Exception exception) {
  192 + morfeusz = oldMorfeusz;
  193 + return false;
  194 + }
  195 + return true;
  196 + }
  197 +
  198 + public void saveAnalyzeResults(PrintWriter pw)
  199 + {
  200 + if (hasAnalyzeResults()) {
  201 + for (int i = 0; i < analyzeResults.size(); i++) {
  202 + MorphInterpretation interp = analyzeResults.get(i);
  203 +
  204 + pw.print("[");
  205 + pw.print(Integer.toString(interp.getStartNode()));
  206 + pw.print(", ");
  207 + pw.print(Integer.toString(interp.getEndNode()));
  208 + pw.print(", ");
  209 + pw.print(interp.getOrth());
  210 + pw.print(", ");
  211 + pw.print(interp.getLemma());
  212 + pw.print(", ");
  213 + pw.print(interp.getTag(morfeusz));
  214 + pw.print(", ");
  215 + pw.print(interp.getName(morfeusz));
  216 + pw.print(", ");
  217 +
  218 + Collection<String> labels = interp.getLabels(controller.getMorfeusz());
  219 + String str = null;
  220 + boolean append = false;
  221 +
  222 + if (labels.size() > 0) {
  223 + str = "";
  224 + for (String s : labels) {
  225 + if (append) str += "; ";
  226 + str += s;
  227 + append = true;
  228 + }
  229 + }
  230 +
  231 + pw.print(str);
  232 + pw.println("]");
  233 + }
  234 + }
  235 + }
  236 +
  237 + public void saveGenerateResults(PrintWriter pw)
  238 + {
  239 + if (hasAnalyzeResults()) {
  240 + for (int i = 0; i < generateResults.size(); i++) {
  241 + MorphInterpretation interp = generateResults.get(i);
  242 +
  243 + pw.print("[");
  244 + pw.print(interp.getOrth());
  245 + pw.print(", ");
  246 + pw.print(interp.getLemma());
  247 + pw.print(", ");
  248 + pw.print(interp.getTag(morfeusz));
  249 + pw.print(", ");
  250 + pw.print(interp.getName(morfeusz));
  251 + pw.print(", ");
  252 + pw.print(interp.getName(morfeusz));
  253 + pw.print(", ");
  254 +
  255 + Collection<String> labels = interp.getLabels(controller.getMorfeusz());
  256 + String str = null;
  257 + boolean append = false;
  258 +
  259 + if (labels.size() > 0) {
  260 + str = "";
  261 + for (String s : labels) {
  262 + if (append) str += "; ";
  263 + str += s;
  264 + append = true;
  265 + }
  266 + }
  267 +
  268 + pw.print(str);
  269 + pw.println("]");
  270 + }
  271 + }
  272 + }
  273 +
  274 + public pl.sgjp.morfeusz.Morfeusz getMorfeusz()
  275 + {
  276 + return morfeusz;
  277 + }
  278 +
  279 +}
... ...
gui/morfeusz/DictSearchPathsDialog.java 0 → 100755
  1 +package morfeusz;
  2 +
  3 +import java.awt.BorderLayout;
  4 +import java.awt.Color;
  5 +import java.awt.Dimension;
  6 +import java.awt.datatransfer.*;
  7 +import java.awt.event.*;
  8 +import java.io.*;
  9 +import java.util.*;
  10 +
  11 +import javax.swing.*;
  12 +import javax.swing.event.ListSelectionEvent;
  13 +import javax.swing.event.ListSelectionListener;
  14 +import javax.swing.table.*;
  15 +
  16 +@SuppressWarnings("serial")
  17 +public class DictSearchPathsDialog extends JPanel
  18 +{
  19 +
  20 + private JDialog dialog;
  21 + private PathList pathList;
  22 + private JButton acceptButton;
  23 + private JButton cancelButton;
  24 + private JButton addButton;
  25 + private JButton removeButton;
  26 + private JButton defaultsButton;
  27 + private List<String> searchPaths;
  28 + private List<String> defaultSearchPaths;
  29 + private int ret;
  30 +
  31 + public DictSearchPathsDialog(List<String> searchPaths, List<String> defaultSearchPaths)
  32 + {
  33 + super(new BorderLayout());
  34 + setBorder(BorderFactory.createEmptyBorder(16, 16, 16, 16));
  35 + setPreferredSize(new Dimension(600, 200));
  36 + this.searchPaths = searchPaths;
  37 + this.defaultSearchPaths = defaultSearchPaths;
  38 + arrangeComponents();
  39 + }
  40 +
  41 + public void arrangeComponents()
  42 + {
  43 + JLabel label = new JLabel("\u015Acie\u017Cka wyszukiwania s\u0142ownik\u00F3w:");
  44 + Box hbox = Box.createHorizontalBox();
  45 + JScrollPane sp;
  46 + Dimension dim;
  47 +
  48 + label.setBorder(BorderFactory.createEmptyBorder(0, 0, 2, 0));
  49 + add(label, BorderLayout.NORTH);
  50 + pathList = new PathList();
  51 + sp = new JScrollPane(pathList);
  52 + sp.setBorder(BorderFactory.createEtchedBorder());
  53 + sp.getViewport().setBackground(Color.white);
  54 + add(sp, BorderLayout.CENTER);
  55 + addButton = new JButton("Dodaj");
  56 + removeButton = new JButton("Usu\u0144");
  57 + defaultsButton = new JButton("Domy\u015Blna");
  58 + cancelButton = new JButton("Anuluj");
  59 + acceptButton = new JButton("Akceptuj");
  60 + dim = defaultsButton.getPreferredSize();
  61 + addButton.setPreferredSize(dim);
  62 + removeButton.setPreferredSize(dim);
  63 + cancelButton.setPreferredSize(dim);
  64 + acceptButton.setPreferredSize(dim);
  65 + hbox.setBorder(BorderFactory.createEmptyBorder(16, 0, 0, 0));
  66 + hbox.add(addButton);
  67 + hbox.add(Box.createHorizontalStrut(8));
  68 + hbox.add(removeButton);
  69 + hbox.add(Box.createHorizontalStrut(8));
  70 + hbox.add(Box.createHorizontalGlue());
  71 + hbox.add(defaultsButton);
  72 + hbox.add(Box.createHorizontalGlue());
  73 + hbox.add(Box.createHorizontalStrut(8));
  74 + hbox.add(cancelButton);
  75 + hbox.add(Box.createHorizontalStrut(8));
  76 + hbox.add(acceptButton);
  77 + add(hbox, BorderLayout.SOUTH);
  78 + removeButton.setEnabled(false);
  79 + addButton.addActionListener(new ActionListener() {
  80 + public void actionPerformed(ActionEvent event)
  81 + {
  82 + addPath();
  83 + }
  84 + });
  85 + removeButton.addActionListener(new ActionListener() {
  86 + public void actionPerformed(ActionEvent event)
  87 + {
  88 + removePath();
  89 + }
  90 + });
  91 + defaultsButton.addActionListener(new ActionListener() {
  92 + public void actionPerformed(ActionEvent event)
  93 + {
  94 + defaults();
  95 + }
  96 + });
  97 + cancelButton.addActionListener(new ActionListener() {
  98 + public void actionPerformed(ActionEvent event)
  99 + {
  100 + dialog.setVisible(false);
  101 + }
  102 + });
  103 + acceptButton.addActionListener(new ActionListener() {
  104 + public void actionPerformed(ActionEvent event)
  105 + {
  106 + modifySearchPaths();
  107 + ret = 1;
  108 + dialog.setVisible(false);
  109 + }
  110 + });
  111 + }
  112 +
  113 + public void addPath()
  114 + {
  115 + JFileChooser chooser = new JFileChooser();
  116 +
  117 + chooser.setDialogTitle("Select Files");
  118 + chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
  119 + chooser.setMultiSelectionEnabled(true);
  120 +
  121 + int state = chooser.showOpenDialog(this);
  122 + if (state == JFileChooser.APPROVE_OPTION) {
  123 + File[] files = chooser.getSelectedFiles();
  124 + DefaultTableModel model = (DefaultTableModel)pathList.getModel();
  125 + Object[] row = new Object[1];
  126 +
  127 + for (int i = 0; i < files.length; i++) {
  128 + row[0] = files[i].getPath();
  129 + model.addRow(row);
  130 + }
  131 + }
  132 + }
  133 +
  134 + public void removePath()
  135 + {
  136 + int[] rows = pathList.getSelectedRows();
  137 + DefaultTableModel model = (DefaultTableModel)pathList.getModel();
  138 +
  139 + for (int i = 0; i < rows.length; i++) {
  140 + model.removeRow(rows[i] - i);
  141 + }
  142 + }
  143 +
  144 + public void defaults()
  145 + {
  146 + DefaultTableModel model = (DefaultTableModel)pathList.getModel();
  147 + int count = model.getRowCount();
  148 +
  149 + for (int i = 0; i < count; i++) {
  150 + model.removeRow(0);
  151 + }
  152 + if (defaultSearchPaths != null && !defaultSearchPaths.isEmpty()) {
  153 + Object[] row = new Object[1];
  154 +
  155 + for (String path : defaultSearchPaths) {
  156 + row[0] = path;
  157 + model.addRow(row);
  158 + }
  159 + }
  160 + }
  161 +
  162 + public void modifySearchPaths()
  163 + {
  164 + DefaultTableModel model = (DefaultTableModel)pathList.getModel();
  165 + int count = model.getRowCount();
  166 +
  167 + searchPaths.clear();
  168 + for (int i = 0; i < count; i++) {
  169 + String path = (String)model.getValueAt(i, 0);
  170 +
  171 + searchPaths.add(path);
  172 + }
  173 + }
  174 +
  175 + public int doDialog()
  176 + {
  177 + ret = 0;
  178 + dialog = new JDialog();
  179 + dialog.setModal(true);
  180 + dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
  181 + dialog.setTitle("Ustawianie \u015Bcie\u017Cki wyszukiwania s\u0142ownik\u00F3w");
  182 + dialog.setResizable(true);
  183 + dialog.getContentPane().add(this);
  184 + dialog.pack();
  185 + dialog.setLocationRelativeTo(null);
  186 + dialog.setVisible(true);
  187 + return ret;
  188 + }
  189 +
  190 + public void dispose()
  191 + {
  192 + if (dialog != null) {
  193 + dialog.dispose();
  194 + dialog = null;
  195 + }
  196 + }
  197 +
  198 + private class PathList extends JTable
  199 + {
  200 +
  201 + public PathList()
  202 + {
  203 + super(new PathListModel());
  204 +
  205 + setBorder(BorderFactory.createEmptyBorder());
  206 + setBackground(Color.white);
  207 + setTableHeader(null);
  208 + setRowSelectionAllowed(true);
  209 + setDragEnabled(true);
  210 + setShowHorizontalLines(false);
  211 + setShowVerticalLines(false);
  212 + setTransferHandler(new PathListTransferHandler());
  213 + getSelectionModel().addListSelectionListener(new ListSelectionListener() {
  214 + public void valueChanged(ListSelectionEvent event)
  215 + {
  216 + removeButton.setEnabled(getSelectedRowCount() > 0);
  217 + }
  218 + });
  219 +
  220 + DefaultTableModel model = (DefaultTableModel)getModel();
  221 + Object[] row = new Object[1];
  222 +
  223 + for (String path : searchPaths) {
  224 + row[0] = path;
  225 + model.addRow(row);
  226 + }
  227 + }
  228 +
  229 + }
  230 +
  231 + private class PathListModel extends DefaultTableModel
  232 + {
  233 +
  234 + public PathListModel()
  235 + {
  236 + super(0, 1);
  237 + }
  238 +
  239 + public Class<? extends Object> getColumnClass(int col)
  240 + {
  241 + Vector<?> v = (Vector<?>)getDataVector().elementAt(0);
  242 + return v.elementAt(col).getClass();
  243 + }
  244 +
  245 + public boolean isCellEditable(int row, int column)
  246 + {
  247 + return false;
  248 + }
  249 +
  250 + }
  251 +
  252 + private class PathListTransferHandler extends TransferHandler
  253 + {
  254 +
  255 + private boolean canImport;
  256 + private boolean accept;
  257 + private int[] rows;
  258 + private int addIndex;
  259 + private int addCount;
  260 +
  261 + public PathListTransferHandler()
  262 + {
  263 + canImport = false;
  264 + accept = false;
  265 + rows = null;
  266 + addIndex = -1;
  267 + addCount = 0;
  268 + }
  269 +
  270 + protected Transferable createTransferable(JComponent c)
  271 + {
  272 + accept = true;
  273 + return new StringSelection(exportString(c));
  274 + }
  275 +
  276 + protected String exportString(JComponent c)
  277 + {
  278 + JTable table = (JTable)c;
  279 + StringBuffer buff = new StringBuffer();
  280 +
  281 + rows = table.getSelectedRows();
  282 + for (int i = 0; i < rows.length; i++) {
  283 + String s = (String)table.getValueAt(rows[i], 0);
  284 + buff.append(s);
  285 + if (i != rows.length - 1) buff.append("\n");
  286 + }
  287 + return buff.toString();
  288 + }
  289 +
  290 + protected void importString(JComponent c, String str)
  291 + {
  292 + JTable target = (JTable)c;
  293 + DefaultTableModel model = (DefaultTableModel)target.getModel();
  294 + int index = target.getSelectedRow();
  295 +
  296 + if (rows != null && index >= rows[0] - 1 &&
  297 + index <= rows[rows.length - 1])
  298 + {
  299 + rows = null;
  300 + return;
  301 + }
  302 +
  303 + int max = model.getRowCount();
  304 +
  305 + if (index < 0) index = max;
  306 + else {
  307 + index++;
  308 + if (index > max) index = max;
  309 + }
  310 +
  311 + addIndex = index;
  312 + String[] rvalues = str.split("\n");
  313 + addCount = rvalues.length;
  314 +
  315 + for (int i = 0; i < rvalues.length; i++) {
  316 + Object[] row = new Object[1];
  317 +
  318 + row[0] = rvalues[i];
  319 + model.insertRow(index++, row);
  320 + }
  321 + }
  322 +
  323 + public int getSourceActions(JComponent c)
  324 + {
  325 + return COPY_OR_MOVE;
  326 + }
  327 +
  328 + public boolean importData(JComponent c, Transferable t)
  329 + {
  330 + if (canImport(c, t.getTransferDataFlavors())) {
  331 + canImport = true;
  332 + try {
  333 + String str = (String)t.getTransferData(DataFlavor.stringFlavor);
  334 + importString(c, str);
  335 + return true;
  336 + }
  337 + catch (UnsupportedFlavorException ufe) {
  338 + }
  339 + catch (IOException ioe) {
  340 + }
  341 + }
  342 + return false;
  343 + }
  344 +
  345 + protected void exportDone(JComponent c, Transferable data, int action)
  346 + {
  347 + if (canImport) {
  348 + JTable source = (JTable)c;
  349 +
  350 + if (rows != null) {
  351 + DefaultTableModel model = (DefaultTableModel)source.getModel();
  352 +
  353 + if (addCount > 0) {
  354 + for (int i = 0; i < rows.length; i++) {
  355 + if (rows[i] > addIndex) rows[i] += addCount;
  356 + }
  357 + }
  358 + for (int i = rows.length - 1; i >= 0; i--) model.removeRow(rows[i]);
  359 + }
  360 + rows = null;
  361 + addCount = 0;
  362 + addIndex = -1;
  363 + canImport = false;
  364 + }
  365 + accept = false;
  366 + }
  367 +
  368 + public boolean canImport(JComponent c, DataFlavor[] flavors)
  369 + {
  370 + if (accept) {
  371 + for (int i = 0; i < flavors.length; i++) {
  372 + if (DataFlavor.stringFlavor.equals(flavors[i])) return true;
  373 + }
  374 + }
  375 + return false;
  376 + }
  377 +
  378 + }
  379 +
  380 +}
... ...
gui/morfeusz/Morfeusz.java 0 → 100755
  1 +package morfeusz;
  2 +
  3 +import java.awt.*;
  4 +import java.awt.event.*;
  5 +import java.io.*;
  6 +import java.text.*;
  7 +import java.util.*;
  8 +
  9 +import javax.swing.*;
  10 +import javax.swing.event.*;
  11 +
  12 +import quitaboutpreferenceshandler.*;
  13 +
  14 +@SuppressWarnings("serial")
  15 +public class Morfeusz extends JFrame
  16 +{
  17 +
  18 + public static final String WINDOW_TITLE = "Analizator Morfologiczny Morfeusz";
  19 + public static final String STANDARD = "Standardowy (" + pl.sgjp.morfeusz.Morfeusz.getDefaultDictName() + ")";
  20 + public static final String DICT_MESSAGE = "<html>Wyst\u0105pi\u0142 b\u0142\u0105d przy pr\u00F3bie zamiany s\u0142ownika.<br/>" +
  21 + "S\u0142ownik nie zosta\u0142 zmieniony.</html>";
  22 + public static final String NATIVE_ERROR_MESSAGE = "Wyst\u0105pi\u0142 nieznany b\u0142\u0105d";
  23 + public static final Color LIGHT_GRAY = new Color(240, 240, 240);
  24 + public static final Color VLIGHT_BLUE = new Color(237, 243, 254);
  25 + public static final Font FONT = new Font(Font.SANS_SERIF, Font.PLAIN, 10);
  26 + public static final int NUM_OF_FONT_SIZES = 10;
  27 +
  28 + private static boolean isMacOS;
  29 +
  30 + public static Font plainFont;
  31 + public static Font boldFont;
  32 + public static Font italicFont;
  33 + private java.util.List<String> defaultSearchPaths;
  34 + private java.util.List<String> dictSearchPaths;
  35 + private java.util.List<String> dictionaries;
  36 + private Agent agent;
  37 + private Preferences preferences;
  38 + private JTabbedPane tabbedPane;
  39 + private AnalyzeView analyzeView;
  40 + private GenerateView generateView;
  41 + private JTextArea textPane;
  42 + private JTextField lemmaField;
  43 + private ResultsPane analyzePane;
  44 + private ResultsPane generatePane;
  45 + private Action exitAction;
  46 + private Action aboutAction;
  47 + private Action optionsAction;
  48 + private Action resetAction;
  49 + private Action analyzeAction;
  50 + private Action generateAction;
  51 + private Action openAction;
  52 + private Action saveActionA;
  53 + private Action saveActionG;
  54 + private Action changeAction;
  55 + private Action changeToStandardAction;
  56 + private Action editAction;
  57 + private Action increaseFontAction;
  58 + private Action decreaseFontAction;
  59 + private Action insertNewLineAction;
  60 + private JButton exitButton;
  61 + private JButton resetButton;
  62 + private JButton actionButton;
  63 + private ToolBarButton returnButton;
  64 + private ToolBarButton openButton;
  65 + private ToolBarButton saveButtonA;
  66 + private ToolBarButton saveButtonG;
  67 + private ToolBarButton changeButtonA;
  68 + private ToolBarButton changeButtonG;
  69 + private ToolBarButton aboutButton;
  70 + private ToolBarButton optionsButton;
  71 + private ToolBarButton increaseFontButton;
  72 + private ToolBarButton decreaseFontButton;
  73 + private JCheckBox appendCheckBoxA;
  74 + private JCheckBox appendCheckBoxG;
  75 + private JPopupMenu changePopup;
  76 + private JLabel analyzeDictionaryName;
  77 + private JLabel generateDictionaryName;
  78 + private File inputFile;
  79 + private File outputFile;
  80 + private DictFilter filter;
  81 + private String dictionary;
  82 + private boolean analyze;
  83 + private Rectangle topLeft = new Rectangle(0, 0, 0, 0);
  84 +
  85 + public Morfeusz()
  86 + {
  87 + String str = System.getProperty("os.name");
  88 +
  89 + if (str != null && str.contains("Mac OS X")) {
  90 + new QuitAboutPreferencesHandler() {
  91 + public void handleQuitRequest()
  92 + {
  93 + exit();
  94 + }
  95 +
  96 + public void handleAboutRequest()
  97 + {
  98 + about();
  99 + }
  100 +
  101 + public void handlePreferencesRequest()
  102 + {
  103 + options();
  104 + }
  105 + };
  106 + System.setProperty("apple.laf.useScreenMenuBar", "true");
  107 + isMacOS = true;
  108 + }
  109 + else isMacOS = false;
  110 +
  111 + readPreferences();
  112 + plainFont = FONT.deriveFont(Font.PLAIN, preferences.fontSize + 10);
  113 + boldFont = FONT.deriveFont(Font.BOLD, preferences.fontSize + 10);
  114 + italicFont = FONT.deriveFont(Font.ITALIC, preferences.fontSize + 10);
  115 + initialize();
  116 + agent = Agent.createAgent(this);
  117 + if (agent == null) {
  118 + JOptionPane.showMessageDialog(null, NATIVE_ERROR_MESSAGE, "Uwaga", JOptionPane.ERROR_MESSAGE);
  119 + exit();
  120 + }
  121 + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
  122 + setTitle(WINDOW_TITLE);
  123 + setSizeAndPosition();
  124 + arrangeComponents();
  125 + getRootPane().setDefaultButton(actionButton);
  126 + checkComponents();
  127 + addWindowListener(new WindowAdapter()
  128 + {
  129 + public void windowClosing(WindowEvent event)
  130 + {
  131 + exit();
  132 + }
  133 + });
  134 + }
  135 +
  136 + public void initialize()
  137 + {
  138 + openAction = new AbstractAction("Czytaj z pliku") {
  139 + public void actionPerformed(ActionEvent e)
  140 + {
  141 + open();
  142 + }
  143 + };
  144 +
  145 + optionsAction = new AbstractAction("Opcje programu") {
  146 + public void actionPerformed(ActionEvent e)
  147 + {
  148 + options();
  149 + }
  150 + };
  151 +
  152 + saveActionA = new AbstractAction("Zapisz Wyniki Analizy") {
  153 + public void actionPerformed(ActionEvent e)
  154 + {
  155 + save();
  156 + }
  157 + };
  158 +
  159 + saveActionG = new AbstractAction("Zapisz Wygenerowane Formy") {
  160 + public void actionPerformed(ActionEvent e)
  161 + {
  162 + save();
  163 + }
  164 + };
  165 +
  166 + changeToStandardAction = new AbstractAction("S\u0142ownik Standardowy") {
  167 + public void actionPerformed(ActionEvent e)
  168 + {
  169 + changeToStandardDictionary();
  170 + }
  171 + };
  172 +
  173 + changeAction = new AbstractAction() {
  174 + public void actionPerformed(ActionEvent e)
  175 + {
  176 + changeDictionary();
  177 + }
  178 + };
  179 +
  180 + editAction = new AbstractAction("Ustaw \u015Acie\u017Ck\u0119 Wyszukiwania S\u0142ownik\u00F3w...") {
  181 + public void actionPerformed(ActionEvent e)
  182 + {
  183 + editDictSearchPaths();
  184 + }
  185 + };
  186 +
  187 + exitAction = new AbstractAction("Zako\u0144cz") {
  188 + public void actionPerformed(ActionEvent e)
  189 + {
  190 + exit();
  191 + }
  192 + };
  193 +
  194 + aboutAction = new AbstractAction("About") {
  195 + public void actionPerformed(ActionEvent e)
  196 + {
  197 + about();
  198 + }
  199 + };
  200 +
  201 + increaseFontAction = new AbstractAction("Powi\u0119ksz czcionk\u0119") {
  202 + public void actionPerformed(ActionEvent e)
  203 + {
  204 + changeFontSize(true);
  205 + }
  206 + };
  207 +
  208 + decreaseFontAction = new AbstractAction("Zmniejsz czcionk\u0119") {
  209 + public void actionPerformed(ActionEvent e)
  210 + {
  211 + changeFontSize(false);
  212 + }
  213 + };
  214 +
  215 + resetAction = new AbstractAction("Wyczy\u015B\u0107") {
  216 + public void actionPerformed(ActionEvent e)
  217 + {
  218 + reset();
  219 + }
  220 + };
  221 +
  222 + analyzeAction = new AbstractAction("Analizuj") {
  223 + public void actionPerformed(ActionEvent e)
  224 + {
  225 + analyze();
  226 + }
  227 + };
  228 +
  229 + generateAction = new AbstractAction("Generuj") {
  230 + public void actionPerformed(ActionEvent e)
  231 + {
  232 + generate();
  233 + }
  234 + };
  235 +
  236 + insertNewLineAction = new AbstractAction() {
  237 + public void actionPerformed(ActionEvent e)
  238 + {
  239 + insertNewLine();
  240 + }
  241 + };
  242 +
  243 + filter = new DictFilter();
  244 + dictSearchPaths = pl.sgjp.morfeusz.Morfeusz.getDictionarySearchPaths();
  245 + defaultSearchPaths = new LinkedList<String>();
  246 + for (String path : dictSearchPaths) defaultSearchPaths.add(path);
  247 +
  248 + if (preferences.dictPaths != null) {
  249 + dictSearchPaths.clear();
  250 + for (String path : preferences.dictPaths) {
  251 + dictSearchPaths.add(path);
  252 + }
  253 + }
  254 + else if (dictSearchPaths.size() > 0) {
  255 + int i = 0;
  256 +
  257 + preferences.dictPaths = new String[dictSearchPaths.size()];
  258 + for (String path : dictSearchPaths) {
  259 + preferences.dictPaths[i++] = path;
  260 + }
  261 + }
  262 + getDictionaries();
  263 + if (preferences.dictionary == null) dictionary = STANDARD;
  264 + else dictionary = preferences.dictionary;
  265 + if (!dictionaries.contains(dictionary)) dictionary = STANDARD;
  266 + analyze = true;
  267 + }
  268 +
  269 + public void getDictionaries()
  270 + {
  271 + ListIterator<String> it;
  272 +
  273 + dictionaries = new LinkedList<String>();
  274 + if (dictSearchPaths.size() > 0) {
  275 + it = dictSearchPaths.listIterator();
  276 + while (it.hasNext()) {
  277 + String path = it.next();
  278 + File dir = new File(path);
  279 +
  280 + if (dir.exists()) addDictionaries(dir);
  281 + }
  282 + }
  283 + else {
  284 + File currentDir = new File(System.getProperty("user.dir"));
  285 +
  286 + addDictionaries(currentDir);
  287 + }
  288 + changePopup = new JPopupMenu();
  289 + changePopup.add(changeToStandardAction);
  290 + changePopup.addSeparator();
  291 + if (!dictionaries.isEmpty()) {
  292 + for (String d : dictionaries) {
  293 + changePopup.add(new RecentFileAction(d, this));
  294 + }
  295 + changePopup.addSeparator();
  296 + }
  297 + changePopup.add(editAction);
  298 + }
  299 +
  300 + public void addDictionaries(File dir)
  301 + {
  302 + String[] d = dir.list(filter);
  303 +
  304 + for (String str : d) {
  305 + int index = str.lastIndexOf("-");
  306 +
  307 + str = str.substring(0, index);
  308 + if (!dictionaries.contains(str)) dictionaries.add(str);
  309 + }
  310 + }
  311 +
  312 + public void setSizeAndPosition()
  313 + {
  314 + Toolkit toolkit = Toolkit.getDefaultToolkit();
  315 + Dimension dim = toolkit.getScreenSize();
  316 + GraphicsDevice dev = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
  317 + GraphicsConfiguration conf = dev.getDefaultConfiguration();
  318 + Insets insets = toolkit.getScreenInsets(conf);
  319 + Rectangle rect = new Rectangle();
  320 +
  321 + rect.x = (dim.width - insets.left - insets.right) / 4;
  322 + rect.y = (dim.height - insets.top - insets.bottom) / 8;
  323 + rect.width = 2 * rect.x;
  324 + rect.height = 6 * rect.y;
  325 +
  326 + setBounds(rect);
  327 + }
  328 +
  329 + public void arrangeComponents()
  330 + {
  331 + JPanel mainView = new JPanel(new BorderLayout());
  332 + Box hbox, vbox;
  333 +
  334 + mainView.setBorder(BorderFactory.createEmptyBorder(16, 16, 16, 16));
  335 + tabbedPane = new JTabbedPane();
  336 + analyzeView = new AnalyzeView();
  337 + generateView = new GenerateView();
  338 + tabbedPane.setFocusable(false);
  339 + tabbedPane.addTab("Analizator", analyzeView);
  340 + tabbedPane.addTab("Generator", generateView);
  341 + mainView.add(tabbedPane, BorderLayout.CENTER);
  342 +
  343 + exitButton = new JButton(exitAction);
  344 + resetButton = new JButton(resetAction);
  345 + actionButton = new JButton(analyzeAction);
  346 + aboutButton = new ToolBarButton(aboutAction, "info");
  347 + aboutButton.setToolTipText("Informacje o programie.");
  348 + optionsButton = new ToolBarButton(optionsAction, "conf");
  349 + optionsButton.setToolTipText("Parametry programu.");
  350 + increaseFontButton = new ToolBarButton(increaseFontAction, "font_increase");
  351 + increaseFontButton.setToolTipText("Powi\u0119ksz czcionk\u0119.");
  352 + decreaseFontButton = new ToolBarButton(decreaseFontAction, "font_decrease");
  353 + decreaseFontButton.setToolTipText("Zmniejsz czcionk\u0119.");
  354 + increaseFontButton.setEnabled(preferences.fontSize < NUM_OF_FONT_SIZES - 1);
  355 + decreaseFontButton.setEnabled(preferences.fontSize > 0);
  356 +
  357 + vbox = Box.createVerticalBox();
  358 + if (!isMacOS) vbox.add(Box.createVerticalStrut(16));
  359 + hbox = Box.createHorizontalBox();
  360 + hbox.add(aboutButton);
  361 + hbox.add(Box.createHorizontalStrut(8));
  362 + hbox.add(optionsButton);
  363 + hbox.add(Box.createHorizontalStrut(8));
  364 + hbox.add(increaseFontButton);
  365 + hbox.add(Box.createHorizontalStrut(8));
  366 + hbox.add(decreaseFontButton);
  367 + hbox.add(Box.createHorizontalStrut(8));
  368 + hbox.add(exitButton);
  369 + hbox.add(Box.createHorizontalStrut(8));
  370 + hbox.add(resetButton);
  371 + hbox.add(Box.createHorizontalGlue());
  372 + hbox.add(Box.createHorizontalStrut(8));
  373 + hbox.add(actionButton);
  374 + vbox.add(hbox);
  375 + mainView.add(vbox, BorderLayout.SOUTH);
  376 + getContentPane().add(mainView);
  377 +
  378 + tabbedPane.addChangeListener(new ChangeListener() {
  379 + public void stateChanged(ChangeEvent e)
  380 + {
  381 + int i = tabbedPane.getSelectedIndex();
  382 +
  383 + if (i == 0) {
  384 + actionButton.setAction(analyzeAction);
  385 + analyze = true;
  386 + }
  387 + else {
  388 + actionButton.setAction(generateAction);
  389 + analyze = false;
  390 + }
  391 + checkComponents();
  392 + }
  393 + });
  394 + }
  395 +
  396 + public void open()
  397 + {
  398 + SelectFileDialog dialog = new SelectFileDialog(this, SelectFileDialog.LOAD);
  399 +
  400 + dialog.setVisible(true);
  401 + if (dialog.accept()) {
  402 + inputFile = dialog.getSelectedFile();
  403 + readText(inputFile, dialog.getEncoding());
  404 + }
  405 + dialog.dispose();
  406 + }
  407 +
  408 + public void readText(File file, String encoding)
  409 + {
  410 + try {
  411 + BufferedReader reader =
  412 + new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding));
  413 + String line;
  414 + boolean addNewLine = false;
  415 +
  416 + textPane.setText("");
  417 + while ((line = reader.readLine()) != null) {
  418 + if (addNewLine) textPane.append("\n");
  419 + textPane.append(Normalizer.normalize(line, Normalizer.Form.NFC));
  420 + addNewLine = true;
  421 + }
  422 + reader.close();
  423 + EventQueue.invokeLater(new Runnable() {
  424 + public void run()
  425 + {
  426 + textPane.scrollRectToVisible(topLeft);
  427 + }
  428 + });
  429 + }
  430 + catch (Exception exception) {
  431 + exception.getStackTrace();
  432 + }
  433 + }
  434 +
  435 + public void save()
  436 + {
  437 + boolean select = true;
  438 + boolean append = (analyze ? appendCheckBoxA.isSelected() : appendCheckBoxG.isSelected());
  439 +
  440 + if (append) {
  441 + if (outputFile != null && outputFile.exists()) select = false;
  442 + }
  443 + if (select) {
  444 + SelectFileDialog dialog = new SelectFileDialog(this, SelectFileDialog.SAVE);
  445 +
  446 + dialog.setSelectedFile(new File("Results.txt"));
  447 + dialog.setVisible(true);
  448 + if (dialog.accept()) {
  449 + outputFile = dialog.getSelectedFile();
  450 + save(outputFile, append);
  451 + appendCheckBoxA.setSelected(true);
  452 + }
  453 + }
  454 + else {
  455 + save(outputFile, append);
  456 + }
  457 + }
  458 +
  459 + public void save(File file, boolean append)
  460 + {
  461 + try {
  462 + OutputStreamWriter writer = new OutputStreamWriter(
  463 + new FileOutputStream(file, append), "UTF8");
  464 + BufferedWriter bw = new BufferedWriter(writer);
  465 + PrintWriter pw = new PrintWriter(bw);
  466 +
  467 + if (append) pw.println();
  468 + if (analyze) agent.saveAnalyzeResults(pw);
  469 + else agent.saveGenerateResults(pw);
  470 + pw.flush();
  471 + pw.close();
  472 + }
  473 + catch (Exception exception) {
  474 + exception.getStackTrace();
  475 + }
  476 + }
  477 +
  478 + public void changeDictionaryName(String name)
  479 + {
  480 + dictionary = name;
  481 + if (name.equals(STANDARD)) {
  482 + analyzeDictionaryName.setText(name);
  483 + analyzeDictionaryName.setForeground(Color.gray);
  484 + generateDictionaryName.setText(name);
  485 + generateDictionaryName.setForeground(Color.gray);
  486 + }
  487 + else {
  488 + analyzeDictionaryName.setText(name);
  489 + analyzeDictionaryName.setForeground(Color.black);
  490 + generateDictionaryName.setText(name);
  491 + generateDictionaryName.setForeground(Color.black);
  492 + }
  493 + }
  494 +
  495 + public void changeToStandardDictionary()
  496 + {
  497 + preferences.dictionary = null;
  498 + agent.setDictionary(null);
  499 + refreshAnalyzeResults();
  500 + refreshGenerateResults();
  501 + changeDictionaryName(STANDARD);
  502 + }
  503 +
  504 + public void changeDictionary()
  505 + {
  506 + if (analyze) changePopup.show(changeButtonA, 0, 0);
  507 + else changePopup.show(changeButtonG, 0, 0);
  508 + }
  509 +
  510 + public void changeDictionary(String name)
  511 + {
  512 + if (agent.setDictionary(name)) {
  513 + preferences.dictionary = name;
  514 + changeDictionaryName(name);
  515 + refreshAnalyzeResults();
  516 + refreshGenerateResults();
  517 + }
  518 + else {
  519 + JOptionPane.showMessageDialog(null, DICT_MESSAGE, "Uwaga", JOptionPane.ERROR_MESSAGE);
  520 + removeFromChangePopup(name);
  521 + }
  522 + }
  523 +
  524 + public void removeFromChangePopup(String name)
  525 + {
  526 + JMenuItem item = null;
  527 + int count = changePopup.getComponentCount() - 2;
  528 +
  529 + for (int i = 2; i < count; i++) {
  530 + JMenuItem menuItem = (JMenuItem)changePopup.getComponent(i);
  531 + RecentFileAction action = (RecentFileAction)menuItem.getAction();
  532 +
  533 + if (action.getName().equals(name)) {
  534 + item = menuItem;
  535 + break;
  536 + }
  537 + }
  538 + if (item != null) {
  539 + changePopup.remove(item);
  540 + if (count == 3) changePopup.remove(2);
  541 + }
  542 + }
  543 +
  544 + public void exit()
  545 + {
  546 + savePreferences();
  547 + System.exit(0);
  548 + }
  549 +
  550 + public void insertNewLine()
  551 + {
  552 + textPane.insert("\n", textPane.getCaretPosition());
  553 + }
  554 +
  555 + public void options()
  556 + {
  557 + OptionsDialog dialog = new OptionsDialog(this);
  558 +
  559 + if (dialog.doDialog() != 0) {
  560 + dialog.transfer(preferences);
  561 + agent.initialize();
  562 + refreshAnalyzeResults();
  563 + refreshGenerateResults();
  564 + }
  565 + dialog.dispose();
  566 + }
  567 +
  568 + public void editDictSearchPaths()
  569 + {
  570 + DictSearchPathsDialog dialog = new DictSearchPathsDialog(dictSearchPaths, defaultSearchPaths);
  571 +
  572 + if (dialog.doDialog() != 0) {
  573 + getDictionaries();
  574 + preferences.dictPaths = null;
  575 + if (dictSearchPaths.size() > 0) {
  576 + int i = 0;
  577 +
  578 + preferences.dictPaths = new String[dictSearchPaths.size()];
  579 + for (String path : dictSearchPaths) {
  580 + preferences.dictPaths[i++] = path;
  581 + }
  582 + }
  583 + }
  584 + dialog.dispose();
  585 + }
  586 +
  587 + public void readPreferences()
  588 + {
  589 + String path = System.getProperty("user.home") + File.separator + ".morfeuszGUI";
  590 + File file = new File(path);
  591 + ObjectInputStream input;
  592 +
  593 + try {
  594 + input = new ObjectInputStream(new FileInputStream(file));
  595 + preferences = (Preferences)input.readObject();
  596 + input.close();
  597 + }
  598 + catch (Exception exception) {
  599 + preferences = new Preferences();
  600 + preferences.setDefaults();
  601 + }
  602 + }
  603 +
  604 + public void savePreferences()
  605 + {
  606 + String path = System.getProperty("user.home") + File.separator + ".morfeuszGUI";
  607 + File file = new File(path);
  608 + ObjectOutputStream output;
  609 +
  610 + try {
  611 + output = new ObjectOutputStream(new FileOutputStream(file));
  612 + output.writeObject(preferences);
  613 + output.close();
  614 + }
  615 + catch (Exception exception) {
  616 + }
  617 + }
  618 +
  619 + public Preferences getPreferences()
  620 + {
  621 + return preferences;
  622 + }
  623 +
  624 + public void about()
  625 + {
  626 + AboutDialog dialog = new AboutDialog(agent.getMorfeusz());
  627 +
  628 + dialog.doDialog();
  629 + }
  630 +
  631 + public void changeFontSize(boolean increase)
  632 + {
  633 + if (increase) preferences.fontSize++;
  634 + else preferences.fontSize--;
  635 + increaseFontButton.setEnabled(preferences.fontSize < NUM_OF_FONT_SIZES - 1);
  636 + decreaseFontButton.setEnabled(preferences.fontSize > 0);
  637 + plainFont = new Font(plainFont.getFontName(), plainFont.getStyle(), preferences.fontSize + 10);
  638 + boldFont = new Font(boldFont.getFontName(), boldFont.getStyle(), preferences.fontSize + 10);
  639 + italicFont = new Font(italicFont.getFontName(), italicFont.getStyle(), preferences.fontSize + 10);
  640 + textPane.setFont(plainFont);
  641 + analyzeView.changeFont();
  642 + generateView.changeFont();
  643 + }
  644 +
  645 + public pl.sgjp.morfeusz.Morfeusz getMorfeusz()
  646 + {
  647 + if (agent != null) return agent.getMorfeusz();
  648 + return null;
  649 + }
  650 +
  651 + public void reset()
  652 + {
  653 + if (analyze) {
  654 + textPane.setText(null);
  655 + textPane.requestFocusInWindow();
  656 + analyzePane.showColumns(false);
  657 + agent.clearAnalyzeResults();
  658 + }
  659 + else {
  660 + lemmaField.setText(null);
  661 + lemmaField.requestFocusInWindow();
  662 + generatePane.showColumns(false);
  663 + agent.clearGenerateResults();
  664 + }
  665 + checkComponents();
  666 + System.gc();
  667 + }
  668 +
  669 + public void analyze()
  670 + {
  671 + agent.setTextToAnalyze(textPane.getText());
  672 + if (agent.analyze()) {
  673 + if (agent.hasAnalyzeResults()) {
  674 + analyzePane.setResults(agent.getAnalyzeResults(), agent.getInterpBoundaries());
  675 + analyzePane.scrollRectToVisible(topLeft);
  676 + }
  677 + else analyzePane.setResults(null, null);
  678 + checkComponents();
  679 + }
  680 + else {
  681 + JOptionPane.showMessageDialog(null, NATIVE_ERROR_MESSAGE, "Uwaga", JOptionPane.ERROR_MESSAGE);
  682 + analyzePane.showColumns(false);
  683 + agent.clearAnalyzeResults();
  684 + }
  685 + System.gc();
  686 + }
  687 +
  688 + public void refreshAnalyzeResults()
  689 + {
  690 + if (agent.hasAnalyzeResults()) {
  691 + if (agent.analyze()) {
  692 + if (agent.hasAnalyzeResults()) {
  693 + analyzePane.setResults(agent.getAnalyzeResults(), agent.getInterpBoundaries());
  694 + analyzePane.scrollRectToVisible(topLeft);
  695 + }
  696 + else analyzePane.setResults(null, null);
  697 + checkComponents();
  698 + }
  699 + else {
  700 + JOptionPane.showMessageDialog(null, NATIVE_ERROR_MESSAGE, "Uwaga", JOptionPane.ERROR_MESSAGE);
  701 + analyzePane.showColumns(false);
  702 + agent.clearAnalyzeResults();
  703 + }
  704 + System.gc();
  705 + }
  706 + }
  707 +
  708 + public void generate()
  709 + {
  710 + String text = lemmaField.getText();
  711 + String[] t;
  712 +
  713 + text = text.trim();
  714 + t = text.split(" ");
  715 + text = t[0];
  716 + lemmaField.setText(text);
  717 + agent.setLemma(lemmaField.getText());
  718 + if (agent.generate()) {
  719 + if (agent.hasGenerateResults()) {
  720 + generatePane.setResults(agent.getGenerateResults(), null);
  721 + generatePane.scrollRectToVisible(topLeft);
  722 + }
  723 + else generatePane.setResults(null, null);
  724 + checkComponents();
  725 + }
  726 + else {
  727 + JOptionPane.showMessageDialog(null, NATIVE_ERROR_MESSAGE, "Uwaga", JOptionPane.ERROR_MESSAGE);
  728 + generatePane.showColumns(false);
  729 + agent.clearGenerateResults();
  730 + }
  731 + System.gc();
  732 + }
  733 +
  734 + public void refreshGenerateResults()
  735 + {
  736 + if (agent.hasGenerateResults()) {
  737 + if (agent.generate()) {
  738 + if (agent.hasGenerateResults()) {
  739 + generatePane.setResults(agent.getGenerateResults(), null);
  740 + generatePane.scrollRectToVisible(topLeft);
  741 + }
  742 + else generatePane.setResults(null, null);
  743 + checkComponents();
  744 + }
  745 + else {
  746 + JOptionPane.showMessageDialog(null, NATIVE_ERROR_MESSAGE, "Uwaga", JOptionPane.ERROR_MESSAGE);
  747 + generatePane.showColumns(false);
  748 + agent.clearGenerateResults();
  749 + }
  750 + System.gc();
  751 + }
  752 + }
  753 +
  754 + public void checkComponents()
  755 + {
  756 + boolean f1 = (analyze && textPane.getDocument().getLength() > 0),
  757 + f2 = (!analyze && lemmaField.getDocument().getLength() > 0),
  758 + f3 = (analyze && agent.hasAnalyzeResults()),
  759 + f4 = (!analyze && agent.hasGenerateResults());
  760 +
  761 + analyzeAction.setEnabled(f1);
  762 + generateAction.setEnabled(f2);
  763 + saveActionA.setEnabled(f3);
  764 + saveActionG.setEnabled(f4);
  765 + resetAction.setEnabled(f1 || f2 || f3 || f4);
  766 + }
  767 +
  768 + public static boolean isMacOS()
  769 + {
  770 + return isMacOS;
  771 + }
  772 +
  773 + public static void main(String[] args)
  774 + {
  775 + Morfeusz morfeuszWnd = new Morfeusz();
  776 +
  777 + morfeuszWnd.setVisible(true);
  778 + }
  779 +
  780 + private class AnalyzeView extends JPanel
  781 + {
  782 +
  783 + public AnalyzeView()
  784 + {
  785 + super(new BorderLayout());
  786 + arrangeComponents();
  787 + }
  788 +
  789 + public void arrangeComponents()
  790 + {
  791 + Box hbox, vbox;
  792 + JLabel label;
  793 + JScrollPane sp;
  794 + PlaceHolder placeHolder;
  795 + KeyStroke enterStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
  796 + InputMap im;
  797 + int x = (isMacOS() ? -4 : -2);
  798 +
  799 + vbox = Box.createVerticalBox();
  800 + vbox.setBorder(BorderFactory.createEmptyBorder(16, 16, 8, 16));
  801 + hbox = Box.createHorizontalBox();
  802 + hbox.setBorder(BorderFactory.createCompoundBorder(
  803 + BorderFactory.createTitledBorder("S\u0142ownik:"),
  804 + BorderFactory.createEmptyBorder(4, 4, 8, 4)));
  805 + analyzeDictionaryName = new JLabel(dictionary);
  806 + if (dictionary.equals(STANDARD)) analyzeDictionaryName.setForeground(Color.gray);
  807 + hbox.add(analyzeDictionaryName);
  808 + hbox.add(Box.createHorizontalGlue());
  809 + hbox.add(Box.createHorizontalStrut(8));
  810 + changeButtonA = new ToolBarButton(changeAction, "book_open");
  811 + changeButtonA.setFocusable(false);
  812 + changeButtonA.setToolTipText("Zmie\u0144 s\u0142ownik.");
  813 + hbox.add(changeButtonA);
  814 + vbox.add(hbox);
  815 + vbox.add(Box.createVerticalStrut(16));
  816 + hbox = Box.createHorizontalBox();
  817 + hbox.setBorder(BorderFactory.createEmptyBorder(0, 0, x, 0));
  818 + label = new JLabel("Tekst:");
  819 + hbox.add(label);
  820 + hbox.add(Box.createHorizontalGlue());
  821 + hbox.add(Box.createHorizontalStrut(32));
  822 + returnButton = new ToolBarButton(insertNewLineAction, "return");
  823 + returnButton.setFocusable(false);
  824 + returnButton.setToolTipText("Nowa linia.");
  825 + hbox.add(returnButton);
  826 + hbox.add(Box.createHorizontalGlue());
  827 + hbox.add(Box.createHorizontalStrut(32));
  828 + openButton = new ToolBarButton(openAction, "open");
  829 + openButton.setFocusable(false);
  830 + openButton.setToolTipText("Czytaj tekst z pliku.");
  831 + hbox.add(openButton);
  832 + vbox.add(hbox);
  833 +
  834 + textPane = new JTextArea();
  835 + textPane.setFont(plainFont);
  836 + textPane.setLineWrap(true);
  837 + textPane.setWrapStyleWord(true);
  838 + textPane.setBorder(BorderFactory.createEmptyBorder(2, 4, 2, 4));
  839 + im = textPane.getInputMap();
  840 + textPane.getActionMap().put(im.get(enterStroke), analyzeAction);
  841 + sp = new JScrollPane(textPane);
  842 + sp.setPreferredSize(new Dimension(0, 100));
  843 + add(sp);
  844 + vbox.add(sp);
  845 + add(vbox, BorderLayout.NORTH);
  846 +
  847 + vbox = Box.createVerticalBox();
  848 + vbox.setBorder(BorderFactory.createEmptyBorder(8, 16, 16, 16));
  849 + hbox = Box.createHorizontalBox();
  850 + hbox.setBorder(BorderFactory.createEmptyBorder(0, 0, x, 0));
  851 + label = new JLabel("Analiza morfologiczna:");
  852 + hbox.add(label);
  853 + hbox.add(Box.createHorizontalGlue());
  854 + appendCheckBoxA = new JCheckBox("Dopisz ");
  855 + appendCheckBoxA.setFocusable(false);
  856 + hbox.add(appendCheckBoxA);
  857 + saveButtonA = new ToolBarButton(saveActionA, "save");
  858 + saveButtonA.setFocusable(false);
  859 + saveButtonA.setToolTipText("Zapisz wynik analizy do pliku.");
  860 + hbox.add(saveButtonA);
  861 + vbox.add(hbox);
  862 +
  863 + placeHolder = new PlaceHolder();
  864 + analyzePane = new ResultsPane(true, Morfeusz.this, placeHolder);
  865 + sp = new JScrollPane(analyzePane);
  866 + sp.getViewport().setBackground(LIGHT_GRAY);
  867 + sp.setCorner(JScrollPane.UPPER_RIGHT_CORNER, placeHolder);
  868 + vbox.add(sp);
  869 + add(vbox, BorderLayout.CENTER);
  870 +
  871 + textPane.getDocument().addDocumentListener(new DocumentListener() {
  872 + public void changedUpdate(DocumentEvent event)
  873 + {
  874 + }
  875 +
  876 + public void insertUpdate(DocumentEvent event)
  877 + {
  878 + checkComponents();
  879 + }
  880 +
  881 + public void removeUpdate(DocumentEvent event)
  882 + {
  883 + checkComponents();
  884 + }
  885 + });
  886 +
  887 + appendCheckBoxA.addActionListener(new ActionListener() {
  888 + public void actionPerformed(ActionEvent event)
  889 + {
  890 + appendCheckBoxG.setSelected(appendCheckBoxA.isSelected());
  891 + }
  892 + });
  893 + }
  894 +
  895 + public void changeFont()
  896 + {
  897 + analyzePane.changeFont();
  898 + }
  899 +
  900 + }
  901 +
  902 + private class GenerateView extends JPanel
  903 + {
  904 +
  905 + public GenerateView()
  906 + {
  907 + super(new BorderLayout());
  908 + arrangeComponents();
  909 + }
  910 +
  911 + public void arrangeComponents()
  912 + {
  913 + Box hbox, vbox;
  914 + JLabel label;
  915 + JScrollPane sp;
  916 + PlaceHolder placeHolder;
  917 + Dimension dim;
  918 + int x = (isMacOS() ? -4 : -2);
  919 +
  920 + vbox = Box.createVerticalBox();
  921 + hbox = Box.createHorizontalBox();
  922 + hbox.setBorder(BorderFactory.createCompoundBorder(
  923 + BorderFactory.createTitledBorder("S\u0142ownik:"),
  924 + BorderFactory.createEmptyBorder(4, 4, 8, 4)));
  925 + generateDictionaryName = new JLabel(dictionary);
  926 + if (dictionary.equals(STANDARD)) generateDictionaryName.setForeground(Color.gray);
  927 + hbox.add(generateDictionaryName);
  928 + hbox.add(Box.createHorizontalGlue());
  929 + hbox.add(Box.createHorizontalStrut(8));
  930 + changeButtonG = new ToolBarButton(changeAction, "book_open");
  931 + changeButtonG.setFocusable(false);
  932 + changeButtonG.setToolTipText("Zmie\u0144 s\u0142ownik.");
  933 + hbox.add(changeButtonG);
  934 + vbox.add(hbox);
  935 + vbox.add(Box.createVerticalStrut(20));
  936 + hbox = Box.createHorizontalBox();
  937 + vbox.setBorder(BorderFactory.createEmptyBorder(16, 16, 8, 16));
  938 + label = new JLabel("Lemat:");
  939 + hbox.add(label);
  940 + hbox.add(Box.createHorizontalStrut(8));
  941 + lemmaField = new JTextField(30);
  942 + hbox.add(lemmaField);
  943 + dim = lemmaField.getPreferredSize();
  944 + lemmaField.setMaximumSize(dim);
  945 + hbox.add(Box.createHorizontalGlue());
  946 + vbox.add(hbox);
  947 + add(vbox, BorderLayout.NORTH);
  948 +
  949 + vbox = Box.createVerticalBox();
  950 + vbox.setBorder(BorderFactory.createEmptyBorder(8, 16, 16, 16));
  951 + hbox = Box.createHorizontalBox();
  952 + hbox.setBorder(BorderFactory.createEmptyBorder(0, 0, x, 0));
  953 + label = new JLabel("Wygenerowane formy:");
  954 + hbox.add(label);
  955 + hbox.add(Box.createHorizontalGlue());
  956 + appendCheckBoxG = new JCheckBox("Dopisz ");
  957 + appendCheckBoxG.setFocusable(false);
  958 + hbox.add(appendCheckBoxG);
  959 + saveButtonG = new ToolBarButton(saveActionG, "save");
  960 + saveButtonG.setFocusable(false);
  961 + saveButtonG.setToolTipText("Zapisz wygenerowane formy wyrazowe do pliku.");
  962 + hbox.add(saveButtonG);
  963 + vbox.add(hbox);
  964 +
  965 + placeHolder = new PlaceHolder();
  966 + generatePane = new ResultsPane(false, Morfeusz.this, placeHolder);
  967 + sp = new JScrollPane(generatePane);
  968 + sp.getViewport().setBackground(LIGHT_GRAY);
  969 + sp.setCorner(JScrollPane.UPPER_RIGHT_CORNER, placeHolder);
  970 + vbox.add(sp);
  971 + add(vbox, BorderLayout.CENTER);
  972 +
  973 + lemmaField.getDocument().addDocumentListener(new DocumentListener() {
  974 + public void changedUpdate(DocumentEvent event)
  975 + {
  976 + }
  977 +
  978 + public void insertUpdate(DocumentEvent event)
  979 + {
  980 + checkComponents();
  981 + }
  982 +
  983 + public void removeUpdate(DocumentEvent event)
  984 + {
  985 + checkComponents();
  986 + }
  987 + });
  988 +
  989 + appendCheckBoxG.addActionListener(new ActionListener() {
  990 + public void actionPerformed(ActionEvent event)
  991 + {
  992 + appendCheckBoxA.setSelected(appendCheckBoxG.isSelected());
  993 + }
  994 + });
  995 + }
  996 +
  997 + public void changeFont()
  998 + {
  999 + generatePane.changeFont();
  1000 + }
  1001 +
  1002 + }
  1003 +
  1004 + public class DictFilter implements FilenameFilter
  1005 + {
  1006 +
  1007 + public boolean accept(File dir, String name)
  1008 + {
  1009 + return (name.endsWith("-a.dict") || name.endsWith("-s.dict"));
  1010 + }
  1011 +
  1012 + }
  1013 +
  1014 +}
... ...
gui/morfeusz/OptionsDialog.java 0 → 100755
  1 +package morfeusz;
  2 +
  3 +import java.awt.*;
  4 +import java.awt.event.*;
  5 +
  6 +import javax.swing.*;
  7 +import javax.swing.GroupLayout.*;
  8 +
  9 +import pl.sgjp.morfeusz.*;
  10 +
  11 +@SuppressWarnings("serial")
  12 +public class OptionsDialog extends JPanel
  13 +{
  14 +
  15 + private JDialog dialog;
  16 + private JButton acceptButton;
  17 + private JButton cancelButton;
  18 + private JButton defaultsButton;
  19 + private JComboBox<String> agglCombo;
  20 + private JComboBox<String> praetCombo;
  21 + private JComboBox<String> caseCombo;
  22 + private JComboBox<String> spaceCombo;
  23 + private JComboBox<String> tokenCombo;
  24 + private Morfeusz controller;
  25 + private int ret;
  26 +
  27 + public OptionsDialog(Morfeusz controller)
  28 + {
  29 + super(new BorderLayout());
  30 + this.controller = controller;
  31 + arrangeComponents();
  32 + initiateValues();
  33 + }
  34 +
  35 + public void arrangeComponents()
  36 + {
  37 + JLabel label1, label2, label3, label4, label5;
  38 + JPanel paramPanel = new JPanel();
  39 + Box bottomPanel = Box.createHorizontalBox();
  40 + GroupLayout gl = new GroupLayout(paramPanel);
  41 + GroupLayout.SequentialGroup hGroup = gl.createSequentialGroup();
  42 + GroupLayout.SequentialGroup vGroup = gl.createSequentialGroup();
  43 + Dimension dim;
  44 +
  45 + acceptButton = new JButton("Akceptuj");
  46 + cancelButton = new JButton("Anuluj");
  47 + defaultsButton = new JButton("Warto\u015Bci domy\u015Blne");
  48 + label1 = new JLabel("aggl: ");
  49 + label2 = new JLabel("praet: ");
  50 + label3 = new JLabel("case-handling: ");
  51 + label4 = new JLabel("whitespace-handling: ");
  52 + label5 = new JLabel("token-numbering: ");
  53 + agglCombo = new JComboBox<String>();
  54 + for (String str : controller.getMorfeusz().getAvailableAgglOptions()) agglCombo.addItem(str);
  55 + praetCombo = new JComboBox<String>();
  56 + for (String str : controller.getMorfeusz().getAvailablePraetOptions()) praetCombo.addItem(str);
  57 + caseCombo = new JComboBox<String>();
  58 + for (CaseHandling ch : CaseHandling.values()) caseCombo.addItem(ch.name());
  59 + spaceCombo = new JComboBox<String>();
  60 + for (WhitespaceHandling wh : WhitespaceHandling.values()) spaceCombo.addItem(wh.name());
  61 + tokenCombo = new JComboBox<String>();
  62 + for (TokenNumbering tn : TokenNumbering.values()) tokenCombo.addItem(tn.name());
  63 + if (!Morfeusz.isMacOS()) {
  64 + gl.setAutoCreateGaps(true);
  65 + gl.setAutoCreateContainerGaps(true);
  66 + }
  67 + paramPanel.setLayout(gl);
  68 + hGroup.addGroup(gl.createParallelGroup().addComponent(label1).
  69 + addComponent(label2).addComponent(label3).
  70 + addComponent(label4).addComponent(label5));
  71 + hGroup.addGroup(gl.createParallelGroup().addComponent(agglCombo).
  72 + addComponent(praetCombo).addComponent(caseCombo).
  73 + addComponent(spaceCombo).addComponent(tokenCombo));
  74 + gl.setHorizontalGroup(hGroup);
  75 + vGroup.addGroup(gl.createParallelGroup(Alignment.BASELINE).
  76 + addComponent(label1).addComponent(agglCombo));
  77 + vGroup.addGroup(gl.createParallelGroup(Alignment.BASELINE).
  78 + addComponent(label2).addComponent(praetCombo));
  79 + vGroup.addGroup(gl.createParallelGroup(Alignment.BASELINE).
  80 + addComponent(label3).addComponent(caseCombo));
  81 + vGroup.addGroup(gl.createParallelGroup(Alignment.BASELINE).
  82 + addComponent(label4).addComponent(spaceCombo));
  83 + vGroup.addGroup(gl.createParallelGroup(Alignment.BASELINE).
  84 + addComponent(label5).addComponent(tokenCombo));
  85 + gl.setVerticalGroup(vGroup);
  86 + bottomPanel.setBorder(BorderFactory.createEmptyBorder(16, 0, 0, 0));
  87 + bottomPanel.add(defaultsButton);
  88 + bottomPanel.add(Box.createHorizontalStrut(8));
  89 + bottomPanel.add(Box.createHorizontalGlue());
  90 + bottomPanel.add(cancelButton);
  91 + bottomPanel.add(Box.createHorizontalStrut(8));
  92 + bottomPanel.add(acceptButton);
  93 + dim = acceptButton.getPreferredSize();
  94 + cancelButton.setPreferredSize(dim);
  95 + setBorder(BorderFactory.createEmptyBorder(16, 16, 16, 16));
  96 + add(paramPanel, BorderLayout.CENTER);
  97 + add(bottomPanel, BorderLayout.SOUTH);
  98 + defaultsButton.addActionListener(new ActionListener() {
  99 + public void actionPerformed(ActionEvent event)
  100 + {
  101 + setDefaults();
  102 + }
  103 + });
  104 + cancelButton.addActionListener(new ActionListener() {
  105 + public void actionPerformed(ActionEvent event)
  106 + {
  107 + dialog.setVisible(false);
  108 + }
  109 + });
  110 + acceptButton.addActionListener(new ActionListener() {
  111 + public void actionPerformed(ActionEvent event)
  112 + {
  113 + ret = 1;
  114 + dialog.setVisible(false);
  115 + }
  116 + });
  117 + }
  118 +
  119 + public void setDefaults()
  120 + {
  121 + Preferences prefs = new Preferences();
  122 +
  123 + prefs.setMorfeuszDefaults();
  124 + initiateValues(prefs);
  125 + }
  126 +
  127 + public void initiateValues()
  128 + {
  129 + initiateValues(controller.getPreferences());
  130 + }
  131 +
  132 + public void initiateValues(Preferences prefs)
  133 + {
  134 + agglCombo.setSelectedItem(prefs.aggl);
  135 + praetCombo.setSelectedItem(prefs.praet);
  136 + caseCombo.setSelectedItem(prefs.caseHandling.name());
  137 + spaceCombo.setSelectedItem(prefs.whitespaceHandling.name());
  138 + tokenCombo.setSelectedItem(prefs.tokenNumbering.name());
  139 + }
  140 +
  141 + public void transfer(Preferences prefs)
  142 + {
  143 + prefs.aggl = (String) agglCombo.getSelectedItem();
  144 + prefs.praet = (String) praetCombo.getSelectedItem();
  145 + prefs.caseHandling = CaseHandling.values()[caseCombo.getSelectedIndex()];
  146 + prefs.whitespaceHandling = WhitespaceHandling.values()[spaceCombo.getSelectedIndex()];
  147 + prefs.tokenNumbering = TokenNumbering.values()[tokenCombo.getSelectedIndex()];
  148 + }
  149 +
  150 + public int doDialog()
  151 + {
  152 + ret = 0;
  153 + dialog = new JDialog();
  154 + dialog.setModal(true);
  155 + dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
  156 + dialog.setTitle("Opcje programu");
  157 + dialog.setResizable(false);
  158 + dialog.getContentPane().add(this);
  159 + dialog.pack();
  160 + dialog.setLocationRelativeTo(null);
  161 + dialog.setVisible(true);
  162 + return ret;
  163 + }
  164 +
  165 + public void dispose()
  166 + {
  167 + if (dialog != null) {
  168 + dialog.dispose();
  169 + dialog = null;
  170 + }
  171 + }
  172 +
  173 +}
... ...
gui/morfeusz/PlaceHolder.java 0 → 100755
  1 +package morfeusz;
  2 +
  3 +import java.awt.*;
  4 +
  5 +import javax.swing.*;
  6 +
  7 +@SuppressWarnings("serial")
  8 +public class PlaceHolder extends JPanel
  9 +{
  10 + private boolean show;
  11 +
  12 + public PlaceHolder()
  13 + {
  14 + super();
  15 + show = false;
  16 + setBackground(Morfeusz.LIGHT_GRAY);
  17 + }
  18 +
  19 + public void showBottomLine(boolean f)
  20 + {
  21 + if (show != f) {
  22 + show = f;
  23 + repaint();
  24 + }
  25 + }
  26 +
  27 + public void paintComponent(Graphics graphics)
  28 + {
  29 + super.paintComponent(graphics);
  30 + if (show) {
  31 + graphics.setColor(Color.lightGray);
  32 + if (Morfeusz.isMacOS()) {
  33 + graphics.drawLine(0, getHeight() - 2, getWidth(), getHeight() - 2);
  34 + graphics.setColor(Color.white);
  35 + graphics.drawLine(0, getHeight() - 1, getWidth(), getHeight() - 1);
  36 + }
  37 + else graphics.drawLine(0, getHeight() - 1, getWidth(), getHeight() - 1);
  38 + }
  39 + }
  40 +
  41 +}
... ...
gui/morfeusz/Preferences.java 0 → 100755
  1 +package morfeusz;
  2 +
  3 +import java.io.Serializable;
  4 +
  5 +import pl.sgjp.morfeusz.*;
  6 +
  7 +@SuppressWarnings("serial")
  8 +public class Preferences implements Serializable
  9 +{
  10 +
  11 + public String aggl;
  12 + public String praet;
  13 + public CaseHandling caseHandling;
  14 + public WhitespaceHandling whitespaceHandling;
  15 + public TokenNumbering tokenNumbering;
  16 + public int fontSize;
  17 + public int sortedColumn;
  18 + public String dictionary;
  19 + public String[] dictPaths;
  20 +
  21 + public Preferences()
  22 + {
  23 + }
  24 +
  25 + public void setDefaults()
  26 + {
  27 + setMorfeuszDefaults();
  28 + fontSize = 2;
  29 + sortedColumn = 0;
  30 + dictionary = null;
  31 + dictPaths = null;
  32 + }
  33 +
  34 + public void setMorfeuszDefaults()
  35 + {
  36 + aggl = "strict";
  37 + praet = "split";
  38 + caseHandling = CaseHandling.CONDITIONALLY_CASE_SENSITIVE;
  39 + whitespaceHandling = WhitespaceHandling.SKIP_WHITESPACES;
  40 + tokenNumbering = TokenNumbering.SEPARATE_NUMBERING;
  41 + }
  42 +
  43 +}
... ...
gui/morfeusz/RecentFileAction.java 0 → 100755
  1 +package morfeusz;
  2 +
  3 +import java.awt.event.ActionEvent;
  4 +import javax.swing.AbstractAction;
  5 +import javax.swing.Action;
  6 +
  7 +@SuppressWarnings("serial")
  8 +public class RecentFileAction extends AbstractAction
  9 +{
  10 +
  11 + private Morfeusz controller;
  12 + private String name;
  13 +
  14 + public RecentFileAction(String name, Morfeusz controller)
  15 + {
  16 + super();
  17 + this.name = name;
  18 + this.controller = controller;
  19 +
  20 + putValue(Action.NAME, name);
  21 + }
  22 +
  23 + public void actionPerformed(ActionEvent e)
  24 + {
  25 + controller.changeDictionary(name);
  26 + }
  27 +
  28 + public String getName()
  29 + {
  30 + return name;
  31 + }
  32 +
  33 +}
... ...
gui/morfeusz/ResultsPane.java 0 → 100755
  1 +package morfeusz;
  2 +
  3 +import java.awt.*;
  4 +import java.awt.event.*;
  5 +import java.net.*;
  6 +import java.text.*;
  7 +import java.util.*;
  8 +
  9 +import javax.swing.*;
  10 +import javax.swing.border.*;
  11 +import javax.swing.table.*;
  12 +
  13 +import pl.sgjp.morfeusz.*;
  14 +
  15 +@SuppressWarnings("serial")
  16 +public class ResultsPane extends JTable
  17 +{
  18 +
  19 + public static final String[] HEADERS1 = { "", "", "Forma", "Lemat", "Tag", "Nazwa", "Kwalifikatory" };
  20 + public static final String[] HEADERS2 = { "Forma", "Lemat", "Tag", "Nazwa", "Kwalifikatory" };
  21 + public static final Border emptyBorder = BorderFactory.createEmptyBorder(0, 2, 0, 2);
  22 + public static final Border lineBorder = BorderFactory.createCompoundBorder(
  23 + BorderFactory.createCompoundBorder(
  24 + BorderFactory.createEmptyBorder(0, -1, -1, -1),
  25 + BorderFactory.createLineBorder(Color.lightGray)),
  26 + BorderFactory.createEmptyBorder(0, 2, 0, 2));
  27 +
  28 + private Morfeusz controller;
  29 + private JTable resultsTable;
  30 + private ColumnSorter columnSorter;
  31 + private java.util.List<MorphInterpretation> results;
  32 + private HashSet<Integer> interpBoundaries;
  33 + private PlaceHolder placeHolder;
  34 + private String[] headers;
  35 + private TableColumn[] tableColumns;
  36 + private boolean analyze;
  37 + private boolean columnsAreVisible;
  38 +
  39 + public ResultsPane(boolean analyze, Morfeusz controller, PlaceHolder placeHolder)
  40 + {
  41 + super();
  42 + this.controller = controller;
  43 + this.analyze = analyze;
  44 + this.placeHolder = placeHolder;
  45 + resultsTable = this;
  46 + initTable();
  47 + }
  48 +
  49 + public void initTable()
  50 + {
  51 +
  52 + if (analyze) headers = HEADERS1;
  53 + else headers = HEADERS2;
  54 +
  55 + TableViewModel model = new TableViewModel();
  56 + FontMetrics fm = getFontMetrics(Morfeusz.boldFont);
  57 +
  58 + columnSorter = new ColumnSorter();
  59 + setModel(model);
  60 + setBorder(BorderFactory.createCompoundBorder(
  61 + BorderFactory.createEmptyBorder(-1, -1 , 0, -1),
  62 + BorderFactory.createLineBorder(Color.lightGray)));
  63 + setBackground(Morfeusz.LIGHT_GRAY);
  64 + setGridColor(Color.lightGray);
  65 + setShowHorizontalLines(false);
  66 + setAutoResizeMode(AUTO_RESIZE_OFF);
  67 + setRowSelectionAllowed(false);
  68 + setRowHeight(fm.getHeight() + 4);
  69 +
  70 + TableColumnModel columnModel = getColumnModel();
  71 + TableCellRenderer cellRenderer = new RowRenderer();
  72 + TableHeader tableHeader = new TableHeader(columnModel);
  73 + setTableHeader(tableHeader);
  74 + tableColumns = new TableColumn[headers.length];
  75 +
  76 + for (int i = 0; i < columnModel.getColumnCount(); i++) {
  77 + TableColumn column = columnModel.getColumn(i);
  78 +
  79 + tableColumns[i] = column;
  80 + column.setHeaderValue(headers[i]);
  81 + column.setCellRenderer(cellRenderer);
  82 + column.setHeaderRenderer(tableHeader.getDefaultRenderer());
  83 + }
  84 +
  85 + getTableHeader().setReorderingAllowed(false);
  86 + columnsAreVisible = true;
  87 + showColumns(false);
  88 + }
  89 +
  90 + public void sortTable(int sortedColumn)
  91 + {
  92 + if (controller.getPreferences().sortedColumn != sortedColumn) {
  93 + controller.getPreferences().sortedColumn = sortedColumn;
  94 + columnSorter.setSortedColumn(sortedColumn);
  95 + resetResults();
  96 + }
  97 + }
  98 +
  99 + public void showColumns(boolean show)
  100 + {
  101 + if (columnsAreVisible != show) {
  102 + columnsAreVisible = show;
  103 + for (int i = 0; i < tableColumns.length; i++) {
  104 + if (show) addColumn(tableColumns[i]);
  105 + else removeColumn(tableColumns[i]);
  106 + }
  107 + if (show) {
  108 + TableColumnModel columnModel = getColumnModel();
  109 +
  110 + for (int i = 0; i < columnModel.getColumnCount(); i++) {
  111 + TableColumn column = columnModel.getColumn(i);
  112 +
  113 + column.setHeaderRenderer(tableHeader.getDefaultRenderer());
  114 + }
  115 + }
  116 + }
  117 + placeHolder.showBottomLine(show);
  118 + }
  119 +
  120 + public void calculateSizes()
  121 + {
  122 + TableColumnModel columnModel = getColumnModel();
  123 + TableColumn tableColumn;
  124 + TableCellRenderer renderer;
  125 + Component component;
  126 + Object value;
  127 + int w;
  128 +
  129 + for (int column = 0; column < columnModel.getColumnCount(); column++) {
  130 + w = 0;
  131 + tableColumn = columnModel.getColumn(column);
  132 + for (int row = 0; row < getRowCount(); row++) {
  133 + renderer = getCellRenderer(row, column);
  134 + value = getValueAt(row, column);
  135 + component = renderer.getTableCellRendererComponent(this,
  136 + value, false, false, row, column);
  137 + w = Math.max (component.getPreferredSize().width, w);
  138 + }
  139 + renderer = tableColumn.getHeaderRenderer();
  140 + value = tableColumn.getHeaderValue();
  141 + component = renderer.getTableCellRendererComponent(this,
  142 + value, false, false, 0, column);
  143 + w = Math.max (component.getPreferredSize().width, w);
  144 + columnModel.getColumn(column).setPreferredWidth(w + 4);
  145 + }
  146 + }
  147 +
  148 + public void changeFont()
  149 + {
  150 + FontMetrics fm = getFontMetrics(Morfeusz.boldFont);
  151 + TableHeader tableHeader = new TableHeader(columnModel);
  152 + TableColumnModel columnModel = getColumnModel();
  153 +
  154 + setRowHeight(fm.getHeight() + 4);
  155 + for (int i = 0; i < columnModel.getColumnCount(); i++) {
  156 + TableColumn column = columnModel.getColumn(i);
  157 +
  158 + column.setHeaderRenderer(tableHeader.getDefaultRenderer());
  159 + }
  160 + calculateSizes();
  161 + revalidate();
  162 + repaint();
  163 + getTableHeader().repaint();
  164 + }
  165 +
  166 + public boolean isCellEditable(int row, int column)
  167 + {
  168 + return false;
  169 + }
  170 +
  171 + public void setResults(java.util.List<MorphInterpretation> results,
  172 + HashSet<Integer> interpBoundaries)
  173 + {
  174 + this.results = results;
  175 + this.interpBoundaries = interpBoundaries;
  176 + resetResults();
  177 + }
  178 +
  179 + public void resetResults()
  180 + {
  181 + if (results == null) showColumns(false);
  182 + else {
  183 + if (!analyze) Collections.sort(results, columnSorter);
  184 + showColumns(true);
  185 + calculateSizes();
  186 + revalidate();
  187 + repaint();
  188 + }
  189 + getTableHeader().repaint();
  190 + }
  191 +
  192 + public boolean newNode(int row)
  193 + {
  194 + boolean f = true;
  195 +
  196 + if (row > 0) {
  197 + MorphInterpretation i1 = results.get(row);
  198 + MorphInterpretation i2 = results.get(row - 1);
  199 + int sn1 = i1.getStartNode(), en1 = i1.getEndNode(),
  200 + sn2 = i2.getStartNode(), en2 = i2.getEndNode();
  201 +
  202 + if (sn1 == sn2 && en1 == en2 && !interpBoundaries.contains(row)) f = false;
  203 + }
  204 + return f;
  205 + }
  206 +
  207 + private class TableViewModel extends AbstractTableModel
  208 + {
  209 +
  210 + public TableViewModel()
  211 + {
  212 + super();
  213 + }
  214 +
  215 + public int getRowCount()
  216 + {
  217 + if (results == null) return 0;
  218 + return (int)results.size();
  219 + }
  220 +
  221 + public int getColumnCount()
  222 + {
  223 + return headers.length;
  224 + }
  225 +
  226 + public Object getValueAt(int row, int column)
  227 + {
  228 + MorphInterpretation interp = results.get(row);
  229 + boolean f;
  230 +
  231 + if (analyze) f = newNode(row);
  232 + else {
  233 + f = true;
  234 + column += 2;
  235 + }
  236 +
  237 + switch (column) {
  238 + case 0 : if (f) return(Integer.toString(interp.getStartNode()));
  239 + return null;
  240 + case 1 : if (f) return(Integer.toString(interp.getEndNode()));
  241 + return null;
  242 + case 2 : if (f) {
  243 + String str = interp.getOrth();
  244 +
  245 + if (str.contains(" ")) str = str.replace(' ', '\u23B5');
  246 + return(str);
  247 + }
  248 + return null;
  249 + case 3 : return(interp.getLemma());
  250 + case 4 : return(interp.getTag(controller.getMorfeusz()));
  251 + case 5 : return(interp.getName(controller.getMorfeusz()));
  252 + case 6 :
  253 + Collection<String> labels = interp.getLabels(controller.getMorfeusz());
  254 + String str = null;
  255 + boolean append = false;
  256 +
  257 + if (labels.size() > 0) {
  258 + str = "[";
  259 + for (String s : labels) {
  260 + if (append) str += "; ";
  261 + str += s;
  262 + append = true;
  263 + }
  264 + str += "]";
  265 + }
  266 + return str;
  267 + default : return null;
  268 + }
  269 + }
  270 +
  271 + }
  272 +
  273 + private class RowRenderer extends DefaultTableCellRenderer
  274 + {
  275 +
  276 + public Component getTableCellRendererComponent(JTable table, Object value,
  277 + boolean isSelected, boolean hasFocus, int row, int column)
  278 + {
  279 + JLabel label = (JLabel)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
  280 +
  281 + if (analyze) {
  282 + boolean f = newNode(row) && row > 0;
  283 +
  284 + if (column <= 1) label.setHorizontalAlignment(JLabel.CENTER);
  285 + else label.setHorizontalAlignment(JLabel.LEFT);
  286 + if (column == 2) setFont(Morfeusz.boldFont);
  287 + else if (column == 5 || column == 6) setFont(Morfeusz.italicFont);
  288 + else setFont(Morfeusz.plainFont);
  289 + if (f) setBorder(lineBorder);
  290 + else setBorder(emptyBorder);
  291 + }
  292 + else {
  293 + if (column == 0) setFont(Morfeusz.boldFont);
  294 + else if (column == 1) setFont(Morfeusz.plainFont);
  295 + else setFont(Morfeusz.italicFont);
  296 + setBorder(emptyBorder);
  297 + }
  298 + if (row % 2 == 0) setBackground(Morfeusz.VLIGHT_BLUE);
  299 + else setBackground(Color.white);
  300 + setForeground(Color.black);
  301 + setValue(value);
  302 + return this;
  303 + }
  304 +
  305 + }
  306 +
  307 + private class TableHeader extends JTableHeader
  308 + {
  309 +
  310 + private PlaceHolder corner = new PlaceHolder();
  311 + private boolean initialized = false;
  312 + private int cursorPos = -1;
  313 + private int column = -1;
  314 +
  315 + public TableHeader(TableColumnModel model)
  316 + {
  317 + super(model);
  318 + setDefaultRenderer(new HeaderRenderer());
  319 + setResizingAllowed(true);
  320 + corner.setLocation(0, 0);
  321 + corner.showBottomLine(columnsAreVisible);
  322 + add(corner);
  323 + if (!analyze) {
  324 + addMouseListener(new MouseAdapter()
  325 + {
  326 + public void mouseClicked(MouseEvent event)
  327 + {
  328 + cursorPos = event.getX();
  329 +
  330 + TableColumnModel tcm = getColumnModel();
  331 +
  332 + column = tcm.getColumnIndexAtX(event.getX());
  333 +
  334 + if (column >= 0 && column <= 2) sortTable(column);
  335 + }
  336 +
  337 + public void mouseReleased(MouseEvent event)
  338 + {
  339 + cursorPos = event.getX();
  340 +
  341 + TableColumnModel tcm = getColumnModel();
  342 +
  343 + column = tcm.getColumnIndexAtX(cursorPos);
  344 + adjustCursor();
  345 + }
  346 + });
  347 + addMouseMotionListener(new MouseMotionAdapter() {
  348 + public void mouseMoved(MouseEvent event)
  349 + {
  350 + cursorPos = event.getX();
  351 +
  352 + TableColumnModel model = resultsTable.getColumnModel();
  353 + int c = model.getColumnIndexAtX(cursorPos);
  354 +
  355 + TableColumn col = null;
  356 + if (c >= 0 && c <= 2) col = model.getColumn(c);
  357 + if (col != null) {
  358 + if (c != column) {
  359 + switch (c) {
  360 + case 0 : setToolTipText("Sortuj formy."); break;
  361 + case 1 : setToolTipText("Sortuj lematy."); break;
  362 + case 2 : setToolTipText("Sortuj tagi."); break;
  363 + default : setToolTipText(null);
  364 + }
  365 + }
  366 + }
  367 + else setToolTipText(null);
  368 + if (c != column) column = c;
  369 + adjustCursor();
  370 + }
  371 + });
  372 + }
  373 + }
  374 +
  375 + public void adjustCursor()
  376 + {
  377 + if (column >= 0 && column <= 2) {
  378 + if (isResizeSpot(column, cursorPos))
  379 + setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
  380 + else setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
  381 + }
  382 + else {
  383 + if (isResizeSpot(column, cursorPos))
  384 + setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
  385 + else setCursor(Cursor.getDefaultCursor());
  386 + }
  387 + }
  388 +
  389 + public boolean isResizeSpot(int column, int x)
  390 + {
  391 + TableColumnModel model = resultsTable.getColumnModel();
  392 + Rectangle rect = getHeaderRect(column);
  393 + int left, right, count = model.getColumnCount();
  394 +
  395 + if (column < 0 || column >= count) return false;
  396 + else if (column == 0) {
  397 + left = rect.x;
  398 + right = left + rect.width - 3;
  399 + }
  400 + else {
  401 + left = rect.x += 3;
  402 + right = left + rect.width - 6;
  403 + }
  404 + if (x >= left && x < right) return false;
  405 + return true;
  406 + }
  407 +
  408 + public Dimension getPreferredSize()
  409 + {
  410 + Dimension dim = super.getPreferredSize();
  411 + FontMetrics fm = getFontMetrics(Morfeusz.boldFont);
  412 +
  413 + dim.height = fm.getHeight() + 4;
  414 + return dim;
  415 + }
  416 +
  417 + public void setBounds(int x, int y, int width, int height)
  418 + {
  419 + super.setBounds(x, y, width, height);
  420 + moveCorner();
  421 + initialized = true;
  422 + }
  423 +
  424 + public void moveCorner()
  425 + {
  426 + TableColumnModel tcm = getColumnModel();
  427 + Rectangle rect;
  428 +
  429 + rect = getHeaderRect(tcm.getColumnCount() - 1);
  430 + corner.setLocation(rect.x + rect.width, 0);
  431 + corner.setSize(getWidth() - rect.x - rect.width, getHeight());
  432 + }
  433 +
  434 + public void resizeAndRepaint()
  435 + {
  436 + super.resizeAndRepaint();
  437 + if (initialized) {
  438 + moveCorner();
  439 + corner.showBottomLine(columnsAreVisible);
  440 + }
  441 + }
  442 + }
  443 +
  444 + private class HeaderRenderer implements TableCellRenderer
  445 + {
  446 +
  447 + private JLabel renderer;
  448 + private Icon startNode, endNode, downArrow;
  449 +
  450 + public HeaderRenderer()
  451 + {
  452 + Border headerBorder = UIManager.getBorder("TableHeader.cellBorder");
  453 + URL url;
  454 +
  455 + renderer = new JLabel();
  456 + renderer.setFont(Morfeusz.boldFont);
  457 + renderer.setBorder(headerBorder);
  458 + renderer.setBackground(UIManager.getColor("TableHeader.background"));
  459 + renderer.setForeground(UIManager.getColor("TableHeader.foreground"));
  460 + if (analyze) {
  461 + url = ClassLoader.getSystemClassLoader().getResource("start_node.gif");
  462 + startNode = new ImageIcon(url);
  463 + url = ClassLoader.getSystemClassLoader().getResource("end_node.gif");
  464 + endNode = new ImageIcon(url);
  465 + }
  466 + else {
  467 + url = ClassLoader.getSystemClassLoader().getResource("down.gif");
  468 + downArrow = new ImageIcon(url);
  469 + }
  470 + }
  471 +
  472 + public Component getTableCellRendererComponent(JTable table,
  473 + Object value, boolean isSelected, boolean hasFocus, int row, int column)
  474 + {
  475 + renderer.setText((String)value);
  476 + if (analyze) {
  477 + if (column == 0) {
  478 + renderer.setIcon(startNode);
  479 + renderer.setHorizontalAlignment(JLabel.CENTER);
  480 + }
  481 + else if (column == 1) {
  482 + renderer.setIcon(endNode);
  483 + renderer.setHorizontalAlignment(JLabel.CENTER);
  484 + }
  485 + else {
  486 + renderer.setIcon(null);
  487 + renderer.setHorizontalAlignment(JLabel.LEFT);
  488 + }
  489 + }
  490 + else {
  491 + int sortedColumn = controller.getPreferences().sortedColumn;
  492 +
  493 + if (column == sortedColumn) renderer.setIcon(downArrow);
  494 + else renderer.setIcon(null);
  495 + renderer.setHorizontalAlignment(JLabel.LEFT);
  496 + }
  497 + return renderer;
  498 + }
  499 +
  500 + }
  501 +
  502 + private class ColumnSorter implements Comparator<MorphInterpretation>
  503 + {
  504 +
  505 + private Collator collator = Collator.getInstance(new Locale("pl", "PL"));
  506 + private int sortedColumn;
  507 +
  508 + public ColumnSorter()
  509 + {
  510 + sortedColumn = controller.getPreferences().sortedColumn;
  511 + }
  512 +
  513 + public void setSortedColumn(int sortedColumn)
  514 + {
  515 + this.sortedColumn = sortedColumn;
  516 + }
  517 +
  518 + public int compare(MorphInterpretation mi1, MorphInterpretation mi2)
  519 + {
  520 + if (sortedColumn == 0) return compareForms(mi1, mi2);
  521 + else if (sortedColumn == 1) return compareLemmas(mi1, mi2);
  522 + return compareTags(mi1, mi2);
  523 + }
  524 +
  525 + public int compareForms(MorphInterpretation mi1, MorphInterpretation mi2)
  526 + {
  527 + String s1 = mi1.getOrth(), s2 = mi2.getOrth();
  528 + int res = collator.compare(s1, s2);
  529 +
  530 + if (res == 0) {
  531 + s1 = mi1.getLemma();
  532 + s2 = mi2.getLemma();
  533 + res = collator.compare(s1, s2);
  534 + }
  535 + return res;
  536 + }
  537 +
  538 + public int compareLemmas(MorphInterpretation mi1, MorphInterpretation mi2)
  539 + {
  540 + String s1 = mi1.getLemma(), s2 = mi2.getLemma();
  541 + int res = collator.compare(s1, s2);
  542 +
  543 + if (res == 0) {
  544 + s1 = mi1.getOrth();
  545 + s2 = mi2.getOrth();
  546 + res = collator.compare(s1, s2);
  547 + }
  548 + return res;
  549 + }
  550 +
  551 + public int compareTags(MorphInterpretation mi1, MorphInterpretation mi2)
  552 + {
  553 + String s1 = mi1.getTag(controller.getMorfeusz()), s2 = mi2.getTag(controller.getMorfeusz());
  554 +
  555 + return collator.compare(s1, s2);
  556 + }
  557 +
  558 + }
  559 +
  560 +}
... ...
gui/morfeusz/SelectFileDialog.java 0 → 100755
  1 +package morfeusz;
  2 +
  3 +import java.awt.*;
  4 +import java.awt.event.*;
  5 +import java.io.*;
  6 +import javax.swing.*;
  7 +import javax.swing.filechooser.*;
  8 +
  9 +@SuppressWarnings("serial")
  10 +public class SelectFileDialog extends JDialog
  11 +{
  12 +
  13 + public static final int LOAD = 0;
  14 + public static final int SAVE = 1;
  15 +
  16 + private int mode;
  17 + private boolean accepted;
  18 + private JFileChooser fileChooser;
  19 + private JComboBox<String> encodingsCombo;
  20 +
  21 + public SelectFileDialog(Frame owner, int mode)
  22 + {
  23 + super(owner, true);
  24 + this.mode = mode;
  25 + initDialog();
  26 + pack();
  27 + setLocationRelativeTo(owner);
  28 + }
  29 +
  30 + public void initDialog()
  31 + {
  32 + accepted = false;
  33 + setPreferredSize(new Dimension(640, 480));
  34 + fileChooser = new JFileChooser();
  35 + fileChooser.addActionListener(new ActionListener()
  36 + {
  37 + public void actionPerformed(ActionEvent e)
  38 + {
  39 + approveSelection((String)e.getActionCommand());
  40 + }
  41 + });
  42 + if (mode == LOAD) {
  43 + JPanel panel = new JPanel(new BorderLayout());
  44 + JPanel accessoryContainer = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
  45 + JPanel accessory = new JPanel();
  46 + JLabel label;
  47 +
  48 + setTitle("Select File");
  49 + fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
  50 + fileChooser.setApproveButtonText("Select");
  51 + fileChooser.setApproveButtonMnemonic('S');
  52 + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
  53 + fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Plain Text Files (*.txt)", "txt"));
  54 +
  55 + encodingsCombo = new JComboBox<String>();
  56 + encodingsCombo.addItem("UTF8 (Eight-bit Unicode Transformation Format)");
  57 + encodingsCombo.addItem("Cp1250 (Windows Eastern European)");
  58 + encodingsCombo.addItem("Cp852 (MS-DOS Latin-2)");
  59 + encodingsCombo.addItem("Cp870 (IBM Multilingual Latin-2)");
  60 + encodingsCombo.addItem("ISO-8859-2 (ISO 8859-2, Latin Alphabet No. 2)");
  61 + encodingsCombo.addItem("MacCentralEurope (Macintosh Latin-2)");
  62 +
  63 + accessoryContainer.setBorder(BorderFactory.createEmptyBorder(0, 0, 12, 0));
  64 + label = new JLabel("Encoding: ");
  65 + accessory.add(label);
  66 + accessory.add(encodingsCombo);
  67 + accessoryContainer.add(accessory);
  68 + panel.add(fileChooser, BorderLayout.CENTER);
  69 + panel.add(accessoryContainer, BorderLayout.SOUTH);
  70 + getContentPane().add(panel);
  71 + }
  72 + else {
  73 + setTitle("Save Results");
  74 + fileChooser.setDialogType(JFileChooser.SAVE_DIALOG);
  75 + fileChooser.setApproveButtonText("Save");
  76 + fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Plain Text Files (*.txt)", "txt"));
  77 + getContentPane().add(fileChooser);
  78 + }
  79 + }
  80 +
  81 + public void approveSelection(String action)
  82 + {
  83 + File file;
  84 +
  85 + if (action.equals(JFileChooser.APPROVE_SELECTION)) {
  86 + if (mode == SAVE) {
  87 + file = fileChooser.getSelectedFile();
  88 + if (file.exists()) {
  89 + Object[] existMsg = new Object[] {
  90 + "Plik \"" + file.getName() + "\" ju\u017C istnieje.",
  91 + "Czy chcesz go zamieni\u0107?"
  92 + };
  93 + int answer = JOptionPane.showConfirmDialog(this, existMsg, "File Exists",
  94 + JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
  95 + if (answer == JOptionPane.YES_OPTION) {
  96 + accepted = true;
  97 + setVisible(false);
  98 + }
  99 + else if (answer == JOptionPane.NO_OPTION) {
  100 + accepted = false;
  101 + setVisible(false);
  102 + }
  103 + else accepted = false;
  104 + }
  105 + else {
  106 + accepted = true;
  107 + setVisible(false);
  108 + }
  109 + }
  110 + else {
  111 + accepted = true;
  112 + setVisible(false);
  113 + }
  114 + }
  115 + else {
  116 + accepted = false;
  117 + setVisible(false);
  118 + }
  119 + }
  120 +
  121 + public void setSelectedFile(File file)
  122 + {
  123 + fileChooser.setSelectedFile(file);
  124 + }
  125 +
  126 + public File getSelectedFile()
  127 + {
  128 + return fileChooser.getSelectedFile();
  129 + }
  130 +
  131 + public void setCurrentDirectory(File dir)
  132 + {
  133 + fileChooser.setCurrentDirectory(dir);
  134 + }
  135 +
  136 + public File getCurrentDirectory()
  137 + {
  138 + return fileChooser.getCurrentDirectory();
  139 + }
  140 +
  141 + public String getEncoding()
  142 + {
  143 + String[] encoding = ((String)encodingsCombo.getSelectedItem()).split(" ");
  144 +
  145 + return encoding[0].trim();
  146 + }
  147 +
  148 + public boolean accept()
  149 + {
  150 + return accepted;
  151 + }
  152 +
  153 +}
... ...
gui/morfeusz/ToolBarButton.java 0 → 100755
  1 +package morfeusz;
  2 +
  3 +import java.awt.Insets;
  4 +import java.net.URL;
  5 +
  6 +import javax.swing.Action;
  7 +import javax.swing.Icon;
  8 +import javax.swing.ImageIcon;
  9 +import javax.swing.JButton;
  10 +
  11 +@SuppressWarnings("serial")
  12 +public class ToolBarButton extends JButton
  13 +{
  14 +
  15 + private String iconName;
  16 +
  17 + public ToolBarButton(Action action, String iconName)
  18 + {
  19 + super(action);
  20 + setText(null);
  21 + this.iconName = iconName;
  22 + initButton();
  23 + }
  24 +
  25 + private void initButton()
  26 + {
  27 + URL url;
  28 + Icon icon;
  29 +
  30 + setRolloverEnabled(true);
  31 + setRequestFocusEnabled(false);
  32 + setMargin(new Insets(0, 0, 0, 0));
  33 + putClientProperty("JToolBar.isRollover", Boolean.TRUE);
  34 + setBorderPainted(false);
  35 + setContentAreaFilled(false);
  36 + url = ClassLoader.getSystemClassLoader().getResource(iconName + ".png");
  37 + if (url != null) {
  38 + icon = new ImageIcon(url);
  39 + setIcon(icon);
  40 + }
  41 + url = ClassLoader.getSystemClassLoader().getResource(iconName + "_disabled.png");
  42 + if (url != null) {
  43 + icon = new ImageIcon(url);
  44 + setDisabledIcon(icon);
  45 + }
  46 + url = ClassLoader.getSystemClassLoader().getResource(iconName + "_roll_over.png");
  47 + if (url != null) {
  48 + icon = new ImageIcon(url);
  49 + setRolloverIcon(icon);
  50 + }
  51 + url = ClassLoader.getSystemClassLoader().getResource(iconName + "_pressed.png");
  52 + if (url != null) {
  53 + icon = new ImageIcon(url);
  54 + setPressedIcon(icon);
  55 + }
  56 + }
  57 +
  58 + public boolean isFocusTraversable()
  59 + {
  60 + return isRequestFocusEnabled();
  61 + }
  62 +
  63 +}
... ...
gui/morfeusz2-gui 0 → 100755
  1 +#!/bin/sh
  2 +
  3 +java -jar /usr/share/java/morfeusz.jar
... ...
gui/morfeusz2-gui.menu 0 → 100644
  1 +?package(morfeusz2-gui):needs="X11" section="Applications/Education" title="morfeusz2" command="/usr/bin/morfeusz-gui"
... ...
gui/morfeusz32.nsi 0 → 100644
  1 +############################################################################################
  2 +# NSIS Installation Script created by NSIS Quick Setup Script Generator v1.09.18
  3 +# Entirely Edited with NullSoft Scriptable Installation System
  4 +# by Vlasis K. Barkas aka Red Wine red_wine@freemail.gr Sep 2006
  5 +############################################################################################
  6 +
  7 +!define APP_NAME "Morfeusz 2.0"
  8 +!define COMP_NAME "Institute of Computer Science, Polish Academy of Sciences"
  9 +!define WEB_SITE "sgjp.pl/morfeusz"
  10 +!define VERSION "02.00.00.00"
  11 +!define COPYRIGHT "Institute of Computer Science, Polish Academy of Sciences"
  12 +!define DESCRIPTION "Morfological analyzer for Polish"
  13 +!define INSTALLER_NAME "Morfeusz_Setup.exe"
  14 +!define MAIN_APP_EXE "morfeusz32.exe"
  15 +!define INSTALL_TYPE "SetShellVarContext all"
  16 +!define REG_ROOT "HKLM"
  17 +!define REG_APP_PATH "Software\Microsoft\Windows\CurrentVersion\App Paths\${MAIN_APP_EXE}"
  18 +!define UNINSTALL_PATH "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}"
  19 +
  20 +!define REG_START_MENU "Start Menu Folder"
  21 +
  22 +var SM_Folder
  23 +
  24 +######################################################################
  25 +
  26 +VIProductVersion "${VERSION}"
  27 +VIAddVersionKey "ProductName" "${APP_NAME}"
  28 +VIAddVersionKey "CompanyName" "${COMP_NAME}"
  29 +VIAddVersionKey "LegalCopyright" "${COPYRIGHT}"
  30 +VIAddVersionKey "FileDescription" "${DESCRIPTION}"
  31 +VIAddVersionKey "FileVersion" "${VERSION}"
  32 +
  33 +######################################################################
  34 +
  35 +SetCompressor ZLIB
  36 +Name "${APP_NAME}"
  37 +Caption "${APP_NAME}"
  38 +OutFile "${INSTALLER_NAME}"
  39 +BrandingText "${APP_NAME}"
  40 +XPStyle on
  41 +InstallDirRegKey "${REG_ROOT}" "${REG_APP_PATH}" ""
  42 +InstallDir "$PROGRAMFILES\Morfeusz 2.0"
  43 +
  44 +######################################################################
  45 +
  46 +!include "MUI.nsh"
  47 +
  48 +!define MUI_ABORTWARNING
  49 +!define MUI_UNABORTWARNING
  50 +
  51 +!define MUI_LANGDLL_REGISTRY_ROOT "${REG_ROOT}"
  52 +!define MUI_LANGDLL_REGISTRY_KEY "${UNINSTALL_PATH}"
  53 +!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
  54 +
  55 +!insertmacro MUI_PAGE_WELCOME
  56 +
  57 +!ifdef LICENSE_TXT
  58 +!insertmacro MUI_PAGE_LICENSE "${LICENSE_TXT}"
  59 +!endif
  60 +
  61 +!insertmacro MUI_PAGE_DIRECTORY
  62 +
  63 +!ifdef REG_START_MENU
  64 +!define MUI_STARTMENUPAGE_DEFAULTFOLDER "Morfeusz 2.0"
  65 +!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${REG_ROOT}"
  66 +!define MUI_STARTMENUPAGE_REGISTRY_KEY "${UNINSTALL_PATH}"
  67 +!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${REG_START_MENU}"
  68 +!insertmacro MUI_PAGE_STARTMENU Application $SM_Folder
  69 +!endif
  70 +
  71 +!insertmacro MUI_PAGE_INSTFILES
  72 +
  73 +!define MUI_FINISHPAGE_RUN "$INSTDIR\${MAIN_APP_EXE}"
  74 +!insertmacro MUI_PAGE_FINISH
  75 +
  76 +!insertmacro MUI_UNPAGE_CONFIRM
  77 +
  78 +!insertmacro MUI_UNPAGE_INSTFILES
  79 +
  80 +!insertmacro MUI_UNPAGE_FINISH
  81 +
  82 +!insertmacro MUI_LANGUAGE "English"
  83 +!insertmacro MUI_LANGUAGE "Polish"
  84 +
  85 +!insertmacro MUI_RESERVEFILE_LANGDLL
  86 +
  87 +######################################################################
  88 +
  89 +Function .onInit
  90 +!insertmacro MUI_LANGDLL_DISPLAY
  91 +FunctionEnd
  92 +
  93 +######################################################################
  94 +
  95 +Section -MainProgram
  96 +${INSTALL_TYPE}
  97 +SetOverwrite ifnewer
  98 +SetOutPath "$INSTDIR"
  99 +File "morfeusz32.exe"
  100 +File "jmorfeusz.dll"
  101 +File "morfeusz2.dll"
  102 +File "libwinpthread-1.dll"
  103 +SectionEnd
  104 +
  105 +######################################################################
  106 +
  107 +Section -Icons_Reg
  108 +SetOutPath "$INSTDIR"
  109 +WriteUninstaller "$INSTDIR\uninstall.exe"
  110 +
  111 +!ifdef REG_START_MENU
  112 +!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
  113 +CreateDirectory "$SMPROGRAMS\$SM_Folder"
  114 +CreateShortCut "$SMPROGRAMS\$SM_Folder\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
  115 +CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
  116 +CreateShortCut "$SMPROGRAMS\$SM_Folder\Uninstall ${APP_NAME}.lnk" "$INSTDIR\uninstall.exe"
  117 +
  118 +!ifdef WEB_SITE
  119 +WriteIniStr "$INSTDIR\${APP_NAME} website.url" "InternetShortcut" "URL" "${WEB_SITE}"
  120 +CreateShortCut "$SMPROGRAMS\$SM_Folder\${APP_NAME} Website.lnk" "$INSTDIR\${APP_NAME} website.url"
  121 +!endif
  122 +!insertmacro MUI_STARTMENU_WRITE_END
  123 +!endif
  124 +
  125 +!ifndef REG_START_MENU
  126 +CreateDirectory "$SMPROGRAMS\Morfeusz 2.0"
  127 +CreateShortCut "$SMPROGRAMS\Morfeusz 2.0\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
  128 +CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
  129 +CreateShortCut "$SMPROGRAMS\Morfeusz 2.0\Uninstall ${APP_NAME}.lnk" "$INSTDIR\uninstall.exe"
  130 +
  131 +!ifdef WEB_SITE
  132 +WriteIniStr "$INSTDIR\${APP_NAME} website.url" "InternetShortcut" "URL" "${WEB_SITE}"
  133 +CreateShortCut "$SMPROGRAMS\Morfeusz 2.0\${APP_NAME} Website.lnk" "$INSTDIR\${APP_NAME} website.url"
  134 +!endif
  135 +!endif
  136 +
  137 +WriteRegStr ${REG_ROOT} "${REG_APP_PATH}" "" "$INSTDIR\${MAIN_APP_EXE}"
  138 +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayName" "${APP_NAME}"
  139 +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "UninstallString" "$INSTDIR\uninstall.exe"
  140 +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayIcon" "$INSTDIR\${MAIN_APP_EXE}"
  141 +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayVersion" "${VERSION}"
  142 +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "Publisher" "${COMP_NAME}"
  143 +
  144 +!ifdef WEB_SITE
  145 +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "URLInfoAbout" "${WEB_SITE}"
  146 +!endif
  147 +SectionEnd
  148 +
  149 +######################################################################
  150 +
  151 +Section Uninstall
  152 +${INSTALL_TYPE}
  153 +Delete "$INSTDIR\${MAIN_APP_EXE}"
  154 +Delete "$INSTDIR\jmorfeusz.dll"
  155 +Delete "$INSTDIR\morfeusz2.dll"
  156 +Delete "$INSTDIR\libwinpthread-1.dll"
  157 +Delete "$INSTDIR\uninstall.exe"
  158 +!ifdef WEB_SITE
  159 +Delete "$INSTDIR\${APP_NAME} website.url"
  160 +!endif
  161 +
  162 +RmDir "$INSTDIR"
  163 +
  164 +!ifdef REG_START_MENU
  165 +!insertmacro MUI_STARTMENU_GETFOLDER "Application" $SM_Folder
  166 +Delete "$SMPROGRAMS\$SM_Folder\${APP_NAME}.lnk"
  167 +Delete "$SMPROGRAMS\$SM_Folder\Uninstall ${APP_NAME}.lnk"
  168 +!ifdef WEB_SITE
  169 +Delete "$SMPROGRAMS\$SM_Folder\${APP_NAME} Website.lnk"
  170 +!endif
  171 +Delete "$DESKTOP\${APP_NAME}.lnk"
  172 +
  173 +RmDir "$SMPROGRAMS\$SM_Folder"
  174 +!endif
  175 +
  176 +!ifndef REG_START_MENU
  177 +Delete "$SMPROGRAMS\Morfeusz 2.0\${APP_NAME}.lnk"
  178 +Delete "$SMPROGRAMS\Morfeusz 2.0\Uninstall ${APP_NAME}.lnk"
  179 +!ifdef WEB_SITE
  180 +Delete "$SMPROGRAMS\Morfeusz 2.0\${APP_NAME} Website.lnk"
  181 +!endif
  182 +Delete "$DESKTOP\${APP_NAME}.lnk"
  183 +
  184 +RmDir "$SMPROGRAMS\Morfeusz 2.0"
  185 +!endif
  186 +
  187 +DeleteRegKey ${REG_ROOT} "${REG_APP_PATH}"
  188 +DeleteRegKey ${REG_ROOT} "${UNINSTALL_PATH}"
  189 +SectionEnd
  190 +
  191 +######################################################################
  192 +
  193 +Function un.onInit
  194 +!insertmacro MUI_UNGETLANGUAGE
  195 +FunctionEnd
  196 +
  197 +######################################################################
... ...
gui/morfeusz64.nsi 0 → 100644
  1 +############################################################################################
  2 +# NSIS Installation Script created by NSIS Quick Setup Script Generator v1.09.18
  3 +# Entirely Edited with NullSoft Scriptable Installation System
  4 +# by Vlasis K. Barkas aka Red Wine red_wine@freemail.gr Sep 2006
  5 +############################################################################################
  6 +
  7 +!define APP_NAME "Morfeusz 2.0"
  8 +!define COMP_NAME "Institute of Computer Science, Polish Academy of Sciences"
  9 +!define WEB_SITE "sgjp.pl/morfeusz"
  10 +!define VERSION "02.00.00.00"
  11 +!define COPYRIGHT "Institute of Computer Science, Polish Academy of Sciences"
  12 +!define DESCRIPTION "Morfological analyzer for Polish"
  13 +!define INSTALLER_NAME "Morfeusz_Setup.exe"
  14 +!define MAIN_APP_EXE "morfeusz64.exe"
  15 +!define INSTALL_TYPE "SetShellVarContext all"
  16 +!define REG_ROOT "HKLM"
  17 +!define REG_APP_PATH "Software\Microsoft\Windows\CurrentVersion\App Paths\${MAIN_APP_EXE}"
  18 +!define UNINSTALL_PATH "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}"
  19 +
  20 +!define REG_START_MENU "Start Menu Folder"
  21 +
  22 +var SM_Folder
  23 +
  24 +######################################################################
  25 +
  26 +VIProductVersion "${VERSION}"
  27 +VIAddVersionKey "ProductName" "${APP_NAME}"
  28 +VIAddVersionKey "CompanyName" "${COMP_NAME}"
  29 +VIAddVersionKey "LegalCopyright" "${COPYRIGHT}"
  30 +VIAddVersionKey "FileDescription" "${DESCRIPTION}"
  31 +VIAddVersionKey "FileVersion" "${VERSION}"
  32 +
  33 +######################################################################
  34 +
  35 +SetCompressor ZLIB
  36 +Name "${APP_NAME}"
  37 +Caption "${APP_NAME}"
  38 +OutFile "${INSTALLER_NAME}"
  39 +BrandingText "${APP_NAME}"
  40 +XPStyle on
  41 +InstallDirRegKey "${REG_ROOT}" "${REG_APP_PATH}" ""
  42 +InstallDir "$PROGRAMFILES\Morfeusz 2.0"
  43 +
  44 +######################################################################
  45 +
  46 +!include "MUI.nsh"
  47 +
  48 +!define MUI_ABORTWARNING
  49 +!define MUI_UNABORTWARNING
  50 +
  51 +!define MUI_LANGDLL_REGISTRY_ROOT "${REG_ROOT}"
  52 +!define MUI_LANGDLL_REGISTRY_KEY "${UNINSTALL_PATH}"
  53 +!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
  54 +
  55 +!insertmacro MUI_PAGE_WELCOME
  56 +
  57 +!ifdef LICENSE_TXT
  58 +!insertmacro MUI_PAGE_LICENSE "${LICENSE_TXT}"
  59 +!endif
  60 +
  61 +!insertmacro MUI_PAGE_DIRECTORY
  62 +
  63 +!ifdef REG_START_MENU
  64 +!define MUI_STARTMENUPAGE_DEFAULTFOLDER "Morfeusz 2.0"
  65 +!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${REG_ROOT}"
  66 +!define MUI_STARTMENUPAGE_REGISTRY_KEY "${UNINSTALL_PATH}"
  67 +!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${REG_START_MENU}"
  68 +!insertmacro MUI_PAGE_STARTMENU Application $SM_Folder
  69 +!endif
  70 +
  71 +!insertmacro MUI_PAGE_INSTFILES
  72 +
  73 +!define MUI_FINISHPAGE_RUN "$INSTDIR\${MAIN_APP_EXE}"
  74 +!insertmacro MUI_PAGE_FINISH
  75 +
  76 +!insertmacro MUI_UNPAGE_CONFIRM
  77 +
  78 +!insertmacro MUI_UNPAGE_INSTFILES
  79 +
  80 +!insertmacro MUI_UNPAGE_FINISH
  81 +
  82 +!insertmacro MUI_LANGUAGE "English"
  83 +!insertmacro MUI_LANGUAGE "Polish"
  84 +
  85 +!insertmacro MUI_RESERVEFILE_LANGDLL
  86 +
  87 +######################################################################
  88 +
  89 +Function .onInit
  90 +!insertmacro MUI_LANGDLL_DISPLAY
  91 +FunctionEnd
  92 +
  93 +######################################################################
  94 +
  95 +Section -MainProgram
  96 +${INSTALL_TYPE}
  97 +SetOverwrite ifnewer
  98 +SetOutPath "$INSTDIR"
  99 +File "morfeusz64.exe"
  100 +File "jmorfeusz.dll"
  101 +File "morfeusz2.dll"
  102 +File "libwinpthread-1.dll"
  103 +SectionEnd
  104 +
  105 +######################################################################
  106 +
  107 +Section -Icons_Reg
  108 +SetOutPath "$INSTDIR"
  109 +WriteUninstaller "$INSTDIR\uninstall.exe"
  110 +
  111 +!ifdef REG_START_MENU
  112 +!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
  113 +CreateDirectory "$SMPROGRAMS\$SM_Folder"
  114 +CreateShortCut "$SMPROGRAMS\$SM_Folder\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
  115 +CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
  116 +CreateShortCut "$SMPROGRAMS\$SM_Folder\Uninstall ${APP_NAME}.lnk" "$INSTDIR\uninstall.exe"
  117 +
  118 +!ifdef WEB_SITE
  119 +WriteIniStr "$INSTDIR\${APP_NAME} website.url" "InternetShortcut" "URL" "${WEB_SITE}"
  120 +CreateShortCut "$SMPROGRAMS\$SM_Folder\${APP_NAME} Website.lnk" "$INSTDIR\${APP_NAME} website.url"
  121 +!endif
  122 +!insertmacro MUI_STARTMENU_WRITE_END
  123 +!endif
  124 +
  125 +!ifndef REG_START_MENU
  126 +CreateDirectory "$SMPROGRAMS\Morfeusz 2.0"
  127 +CreateShortCut "$SMPROGRAMS\Morfeusz 2.0\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
  128 +CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
  129 +CreateShortCut "$SMPROGRAMS\Morfeusz 2.0\Uninstall ${APP_NAME}.lnk" "$INSTDIR\uninstall.exe"
  130 +
  131 +!ifdef WEB_SITE
  132 +WriteIniStr "$INSTDIR\${APP_NAME} website.url" "InternetShortcut" "URL" "${WEB_SITE}"
  133 +CreateShortCut "$SMPROGRAMS\Morfeusz 2.0\${APP_NAME} Website.lnk" "$INSTDIR\${APP_NAME} website.url"
  134 +!endif
  135 +!endif
  136 +
  137 +WriteRegStr ${REG_ROOT} "${REG_APP_PATH}" "" "$INSTDIR\${MAIN_APP_EXE}"
  138 +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayName" "${APP_NAME}"
  139 +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "UninstallString" "$INSTDIR\uninstall.exe"
  140 +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayIcon" "$INSTDIR\${MAIN_APP_EXE}"
  141 +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayVersion" "${VERSION}"
  142 +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "Publisher" "${COMP_NAME}"
  143 +
  144 +!ifdef WEB_SITE
  145 +WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "URLInfoAbout" "${WEB_SITE}"
  146 +!endif
  147 +SectionEnd
  148 +
  149 +######################################################################
  150 +
  151 +Section Uninstall
  152 +${INSTALL_TYPE}
  153 +Delete "$INSTDIR\${MAIN_APP_EXE}"
  154 +Delete "$INSTDIR\jmorfeusz.dll"
  155 +Delete "$INSTDIR\morfeusz2.dll"
  156 +Delete "$INSTDIR\libwinpthread-1.dll"
  157 +Delete "$INSTDIR\uninstall.exe"
  158 +!ifdef WEB_SITE
  159 +Delete "$INSTDIR\${APP_NAME} website.url"
  160 +!endif
  161 +
  162 +RmDir "$INSTDIR"
  163 +
  164 +!ifdef REG_START_MENU
  165 +!insertmacro MUI_STARTMENU_GETFOLDER "Application" $SM_Folder
  166 +Delete "$SMPROGRAMS\$SM_Folder\${APP_NAME}.lnk"
  167 +Delete "$SMPROGRAMS\$SM_Folder\Uninstall ${APP_NAME}.lnk"
  168 +!ifdef WEB_SITE
  169 +Delete "$SMPROGRAMS\$SM_Folder\${APP_NAME} Website.lnk"
  170 +!endif
  171 +Delete "$DESKTOP\${APP_NAME}.lnk"
  172 +
  173 +RmDir "$SMPROGRAMS\$SM_Folder"
  174 +!endif
  175 +
  176 +!ifndef REG_START_MENU
  177 +Delete "$SMPROGRAMS\Morfeusz 2.0\${APP_NAME}.lnk"
  178 +Delete "$SMPROGRAMS\Morfeusz 2.0\Uninstall ${APP_NAME}.lnk"
  179 +!ifdef WEB_SITE
  180 +Delete "$SMPROGRAMS\Morfeusz 2.0\${APP_NAME} Website.lnk"
  181 +!endif
  182 +Delete "$DESKTOP\${APP_NAME}.lnk"
  183 +
  184 +RmDir "$SMPROGRAMS\Morfeusz 2.0"
  185 +!endif
  186 +
  187 +DeleteRegKey ${REG_ROOT} "${REG_APP_PATH}"
  188 +DeleteRegKey ${REG_ROOT} "${UNINSTALL_PATH}"
  189 +SectionEnd
  190 +
  191 +######################################################################
  192 +
  193 +Function un.onInit
  194 +!insertmacro MUI_UNGETLANGUAGE
  195 +FunctionEnd
  196 +
  197 +######################################################################
... ...
gui/quitaboutpreferenceshandler/QuitAboutPreferencesHandler$1.class 0 → 100644
No preview for this file type
gui/quitaboutpreferenceshandler/QuitAboutPreferencesHandler$2.class 0 → 100644
No preview for this file type
gui/quitaboutpreferenceshandler/QuitAboutPreferencesHandler$3.class 0 → 100644
No preview for this file type
gui/quitaboutpreferenceshandler/QuitAboutPreferencesHandler.class 0 → 100644
No preview for this file type
morfeusz/wrappers/CMakeLists.txt
1 1 add_subdirectory (java)
2   -add_subdirectory (perl)
  2 +#add_subdirectory (perl)
3 3  
4 4 if (${PY})
5 5 if("${PY}" MATCHES "2.*")
... ... @@ -7,4 +7,4 @@ if (${PY})
7 7 elseif("${PY}" MATCHES "3.*")
8 8 add_subdirectory (python3)
9 9 endif()
10   -endif()
11 10 \ No newline at end of file
  11 +endif()
... ...