Using a TextView as a sort of "Hbox with wrapping"



My application has a status bar which can have an arbitrary number of
items added to it. Currently, I use an Hbox with no padding, which
works fine as long as there aren't too many statusbar elements added;
but if there are a lot, the tail starts wagging the dog, in that the
size of the window becomes dictated by the status bar (which normally
is supposed to be subtle, not intrusive/controlling). So I figured
that wrapping elements onto another line of status bar would be a more
useful way to lay them out, but that's really tricky. Enter TextView:
it's a widget designed to handle wrapping, and it can have child
widgets embedded in it.

Here's some proof of concept code. (This is in Pike, so you may not be
able to run it directly.)

int main()
{
    GTK2.setup_gtk();
    object 
buf=GTK2.TextBuffer(),view=GTK2.TextView(buf)->set_editable(0)->set_wrap_mode(GTK2.WRAP_WORD)->set_cursor_visible(0);
    view->modify_base(GTK2.STATE_NORMAL,GTK2.GdkColor(240,240,240));
    foreach (({"Asdf asdf","Qwer qwer","Zxcv zxcv","Testing,
testing","1, 2, 3, 4"}),string x)
    {
        view->add_child_at_anchor(GTK2.Frame()->add(GTK2.Label(x))->set_shadow_type(GTK2.SHADOW_ETCHED_OUT),
            buf->create_child_anchor(buf->get_end_iter()));
        buf->insert(buf->get_end_iter(),"  ",-1);
    }
    GTK2.Window(GTK2.WindowToplevel)->set_default_size(500,300)->add(GTK2.Vbox(0,0)
        ->add(GTK2.Label("Blah blah blah, this\nhas lots and\nlots of
content\n\nLorem ipsum dolor sit\namet"))
        ->pack_start(GTK2.Button("This sets the base width"),0,0,0)
        ->pack_start(view,0,0,0)
    )->show_all()->signal_connect("delete-event",lambda() {exit(0);});
    return -1;
}

Two questions.

Firstly: Is this a really REALLY stupid thing to do? When I Googled
for a wrapping layout manager, nothing mentioned this possibility, so
I'm wondering if this is somehow fundamentally bad and I just haven't
seen it.

And secondly: The TextArea defaults to having a white background, but
I want to use the window's default background. On my system, setting
the color to (240,240,240) does that, but that means I'm explicitly
setting a color, so it's going to be grey even if the UI theme
specifies that a window's background should be vibrant orange. Is
there a way to tell the TextView not to draw its background, or
alternatively, a way to query the default background color for a
window?

Thanks in advance!

ChrisA


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]