diff options
Diffstat (limited to 'python/pykde/examples/pyKHTMLPart.py')
-rw-r--r-- | python/pykde/examples/pyKHTMLPart.py | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/python/pykde/examples/pyKHTMLPart.py b/python/pykde/examples/pyKHTMLPart.py new file mode 100644 index 00000000..7629c115 --- /dev/null +++ b/python/pykde/examples/pyKHTMLPart.py @@ -0,0 +1,214 @@ +# +# pyParts.py (C) 2002 Jim Bublitz <jbublitz@nwinternet.com> +# + +""" + +This is an extemely simple and crude example of using +a KHTMLPart - I put it together mostly to make sure +the openURL method worked correctly after some modifications +done in KParts::ReadOnlyPart. It took exactly four lines +added to a basic PyKDE app framework to display a URL +via the 'net: + + self.w = KHTMLPart (self, "HTMLPart", self); + self.w.openURL (KURL ("http://www.kde.org")); + self.w.view ().setGeometry (30, 55, 500, 400); + self.w.show (); + +(Actually 5 lines if you count the 'import' line) + +You can play around with the commented out lines or add +additional code to make this do something useful. The +.rc for khtnmlpart (sorry, I never looked it up), doesn't +seem to provide much help. Also, to follow links, you +probably need to connect some signals to slots. I +haven't tried it, but this should work with a plain +KMainWindow or other widget too. + +The KDE website also incorporates gifs, jpegs, and +I believe CSS too. Playing around with some other +sites, it appears the font defaults could use some +improvement. + +NOTE!!! For this to work, you (obviously) need to have +a route to the internet established or specify a local +URL - PyKDE/KDE will take care of everything else. + +Perceptive users will notice the KHTMLPart code is +lifted from the KDE classref. + +""" + +# If you import more classes, don't forget to add them here (some of these +# are extras/not used) + +from kdecore import KCmdLineArgs, KURL, KApplication, i18n, KAboutData, BarIcon, KLibLoader + +from kdeui import KMainWindow, KMessageBox, KAction, KStdAction, KKeyDialog, KEditToolbar + +from qt import QString, QStringList + +from kio import KTrader + +from khtml import KHTMLPart, KHTMLView + +# Importing the KParts namespace gets us all of the KParts:: classes +from kparts import KParts, createReadOnlyPart, createReadWritePart + +import sys, os + +FALSE = 0 +TRUE = not FALSE + +TOOLBAR_EXIT = 0 +TOOLBAR_OPEN = 1 + +# Note that we use KParts.MainWindow, not KMainWindow as the superclass +# (KParts.MainWindow subclasses KMainWindow). Also, be sure the 'apply' +# clause references KParts.MainWindow - it's a hard bug to track down +# if it doesn't. + +class pyPartsMW (KParts.MainWindow): + def __init__ (self, *args): + apply (KParts.MainWindow.__init__, (self,) + args) + + # Create the actions for our menu/toolbar to use + # Keep in mind that the part loaded will provide its + # own menu/toolbar entries + + # check out KParts.MainWindow's ancestry to see where + # some of this and later stuff (like self.actionCollection () ) + # comes from + + quitAction = KStdAction.quit (self.close, self.actionCollection ()) + + self.m_toolbarAction = KStdAction.showToolbar(self.optionsShowToolbar, self.actionCollection()); + self.m_statusbarAction = KStdAction.showStatusbar(self.optionsShowStatusbar, self.actionCollection()); + + KStdAction.keyBindings(self.optionsConfigureKeys, self.actionCollection()); + KStdAction.configureToolbars(self.optionsConfigureToolbars, self.actionCollection()); + + self.path = os.getcwd () + '/' + self.setGeometry (0, 0, 600, 500) + + # point to our XML file + self.setXMLFile (self.path + "pyParts.rc", FALSE) + + # The next few lines are all that's necessary to + # create a web browser (of course you have to edit + # this file to change url's) + + self.w = KHTMLPart (self, "HTMLPart", self); + self.w.openURL (KURL ("http://www.kde.org")); + + self.w.view ().setGeometry (30, 55, 500, 400); + + +# self.v = KHTMLView (self.w, self) + +# self.setCentralWidget (self.v) + +# self.createGUI (self.w) + + self.w.show (); + + + + + # slots for our actions + def optionsShowToolbar (self): + if self.m_toolbarAction.isChecked(): + self.toolBar().show() + else: + self.toolBar().hide() + + def optionsShowStatusbar (self): + if self.m_statusbarAction.isChecked (): + self.statusBar().show() + else: + self.statusBar().hide() + + + def optionsConfigureKeys (self): + KKeyDialog.configureActionKeys (self.actionCollection(), self.xmlFile ()) + + + def optionsConfigureToolbars (self): + dlg = KEditToolbar (self.actionCollection(), self.xmlFile ()) + if dlg.exec_loop (): + self.createGUI(self); + + + # some boilerplate left over from pyKLess/KLess + def queryClose(self): + res = KMessageBox.warningYesNoCancel(self,\ + i18n("Save changes to Document?<br>(Does not make sense, we know, but it is just a programming example :-)")) + if res == KMessageBox.Yes: + #// save document here. If saving fails, return FALSE + return TRUE + + elif res == KMessageBox.No: + return TRUE + + else: #// cancel + return FALSE + + def queryExit(self): + #// this slot is invoked in addition when the *last* window is going + #// to be closed. We could do some final cleanup here. + return TRUE #// accept + + # I'm not sure the session mgmt stuff here works + + # Session management: save data + def saveProperties(self, config): + # This is provided just as an example. + # It is generally not so good to save the raw contents of an application + # in its configuration file (as this example does). + # It is preferable to save the contents in a file on the application's + # data zone and save an URL to it in the configuration resource. + config.writeEntry("text", self.edit.text()) + + + # Session management: read data again + def readProperties(self, config): + # See above + self.edit.setText(config.readEntry("text")) + + + +#------------- main ---------------------------- + +# A Human readable description of your program +description = "KHTMLPart - simple example" +# The version +version = "0.1" + +# stuff for the "About" menu +aboutData = KAboutData ("pyKHTMLPart", "pyHTMLPart",\ + version, description, KAboutData.License_GPL,\ + "(c) 2002, Jim Bublitz") + +aboutData.addAuthor ("Jim Bublitz", "Example for PyKDE", "jbublitz@nwinternet.com") + +# This MUST go here (before KApplication () is called) +KCmdLineArgs.init (sys.argv, aboutData) + +app = KApplication () + +if (app.isRestored()): + RESTORE(KLess) +else: + # no session management: just create one window + # this is our KParts::MainWindow derived class + parts = pyPartsMW (None, "pyParts") + if len(sys.argv) > 1: + # read kcmdlineargs.h for the full unabridged instructions + # on using KCmdLineArgs, it's pretty confusing at first, but it works + # This is pretty useless in this program - you might want to + # expand this in your app (to load a file, etc) + args = KCmdLineArgs.parsedArgs() + +parts.show() +app.exec_loop() |