21 сентября 2013 г.

django: нормальные bootstrap3 инпуты в autocomplete_light

В bootstrap 3 поля автозаполнения от django-модуля autocomplete_light выглядят непотребно из-за требования иметь красивым инпутам формы обязательный класс "form-control". Никаких возможностей кастомизации через autocomplete_light_registry.py и т.п. нету, т.к. класс намертво захардкожен (widget.html):
{% block input %}
    {# a text input, that is the 'autocomplete input' #}
    
{% endblock %}
Пришлось сделать патчик в js и всем полям с class="autocomplete" добавить ещё и класс "form-control" (используется jquery):
if ($(".autocomplete").length) {
 $(".autocomplete").addClass( "form-control" );
}
Если используется другой вариант хардкода (типа насильное назначение вообще всем input, либо хардкодом в css), то неактуально. Я люблю чистые решения, но чище этого ничего не смог придумать.

16 сентября 2013 г.

swt jface button dropdown popup menu

Хочу я, чтобы при нажатии на кнопку вываливалось меню. Ну типа как Start-меню в винде. Всё очень просто - по нажатию кнопки создаём и разворачиваем в месте тыкания мышкой.
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Menu;
...
final Button mainMenuButton = new Button(composite, SWT.PUSH);
mainMenuButton.setText("¿?");
mainMenuButton.setLayoutData( ... );
mainMenuButton.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent event) {
        Menu dropMenu = createMainMenu( getShell() );
        Point point = mainMenuButton.toDisplay(new Point(event.x, event.y));
        dropMenu.setLocation( point.x, point.y+mainMenuButton.getBounds().height );
        dropMenu.setVisible(true);
    }
});
Далее на чистом SWT как-то так:
public static Menu createMainMenu( final Shell shell )
{
    Menu dropMenu = new Menu(shell, SWT.POP_UP);
    ...
    MenuItem item0 = new MenuItem(dropMenu, SWT.PUSH);
    item0.setText(...);
    item0.addListener(SWT.Selection, ...);
    ....
    return dropMenu;
}
На JFace как-то так:
public Menu createMainMenu( final Shell shell )
{
    MenuManager popManager = new MenuManager();
    popManager.add(new ActionOne(shell));
    ...
    popManager.add(new Separator());
    ...
    Menu dropMenu = popManager.createContextMenu(shell);
    return dropMenu;
}