import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.TypedEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class MyCTabFolderSnippet {
    public static void main(String[] args) {
        final Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());
        Composite mainComposite = new Composite(shell, SWT.NONE);
        mainComposite.setLayout(new GridLayout());
        mainComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));

        MyCTabFolderWrapper wrapper = new MyCTabFolderWrapper(mainComposite, SWT.NONE);
        CTabFolder tabFolder = wrapper.getCTabFolder();
        createItem(tabFolder, "Item_1");
        createItem(tabFolder, "Item_2");
        createItem(tabFolder, "Item_3");

        wrapper.addMinRestMaxListener(new MyCTabFolderMinRestoreMaxListener() {
            @Override
            public void minimize(TypedEvent event) {
                System.out.println("Minimize action triggered");
            }

            @Override
            public void maximize(TypedEvent event) {
                System.out.println("Maximize action triggered");
            }

            @Override
            public void restore(TypedEvent event) {
                System.out.println("Restore action triggered");
            }
        });

        shell.setSize(300, 200);
        shell.setLocation(800, 400);
        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }

    private static void createItem(CTabFolder tabFolder, String text) {
        CTabItem item = new CTabItem(tabFolder, SWT.DEFAULT);
        item.setText(text);
    }
}
