001package polaris.sdk.ui.controls;
002
003import polaris.sdk.ui.*;
004
005/** Non-modal, draggable settings window. It can remain open while interacting with other controls. */
006public class GlassSettingsDialog extends Dialog {
007    private final ScrollPane scroller=new ScrollPane();
008    private final GlassSettingsPanel settings=new GlassSettingsPanel();
009    public GlassSettingsDialog(){
010        super("LiquidGlass 设置");id("materialSettingsDialog");w=760;h=HEADER_HEIGHT+Spacing.GAP+settings.preferredHeight(w-2*Spacing.INSET)+Spacing.INSET;
011        scroller.id("materialSettingsScroll");scroller.glass(false).padding(0).layout(Panel.Layout.COLUMN);
012        settings.id("materialSettingsPanel");scroller.add(settings);add(scroller);
013    }
014    public GlassSettingsPanel settings(){return settings;}
015    @Override protected void layoutChildren(){
016        if(ui()!=null){
017            w=Math.min(760,Math.max(1,ui().width()-32));
018            h=Math.min(HEADER_HEIGHT+Spacing.GAP+settings.preferredHeight(w-2*Spacing.INSET)+Spacing.INSET,Math.max(1,ui().height()-32));
019            float nx=Math.max(16,Math.min(x,ui().width()-w-16));
020            float ny=Math.max(16,Math.min(y,ui().height()-h-16));
021            if(nx!=x||ny!=y){x=nx;y=ny;ax=nx;ay=ny;smoothPosition(false);}
022        }
023        scroller.bounds(Spacing.INSET,HEADER_HEIGHT+Spacing.GAP,Math.max(0,w-2*Spacing.INSET),Math.max(0,h-HEADER_HEIGHT-Spacing.GAP-Spacing.INSET));
024        settings.bounds(0,0,scroller.contentWidth(),settings.preferredHeight(scroller.contentWidth()));
025    }
026    @Override public void open(Ui ui){settings.syncFromModel();super.open(ui);}
027}