You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdevelop/languages/ruby/app_templates/qtrubyapp/qtrubyapp.rb

254 lines
8.3 KiB

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