klayout/scripts/mkqtdecl_common/mkqtdecl_extract_signals.rb

176 lines
5.8 KiB
Ruby
Raw Normal View History

2017-02-21 20:32:40 +01:00
#
2018-01-01 21:08:06 +01:00
# Copyright (C) 2006-2018 Matthias Koefferlein
2017-02-21 20:32:40 +01:00
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# A helper script to extract the signals from the Qt declarations
# It can be used to write the .events configuration file which will
# declare the signals of objects.
# run with
# klayout -r mkqtdecl_extract_signals.rb -z >mkqtdecl.events
classes = {}
RBA::Class::each_class do |cls|
classes[cls.name] = true
end
RBA::Class::each_class do |cls|
if cls.name =~ /^Q/ && (cls.name =~ /_Native$/ || !classes[cls.name + "_Native"])
b = cls.base
while b && b.name != "QObject_Native"
b = b.base
end
if b
mo = eval("RBA::#{cls.name}.staticMetaObject")
c = cls.name.sub(/_Native/, "")
valid_sig = {}
(0..(mo.methodCount-1)).each do |i|
mm = mo.method(i)
if mm.methodType == RBA::QMetaMethod::Signal
n = mm.methodSignature.sub(/\(.*/, "")
s = mm.parameterTypes.join(", ")
valid_sig[n] ||= []
found = false
valid_sig[n] = valid_sig[n].select do |vs|
ret = true
if s.index(vs) == 0
ret = false
elsif vs.index(s) == 0
found = true
end
ret
end
if !found
valid_sig[n].push(s)
end
end
end
valid_sig.each do |n,ss|
ss.each do |s|
match = "::#{n}\\s*\\("
renamed = nil
aliased = nil
if c == "QTabWidget"
if n == "currentChanged" && s =~ /QWidget/
match += ".*QWidget"
renamed = "currentChanged_qw"
elsif n == "currentChanged" && s =~ /int/
match += ".*int"
end
elsif c == "QSignalMapper"
if n == "mapped" && s =~ /QWidget/
renamed = "mapped_qw"
match += ".*QWidget"
elsif n == "mapped" && s =~ /int/
match += ".*int"
elsif n == "mapped" && s =~ /QString/
renamed = "mapped_qs"
match += ".*QString"
elsif n == "mapped" && s =~ /QObject/
renamed = "mapped_qo"
match += ".*QObject"
end
elsif c == "QComboBox" || c == "QFontComboBox"
if n == "activated" && s =~ /QString/
renamed = "activated_qs"
match += ".*QString"
elsif n == "activated" && s =~ /int/
match += ".*int"
elsif n == "currentIndexChanged" && s =~ /QString/
renamed = "currentIndexChanged_qs"
match += ".*QString"
elsif n == "currentIndexChanged" && s =~ /int/
match += ".*int"
elsif n == "highlighted" && s =~ /QString/
renamed = "highlighted_qs"
match += ".*QString"
elsif n == "highlighted" && s =~ /int/
match += ".*int"
end
elsif c == "QCompleter"
if n == "activated" && s =~ /QString/
renamed = "activated_qs"
match += ".*QString"
elsif n == "activated" && s =~ /QModelIndex/
match += ".*QModelIndex"
elsif n == "highlighted" && s =~ /QString/
renamed = "highlighted_qs"
match += ".*QString"
elsif n == "highlighted" && s =~ /QModelIndex/
match += ".*QModelIndex"
end
elsif c == "QTextBrowser"
if n == "highlighted" && s =~ /QString/
renamed = "highlighted_qs"
match += ".*QString"
elsif n == "highlighted" && s =~ /QUrl/
match += ".*QUrl"
end
elsif c == "QDoubleSpinBox"
if n == "valueChanged" && s =~ /QString/
renamed = "valueChanged_qs"
match += ".*QString"
elsif n == "valueChanged" && s =~ /double/
match += ".*double"
end
elsif c == "QSpinBox"
if n == "valueChanged" && s =~ /QString/
renamed = "valueChanged_qs"
match += ".*QString"
elsif n == "valueChanged" && s =~ /int/
match += ".*int"
end
elsif c == "QButtonGroup"
if n == "buttonClicked" && s =~ /QAbstractButton/
renamed = "buttonClicked_qab"
match += ".*QAbstractButton"
elsif n == "buttonClicked" && s =~ /int/
match += ".*int"
elsif n == "buttonPressed" && s =~ /QAbstractButton/
renamed = "buttonPressed_qab"
match += ".*QAbstractButton"
elsif n == "buttonPressed" && s =~ /int/
match += ".*int"
elsif n == "buttonReleased" && s =~ /QAbstractButton/
renamed = "buttonReleased_qab"
match += ".*QAbstractButton"
elsif n == "buttonReleased" && s =~ /int/
match += ".*int"
end
end
puts "event(\"#{c}\", /#{match}/, \"#{s}\")"
if renamed
puts "rename(\"#{c}\", /#{match}/, \"#{renamed}\")"
end
end
end
end
end
end