pivot-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Josh Highley <joshhigh...@gmail.com>
Subject Re: Drag frames beyond app window?
Date Fri, 17 Jun 2016 17:18:30 GMT
I will, but I'd like to figure out the event chaining first.  I'm having
issues getting the JDialog to behave in sync with my main application
window (Pivot).  Also, the app window isn't firing events like I'd expect
-- nothing when it loses focus or is minimized.  It does fire a
activeChanged event when it gains focus, though.  This makes it impossible
to know when to also minimize the JDialog.

I set the JDialog alwaysOnTop to true so that it doesn't get lost behind
the app window. However, that makes the JDialog also stay on top of all
other windows  (web browser, IDE, etc) and the JDialog stays visible even
when the main app window is minimized.

Roger implied they'd figured out the events, so I'm hoping he'll chime in
with some pointers.

Thanks,

Josh


On Thu, Jun 16, 2016 at 3:38 PM, Sandro Martini <sandro.martini@gmail.com>
wrote:

> Hi Josh,
> thanks for sharing with us your work-in-progress ...
>
> Could you attach it in a jira issue ?
> So in this way we could integrate in Pivot sources in next release as a
> sample ...
>
> Bye,
> Sandro
> Il 16/Giu/2016 22:05, "Josh Highley" <joshhighley@gmail.com> ha scritto:
>
> Documenting my progress in case others need this in the future.  I found
> the SwingDemo code in the Pivot SVN, which got me started.  I ended up
> using a JDialog instead of JFrame because I didn't want the minimize or
> maximize buttons, or a separate task bar item.
>
> I'm still trying to figure some things out, mainly the simplest way to tie
> the JDialog's AWT events (WindowListener) to Pivots window events.  I need
> to fire Pivot window state events so that other Pivot components are kept
> in sync with this dialog's window state.  Also, minimizing my main
> application's window does not also hide this dialog. Again, need to tie
> events between Pivot and Swing/AWT.
>
>
> This code is still a work in progress.  I _think_ I've removed my
> app-specific code, but no guarantee it will compile.
>
> import java.awt.Dimension;
>
> import java.awt.Image;
>
> import java.awt.Point;
>
> import java.awt.event.WindowEvent;
>
> import java.awt.event.WindowListener;
>
> import java.awt.image.BufferedImage;
>
>
> import javax.swing.JDesktopPane;
>
> import javax.swing.JDialog;
>
> import javax.swing.JInternalFrame;
>
> import javax.swing.plaf.basic.BasicInternalFrameUI;
>
>
> import org.apache.pivot.beans.BXML;
>
> import org.apache.pivot.beans.BXMLSerializer;
>
> import org.apache.pivot.wtk.ApplicationContext;
>
> import org.apache.pivot.wtk.Container;
>
> import org.apache.pivot.wtk.Form;
>
> import org.apache.pivot.wtk.Window;
>
>
>
> public class MyDialog  extends Window implements WindowListener
>
> {
>
>        // replace the default coffee cup icon
>
>        private static final Image *ICON* = new
>  BufferedImage(1,1,BufferedImage.*TYPE_INT_ARGB_PRE*);
>
>        private JDialog jDialog;
>
>
>
>        public MyDialog() {
>
>               super();
>
>
>
>               try {
>
>
>               JDesktopPane desktop = new JDesktopPane();
>
>               ApplicationContext.DisplayHost displayHost = new
>  ApplicationContext.DisplayHost();
>
>               ApplicationContext.*getDisplays*().add(displayHost
> .getDisplay());
>
>
>
>               jDialog = new JDialog();
>
>               jDialog.setTitle(*"My Dialog"*);
>
>               jDialog.setIconImage(*ICON*);
>
>               jDialog.setAlwaysOnTop(true);
>
>               jDialog.addWindowListener(this);
>
>                jDialog.setContentPane(desktop);
>
>                jDialog.setSize(1024, 768);
>
>                jDialog.setVisible(true);
>
>                jDialog.setResizable(true);
>
>
>
>                JInternalFrame internalFrame = new JInternalFrame("", false
> , false, false);
>
>                internalFrame.add(displayHost);
>
>                // remove the JInternalFrame border and title bar since
> JDialog provides this
>
>                internalFrame.setBorder(null);
>
>                ((BasicInternalFrameUI)internalFrame.getUI()).setNorthPane(
> null);
>
>
>
>                desktop.add(internalFrame);
>
>
>
>                // maximize our Pivot content to size it with the Swing
> container
>
>                 setMaximized(true);
>
>                 BXMLSerializer bxmlSerializer = new BXMLSerializer();
>
>                 setContent((Container) bxmlSerializer
> .readObject(Container.class, "my_dialog.bxml"));
>
>                 bxmlSerializer.bind(this, MyDialog.class);
>
>
>
>                 open(displayHost.getDisplay());
>
>
>
>                internalFrame.setMaximum(true);
>
>                internalFrame.setLocation(0, 0);
>
>                internalFrame.setSize(desktop.getSize());
>
>                internalFrame.setVisible(true);
>
>
>
>               } catch (Throwable t) {
>
>                      t.printStackTrace();
>
>               }
>
>        }
>
>
>
>        @Override
>
>        public void setVisible(boolean visible) {
>
>               jDialog.setVisible(visible);
>
>        }
>
>
>
>        private void saveSizeAndLocation() {
>
>               // removed code to save preferences  jDialog.getLocation());
>    jDialog.getSize());
>
>        }
>
>
>
>        private void setSizeAndLocation() {
>
>            // removed code to load preferences        jFrjDialogme
> .setSize((Dimension)obj);     jDialog.setLocation((Point)obj);
>
>        }
>
>
>
>        ////////////////// AWT WindowListener ////////////////////
>
>        // I left println here temporarily to see what/when events are fired
>
>        public void windowOpened(WindowEvent e) {
>
>               System.*out*.println("MyDialog windowOpened");
>
>               setSizeAndLocation();
>
>        }
>
>
>        public void windowClosing(WindowEvent e) {
>
>               System.*out*.println("MyDialog windowClosing");
>
>               saveSizeAndLocation();
>
>        }
>
>
>
>        public void windowClosed(WindowEvent e) { System.*out*.println("
> MyDialog windowClosed"); }
>
>        public void windowIconified(WindowEvent e) { System.*out*.println("
> MyDialog windowIconified"); }
>
>        public void windowDeiconified(WindowEvent e) { System.*out*
> .println("MyDialog windowDeiconified"); }
>
>        public void windowActivated(WindowEvent e) { System.*out*.println("
> MyDialog windowActivated"); }
>
>        public void windowDeactivated(WindowEvent e) { System.*out*
> .println("MyDialog windowDeactivated");  }
> }
>
>
>
>
>
> On Fri, Jun 10, 2016 at 11:47 AM, Josh Highley <joshhighley@gmail.com>
> wrote:
>
>> Is the JFrame at the application level or at each individual, drag-able,
>> frame level?  I don't necessarily need example code if you can do a bit of
>> a "brain dump" with some of the trickier details.  You said " new
>> top-level JFrame, and host the Pivot window inside that" -- how is that
>> relationship made?  I see JFrame will give a Graphics object, and I know
>> Pivot components draw themselves with Graphics....
>>
>> On Wed, Jun 8, 2016 at 10:11 PM, Roger and Beth Whitcomb <
>> RogerandBeth@rbwhitcomb.com> wrote:
>>
>>> Hi Josh,
>>>
>>>     Yes it is, but it is complicated.  You basically have to create a
>>> new top-level JFrame, and host the Pivot window inside that, and do the
>>> message passing by hooking up listeners, etc.  We have done it in our
>>> application, and I hope to be able to submit the code at some point, but it
>>> is not ready yet (still some proprietary bits in there still).  I'm not
>>> even sure I could send our code to you in a way that would be helpful
>>> (i.e., that you could build).  But what we did was based on some of the
>>> example code that is already there, so you could potentially reinvent it
>>> ....
>>>
>>>     Let me see if I can at least point you to the example code, but it
>>> will have to wait until next week for me ...
>>>
>>> HTH,
>>>
>>> ~Roger
>>>
>>>
>>> On 6/8/16 11:27 AM, Josh Highley wrote:
>>>
>>>> Is it possible to create a non-modal frame (or similar) that can be
>>>> dragged outside the main application window?
>>>>
>>>> For example, I have a log console Frame and some other non-modal info
>>>> Frames that a user can show/hide.  I want them to be able to drag it out
>>>> from in front of the main application window, like to another monitor.  At
>>>> the moment, the Frames will get cutoff when they pass the edge of the
>>>> underlying app window.
>>>>
>>>> Thanks,
>>>>
>>>> Josh
>>>>
>>>
>>>
>>
>

Mime
View raw message