package Ġcom . jetbrains . edu . learning . new project . ui Ċ Ċ import Ġcom . intellij . ide . DataManager Ċ import Ġcom . intellij . ide . ui . L af Manager Ċ import Ġcom . intellij . ide . ui . l af . UIT heme Based Look And Feel Info Ċ import Ġcom . intellij . openapi . action System . An ActionEvent Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . util . text . StringUtil Ċ import Ġcom . intellij . ui . Hyper link Label Ċ import Ġcom . intellij . ui . JB Color Ċ import Ġcom . intellij . util . Icon Util Ċ import Ġcom . intellij . util . ui . J BU I Ċ import Ġcom . jetbrains . edu . Ed uc ational Core Icons Ċ import Ġcom . jetbrains . edu . learning . E du Browser Ċ import Ġcom . jetbrains . edu . learning . E du Names Ċ import Ġcom . jetbrains . edu . learning . course Format . Course Ċ import Ġcom . jetbrains . edu . learning . course Format . ext . compatibility Provider Ċ import Ġcom . jetbrains . edu . learning . course Format . ext . configur ator Ċ import Ġcom . jetbrains . edu . learning . course Format . ext . language DisplayName Ċ import Ġcom . jetbrains . edu . learning . new project . Jet Brains A cademy Course Ċ import Ġcom . jetbrains . edu . learning . plugins . Plugin Info Ċ import Ġkotlinx . css . CSS Builder Ċ import Ġkotlinx . css . body Ċ import Ġkotlinx . css . properties . lh Ċ import Ġkotlinx . css . pt Ċ import Ġkotlinx . css . px Ċ import Ġorg . jetbrains . annotations . Non N ls Ċ import Ġjava . awt . Color Ċ import Ġjava . awt . Component Ċ import Ġjava . awt . Flow Layout Ċ import Ġjavax . swing . Icon Ċ import Ġjavax . swing . JPanel Ċ import Ġjavax . swing . UI Manager Ċ Ċ private Ġval ĠLOG : ĠLogger Ġ= ĠLogger . getInstance (" com . jetbrains . edu . learning . new project . ui . utils ") Ċ @ Non N ls Ċ private Ġconst Ġval ĠCON TEXT _ HELP _ ACTION _ PLACE Ġ= Ġ" Context Help " Ċ Ċ val ĠCourse . logo : ĠIcon ? ĊĠ Ġget () Ġ{ ĊĠĠĠ Ġif Ġ( this Ġis ĠJetBrains A cademy Course ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠEduc ational Core Icons . JB _ AC ADE MY _ TAB ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġlogo Ġ= Ġconfigur ator ?. logo Ġ?: Ġcompatibility Provider ?. logo ĊĠĠĠ Ġif Ġ( logo Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġlanguage Ġ= Ġlanguage DisplayName ĊĠĠĠĠĠ ĠLOG . info (" configur ator Ġand Ġcompatibility Provider Ġare Ġnull . Ġlanguage : Ġ$ language , Ġcourse Ġtype : Ġ$ item Type , Ġenvironment : Ġ$ environment ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġlogo ĊĠ Ġ} Ċ Ċ fun ĠCourse . getS ca led Logo ( logo Size : ĠInt , Ġancestor : ĠComponent ): ĠIcon ? Ġ{ ĊĠ Ġval Ġlogo Ġ= Ġlogo Ġ?: Ġreturn Ġnull ĊĠ Ġval Ġscale Factor Ġ= Ġlogo Size Ġ/ Ġlogo . icon Height . toFloat () ĊĠ Ġval Ġscaled Icon Ġ= ĠIcon Util . scale ( logo , Ġancestor , Ġscale Factor ) ĊĠ Ġreturn ĠIcon Util . to Size ( scaled Icon , ĠJ BU I . scale ( logo Size ), ĠJ BU I . scale ( logo Size )) Ċ } Ċ Ċ val ĠCourse . unsupported Course Message : ĠString Ġget () Ġ{ ĊĠ Ġval Ġtype Ġ= Ġwhen Ġ( val Ġenvironment Ġ= Ġcourse . environment ) Ġ{ ĊĠĠĠ ĠE du Names . ANDROID Ġ-> Ġenvironment ĊĠĠĠ ĠE du Names . DEFAULT _ ENVIRONMENT Ġ-> Ġcourse . language DisplayName ĊĠĠĠ Ġelse Ġ-> Ġnull ĊĠ Ġ} ĊĠ Ġreturn Ġif Ġ( type Ġ!= Ġnull ) Ġ{ ĊĠĠĠ Ġ"$ type Ġcourses Ġare Ġnot Ġsupported " ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġ""" Selected Ġ"${ course . name }" Ġcourse Ġis Ġunsupported """ ĊĠ Ġ} Ċ } Ċ Ċ fun Ġget Error State ( course : ĠCourse ?, Ġvalidate Settings : Ġ( Course ) Ġ-> ĠValidation Message ?): ĠError State Ġ{ ĊĠ Ġvar Ġlanguage Error : ĠError State Ġ= ĠError State . Nothing Selected ĊĠ Ġif Ġ( course Ġ!= Ġnull ) Ġ{ ĊĠĠĠ Ġval Ġlanguage Settings Message Ġ= Ġvalidate Settings ( course ) ĊĠĠĠ Ġlanguage Error Ġ= Ġlanguage Settings Message ?. let Ġ{ ĠError State . Language Settings Error ( it ) Ġ} Ġ?: ĠError State . None ĊĠ Ġ} ĊĠ Ġreturn ĠError State . for Course ( course ). merge ( language Error ) Ċ } Ċ Ċ fun Ġget Required Plugins Message ( plugins : ĠCollection < Plugin Info >, Ġlimit : ĠInt Ġ= Ġ 3 ): ĠString Ġ{ ĊĠ Ġrequire ( limit Ġ> Ġ 1 ) ĊĊĠ Ġval Ġnames Ġ= Ġif Ġ( plugins . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠ Ġplugins . single (). displayName ĊĠ Ġ} ĊĠ Ġelse Ġ{ ĊĠĠĠ Ġval Ġsuffix Ġ= Ġif Ġ( plugins . size Ġ<= Ġlimit ) Ġ" Ġand Ġ${ plugins . last (). displayName }" Ġelse Ġ" Ġand Ġ${ plugins . size Ġ- Ġlimit Ġ+ Ġ 1 } Ġmore " ĊĠĠĠ Ġplugins . take ( min Of ( limit Ġ- Ġ 1 , Ġplugins . size Ġ- Ġ 1 )). join ToString Ġ{ Ġit . displayName Ġ?: Ġit . string Id Ġ} Ġ+ Ġsuffix ĊĠ Ġ} ĊĊĠ Ġreturn Ġ"$ names Ġ${ StringUtil . plural ize (" plugin ", Ġplugins . size )} Ġrequired . Ġ" Ċ } Ċ Ċ fun Ġbrowse Hyper link ( message : ĠValidation Message ?) Ġ{ ĊĠ Ġif Ġ( message Ġ== Ġnull ) Ġ{ ĊĠĠĠ Ġreturn ĊĠ Ġ} ĊĠ Ġval Ġhyper link Ġ= Ġmessage . hyperlink Address ĊĠ Ġif Ġ( hyperlink Ġ!= Ġnull ) Ġ{ ĊĠĠĠ ĠE du Browser . getInstance (). browse ( hyperlink ) ĊĠ Ġ} Ċ } Ċ Ċ fun Ġcreate Course Description Style sheet () Ġ= ĠCSS Builder (). apply Ġ{ ĊĠ Ġbody Ġ{ ĊĠĠĠ ĠfontFamily Ġ= Ġ" SF ĠUI ĠText " ĊĠĠĠ ĠfontSize Ġ= ĠJ BU I . scale FontSize ( 1 3 . 0 f ). pt ĊĠĠĠ Ġline Height Ġ= Ġ( J BU I . scale FontSize ( 1 6 . 0 f )). px . lh ĊĠ Ġ} Ċ } Ċ Ċ fun Ġcreate Hyper link WithContext Help ( action Wrapper : ĠToolbar Action Wrapper ): ĠJPanel Ġ{ ĊĠ Ġval Ġaction Ġ= Ġaction Wrapper . action ĊĠ Ġval Ġhyper link Label Ġ= ĠHyper link Label ( action Wrapper . text . get ()) ĊĠ Ġhyper link Label . add Hyper link Listener Ġ{ ĊĠĠĠ Ġval Ġaction Event Ġ= ĠAn ActionEvent . createFrom An Action ( action , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCON TEXT _ HELP _ ACTION _ PLACE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Manager . getInstance (). getData Context ( hyperlink Label )) ĊĠĠĠ Ġaction . action Performed ( action Event ) ĊĠ Ġ} ĊĊĠ Ġval Ġhyper link Panel Ġ= ĠJPanel ( Flow Layout ( Flow Layout . LEFT , Ġ 0 , Ġ 0 )). apply Ġ{ ĊĠĠĠ Ġis Opaque Ġ= Ġfalse ĊĠ Ġ} ĊĠ Ġhyper link Panel . add ( hyperlink Label ) ĊĊĠ Ġif Ġ( action Ġis ĠContext Help Provider ) Ġ{ ĊĠĠĠ Ġhyper link Panel . add ( action . create Context Help Component ()) ĊĠ Ġ} ĊĊĠ Ġreturn Ġhyper link Panel Ċ } Ċ Ċ fun Ġget Color From Scheme ( color Id : ĠString , Ġdefault : ĠColor ): ĠJ B Color Ġ{ ĊĠ Ġval Ġlook And Feel Ġ= ĠL af Manager . getInstance (). current Look And Feel ĊĠ Ġif Ġ( look And Feel Ġis ĠUIT heme Based Look And Feel Info Ġ&& ĠUI Manager . getColor ( color Id ) Ġ== Ġnull ) Ġ{ ĊĠĠĠ ĠLOG . warn (" Cannot Ġfind Ġ$ color Id Ġfor Ġ${ look And Feel . name }") ĊĠ Ġ} ĊĠ Ġreturn ĠJ B Color Ġ{ ĠUI Manager . getColor ( color Id ) Ġ?: Ġdefault Ġ} Ċ } Ċ