diff options
Diffstat (limited to 'languages/ruby/app_templates/qtruby4app/qtruby4app.rb')
-rw-r--r-- | languages/ruby/app_templates/qtruby4app/qtruby4app.rb | 263 |
1 files changed, 263 insertions, 0 deletions
diff --git a/languages/ruby/app_templates/qtruby4app/qtruby4app.rb b/languages/ruby/app_templates/qtruby4app/qtruby4app.rb new file mode 100644 index 00000000..58dfa10a --- /dev/null +++ b/languages/ruby/app_templates/qtruby4app/qtruby4app.rb @@ -0,0 +1,263 @@ + +class %{APPNAME} < Qt::MainWindow + + slots :newFile, + :open, + :save, + :saveAs, + :about, + :documentWasModified + + def initialize + super + @textEdit = Qt::TextEdit.new + setCentralWidget(@textEdit) + + createActions() + createMenus() + createToolBars() + createStatusBar() + + readSettings() + + connect(@textEdit.document, SIGNAL(:contentsChanged), + self, SLOT(:documentWasModified)) + + setCurrentFile("") + end + + def closeEvent(event) + if maybeSave + writeSettings + event.accept + else + event.ignore + end + end + + def newFile() + if maybeSave + @textEdit.clear + setCurrentFile("") + end + end + + def open() + if maybeSave + fileName = Qt::FileDialog.getOpenFileName(self) + if !fileName.nil? + loadFile(fileName) + end + end + end + + def save() + if @curFile.nil? + return saveAs() + else + return saveFile(@curFile); + end + end + + def saveAs() + fileName = Qt::FileDialog.getSaveFileName(self) + if fileName.nil? + return false + end + + return saveFile(fileName) + end + + def about() + Qt::MessageBox.about(self, tr("About Application"), + tr("The <b>Application</b> example demonstrates how to " \ + "write modern GUI applications using Qt, with a menu bar, " \ + "toolbars, and a status bar.")) + end + + def documentWasModified() + setWindowModified(true) + end + + def createActions() + @newAct = Qt::Action.new(Qt::Icon.new(":/filenew.xpm"), tr("&New"), self) + @newAct.shortcut = tr("Ctrl+N") + @newAct.statusTip = tr("Create a new file") + connect(@newAct, SIGNAL(:triggered), self, SLOT(:newFile)) + + @openAct = Qt::Action.new(Qt::Icon.new(":/fileopen.xpm"), tr("&Open..."), self) + @openAct.shortcut = tr("Ctrl+O") + @openAct.statusTip = tr("Open an existing file") + connect(@openAct, SIGNAL(:triggered), self, SLOT(:open)) + + @saveAct = Qt::Action.new(Qt::Icon.new(":/filesave.xpm"), tr("&Save"), self) + @saveAct.shortcut = tr("Ctrl+S") + @saveAct.statusTip = tr("Save the document to disk") + connect(@saveAct, SIGNAL(:triggered), self, SLOT(:save)) + + @saveAsAct = Qt::Action.new(tr("Save &As..."), self) + @saveAsAct.statusTip = tr("Save the document under a new name") + connect(@saveAsAct, SIGNAL(:triggered), self, SLOT(:saveAs)) + + @exitAct = Qt::Action.new(tr("E&xit"), self) + @exitAct.shortcut = tr("Ctrl+Q") + @exitAct.statusTip = tr("Exit the application") + connect(@exitAct, SIGNAL(:triggered), self, SLOT(:close)) + + @cutAct = Qt::Action.new(Qt::Icon.new(":/editcut.xpm"), tr("Cu&t"), self) + @cutAct.shortcut = tr("Ctrl+X") + @cutAct.statusTip = tr("Cut the current selection's contents to the " \ + "clipboard") + connect(@cutAct, SIGNAL(:triggered), @textEdit, SLOT(:cut)) + + @copyAct = Qt::Action.new(Qt::Icon.new(":/editcopy.xpm"), tr("&Copy"), self) + @copyAct.shortcut = tr("Ctrl+C") + @copyAct.statusTip = tr("Copy the current selection's contents to the " \ + "clipboard") + connect(@copyAct, SIGNAL(:triggered), @textEdit, SLOT(:copy)) + + @pasteAct = Qt::Action.new(Qt::Icon.new(":/editpaste.xpm"), tr("&Paste"), self) + @pasteAct.shortcut = tr("Ctrl+V") + @pasteAct.statusTip = tr("Paste the clipboard's contents into the current " \ + "selection") + connect(@pasteAct, SIGNAL(:triggered), @textEdit, SLOT(:paste)) + + @aboutAct = Qt::Action.new(tr("&About"), self) + @aboutAct.statusTip = tr("Show the application's About box") + connect(@aboutAct, SIGNAL(:triggered), self, SLOT(:about)) + + @aboutQtAct = Qt::Action.new(tr("About &Qt"), self) + @aboutQtAct.statusTip = tr("Show the Qt library's About box") + connect(@aboutQtAct, SIGNAL(:triggered), $qApp, SLOT(:aboutQt)) + + @cutAct.setEnabled(false) + @copyAct.setEnabled(false) + connect(@textEdit, SIGNAL('copyAvailable(bool)'), + @cutAct, SLOT('setEnabled(bool)')) + connect(@textEdit, SIGNAL('copyAvailable(bool)'), + @copyAct, SLOT('setEnabled(bool)')) + end + + def createMenus() + @fileMenu = menuBar().addMenu(tr("&File")) + @fileMenu.addAction(@newAct) + @fileMenu.addAction(@openAct) + @fileMenu.addAction(@saveAct) + @fileMenu.addAction(@saveAsAct) + @fileMenu.addSeparator() + @fileMenu.addAction(@exitAct) + + @editMenu = menuBar.addMenu(tr("&Edit")) + @editMenu.addAction(@cutAct) + @editMenu.addAction(@copyAct) + @editMenu.addAction(@pasteAct) + + menuBar.addSeparator() + + @helpMenu = menuBar().addMenu(tr("&Help")) + @helpMenu.addAction(@aboutAct) + @helpMenu.addAction(@aboutQtAct) + end + + def createToolBars() + @fileToolBar = addToolBar(tr("File")) + @fileToolBar.addAction(@newAct) + @fileToolBar.addAction(@openAct) + @fileToolBar.addAction(@saveAct) + + @editToolBar = addToolBar(tr("Edit")) + @editToolBar.addAction(@cutAct) + @editToolBar.addAction(@copyAct) + @editToolBar.addAction(@pasteAct) + end + + def createStatusBar() + statusBar.showMessage(tr("Ready")) + end + + def readSettings() + settings = Qt::Settings.new("Trolltech", "Application Example") + pos = settings.value("pos", Qt::Variant.new(Qt::Point.new(200, 200))).toPoint() + size = settings.value("size", Qt::Variant.new(Qt::Size.new(400, 400))).toSize() + resize(size) + move(pos) + end + + def writeSettings() + settings = Qt::Settings.new("Trolltech", "Application Example") + settings.setValue("pos", Qt::Variant.new(pos())) + settings.setValue("size", Qt::Variant.new(size())) + end + + def maybeSave() + if @textEdit.document.modified? + ret = Qt::MessageBox.warning(self, tr("Application"), + tr("The document has been modified.\n" \ + "Do you want to save your changes?"), + Qt::MessageBox::Yes | Qt::MessageBox::Default, + Qt::MessageBox::No, + Qt::MessageBox::Cancel | Qt::MessageBox::Escape) + if ret == Qt::MessageBox::Yes + return save() + elsif ret == Qt::MessageBox::Cancel + return false + end + end + return true + end + + def loadFile(fileName) + file = Qt::File.new(fileName) + if !file.open(Qt::File::ReadOnly | Qt::File::Text) + Qt::MessageBox.warning( self, tr("Application"), + tr("Cannot read file %s\n%s." % [fileName, file.errorString]) ) + return + end + + inf = Qt::TextStream.new(file) + Qt::Application.overrideCursor = Qt::Cursor.new(Qt::WaitCursor) + @textEdit.setPlainText(inf.readAll) + Qt::Application.restoreOverrideCursor() + + setCurrentFile(fileName) + statusBar.showMessage(tr("File loaded"), 2000) + end + + def saveFile(fileName) + file = Qt::File.new(fileName) + if !file.open(Qt::File::WriteOnly | Qt::File::Text) + Qt::MessageBox.warning(self, tr("Application"), + tr("Cannot write file %s\n%s." % [fileName, file.errorString]) ) + return false + end + + outf = Qt::TextStream.new(file) + Qt::Application.overrideCursor = Qt::Cursor.new(Qt::WaitCursor) + outf << @textEdit.toPlainText() + Qt::Application.restoreOverrideCursor() + outf.flush + + setCurrentFile(fileName) + statusBar().showMessage(tr("File saved"), 2000) + return true + end + + def setCurrentFile(fileName) + @curFile = fileName; + @textEdit.document().modified = false + setWindowModified(false) + + shownName = "" + if @curFile.nil? + shownName = "untitled.txt" + else + shownName = strippedName(@curFile) + end + + setWindowTitle(tr("%s[*] - %s" % [shownName, tr("Application")])) + end + + def strippedName(fullFileName) + return Qt::FileInfo.new(fullFileName).fileName() + end +end
\ No newline at end of file |