#!/usr/bin/env ruby # wxRuby2 Sample Code. Copyright (c) 2004-2007 Kevin B. Smith # Freely reusable code: see SAMPLES-LICENSE.TXT for details begin require 'wx' rescue LoadError => no_wx_err begin require 'rubygems' load 'wx' rescue raise no_wx_err end end # A resizable control that displays its current size, and, if an AUI # arrangement, its position and layer class SizeReportCtrl < Wx::Control def initialize(parent, id, pos, size, mgr = nil) super(parent, id, pos, size) @mgr = mgr evt_paint { on_paint } evt_size { on_size } end def on_paint paint do | dc | size = get_client_size dc.set_font Wx::NORMAL_FONT dc.set_brush Wx::WHITE_BRUSH dc.set_pen Wx::WHITE_PEN dc.draw_rectangle(0, 0, size.x, size.y) dc.set_pen Wx::LIGHT_GREY_PEN dc.set_pen Wx::LIGHT_GREY_PEN dc.draw_line(0, 0, size.x, size.y) dc.draw_line(0, size.y, size.x, 0) msg = "Size: %d x %d" % [ size.x, size.y ] width, height = dc.get_text_extent(msg) height += 3 dc.draw_text(msg, (size.x - width) / 2, (size.y - ( height * 5 ) ) / 2 ) if @mgr pi = @mgr.get_pane(self) msg = "Layer: %d" % pi.dock_layer width, height = dc.get_text_extent(msg) dc.draw_text(msg, (size.x - width) / 2, ( ( size.y - ( height * 5 ) ) / 2 ) + height ) msg = "Dock: %d Row: %d" % [ pi.dock_direction, pi.dock_row ] width, height = dc.get_text_extent(msg) dc.draw_text(msg, (size.x - width) / 2, ( ( size.y - ( height * 5 ) ) / 2) + ( height * 2 ) ) msg = "Position: %d" % pi.dock_pos width, height = dc.get_text_extent(msg) dc.draw_text(msg, (size.x - width) / 2 , ( ( size.y - ( height * 5 ) ) / 2 ) + ( height * 3 ) ) msg = "Proportion: %d" % pi.dock_proportion width, height = dc.get_text_extent(msg) dc.draw_text(msg, (size.x - width) / 2 , ( ( size.y - ( height * 5 ) ) / 2 ) + ( height * 4 ) ) end end end def on_size refresh end end class SettingsPanel < Wx::Panel consts = %w[ ID_PaneBorderSize ID_SashSize ID_CaptionSize ID_BackgroundColour ID_SashColour ID_InactiveCaptionColour ID_InactiveCaptionGradientColour ID_InactiveCaptionTextColour ID_ActiveCaptionColour ID_ActiveCaptionGradientColour ID_ActiveCaptionTextColour ID_BorderColour ID_GripperColour ] consts.each_with_index do | c, i | const_set(c, 1001 + i) end def initialize(parent, frame) super(parent, Wx::ID_ANY) @frame = frame @base_bmp = create_colour_bitmap(Wx::BLACK) # set up some spin ctrls for integer variables @border_size, s1 = make_metric_spin_ctrl( ID_PaneBorderSize, "Pane Border Size:", Wx::AUI_DOCKART_PANE_BORDER_SIZE) @sash_size, s2 = make_metric_spin_ctrl( ID_SashSize, "Sash Size:", Wx::AUI_DOCKART_SASH_SIZE) @cap_size, s3 = make_metric_spin_ctrl( ID_CaptionSize, "Caption Size:", Wx::AUI_DOCKART_CAPTION_SIZE) # colour controls @bckg_colour, s4 = make_colour_button( ID_BackgroundColour, "Background Colour:") @sash_colour, s5 = make_colour_button( ID_SashColour, "Sash Colour:") @capt_colour, s6 = make_colour_button( ID_InactiveCaptionColour, "Normal Caption:") @capt_gradnt, s7 = make_colour_button( ID_InactiveCaptionGradientColour, "Normal Caption Gradient:") @capt_text, s8 = make_colour_button( ID_InactiveCaptionTextColour, "Normal Caption Text:") @acap_colour, s9 = make_colour_button( ID_ActiveCaptionColour, "Active Caption:") @acap_gradnt, s10 = make_colour_button( ID_ActiveCaptionGradientColour, "Active Caption Gradient:") @acap_text, s11 = make_colour_button( ID_ActiveCaptionTextColour, "Active Caption Text:") @brdr_colour, s12 = make_colour_button( ID_BorderColour, "Border Colour:") @grip_colour, s13 = make_colour_button( ID_GripperColour, "Gripper Colour:") grid_sizer = Wx::GridSizer.new(2) grid_sizer.set_h_gap(5) grid_sizer.add(s1); grid_sizer.add(s4) grid_sizer.add(s2); grid_sizer.add(s5) grid_sizer.add(s3); grid_sizer.add(s13) grid_sizer.add(1,1); grid_sizer.add(s12) grid_sizer.add(s6); grid_sizer.add(s9) grid_sizer.add(s7); grid_sizer.add(s10) grid_sizer.add(s8); grid_sizer.add(s11) cont_sizer =Wx::BoxSizer.new(Wx::VERTICAL) cont_sizer.add(grid_sizer, 1, Wx::EXPAND|Wx::ALL, 5) self.set_sizer(cont_sizer) get_sizer.set_size_hints(self) update_colours evt_spinctrl(ID_PaneBorderSize) { | e | on_pane_border_size(e) } evt_spinctrl(ID_SashSize) { | e | on_sash_size(e) } evt_spinctrl(ID_CaptionSize) { | e | on_caption_size(e) } evt_button(ID_BackgroundColour) { | e | on_set_colour(e) } evt_button(ID_SashColour) { | e | on_set_colour(e) } evt_button(ID_InactiveCaptionColour) { | e | on_set_colour(e) } evt_button(ID_InactiveCaptionGradientColour) { | e | on_set_colour(e) } evt_button(ID_InactiveCaptionTextColour) { | e | on_set_colour(e) } evt_button(ID_ActiveCaptionColour) { | e | on_set_colour(e) } evt_button(ID_ActiveCaptionGradientColour) { | e | on_set_colour(e) } evt_button(ID_ActiveCaptionTextColour) { | e | on_set_colour(e) } evt_button(ID_BorderColour) { | e | on_set_colour(e) } evt_button(ID_GripperColour) { | e | on_set_colour(e) } end def update_colours() art = @frame.get_dock_art col = art.get_color(Wx::AUI_DOCKART_BACKGROUND_COLOUR) @bckg_colour.set_bitmap_label( create_colour_bitmap(col) ) col = art.get_color(Wx::AUI_DOCKART_SASH_COLOUR) @sash_colour.set_bitmap_label( create_colour_bitmap(col) ) col = art.get_color(Wx::AUI_DOCKART_INACTIVE_CAPTION_COLOUR) @capt_colour.set_bitmap_label( create_colour_bitmap(col) ) col = art.get_color(Wx::AUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR) @capt_gradnt.set_bitmap_label( create_colour_bitmap(col) ) col = art.get_color(Wx::AUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR) @capt_text.set_bitmap_label( create_colour_bitmap(col) ) col = art.get_color(Wx::AUI_DOCKART_ACTIVE_CAPTION_COLOUR) @acap_colour.set_bitmap_label( create_colour_bitmap(col) ) col = art.get_color(Wx::AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR) @acap_gradnt.set_bitmap_label( create_colour_bitmap(col) ) col = art.get_color(Wx::AUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR) @acap_text.set_bitmap_label( create_colour_bitmap(col) ) col = art.get_color(Wx::AUI_DOCKART_SASH_COLOUR) @brdr_colour.set_bitmap_label( create_colour_bitmap(col) ) col = art.get_color(Wx::AUI_DOCKART_GRIPPER_COLOUR) @grip_colour.set_bitmap_label( create_colour_bitmap(col) ) end def on_pane_border_size(event) @frame.get_dock_art.set_metric( Wx::AUI_DOCKART_PANE_BORDER_SIZE, event.get_position ) @frame.do_update end def on_sash_size(event) @frame.get_dock_art.set_metric( Wx::AUI_DOCKART_SASH_SIZE, event.get_position ) @frame.do_update end def on_caption_size(event) @frame.get_dock_art.set_metric( Wx::AUI_DOCKART_CAPTION_SIZE, event.get_position ) @frame.do_update end def on_set_colour(event) dlg = Wx::ColourDialog.new(@frame) dlg.set_title("Colour Picker") return unless dlg.show_modal == Wx::ID_OK var = nil case event.get_id() when ID_BackgroundColour var = Wx::AUI_DOCKART_BACKGROUND_COLOUR when ID_SashColour var = Wx::AUI_DOCKART_SASH_COLOUR when ID_InactiveCaptionColour var = Wx::AUI_DOCKART_INACTIVE_CAPTION_COLOUR when ID_InactiveCaptionGradientColour var = Wx::AUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR when ID_InactiveCaptionTextColour var = Wx::AUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR when ID_ActiveCaptionColour var = Wx::AUI_DOCKART_ACTIVE_CAPTION_COLOUR when ID_ActiveCaptionGradientColour var = Wx::AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR when ID_ActiveCaptionTextColour var = Wx::AUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR when ID_BorderColour var = Wx::AUI_DOCKART_BORDER_COLOUR when ID_GripperColour var = Wx::AUI_DOCKART_GRIPPER_COLOUR else return end @frame.get_dock_art.set_colour(var, dlg.get_colour_data.get_colour ) @frame.do_update update_colours end private def make_metric_spin_ctrl(an_id, caption, metric) metric_val = @frame.get_dock_art.get_metric(metric) sp = Wx::SpinCtrl.new( self, an_id, metric_val.to_s, Wx::DEFAULT_POSITION, Wx::Size.new(50, 20), Wx::SP_ARROW_KEYS, 0, 100, metric_val) sz = Wx::BoxSizer.new(Wx::HORIZONTAL) sz.add(1, 1, 1, Wx::EXPAND) sz.add( Wx::StaticText.new(self, Wx::ID_ANY, caption) ) sz.add(sp) sz.add(1, 1, 1, Wx::EXPAND) sz.set_item_min_size(1, 180, 20) return sp, sz end # utility to make a little captioned button; # returns the button and a sizer containing the button and caption def make_colour_button(an_id, caption) bmp_butt = Wx::BitmapButton.new( self, an_id, @base_bmp, Wx::DEFAULT_POSITION, Wx::Size.new(50, 25) ) sz = Wx::BoxSizer.new(Wx::HORIZONTAL) sz.add(1, 1, 1, Wx::EXPAND) sz.add( Wx::StaticText.new(self, Wx::ID_ANY, caption) ) sz.add(bmp_butt) sz.add(1, 1, 1, Wx::EXPAND) sz.set_item_min_size(1, 180, 20) return bmp_butt, sz end # returns a 25 x 14 image with solid colour +colour+, with a 1-pixel # black border def create_colour_bitmap(colour) img = Wx::Image.new(25, 14) 0.upto(24) do | x | 0.upto(13) do | y | if (x == 0 || x == 24 || y == 0 || y == 13) pixcol = Wx::BLACK else pixcol = colour end img.set_rgb(x, y, pixcol.red, pixcol.green, pixcol.blue) end end return Wx::Bitmap.new(img) end end class AuiFrame < Wx::Frame consts = %w[ ID_CreateTree ID_CreateGrid ID_CreateText ID_CreateHTML ID_CreateNotebook ID_CreateSizeReport ID_GridContent ID_TextContent ID_TreeContent ID_HTMLContent ID_NotebookContent ID_SizeReportContent ID_CreatePerspective ID_CopyPerspectiveCode ID_AllowFloating ID_AllowActivePane ID_TransparentHint ID_VenetianBlindsHint ID_RectangleHint ID_NoHint ID_HintFade ID_NoVenetianFade ID_TransparentDrag ID_NoGradient ID_VerticalGradient ID_HorizontalGradient ID_Settings ID_NotebookNoCloseButton ID_NotebookCloseButton ID_NotebookCloseButtonAll ID_NotebookCloseButtonActive ID_NotebookAllowTabMove ID_NotebookAllowTabExternalMove ID_NotebookAllowTabSplit ID_NotebookWindowList ID_NotebookScrollButtons ID_NotebookTabFixedWidth ID_NotebookArtGloss ID_NotebookArtSimple ] consts.each_with_index do | c, i | const_set(c, 2000 + i) end ID_FirstPerspective = ID_CreatePerspective + 1000 def initialize(*args) super @mgr = Wx::AuiManager.new @mgr.set_managed_window(self) @perspectives = [] # set up default notebook style @notebook_style = Wx::AUI_NB_DEFAULT_STYLE| Wx::AUI_NB_TAB_EXTERNAL_MOVE|Wx::NO_BORDER @notebook_theme = 0 setup_menu create_status_bar get_status_bar.set_status_text("Ready") set_min_size( Wx::Size.new(400,300) ) setup_toolbars setup_panes setup_perspectives setup_events @mgr.update end # def setup_menu mb = Wx::MenuBar.new file_menu = Wx::Menu.new file_menu.append(Wx::ID_EXIT, "Exit") view_menu = Wx::Menu.new view_menu.append(ID_CreateText, "Create Text Control") view_menu.append(ID_CreateHTML, "Create HTML Control") view_menu.append(ID_CreateTree, "Create Tree") view_menu.append(ID_CreateGrid, "Create Grid") view_menu.append(ID_CreateNotebook, "Create Notebook") view_menu.append(ID_CreateSizeReport, "Create Size Reporter") view_menu.append_separator view_menu.append( ID_GridContent, "Use a Grid for the Content Pane") view_menu.append( ID_TextContent, "Use a Text Control for the Content Pane") view_menu.append( ID_HTMLContent, "Use an HTML Control for the Content Pane") view_menu.append( ID_TreeContent, "Use a Tree Control for the Content Pane") view_menu.append( ID_NotebookContent, "Use a wxAuiNotebook control for the Content Pane") view_menu.append(ID_SizeReportContent, "Use a Size Reporter for the Content Pane") options_menu = Wx::Menu.new # Hints options_menu.append_radio_item( ID_TransparentHint, "Transparent Hint") options_menu.append_radio_item( ID_VenetianBlindsHint, "Venetian Blinds Hint") options_menu.append_radio_item( ID_RectangleHint, "Rectangle Hint") options_menu.append_radio_item( ID_NoHint, "No Hint") options_menu.append_separator # Hints Options options_menu.append_check_item( ID_HintFade, "Hint Fade-in") options_menu.append_check_item( ID_AllowFloating, "Allow Floating") options_menu.append_check_item( ID_NoVenetianFade, "Disable Venetian Blinds Hint Fade-in") options_menu.append_check_item( ID_TransparentDrag, "Transparent Drag") options_menu.append_check_item( ID_AllowActivePane, "Allow Active Pane") options_menu.append_separator options_menu.append_radio_item( ID_NoGradient, "No Caption Gradient") options_menu.append_radio_item( ID_VerticalGradient, "Vertical Caption Gradient") options_menu.append_radio_item( ID_HorizontalGradient, "Horizontal Caption Gradient") options_menu.append_separator options_menu.append(ID_Settings, "Settings Pane") notebook_menu = Wx::Menu.new notebook_menu.append_radio_item( ID_NotebookArtGloss, "Glossy Theme (Default)") notebook_menu.append_radio_item( ID_NotebookArtSimple, "Simple Theme") notebook_menu.append_separator notebook_menu.append_radio_item( ID_NotebookNoCloseButton, "No Close Button") notebook_menu.append_radio_item( ID_NotebookCloseButton, "Close Button at Right") notebook_menu.append_radio_item( ID_NotebookCloseButtonAll, "Close Button on All Tabs") notebook_menu.append_radio_item( ID_NotebookCloseButtonActive, "Close Button on Active Tab") notebook_menu.append_separator notebook_menu.append_check_item( ID_NotebookAllowTabMove, "Allow Tab Move") notebook_menu.append_check_item( ID_NotebookAllowTabExternalMove, "Allow External Tab Move") notebook_menu.append_check_item( ID_NotebookAllowTabSplit, "Allow Notebook Split") notebook_menu.append_check_item( ID_NotebookScrollButtons, "Scroll Buttons Visible") notebook_menu.append_check_item( ID_NotebookWindowList, "Window List Button Visible") notebook_menu.append_check_item( ID_NotebookTabFixedWidth, "Fixed-width Tabs") @perspectives_menu = Wx::Menu.new @perspectives_menu.append( ID_CreatePerspective, "Create Perspective") @perspectives_menu.append( ID_CopyPerspectiveCode, "Copy Perspective Data To Clipboard") @perspectives_menu.append_separator @perspectives_menu.append( ID_FirstPerspective + 0, "Default Startup") @perspectives_menu.append( ID_FirstPerspective + 1, "All Panes") help_menu = Wx::Menu.new help_menu.append(Wx::ID_ABOUT, "About...") mb.append(file_menu, "File") mb.append(view_menu, "View") mb.append(@perspectives_menu, "Perspectives") mb.append(options_menu, "Options") mb.append(notebook_menu, "Notebook") mb.append(help_menu, "Help") set_menu_bar(mb) end def setup_events evt_erase_background { | e | on_erase_background(e) } evt_size{ | e | on_size(e) } evt_menu(ID_CreateTree) { | e | on_create_tree } evt_menu(ID_CreateGrid) { | e | on_create_grid } evt_menu(ID_CreateText) { | e | on_create_text } evt_menu(ID_CreateHTML) { | e | on_create_html } evt_menu(ID_CreateSizeReport) { | e | on_create_size_report } evt_menu(ID_CreateNotebook) { | e | on_create_notebook } evt_menu(ID_CreatePerspective) { | e | on_create_perspective } evt_menu(ID_CopyPerspectiveCode) { | e | on_copy_perspective_code} evt_menu(ID_AllowFloating) { | e | on_manager_flag(e) } evt_menu(ID_TransparentHint) { | e | on_manager_flag(e) } evt_menu(ID_VenetianBlindsHint) { | e | on_manager_flag(e) } evt_menu(ID_RectangleHint) { | e | on_manager_flag(e) } evt_menu(ID_NoHint) { | e | on_manager_flag(e) } evt_menu(ID_HintFade) { | e | on_manager_flag(e) } evt_menu(ID_NoVenetianFade) { | e | on_manager_flag(e) } evt_menu(ID_TransparentDrag) { | e | on_manager_flag(e) } evt_menu(ID_AllowActivePane) { | e | on_manager_flag(e) } evt_menu(ID_NotebookTabFixedWidth) { | e | on_notebook_flag(e) } evt_menu(ID_NotebookNoCloseButton) { | e | on_notebook_flag(e) } evt_menu(ID_NotebookCloseButton) { | e | on_notebook_flag(e) } evt_menu(ID_NotebookCloseButtonAll) { | e | on_notebook_flag(e) } evt_menu(ID_NotebookCloseButtonActive) { | e | on_notebook_flag(e) } evt_menu(ID_NotebookAllowTabMove) { | e | on_notebook_flag(e) } evt_menu(ID_NotebookAllowTabExternalMove) { | e | on_notebook_flag(e) } evt_menu(ID_NotebookAllowTabSplit) { | e | on_notebook_flag(e) } evt_menu(ID_NotebookScrollButtons) { | e | on_notebook_flag(e) } evt_menu(ID_NotebookWindowList) { | e | on_notebook_flag(e) } evt_menu(ID_NotebookArtGloss) { | e | on_notebook_flag(e) } evt_menu(ID_NotebookArtSimple) { | e | on_notebook_flag(e) } evt_menu(ID_NoGradient) { | e | on_gradient(e) } evt_menu(ID_VerticalGradient) { | e | on_gradient(e) } evt_menu(ID_HorizontalGradient) { | e | on_gradient(e) } evt_menu(ID_Settings) { on_settings } evt_menu(ID_GridContent) { | e | on_change_content_pane(e) } evt_menu(ID_TreeContent) { | e | on_change_content_pane(e) } evt_menu(ID_TextContent) { | e | on_change_content_pane(e) } evt_menu(ID_SizeReportContent) { | e | on_change_content_pane(e) } evt_menu(ID_HTMLContent) { | e | on_change_content_pane(e) } evt_menu(ID_NotebookContent) { | e | on_change_content_pane(e) } evt_menu(Wx::ID_EXIT) { | e | on_exit } evt_menu(Wx::ID_ABOUT) { | e | on_about } evt_update_ui(ID_NotebookTabFixedWidth) { | e | on_update_ui(e) } evt_update_ui(ID_NotebookNoCloseButton) { | e | on_update_ui(e) } evt_update_ui(ID_NotebookCloseButton) { | e | on_update_ui(e) } evt_update_ui(ID_NotebookCloseButtonAll) { | e | on_update_ui(e) } evt_update_ui(ID_NotebookCloseButtonActive) { | e | on_update_ui(e) } evt_update_ui(ID_NotebookAllowTabMove) { | e | on_update_ui(e) } evt_update_ui(ID_NotebookAllowTabExternalMove) { | e | on_update_ui(e) } evt_update_ui(ID_NotebookAllowTabSplit) { | e | on_update_ui(e) } evt_update_ui(ID_NotebookScrollButtons) { | e | on_update_ui(e) } evt_update_ui(ID_NotebookWindowList) { | e | on_update_ui(e) } evt_update_ui(ID_AllowFloating) { | e | on_update_ui(e) } evt_update_ui(ID_TransparentHint) { | e | on_update_ui(e) } evt_update_ui(ID_VenetianBlindsHint) { | e | on_update_ui(e) } evt_update_ui(ID_RectangleHint) { | e | on_update_ui(e) } evt_update_ui(ID_NoHint) { | e | on_update_ui(e) } evt_update_ui(ID_HintFade) { | e | on_update_ui(e) } evt_update_ui(ID_NoVenetianFade) { | e | on_update_ui(e) } evt_update_ui(ID_TransparentDrag) { | e | on_update_ui(e) } evt_update_ui(ID_NoGradient) { | e | on_update_ui(e) } evt_update_ui(ID_VerticalGradient) { | e | on_update_ui(e) } evt_update_ui(ID_HorizontalGradient) { | e | on_update_ui(e) } evt_menu_range( ID_FirstPerspective, ID_FirstPerspective + @perspectives.length) { | e | } evt_aui_pane_close { | e | on_pane_close(e) } evt_auinotebook_page_close(Wx::ID_ANY) { | e | on_notebook_page_close(e) } end # create some toolbars def setup_toolbars tb1 = Wx::ToolBar.new( self, Wx::ID_ANY, Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TB_FLAT|Wx::TB_NODIVIDER) tb1.set_tool_bitmap_size( Wx::Size.new(48,48) ) tb1.add_tool( 101, "Test", Wx::ArtProvider::get_bitmap(Wx::ART_ERROR) ) tb1.add_separator tb1.add_tool( 102, "Test", Wx::ArtProvider::get_bitmap(Wx::ART_QUESTION) ) tb1.add_tool( 103, "Test", Wx::ArtProvider::get_bitmap(Wx::ART_INFORMATION) ) tb1.add_tool( 103, "Test", Wx::ArtProvider::get_bitmap(Wx::ART_WARNING)); tb1.add_tool( 103, "Test", Wx::ArtProvider::get_bitmap(Wx::ART_MISSING_IMAGE)); tb1.realize tb2 = Wx::ToolBar.new( self, Wx::ID_ANY, Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TB_FLAT|Wx::TB_NODIVIDER ) tb2.set_tool_bitmap_size( Wx::Size.new(16,16) ) tb2_bmp1 = Wx::ArtProvider::get_bitmap( Wx::ART_QUESTION, Wx::ART_OTHER, Wx::Size.new(16,16) ) tb2.add_tool(101, "Test", tb2_bmp1); tb2.add_tool(101, "Test", tb2_bmp1); tb2.add_tool(101, "Test", tb2_bmp1); tb2.add_tool(101, "Test", tb2_bmp1); tb2.add_separator tb2.add_tool(101, "Test", tb2_bmp1); tb2.add_tool(101, "Test", tb2_bmp1); tb2.add_separator tb2.add_tool(101, "Test", tb2_bmp1); tb2.add_tool(101, "Test", tb2_bmp1); tb2.add_tool(101, "Test", tb2_bmp1); tb2.add_tool(101, "Test", tb2_bmp1); tb2.realize tb3 = Wx::ToolBar.new(self, Wx::ID_ANY, Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TB_FLAT|Wx::TB_NODIVIDER) tb3.set_tool_bitmap_size( Wx::Size.new(16,16) ) tb3_bmp1 = Wx::ArtProvider::get_bitmap( Wx::ART_FOLDER, Wx::ART_OTHER, Wx::Size.new(16,16) ) tb3.add_tool(101, "Test", tb3_bmp1) tb3.add_tool(101, "Test", tb3_bmp1) tb3.add_tool(101, "Test", tb3_bmp1) tb3.add_tool(101, "Test", tb3_bmp1) tb3.add_separator tb3.add_tool(101, "Test", tb3_bmp1) tb3.add_tool(101, "Test", tb3_bmp1) tb3.realize tb4 = Wx::ToolBar.new( self, Wx::ID_ANY, Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TB_FLAT|Wx::TB_NODIVIDER|Wx::TB_HORZ_TEXT) tb4.set_tool_bitmap_size( Wx::Size.new(16, 16) ) tb4_bmp1 = Wx::ArtProvider::get_bitmap( Wx::ART_NORMAL_FILE, Wx::ART_OTHER, Wx::Size.new(16, 16) ) tb4.add_tool(101, "Item 1", tb4_bmp1) tb4.add_tool(101, "Item 2", tb4_bmp1) tb4.add_tool(101, "Item 3", tb4_bmp1) tb4.add_tool(101, "Item 4", tb4_bmp1) tb4.add_separator tb4.add_tool(101, "Item 5", tb4_bmp1) tb4.add_tool(101, "Item 6", tb4_bmp1) tb4.add_tool(101, "Item 7", tb4_bmp1) tb4.add_tool(101, "Item 8", tb4_bmp1) tb4.realize # create some toolbars tb5 = Wx::ToolBar.new( self, Wx::ID_ANY, Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TB_FLAT|Wx::TB_NODIVIDER|Wx::TB_VERTICAL) tb5.set_tool_bitmap_size( Wx::Size.new(48,48)) tb5.add_tool( 101, "Test", Wx::ArtProvider::get_bitmap(Wx::ART_ERROR) ) tb5.add_separator tb5.add_tool( 102, "Test", Wx::ArtProvider::get_bitmap(Wx::ART_QUESTION) ) tb5.add_tool( 103, "Test", Wx::ArtProvider::get_bitmap(Wx::ART_INFORMATION) ) tb5.add_tool( 103, "Test", Wx::ArtProvider::get_bitmap(Wx::ART_WARNING) ) tb5.add_tool( 103, "Test", Wx::ArtProvider::get_bitmap(Wx::ART_MISSING_IMAGE) ) tb5.realize # add the toolbars to the manager pi = Wx::AuiPaneInfo.new pi.set_name('tb1').set_caption("Big Toolbar").toolbar_pane pi.top.set_left_dockable(false).set_right_dockable(false) @mgr.add_pane(tb1, pi) pi = Wx::AuiPaneInfo.new pi.set_name('tb2').set_caption("Toolbar 2").toolbar_pane pi.top.set_row(1) pi.set_left_dockable(false).set_right_dockable(false) @mgr.add_pane(tb2, pi) pi = Wx::AuiPaneInfo.new pi.set_name('tb3').set_caption("Toolbar 3").toolbar_pane pi.top.set_row(1).set_position(1) pi.set_left_dockable(false).set_right_dockable(false) @mgr.add_pane(tb3, pi) pi = Wx::AuiPaneInfo.new pi.set_name('tb4').set_caption("Sample Bookmark Toolbar") pi.toolbar_pane.top.set_row(2) pi.set_left_dockable(false).set_right_dockable(false) @mgr.add_pane(tb4, pi) pi = Wx::AuiPaneInfo.new pi.set_name('tb5').set_caption("Sample Vertical Toolbar") pi.toolbar_pane.left.set_gripper_top pi.set_left_dockable(false).set_right_dockable(false) @mgr.add_pane(tb5, pi) end def setup_panes # add a bunch of panes pi = Wx::AuiPaneInfo.new pi.set_name('test1').set_caption('Pane Caption').top @mgr.add_pane(create_size_report_ctrl, pi) pi = Wx::AuiPaneInfo.new pi.set_name('test2').set_caption('Client Size Reporter').bottom pi.set_position(1).set_close_button.set_maximize_button @mgr.add_pane(create_size_report_ctrl, pi) pi = Wx::AuiPaneInfo.new pi.set_name('test3').set_caption('Client Size Reporter').bottom pi.set_close_button.set_maximize_button @mgr.add_pane(create_size_report_ctrl, pi) pi = Wx::AuiPaneInfo.new pi.set_name('test4').set_caption('Pane Caption').left @mgr.add_pane(create_size_report_ctrl, pi) pi = Wx::AuiPaneInfo.new pi.set_name('test5').set_caption('No Close Button').right pi.set_close_button(false) @mgr.add_pane(create_size_report_ctrl, pi) pi = Wx::AuiPaneInfo.new pi.set_name('test6').set_caption('Client Size Report').right pi.set_row(1).set_close_button.set_maximize_button @mgr.add_pane(create_size_report_ctrl, pi) pi = Wx::AuiPaneInfo.new pi.set_name('test7').set_caption('Client Size Report').left pi.set_layer(1).set_close_button.set_maximize_button @mgr.add_pane(create_size_report_ctrl, pi) pi = Wx::AuiPaneInfo.new pi.set_name('test8').set_caption('Tree Pane').left pi.set_layer(1).set_position(1).set_close_button.set_maximize_button @mgr.add_pane(create_tree_ctrl, pi) pi = Wx::AuiPaneInfo.new pi_size = Wx::Size.new(200, 100) pi.set_name('test9').set_caption('Min Size 200x100').bottom pi.set_best_size(pi_size).set_min_size(pi_size) pi.set_layer(1).set_close_button.set_maximize_button @mgr.add_pane(create_size_report_ctrl, pi) wnd10 = create_text_ctrl("This pane will prompt the user before hiding.") pi = Wx::AuiPaneInfo.new pi.set_name('test10').set_caption('Text Pane with hide prompt') pi.bottom.set_layer(1).set_position(1) @mgr.add_pane(wnd10, pi) pi = Wx::AuiPaneInfo.new pi.set_name('test11').set_caption('Fixed Pane').bottom pi.set_layer(1).set_position(2).fixed @mgr.add_pane(create_size_report_ctrl, pi) pi = Wx::AuiPaneInfo.new pi.set_name('settings').set_caption('Dock Manager Settings') pi.set_dockable(false).float.hide @mgr.add_pane(SettingsPanel.new(self, self), pi) # create some center panes pi = Wx::AuiPaneInfo.new pi.set_name('grid_content').center_pane.hide @mgr.add_pane(create_grid, pi) pi = Wx::AuiPaneInfo.new pi.set_name('tree_content').center_pane.hide @mgr.add_pane(create_tree_ctrl, pi) pi = Wx::AuiPaneInfo.new pi.set_name('sizereport_content').center_pane.hide @mgr.add_pane(create_size_report_ctrl, pi) pi = Wx::AuiPaneInfo.new pi.set_name('text_content').center_pane.hide @mgr.add_pane(create_text_ctrl, pi) pi = Wx::AuiPaneInfo.new pi.set_name('html_content').center_pane.hide @mgr.add_pane(create_html_ctrl, pi) pi = Wx::AuiPaneInfo.new pi.set_name('notebook_content').center_pane.hide @mgr.add_pane(create_notebook, pi) pi = Wx::AuiPaneInfo.new pi.set_name('tb6').toolbar_pane.top pi.set_row(2).set_position(1) pi.set_left_dockable(false).set_right_dockable(false) @mgr.add_pane(Wx::Button.new(self, Wx::ID_ANY, "Test Button"), pi) end # make some default perspectives def setup_perspectives perspective_all = @mgr.save_perspective @mgr.get_all_panes.each do | pane | pane.hide unless pane.is_toolbar end @mgr.get_pane("tb1").hide @mgr.get_pane("tb6").hide @mgr.get_pane("test8").show.left.set_layer(0).set_row(0).set_position(0) @mgr.get_pane("test10").show.bottom.set_layer(0).set_row(0).set_position(0) @mgr.get_pane("notebook_content").show() perspective_default = @mgr.save_perspective @perspectives << perspective_default @perspectives << perspective_all end def get_dock_art @mgr.get_art_provider end def do_update @mgr.update end def on_erase_background(event) event.skip end def on_size(event) event.skip end def on_settings float_pane = @mgr.get_pane("settings").float.show if float_pane.get_floating_position == Wx::DEFAULT_POSITION float_pane.set_floating_position( get_start_position ) end @mgr.update end def on_gradient(event) gradient = nil case event.get_id when ID_NoGradient gradient = Wx::AUI_GRADIENT_NONE when ID_VerticalGradient gradient = Wx::AUI_GRADIENT_VERTICAL when ID_HorizontalGradient gradient = Wx::AUI_GRADIENT_HORIZONTAL end return if not gradient @mgr.get_art_provider.set_metric( Wx::AUI_DOCKART_GRADIENT_TYPE, gradient) @mgr.update end def on_manager_flag(event) e_id = event.get_id if e_id == ID_TransparentHint or e_id == ID_VenetianBlindsHint or e_id == ID_RectangleHint or e_id == ID_NoHint flags = @mgr.get_flags flags &= ~Wx::AUI_MGR_TRANSPARENT_HINT flags &= ~Wx::AUI_MGR_VENETIAN_BLINDS_HINT flags &= ~Wx::AUI_MGR_RECTANGLE_HINT @mgr.set_flags(flags) end flag = nil case e_id when ID_AllowFloating flag = Wx::AUI_MGR_ALLOW_FLOATING when ID_TransparentDrag flag = Wx::AUI_MGR_TRANSPARENT_DRAG when ID_HintFade flag = Wx::AUI_MGR_HINT_FADE when ID_NoVenetianFade flag = Wx::AUI_MGR_NO_VENETIAN_BLINDS_FADE when ID_AllowActivePane flag = Wx::AUI_MGR_ALLOW_ACTIVE_PANE when ID_TransparentHint flag = Wx::AUI_MGR_TRANSPARENT_HINT when ID_VenetianBlindsHint flag = Wx::AUI_MGR_VENETIAN_BLINDS_HINT when ID_RectangleHint flag = Wx::AUI_MGR_RECTANGLE_HINT end if flag @mgr.set_flags(@mgr.get_flags ^ flag) end @mgr.update end def on_notebook_flag(event) e_id = event.get_id if e_id == ID_NotebookNoCloseButton or e_id == ID_NotebookCloseButton or e_id == ID_NotebookCloseButtonAll or e_id == ID_NotebookCloseButtonActive @notebook_style &= ~( Wx::AUI_NB_CLOSE_BUTTON| Wx::AUI_NB_CLOSE_ON_ACTIVE_TAB| Wx::AUI_NB_CLOSE_ON_ALL_TABS ) end case e_id when ID_NotebookNoCloseButton # nothing when ID_NotebookCloseButton @notebook_style |= Wx::AUI_NB_CLOSE_BUTTON when ID_NotebookCloseButtonAll @notebook_style |= Wx::AUI_NB_CLOSE_ON_ALL_TABS when ID_NotebookCloseButtonActive @notebook_style |= Wx::AUI_NB_CLOSE_ON_ACTIVE_TAB end if e_id == ID_NotebookAllowTabMove @notebook_style ^= Wx::AUI_NB_TAB_MOVE end if e_id == ID_NotebookAllowTabExternalMove @notebook_style ^= Wx::AUI_NB_TAB_EXTERNAL_MOVE elsif e_id == ID_NotebookAllowTabSplit @notebook_style ^= Wx::AUI_NB_TAB_SPLIT elsif e_id == ID_NotebookWindowList @notebook_style ^= Wx::AUI_NB_WINDOWLIST_BUTTON elsif e_id == ID_NotebookScrollButtons @notebook_style ^= Wx::AUI_NB_SCROLL_BUTTONS elsif e_id == ID_NotebookTabFixedWidth @notebook_style ^= Wx::AUI_NB_TAB_FIXED_WIDTH end @mgr.get_all_panes.each do | pane | maybe_nb = pane.get_window next unless maybe_nb.kind_of?(Wx::AuiNotebook) if e_id == ID_NotebookArtGloss maybe_nb.set_art_provider(Wx::AuiDefaultTabArt.new) @notebook_theme = 0 elsif e_id == ID_NotebookArtSimple maybe_nb.set_art_provider(Wx::AuiSimpleTabArt.new) @notebook_theme = 1 end maybe_nb.set_window_style_flag(@notebook_style) maybe_nb.refresh() end end def on_update_ui(event) flags = @mgr.get_flags case event.get_id when ID_NoGradient event.check(@mgr.get_art_provider.get_metric(Wx::AUI_DOCKART_GRADIENT_TYPE) == Wx::AUI_GRADIENT_NONE) when ID_VerticalGradient event.check(@mgr.get_art_provider.get_metric(Wx::AUI_DOCKART_GRADIENT_TYPE) == Wx::AUI_GRADIENT_VERTICAL) when ID_HorizontalGradient event.check(@mgr.get_art_provider.get_metric(Wx::AUI_DOCKART_GRADIENT_TYPE) == Wx::AUI_GRADIENT_HORIZONTAL) when ID_AllowFloating event.check((flags & Wx::AUI_MGR_ALLOW_FLOATING) != 0) when ID_TransparentDrag event.check((flags & Wx::AUI_MGR_TRANSPARENT_DRAG) != 0) when ID_TransparentHint event.check((flags & Wx::AUI_MGR_TRANSPARENT_HINT) != 0) when ID_VenetianBlindsHint event.check((flags & Wx::AUI_MGR_VENETIAN_BLINDS_HINT) != 0) when ID_RectangleHint event.check((flags & Wx::AUI_MGR_RECTANGLE_HINT) != 0) when ID_NoHint event.check( (Wx::AUI_MGR_TRANSPARENT_HINT| Wx::AUI_MGR_VENETIAN_BLINDS_HINT| Wx::AUI_MGR_RECTANGLE_HINT) & flags == 0) when ID_HintFade event.check((flags & Wx::AUI_MGR_HINT_FADE) != 0) when ID_NoVenetianFade event.check((flags & Wx::AUI_MGR_NO_VENETIAN_BLINDS_FADE) != 0) when ID_NotebookNoCloseButton event.check( (@notebook_style & ( Wx::AUI_NB_CLOSE_BUTTON| Wx::AUI_NB_CLOSE_ON_ALL_TABS| Wx::AUI_NB_CLOSE_ON_ACTIVE_TAB) ) != 0) when ID_NotebookCloseButton event.check((@notebook_style & Wx::AUI_NB_CLOSE_BUTTON) != 0) when ID_NotebookCloseButtonAll event.check((@notebook_style & Wx::AUI_NB_CLOSE_ON_ALL_TABS) != 0) when ID_NotebookCloseButtonActive event.check((@notebook_style & Wx::AUI_NB_CLOSE_ON_ACTIVE_TAB) != 0) when ID_NotebookAllowTabSplit: event.check((@notebook_style & Wx::AUI_NB_TAB_SPLIT) != 0) when ID_NotebookAllowTabMove event.check((@notebook_style & Wx::AUI_NB_TAB_MOVE) != 0) when ID_NotebookAllowTabExternalMove event.check((@notebook_style & Wx::AUI_NB_TAB_EXTERNAL_MOVE) != 0) when ID_NotebookScrollButtons event.check((@notebook_style & Wx::AUI_NB_SCROLL_BUTTONS) != 0) when ID_NotebookWindowList event.check((@notebook_style & Wx::AUI_NB_WINDOWLIST_BUTTON) != 0) when ID_NotebookTabFixedWidth event.check((@notebook_style & Wx::AUI_NB_TAB_FIXED_WIDTH) != 0) when ID_NotebookArtGloss event.check(@notebook_style == 0) when ID_NotebookArtSimple event.check(@notebook_style == 1) end end def on_pane_close(event) if event.get_pane.get_name == "test10" msg = "Are you sure you want to close/hide this pane?" dlg = Wx::MessageDialog.new(self, msg, "Wx::AUI", Wx::YES_NO) if dlg.show_modal != Wx::ID_YES return event.veto end end end def on_create_perspective msg = "Enter a name for the new perspective:" dlg = Wx::TextEntryDialog.new(self, msg, "Wx::AUI Test") dlg.set_value("Perspective %d" % @perspectives.length + 1) return unless dlg.show_modal != Wx::ID_OK if @perspectives.length.zero? @perspectives_menu.append_separator end @perspectives_menu.append(ID_FirstPerspective + @perspectives.length, dlg.get_value) @perspectives << @mgr.save_perspective end def on_copy_perspective_code Kernel.raise NotImplementedError end def on_restore_perspective(event) perspective = @perspectives[ event.get_id - ID_FirstPerspective] @mgr.load_perspective(perspective) end def on_notebook_page_close(event) notebook = event.get_event_object if notebook.get_page(event.get_selection).kind_of?(Wx::HtmlWindow) msg = "Are you sure you want to close/hide this notebook page?" dlg = Wx::MessageDialog.new(self, msg, "Wx::AUI", Wx::YES_NO) if dlg.show_modal != Wx::ID_YES event.veto else event.allow end end end def get_start_position origin = client_to_screen( Wx::Point.new(0, 0) ) return Wx::Point.new(origin.x + 20, origin.y + 20) end def on_create_tree pi = Wx::AuiPaneInfo.new pi.set_caption("Tree Control").float pi.set_floating_position(get_start_position) pi.set_floating_size(Wx::Size.new(150, 300)) @mgr.add_pane( create_tree_ctrl, pi) @mgr.update end def on_create_grid pi = Wx::AuiPaneInfo.new pi.set_caption("Grid").float pi.set_floating_position(get_start_position) pi.set_floating_size(Wx::Size.new(300, 200)) @mgr.add_pane( create_grid, pi) @mgr.update end def on_create_html pi = Wx::AuiPaneInfo.new pi.set_caption("HTML Control").float pi.set_floating_position(get_start_position) pi.set_floating_size(Wx::Size.new(300, 200)) @mgr.add_pane( create_html_ctrl, pi) @mgr.update end def on_create_notebook pi = Wx::AuiPaneInfo.new pi.set_caption("Notebook").float pi.set_floating_position(get_start_position) pi.set_close_button.set_maximize_button @mgr.add_pane( create_notebook, pi) @mgr.update end def on_create_text pi = Wx::AuiPaneInfo.new pi.set_caption("Text Control").float pi.set_floating_position(get_start_position) @mgr.add_pane( create_text_ctrl, pi) @mgr.update end def on_create_size_report pi = Wx::AuiPaneInfo.new pi.set_caption("Client Size Reporter").float pi.set_floating_position(get_start_position) pi.set_close_button.set_maximize_button @mgr.add_pane( create_size_report, pi) @mgr.update end def on_change_content_pane(event) e_id = event.get_id @mgr.get_pane("grid_content").show(e_id == ID_GridContent) @mgr.get_pane("text_content").show(e_id == ID_TextContent) @mgr.get_pane("tree_content").show(e_id == ID_TreeContent) @mgr.get_pane("sizereport_content").show(e_id == ID_SizeReportContent) @mgr.get_pane("html_content").show(e_id == ID_HTMLContent) @mgr.get_pane("notebook_content").show(e_id == ID_NotebookContent) @mgr.update end def on_exit close(true) end def on_about msg = "Wx::AUI Demo\nAn advanced window management library for wxRuby\nAdapted by Alex Fenton from the wxWidgets AUI Demo\n which is (c) Copyright 2005-2006, Kirix Corporation" dlg = Wx::MessageDialog.new(self, msg, "Wx::AUI", Wx::OK) dlg.show_modal end def create_text_ctrl(text = "") if text.empty? text = "This is a test text box" end Wx::TextCtrl.new( self, Wx::ID_ANY, text, Wx::Point.new(0, 0), Wx::Size.new(150, 90), Wx::NO_BORDER|Wx::TE_MULTILINE) end def create_grid grid = Wx::Grid.new(self, Wx::ID_ANY, Wx::Point.new(0, 0), Wx::Size.new(150, 250), Wx::NO_BORDER|Wx::WANTS_CHARS) grid.create_grid(50, 20) grid end def create_tree_ctrl tree = Wx::TreeCtrl.new( self, Wx::ID_ANY, Wx::Point.new(0, 0), Wx::Size.new(160, 250), Wx::TR_DEFAULT_STYLE|Wx::NO_BORDER) img_list = Wx::ImageList.new(16, 16, true, 2) img_list.add( Wx::ArtProvider::get_bitmap( Wx::ART_FOLDER, Wx::ART_OTHER, Wx::Size.new(16, 16) ) ) img_list.add( Wx::ArtProvider::get_bitmap( Wx::ART_NORMAL_FILE, Wx::ART_OTHER, Wx::Size.new(16, 16) ) ) tree.set_image_list(img_list) root = tree.add_root("Wx::AUI Project", 0) items = [] 1.upto(5) { | i | items << tree.append_item(root, "Item #{i}", 0) } items.each do | id | 1.upto(5) { | i | tree.append_item(id, "Subitem #{i}", 0) } end tree.expand(root) tree end def create_size_report_ctrl(width = 80, height = 80) SizeReportCtrl.new( self, Wx::ID_ANY, Wx::DEFAULT_POSITION, Wx::Size.new(width, height), @mgr ) end def create_html_ctrl(parent = nil) if not parent parent = self end ctrl = Wx::HtmlWindow.new(parent, Wx::ID_ANY, Wx::DEFAULT_POSITION, Wx::Size.new(400, 300) ) ctrl.set_page(DATA.read) ctrl end def create_notebook # create the notebook off-window to avoid flicker client_size = get_client_size ctrl = Wx::AuiNotebook.new( self, Wx::ID_ANY, Wx::Point.new(client_size.x, client_size.y), Wx::Size.new(430, 200), @notebook_style) page_bmp = Wx::ArtProvider::get_bitmap( Wx::ART_NORMAL_FILE, Wx::ART_OTHER, Wx::Size.new(16,16) ) ctrl.add_page( create_html_ctrl(ctrl), "Welcome to Wx::AUI", false, page_bmp) panel = Wx::Panel.new(ctrl, Wx::ID_ANY) flex = Wx::FlexGridSizer.new( 2 ) flex.add_growable_row( 0 ) flex.add_growable_row( 3 ) flex.add_growable_row( 1 ) flex.add( 5, 5 ) flex.add( 5, 5 ) flex.add( Wx::StaticText.new( panel, -1, "Wx::TextCtrl:" ), 0, Wx::ALL|Wx::ALIGN_CENTRE, 5 ) flex.add( Wx::TextCtrl.new( panel, -1, "", Wx::DEFAULT_POSITION, Wx::Size.new(100,-1) ), 1, Wx::ALL|Wx::ALIGN_CENTRE, 5 ) flex.add( Wx::StaticText.new( panel, -1, "Wx::SpinCtrl:" ), 0, Wx::ALL|Wx::ALIGN_CENTRE, 5 ) flex.add( Wx::SpinCtrl.new( panel, -1, "5", Wx::DEFAULT_POSITION, Wx::Size.new(100,-1), Wx::SP_ARROW_KEYS, 5, 50, 5 ), 1, Wx::ALL|Wx::ALIGN_CENTRE, 5 ) flex.add( 5,5 ) flex.add( 5,5 ) panel.set_sizer( flex ) ctrl.add_page( panel, "wxPanel", false, page_bmp ) ctrl.add_page( Wx::TextCtrl.new( ctrl, Wx::ID_ANY, "Some text", Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TE_MULTILINE|Wx::NO_BORDER), "wxTextCtrl 1", false, page_bmp ) ctrl.add_page( Wx::TextCtrl.new( ctrl, Wx::ID_ANY, "Some more text", Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TE_MULTILINE|Wx::NO_BORDER), "wxTextCtrl 2" ) ctrl.add_page( Wx::TextCtrl.new( ctrl, Wx::ID_ANY, "Some more text", Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TE_MULTILINE|Wx::NO_BORDER), "wxTextCtrl 3" ) ctrl.add_page( Wx::TextCtrl.new( ctrl, Wx::ID_ANY, "Some more text", Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TE_MULTILINE|Wx::NO_BORDER), "wxTextCtrl 4" ) ctrl.add_page( Wx::TextCtrl.new( ctrl, Wx::ID_ANY, "Some more text", Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TE_MULTILINE|Wx::NO_BORDER), "wxTextCtrl 5" ) ctrl.add_page( Wx::TextCtrl.new( ctrl, Wx::ID_ANY, "Some more text", Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TE_MULTILINE|Wx::NO_BORDER), "wxTextCtrl 6" ) ctrl.add_page( Wx::TextCtrl.new( ctrl, Wx::ID_ANY, "Some more text", Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TE_MULTILINE|Wx::NO_BORDER), "wxTextCtrl 7 (longer title)" ) ctrl.add_page( Wx::TextCtrl.new( ctrl, Wx::ID_ANY, "Some more text", Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TE_MULTILINE|Wx::NO_BORDER), "wxTextCtrl 8" ) return ctrl end end class AuiDemoApp < Wx::App def on_init frame = AuiFrame.new( nil, Wx::ID_ANY, "Wx::AUI Sample Application", Wx::DEFAULT_POSITION, Wx::Size.new(800, 600) ) set_top_window(frame) frame.show return true end end AuiDemoApp.new.main_loop() __END__
Wx::AUI is an Advanced User Interface library for the wxWidgets toolkit that allows developers to create high-quality, cross-platform user interfaces quickly and easily.
Features
With Wx::AUI, developers can create application frameworks with:
What's new in 0.9.3?
Wx::AUI 0.9.3, which is now bundled with wxWidgets, adds the following features:
What's new in 0.9.2?
The following features/fixes have been added since the last version of Wx::AUI:
What changed in 0.9.1?
The following features/fixes were added in Wx::AUIy 0.9.1:
See README.txt for more information.