[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [platform-swt-dev] Cannot layout new widgets on a non rectangular shell
|
OK, I see. I am still confused about the vertical scrolling. You want a
vertical
scrollbar too right? I am not sure how to implement this in a non
rectangular window and
how such a scrollbar should look like ...
Does your code work appart from the vertical scrolling?
/nick
PS: Here the problem I have using multiple shells (posted this in March,
no suggestions so far):
------------------------------------------------------------------------------------------
I tried to write an application that has multiple UI-threads working
simultaneously.
According to the doc this should be possible if I understand correctly:
----------------
Note: The most common threading model for an SWT application is to run
a single UI thread and
perform long operations in computational threads. However, SWT does not
restrict developers to this model.
An application could run multiple UI-threads with a separate event loop
in each thread.
----------------
The following application creates two windows as expected and all 3
thread seem to execute
simultaneously (tested on Windows XP). However, only one application
window is properly refreshed.
What is wrong?
-------------------------
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
class UserInterface extends Thread {
public void run() {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
new Label(shell, SWT.SEPARATOR | SWT.VERTICAL);
shell.setSize(200, 200);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
System.out.println(Thread.currentThread().getName());
}
display.dispose();
}
}
public class SwtBackgroundThreadApplication {
public SwtBackgroundThreadApplication() {
// create a new thread and start it
UserInterface userIf = new UserInterface();
userIf.start();
// create a new thread and start it
UserInterface userIf2 = new UserInterface();
userIf2.start();
// do forever
while (true) {
System.out.println("main thread running");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new SwtBackgroundThreadApplication();
}
}
Abhishek Misra wrote:
Hi Nick,
No i just need a comp on a vertical scroll comp on a shell.
This is a new pop up shell i am creating from my application. Now i
needed multiple things, first is the shell which is non rectangular
and has a image background which should propagate to the comp and any
further widgets i lay on it, but so far it is not working. What kind
of problems you had when you created multiple shells from your app.
Thanks,
abhi
On 4/2/07, *nick* <nick@xxxxxxxxxxxxxxxx
<mailto:nick@xxxxxxxxxxxxxxxx>> wrote:
You can place a Composite into a ScrolledComposite, this works for me.
Do you need
to be able to resize the ScrolledComposite? But the shell (main
window)
itself is fixed since it is based on
a transparent image correct (or do you create those images on the fly
and need the window to
reflect changes done to the image?)?
Could you please explain in more detail?
/nick
PS: I had problems to use multiple shells within an application. You
might want to avoid
this.
Abhishek Misra wrote:
> Hi Carolyn,
> I was trying to create a custom widget where the shell
> could be created from a transparent image and i could at the very
> minimum layout a Composite on a ScrolledComposite which will be
on the
> shell. I have so far been unable to accomplish the same probably
> because of the fact that Scrolled composite is not fixed in
size. Any
> insights what is the best way to this?
>
> Thanks,
> abhi
>
>
> On 4/2/07, *Carolyn MacLeod* <Carolyn_MacLeod@xxxxxxxxxx
<mailto:Carolyn_MacLeod@xxxxxxxxxx>
> <mailto:Carolyn_MacLeod@xxxxxxxxxx
<mailto:Carolyn_MacLeod@xxxxxxxxxx>>> wrote:
>
> Hi, Abhishek,
> I think it would be easier in this case to just draw your label
> text on
> the shell instead of using a control.
> For example, delete the Composite and CLabel code, and add
> something like
> the following to the Paint event, right after the drawImage:
> e.gc.drawString("Hello there", imageData.x + 10,
> imageData.y, true
> );
> Also, please note that CLabel does not support SWT.WRAP style.
>
> Nick,
> Please use SWT.NONE instead of SWT.NO <http://SWT.NO>
<http://SWT.NO <http://SWT.NO>> when
> creating a Composite or Button
> with none of their style bits set.
>
> Hope this helps,
> Carolyn
>
>
>
>
>
>
> nick < nick@xxxxxxxxxxxxxxxx <mailto:nick@xxxxxxxxxxxxxxxx>
<mailto:nick@xxxxxxxxxxxxxxxx <mailto:nick@xxxxxxxxxxxxxxxx>>>
> Sent by: platform-swt-dev-bounces@xxxxxxxxxxx
<mailto:platform-swt-dev-bounces@xxxxxxxxxxx>
> <mailto:platform-swt-dev-bounces@xxxxxxxxxxx
<mailto:platform-swt-dev-bounces@xxxxxxxxxxx>>
> 04/02/2007 08:40 PM
> Please respond to
> "Eclipse Platform SWT component developers list."
> <platform-swt-dev@xxxxxxxxxxx
<mailto:platform-swt-dev@xxxxxxxxxxx> <mailto:
platform-swt-dev@xxxxxxxxxxx <mailto:platform-swt-dev@xxxxxxxxxxx>>>
>
>
> To
> "Eclipse Platform SWT component developers list."
> <platform-swt-dev@xxxxxxxxxxx
<mailto:platform-swt-dev@xxxxxxxxxxx>
<mailto:platform-swt-dev@xxxxxxxxxxx
<mailto:platform-swt-dev@xxxxxxxxxxx>>>
> cc
>
> Subject
> Re: [platform-swt-dev] Cannot layout new widgets on a non
rectangular
> shell
>
>
>
>
>
>
> I don't think that this is related to the non-rectangular shape
> of the
> shell. Looks
> more like a layout problem.
>
> replace
>
> -----------------------
> final Composite comp = new Composite(shell, SWT.NONE);
> comp.setBackgroundMode(SWT.INHERIT_FORCE);
> GridLayout layout = new GridLayout(1, false);
> .
> .
> -----------------------
> with
>
> -----------------------
> Composite composite = new Composite(shell, SWT.NO
<http://SWT.NO> < http://SWT.NO>);
> composite.setLayout(new FillLayout());
> Button button1 = new Button(shell, SWT.NO
<http://SWT.NO>
> < http://SWT.NO>);
> button1.setLocation(5, 5);
> button1.setSize(150, 20);
> button1.setText("hello");
> -----------------------
>
> and the button will show up
>
> /nick
>
> Abhishek Misra wrote:
>
> > Created from snippet 219.
> >
>
http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet219.java?view=co
> <
http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet219.java?view=co>
>
> > <
>
http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet219.java?view=co
> <
http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet219.java?view=co>
> >
> >
> > I changed the image in the above snippet to a bigger
500*200 image
> > which is transparent and use that.
> >
> > I am trying to create a new composite on the shell created
in above
> > step and put a label on it, but it doesn't work. All that
shows
> up is
> > shell with the image.
> >
> > final Display display = new Display ();
> > final Image image = ImageManager.getImage
> ("info_window.png");
> > final Shell shell = new Shell (display, SWT.NO_TRIM);
> > Region region = new Region();
> > final ImageData imageData = image.getImageData();
> > if ( imageData.alphaData != null) {
> > Rectangle pixel = new Rectangle(0, 0, 1, 1);
> > for (int y = 0; y < imageData.height; y++) {
> > for (int x = 0; x < imageData.width ; x++) {
> > if (imageData.getAlpha(x, y) == 255) {
> > pixel.x = imageData.x + x;
> > pixel.y = imageData.y + y;
> > region.add(pixel);
> > }
> > }
> > }
> > } else {
> > ImageData mask = imageData.getTransparencyMask();
> > Rectangle pixel = new Rectangle(0, 0, 1, 1);
> > for (int y = 0; y < mask.height; y++) {
> > for (int x = 0; x < mask.width; x++) {
> > if (mask.getPixel(x, y) != 0) {
> > pixel.x = imageData.x + x;
> > pixel.y = imageData.y + y;
> > region.add(pixel);
> > }
> > }
> > }
> > }
> > shell.setRegion (region);
> >
> > final Composite comp = new Composite(shell, SWT.NONE);
> > comp.setBackgroundMode(SWT.INHERIT_FORCE);
> > GridLayout layout = new GridLayout(1, false);
> > layout.marginRight = 10;
> > comp.setLayout(layout);
> > GridData data = new GridData(GridData.FILL_BOTH);
> > comp.setLayoutData(data);
> > CLabel label = new CLabel(comp, SWT.WRAP);
> >
> label.setForeground(display.getSystemColor(SWT.COLOR_BLACK));
> >
> > final GridData textData = new
> > GridData(GridData.FILL_HORIZONTAL |
GridData.VERTICAL_ALIGN_FILL);
> > textData.horizontalIndent = 0;
> > textData.verticalIndent = 0;
> > label.setLayoutData(textData);
> > label.setBackgroundMode(SWT.INHERIT_DEFAULT);
> >
> > Listener l = new Listener() {
> > int startX, startY;
> > public void handleEvent(Event e) {
> > if (e.type == SWT.KeyDown && e.character ==
> SWT.ESC) {
> > shell.dispose ();
> > }
> > if (e.type == SWT.MouseDown && e.button ==
1) {
> > startX = e.x;
> > startY = e.y;
> > }
> > if (e.type == SWT.MouseMove && (e.stateMask &
> > SWT.BUTTON1) != 0) {
> > Point p = shell.toDisplay (e.x, e.y);
> > p.x -= startX;
> > p.y -= startY;
> > shell.setLocation(p);
> > }
> > if ( e.type == SWT.Paint) {
> > e.gc.drawImage(image, imageData.x,
imageData.y);
> > }
> > }
> > };
> > shell.addListener(SWT.KeyDown, l);
> > shell.addListener(SWT.MouseDown, l);
> > shell.addListener(SWT.MouseMove, l);
> > shell.addListener(SWT.Paint, l);
> >
> > shell.setSize(imageData.x + imageData.width,
imageData.y +
> > imageData.height);
> > shell.layout();
> > shell.open ();
> > while (!shell.isDisposed ()) {
> > if (!display.readAndDispatch ())
> > display.sleep ();
> > }
> > region.dispose();
> > image.dispose ();
> > display.dispose ();
> > }
> >
> > Any idea what's wrong?
> >
> >
> >
> > Thanks,
> > abhi
> >
>
>------------------------------------------------------------------------
>
> >
> >_______________________________________________
> >platform-swt-dev mailing list
> >platform-swt-dev@xxxxxxxxxxx
<mailto:platform-swt-dev@xxxxxxxxxxx>
<mailto:platform-swt-dev@xxxxxxxxxxx
<mailto:platform-swt-dev@xxxxxxxxxxx>>
> > https://dev.eclipse.org/mailman/listinfo/platform-swt-dev
> >
> >
>
> _______________________________________________
> platform-swt-dev mailing list
> platform-swt-dev@xxxxxxxxxxx
<mailto:platform-swt-dev@xxxxxxxxxxx>
<mailto:platform-swt-dev@xxxxxxxxxxx
<mailto:platform-swt-dev@xxxxxxxxxxx>>
> https://dev.eclipse.org/mailman/listinfo/platform-swt-dev
<https://dev.eclipse.org/mailman/listinfo/platform-swt-dev>
>
>
> _______________________________________________
> platform-swt-dev mailing list
> platform-swt-dev@xxxxxxxxxxx
<mailto:platform-swt-dev@xxxxxxxxxxx> <mailto:
platform-swt-dev@xxxxxxxxxxx <mailto:platform-swt-dev@xxxxxxxxxxx>>
> https://dev.eclipse.org/mailman/listinfo/platform-swt-dev
>
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>platform-swt-dev mailing list
> platform-swt-dev@xxxxxxxxxxx <mailto:platform-swt-dev@xxxxxxxxxxx>
>https://dev.eclipse.org/mailman/listinfo/platform-swt-dev
>
>
_______________________________________________
platform-swt-dev mailing list
platform-swt-dev@xxxxxxxxxxx <mailto:platform-swt-dev@xxxxxxxxxxx>
https://dev.eclipse.org/mailman/listinfo/platform-swt-dev
<https://dev.eclipse.org/mailman/listinfo/platform-swt-dev>
------------------------------------------------------------------------
_______________________________________________
platform-swt-dev mailing list
platform-swt-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/platform-swt-dev
begin:vcard
fn:nicksoftware company limited
n:company limited;nicksoftware
org:;Software Development
adr:T. Suthep A. Mueang;;142/9 T. Suandok Soi 6;Chiangmai;;50200;Thailand
email;internet:nick@xxxxxxxxxxxxxxxx
tel;work:+66 53 281 844
tel;cell:+66 810 25 80 11
x-mozilla-html:FALSE
url:http://www.nicksoftware.co.th
version:2.1
end:vcard