Hi Ajay,
        Well, your background is very interesting and encouraging, so
thank you for your desire to contribute!
        So, let me see if I can explain a bit more.  There definitely
does have to be a "repaint" call somewhere in the Pivot or application
code, because (obviously) nothing will get drawn without it.  In the
Pivot environment the "skin" classes are responsible for both
keyboard/mouse interaction and for painting onto the Java Graphics2D
canvas. The interaction between the component classes and the skin
classes is mostly done via "listeners", which are called to notify any
interested code of changes that need to be processed.  So, whenever the
underlying component data (such as the text of a Label) is changed, the
appropriate listener is called (which, at least, will be the skin of
that component), which then will invalidate the region, redo the
component's layout, and then (eventually) repaint the new text.  So, all
of that takes place in response to your application simply doing a
"label.setText(...)", without any more intervention from the
application.
        The code you are seeing in the Vocabulary plugin looks like it
is part of a custom container component, which is responsible for
forcing appropriate repaints of its children.  But, from what you've
told me so far of what you are doing I don't think you'll need any code
like that in your application, since the appropriate "invalidate" and
"repaint" calls will all happen pretty much automatically when you
change the underlying data in the Pivot components.
        BTW, I like your proposal, and I think Pivot will serve very
well to build this application for Lucene.  I have actually been wanting
other Apache projects to look to Pivot to build GUIs they might need, so
this is a perfect example of what I've been hoping for!
        As for suggestions on implementing features:
1) The menu bar is available inside a Frame as a MenuBar (see the
http://pivot.apache.org/tutorials/menu-bars.html tutorial)
2) Tabbed documents are available using the TabPane class (tutorial
here: http://pivot.apache.org/tutorials/tab-panes.html)
3) The numeric spinner ("Number of top terms:) is available.
4) The "Available fields" list can be done with a TableView
(http://pivot.apache.org/tutorials/table-views.html).
5) The Analyzer tool's text field can likely be a TextArea if all you
need to do is highlight a single piece of text, or a TextPane if you
need to do more complex coloring, bolding, multiple highlights, etc.
(tutorial here: http://pivot.apache.org/tutorials/text-areas.html for
TextArea and there is a TextPane demo in the source code here:
http://svn.apache.org/repos/asf/pivot/branches/2.0.x/demos/src/org/apach
e/pivot/demos/text/ ).
6) The token list in the Analyzer could be a ListView (see tutorial
here: http://pivot.apache.org/tutorials/lists.html).
7) The only component you will likely have to do some special work with
is the top one where the left-hand column has highlighted and bold item
descriptions, and the right-hand column has the associated values.
Although you can probably do it relatively easily with a TableView and a
custom renderer for the first column (see an example here:
http://pivot.apache.org/tutorials/table-views.custom.html).

        If you can download the Pivot source, I would build either the
current "branches/2.0.x" code, which is very stable and should be
released soon, or "trunk", which is pretty much the same except for some
new stuff I'm working on to do remote file browsing.  The current
release code (2.0.2) is okay too, but there are some improvements for
version 2.0.3 that could be helpful.

        Please continue to feel free to ask for help here.  As I said,
this is something dear to my heart, so I will help as much as I can.
Also, if there are things you feel could be improved in Pivot, you can
definitely suggest those too.  The goal of the project is to be useful
in creating GUIs just as you are doing.

Thanks,
~Roger Whitcomb


-----Original Message-----
From: Ajay Bhat [mailto:a.ajay.b...@gmail.com] 
Sent: Friday, July 19, 2013 6:22 AM
To: dev@pivot.apache.org
Subject: Re: How to highlight text using Pivot?

Hi Roger,

On Fri, Jul 19, 2013 at 12:02 AM, Roger L. Whitcomb <
roger.whitc...@actian.com> wrote:

> Well, to change the text on a Label, you just have to call
"label.setText(...);".  The "business logic" in your first button just
has to keep track of how many times it has been pushed (i.e., which
saying you want to display next), and set the correct text each time.
>

Okay, got it.

>
> I'm not sure exactly what you're trying to do with the second
button....
Do you just want it to make the label show up?  In order to do that,
just
do:
>         BoxPane boxPane = ....  // Or could be set using a @BXML
annotation
>         Label label = new Label("initial saying");
>         boxPane.add(label);
>
> The repaint should be taken care of automatically by the skin(s).
>
> Alternatively, you could always have the Label be included in the
BoxPane, but just set it initially invisible ("visible='false'" in the
.bxml file), and then in response to your second button press, call
"label.setVisible(true);".
>
> Am I correct in thinking that's what you want to accomplish?
>
> HTH,
> ~Roger
>

I'm having a bit of trouble myself understanding the repaint() in my
context and whether I need it or not.

*Some background info:* I had attended the ASF ICFOSS Pilot programme in
India [1] conducted by Luciano Resende [2] and as part of the program
we're encouraged to contribute to the Apache community.

I decided to do a project in Lucene[3]. The goal is to port some GUI
features into the Luke application in the sandbox of Lucene [3] using
Pivot, since Luke currently uses Thinlet (an LGPL licensed) API. [5]

I studied some Pivot, did a proposal and used one of your earlier
suggestions in the proposal.

The proposal is here :
https://docs.google.com/document/d/18Vu5YB6C7WLDxnG01BnZXFEKUC3EQYb0Y5_t
CJFb_sc/

Coming back to the problem :
I'm seeing repaint() being used in the Vocabulary plugin (see Page 5 of
above doc)

The repaint() method as in src of Luke is :
private void repaint(Object component, Object classname, Object part) {
        Rectangle b = getRectangle(component, "bounds");
        if (classname == "combobox") { // combobox down arrow
            repaint(component, b.x + b.width - block, b.y, block,
b.height); // icon?+
        } else if ((classname == "tabbedpane") || // tab
                (classname == "menubar") || (classname == ":popup")) {
// menuitem
            Rectangle r = getRectangle(part, "bounds");
            repaint(component, b.x + r.x, b.y + r.y, (classname ==
":popup") ? b.width : r.width, r.height);
        }
        /*Some more similar if statements*/
   }

It creates a rectangle object (from java Container class, IIRC) and sets
bounds by calling this function.

   private void repaint(Object component, int x, int y, int width, int
height) {
        while ((component = getParent(component)) != null) {
            Rectangle bounds = getRectangle(component, "bounds");
            if (bounds != null) {
              x += bounds.x;
              y += bounds.y;
            }
            Rectangle view = getRectangle(component, ":view");
            if (view != null) {
                Rectangle port = getRectangle(component, ":port");
                x += -view.x + port.x;
                y += -view.y + port.y; //+ clip :port
            }
        }
        repaint(x, y, width, height);
    }

I'm not seeing the point of creating bounds here. So I'm not sure why we
need to repaint any item in Pivot or if we need to repaint at all. Maybe
you could shed some light on this?

Please go over my proposal and feel free to make any comments for how I
could do the features.

[1] http://community.apache.org/mentoringprogramme-icfoss-pilot.html

[2] http://people.apache.org/~lresende

[3] https://issues.apache.org/jira/browse/LUCENE-2562

[4] https://svn.apache.org/repos/asf/lucene/sandbox/luke

[5] http://luke.googlecode.com/svn/trunk/

--
Thanks and regards,
Ajay Bhat

Reply via email to