Skip to content
Snippets Groups Projects
babelfish.rb 2.42 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/env ruby
    
    require 'fox16'
    
    
    begin
      require 'tranexp'
    rescue LoadError
      warn("LoadError: To execute this app you need to have 'tranexp' gem installed.")
      sleep(5)
      exit(false)
    end
    
    
    include Fox
    
    TRANSLATIONS = {
    
    }
    
    class Babelfish < FXMainWindow
    
      def initialize(app)
        # Invoke base class initialize first
    
        super(app, "Babelfish", :opts => DECOR_ALL, :width => 600, :height => 400)
    
        @translator = Tranexp::Http.new
    
        # Controls area along the bottom
        controlsFrame = FXHorizontalFrame.new(self,
          LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X)
        FXLabel.new(controlsFrame, "Translate from:")
    
        @fromCombo = FXComboBox.new(controlsFrame, 15, :opts => COMBOBOX_STATIC|FRAME_SUNKEN|FRAME_THICK)
        @fromCombo.numVisible = 6
        FXLabel.new(controlsFrame, " to:")
        @toCombo = FXComboBox.new(controlsFrame, 15, :opts => COMBOBOX_STATIC|FRAME_SUNKEN|FRAME_THICK)
        @toCombo.numVisible = 6
        Tranexp::Codes.constants.each do |lang|
          @fromCombo.appendItem(lang)
          @toCombo.appendItem(lang)
    
        btn = FXButton.new(controlsFrame, "Translate", :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
    
        btn.connect(SEL_COMMAND) do
    
          from = @fromCombo.getItemText(@fromCombo.currentItem)
          to = @toCombo.getItemText(@toCombo.currentItem)
    
          getApp().beginWaitCursor() do
    
            @translatedText.text = @translator.translate(@sourceText.text, from, to)
    
          end
        end
    
        mainFrame = FXVerticalFrame.new(self,
          LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y|PACK_UNIFORM_HEIGHT)
    
        # Source text area in a sunken frame
        topFrame = FXVerticalFrame.new(mainFrame, LAYOUT_FILL_X|LAYOUT_FILL_Y)
        FXLabel.new(topFrame, "Source Text:", :opts => LAYOUT_FILL_X)
        sunkenFrame = FXHorizontalFrame.new(topFrame,
          FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y)
        @sourceText = FXText.new(sunkenFrame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
    
        # Translated text output
        bottomFrame = FXVerticalFrame.new(mainFrame, LAYOUT_FILL_X|LAYOUT_FILL_Y)
        FXLabel.new(bottomFrame, "Translated text:", nil, LAYOUT_FILL_X)
        sunkenFrame = FXHorizontalFrame.new(bottomFrame,
          FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y)
        @translatedText = FXText.new(sunkenFrame, :opts => TEXT_READONLY|LAYOUT_FILL_X|LAYOUT_FILL_Y)
      end
    
      def create
        super
        show(PLACEMENT_SCREEN)
      end
    end
    
    if __FILE__ == $0
    
      FXApp.new("Babelfish", "FoxTest") do |app|
        Babelfish.new(app)
        app.create
        app.run
      end