= Gtk Static Widgets =
Static widgets provide information to the user, either about the state of the program or to help understand the display.
== Labels ==
A 'label' simply displays some text. The most straightforward construction is:
{{{
#!cobra
label1 = Label("label")
}}}
Labels can display larger blocks of text. Set 'lineWrap' to true if the text should be wrapped and displayed on multiple lines. Markup is supported to change the style of the text (see [http://developer.gnome.org/pango/stable/PangoMarkupFormat.html Pango markup]). If your label text contains markup you need to set the 'useMarkup' attribute of the label to true.
The following image and program shows three different labels.
[[Image(gtk-labels.png)]]
{{{
#!cobra
# @args -pkg:gtk-sharp-2.0 # remove initial '#'
use Gtk
class ExampleWindow inherits Window
cue init
base.init("Example of Labels")
listen .deleteEvent, do(obj, e as DeleteEventArgs)
Application.quit
.createWidgets
.setDefaultSize(300, 100)
def createWidgets
label1 = Label("label")
label2 = Label("with _mnemonic")
label3 = Label("Right now, if you want software contracts in your language,
how can you get them? The answer is to use Eiffel or D. What if you want static and
dynamic binding? Use Objective-C or Boo. What if you want expressiveness and quick coding?
Use Python, Ruby or Smalltalk. What if you want runtime performance? Use C#, Java, C++,
etc. What if you want first class language support for unit tests? Use D.")
label3.lineWrap = true
label3.useMarkup = true
box = HBox(false, 20)
box.borderWidth = 20
box.packStart(label1, true, true, 0)
box.packStart(label2, true, true, 0)
box.packStart(label3, true, true, 0)
.add(box)
class RunProgram
def main
Application.init
window = ExampleWindow()
window.showAll
Application.run
}}}
== Separators ==
Separators are widgets which display as lines, and are used to divide up parts of the interface. Separators are either ''vertical'' or ''horizontal''.
* HSeparator() : creates a horizontal line - use to divide up widgets arranged vertically
* VSeparator() : creates a vertical line - use to divide up widgets arranged horizontally
== Frame ==
A 'frame' is a container class which holds one child widget, and displays that child with a surrounding border and title. That child can be another container, so frames can contain many other widgets.
A frame is constructed with the text of the title to display. The child widget is then added before packing the frame to display:
{{{
#!cobra
frame1 = Frame("Widgets label")
frame1.add(box)
}}}
There are two display elements of the frame which can be changed.
1. The '''position''' of the label can be changed with respect to the top line using two attributes:
* frame.labelXAlign: 0.0 is left, 1.0 is right.
* frame.labelYAlign: 0.0 is below the line, 0.5 on the line, and 1.0 above the line.
2. The '''style''' of the line can be changed, using the 'shadowType' attribute, which has the following values:
* !ShadowType.None
* !ShadowType.In: bevelled inwards
* !ShadowType.Out: bevelled outwards
* !ShadowType.!EtchedIn: (the default)
* !ShadowType.!EtchedOut
The following image and program illustrates the use of frames to label some radiobuttons. The frame shown on the left uses the default alignment and style.
[[Image(gtk-frames.png)]]
{{{
#!cobra
# @args -pkg:gtk-sharp-2.0 # remove initial '#'
use Gtk
class ExampleWindow inherits Window
cue init
base.init("Example of Frames")
listen .deleteEvent, do(obj, e as DeleteEventArgs)
Application.quit
.createWidgets
.setDefaultSize(300, 100)
def createRadios as VBox
radio1 = RadioButton("Cobra")
radio2 = RadioButton(radio1, "Java")
radio3 = RadioButton(radio2, "Python")
box = VBox(false, 10)
box.packStart(radio1, false, false, 0)
box.packStart(radio2, false, false, 0)
box.packStart(radio3, false, false, 0)
return box
def createWidgets
frame1 = Frame("Select Language")
frame1.add(.createRadios)
frame2 = Frame("Select Language")
frame2.labelXalign = 0.5 to float32
frame2.labelYalign = 0 to float32
frame2.shadowType = ShadowType.In
frame2.add(.createRadios)
box = HBox(true, 20)
box.borderWidth = 20
box.packStart(frame1, true, true, 0)
box.packStart(frame2, true, true, 0)
.add(box)
class RunProgram
def main
Application.init
window = ExampleWindow()
window.showAll
Application.run
}}}