@ -77,7 +77,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
] ,
] ,
" default " : [
" default " : [
" nice " : " Failed to calculate. " ,
" nice " : " Failed to calculate. " ,
" icon " : " 🌙 "
" icon " : " ⨂ "
]
]
]
]
@ -89,6 +89,9 @@ class AppDelegate: NSObject, NSApplicationDelegate {
// m a k e s u r e a p p l e t s t a y s i n m e m o r y
// m a k e s u r e a p p l e t s t a y s i n m e m o r y
var statusBarItem : NSStatusItem ?
var statusBarItem : NSStatusItem ?
// c r e a t e a m e n u f o r t h e i c o n
let statusBarMenu = NSMenu ( title : " LunaMac Menu " )
// c r e a t e e m p t y t i m e r f o r e v e n t l o o p
// c r e a t e e m p t y t i m e r f o r e v e n t l o o p
var lunaTimer = Timer ( )
var lunaTimer = Timer ( )
@ -98,6 +101,9 @@ class AppDelegate: NSObject, NSApplicationDelegate {
// i s t h e c h a n g e l o g o p e n ?
// i s t h e c h a n g e l o g o p e n ?
var logOpen = false
var logOpen = false
// u s e r s e t t i n g s
let defaults = UserDefaults . standard
func applicationDidFinishLaunching ( _ aNotification : Notification ) {
func applicationDidFinishLaunching ( _ aNotification : Notification ) {
// b u i l d t h e i c o n a n d m e n u
// b u i l d t h e i c o n a n d m e n u
updateIcon ( )
updateIcon ( )
@ -116,42 +122,76 @@ class AppDelegate: NSObject, NSApplicationDelegate {
}
}
@objc func buildMenu ( key : String = " default " ) {
@objc func buildMenu ( key : String = " default " ) {
// c l e a r t h e m e n u
statusBarMenu . removeAllItems ( )
statusBarItem ? . isVisible = false
// g e t s y s t e m - w i d e m e n u b a r
// g e t s y s t e m - w i d e m e n u b a r
let statusBar = NSStatusBar . system
let statusBar = NSStatusBar . system
// s e t i c o n s i z e t o s q u a r e
// s e t i c o n s i z e t o s q u a r e
statusBarItem = statusBar . statusItem ( withLength : NSStatusItem . squareLength )
statusBarItem = statusBar . statusItem ( withLength : NSStatusItem . squareLength )
// s e t i c o n u s i n g e m o j i
// i f i c o n P r e f i s s e t t o e m o j i
// s t a t u s B a r I t e m ? . b u t t o n ? . t i t l e = p h a s e A r r a y [ k e y ] ? [ " i c o n " ] a s S t r i n g ? ? ? " 🌙 "
if ( defaults . string ( forKey : " iconPref " ) = = " emoji " ) {
// c h a n g e f o n t s i z e
var suffix = " "
// s t i l l n o t a l i g n e d p r o p e r l y
let iconString = phaseArray [ key ] ? [ " icon " ] as String ? ? ? " ⨂ "
// c h e c k f o r d a r k m o d e a n d s e t t h e r i g h t i m a g e f i l e
let iconAttrib = [ NSAttributedString . Key . font : NSFont . menuFont ( ofSize : 12.0 ) ]
if #available ( OSX 10.14 , * ) {
let iconAttrString = NSAttributedString ( string : iconString , attributes : iconAttrib )
let darkMode = UserDefaults . standard . string ( forKey : " AppleInterfaceStyle " )
statusBarItem ? . button ? . attributedTitle = iconAttrString
}
// o t h e r w i s e u s e i c o n s
else {
var suffix = " "
// i f k e y i s n e w 2 , r e n a m e t o n e w
var key2 = key . contains ( " 2 " ) ? " new " : key
if darkMode = = " Dark " {
// c h e c k f o r d a r k m o d e a n d s e t t h e r i g h t i m a g e f i l e
suffix += " -dark "
if #available ( OSX 10.14 , * ) {
let darkMode = UserDefaults . standard . string ( forKey : " AppleInterfaceStyle " )
if darkMode = = " Dark " {
// i f t h e m e i s s e t t o d a r k a l t m a k e a d j u s t m e n t s
if ( defaults . string ( forKey : " iconPref " ) = = " darkalt " ) {
switch ( key2 ) {
case " new " :
key2 = " full "
break
case " full " :
key2 = " new "
break
case " firstq " :
key2 = " lastq "
break
case " lastq " :
key2 = " firstq "
break
case " wanc " , " wang " , " waxc " , " waxg " :
suffix += " -alt "
break
default :
break
}
}
suffix += " -dark "
}
}
}
// s e t i m a g e f i l e n a m e
let imgName = key2 + suffix + " .png "
statusBarItem ? . button ? . image = NSImage ( named : imgName )
}
}
// i f k e y i s n e w 2 , r e n a m e t o n e w
statusBarItem ? . isVisible = true
let key2 = key . contains ( " 2 " ) ? " new " : key
// s e t i m a g e f i l e n a m e
let imgName = key2 + suffix + " .png "
statusBarItem ? . button ? . image = NSImage ( named : imgName )
// c r e a t e a m e n u f o r t h e i c o n
let statusBarMenu = NSMenu ( title : " LunaMac Menu " )
// a d d t h e m e n u t o t h e m e n u b a r i c o n
// a d d t h e m e n u t o t h e m e n u b a r i c o n
statusBarItem ? . menu = statusBarMenu
statusBarItem ? . menu = statusBarMenu
let topTxt = phaseArray [ " default " ] ? [ " nice " ] as String ? ? ? " "
let topTxt = phaseArray [ " default " ] ? [ " nice " ] as String ? ? ? " Failed to calculate. "
// a d d m e n u i t e m s t o t h e m e n u
// a d d m e n u i t e m s t o t h e m e n u
if ( ! topTxt . isEmpty ) {
if ( ! topTxt . isEmpty ) {
@ -172,6 +212,63 @@ class AppDelegate: NSObject, NSApplicationDelegate {
statusBarMenu . addItem ( NSMenuItem . separator ( ) )
statusBarMenu . addItem ( NSMenuItem . separator ( ) )
// c r e a t e m e n u i t e m t o h o l d s u b m e n u
let prefMenu = NSMenu ( title : " Prefs " )
// d e f a u l t
let optDefault = NSMenuItem (
title : " Default " ,
action : #selector ( setPref ) ,
keyEquivalent : " "
)
// a l t e r n a t e d a r k
let optDarkAlt = NSMenuItem (
title : " Alternate Dark " ,
action : #selector ( setPref ) ,
keyEquivalent : " "
)
// e m o j i
let optEmoji = NSMenuItem (
title : " Emoji " ,
action : #selector ( setPref ) ,
keyEquivalent : " "
)
// m a k e s u r e t h e r i g h t m e n u i t e m i s c h e c k e d
switch ( defaults . string ( forKey : " iconPref " ) ) {
case " default " :
// s t a n d a r d i c o n s
optDefault . state = NSControl . StateValue . on
break
case " darkalt " :
// i n v e r t e d d a r k m o d e i c o n s
optDarkAlt . state = NSControl . StateValue . on
break
case " emoji " :
// e m o j i i c o n s
optEmoji . state = NSControl . StateValue . on
break
default :
// d e f a u l t t o s t a n d a r d i c o n s
optDefault . state = NSControl . StateValue . on
break
}
prefMenu . addItem ( optDefault )
prefMenu . addItem ( optDarkAlt )
prefMenu . addItem ( optEmoji )
let prefMenuItem = NSMenuItem (
title : " Icon Style " ,
action : nil ,
keyEquivalent : " "
)
statusBarMenu . addItem ( prefMenuItem )
statusBarMenu . setSubmenu ( prefMenu , for : prefMenuItem )
statusBarMenu . addItem (
statusBarMenu . addItem (
withTitle : " About LunaMac... " ,
withTitle : " About LunaMac... " ,
action : #selector ( AppDelegate . showAbout ) ,
action : #selector ( AppDelegate . showAbout ) ,
@ -185,6 +282,26 @@ class AppDelegate: NSObject, NSApplicationDelegate {
)
)
}
}
@objc func setPref ( sender : NSMenuItem ) {
// s e n d e r . t i t l e t e l l s u s w h a t t o d o
switch ( sender . title ) {
case " Default " :
defaults . set ( " default " , forKey : " iconPref " )
break
case " Alternate Dark " :
defaults . set ( " darkalt " , forKey : " iconPref " )
break
case " Emoji " :
defaults . set ( " emoji " , forKey : " iconPref " )
break
default :
break
}
// r e b u i l d t h e m e n u
updateIcon ( )
}
@objc func showAbout ( ) {
@objc func showAbout ( ) {
if ( ! infoOpen ) {
if ( ! infoOpen ) {
// c r e a t e i n f o b o x w i n d o w o b j e c t
// c r e a t e i n f o b o x w i n d o w o b j e c t