=begin This class serves as the main window for %{APPNAME}. It handles the menus, toolbars, and status bars. @short Main window class @author %{AUTHOR} <%{EMAIL}> @version %{VERSION} =end class %{APPNAMESC} < KDE::MainWindow Q_SLOTS 'fileNew()', 'fileOpen()', 'fileSave()', 'fileSaveAs()', 'filePrint()', 'optionsPreferences()', 'changeStatusbar(const QString&)', 'changeCaption(const QString&)' def initialize() super( nil, "%{APPNAMESC}" ) @view = %{APPNAMESC}View.new(self) @printer = nil # accept dnd setAcceptDrops(true) # tell the KDE::MainWindow that this is indeed the main widget setCentralWidget(@view) # then, setup our actions setupActions() # and a status bar statusBar().show() # Apply the create the main window and ask the mainwindow to # automatically save settings if changed: window size, toolbar # position, icon size, etc. Also to add actions for the statusbar # toolbar, and keybindings if necessary. setupGUI(); # allow the view to change the statusbar and caption connect(@view, SIGNAL('signalChangeStatusbar(const QString&)'), self, SLOT('changeStatusbar(const QString&)')) connect(@view, SIGNAL('signalChangeCaption(const QString&)'), self, SLOT('changeCaption(const QString&)')) end def load(url) target = "" # the below code is what you should normally do. in this # example when, we want the url to our own. you probably # want to use this code instead for your app if false # download the contents if KIO::NetAccess.download(url, target, self) # set our caption setCaption(url.url) # load in the file (target is always local) @view.openURL(KDE::URL.new(target)) # and remove the temp file KIO::NetAccess.removeTempFile(target) end end setCaption(url.prettyURL()) @view.openURL(url) end def setupActions() KDE::StdAction.openNew(self, SLOT('fileNew()'), actionCollection()) KDE::StdAction.open(self, SLOT('fileOpen()'), actionCollection()) KDE::StdAction.save(self, SLOT('fileSave()'), actionCollection()) KDE::StdAction.saveAs(self, SLOT('fileSaveAs()'), actionCollection()) KDE::StdAction.print(self, SLOT('filePrint()'), actionCollection()) KDE::StdAction.quit($kapp, SLOT('quit()'), actionCollection()) KDE::StdAction.preferences(self, SLOT('optionsPreferences()'), actionCollection()) # this doesn't do anything useful. it's just here to illustrate # how to insert a custom menu and menu item custom = KDE::Action.new(i18n("Cus&tom Menuitem"), KDE::Shortcut.new(), self, SLOT('optionsPreferences()'), actionCollection(), "custom_action") end def saveProperties(config) # the 'config' object points to the session managed # config file. anything you write here will be available # later when this app is restored if !@view.currentURL().empty? config.writeEntry("lastURL", @view.currentURL()) end end def readProperties(config) # the 'config' object points to the session managed # config file. This function is automatically called whenever # the app is being restored. read in here whatever you wrote # in 'saveProperties' url = config.readPathEntry("lastURL") if !url.empty? @view.openURL(KDE::URL.new(url)) end end def dragEnterEvent(event) # accept uri drops only event.accept(KDE::URLDrag.canDecode(event)) end def dropEvent(event) # This is a very simplistic implementation of a drop event. we # will only accept a dropped URL. the Qt dnd code can do *much* # much more, so please read the docs there urls = [] # see if we can decode a URI.. if not, just ignore it if KDE::URLDrag.decode(event, urls) && !urls.empty? # okay, we have a URI.. process it url = urls.shift # load in the file load(url) end end def fileNew() # This slot is called whenever the File.New menu is selected, # the New shortcut is pressed (usually CTRL+N) or the New toolbar # button is clicked # create a new window %{APPNAMESC}.new.show() end def fileOpen() # This slot is called whenever the File.Open menu is selected, # the Open shortcut is pressed (usually CTRL+O) or the Open toolbar # button is clicked # This brings up the generic open dialog url = KDE::URLRequesterDlg.getURL(nil, self, i18n("Open Location") ) # standard filedialog url = KDE::FileDialog.getOpenURL(nil, nil, self, i18n("Open Location")) if !url.empty? @view.openURL(url) end end def fileSave() # This slot is called whenever the File.Save menu is selected, # the Save shortcut is pressed (usually CTRL+S) or the Save toolbar # button is clicked # save the current file end def fileSaveAs() # This slot is called whenever the File.Save As menu is selected, file_url = KDE::FileDialog.getSaveURL() if !file_url.empty? && file_url.valid? # save your info, here end end def filePrint() # This slot is called whenever the File.Print menu is selected, # the Print shortcut is pressed (usually CTRL+P) or the Print toolbar # button is clicked if @printer.nil? then @printer = KDE::Printer.new end if @printer.setup(self) # setup the printer. with Qt, you always "print" to a # Qt::Painter.. whether the output medium is a pixmap, a screen, # or paper p = Qt::Painter.new p.begin(@printer) # we let our view do the actual printing metrics = Qt::PaintDeviceMetrics.new(@printer) @view.print(p, metrics.height(), metrics.width()) # and send the result to the printer p.end() end end def optionsPreferences() # popup some sort of preference dialog, here dlg = %{APPNAMESC}Preferences.new if dlg.exec() # redo your settings end end def changeStatusbar(text) # display the text on the statusbar statusBar().message(text) end def changeCaption(text) # display the text on the caption setCaption(text) end end