#!/usr/bin/env perl
#
# Slovnik.cz
# v0.1 (2009-02-26)
# Přemek Vyhnal <premysl.vyhnal gmail com> 2009
# public domain
#
# Instalace
# Potřebujete "slovnik.cz CLI" http://www.watzke.cz/cs/ 
# a tento script. Oboji si dejte nekam do $PATH
#
# Ovládání
# Spustit, nahoře napsat slovo, dát "Přeložit" nebo Enter, 
# příp. vybrat jazyk. Escape vrátí focus do políčka k vložení slova.


my $count = 50;
my @langs = qw/en fr ge it la ru sp/;


use utf8;
use Encode;
use warnings;
#use strict;
#use locale;
use Gtk2 -init;
use Gtk2::GladeXML;
use Data::Dumper;

my $gladexml = <<EOS
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--*- mode: xml -*-->
<glade-interface>
  <widget class="GtkWindow" id="mainWindow">
    <property name="visible">True</property>
    <property name="title" translatable="yes">Slovník</property>
    <property name="default_width">600</property>
    <property name="default_height">300</property>
    <signal name="destroy" handler="on_mainWindow_destroy"/>
    <signal name="key_press_event" handler="keypress"/>
    <child>
      <widget class="GtkVBox" id="vbox1">
        <property name="visible">True</property>
        <child>
          <widget class="GtkHBox" id="hbox2">
            <property name="visible">True</property>
            <child>
              <widget class="GtkEntry" id="word">
                <property name="width_request">100</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="has_focus">True</property>
                <property name="is_focus">True</property>
              </widget>
            </child>
            <child>
              <widget class="GtkComboBoxEntry" id="lang">
                <property name="visible">True</property>
                <property name="items"></property>
                <signal name="changed" handler="lang_changed"/>
                <child internal-child="entry">
                  <widget class="GtkEntry" id="comboboxentry-entry1">
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="editable">False</property>
                    <property name="activates_default">True</property>
                    <property name="width_chars">2</property>
                  </widget>
                </child>
              </widget>
              <packing>
                <property name="expand">False</property>
                <property name="fill">False</property>
                <property name="position">1</property>
              </packing>
            </child>
            <child>
              <widget class="GtkButton" id="ok">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="label" translatable="yes">_Přeložit</property>
                <property name="use_underline">True</property>
                <property name="response_id">0</property>
                <signal name="clicked" handler="translate"/>
              </widget>
              <packing>
                <property name="expand">False</property>
                <property name="fill">False</property>
                <property name="position">2</property>
              </packing>
            </child>
          </widget>
          <packing>
            <property name="expand">False</property>
          </packing>
        </child>
        <child>
          <widget class="GtkHBox" id="hbox3">
            <property name="visible">True</property>
            <child>
              <widget class="GtkVBox" id="vbox2">
                <property name="visible">True</property>
                <child>
                  <widget class="GtkLabel" id="labelleft">
                    <property name="visible">True</property>
                    <property name="xalign">0</property>
                    <property name="xpad">5</property>
                    <property name="ypad">2</property>
                    <property name="label" translatable="no"></property>
                    <property name="use_markup">True</property>
                  </widget>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">False</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkScrolledWindow" id="mainwin">
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
                    <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
                    <property name="shadow_type">GTK_SHADOW_IN</property>
                    <child>
                      <widget class="GtkTextView" id="text_t">
                        <property name="visible">True</property>
                        <property name="can_focus">True</property>
                        <property name="editable">False</property>
                        <property name="indent">5</property>
                        <property name="cursor_visible">False</property>
                      </widget>
                    </child>
                  </widget>
                  <packing>
                    <property name="position">1</property>
                  </packing>
                </child>
              </widget>
            </child>
            <child>
              <widget class="GtkVBox" id="vbox3">
                <property name="visible">True</property>
                <child>
                  <widget class="GtkLabel" id="labelright">
                    <property name="visible">True</property>
                    <property name="xalign">0</property>
                    <property name="xpad">5</property>
                    <property name="ypad">2</property>
                    <property name="label" translatable="no"></property>
                    <property name="use_markup">True</property>
                  </widget>
                  <packing>
                    <property name="expand">False</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkScrolledWindow" id="mainwin1">
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
                    <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
                    <property name="shadow_type">GTK_SHADOW_IN</property>
                    <child>
                      <widget class="GtkTextView" id="text_f">
                        <property name="visible">True</property>
                        <property name="can_focus">True</property>
                        <property name="editable">False</property>
                        <property name="indent">5</property>
                        <property name="cursor_visible">False</property>
                      </widget>
                    </child>
                  </widget>
                  <packing>
                    <property name="position">1</property>
                  </packing>
                </child>
              </widget>
              <packing>
                <property name="position">1</property>
              </packing>
            </child>
          </widget>
          <packing>
            <property name="position">1</property>
          </packing>
        </child>
       </widget>
    </child>
  </widget>
</glade-interface>
EOS
;


my $gui = Gtk2::GladeXML->new_from_buffer($gladexml, 'mainWindow');
$gui->signal_autoconnect_from_package('main');

$gui->get_widget('mainwin')->show_all;

$gui->get_widget('lang')->append_text($_) foreach(@langs);
$gui->get_widget('lang')->set_active(0);



Gtk2->main;



# quit
$SIG{'INT'} = 'quit';

sub on_mainWindow_destroy { &quit; }
sub gtk_main_quit { &quit; }
sub quit {
	Gtk2->main_quit;
}




########################


my $lang;

# stisknuta klavesa
sub keypress{
	my ($widget, $event) = @_;
	#print $event->keyval()."\n";
	&translate if($event->keyval() == 65293 || $event->keyval() == 65421); #enter
	#&quit if($event->keyval() == 65307); #esc
	$gui->get_widget('word')->grab_focus() if($event->keyval() == 65307); #esc
}

# prelozit slovo z textoveho pole
sub translate{
	my $w = $gui->get_widget('word');
	$w->grab_focus();
	my $word = $w->get_text();
	$word =~ s/"//g;
	return if not $word;
	my ($f,$t);
	foreach (qw/f t/){
		$$_ = `slovnik -r $count -$_ $lang "$word"`;
		$gui->get_widget("text_$_")->get_buffer()->set_text(decode("utf-8", $$_));
	}
}

# zmena jazyka
sub lang_changed{
	my $widget = shift;
	$lang = $widget->get_active_text();

	$gui->get_widget('labelleft')->set_label("<b>cs → $lang</b>");
	$gui->get_widget('labelright')->set_label("<b>$lang → cs</b>");

	&translate;
}
