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|