/*
* Copyright 2000-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.openapi.wm.impl.welcomeScreen;
import com.intellij.notification.impl.NotificationsManagerImpl;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.MnemonicHelper;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ApplicationNamesInfo;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.project.ProjectManagerAdapter;
import com.intellij.openapi.util.DimensionService;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.wm.IdeFrame;
import com.intellij.openapi.wm.IdeRootPaneNorthExtension;
import com.intellij.openapi.wm.StatusBar;
import com.intellij.openapi.wm.impl.IdeGlassPaneImpl;
import com.intellij.ui.*;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UIUtil;
import com.intellij.util.ui.accessibility.AccessibleContextAccessor;
import consulo.annotations.RequiredDispatchThread;
import consulo.ide.welcomeScreen.FlatWelcomeScreen;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.accessibility.AccessibleContext;
import javax.swing.*;
import java.awt.*;
import java.io.File;
/**
* @author Konstantin Bulenkov
*/
public class FlatWelcomeFrame extends JFrame implements IdeFrame, Disposable, AccessibleContextAccessor {
@NotNull
public static Dimension getDefaultWindowSize() {
return JBUI.size(777, 460);
}
BalloonLayout myBalloonLayout;
private final FlatWelcomeScreen myScreen;
private boolean myDisposed;
@RequiredDispatchThread
public FlatWelcomeFrame() {
final JRootPane rootPane = getRootPane();
myScreen = new FlatWelcomeScreen(this);
final IdeGlassPaneImpl glassPane = new IdeGlassPaneImpl(rootPane);
setGlassPane(glassPane);
glassPane.setVisible(false);
//setUndecorated(true);
setContentPane(myScreen);
setDefaultTitle();
AppUIUtil.updateWindowIcon(this);
setSize(getDefaultWindowSize());
setResizable(false);
Point location = DimensionService.getInstance().getLocationNoRealKey(WelcomeFrame.DIMENSION_KEY);
Rectangle screenBounds = ScreenUtil.getScreenRectangle(location != null ? location : new Point(0, 0));
setLocation(new Point(screenBounds.x + (screenBounds.width - getWidth()) / 2, screenBounds.y + (screenBounds.height - getHeight()) / 3));
ProjectManager.getInstance().addProjectManagerListener(new ProjectManagerAdapter() {
@Override
public void projectOpened(Project project) {
Disposer.dispose(FlatWelcomeFrame.this);
}
}, this);
if (NotificationsManagerImpl.newEnabled()) {
myBalloonLayout = new WelcomeBalloonLayoutImpl(rootPane, JBUI.insets(8), myScreen.getMainWelcomePanel().myEventListener, myScreen.getMainWelcomePanel().myEventLocation);
}
else {
myBalloonLayout = new BalloonLayoutImpl(rootPane, JBUI.insets(8));
}
WelcomeFrame.setupCloseAction(this);
MnemonicHelper.init(this);
Disposer.register(ApplicationManager.getApplication(), this);
}
public void setDefaultTitle() {
setTitle(getWelcomeFrameTitle());
}
@Override
public void dispose() {
if (myDisposed) {
return;
}
myDisposed = true;
super.dispose();
if (myBalloonLayout != null) {
((BalloonLayoutImpl)myBalloonLayout).dispose();
myBalloonLayout = null;
}
WelcomeFrame.resetInstance();
// open project from welcome screen show progress dialog and call FocusTrackback.register()
FocusTrackback.release(this);
}
@Override
public StatusBar getStatusBar() {
return null;
}
public static Color getProjectsBackground() {
return new JBColor(Gray.xFF, Gray.x39);
}
public static Color getLinkNormalColor() {
return new JBColor(Gray._0, Gray.xBB);
}
public static Color getListSelectionColor(boolean hasFocus) {
return hasFocus ? new JBColor(0x3875d6, 0x4b6eaf) : new JBColor(Gray.xDD, Gray.x45);
}
public static Color getActionLinkSelectionColor() {
return new JBColor(0xdbe5f5, 0x485875);
}
public static Color getSeparatorColor() {
return UIUtil.getBorderColor();
}
@Override
public AccessibleContext getCurrentAccessibleContext() {
return accessibleContext;
}
protected String getWelcomeFrameTitle() {
return "Welcome to " + ApplicationNamesInfo.getInstance().getFullProductName();
}
public static boolean isUseProjectGroups() {
return true;
}
@Override
public BalloonLayout getBalloonLayout() {
return myBalloonLayout;
}
@Override
public Rectangle suggestChildFrameBounds() {
return getBounds();
}
@Nullable
@Override
public Project getProject() {
return ProjectManager.getInstance().getDefaultProject();
}
@Override
public void setFrameTitle(String title) {
setTitle(title);
}
@Override
public void setFileTitle(String fileTitle, File ioFile) {
setTitle(fileTitle);
}
@Override
public IdeRootPaneNorthExtension getNorthExtension(String key) {
return null;
}
@Override
public JComponent getComponent() {
return getRootPane();
}
}