|
|
|
|
|
|
|
=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
|