/* Main.fx - visualization of parsed Wiktionary database (wikt_parsed).
*
* Copyright (c) 2008-2011 Andrew Krizhanovsky <andrew.krizhanovsky at gmail.com>
* Distributed under EPL/LGPL/GPL/AL/BSD multi-license.
*/
package wiwordik;
// import wiwordik.search_window.*;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import wikokit.base.wikipedia.language.LanguageType;
import wikokit.base.wikipedia.sql.Connect;
import wikokit.base.wikt.sql.TLang;
import wikokit.base.wikt.sql.TPOS;
import wikokit.base.wikt.sql.TRelationType;
import wiwordik.search_window.*;
import wiwordik.util.TipsTeapot;
// Todo. Errors in parser:
// дуб (илл -> syn)
// тупица, река, самолёт (-) i.e. page.is_in_wiktionary = false
//
// todo: list of languages - combobox with ListView:
// http://jojorabbitjavafxblog.wordpress.com/2011/06/23/javafx-2-0-custom-combobox/
public class Main extends Application {
static Connect wikt_parsed_conn = new Connect();
static void initDatabase() {
if(WConstants.IS_SQLITE) {
// SQLite //Connect.testSQLite();
if(LanguageType.ru == WConstants.native_lang) {
wikt_parsed_conn.OpenSQLite(Connect.RUWIKT_SQLITE, LanguageType.ru, WConstants.IS_RELEASE);
} else {
wikt_parsed_conn.OpenSQLite(Connect.ENWIKT_SQLITE, LanguageType.en, WConstants.IS_RELEASE);
}
} else {
// MySQL
if(LanguageType.ru == WConstants.native_lang) {
wikt_parsed_conn.Open(Connect.RUWIKT_HOST, Connect.RUWIKT_PARSED_DB, Connect.RUWIKT_USER, Connect.RUWIKT_PASS, LanguageType.ru);
} else {
wikt_parsed_conn.Open(Connect.ENWIKT_HOST, Connect.ENWIKT_PARSED_DB, Connect.ENWIKT_USER, Connect.ENWIKT_PASS, LanguageType.en);
}
}
System.out.println("initDatabase: DBName=" + wikt_parsed_conn.getDBName());
TLang.createFastMaps(wikt_parsed_conn); // once upon a time: use Wiktionary parsed db
TPOS.createFastMaps(wikt_parsed_conn); // once upon a time: use Wiktionary parsed db
TRelationType.createFastMaps(wikt_parsed_conn);
}
// Application Bounds
//var sceneWidth: Number = bind scene.width;
//var sceneHeight: Number = bind scene.height;
//var adjacent_words : String[] = ["Red", "Yellow", "Green"];
/** todo: language selection
var word_ComboBox = SwingComboBox {
//translateX: 113
width: 222
selectedIndex: 1
items: for (p in page_array)
SwingComboBoxItem {
text: p.getPageTitle()
}
}*/
//def tips = new TipsTeapot();
//tips.generateRandomTip();
static TipsTeapot tip = TipsTeapot.generateRandomTip();
static String word0 = tip.getQuery(); //"*с?рё*";
static LangChoice lang_choice = new LangChoice();
static LangChoiceBox lang_choicebox = new LangChoiceBox();
static DebugPanel debug_panel = new DebugPanel();
static WordList word_list = new WordList();
static FilterMeanSemRelTrans filter_mean_sem_transl = new FilterMeanSemRelTrans();
static QueryTextString query_text_string = new QueryTextString();
/*
def query_text_string : QueryTextString = QueryTextString {
word0: word0;
wikt_parsed_conn: wikt_parsed_conn
}
query_text_string.initialize(word_list, lang_choice);*/
static void initGUI() {
query_text_string.initialize(word0, wikt_parsed_conn, word_list, lang_choice);
lang_choice.initialize( word_list, query_text_string, lang_choicebox,
tip.getSourceLangCodes(), WConstants.native_lang);
lang_choicebox.initialize(word_list, query_text_string, lang_choice, WConstants.native_lang);
word_list.initialize( wikt_parsed_conn,
query_text_string, lang_choice, filter_mean_sem_transl,
WConstants.native_lang,
//word0,
WConstants.n_words_list);
word_list.setSkipRedirects(WConstants.b_skip_redirects);
filter_mean_sem_transl.initialize(word_list, lang_choice, query_text_string);
debug_panel.initialize();
word_list.updateWordList( WConstants.b_skip_redirects,
word0
);
query_text_string.saveWordValue();
word_list.copyWordsToStringArray( word_list.getPageArray() );
}
/*
function updateWordList() {
word_list.updateWordList( lang_choice.getLangDestSelected(),
b_skip_redirects,
query_text_string.getWordValue()
);
query_text_string.saveWordValue();
}
var filter_MRT_hbox: HBox = HBox {
//translateX: bind (sceneWidth - zipSearchPanel.boundsInLocal.width)/2.0
//translateY: bind (sceneHeight - 52)
// text: "CheckBox:"
content: [
filter_mean_sem_transl.meaning_CheckBox,
filter_mean_sem_transl.sem_rel_CheckBox,
//var wc = WC {}
//wc.getDataByWord(wikt_parsed_conn, word_value.trim(), page_array);
//wc.createCXLangListByWord(wikt_parsed_conn, word_value.trim(), page_array);
// onKeyTyped: function(e:KeyEvent){
//System.out.println("e.code={e.code}, e.char={e.char}, word_value={word_value}, word_value.trim()={word_value.trim()}");
//page_array = TPage.getByPrefix(wikt_parsed_conn, word_value.trim(), n_words_list, b_skip_redirects);
//page_array_string = copyWordsToStringArray();
//System.out.println("e.code={e.code}, e.char={e.char}, word_value={word_value}, word_value.trim()={word_value.trim()}");
//System.out.print("page_array_string: ");
//for (p in page_array_string) {
// System.out.print("{p}, ");
//}
CheckBox { text: "Translation" selected: false }
]
spacing: 10
};
var outputPanel_VBox1: VBox = VBox {
//translateX: bind (sceneWidth - zipSearchPanel.boundsInLocal.width)/2.0
//translateY: bind (sceneHeight - 52)
content: [query_text_string.word_Text,
word_list.word_ListView]
spacing: 10
};
var result_VBox2: VBox = VBox {
padding: Insets { left: 0 top: 4 bottom: 1}
//translateX: bind (sceneWidth - zipSearchPanel.boundsInLocal.width)/2.0
//translateY: bind (sceneHeight - 52)
content: [ // wiki_page_Label,
lang_choice.lang_source_HBox,
filter_MRT_hbox,
lang_choice.lang_dest_hbox,
debug_panel.debug_HBox
] //, wc.card]
spacing: 10
};
var horizontal_Panel: HBox = HBox {
padding: Insets { left: 4 top: 4 bottom: 10}
width: bind scene.width;
height: bind scene.height;
//translateX: bind (sceneWidth - zipSearchPanel.boundsInLocal.width)/2.0
//translateY: bind (sceneHeight - 52)
content: [outputPanel_VBox1, result_VBox2]
spacing: 10
};
var scene: Scene = Scene {
content: [
horizontal_Panel // ,
//word_ComboBox //,
//word_Text
// bgImage, titleBar, titleText, divider, shopDetailsGroup, backButton, nextButton, closeButton,
// zipSearchPanel, serviceProviderText
]
//clip: Rectangle {
// width: bind sceneWidth
// height: bind sceneHeight
// arcWidth: 20
// arcHeight: 20
//}
// fill: Color.TRANSPARENT
}
// Application User Interface
var stage: Stage = Stage {
title: "Wiwordik {WConstants.wiwordik_version}.{LanguageType.size()} ({wikt_parsed_conn.getDBName()})"
// resizable: false
visible: true
// style: StageStyle.TRANSPARENT
scene: bind scene
width: 640
height: 480
// content: "Wiktionary browser"
}*/
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Application.launch(args);
}
//HBox horizontal_panel;
VBox panel_vbox1;
VBox control_vbox;
@Override
public void start(Stage primaryStage) {
initDatabase();
initGUI();
// title: "Wiwordik {WConstants.wiwordik_version}.{LanguageType.size()} ({wikt_parsed_conn.getDBName()})"
// e.g.: "Wiwordik 0.08.1094 (enwikt20110618.sqlite)"
primaryStage.setTitle("Wiwordik " + WConstants.wiwordik_version +
"." + LanguageType.size() +
" (" + wikt_parsed_conn.getDBName() + ")");
Group root = new Group();
Scene scene = new Scene(root); //, 640, 480);
panel_vbox1 = new VBox();
panel_vbox1.setSpacing(5);
panel_vbox1.setStyle("-fx-background-color: #FFA500");
//content: [query_text_string.word_Text, word_list.word_ListView]
// VBox with checkbox control elements // two columns variant: word list - left, all settings - right part of window
control_vbox = new VBox(); // top right bottom left
control_vbox.setPadding(new Insets(0, 0, 2, 3));
control_vbox.setSpacing(10);
control_vbox.getChildren().addAll(lang_choicebox.choicebox);
control_vbox.getChildren().addAll(lang_choice.lang_source_hbox);
control_vbox.getChildren().addAll(filter_mean_sem_transl.filter_MRT_hbox);
// todo control_vbox.getChildren().addAll(lang_choice.lang_dest_hbox); // todo: add SQL functions: get TPage words with translation to some language
control_vbox.getChildren().addAll(debug_panel.debug_checkbox);
lang_choicebox.choicebox.getSelectionModel().selectFirst();
/* content: [ // wiki_page_Label,
lang_choice.lang_source_hbox, +
filter_MRT_hbox,
lang_choice.lang_dest_hbox,
debug_panel.debug_HBox
]*/
/*
horizontal_panel = new HBox(); // top right bottom left
horizontal_panel.setPadding(new Insets(4, 4, 10, 4));
horizontal_panel.setSpacing(10);
horizontal_panel.setStyle("-fx-background-color: #337799");
// content: [outputPanel_VBox1, result_VBox2] now panel_vbox1, panel_vbox2
horizontal_panel.setFillHeight(true);
horizontal_panel.getChildren().addAll(panel_vbox1, panel_vbox2);
root.getChildren().add(horizontal_panel);*/
panel_vbox1.getChildren().addAll(query_text_string.word_textfield);
panel_vbox1.getChildren().addAll(control_vbox);
panel_vbox1.getChildren().addAll(word_list.word_listview);
root.getChildren().add(panel_vbox1);
primaryStage.setScene(scene);
primaryStage.show();
// Let's the height of list of words will be maximum (possible)
scene.heightProperty().addListener(new ChangeListener<Number>() {
@Override public void changed(ObservableValue<? extends Number> observableValue,
Number old_scene_height, Number new_scene_height)
{
double height =
query_text_string.word_textfield.getHeight() +
control_vbox.getHeight() +
panel_vbox1.getSpacing() * 2; // 3 elements with 2 intervals
word_list.word_listview.setPrefHeight(
(double)new_scene_height - height);
}
});
// Let's the width of list of words will be maximum (possible)
scene.widthProperty().addListener(new ChangeListener<Number>() {
@Override public void changed(ObservableValue<? extends Number> observableValue,
Number old_scene_width, Number new_scene_width)
{
panel_vbox1.setPrefWidth( // horizontal_panel.setPrefWidth
(double)new_scene_width);
}
});
}
}