/* */
1 /* -*- coding: utf-8; mode: c++; -*-
2 * Concordance to A. S. Pushkin's Works - Constructor
3 * $Id: ConcordanceInit.cpp 16 2013-11-04 16:38:10Z isao $
4 * Copyright (C) 2012, isao yasuda
5 */
6
7 #include "Concordance.hpp"
8
9 using namespace Wt;
10 using namespace boost::interprocess;
11
12 // Lemmatizer Russian Grammatical Resources
13 const char* dict =
14 "/usr/local/share/turglem/russian/dict_russian.auto";
15 const char* prdm =
16 "/usr/local/share/turglem/russian/paradigms_russian.bin";
17 const char* pred =
18 "/usr/local/share/turglem/russian/prediction_russian.auto";
19
20 // コンコーダンスクラス・コンストラクタ: 画面を作成する
21 Concordance::Concordance(const WEnvironment& env)
22 : WApplication(env)
23 {
24 // Lemmatizer 辞書リソースのロード
25 try {
26 lem.load_lemmatizer(dict, prdm, pred);
27 } catch (const std::exception& e) {
28 logging("Lemmatizer error.", ERROR);
29 std::cerr << "Lemmatizer error: " << e.what() << "\n";
30 }
31
32 // Request Parameter print
33 /*
34 const Http::ParameterMap pmap = env.getParameterMap();
35 for (Http::ParameterMap::iterator pmapit = pmap.begin();
36 pmapit != pmap.end(); pmapit++) {
37 std::cout << pmapit->first() << ": ";
38 for (Http::ParameterValues::iterator pvit = (pmapit->second()).begin();
39 pvit != (pmapit->second()).end(); pvit++) {
40 std::cout << *pvit << ";";
41 }
42 std::cout << std::endl;
43 }
44 */
45
46 // ユーザ情報セット
47 agent = env.userAgent();
48 ipadr = env.clientAddress();
49 if (!env.getParameterValues("page").empty()) {
50 wparm = env.getParameterValues("page")[0];
51 } else {
52 wparm = "EMPTY";
53 }
54 std::cerr << "- IP Address: " << ipadr << "\n"
55 << "- User-Agent: " << agent << "\n"
56 << "- Parameter: " << wparm << "\n";
57
58 // メッセージファイル message.xml の指定
59 messageResourceBundle().use(appRoot() + "message");
60 // タイトル
61 setTitle(L"Динамический Конкорданс к сочинениям А. С. Пушкина");
62 // スタイルシート
63 useStyleSheet("style.css");
64 // theme
65 setCssTheme("polished");
66
67 // ウィンドウ全体フレーム
68 frame = new WContainerWidget(root());
69 frame->setStyleClass("frame");
70
71 // message.xml から header を出力
72 frame->addWidget(new WText(WString::tr("header"), XHTMLText));
73
74 // 式入力エリア,オプションエリアのボックス
75 iframe = new WContainerWidget(frame);
76 iframe->setStyleClass("inner");
77
78 // 式入力エリアの生成
79 WString emptxt = WString::tr("emptytext");
80 makeinput(emptxt);
81
82 // タブインタフェース
83 tabs = new WTabWidget(frame);
84 // WAnimation animation(WAnimation::SlideInFromRight, WAnimation::EaseIn);
85 // tabs->contentsStack()->setTransitionAnimation(animation, true);
86 kwic = new WContainerWidget(frame);
87 opts = new WContainerWidget(frame);
88 rkbd = new WContainerWidget(frame);
89 genr = new WContainerWidget(frame);
90 desc = new WContainerWidget(frame);
91 tabs->addTab(kwic, WString::tr("tabkwic"));
92 tabs->addTab(opts, WString::tr("tabopts"));
93 tabs->addTab(rkbd, WString::tr("tabrkbd"));
94 tabs->addTab(genr, WString::tr("tabgenr"));
95 tabs->addTab(desc, WString::tr("tabdesc"));
96 tabKwic();
97 tabs->setCurrentWidget(kwic); // KWICテーブル用
98 tabOpts();
99 tabs->setCurrentWidget(opts); // オプション用
100 tabRkbd();
101 tabs->setCurrentWidget(rkbd); // 疑似キーボード用
102 tabGenr();
103 tabs->setCurrentWidget(genr); // ジャンル一覧用
104 tabDesc();
105 tabs->setCurrentWidget(desc); // 説明用 (初期状態表示)
106 tabs->currentChanged().connect(this, &Concordance::tabchange);
107
108 // フッタを message.xml から出力
109 foot = new WText(frame);
110 foot->setTextFormat(XHTMLText);
111 foot->setText(WString::tr("footer"));
112 }
/* */