/* * Copyright (C) %{YEAR} %{AUTHOR} <%{EMAIL}> */ import java.util.*; import org.kde.qt.*; import org.kde.koala.*; /** * 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} */ public class %{APPNAME}View extends QWidget { QHBoxLayout top_layout; public %{APPNAME}View(QWidget tqparent) { super(tqparent, null); // setup our tqlayout manager to automatically add our widgets top_layout = new QHBoxLayout(this); 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. ArrayList offers = KTrader.self().query("text/html", "'KParts/ReadOnlyPart' in ServiceTypes"); KLibFactory factory = null; // in theory, we only care about the first one.. but let's try all // offers just in case the first can't be loaded for some reason Iterator it = offers.iterator(); while(it.hasNext()) { KService ptr = (KService) it.next(); // 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 = KLibLoader.self().factory( ptr.library() ); if (factory != null) { m_html = (ReadOnlyPart) factory.create(this, ptr.name(), "KParts::ReadOnlyPart"); break; } } // if our factory is invalid, then we never found our component // and we might as well just exit now if (factory == null) { KMessageBox.error(this, "Could not find a suitable HTML component"); return; } connect(m_html, SIGNAL("setWindowCaption(String)"), this, SLOT("slotSetTitle(String)")); connect(m_html, SIGNAL("setStatusBarText(String)"), this, SLOT("slotOnURL(String)")); } public void print(QPainter p, int height, int width) { // do the actual printing, here // p.drawText(etc..) } public String currentURL() { return m_html.url().url(); } public void openURL(String url) { openURL(new KURL(url)); } public void openURL(KURL url) { m_html.openURL(url); } private void slotOnURL(String url) { emit("signalChangeStatusbar", url); } private void slotSetTitle(String title) { emit("signalChangeCaption", title); } private ReadOnlyPart m_html; }