old_tests/test.rb

Summary

Maintainability
F
3 days
Test Coverage
#Encoding: UTF-8
require "../ext/rwx"
require "../../tiled_tmx/map"
require "nokogiri"

module TiledTmx
    class Tileset

        def images
            if @images.nil?
                @images = []
                image = WX::Image.new(@source.to_s)
                @margin.step(image.height-1,@tileheight + @spacing) {|iy|
                    @margin.step(image.width-1,@tilewidth + @spacing) {|ix|
                        @images << image[WX::Rect.new(ix,iy,@tilewidth,@tileheight)]
                    }
                }
            end
            return @images
        end
        def draw(id,x,y,z,opacity,rot,x_scale,y_scale,&block)
            block.call.draw_bitmap(images[id].scale(x_scale,y_scale) * opacity,x,y)
        end
    end
end


STDERR.reopen("file.log","w")

class MapDialog < WX::Dialog

    def initialize(parent)
        super(parent,:title => "Map Properies",:style => DEFAULT_STYLE | RESIZE_BORDER)
        
        self.sizer = WX::BoxSizer.new {|box|
            box.orientation = true
            sbs = WX::StaticBox.new(self,:label => "Eigenschaften:").containing_sizer
            sbs.orientation = true
            sbs.add(create_text_sizer("Name:"))
            sbs.add(WX::TextCtrl.new(self),:expand => true)
            sbs.add(create_text_sizer("Anzeigename:"))
            sbs.add(WX::TextCtrl.new(self),:expand => true)
            
            sbs.add(create_text_sizer("Abmessungen:"))
            sbs.add(WX::BoxSizer.new {|siz|
                siz.add(WX::SpinCtrl.new(self))
                siz.add(create_text_sizer("×"))
                siz.add(WX::SpinCtrl.new(self))
            },:expand => true)
            
            box.add(sbs,:expand => true)
            
            sbs = WX::StaticBox.new(self,:label => "SystemSwitches:").containing_sizer
            sbs.orientation = true
            #sizer.orientation = true
            sbs.add(WX::CheckBox.new(self,:label => "Rennverbot ändern:"))
            sbs.add(WX::BoxSizer.new {|siz|
                siz.add(WX::Choice.new(self,:items =>["An","Aus","Eltern-Map"],:select=>0))
            },:expand => true)
            sbs.add(WX::CheckBox.new(self,:label => "Speicherverbot ändern:"))
            sbs.add(WX::BoxSizer.new {|siz|
                siz.add(WX::RadioButton.new(self,:label => "An",:group => true,:disabled=>true))
                siz.add(WX::RadioButton.new(self,:label => "Aus",:disabled=>true))
                siz.add(WX::RadioButton.new(self,:label => "Eltern-Map",:disabled=>true))
            },:expand => true)
            
            sbs.add(WX::BoxSizer.new {|siz|
                siz.add(WX::RadioButton.new(self,:label => "An",:group => true,:disabled=>true))
                siz.add(WX::RadioButton.new(self,:label => "Aus",:disabled=>true))
                siz.add(WX::RadioButton.new(self,:label => "Eltern-Map",:disabled=>true))
            },:expand => true)
            
            box.add(sbs,:expand => true)
            box.add(create_button_sizer(:ok,:cancel,:help,:apply),:expand => true)

        }
        fit
        layout
    end

end

class TilesetGridTable < WX::GridTable

    attr_reader :set

    def initialize(set)
        @set = set
    end
    
    def rows
        return @set.height / (@set.tileheight + @set.spacing)
    end
    def cols
        return @set.width / (@set.tilewidth + @set.spacing)
    end
    
    def [](row,col)
        return @set.images[row * cols + col]
    end
    def typename(x,y)
        return "string"
    end
    def tilesize
        @size ||= WX::Size.new(@set.tilewidth-9,@set.tileheight-6)
        #@size ||= WX::Size.new(@set.tilewidth,@set.tileheight)
        return @size
    end

end

class TilesetGridRenderer < WX::GridCellRenderer
    def draw(grid,att,dc,rect,row,col,selected)
        dc.draw_bitmap(grid.table[row,col],rect.x,rect.y)
    end
    def best_size(grid,att,dc,row,col)
        return grid.table.tilesize
    end
end

class Cat < WX::CategoryProperty 
    def initialize
        self.name = "Font1"
        self.label = "Font2"
    end
end

class A < WX::App
    def on_init
    
    
#    
#        #f = WX::Font.new(10,:script)
#        #p f.faceName
        @frame = WX::Frame.new(nil)
        @frame.title = "hallo"

#        pen1 = WX::Pen.new
#        pen2 = WX::Pen.new
#        pen1.width = 2
#        p pen2.color
#        #p @frame.icon
#        @history = WX::FileHistory.new
#        @history << "b" << "a"
#        #f= @frame.font
#        #p f.weight
#        #c = WX::Control.new
#        #g = WX::Gauge.new(@frame)
#        #g = WX::Gauge.allocate
#        #g.range = 10
#        #g.value = 5
#        #@history.save
#        #g.foregroundColour = WX::Color.new(255,0,0)
#        # g.foregroundColour
#        #g.pulse
#        #g.pulse
        @frame.menuBar = WX::Menu::Bar.new(nil) {|m|
            m.append("Datei") {|menu|
                menu << :new
                menu.appendNormal(:open) {|e|
                
                    p e.id
                    wiz = WX::Wizard.new(@frame)
                    pages = []
                    pages << wiz.addPage(WX::WizardPage) {|page| }
                    #pages << wiz.addPage(MyPage) {|page| p page}
                    pages << wiz.addPage(WX::WizardPage,:id => :hello) {|page|}
                    wiz.chainPages(*pages)
#                    
                    wiz.showPage(pages[0])
                    wiz.show_modal
                    #wiz.runWizard(pages[0])
                }
#                menu.appendNormal("last files") {|o| @history >> o }
#                menu << 5003
                menu.appendNormal(:about) {|e|
                    WX.about_box(
                        :icon => "ruby32x32.png",
                        :developers => "Hanmac",
                        :translators => "Quintus <sutniuq@gmx.net>",
                        :artists => ["Tango project ( http://tango.freedesktop.org )",
                        "Yukihiro Matsumoto ( http://www.rubyidentity.org )"],
                        :copyright => "Copyright © 2010 OpenRubyRMK Team",
                        :web_site => "http://devel.pegasus-alpha.eu/projects/openrubyrmk"
                    )
                }
                menu.appendNormal(:exit) {
                    @frame.close(false)#(true)
                    #WX.exit
                }
            @frame.bind(:menu_selected) {|e| p e.id}
            }
            
        }
#        #i=WX::Image.new("new16x16.png")


        t = @frame.createToolBar

#        #t.addNormal(WX::TimePickerCtrl)
#        #t.addNormal(WX::RadioButton) {|g| g.label_text = "abc" }
        #t.addNormal(WX::ColorPicker){|g|
        #    g.bind(:colorpicker_changed) {|e| p e.color }
        #}
        #t.addNormal(WX::Slider){|g|
        #    g.value = 5
        #    g.max = 10
        #}
        #t.addNormal(WX::Button,:id => :cancel)
        
        #t.addNormal(WX::FontPicker) {|g|
#        }
#        t.addNormal(WX::StaticBitmap) {|g|
#            g.bitmap = "new16x16.png"
#        }

#        t.addNormal(WX::HyperLink) {|g|
#            g.label =  "abc"
#            g.url = "http://google.de"
#        }
#        #time    = Time.now
#        #c=WX::TimePickerCtrl.new(@frame)
#        #c.value = time
#        #p time, c.value
#        
#        #c=WX::RadioButton.new(@frame)
#        #c.label_text = "abc"
##        t.addNormal(WX::TimePickerCtrl.new(t))
#        
        sc = WX::ColorPicker.new(@frame)
        
        sc.each_child {|c| p c}
        
        t.addNormal(:new,nil) {|e|
            MapDialog.new(@frame).show_modal
        }
#            #@t = WX::Timer.new() {|e| p e }
#            #@t.start(2000)
#            #WX::ProgressDialog.new(nil,:title=>"title") { |pd|p 1; pd.update(50,"message") }
#            #@p.update(50,"message")
#            #@p.pulse("pulseing")
#            
#            #WX.busy {
#            #    gets
#            #}
#        }
        #t.addNormal(-1,nil,"new16x16.png"){
#            #p WX.dir_dialog
        #    d=WX::DirDialog.new(@frame)
#            #d.path = ".."
        #    d.show_modal
#            #p d.path
#            
#            #cdlg=WX::ColorDialog.new(@frame)
#            #cdlg.custom_colors = [WX::Color.new(255,0,0)]
#            #cdlg.show_modal
        #}
#        t.addRadio(5003,nil,"new16x16.png")
#        t.addRadio(5003,nil,"new16x16.png")
#        
#        
#        #p t.each_tool.to_a
        t.realize
        
        #p @frame.createStatusBar
#        popup = WX::Menu.new("") {|menu| menu.appendNormal(:new_menu,"new Map") }
        doc = File.open("project.xml"){|f| Nokogiri::XML(f) }

#=begin

        @frame.aui {|aui|
##        
##            tb = WX::ToolBar.new(@frame) 
##            tb.addNormal(:new,nil)
##        
            aui.add(WX::ChoiceBookCtrl.new(@frame,:id=>:tilemap))
            
            WX::TreeCtrl.new(@frame,:id=>:treemap) {|tc|
                tc.root(doc.root[:name]) {|item|
                    add_map_to_tree(item,doc.root)
                }
                tc.bind(:tree_item_activated) {|e|
                    map = e.item.instance_variable_get(:@map)
                    @frame[:paint].add_page(WX::Window,e.item.text) {|pwnd|
                        pwnd.instance_variable_set(:@map,map)
                        pwnd.bind(:paint) {
                            pwnd.draw {|dc|
                                x = 10
                                y = 10
                                map.draw(x,y,0) { dc }
                                
                                pen = WX::Pen.new
                                pen.color = WX::Color.new(255,0,0)
                                dc.pen = pen
                                
                                brush = WX::Brush.new
                                brush.color = WX::Color.new(255,0,0,128)
                                dc.brush = brush
                                
                                point = pwnd.screen_to_client(WX.mouse_position)
                                xi = (point.x - x) / map.tilewidth
                                yi = (point.y - y)/ map.tileheight
                                x += xi * map.tilewidth
                                y += yi * map.tileheight
                                grid = @frame[:tilemap].current_page
                                #p grid.selected_cells, grid.selected_topleft, grid.selected_bottomright
                                if xi >= 0 && xi < map.width && yi >= 0 && yi < map.height && grid.selection?
                                
                                    cells = grid.selected_cells
                                    unless cells.empty?
                                        x_off = (cells.map {|x,y| x}.minmax.inject(:+) / 2.0).ceil
                                        y_off = (cells.map {|x,y| y}.minmax.inject(:+) / 2.0).ceil
                                    
                                        cells.each {|xi,yi|
                                            rect = WX::Rect.new(
                                                x + (xi-x_off)*map.tilewidth,
                                                y + (yi-y_off)*map.tileheight,
                                                map.tilewidth,map.tileheight
                                            )
                                        
                                            dc.draw_rectangle(rect)
                                            dc.draw_bitmap(grid.table[yi,xi] * 0.5,
                                                rect.x,rect.y)

                                        }
                                    end
#                                    tl = grid.selected_topleft
#                                    br = grid.selected_bottomright
#                                    
#                                    tl.size.times {|i|

#                                        rect = WX::Rect.new(
#                                            x + map.tilewidth * (tl[i][0] - tl[0][0]),
#                                            y + map.tileheight * (br[i][1] - br[0][1]),
#                                            map.tilewidth * (br[i][0] - tl[i][0] + 1),
#                                            map.tileheight * (br[i][1] - tl[i][1] + 1)
#                                        )
#                                        dc.draw_rectangle(rect)

#                                        tl[i][0].upto(br[i][0]).with_index {|xi,xii|
#                                            tl[i][1].upto(br[i][1]).with_index {|yi,yii|
#                                                dc.draw_bitmap(
#                                                    grid.table[yi,xi] * 0.5,
#                                                    x + map.tilewidth * (0 + xii),
#                                                    y + map.tileheight * (0 + yii)
#                                                )
#                                            }
#                                        }
#                                        
#                                    }


#                                    
##                                    if !tl.nil? && !br.nil?
##                                        tl[0].upto(br[0]).with_index {|xi,xii|
##                                            tl[1].upto(br[1]).with_index {|yi,yii|
##                                                dc.draw_bitmap(grid.table[yi,xi] * 0.5,
##                                                    x + map.tilewidth * xii,y + map.tileheight * yii)
##                                            }
##                                        }
##                                    end
                                end
                            }
                        }
                        pwnd.bind(:motion) {|e|
                            
                            pwnd.refresh
                        }
                        
                        
#                        pwnd.bind(:left_down) {|e|
#                            layer = @frame[:side][:layerlist].selection.instance_variable_get(:@layer)

#                                x = 10
#                                y = 10
#                                point = pwnd.screen_to_client(WX.mouse_position)
#                                x = (point.x - x) / map.tilewidth
#                                y = (point.y - y)/ map.tileheight
#                                grid = @frame[:tilemap].current_page

#                                if x >= 0 && x < map.width && y >= 0 && y < map.height && grid.selection?
#                                    tl = grid.selected_topleft
#                                    p tl
#                                    tl = tl[0]
#                                    br = grid.selected_bottomright[0]

#                                    br = tl if br.nil?

#                                    if !tl.nil? && !br.nil?
##                                        tl[0].upto(br[0]).with_index {|xi,xii|
##                                            tl[1].upto(br[1]).with_index {|yi,yii|
##                                                dc.draw_bitmap(grid.table[yi,xi] * 0.5,
##                                                    x + map.tilewidth * xii,y + map.tileheight * yii)
##                                            }
##                                        }
#                                        table = grid.table
#                                        id = map.tilesets.key(table.set)
#                                        layer[y * map.width + x] =  id + tl[0] + table.cols * tl[1]
#                                        #p x,y,tl,br
#                                    end
#                                
#                                end
#                        }
                    } if map
                
                }
                
                
##                    tc.bind(:tree_item_menu) {|e|
##                            tc.bind(:menu_selected,:new_menu) {p e.item.instance_variable_get(:@map_data)}
##                        tc.popupmenu(popup)
##                        }
                aui.add(tc)
            }


        WX::AuiNoteBookCtrl.new(@frame,:id => :paint) {|nbc|
        
#            nbc.add_page(WX::Window,"map1",:id=>:ok) {|pwnd|
#                pwnd.bind(:paint) {
#                    pwnd.draw {|dc|
#                        @map1.draw(0,0,0) { dc }
#                    }
#                }
#            }
            nbc.bind(:auinotebook_page_changed) {|e|
                dv = @frame[:side][:layerlist]
                dv.delete_items
                map = nbc.page(e.selection).instance_variable_get(:@map)
                if map
                    map.tilesets.each_value{|s|
                        @frame[:tilemap].add_page(WX::Grid,s.name) {|grid|
                            grid.default_renderer = TilesetGridRenderer.new
                            grid.table = TilesetGridTable.new(s)
                            grid.row_label_size = 0
                            grid.col_label_size = 0
                            
                            grid.editable = false
                            
                            grid.autosize
                            
                            grid.bind(:grid_select_cell) {|e| p :select }
                        }
                    }

                    map.layers.each {|z,l|
                        dv.prepend_item(l.visible,"new16x16.png",l.name).instance_variable_set(:@layer,l)
                    }
                end
            }
            
            aui.add(nbc,:direction=>:center)
        }

#        
        

            WX::Window.new(@frame,:id=>:side) {|wnd|
                wnd.sizer = WX::BoxSizer.new {|siz|
                    siz.orientation = true

                    siz.add(WX::BoxSizer.new {|bar_siz|
                        bar_siz.add(WX::StaticText.new(wnd, :label => "Sichtbarkeit:"),:align=>:center)
                        
                        bar_siz.add(WX::Slider.new(wnd,
                            :min => 0,:max => 256,:value => 128,:id=>:slider) {|slider|
                                slider.bind(:scroll_changed) {|e|
                                    sel = wnd[:layerlist].selection.instance_variable_get(:@layer)
                                    sel.opacity = e.position / 256.0 if sel
                                    @frame[:paint].refresh if @frame[:paint]
                                }
                                slider.bind(:scroll_thumbtrack) {|e|
                                    sel = wnd[:layerlist].selection.instance_variable_get(:@layer)
                                    sel.opacity = e.position / 256.0 if sel
                                    @frame[:paint].refresh if @frame[:paint]
                                }
                                
                            },
                            :expand => true,:proportion=>1)
                    },:expand => true)

                    siz.add(WX::DataViewList.new(wnd,:id=>:layerlist) {|dv|
                        dv.append_toggle_column("toogle")
                        dv.append_icontext_column("icon")
                        dv.append_text_column("text")

#                        @map1.layers.each {|z,l|
#                            dv.prepend_item(l.visible,"new16x16.png",l.name).instance_variable_set(:@layer,l)
#                        }
                        dv.bind(:dataview_selection_changed) {|e|
                            unless e.item.nil? || wnd[:slider].nil?
                                wnd[:slider].value = e.item.instance_variable_get(:@layer).opacity * 256
                            end
                        }
                        dv.bind(:dataview_value_changed) {|e|
                            case e.column
                            when 0
                                e.item.instance_variable_get(:@layer).visible = e.value
                            end
                            @frame[:paint].refresh if @frame[:paint]
                        }
                        },:expand => true,:proportion=>1)
            
                    siz.add(WX::ToolBar.new(wnd) {|tb|
                        tb.addNormal(:new,nil)
                    })
                }
                wnd.layout
                aui.add(wnd)
            }
##            
##            #aui.add(tb)



        #tb = WX::AuiToolBar.new(@frame)
        #tb.addNormal(:new,nil)
#        tb.addNormal(:new,nil)
        #aui.add(tb)
##            #aui['tree'] = @tc
##            #aui['tb'] = tb
        }
#=end
#        pg = WX::PropertyGrid.new(@frame,:extra_style => WX::PropertyGrid::EX_HELP_AS_TOOLTIPS)

#        pg = WX::PropertyGridManager.new(@frame,
#            :style => WX::PropertyGridManager::TOOLBAR,
#            :extra_style => WX::PropertyGridManager::EX_MODE_BUTTONS
#        )

#        fp = WX::CategoryProperty.new
#        fp.name = "Font1"
#        fp.label = "Font2"
        
#        pg.append(Cat)
=begin
        map = TiledTmx::Map.load_xml("../../../unbenannt.tmx")
        grid = WX::Grid.new(@frame)
        grid.table = TilesetGridTable.new(map.tilesets[1])
        
        grid.row_label_size = 0
        grid.col_label_size = 0
        
        grid.default_renderer = TilesetGridRenderer.new

        grid.autosize
=end
        #stc = WX::STC.new(@frame)
        #stc.use_tabs = true
        #stc.text = File.read("test.rb")
        #stc.test_style
        
        #p WX::STC::Version
        #nbc.add_page(WX::Button,"cancel",:id => :cancel)
        #        WX::TreeCtrl.new(@frame)
#        tc.bind(:tree_item_gettooltip) {|e|
#            p e.item
#        }
#        slider = WX::Slider.new(@frame)
#        slider.max = 10
#        slider.value = 5
        

#        @frame.bind(:paint) {
#            @frame.draw {|dc|
#                @map1.draw(0,0,0) { dc }
#            }
#        }

        @frame.show
#        #p @frame.each.to_
    end
    
    def add_map_to_tree(item,map)
        item.instance_variable_set(:@map,TiledTmx::Map.load_xml(map[:file])) if map[:file]
        map.xpath("map").each {|m| add_map_to_tree(item.append(m[:name]),m) }
    end
end

A.new.main_loop