summaryrefslogtreecommitdiffstats
path: root/languages/ruby/app_templates/qtrubyapp/qtrubyapp.rb
diff options
context:
space:
mode:
Diffstat (limited to 'languages/ruby/app_templates/qtrubyapp/qtrubyapp.rb')
-rw-r--r--languages/ruby/app_templates/qtrubyapp/qtrubyapp.rb253
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