Search in sources :

Example 1 with TabFrameUI

use of com.github.weisj.darklaf.components.tabframe.TabFrameUI in project darklaf by weisJ.

the class TabFrameTransferHandler method importData.

/**
 * Called when the drag-and-drop operation has just completed. This creates a new tab identical to
 * the one "dragged" and places it in the destination <code>JTabbedPane</code>.
 *
 * @param c The component receiving the "drop" (the instance of <code>JTabbedPane</code>).
 * @param t The data being transfered (information about the tab and the component contained by the
 *        tab).
 * @return Whether or not the import was successful.
 */
@Override
public boolean importData(final JComponent c, final Transferable t) {
    boolean successful = false;
    if (hasTabFlavor(t.getTransferDataFlavors()) && mouseLocation != null) {
        try {
            JTabFrame tabFrame = (JTabFrame) c;
            JTabFrame.TabFramePosition tab = getDropPosition(mouseLocation, tabFrame);
            Alignment a = tab.getAlignment();
            int index = tab.getIndex();
            TabTransferData td = (TabTransferData) t.getTransferData(tabFlavor);
            if (tabFrame == td.sourceTabFrame && td.tabAlignment == a) {
                if (index >= td.tabIndex) {
                    index--;
                }
            }
            index++;
            if (tabFrame == td.sourceTabFrame && a == td.tabAlignment && index == td.tabIndex) {
                // Nothing to do. Just select the tab to be sure.
                if (td.wasSelected) {
                    selectTab(td.sourceTabFrame, a, index);
                }
                return false;
            }
            if (a == null || index < 0 || index > tabFrame.getTabCountAt(a)) {
                return false;
            }
            TabFrameTab tabComp = td.sourceTabFrame.getTabComponentAt(td.tabAlignment, td.tabIndex);
            Component popupComp = td.sourceTabFrame.getPopupComponentAt(td.tabAlignment, td.tabIndex);
            td.sourceTabFrame.removeTab(td.tabAlignment, td.tabIndex);
            tabFrame.insertTab((TabFramePopup) popupComp, tabComp, a, index);
            if (td.wasSelected) {
                tabFrame.toggleTab(a, index, true);
            }
            SwingUtilities.invokeLater(() -> td.tab.getComponent().repaint());
            successful = true;
            TabFrameUI ui = getUI(c);
            if (ui != null) {
                ui.clearTargetIndicator();
            }
        } catch (final Exception e) {
            LOGGER.log(Level.SEVERE, "Couldn't import tab data", e);
        }
    }
    return successful;
}
Also used : Alignment(com.github.weisj.darklaf.util.Alignment) JTabFrame(com.github.weisj.darklaf.components.tabframe.JTabFrame) TabFrameTab(com.github.weisj.darklaf.components.tabframe.TabFrameTab) TabFrameUI(com.github.weisj.darklaf.components.tabframe.TabFrameUI) UnsupportedFlavorException(java.awt.datatransfer.UnsupportedFlavorException)

Example 2 with TabFrameUI

use of com.github.weisj.darklaf.components.tabframe.TabFrameUI in project darklaf by weisJ.

the class TabFrameTransferHandler method dragOver.

@Override
public void dragOver(final DropTargetDragEvent e) {
    e.getDropTargetContext().getComponent().setCursor(Cursor.getDefaultCursor());
    mouseLocation = e.getLocation();
    Component c = e.getDropTargetContext().getComponent();
    JTabFrame destTabFrame = (JTabFrame) c;
    TabFrameUI ui = getUI(destTabFrame);
    if (ui != null) {
        TabTransferable t = currentTransferable;
        if (t != null) {
            JTabFrame.TabFramePosition tab = getDropPosition(mouseLocation, destTabFrame);
            if (tab.getAlignment() == null) {
                ui.clearTargetIndicator();
            } else {
                try {
                    JTabFrame sourceTab = currentTransferable.transferData.sourceTabFrame;
                    int sourceIndex = currentTransferable.transferData.tabIndex;
                    Alignment sourceAlign = currentTransferable.transferData.tabAlignment;
                    int w = getUI(sourceTab).getTabWidth(sourceTab, sourceAlign, sourceIndex);
                    int h = getUI(sourceTab).getTabHeight(sourceTab, sourceAlign, sourceIndex);
                    ui.setDropSize(w, h);
                    ui.setTargetIndicator(tab.getAlignment(), tab.getIndex());
                } catch (final IndexOutOfBoundsException ex) {
                    ui.clearTargetIndicator();
                }
            }
        }
    }
    lastTabFrame = destTabFrame;
    startTimer.restart();
}
Also used : Alignment(com.github.weisj.darklaf.util.Alignment) JTabFrame(com.github.weisj.darklaf.components.tabframe.JTabFrame) TabFrameUI(com.github.weisj.darklaf.components.tabframe.TabFrameUI)

Example 3 with TabFrameUI

use of com.github.weisj.darklaf.components.tabframe.TabFrameUI in project darklaf by weisJ.

the class TabFrameTransferHandler method drop.

@Override
public void drop(final DropTargetDropEvent e) {
    Component c = e.getDropTargetContext().getComponent();
    TabFrameUI ui = getUI(c);
    if (ui != null) {
        ui.clearTargetIndicator();
    }
    timer.stop();
    startTimer.stop();
}
Also used : TabFrameUI(com.github.weisj.darklaf.components.tabframe.TabFrameUI)

Example 4 with TabFrameUI

use of com.github.weisj.darklaf.components.tabframe.TabFrameUI in project darklaf by weisJ.

the class TabFrameTransferHandler method createTransferable.

protected Transferable createTransferable(final JComponent c, final DragGestureEvent dge) {
    JTabFrame tabFrame = (JTabFrame) c;
    if (tabFrame.isInTransfer()) {
        currentTransferable = new TabTransferable(tabFrame, tabFrame.getTransferInfo());
    } else {
        JTabFrame.TabFramePosition ind = getUI(tabFrame).getTabIndexAt(tabFrame, dge.getDragOrigin());
        tabFrame.initTransfer(ind.getAlignment(), ind.getIndex());
        currentTransferable = new TabTransferable(tabFrame, ind);
    }
    TabFrameUI ui = getUI(c);
    createDragImage(ui);
    Alignment a = currentTransferable.transferData.tabAlignment;
    int index = currentTransferable.transferData.tabIndex;
    ui.setSourceIndicator(a, index);
    startTimer.start();
    lastTabFrame = currentTransferable.transferData.sourceTabFrame;
    return currentTransferable;
}
Also used : Alignment(com.github.weisj.darklaf.util.Alignment) JTabFrame(com.github.weisj.darklaf.components.tabframe.JTabFrame) TabFrameUI(com.github.weisj.darklaf.components.tabframe.TabFrameUI)

Example 5 with TabFrameUI

use of com.github.weisj.darklaf.components.tabframe.TabFrameUI in project darklaf by weisJ.

the class TabFrameTransferHandler method dragExit.

@Override
public void dragExit(final DropTargetEvent e) {
    Component c = e.getDropTargetContext().getComponent();
    TabFrameUI ui = getUI(c);
    if (ui != null) {
        ui.clearTargetIndicator();
    }
    lastTabFrame = (JTabFrame) c;
    startTimer.start();
}
Also used : TabFrameUI(com.github.weisj.darklaf.components.tabframe.TabFrameUI)

Aggregations

TabFrameUI (com.github.weisj.darklaf.components.tabframe.TabFrameUI)5 JTabFrame (com.github.weisj.darklaf.components.tabframe.JTabFrame)3 Alignment (com.github.weisj.darklaf.util.Alignment)3 TabFrameTab (com.github.weisj.darklaf.components.tabframe.TabFrameTab)1 UnsupportedFlavorException (java.awt.datatransfer.UnsupportedFlavorException)1