diff options
Diffstat (limited to 'languages/ruby/app_templates/qtrubyapp/qtrubyapp.rb')
-rw-r--r-- | languages/ruby/app_templates/qtrubyapp/qtrubyapp.rb | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/languages/ruby/app_templates/qtrubyapp/qtrubyapp.rb b/languages/ruby/app_templates/qtrubyapp/qtrubyapp.rb new file mode 100644 index 00000000..18ecdc3f --- /dev/null +++ b/languages/ruby/app_templates/qtrubyapp/qtrubyapp.rb @@ -0,0 +1,253 @@ +class %{APPNAMESC} < Qt::MainWindow + + slots 'newDoc()', + 'choose()', + 'load( const QString& )', + 'save()', + 'saveAs()', + 'print()', + 'about()', + 'aboutQt()' + + def initialize() + super( nil, "%{APPNAMESC}", WDestructiveClose ) + @printer = Qt::Printer.new + + fileTools = Qt::ToolBar.new( self, "file operations" ) + fileTools.setLabel( tr("File Operations") ) + + openIcon = Qt::Pixmap.new( "fileopen.xpm" ) + fileOpen = Qt::ToolButton.new( Qt::IconSet.new(openIcon), tr("Open File"), nil, + self, SLOT('choose()'), fileTools, "open file" ) + + saveIcon = Qt::Pixmap.new( "filesave.xpm" ) + fileSave = Qt::ToolButton.new( Qt::IconSet.new(saveIcon), tr("Save File"), nil, + self, SLOT('save()'), fileTools, "save file" ) + + printIcon = Qt::Pixmap.new( "fileprint.xpm" ) + filePrint = Qt::ToolButton.new( Qt::IconSet.new(printIcon), tr("Print File"), nil, + self, SLOT('print()'), fileTools, "print file" ) + + + Qt::WhatsThis.whatsThisButton( fileTools ) + + fileOpenText = tr('<p><img source="fileopen"> ' + + "Click this button to open a <em>new file</em>. <br>" + + "You can also select the <b>Open</b> command " + + "from the <b>File</b> menu.</p>") + + Qt::WhatsThis.add( fileOpen, fileOpenText ) + + Qt::MimeSourceFactory.defaultFactory().setPixmap( "fileopen", openIcon ) + + fileSaveText = tr("<p>Click this button to save the file you " + + "are editing. You will be prompted for a file name.\n" + + "You can also select the <b>Save</b> command " + + "from the <b>File</b> menu.</p>") + + Qt::WhatsThis.add( fileSave, fileSaveText ) + + filePrintText = tr("Click this button to print the file you " + + "are editing.\n You can also select the Print " + + "command from the File menu.") + + Qt::WhatsThis.add( filePrint, filePrintText ) + + + file = Qt::PopupMenu.new( self ) + menuBar().insertItem( tr("&File"), file ) + + + file.insertItem( tr("&New"), self, SLOT('newDoc()'), Qt::KeySequence.new(CTRL+Key_N) ) + + id = file.insertItem( Qt::IconSet.new(openIcon), tr("&Open..."), + self, SLOT('choose()'), Qt::KeySequence.new(CTRL+Key_O) ) + file.setWhatsThis( id, fileOpenText ) + + id = file.insertItem( Qt::IconSet.new(saveIcon), tr("&Save"), + self, SLOT('save()'), Qt::KeySequence.new(CTRL+Key_S) ) + file.setWhatsThis( id, fileSaveText ) + + id = file.insertItem( tr("Save &As..."), self, SLOT('saveAs()') ) + file.setWhatsThis( id, fileSaveText ) + + file.insertSeparator() + + id = file.insertItem( Qt::IconSet.new(printIcon), tr("&Print..."), + self, SLOT('print()'), Qt::KeySequence.new(CTRL+Key_P) ) + file.setWhatsThis( id, filePrintText ) + + file.insertSeparator() + + file.insertItem( tr("&Close"), self, SLOT('close()'), Qt::KeySequence.new(CTRL+Key_W) ) + + file.insertItem( tr("&Quit"), $qApp, SLOT( 'closeAllWindows()' ), Qt::KeySequence.new(CTRL+Key_Q) ) + + menuBar().insertSeparator() + + help = Qt::PopupMenu.new( self ) + menuBar().insertItem( tr("&Help"), help ) + + help.insertItem( tr("&About"), self, SLOT('about()'), Qt::KeySequence.new(Key_F1) ) + help.insertItem( tr("About &Qt"), self, SLOT('aboutQt()') ) + help.insertSeparator() + help.insertItem( tr("What's &This"), self, SLOT('whatsThis()'), Qt::KeySequence.new(SHIFT+Key_F1) ) + + @e = Qt::TextEdit.new( self, "editor" ) + @e.setFocus() + setCentralWidget( @e ) + statusBar().message( tr("Ready"), 2000 ) + + resize( 450, 600 ) + end + + private + + def newDoc() + ed = %{APPNAMESC}.new + ed.setCaption(tr("Qt Example - Application")) + ed.show() + end + + def choose() + fn = Qt::FileDialog.getOpenFileName( nil, nil, + self) + if !fn.nil? + load( fn ) + else + statusBar().message( tr("Loading aborted"), 2000 ) + end + end + + + def load( filename ) + f = Qt::File.new( filename ) + if !f.open( Qt::IO_ReadOnly ) + return + end + + ts = Qt::TextStream.new( f ) + @e.setText( ts.read() ) + @e.setModified( false ) + setCaption( filename ) + statusBar().message( tr("Loaded document %s" % filename), 2000 ) + end + + + def save() + if @filename.nil? + saveAs() + return + end + + text = @e.text() + f = Qt::File.new( @filename ) + if !f.open( Qt::IO_WriteOnly ) + statusBar().message( tr("Could not write to %s" % @filename), + 2000 ) + return + end + + t = Qt::TextStream.new( f ) + t << text + f.close() + + @e.setModified( false ) + + setCaption( @filename ) + + statusBar().message( tr( "File %s saved" % @filename ), 2000 ) + end + + + def saveAs() + fn = Qt::FileDialog.getSaveFileName( nil, nil, + self ) + if !fn.nil? + @filename = fn + save() + else + statusBar().message( tr("Saving aborted"), 2000 ) + end + end + + + def print() + # ###### Rewrite to use Qt::SimpleRichText to print here as well + margin = 10 + pageNo = 1 + + if @printer.setup(self) # @printer dialog + statusBar().message( tr("Printing...") ) + p = Qt::Painter.new + if !p.begin( @printer ) # paint on @printer + return + end + + p.setFont( @e.font() ) + yPos = 0 # y-position for each line + fm = p.fontMetrics() + metrics = Qt::PaintDeviceMetrics.new( @printer ) # need width/height + # of @printer surface + for i in 0...@e.lines() do + if margin + yPos > metrics.height() - margin + msg = "Printing (page " + msg += pageNo.to_s + pageNo += 1 + msg += ")..." + statusBar().message( msg ) + @printer.newPage() # no more room on self page + yPos = 0 # back to top of page + end + p.drawText( margin, margin + yPos, + metrics.width(), fm.lineSpacing(), + ExpandTabs | DontClip, + @e.text( i ) ) + yPos = yPos + fm.lineSpacing() + end + p.end() # send job to @printer + statusBar().message( tr("Printing completed"), 2000 ) + else + statusBar().message( tr("Printing aborted"), 2000 ) + end + end + + protected + + def closeEvent( ce ) + if !@e.modified? + ce.accept() + return + end + + case Qt::MessageBox.information( self, tr("Qt Application Example"), + tr("Do you want to save the changes" + + " to the document?"), + tr("Yes"), tr("No"), tr("Cancel"), + 0, 1 ) + when 0 + save() + ce.accept() + when 1 + ce.accept() + when 2 + ce.ignore() + else # just for sanity + ce.ignore() + end + end + + private + + def about() + Qt::MessageBox.about( self, tr("Qt Application Example"), + tr("This example demonstrates simple use of " + + "Qt::MainWindow,\nQt::MenuBar and Qt::ToolBar.")) + end + + + def aboutQt() + Qt::MessageBox.aboutQt( self, tr("Qt Application Example") ) + end + +end |