diff options
Diffstat (limited to 'qtruby/rubylib/examples/qt-examples/fonts/simple-qfont-demo/viewer.rb')
-rw-r--r-- | qtruby/rubylib/examples/qt-examples/fonts/simple-qfont-demo/viewer.rb | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/qtruby/rubylib/examples/qt-examples/fonts/simple-qfont-demo/viewer.rb b/qtruby/rubylib/examples/qt-examples/fonts/simple-qfont-demo/viewer.rb new file mode 100644 index 00000000..d9c16a62 --- /dev/null +++ b/qtruby/rubylib/examples/qt-examples/fonts/simple-qfont-demo/viewer.rb @@ -0,0 +1,140 @@ +class Viewer < Qt::Widget + slots 'setDefault()', 'setSansSerif()', 'setItalics()' + + def initialize + super + + setFontSubstitutions + + codec = Qt::TextCodec::codecForName("utf8") + + # Shouldn't 'pack("U*")' for UTF-8 work here? - Richard + # The 'U' option packs each element into two bytes and doesn't work + # The 'c' option packs them into a single byte and does work + greeting_heb = codec.toUnicode([0327, 0251, 0327, 0234, 0327, 0225, 0327, 0235].pack("C*")) + greeting_ru = codec.toUnicode([0320, 0227, 0320, 0264, 0321, 0200, 0320, 0260, 0320, 0262, 0321, 0201, 0321, 0202, 0320, 0262, 0321, 0203, 0320, 0271, 0321, 0202, 0320, 0265].pack("C*")) + greeting_en = 'Hello' + + @greetings = Qt::TextView.new(self, 'textview') + @greetings.setText( + greeting_en + "\n" + + greeting_ru + "\n" + + greeting_heb) + + @fontInfo = Qt::TextView.new(self, 'fontinfo') + + setDefault + + @defaultButton = Qt::PushButton.new('Default', self, 'pushbutton1') + @defaultButton.setFont(Qt::Font.new('times')) + connect(@defaultButton, SIGNAL('clicked()'), self, SLOT('setDefault()')) + + + @sansSerifButton = Qt::PushButton.new('Sans Serif', self, 'pushbutton2') + @sansSerifButton.setFont(Qt::Font.new('Helvetica', 12)) + connect(@sansSerifButton, SIGNAL('clicked()'), self, SLOT('setSansSerif()')) + + @italicsButton = Qt::PushButton.new('Italics', self, 'pushbutton1') + @italicsButton.setFont(Qt::Font.new('lucida', 12, Qt::Font.Bold, true)) + connect(@italicsButton, SIGNAL('clicked()'), self, SLOT('setItalics()')) + + layout + end + + def setDefault + font = Qt::Font.new('Bavaria') + font.setPointSize(24) + font.setWeight(Qt::Font.Bold) + font.setUnderline(true) + + @greetings.setFont(font) + showFontInfo(font) + end + + def setSansSerif + font = Qt::Font.new('Newyork', 18) + font.setStyleHint(Qt::Font.SansSerif) + + @greetings.setFont(font) + showFontInfo(font) + end + + def setItalics + font = Qt::Font.new('Tokyo') + font.setPointSize(32) + font.setWeight(Qt::Font.Bold) + font.setItalic(true) + + @greetings.setFont(font) + showFontInfo(font) + end + + def setFontSubstitutions + substitutes = Array.new + + substitutes.push('Times') + substitutes.push('Mincho') + substitutes.push('Arabic Newspaper') + substitutes.push('crox') + + Qt::Font.insertSubstitutions('Bavaria', substitutes) + Qt::Font.insertSubstitution('Tokyo', 'Lucida') + end + + def layout + textViewContainer = Qt::HBoxLayout.new + textViewContainer.addWidget(@greetings) + textViewContainer.addWidget(@fontInfo) + + buttonContainer = Qt::HBoxLayout.new + buttonContainer.addWidget(@defaultButton) + buttonContainer.addWidget(@sansSerifButton) + buttonContainer.addWidget(@italicsButton) + + maxButtonHeight = @defaultButton.height + + if (@sansSerifButton.height > maxButtonHeight) + maxButtonHeight = @sansSerifButton.height + end + + if (@italicsButton.height > maxButtonHeight) + maxButtonHeight = @italicsButton.height + end + + @defaultButton.setFixedHeight(maxButtonHeight) + @sansSerifButton.setFixedHeight(maxButtonHeight) + @italicsButton.setFixedHeight(maxButtonHeight) + + container = Qt::VBoxLayout.new(self) + container.addLayout(textViewContainer) + container.addLayout(buttonContainer) + + resize(700, 250) + end + + def showFontInfo (font) + info = Qt::FontInfo.new(font) + messageText = + 'Font requested: "' + + font.family + '" ' + + font.pointSize.to_s + 'pt<BR>' + + 'Font used: "' + + info.family.to_s + '" ' + + info.pointSize.to_s + 'pt<P>' + + substitutions = Qt::Font.substitutes(font.family) + + unless substitutions.size == 0 + messageText = messageText + 'The following substitutions exist for ' + + font.family + ':<UL>' + substitutions.each {|x| + messageText = messageText + '<LI>"' + x + '"' + } + messageText = messageText + '</UL>' + else + messageText = messageText + 'No substitutions exist for ' + font.family + '.' + end + + @fontInfo.setText(messageText) + end +end |