# Copyright (c) 2023 M.J.N. Corino, The Netherlands # # This software is released under the MIT license. # # Some parts are # Copyright 2004-2007, wxRuby development team # released under the MIT-like wxRuby2 license # Adapted for wxRuby3 ### require 'wx' # This sample demonstrates the use of Activate Events. These are # generated when a frame becomes active or inactive. This is typically # indicated by a frame's titlebar changing colour, and a widget within # the frame gainin focus. An event is also generated when a whole wxRuby # app starts or stops being the current focussed desktop application. module Activation class MinimalFrame < Wx::Frame def initialize(title, pos, size, style = Wx::DEFAULT_FRAME_STYLE) super(nil, -1, title, pos, size, style) self.icon = Wx.Icon(:sample, Wx::BITMAP_TYPE_XPM, art_path: File.join(__dir__, '..')) menuFile = Wx::Menu.new helpMenu = Wx::Menu.new helpMenu.append(Wx::ID_ABOUT, "&About...\tF1", "Show about dialog") menuFile.append(Wx::ID_EXIT, "E&xit\tAlt-X", "Quit this program") menuBar = Wx::MenuBar.new menuBar.append(menuFile, "&File") menuBar.append(helpMenu, "&Help") set_menu_bar(menuBar) create_status_bar(2) set_status_text("Welcome to wxRuby!") evt_close { on_quit } evt_menu(Wx::ID_EXIT) { on_quit } evt_menu(Wx::ID_ABOUT) { on_about } evt_activate { | e | on_activate(e) } evt_iconize { | e | on_iconize(e) } end def on_iconize(event) if event.iconized puts "Frame '#{get_title}' was iconized" else puts "Frame '#{get_title}' was restored" end end def on_activate(event) return if Wx::get_app.destroying if event.get_active puts "Frame '#{get_title}' became activated" set_status_text 'Active' else puts "Frame '#{get_title}' became deactivated" set_status_text 'Inactive' end event.skip # important end def on_quit Wx::get_app.close_all end def on_about msg = sprintf("This is the About dialog of the activate sample.\n" \ "Welcome to wxRuby, version %s", Wx::WXRUBY_VERSION) Wx::message_box(msg, "About Activate", Wx::OK|Wx::ICON_INFORMATION, self) end end class RbApp < Wx::App def on_init @frame_1 = MinimalFrame.new("Tall window", Wx::Point.new(50, 50), Wx::Size.new(150, 240)) @frame_2 = MinimalFrame.new("Wide window", Wx::Point.new(100, 100), Wx::Size.new(300, 180)) evt_activate_app { | e | on_activate_app(e) } @frame_1.show @frame_2.show end attr_reader :destroying def on_activate_app(event) if event.get_active puts "The app became active" else puts "The app became inactive" end event.skip # important end def close_all @frame_1.destroy @frame_2.destroy end end end module ActivationSample include WxRuby::Sample if defined? WxRuby::Sample def self.describe { file: __FILE__, summary: 'wxRuby Activate events example.', description: <<~__TXT wxRuby example demonstrating the use of Activate Events. This sample demonstrates the use of Activate Events. These are generated when a frame becomes active or inactive. This is typically indicated by a frame's titlebar changing colour, and a widget within the frame gainin focus. An event is also generated when a whole wxRuby app starts or stops being the current focussed desktop application. __TXT } end def self.run execute(__FILE__) end if $0 == __FILE__ Activation::RbApp.run end end