You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdevelop/languages/ruby/app_templates/kapp/appview.rb

104 lines
3.3 KiB

=begin
This is the main view class for %{APPNAME}. Most of the non-menu,
non-toolbar, and non-statusbar (e.g., non frame) GUI code should go
here.
This %{APPNAMELC} uses an HTML component as an example.
@short Main view
@author %{AUTHOR} <%{EMAIL}>
@version %{VERSION}
=end
class %{APPNAMESC}View < Qt::Widget
#
# Use this signal to change the content of the statusbar
#
Q_SIGNALS 'signalChangeStatusbar(const QString&)'
#
# Use this signal to change the content of the caption
#
Q_SIGNALS 'signalChangeCaption(const QString&)'
Q_SLOTS 'slotOnURL(const QString&)',
'slotSetTitle(const QString&)'
def initialize(parent)
super(parent)
# keep a reference to the DCOP Interface so it doesn't get gc'd
@dcop = %{APPNAMESC}Iface.new(self)
# setup our layout manager to automatically add our widgets
top_layout = Qt::HBoxLayout.new(self)
top_layout.setAutoAdd(true)
# we want to look for all components that satisfy our needs. the
# trader will actually search through *all* registered KDE
# applications and components -- not just KParts. So we have to
# specify two things: a service type and a constraint
#
# the service type is like a mime type. we say that we want all
# applications and components that can handle HTML -- 'text/html'
#
# however, by itself, this will return such things as Netscape..
# not what we wanted. so we constrain it by saying that the
# string 'KParts/ReadOnlyPart' must be found in the ServiceTypes
# field. with this, only components of the type we want will be
# returned.
offers = KDE::Trader.self().query("text/html", "'KParts/ReadOnlyPart' in ServiceTypes")
factory = nil
# in theory, we only care about the first one.. but let's try all
# offers just in when the first can't be loaded for some reason
offers.each do |ptr|
# we now know that our offer can handle HTML and is a part.
# since it is a part, it must also have a library... let's try to
# load that now
factory = KDE::LibLoader.self().factory( ptr.library() )
if ! factory.nil?
@html = factory.create(self, ptr.name(), "KParts::ReadOnlyPart")
break
end
end
# if our factory is invalid, then we never found our component
# and we might as well just exit now
if factory.nil?
KDE::MessageBox.error(self, i18n("Could not find a suitable HTML component"))
return
end
connect(@html, SIGNAL('setWindowCaption(const QString&)'),
self, SLOT('slotSetTitle(const QString&)'))
connect(@html, SIGNAL('setStatusBarText(const QString&)'),
self, SLOT('slotOnURL(const QString&)'))
end
def print(p, height, width)
# do the actual printing, here
# p.drawText(etc..)
end
def currentURL()
return @html.url().url()
end
def openURL(url)
@html.openURL(KDE::URL.new(url))
end
def slotOnURL(url)
emit signalChangeStatusbar(url)
end
def slotSetTitle(title)
emit signalChangeCaption(title)
end
end