SWT Tree на Mac - «Список источников» - PullRequest
3 голосов
/ 03 апреля 2012

Я реализую представления для версии OS X нашего Java-приложения SWT и хотел бы использовать опцию «список источников», предложенную NSOutlineView, в моем дереве SWT.

Я реализовал это, взломав собственную версию Tree.class, добавив этот код в метод #createHandle():

long NSTableViewSelectionHighlightStyleSourceList = 1;
long hi = OS.sel_registerName("setSelectionHighlightStyle:");
OS.objc_msgSend(widget.id, hi, NSTableViewSelectionHighlightStyleSourceList);

Что, по сути, просто помечает базовый NSOutlineView для использования стиля NSTableViewSelectionHighlightStyleSourceList.

Это выглядит так:

source list

, который работает, но не полностью эмулирует поведение NSOutlineView. Например, при выборе корневых узлов, хотя заголовок имеет достаточно места, он все равно обрезает его следующим образом:

source list with truncated title

Другая проблема заключается в том, что я не знаю, как реализовать категории (или группы / папки), как вы видите в Finder.app/iTunes.app/Mail.app/ в следующем примере:

Finder.app example

Обратите внимание на категорию FAVORITES и способ ее форматирования. Это выполняется в обычном приложении ObjC путем возврата true в методе outlineView:isGroupItem в делегате outlineView, но я не знаю, где взломать это.

Итак, мой вопрос

Как мне реализовать реализацию категории (isGroupItem) в SWT на OS X?

1 Ответ

6 голосов
/ 01 декабря 2012

Мне удалось внести коррективы в Java-источник SWT и родной источник, чтобы это работало, как показано на рисунке ниже.

Пользовательский SWT для mac cocoa x86_64 можно загрузить здесь.

Изменения, внесенные в источник в то время, можно увидеть в этом коммите

Ниже показан фрагмент, показывающий, как это работает. Стиль SWT.SOURCE_LIST используется для маркировки дерева как списка источников, а стиль SWT.GROUP_ITEM используется для маркировки элементов, которые являются элементами группы.

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;

public class SourceList {

    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());

        final Tree tree = new Tree (shell, SWT.SOURCE_LIST);

        for (int i=0; i<4; i++) {
            final TreeItem iItem = new TreeItem (tree, SWT.GROUP_ITEM);
            display.asyncExec( new Runnable() {
                public void run() {
                    iItem.setExpanded(true);
                }
            });
            iItem.setText ("GROUP " + i);
            for (int j = 0; j < 4; j++) {
                TreeItem jItem = new TreeItem (iItem, 0);
                jItem.setText ("TreeItem " + j);
            }
        }

        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...