fsfsf

Ruby code posted
created at 09 Apr 18:55, updated at 14 Apr 20:44

Edit | Back
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
module Helper
  ICONE = Icon.new('images/sig.ico').freeze

  def classe
    self.class.name
  end

  def view
    "views/#{classe.gsub('SiG', 'Sig').underscore}.xrc"
  end

  def finder
    lambda do |x|
      int_id = Wx::xrcid(x)
      begin
        Wx::Window.find_window_by_id(int_id, self) || int_id
      rescue RuntimeError
        int_id
      end
    end
  end

  def rescue_me(&block)
    begin
      yield
    rescue Exception => e
      p e
      puts e.backtrace.join("\n")
      nil
    end
  end

  def cria_aba(opcoes = {})
    rescue_me do
      page = nil
      # se não receber a aba como opção, tenta obtê-la pelo método "aba"
      opcoes[:aba] = aba unless opcoes[:aba] if method?(:aba)
      tab = opcoes[:aba]

      opcoes[:acao] = opcoes[:acao].to_s
      # ações passadas sem o nome do controlador
      if opcoes[:acao] and ! opcoes[:acao].match(/\./)
        # o controlador é a classe
        opcoes[:acao] = "#{self.class == Class ? self.name : self.class.name}.#{opcoes[:acao]}"
        # se a classe não for um controlador, "tenta" fazer com que seja
        opcoes[:acao] = opcoes[:acao].gsub(/[A-Z]{1}[a-z]+\./, 'Controller.') unless opcoes[:acao].match(/Controller/)
      end

      # se não receber o título como opção, tenta obtê-lo através de uma constante
      opcoes[:titulo] = "#{opcoes[:acao].split('.').first.gsub('Controller', 'Helper')}::#{opcoes[:acao].split('.').last.upcase}".constantize rescue nil unless opcoes[:titulo]
      titulo = opcoes[:titulo]

      if $usuario.pode_acessar?(opcoes[:acao])
        # pega a classe e o método
        c, m = opcoes[:acao].split('#').first.split('.')
        # instancia o método
        m = c.constantize.method(m.to_sym)
        # executa o método
        if opcoes[:objeto]
          page = m.call tab, opcoes[:objeto]
        else
          page = m.call tab
        end

        # adiciona a aba se houver "aba" a ser adicionada
        if page
          tab.add_page(page, titulo, true)
          page.pagina = tab.get_page_index(page)
          page.aba = tab
        end

        # processa o evento associado à ação
        process_event(opcoes[:evento]) if opcoes[:evento] and method?(:process_event)
      else
        mostra_erro 'Você não tem permissão para acessar este módulo!'
      end
      nil
    end
  end

  def handle_tab_enter(evt, options = {})
    rescue_me do
      # Enter 13 / Tab 9
      if evt.get_key_code == 13 or evt.get_key_code == 9
        # se for um botão e receber um "enter", pressiona o botão
        if options[:id].class == Button and evt.get_key_code == 13
          # cria um evento de botão clicado para o botão e manda o frame processá-lo
          process_event(CommandEvent.new(EVT_COMMAND_BUTTON_CLICKED, options[:id].id))
        # se for um campo de texto multi linha não pula com um "enter"
        elsif options[:id].class == TextCtrl and evt.get_key_code == 13 and options[:id].is_multi_line
          evt.skip
        else
          # pula campos
          if evt.shift_down
            options[:prev].select if options[:prev]
          else
            options[:next].select if options[:next]
          end
        end
      else
        # ignora o evento
        evt.skip
      end
    end
  end

  def evt_char_tab_enter(id, options = {})
    options[:id] = id
    id.evt_char { |evt| handle_tab_enter(evt, options) }
  end

  def evt_scrollwin_handle
    # calcula a quantidade de páginas de altura e largura de acordo com a razão entre o tamanho ideal e o disponível
    paginas_de_largura = (get_best_size.get_width.to_f / get_size.get_width).ceil
    paginas_de_altura = (get_best_size.get_height.to_f / get_size.get_height).ceil
3.69 KB in 6 ms with coderay