/* Ċ Ġ* ĠCopyright Ġ 2 0 2 2 ĠG Ã¡ bor ĠLib rec z . ĠAll ĠRights ĠReserved . Ċ Ġ* ĠCopyright Ġ 2 0 2 2 ĠJetBrains Ġs . r . o . Ġand Ġcontributors . ĠAll ĠRights ĠReserved . Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" Un stable Api Usage ") Ċ Ċ package Ġorg . swift format . plugin Ċ Ċ import Ġcom . intellij . icons . All Icons Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . action System .* Ċ import Ġcom . intellij . openapi . action System . impl . ActionButton Ċ import Ġcom . intellij . openapi . file Chooser . FileChooser Descriptor Ċ import Ġcom . intellij . openapi . project . D umb Aware Action Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . roots . Project File Index Ċ import Ġcom . intellij . openapi . ui .* Ċ import Ġcom . intellij . openapi . ui . TextField With Browse Button Ċ import Ġcom . intellij . openapi . ui . popup . Bal loon Ċ import Ġcom . intellij . openapi . ui . popup . JB Popup Factory Ċ import Ġcom . intellij . openapi . ui . popup . JB Popup Listener Ċ import Ġcom . intellij . openapi . ui . popup . Light weight Window Event Ċ import Ġcom . intellij . openapi . util . Dis poser Ċ import Ġcom . intellij . openapi . util . Icon Loader Ċ import Ġcom . intellij . openapi . vfs . Local FileSystem Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . ui . Layer ed Icon Ċ import Ġcom . intellij . ui . awt . Relative Point Ċ import Ġcom . intellij . ui . components . JB CheckBox Ċ import Ġcom . intellij . ui . dsl . builder .* Ċ import Ġcom . intellij . ui . dsl . builder . Row Ċ import Ġcom . intellij . ui . dsl . grid Layout . Horizontal Align Ċ import Ġcom . intellij . ui . popup . Popup State Ċ import Ġcom . intellij . util . Path Util Ċ import Ġcom . intellij . util . io . exists Ċ import Ġcom . intellij . util . ui .* Ċ import Ġjava . awt . Dimension Ċ import Ġjava . awt . Insets Ċ import Ġjava . nio . file . Path Ċ import Ġjava . util . function . Supplier Ċ import Ġjavax . swing .* Ċ import Ġorg . jetbrains . annotations . System In dependent Ċ Ċ object ĠIcons Ġ{ ĊĠ Ġval Ġge ar With Dropdown Icon Ġ= ĠLayer ed Icon ( All Icons . General . Gear Plain , ĠAll Icons . General . Dropdown ) ĊĠ Ġval Ġge ar With Dropdown Disabled Icon Ġ= ĊĠĠĠĠĠ ĠLayer ed Icon ( ĊĠĠĠĠĠĠĠĠĠ ĠIcon Loader . get Disabled Icon ( All Icons . General . Gear Plain ), ĊĠĠĠĠĠĠĠĠĠ ĠIcon Loader . get Disabled Icon ( All Icons . General . Dropdown )) ĊĊĠ Ġval Ġge ar With Dropdown Error Icon Ġ= ĠLayer ed Icon ( All Icons . General . Error , ĠAll Icons . General . Dropdown ) Ċ } Ċ Ċ fun ĠSwift Format Configurable . create Store As Project File CheckBox (): ĠRow . () Ġ-> ĠCell < JB CheckBox > Ġ{ ĊĠ Ġreturn Ġ{ ĊĠĠĠ Ġval Ġstore As File Gear Button Ġ= Ġcreate Store As File Gear Button () ĊĠĠĠ Ġval Ġstore As Project File CheckBox Ġ= ĊĠĠĠĠĠĠĠ ĠcheckBox (" Store Ġas Ġproject Ġfile "). gap ( Right Gap . SMALL ). apply To Component Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġadd ActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore As File Gear Button . isEnabled Ġ= Ġis Selected ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isSelected Ġ|| Ġcurrent Swift Format ConfigPath . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Swift Format ConfigPath Ġ= Ġproject . dot Ide a FolderPath ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanage Storage File Location () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġcell ( store As File Gear Button ). enabled If ( store As Project File CheckBox . selected ) ĊĊĠĠĠ Ġstore As Project File CheckBox ĊĠ Ġ} Ċ } Ċ Ċ fun ĠSwift Format Configurable . create Store As File Gear Button (): ĠAction Button Ġ{ ĊĠ Ġval Ġstate Ġ= ĠPopup State . for Bal loon () ĊĠ Ġval Ġshow Storage Path Action : ĠAn Action Ġ= ĊĠĠĠĠĠ Ġobject Ġ: ĠD umb Aware Action () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! state . is Recent ly Hidden ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanage Storage File Location ( state ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠ Ġval Ġpresentation Ġ= ĠPresentation (" Manage ĠFile ĠLocation ") ĊĠ Ġpresentation . icon Ġ= ĠIcons . gear With Dropdown Icon ĊĠ Ġpresentation . disabled Icon Ġ= ĠIcons . gear With Dropdown Disabled Icon ĊĊĠ Ġreturn Ġobject Ġ: ĊĠĠĠĠĠ ĠAction Button ( ĊĠĠĠĠĠĠĠĠĠ Ġshow Storage Path Action , ĊĠĠĠĠĠĠĠĠĠ Ġpresentation , ĊĠĠĠĠĠĠĠĠĠ ĠAction Places . UNKNOWN , ĊĠĠĠĠĠĠĠĠĠ ĠAction Toolbar . DEFAULT _ MIN IMUM _ BUTTON _ SIZE ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Icon (): ĠIcon Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( store As Project File CheckBox . component . isSelected Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Error If Bad FolderPath For St oring In Ar bitrary File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject , Ġcurrent Swift Format ConfigPath ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠIcons . gear With Dropdown Error Icon ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsuper . get Icon () ĊĠĠĠĠĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun ĠSwift Format Configurable . popup ( ĊĠĠĠ Ġpath To ErrorMessage : Ġ( String ?) Ġ-> ĠString ?, ĊĠĠĠ Ġui Disposable : ĠDis posable , ĊĠĠĠ Ġclose Popup Action : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull Ċ ): ĠDialog Panel Ġ= ĊĠĠĠ Ġpanel Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġrow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Path TextField ( project , Ġpath To ErrorMessage , Ġui Disposable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgetter Ġ= Ġ:: current Swift Format ConfigPath , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetter Ġ= Ġ{ Ġcurrent Swift Format ConfigPath Ġ= Ġit Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. label (" Store Ġconfiguration Ġfile Ġin :", ĠLabel Position . TOP ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġrow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton (" Done ") Ġ{ Ġclose Popup Action ?. let Ġ{ Ġit 1 Ġ-> Ġit 1 () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. horizontal Align ( Horizontal Align . RIGHT ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġis Focus Cycle Root Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġfocus Traversal Policy Ġ= ĠLayout Focus Traversal Policy () ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ fun ĠSwift Format Configurable . manage Storage File Location ( state : ĠPopup State < Bal loon >? Ġ= Ġnull ) Ġ{ ĊĠ Ġval Ġbal loon Disposable Ġ= ĠDis poser . new Disposable () ĊĠ Ġval Ġpath To ErrorMessage Ġ= Ġ{ Ġpath : ĠString ? Ġ-> ĊĠĠĠ Ġget Error If Bad FolderPath For St oring In Ar bitrary File ( project , Ġpath ) ĊĠ Ġ} ĊĊĠ Ġvar Ġbal loon : ĠBal loon ? Ġ= Ġnull ĊĠ Ġval Ġpopup Ġ= Ġpopup ( path To ErrorMessage , Ġbal loon Disposable ) Ġ{ Ġbal loon ?. hide () Ġ} ĊĠ Ġbal loon Ġ= ĊĠĠĠĠĠ ĠJ B Popup Factory . getInstance () ĊĠĠĠĠĠĠĠĠĠ Ġ. create Bal loon Builder ( popup ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set Dialog Mode ( true ) ĊĠĠĠĠĠĠĠĠĠ Ġ. setBorder Insets ( Insets ( 1 5 , Ġ 1 5 , Ġ 7 , Ġ 1 5 )) ĊĠĠĠĠĠĠĠĠĠ Ġ. setFill Color ( UI Util . get Panel Background ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. set Hide On Action ( false ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set Hide On Link Click ( false ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set Hide On Key Outside ( false ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set Block Click s Through Bal loon ( true ) ĊĠĠĠĠĠĠĠĠĠ Ġ. setRequest Focus ( true ) ĊĠĠĠĠĠĠĠĠĠ Ġ. create Bal loon () ĊĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Animation Enabled ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠJ B Popup Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Closed ( event : ĠLight weight Window Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup . apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠ Ġstate ?. prepare To Show ( bal loon ) ĊĠ Ġbal loon . show ( ĊĠĠĠĠĠ ĠRelative Point . getS outh Of ( store As Project File CheckBox . component ), ĠBal loon . Position . below ) Ċ } Ċ Ċ fun ĠRow . config Path TextField ( ĊĠĠĠ Ġproject : ĠProject , ĊĠĠĠ Ġpath To ErrorMessage : Ġ( String ?) Ġ-> ĠString ?, ĊĠĠĠ Ġui Disposable : ĠDis posable Ċ ): ĠCell < TextField With Browse Button > Ġ= ĊĠĠĠ Ġtext Field With Browse Button ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Select ĠPath ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠFile Chooser Descriptor ( false , Ġtrue , Ġfalse , Ġfalse , Ġfalse , Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis File Visible ( file : ĠVirtual File , Ġshow Hidden Files : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( file . path Ġ== Ġproject . dot Ide a FolderPath ) Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġfile . isDirectory Ġ&& Ġsuper . isFile Visible ( file , Ġshow Hidden Files ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis File Selectable ( file : ĠVirtual File ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( file . path Ġ== Ġproject . dot Ide a FolderPath ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . isDirectory Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . isFile Selectable ( file ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProject File Index . getInstance ( project ). isIn Content ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ. apply To Component Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġpreferred Size Ġ= ĠDimension ( 5 0 0 , Ġpreferred Size . height ) ĊĊĠĠĠĠĠĠĠĠĠ ĠComponent Validator ( ui Disposable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Validator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSupplier Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= Ġpath To ErrorMessage ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( errorMessage Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠValidation Info ( errorMessage , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Register On Document Listener ( textField ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. install On ( textField ) ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ fun Ġget Error If Bad FolderPath For St oring In Ar bitrary File ( ĊĠĠĠ Ġproject : ĠProject , ĊĠĠĠ Ġpath : Ġ@ System In dependent ĠString ? Ċ ): ĠString ? Ġ{ ĊĠ Ġif Ġ( project . dot Ide a FolderPath Ġ== Ġpath ) Ġ{ ĊĠĠĠ Ġreturn Ġnull ĊĠ Ġ} ĊĊĠ Ġif Ġ( path . isNull OrEmpty ()) Ġ{ ĊĠĠĠ Ġreturn Ġ" Path Ġnot Ġspecified " ĊĠ Ġ} ĊĊĠ Ġif Ġ(! Path . of ( path ). exists ()) Ġ{ ĊĠĠĠ Ġreturn Ġ" Path Ġdoes Ġnot Ġexist " ĊĠ Ġ} ĊĊĠ Ġvar Ġfile Ġ= ĠLocal FileSystem . getInstance (). find File By Path ( path ) ĊĠ Ġif Ġ( file Ġ!= Ġnull Ġ&& Ġ! file . isDirectory ) Ġ{ ĊĠĠĠ Ġreturn Ġ" Folder Ġpath Ġexpected " ĊĠ Ġ} ĊĊĠ Ġval Ġfolder Name Ġ= ĠPath Util . get FileName ( path ) ĊĠ Ġval Ġparent Path Ġ= ĠPath Util . getParent Path ( path ) ĊĠ Ġwhile Ġ( file Ġ== Ġnull Ġ&& Ġparent Path . isNotEmpty ()) Ġ{ ĊĠĠĠ Ġif Ġ(! Path Util . isValid FileName ( folder Name )) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġ" Folder Ġpath Ġexpected " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfile Ġ= ĠLocal FileSystem . getInstance (). find File By Path ( parent Path ) ĊĠ Ġ} ĊĊĠ Ġif Ġ( file Ġ== Ġnull ) Ġ{ ĊĠĠĠ Ġreturn Ġ" Folder Ġmust Ġbe Ġwithin Ġthe Ġproject " ĊĠ Ġ} ĊĊĠ Ġif Ġ(! file . isDirectory ) Ġ{ ĊĠĠĠ Ġreturn Ġ" Folder Ġpath Ġexpected " ĊĠ Ġ} ĊĊĠ Ġreturn Ġif Ġ( Project File Index . getInstance ( project ). getContent Root For File ( file , Ġtrue ) Ġ== Ġnull ) Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( Project File Index . getInstance ( project ). getContent Root For File ( file , Ġfalse ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġ" Folder Ġmust Ġbe Ġwithin Ġthe Ġproject " ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġ" Folder Ġis Ġexcluded . ĠSelect Ġa Ġfolder Ġwithin Ġthe Ġproject " ĊĠĠĠ Ġ} ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġnull ĊĠ Ġ} Ċ } Ċ