diff options
Diffstat (limited to 'korundum/rubylib/examples/kludgeror.rb')
-rw-r--r-- | korundum/rubylib/examples/kludgeror.rb | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/korundum/rubylib/examples/kludgeror.rb b/korundum/rubylib/examples/kludgeror.rb new file mode 100644 index 00000000..535936b2 --- /dev/null +++ b/korundum/rubylib/examples/kludgeror.rb @@ -0,0 +1,138 @@ +#!/usr/bin/env ruby +# A quick and dirty web browser demonstrating the direct instantiation +# of a KHTML part. Needless to say: this is NOT a programming paragon :) +# -- gg. +# AK - ported to ruby + +require 'Korundum' + +opt = [ [ "+[url]", "An URL to open at startup.", "" ], + [ "z", "A dummy binary option.", "" ], + [ "baz <file>", "A long option with arg.", "" ], + [ "boz <file>", "Same as above with default value", "default.txt" ], + ] + +#Qt::Internal::setDebug Qt::QtDebugChannel::QTDB_ALL +# Qt.debug_level = Qt::DebugLevel::High + +about = KDE::AboutData.new("kludgeror", "Kludgeror", "0.1", "A basic web browser") +KDE::CmdLineArgs::init(ARGV, about) +KDE::CmdLineArgs::addCmdLineOptions opt +args = KDE::CmdLineArgs::parsedArgs + +a = KDE::Application.new # BUG, application shouldn't be needed at the top, lets fix this... + +class PartHolder < Qt::Object + signals "setLocBarText(const QString&)" + slots "reload()", "goToURL(const QString&)", "back()", "openURL(const KURL&)" # BUG - the slots should be normalize wrt spaces by the lib + + attr_accessor :part, :history + + def initialize part, *k + super(*k) + @part = part + @history = [] + end + + def openURL url + @part.openURL url + # BUG - a non existant slot emit says horrible things, nothing interesting for user.. very confusing + # BUG - signal emitting is *very* wrong + # emit setLocBarText(url.url) + @history.unshift url unless url == @history[0] + end + + def reload + @part.openURL @part.url + end + + def goToURL(url) + url = "http://#{url}" unless url =~ /^\w*:/ + openURL KDE::URL.new(url) + end + + def back + return unless @history.length > 1 + @history.shift + openURL @history[0] unless @history.empty? + end +end + +LOC_ED = 322 +ERASE_B = 323 +BACK_B = 324 + +url = (args.count > 1) ? args.url(0) : KDE::URL.new("http://loki:8080/xml/index.xml") + +puts "Dummy z option activated." if args.isSet "z" +puts "Dummy baz option has value: #{args.getOption "baz"}" if args.isSet "baz" +# puts "Dummy boz option has value: #{args.getOption "boz"}" if args.isSet "boz" # B0rked? + +toplevel = KDE::MainWindow.new +doc = KDE::HTMLPart.new toplevel, nil, toplevel, nil, 1 +# doc = KDE::HTMLPart.new toplevel, nil, toplevel, nil, 1 # KDE::HTMLPart::BrowserViewGUI +ph = PartHolder.new doc + +Qt::Object::connect doc.browserExtension, SIGNAL("openURLRequest(const KURL&, const KParts::URLArgs&)"), + ph, SLOT("openURL(const KURL&)") # BUG this slot must be screwing up wrt marshalling? + +ph.openURL url +toplevel.setCentralWidget doc.widget +toplevel.resize 700, 500 + +begin + d, viewMenu, fileMenu, locBar, e = nil + d = doc.domDocument + viewMenu = d.documentElement.firstChild.childNodes.item(2).toElement + e = d.createElement "action" + e.setAttribute "name", "debugRenderTree" + viewMenu.appendChild e + e = d.createElement "action" + e.setAttribute "name", "debugDOMTree" + viewMenu.appendChild e + fileMenu = d.documentElement.firstChild.firstChild.toElement + fileMenu.appendChild d.createElement("separator") + e = d.createElement "action" + e.setAttribute "name", "exit" + fileMenu.appendChild e + locBar = d.createElement "toolbar" + locBar.setAttribute "name", "locationBar" + e = d.createElement "action" + e.setAttribute "name", "reload" + locBar.appendChild e + d.documentElement.appendChild locBar +end + +a1 = KDE::Action.new( "Reload", "reload", KDE::Shortcut.new(Qt::Key_F5), ph, SLOT("reload()"), doc.actionCollection, "reload" ) +a2 = KDE::Action.new( "Exit", "exit", KDE::Shortcut.new(0), a, SLOT("quit()"), doc.actionCollection, "exit" ) + +toplevel.guiFactory.addClient doc + +locBar = toplevel.toolBar("locationBar"); +locBar.insertButton "back", BACK_B, SIGNAL("clicked()"), + ph, SLOT("back()"), true, "Go back" +locBar.insertLined url.url, LOC_ED, SIGNAL("returnPressed(const QString&)"), ph, SLOT("goToURL(const QString&)"), true, "Location" +locBar.insertButton "locationbar_erase", ERASE_B, SIGNAL("clicked()"), + locBar.getLined(LOC_ED), SLOT("clear()"), true, "Erase the location bar's content", 2 +locBar.setItemAutoSized LOC_ED, true +locBar.getLined(LOC_ED).createPopupMenu +comp = locBar.getLined(LOC_ED).completionObject +comp.setCompletionMode KDE::GlobalSettings::CompletionPopupAuto + +Qt::Object::connect(locBar.getLined(LOC_ED), SIGNAL("returnPressed(const QString&)"), + comp, SLOT("addItem(const QString&)")) +Qt::Object::connect(ph, SIGNAL("setLocBarText(const QString&)"), # BUG - once again... + locBar.getLined(LOC_ED), SLOT("setText(const QString&)")) + +doc.setJScriptEnabled true +doc.setJavaEnabled true +doc.setPluginsEnabled true +doc.setURLCursor Qt::Cursor.new(Qt::PointingHandCursor) + +a.setTopWidget doc.widget + +Qt::Object::connect doc, SIGNAL("setWindowCaption(const QString&)"), + doc.widget.topLevelWidget, SLOT("setCaption(const QString&)") +toplevel.show + +a.exec |