Skip to content

Commit 09aae3b

Browse files
committed
Added "Show time in menu bar" function
1 parent c6c9ce1 commit 09aae3b

File tree

5 files changed

+69
-11
lines changed

5 files changed

+69
-11
lines changed

TinyTimeTracker/TinyTimeTracker.xcodeproj/project.pbxproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@
330330
"$(inherited)",
331331
"@executable_path/../Frameworks",
332332
);
333-
MARKETING_VERSION = 1.1.2;
333+
MARKETING_VERSION = 1.2.0;
334334
PRODUCT_BUNDLE_IDENTIFIER = nyok.TinyTimeTracker;
335335
PRODUCT_NAME = "$(TARGET_NAME)";
336336
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -360,7 +360,7 @@
360360
"$(inherited)",
361361
"@executable_path/../Frameworks",
362362
);
363-
MARKETING_VERSION = 1.1.2;
363+
MARKETING_VERSION = 1.2.0;
364364
PRODUCT_BUNDLE_IDENTIFIER = nyok.TinyTimeTracker;
365365
PRODUCT_NAME = "$(TARGET_NAME)";
366366
PROVISIONING_PROFILE_SPECIFIER = "";

TinyTimeTracker/TinyTimeTracker/AppDelegate.swift

+43-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import LaunchAtLogin
88

99
@main
1010
class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
11-
11+
let userDefaults = UserDefaults.standard
1212
let appName = Bundle.main.infoDictionary?["CFBundleName"] as! String
1313
var appRunning: Bool = false
1414
var appTimerWorkRunning: Bool = false
@@ -22,13 +22,16 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
2222
let iconWork = NSImage(named:NSImage.Name("IconWork"))
2323
let iconRest = NSImage(named:NSImage.Name("IconRest"))
2424
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
25+
let font = NSFont(name: "Helvetica", size: 12)
2526

2627
@IBOutlet weak var statusMenu: NSMenu!
2728
@IBOutlet weak var startStopMenuItem: NSMenuItem!
2829
@IBOutlet weak var changeModeMenuItem: NSMenuItem!
2930
@IBOutlet weak var statisticsMenuItem: NSMenuItem!
3031
@IBOutlet weak var workTimerMenuItem: NSMenuItem!
3132
@IBOutlet weak var restTimerMenuItem: NSMenuItem!
33+
@IBOutlet weak var settingsMenuItem: NSMenuItem!
34+
@IBOutlet weak var showTimeTitleMenuItem: NSMenuItem!
3235
@IBOutlet weak var launchAtLoginMenuItem: NSMenuItem!
3336
@IBOutlet weak var quitMenuItem: NSMenuItem!
3437

@@ -62,6 +65,11 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
6265
NSWorkspace.shared.open(logFile)
6366
}
6467

68+
@IBAction func showTimeTitleClicked(_ sender: NSMenuItem) {
69+
sender.state = sender.state == .on ? .off : .on
70+
userDefaults.set(sender.state, forKey: "showTimeTitleMenuValue")
71+
}
72+
6573
@IBAction func launchAtLoginClicked(_ sender: NSMenuItem) {
6674
sender.state = sender.state == .on ? .off : .on
6775
if sender.state == .on {
@@ -84,6 +92,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
8492
}
8593

8694
func applicationDidFinishLaunching(_ aNotification: Notification) {
95+
userDefaults.register(defaults: ["showTimeTitleMenuValue": false])
8796
createStatusMenu()
8897
}
8998

@@ -95,18 +104,27 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
95104
}
96105

97106
func createStatusMenu() {
107+
statusItem.button!.font = font
98108
statusItem.button?.image = icon
109+
statusItem.button?.imagePosition = NSControl.ImagePosition.imageRight
99110
icon?.isTemplate = true
100111
iconWork?.isTemplate = true
101112
iconRest?.isTemplate = true
102113
statusItem.menu = statusMenu
114+
if userDefaults.bool(forKey: "showTimeTitleMenuValue") {
115+
showTimeTitleMenuItem.state = .on
116+
} else {
117+
showTimeTitleMenuItem.state = .off
118+
}
103119
if LaunchAtLogin.isEnabled {
104120
launchAtLoginMenuItem.state = .on
105121
} else {
106122
launchAtLoginMenuItem.state = .off
107123
}
108124
changeModeMenuItem.title = NSLocalizedString("menuTextChangemode", comment: "")
109125
statisticsMenuItem.title = NSLocalizedString("menuTextStatistics", comment: "")
126+
settingsMenuItem.title = NSLocalizedString("menuTextSettings", comment: "")
127+
showTimeTitleMenuItem.title = NSLocalizedString("menuTextShowTimeTitle", comment: "")
110128
launchAtLoginMenuItem.title = NSLocalizedString("menuTextLaunchAtLogin", comment: "")
111129
quitMenuItem.title = NSLocalizedString("menuTextQuit", comment: "")
112130
}
@@ -138,9 +156,8 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
138156
func startTimerWork() {
139157
appRunning = true
140158
appTimerWorkRunning = true
141-
statusItem.button?.image = iconWork
142159
timerWork = Timer(
143-
timeInterval: 1,
160+
timeInterval: 0.3,
144161
target: self,
145162
selector: #selector(updateTextWorkTimerMenuItem),
146163
userInfo: nil,
@@ -155,14 +172,20 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
155172
elapsedTimeWork += mSecond
156173
let hms = secToTime(sec: elapsedTimeWork)
157174
workTimerMenuItem.title = NSLocalizedString("textWork", comment: "") + String(": ") + hms
175+
statusItem.button?.image = iconWork
176+
if showTimeTitleMenuItem.state == .on {
177+
let timeTitle = secToTimeTitle(sec: elapsedTimeWork)
178+
statusItem.button?.title = timeTitle
179+
} else {
180+
statusItem.button?.title = ""
181+
}
158182
}
159183

160184
func startTimerRest() {
161185
appRunning = true
162186
appTimerRestRunning = true
163-
statusItem.button?.image = iconRest
164187
timerRest = Timer(
165-
timeInterval: 1,
188+
timeInterval: 0.3,
166189
target: self,
167190
selector: #selector(updateTextRestTimerMenuItem),
168191
userInfo: nil,
@@ -177,6 +200,13 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
177200
elapsedTimeRest += mSecond
178201
let hms = secToTime(sec: elapsedTimeRest)
179202
restTimerMenuItem.title = NSLocalizedString("textRest", comment: "") + String(": ") + hms
203+
statusItem.button?.image = iconRest
204+
if showTimeTitleMenuItem.state == .on {
205+
let timeTitle = secToTimeTitle(sec: elapsedTimeRest)
206+
statusItem.button?.title = timeTitle
207+
} else {
208+
statusItem.button?.title = ""
209+
}
180210
}
181211

182212
func secToTime(sec: Double) -> String {
@@ -186,6 +216,13 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
186216
let hms = String(format:"%02i:%02i:%02i", hours, minutes, seconds)
187217
return hms
188218
}
219+
220+
func secToTimeTitle(sec: Double) -> String {
221+
let hours = Int(sec) / 3600
222+
let minutes = Int(sec) / 60 % 60
223+
let hm = String(format:"%02i:%02i", hours, minutes)
224+
return hm
225+
}
189226

190227
func stopTimerWork() {
191228
appTimerWorkRunning = false
@@ -199,6 +236,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
199236

200237
func stopAllTimer() {
201238
appRunning = false
239+
statusItem.button?.title = ""
202240
stopTimerWork()
203241
stopTimerRest()
204242
}

TinyTimeTracker/TinyTimeTracker/Base.lproj/Main.storyboard

+20-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
<outlet property="launchAtLoginMenuItem" destination="kHe-cK-j9E" id="YjN-ax-Q9e"/>
1616
<outlet property="quitMenuItem" destination="u81-b3-YS7" id="Def-Kc-Oyv"/>
1717
<outlet property="restTimerMenuItem" destination="dmx-g4-gzN" id="9Vc-8P-9Np"/>
18+
<outlet property="settingsMenuItem" destination="UQJ-fn-iel" id="xVL-mX-Z3K"/>
19+
<outlet property="showTimeTitleMenuItem" destination="DiI-su-7jD" id="gJm-Aq-LH2"/>
1820
<outlet property="startStopMenuItem" destination="k7j-Rw-Pdr" id="bR1-t9-XIO"/>
1921
<outlet property="statisticsMenuItem" destination="Ocu-KO-qAu" id="76e-D7-uq2"/>
2022
<outlet property="statusMenu" destination="VwX-F4-3Ia" id="CUE-Ev-wU3"/>
@@ -71,12 +73,26 @@
7173
</connections>
7274
</menuItem>
7375
<menuItem isSeparatorItem="YES" id="uas-QH-cD5"/>
74-
<menuItem title="launchAtLogin" id="kHe-cK-j9E">
76+
<menuItem title="settings" id="UQJ-fn-iel">
7577
<modifierMask key="keyEquivalentModifierMask"/>
76-
<connections>
77-
<action selector="launchAtLoginClicked:" target="Voe-Tx-rLC" id="ibo-Dk-ZVX"/>
78-
</connections>
78+
<menu key="submenu" id="Yz8-dx-ju2">
79+
<items>
80+
<menuItem title="showTimeTitle" id="DiI-su-7jD">
81+
<modifierMask key="keyEquivalentModifierMask"/>
82+
<connections>
83+
<action selector="showTimeTitleClicked:" target="Voe-Tx-rLC" id="NA5-Uk-5gC"/>
84+
</connections>
85+
</menuItem>
86+
<menuItem title="launchAtLogin" id="kHe-cK-j9E">
87+
<modifierMask key="keyEquivalentModifierMask"/>
88+
<connections>
89+
<action selector="launchAtLoginClicked:" target="Voe-Tx-rLC" id="ibo-Dk-ZVX"/>
90+
</connections>
91+
</menuItem>
92+
</items>
93+
</menu>
7994
</menuItem>
95+
<menuItem isSeparatorItem="YES" id="nXO-s1-g1x"/>
8096
<menuItem title="quit" keyEquivalent="q" id="u81-b3-YS7">
8197
<connections>
8298
<action selector="quitClicked:" target="Voe-Tx-rLC" id="tIy-Hj-ZOV"/>

TinyTimeTracker/TinyTimeTracker/en.lproj/Localizable.strings

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
"menuTextStop" = "Stop";
88
"menuTextChangemode" = "Change mode";
99
"menuTextStatistics" = "Statistics";
10+
"menuTextSettings" = "Settings";
11+
"menuTextShowTimeTitle" = "Show time in menubar";
1012
"menuTextLaunchAtLogin" = "Launch at login";
1113
"menuTextQuit" = "Quit";
1214
"textWork" = "Work";

TinyTimeTracker/TinyTimeTracker/ru.lproj/Localizable.strings

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
"menuTextStop" = "Стоп";
88
"menuTextChangemode" = "Сменить режим";
99
"menuTextStatistics" = "Статистика";
10+
"menuTextSettings" = "Настройки";
11+
"menuTextShowTimeTitle" = "Показывать время";
1012
"menuTextLaunchAtLogin" = "Запускать при старте";
1113
"menuTextQuit" = "Выход";
1214
"textWork" = "Работа";

0 commit comments

Comments
 (0)