lib/shortcut/window.rb in shortcut-0.0.1 vs lib/shortcut/window.rb in shortcut-0.0.2

- old
+ new

@@ -1,16 +1,19 @@ require 'java' require 'jar/JNativeHook.jar' +import java.awt.BorderLayout import java.awt.Color import java.awt.event.ActionListener import java.awt.event.InputEvent import java.awt.event.WindowListener import java.awt.Robot +import java.util.ArrayList import java.io.ByteArrayInputStream +import javax.swing.ImageIcon import javax.swing.JButton import javax.swing.JFrame import javax.swing.JScrollPane import javax.swing.JTextArea @@ -79,16 +82,45 @@ def operative_system java.lang.System.getProperty("os.name").downcase end + def set_window_icons + # http://www.iconarchive.com/show/oxygen-icons-by-oxygen-icons.org/Apps-accessories-calculator-icon.html + icons = ArrayList.new + [16, 32, 64, 128].each do |size| + icons.add(self.class.get_image("images/icons/#{size}.png")) + end + setIconImages(icons) + end + def run + setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE) + setTitle(respond_to?(:default_title) ? default_title : 'Shortcut App') always_on_top if respond_to?(:always_on_top) + + set_window_icons + + if respond_to?(:shortcut_window_size) + shortcut_window_size + else + setSize(440, 250) + end + + if respond_to?(:shortcut_window_layout) + shortcut_window_layout + else + setLayout(BorderLayout.new) + end + GlobalScreen.getInstance.addNativeKeyListener(self) addWindowListener(self) + + create_components if respond_to?(:create_components) + setVisible true end class << self def title(text) @@ -101,10 +133,22 @@ send :define_method, :always_on_top do setAlwaysOnTop(bool_value) end end + def size(width, height) + send :define_method, :shortcut_window_size do + setSize(width, height) + end + end + + def layout(type_class) + send :define_method, :shortcut_window_layout do + setLayout(type_class.new) + end + end + def key_pressed(code, action = nil, &block) send :define_method, "key_#{code}_pressed".to_sym do if action method_name = "action_#{action}_handler".to_sym raise UndefinedActionError.new("undefined action `#{action}'") unless respond_to?(method_name) @@ -117,9 +161,13 @@ def action(name, &block) send :define_method, "action_#{name}_handler".to_sym do self.instance_eval(&block) end + end + + def get_image(path) + ImageIcon.new(path).getImage end end [:windowClosing, :windowIconified, :windowDeiconified, :windowActivated, :windowDeactivated].each do |name|