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