Listbox and Text widget questions 
Author Message
 Listbox and Text widget questions

Quote:

> As far as I know, one cannot even colorize a listbox on a per-line
> basis. I'd love to see what you come up with...

This is what I've got so far, but I'm stuck on a couple of things,
like how activate() should be written.  Also, the right justified
text doesn't work too great.  You don't get the entire line selected
and I'm not sure that can be fixed easily.

Also, (and most annoying and confusing) is how I seem to have this
bound the mainwindow stuff to Tk::Listbox bindings; I think that's the
ClassInit subroutine, but I'm not sure what to change it to to get
it to work.  If you create this text listbox in a different window
than main, it doesn't work at all. ;(

This still isn't very useful, but:

-- CUT Text/Listbox.pm ----------------------------------------------------
package Tk::Text::Listbox;
use Tk qw(Ev);
require Tk::Listbox;
require Tk::Text;

Tk::Widget->Construct('TextListbox');
sub Tk_cmd { \&Tk::text } # kind of core widget we build.

sub ClassInit {

    $mw->Tk::Listbox::ClassInit($class,$mw);

Quote:
}

sub Populate {


    $cw->SUPER::Populate($args);
    $cw->ConfigSpecs(
                     '-cursor'     => ['SELF','cursor','Cursor','top_left_arrow'],
                     '-selectmode' => ['PASSIVE',undef,undef,'browse'],
                     '-spacing1'   => ['SELF','spacing1','Spacing1',1],
                     '-spacing3'   => ['SELF','spacing3','Spacing3',1]
                    );

Quote:
}

sub insert {
    my $self = shift;
    my $where = shift;

    my ($value,$end,$firstline);

    if ($where !~ /[a-z]/) {
        $where = $where + 1;
        $where = "$where.0";
    }

    $where = $self->index($where);


        $end = $self->index('end');
        $firstline = $self->index('1.end');

        if ($end eq "2.0" && $where eq "1.0" && $firstline eq "1.0") {
        } elsif ($where eq $end) {
            $value = "\n" . $value;
        } else {
            $value = $value . "\n";
        }

        $self->SUPER::insert($where,$value);

        $where = int($where) + 1;
        $where = "$where.0";
    }

Quote:
}

sub textInsert {
    my $self = shift;

Quote:
}

sub activate {

    my $w = shift;

    print "Widget: $w\n";

    warn "Subrountine Tk::Text::Listbox::activate doesn't do anything...";

Quote:
}

sub selection {

    my $w = shift;
    my $type = shift;

    my $arg;

    if ($type eq 'clear') {
        foreach (0..$#args) {
            if ($args[$_] =~ /[a-z]/) {
                $args[$_] = $w->index($args[$_]);
            } else {
                $args[$_] = int($args[$_]);
                $args[$_] = $args[$_] + 1;
                $args[$_] = "$args[$_].0";
            }
        }
        #
        # This isn't a good way to sort these,...
        #


    } elsif ($type eq 'set') {
        foreach (0..$#args) {
            $args[$_] = $w->index($args[$_]);
            $args[$_] = int($args[$_]);
            $args[$_] = "$args[$_].0";
        }
        #
        # This isn't a good way to sort these,...
        #

        my $fr = $args[0];
        my $to;
        if ($#args > 0) {
            $to = $args[1];
        } else {
            $to = $fr + 1;
            $to = "$to.0";
        }
        $w->tagAdd('sel',$fr,$to);
    } elsif ($type eq 'anchor') {
        $arg = $args[0];
        $arg = int($arg);
        $arg = "$arg.0";
        $w->markSet('anchor',$arg);
    } elsif ($type eq 'includes') {
        $arg = $args[0];
        my $a = $w->compare("sel.first","<=",$arg);
        if ($a) {
            $a = $w->compare("sel.last",">=",$arg);
            if ($a) {
                return 1;
            }
        }
        return 0;
    } else {

    }

Quote:
}

1;
__END__
-- END Text/Listbox.pm ----------------------------------------------------

-- CUT Text/demo ----------------------------------------------------------
#!/usr/bin/perl
# -*- Perl -*-
#

#use strict;
use Tk;

BEGIN {

Quote:
}

use Tk::Text::Listbox;

my $MW = MainWindow->new;
$MW->title('Text::Listbox Demo');

&use_listbox('TextListbox');
&use_listbox('Listbox');

my $mkListbox2;

&new_mkListbox2;

MainLoop;

sub use_listbox {

    my $listboxtype = shift;
    my $listbox;


                         #-selectmode => "multiple",
                         -width => 80,
                         -height => 10,
                         -font => 'fixed'
                        );

    if ($listboxtype eq 'Listbox') {

    } else {

    }

    $listbox->pack(-side => 'top');

    my $n;
    foreach $n (1..50) {
        $listbox->insert('end', $n);
    }

    $listbox->insert(0, "Insert this at the top!");
    $listbox->insert(1, "Right Justify...");
    $listbox->insert(3, "Insert this at #3!");

    if ($listboxtype eq 'aTextListbox') {
        $listbox->tagAdd('line','1.0','2.0');
        $listbox->tagConfigure('line', -background => 'lightblue');
        $listbox->tagAdd('right','2.0','3.0');
        $listbox->tagConfigure('right', -justify => 'right');
    }

    $listbox->bind('<ButtonRelease>', sub {

                       print "Button Release...\n";
                   });

Quote:
}

sub new_mkListbox2 {

    # Create a top-level window containing a listbox showing a bunch of colors from the X color database.

    #$mkListbox2->destroy if Exists($mkListbox2);
    #$mkListbox2 = $MW->Toplevel();
    my $w = $MW;
    #dpos $w;
    $w->title('Listbox Demonstration (colors)');
    $w->iconname('Listbox');
    $w->minsize(1, 1);

    my $w_msg = $w->Label(-font => '-Adobe-times-medium-r-normal--*-180-*-*-*-*-*-*', -justify => 'left',
                           -wraplength => '4i', -text => 'A listbox containing several color values is displayed below, along ' .
                           'with a scrollbar.  You can scan the list either using the scrollbar or by dragging in the ' .
                           'listbox window with button 2 pressed.  If you double-click button 1 on a color, then the ' .
                           'background for the window will be changed to that color.  Click the "OK" button when you\'ve ' .
                           'seen enough.');
    my $w_frame = $w->Frame(-borderwidth => 10);
    my $w_ok = $w->Button(-text => 'OK', -width => 8, -command => ['destroy', $w]);
    $w_msg->pack(-side => 'top');
    $w_ok->pack(-side => 'bottom');
    $w_frame->pack(-side => 'top', -expand => 'yes', -fill => 'y');

    my $w_frame_scroll = $w_frame->Scrollbar();
    my $w_frame_list = $w_frame->TextListbox(-yscrollcommand => ['set', $w_frame_scroll], -width => 20, -height => 20, -setgrid => 1);
    $w_frame_scroll->configure(-command => ['yview', $w_frame_list]);
    $w_frame_list->pack(-side => 'left', -fill => 'y');
    $w_frame_scroll->pack(-side => 'left', -fill => 'y');

    my $color;

                      AntiqueWhite3 AntiqueWhite4 bisque1 bisque2 bisque3 bisque4 PeachPuff1  PeachPuff2 PeachPuff3
                      PeachPuff4 NavajoWhite1 NavajoWhite2 NavajoWhite3 NavajoWhite4 LemonChiffon1 LemonChiffon2
                      LemonChiffon3 LemonChiffon4 cornsilk1 cornsilk2 cornsilk3 cornsilk4 ivory1 ivory2 ivory3 ivory4
                      honeydew1 honeydew2 honeydew3 honeydew4 LavenderBlush1 LavenderBlush2 LavenderBlush3
                      LavenderBlush4 MistyRose1 MistyRose2 MistyRose3 MistyRose4 azure1 azure2 azure3 azure4
                      SlateBlue1 SlateBlue2 SlateBlue3 SlateBlue4 RoyalBlue1 RoyalBlue2 RoyalBlue3 RoyalBlue4 blue1
                      blue2 blue3 blue4 DodgerBlue1 DodgerBlue2 DodgerBlue3 DodgerBlue4 SteelBlue1 SteelBlue2
                      SteelBlue3 SteelBlue4 DeepSkyBlue1 DeepSkyBlue2 DeepSkyBlue3 DeepSkyBlue4 SkyBlue1 SkyBlue2
                      SkyBlue3 SkyBlue4 LightSkyBlue1 LightSkyBlue2 LightSkyBlue3 LightSkyBlue4 SlateGray1 SlateGray2
                      SlateGray3 SlateGray4 LightSteelBlue1 LightSteelBlue2 LightSteelBlue3 LightSteelBlue4
                      LightBlue1 LightBlue2 LightBlue3 LightBlue4 LightCyan1 LightCyan2 LightCyan3 LightCyan4
                      PaleTurquoise1 PaleTurquoise2 PaleTurquoise3 PaleTurquoise4 CadetBlue1 CadetBlue2 CadetBlue3
                      CadetBlue4 turquoise1 turquoise2 turquoise3 turquoise4 cyan1 cyan2 cyan3 cyan4 DarkSlateGray1
                      DarkSlateGray2 DarkSlateGray3 DarkSlateGray4 aquamarine1 aquamarine2 aquamarine3 aquamarine4
                      DarkSeaGreen1 DarkSeaGreen2 DarkSeaGreen3 DarkSeaGreen4 SeaGreen1 SeaGreen2 SeaGreen3 SeaGreen4
                      PaleGreen1 PaleGreen2 PaleGreen3 PaleGreen4 SpringGreen1 SpringGreen2 SpringGreen3 SpringGreen4
                      green1 green2 green3 green4 chartreuse1 chartreuse2 chartreuse3 chartreuse4 OliveDrab1
                      OliveDrab2 OliveDrab3 OliveDrab4 DarkOliveGreen1 DarkOliveGreen2 DarkOliveGreen3 DarkOliveGreen4
                      khaki1 khaki2 khaki3 khaki4 LightGoldenrod1 LightGoldenrod2 LightGoldenrod3 LightGoldenrod4
                      LightYellow1 LightYellow2 LightYellow3 LightYellow4 yellow1 yellow2 yellow3 yellow4 gold1 gold2
                      gold3 gold4 goldenrod1 goldenrod2 goldenrod3 goldenrod4 DarkGoldenrod1 DarkGoldenrod2
                      DarkGoldenrod3 DarkGoldenrod4 RosyBrown1 RosyBrown2 RosyBrown3 RosyBrown4 IndianRed1 IndianRed2
                      IndianRed3 IndianRed4 sienna1 sienna2 sienna3 sienna4 burlywood1 burlywood2 burlywood3
                      burlywood4 wheat1 wheat2 wheat3 wheat4 tan1 tan2 tan3 tan4 chocolate1 chocolate2 chocolate3  
                      chocolate4 firebrick1 firebrick2 firebrick3 firebrick4 brown1 brown2 brown3 brown4 salmon1
                      salmon2 salmon3 salmon4 LightSalmon1 LightSalmon2 LightSalmon3 LightSalmon4 orange1 orange2
                      orange3 orange4 DarkOrange1 DarkOrange2 DarkOrange3 DarkOrange4 coral1 coral2 coral3 coral4
                      tomato1 tomato2 tomato3 tomato4 OrangeRed1 OrangeRed2 OrangeRed3 OrangeRed4 red1 red2 red3 red4
                      DeepPink1 DeepPink2 DeepPink3 DeepPink4 HotPink1 HotPink2 HotPink3 HotPink4 pink1 pink2 pink3
                      pink4   LightPink1 LightPink2 LightPink3 LightPink4 PaleVioletRed1 PaleVioletRed2 PaleVioletRed3
                      PaleVioletRed4 maroon1  maroon2 maroon3 maroon4 VioletRed1 VioletRed2 VioletRed3 VioletRed4
                      magenta1 magenta2 magenta3 magenta4 orchid1 orchid2 orchid3 orchid4 plum1 plum2 plum3 plum4
                      MediumOrchid1 MediumOrchid2 MediumOrchid3 MediumOrchid4 DarkOrchid1 DarkOrchid2 DarkOrchid3
                      DarkOrchid4 purple1 purple2 purple3 purple4 MediumPurple1 MediumPurple2 MediumPurple3
                      MediumPurple4 thistle1 thistle2 thistle3 thistle4);


            $w_frame_list->insert(0, $color);
            $w_frame_list->tagAdd($color,'1.0','2.0');
            $w_frame_list->tagConfigure($color, -background => $color);
        }

        $w_frame_list->bind('<Double-1>', [
                                       sub {


                                           my $c = $c[0];
                                           $w2->configure(-background => $c);
                                           $w3->configure(-background => $c);
                                           $w4->configure(-background => $c);
                                       }, $w, $w_frame, $w_msg]);

Quote:
} # end new_mkListbox2

-- END Text/demo ----------------------------------------------------------

--
Shawn T. Amundson               University of Minnesota
Systems Administration          Computer Science System Staff

You can't talk to a PSYCHO like a normal human being!!!!  -Poe
==========================================================================
This message was posted through the Stanford campus mailing list
server.  If you wish to unsubscribe from this mailing list, send the

--




Sat, 20 Mar 1999 03:00:00 GMT  
 
 [ 1 post ] 

 Relevant Pages 

1. Text color in my scrolled->Listbox widget

2. Simple question: Saving text widgets text

3. Question on Text Widget Update

4. Question on Text Widget Update

5. Perl/Tk Questions About Text Widget

6. Text Widget Scroll Design Question

7. Question on Text Widget Update

8. Another text widget question

9. Basic Text Widget Question

10. Text Widget Question

11. Question about Text Widgets

12. [Re: Tk Text Widget Question]

 

 
Powered by phpBB® Forum Software