Compare commits

..

No commits in common. "gh-pages" and "master" have entirely different histories.

35 changed files with 4056 additions and 75 deletions

View file

@ -0,0 +1,2 @@
/* Localized versions of Info.plist keys */

1586
English.lproj/MainMenu.xib Normal file

File diff suppressed because it is too large Load diff

BIN
Icon.icns Normal file

Binary file not shown.

3
README Normal file
View file

@ -0,0 +1,3 @@
== Timr
Timr is a simple timer for OS X.

53
Timer.h Normal file
View file

@ -0,0 +1,53 @@
//
// Timer.h
//
// Created by Jeena on 15.12.09.
// Copyright 2009 Jeena Paradies. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface Timer : NSObject {
IBOutlet NSButton *hour1;
IBOutlet NSButton *hour2;
IBOutlet NSButton *minute1;
IBOutlet NSButton *minute2;
IBOutlet NSButton *second1;
IBOutlet NSButton *second2;
IBOutlet NSButton *start;
IBOutlet NSButton *clear;
NSMutableArray *digits;
NSImage *colon;
NSImage *no_colon;
NSSound *alarmSound;
NSSound *clickSound;
NSSound *clearSound;
int remainingSeconds;
bool pause;
bool isAlarm;
bool cleared;
bool ongoing;
NSTimer *repeatingTimer;
id<NSObject> action;
}
@property (assign) NSTimer *repeatingTimer;
- (id)init;
- (void)applicationLoaded:(id)sender;
- (void)alarm:(id)sender;
- (void)setDigitsForTime:(int)time;
- (void)clearNow;
- (IBAction)startOrPause:(NSButton *)sender;
- (IBAction)changeDigit:(NSButton *)sender;
- (IBAction)clearNow:(id)sender;
- (void)startRepeatingTimer:(id)sender;
- (void)stopRepeatingTimer:(id)sender;
@end

234
Timer.m Normal file
View file

@ -0,0 +1,234 @@
//
// Timer.m
//
// Created by Jeena on 15.12.09.
// Copyright 2009 Jeena Paradies. All rights reserved.
// sound from http://www.flashkit.com/soundfx/Electronic/Alarms/Alarm_cl-Liquid-8852/index.php
// click sound from http://free-loops.com/download-free-loop-7744.html
//
#import "Timer.h"
@implementation Timer
@synthesize repeatingTimer;
- (id)init {
if (self = [super init]) {
digits = [[NSMutableArray alloc] init];
for(int i = 0; i <= 9; i++) {
[digits addObject:[NSImage imageNamed:[NSString stringWithFormat:@"digit-%i.png", i]]];
}
colon = [[NSImage imageNamed:@"colon.png"] retain];
no_colon = [[NSImage imageNamed:@"no_colon.png"] retain];
alarmSound = [NSSound soundNamed:@"alarm.wav"];
[alarmSound retain];
[alarmSound setLoops:YES];
[alarmSound setVolume:1];
clickSound = [NSSound soundNamed:@"click.wav"];
[clickSound retain];
[clickSound setLoops:NO];
[clickSound setVolume:0.2];
clearSound = [NSSound soundNamed:@"clear.wav"];
[clearSound retain];
[clearSound setLoops:NO];
[clearSound setVolume:0.2];
remainingSeconds = 0;
isAlarm = NO;
cleared = NO;
ongoing = NO;
[clearSound play];
}
return self;
}
- (void)dealloc {
[digits release];
[colon release];
[no_colon release];
[clickSound release];
[clearSound release];
[super dealloc];
}
- (void)applicationLoaded:(id)sender {
[(NSButtonCell *)[hour1 cell] setHighlightsBy:NSContentsCellMask];
[(NSButtonCell *)[hour2 cell] setHighlightsBy:NSContentsCellMask];
[(NSButtonCell *)[minute1 cell] setHighlightsBy:NSContentsCellMask];
[(NSButtonCell *)[minute2 cell] setHighlightsBy:NSContentsCellMask];
[(NSButtonCell *)[second1 cell] setHighlightsBy:NSContentsCellMask];
[(NSButtonCell *)[second2 cell] setHighlightsBy:NSContentsCellMask];
[(NSButtonCell *)[start cell] setHighlightsBy:NSContentsCellMask];
[(NSButtonCell *)[clear cell] setHighlightsBy:NSContentsCellMask];
[self clearNow];
}
- (IBAction)startOrPause:(NSButton *)sender {
[clickSound play];
if (isAlarm) {
[self stopRepeatingTimer:self];
[self clearNow];
ongoing = NO;
} else {
if (!ongoing) {
[self startRepeatingTimer:self];
[clear setTransparent:YES];
ongoing = YES;
cleared = NO;
} else {
[self stopRepeatingTimer:self];
[clear setTransparent:NO];
ongoing = NO;
}
}
}
- (void)clearNow:(id)sender {
[self clearNow];
[clear setTransparent:YES];
[clearSound play];
[[[NSApplication sharedApplication] dockTile] setBadgeLabel:nil];
}
- (void)clearNow {
remainingSeconds = [[NSUserDefaults standardUserDefaults] integerForKey:@"defaultTime"];
[self setDigitsForTime:remainingSeconds];
cleared = YES;
[[[NSApplication sharedApplication] dockTile] setBadgeLabel:nil];
}
- (void)tick:(NSTimer*)theTimer {
[self setDigitsForTime:remainingSeconds];
remainingSeconds -= 1;
if (remainingSeconds < 0) {
[theTimer invalidate];
self.repeatingTimer = nil;
[self alarm:self];
cleared = NO;
}
}
- (void)setDigitsForTime:(int)time {
int hd2, hd1, md2, md1, sd2, sd1, hours, minutes, seconds;
hours = time / 3600;
hd1 = hours % 10;
hd2 = (hours - hd1) / 10;
minutes = (time - (hours * 3600)) / 60;
md1 = minutes % 10;
md2 = (minutes - md1) / 10;
seconds = time - (hours * 3600) - (minutes * 60);
sd1 = seconds % 10;
sd2 = (seconds - sd1) / 10;
hour2.image = [digits objectAtIndex:hd2];
hour1.image = [digits objectAtIndex:hd1];
minute2.image = [digits objectAtIndex:md2];
minute1.image = [digits objectAtIndex:md1];
second2.image = [digits objectAtIndex:sd2];
second1.image = [digits objectAtIndex:sd1];
NSString *badge = [NSString stringWithFormat:@"%i%i:%i%i", hd2, hd1, md2, md1];
[[[NSApplication sharedApplication] dockTile] setBadgeLabel:badge];
}
- (void)alarm:(id)sender {
isAlarm = YES;
if (cleared == NO) {
[alarmSound play];
[self performSelector:@selector(alarm:) withObject:self afterDelay:1];
} else {
[alarmSound stop];
isAlarm = NO;
}
}
- (void)startRepeatingTimer:(id)sender {
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1
target:self selector:@selector(tick:)
userInfo:nil repeats:YES];
self.repeatingTimer = timer;
action = [[NSProcessInfo processInfo] beginActivityWithOptions:NSActivityUserInitiated reason:@"Timr needs to run every second"];
[action retain];
}
- (void)stopRepeatingTimer:(id)sender {
[repeatingTimer invalidate];
self.repeatingTimer = nil;
[[NSProcessInfo processInfo] endActivity:action];
[action release];
}
- (IBAction)changeDigit:(NSButton *)sender {
if (repeatingTimer == nil) {
[clickSound play];
int time = remainingSeconds;
int hd2, hd1, md2, md1, sd2, sd1, hours, minutes, seconds;
hours = time / 3600;
hd1 = hours % 10;
hd2 = (hours - hd1) / 10;
minutes = (time - (hours * 3600)) / 60;
md1 = minutes % 10;
md2 = (minutes - md1) / 10;
seconds = time - (hours * 3600) - (minutes * 60);
sd1 = seconds % 10;
sd2 = (seconds - sd1) / 10;
if (sender == hour2) {
hd2 = (hd2 + 1) % 10;
} else if (sender == hour1) {
hd1 = (hd1 + 1) % 10;
} else if (sender == minute2) {
md2 = (md2 + 1) % 6;
} else if (sender == minute1) {
md1 = (md1 + 1) % 10;
} else if (sender == second2) {
sd2 = (sd2 + 1) % 6;
} else if (sender == second1) {
sd1 = (sd1 + 1) % 10;
}
remainingSeconds = hd2 * 3600 * 10 + hd1 * 3600 + md2 * 60 * 10 + md1 * 60 + sd2 * 10 + sd1;
[[NSUserDefaults standardUserDefaults] setInteger:remainingSeconds forKey:@"defaultTime"];
[self clearNow];
}
}
@end

34
Timr-Info.plist Normal file
View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string>Icon.icns</string>
<key>CFBundleIdentifier</key>
<string>net.jeena.apps.Timr</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.1</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSMinimumSystemVersion</key>
<string>10.5</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>

1400
Timr.xcodeproj/jeena.mode1v3 Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,275 @@
// !$*UTF8*$!
{
089C165DFE840E0CC02AAC07 /* English */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {849, 696}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{0, 45}";
sepNavWindowFrame = "{{38, 70}, {1622, 1082}}";
};
};
1F12DEC412D7AD0B00A4538A /* PlistBookmark */ = {
isa = PlistBookmark;
fRef = 8D1107310486CEB800E47090 /* Timr-Info.plist */;
fallbackIsa = PBXBookmark;
isK = 0;
kPath = (
);
name = "/Users/jeena/Projects/Timr/Timr-Info.plist";
rLen = 0;
rLoc = 9223372036854775807;
};
1F12DEC512D7AD0B00A4538A /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 1F4C162C10D7CE3B0002BD95 /* digit-5.png */;
};
1F12DEC612D7AD0B00A4538A /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 1F4C162C10D7CE3B0002BD95 /* digit-5.png */;
};
1F4C161810D7C99B0002BD95 /* Timer.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {849, 1016}}";
sepNavSelRange = "{1003, 0}";
sepNavVisRange = "{0, 1041}";
};
};
1F4C161910D7C99B0002BD95 /* Timer.m */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {849, 3435}}";
sepNavSelRange = "{2563, 0}";
sepNavVisRange = "{1595, 1529}";
};
};
1F4C192710D854F20002BD95 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 1F4C161910D7C99B0002BD95 /* Timer.m */;
name = "Timer.m: 111";
rLen = 0;
rLoc = 2616;
rType = 0;
vrLen = 1447;
vrLoc = 2471;
};
1F4C192810D854F20002BD95 /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 1F4C192110D853BA0002BD95 /* Icon.icns */;
};
1F4F442C10D85CDB00B3E297 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 1F4C161810D7C99B0002BD95 /* Timer.h */;
name = "Timer.h: 11";
rLen = 0;
rLoc = 168;
rType = 0;
vrLen = 905;
vrLoc = 0;
};
1F4F442D10D85CDB00B3E297 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 256AC3D80F4B6AC300CF3369 /* TimrAppDelegate.h */;
name = "TimrAppDelegate.h: 7";
rLen = 0;
rLoc = 129;
rType = 0;
vrLen = 480;
vrLoc = 0;
};
1F4F442E10D85CDB00B3E297 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 256AC3D90F4B6AC300CF3369 /* TimrAppDelegate.m */;
name = "TimrAppDelegate.m: 2";
rLen = 0;
rLoc = 7;
rType = 0;
vrLen = 390;
vrLoc = 0;
};
1F4F442F10D85CDB00B3E297 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 29B97316FDCFA39411CA2CEA /* main.m */;
name = "main.m: 9";
rLen = 0;
rLoc = 132;
rType = 0;
vrLen = 241;
vrLoc = 0;
};
1F4F443010D85CDB00B3E297 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 089C165DFE840E0CC02AAC07 /* English */;
name = "InfoPlist.strings: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 45;
vrLoc = 0;
};
1FB3489F10D7B805003E34A4 /* Timr */ = {
isa = PBXExecutable;
activeArgIndices = (
);
argumentStrings = (
);
autoAttachOnCrash = 1;
breakpointsEnabled = 0;
configStateDict = {
};
customDataFormattersEnabled = 1;
dataTipCustomDataFormattersEnabled = 1;
dataTipShowTypeColumn = 1;
dataTipSortType = 0;
debuggerPlugin = GDBDebugging;
disassemblyDisplayState = 0;
dylibVariantSuffix = "";
enableDebugStr = 1;
environmentEntries = (
);
executableSystemSymbolLevel = 0;
executableUserSymbolLevel = 0;
libgmallocEnabled = 0;
name = Timr;
savedGlobals = {
};
showTypeColumn = 0;
sourceDirectories = (
);
variableFormatDictionary = {
};
};
1FB348B110D7B81C003E34A4 /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
1FB348B210D7B81C003E34A4 /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
256AC3D80F4B6AC300CF3369 /* TimrAppDelegate.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {849, 713}}";
sepNavSelRange = "{561, 0}";
sepNavVisRange = "{0, 574}";
};
};
256AC3D90F4B6AC300CF3369 /* TimrAppDelegate.m */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {849, 690}}";
sepNavSelRange = "{448, 0}";
sepNavVisRange = "{0, 493}";
};
};
29B97313FDCFA39411CA2CEA /* Project object */ = {
activeBuildConfigurationName = Release;
activeExecutable = 1FB3489F10D7B805003E34A4 /* Timr */;
activeTarget = 8D1107260486CEB800E47090 /* Timr */;
addToTargets = (
8D1107260486CEB800E47090 /* Timr */,
);
codeSenseManager = 1FB348B210D7B81C003E34A4 /* Code sense */;
executables = (
1FB3489F10D7B805003E34A4 /* Timr */,
);
perUserDictionary = {
PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
671,
20,
48,
43,
43,
20,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
PBXFileDataSource_Target_ColumnID,
);
};
PBXConfiguration.PBXFileTableDataSource3.PBXFindDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFindDataSource_LocationID;
PBXFileTableDataSourceColumnWidthsKey = (
200,
685,
);
PBXFileTableDataSourceColumnsKey = (
PBXFindDataSource_MessageID,
PBXFindDataSource_LocationID,
);
};
PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
631,
60,
20,
48,
43,
43,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXTargetDataSource_PrimaryAttribute,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 316104005;
PBXWorkspaceStateSaveDate = 316104005;
};
perUserProjectItems = {
1F12DEC412D7AD0B00A4538A /* PlistBookmark */ = 1F12DEC412D7AD0B00A4538A /* PlistBookmark */;
1F12DEC512D7AD0B00A4538A /* PBXBookmark */ = 1F12DEC512D7AD0B00A4538A /* PBXBookmark */;
1F12DEC612D7AD0B00A4538A /* PBXBookmark */ = 1F12DEC612D7AD0B00A4538A /* PBXBookmark */;
1F4C192710D854F20002BD95 /* PBXTextBookmark */ = 1F4C192710D854F20002BD95 /* PBXTextBookmark */;
1F4C192810D854F20002BD95 /* PBXBookmark */ = 1F4C192810D854F20002BD95 /* PBXBookmark */;
1F4F442C10D85CDB00B3E297 /* PBXTextBookmark */ = 1F4F442C10D85CDB00B3E297 /* PBXTextBookmark */;
1F4F442D10D85CDB00B3E297 /* PBXTextBookmark */ = 1F4F442D10D85CDB00B3E297 /* PBXTextBookmark */;
1F4F442E10D85CDB00B3E297 /* PBXTextBookmark */ = 1F4F442E10D85CDB00B3E297 /* PBXTextBookmark */;
1F4F442F10D85CDB00B3E297 /* PBXTextBookmark */ = 1F4F442F10D85CDB00B3E297 /* PBXTextBookmark */;
1F4F443010D85CDB00B3E297 /* PBXTextBookmark */ = 1F4F443010D85CDB00B3E297 /* PBXTextBookmark */;
};
sourceControlManager = 1FB348B110D7B81C003E34A4 /* Source Control */;
userBuildSettings = {
};
};
29B97316FDCFA39411CA2CEA /* main.m */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {849, 696}}";
sepNavSelRange = "{132, 0}";
sepNavVisRange = "{0, 241}";
};
};
8D1107260486CEB800E47090 /* Timr */ = {
activeExec = 0;
executables = (
1FB3489F10D7B805003E34A4 /* Timr */,
);
};
8D1107310486CEB800E47090 /* Timr-Info.plist */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {849, 696}}";
sepNavSelRange = "{767, 24}";
sepNavVisRange = "{0, 981}";
};
};
}

View file

@ -0,0 +1,397 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; };
1F12DE5C12D75DB600A4538A /* power-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F12DE5B12D75DB600A4538A /* power-button.png */; };
1F12DE6612D7671600A4538A /* power-button-pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F12DE6512D7671600A4538A /* power-button-pressed.png */; };
1F4C161A10D7C99B0002BD95 /* Timer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4C161910D7C99B0002BD95 /* Timer.m */; };
1F4C163110D7CE3B0002BD95 /* colon.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C162610D7CE3B0002BD95 /* colon.png */; };
1F4C163210D7CE3B0002BD95 /* digit-0.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C162710D7CE3B0002BD95 /* digit-0.png */; };
1F4C163310D7CE3B0002BD95 /* digit-1.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C162810D7CE3B0002BD95 /* digit-1.png */; };
1F4C163410D7CE3B0002BD95 /* digit-2.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C162910D7CE3B0002BD95 /* digit-2.png */; };
1F4C163510D7CE3B0002BD95 /* digit-3.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C162A10D7CE3B0002BD95 /* digit-3.png */; };
1F4C163610D7CE3B0002BD95 /* digit-4.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C162B10D7CE3B0002BD95 /* digit-4.png */; };
1F4C163710D7CE3B0002BD95 /* digit-5.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C162C10D7CE3B0002BD95 /* digit-5.png */; };
1F4C163810D7CE3B0002BD95 /* digit-6.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C162D10D7CE3B0002BD95 /* digit-6.png */; };
1F4C163910D7CE3B0002BD95 /* digit-7.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C162E10D7CE3B0002BD95 /* digit-7.png */; };
1F4C163A10D7CE3B0002BD95 /* digit-8.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C162F10D7CE3B0002BD95 /* digit-8.png */; };
1F4C163B10D7CE3B0002BD95 /* no_colon.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C163010D7CE3B0002BD95 /* no_colon.png */; };
1F4C16BE10D7F0C30002BD95 /* digit-9.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C16BD10D7F0C30002BD95 /* digit-9.png */; };
1F4C176610D810D50002BD95 /* alarm.wav in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C176510D810D50002BD95 /* alarm.wav */; };
1F4C18B010D847310002BD95 /* clear-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C18AF10D847310002BD95 /* clear-button.png */; };
1F4C18C510D84AE20002BD95 /* click.wav in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C18C410D84AE20002BD95 /* click.wav */; };
1F4C190E10D851D70002BD95 /* clear.wav in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C190D10D851D70002BD95 /* clear.wav */; };
1F4C192210D853BA0002BD95 /* Icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C192110D853BA0002BD95 /* Icon.icns */; };
1F85890311C45E5300AEB6A0 /* wood.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F85890211C45E5300AEB6A0 /* wood.png */; };
256AC3DA0F4B6AC300CF3369 /* TimrAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* TimrAppDelegate.m */; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = "<group>"; };
1F12DE5B12D75DB600A4538A /* power-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "power-button.png"; sourceTree = "<group>"; };
1F12DE6512D7671600A4538A /* power-button-pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "power-button-pressed.png"; sourceTree = "<group>"; };
1F4C161810D7C99B0002BD95 /* Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Timer.h; sourceTree = "<group>"; };
1F4C161910D7C99B0002BD95 /* Timer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Timer.m; sourceTree = "<group>"; };
1F4C162610D7CE3B0002BD95 /* colon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = colon.png; sourceTree = "<group>"; };
1F4C162710D7CE3B0002BD95 /* digit-0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "digit-0.png"; sourceTree = "<group>"; };
1F4C162810D7CE3B0002BD95 /* digit-1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "digit-1.png"; sourceTree = "<group>"; };
1F4C162910D7CE3B0002BD95 /* digit-2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "digit-2.png"; sourceTree = "<group>"; };
1F4C162A10D7CE3B0002BD95 /* digit-3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "digit-3.png"; sourceTree = "<group>"; };
1F4C162B10D7CE3B0002BD95 /* digit-4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "digit-4.png"; sourceTree = "<group>"; };
1F4C162C10D7CE3B0002BD95 /* digit-5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "digit-5.png"; sourceTree = "<group>"; };
1F4C162D10D7CE3B0002BD95 /* digit-6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "digit-6.png"; sourceTree = "<group>"; };
1F4C162E10D7CE3B0002BD95 /* digit-7.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "digit-7.png"; sourceTree = "<group>"; };
1F4C162F10D7CE3B0002BD95 /* digit-8.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "digit-8.png"; sourceTree = "<group>"; };
1F4C163010D7CE3B0002BD95 /* no_colon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = no_colon.png; sourceTree = "<group>"; };
1F4C16BD10D7F0C30002BD95 /* digit-9.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "digit-9.png"; sourceTree = "<group>"; };
1F4C176510D810D50002BD95 /* alarm.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = alarm.wav; sourceTree = "<group>"; };
1F4C18AF10D847310002BD95 /* clear-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "clear-button.png"; sourceTree = "<group>"; };
1F4C18C410D84AE20002BD95 /* click.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = click.wav; sourceTree = "<group>"; };
1F4C190D10D851D70002BD95 /* clear.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = clear.wav; sourceTree = "<group>"; };
1F4C192110D853BA0002BD95 /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Icon.icns; sourceTree = "<group>"; };
1F85890211C45E5300AEB6A0 /* wood.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = wood.png; sourceTree = "<group>"; };
256AC3D80F4B6AC300CF3369 /* TimrAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimrAppDelegate.h; sourceTree = "<group>"; };
256AC3D90F4B6AC300CF3369 /* TimrAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TimrAppDelegate.m; sourceTree = "<group>"; };
256AC3F00F4B6AF500CF3369 /* Timr_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Timr_Prefix.pch; sourceTree = "<group>"; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
8D1107310486CEB800E47090 /* Timr-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Timr-Info.plist"; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* Timr.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Timr.app; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8D11072E0486CEB800E47090 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
1F4C161810D7C99B0002BD95 /* Timer.h */,
1F4C161910D7C99B0002BD95 /* Timer.m */,
256AC3D80F4B6AC300CF3369 /* TimrAppDelegate.h */,
256AC3D90F4B6AC300CF3369 /* TimrAppDelegate.m */,
);
name = Classes;
sourceTree = "<group>";
};
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
8D1107320486CEB800E47090 /* Timr.app */,
);
name = Products;
sourceTree = "<group>";
};
1F4C160610D7BF030002BD95 /* Images */ = {
isa = PBXGroup;
children = (
1F12DE6512D7671600A4538A /* power-button-pressed.png */,
1F12DE5B12D75DB600A4538A /* power-button.png */,
1F85890211C45E5300AEB6A0 /* wood.png */,
1F4C18AF10D847310002BD95 /* clear-button.png */,
1F4C162610D7CE3B0002BD95 /* colon.png */,
1F4C162710D7CE3B0002BD95 /* digit-0.png */,
1F4C162810D7CE3B0002BD95 /* digit-1.png */,
1F4C162910D7CE3B0002BD95 /* digit-2.png */,
1F4C162A10D7CE3B0002BD95 /* digit-3.png */,
1F4C162B10D7CE3B0002BD95 /* digit-4.png */,
1F4C162C10D7CE3B0002BD95 /* digit-5.png */,
1F4C162D10D7CE3B0002BD95 /* digit-6.png */,
1F4C162E10D7CE3B0002BD95 /* digit-7.png */,
1F4C162F10D7CE3B0002BD95 /* digit-8.png */,
1F4C16BD10D7F0C30002BD95 /* digit-9.png */,
1F4C163010D7CE3B0002BD95 /* no_colon.png */,
);
name = Images;
sourceTree = "<group>";
};
1F4C18C310D84ABF0002BD95 /* sounds */ = {
isa = PBXGroup;
children = (
1F4C190D10D851D70002BD95 /* clear.wav */,
1F4C18C410D84AE20002BD95 /* click.wav */,
1F4C176510D810D50002BD95 /* alarm.wav */,
);
name = sounds;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* Timr */ = {
isa = PBXGroup;
children = (
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = Timr;
sourceTree = "<group>";
};
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
isa = PBXGroup;
children = (
256AC3F00F4B6AF500CF3369 /* Timr_Prefix.pch */,
29B97316FDCFA39411CA2CEA /* main.m */,
);
name = "Other Sources";
sourceTree = "<group>";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
1F4C192110D853BA0002BD95 /* Icon.icns */,
1F4C18C310D84ABF0002BD95 /* sounds */,
1F4C160610D7BF030002BD95 /* Images */,
8D1107310486CEB800E47090 /* Timr-Info.plist */,
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
1DDD58140DA1D0A300B32029 /* MainMenu.xib */,
);
name = Resources;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
8D1107260486CEB800E47090 /* Timr */ = {
isa = PBXNativeTarget;
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Timr" */;
buildPhases = (
8D1107290486CEB800E47090 /* Resources */,
8D11072C0486CEB800E47090 /* Sources */,
8D11072E0486CEB800E47090 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = Timr;
productInstallPath = "$(HOME)/Applications";
productName = Timr;
productReference = 8D1107320486CEB800E47090 /* Timr.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0510;
};
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Timr" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
Japanese,
French,
German,
);
mainGroup = 29B97314FDCFA39411CA2CEA /* Timr */;
projectDirPath = "";
projectRoot = "";
targets = (
8D1107260486CEB800E47090 /* Timr */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
8D1107290486CEB800E47090 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */,
1F4C163110D7CE3B0002BD95 /* colon.png in Resources */,
1F4C163210D7CE3B0002BD95 /* digit-0.png in Resources */,
1F4C163310D7CE3B0002BD95 /* digit-1.png in Resources */,
1F4C163410D7CE3B0002BD95 /* digit-2.png in Resources */,
1F4C163510D7CE3B0002BD95 /* digit-3.png in Resources */,
1F4C163610D7CE3B0002BD95 /* digit-4.png in Resources */,
1F4C163710D7CE3B0002BD95 /* digit-5.png in Resources */,
1F4C163810D7CE3B0002BD95 /* digit-6.png in Resources */,
1F4C163910D7CE3B0002BD95 /* digit-7.png in Resources */,
1F4C163A10D7CE3B0002BD95 /* digit-8.png in Resources */,
1F4C163B10D7CE3B0002BD95 /* no_colon.png in Resources */,
1F4C16BE10D7F0C30002BD95 /* digit-9.png in Resources */,
1F4C176610D810D50002BD95 /* alarm.wav in Resources */,
1F4C18B010D847310002BD95 /* clear-button.png in Resources */,
1F4C18C510D84AE20002BD95 /* click.wav in Resources */,
1F4C190E10D851D70002BD95 /* clear.wav in Resources */,
1F4C192210D853BA0002BD95 /* Icon.icns in Resources */,
1F85890311C45E5300AEB6A0 /* wood.png in Resources */,
1F12DE5C12D75DB600A4538A /* power-button.png in Resources */,
1F12DE6612D7671600A4538A /* power-button-pressed.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D11072C0486CEB800E47090 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072D0486CEB800E47090 /* main.m in Sources */,
256AC3DA0F4B6AC300CF3369 /* TimrAppDelegate.m in Sources */,
1F4C161A10D7C99B0002BD95 /* Timer.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
089C165DFE840E0CC02AAC07 /* English */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = {
isa = PBXVariantGroup;
children = (
1DDD58150DA1D0A300B32029 /* English */,
);
name = MainMenu.xib;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = Timr_Prefix.pch;
INFOPLIST_FILE = "Timr-Info.plist";
INSTALL_PATH = "$(HOME)/Applications";
MACOSX_DEPLOYMENT_TARGET = 10.5;
ONLY_ACTIVE_ARCH = NO;
PRODUCT_NAME = Timr;
SDKROOT = "";
};
name = Debug;
};
C01FCF4C08A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COMBINE_HIDPI_IMAGES = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = Timr_Prefix.pch;
INFOPLIST_FILE = "Timr-Info.plist";
INSTALL_PATH = "$(HOME)/Applications";
MACOSX_DEPLOYMENT_TARGET = 10.5;
ONLY_ACTIVE_ARCH = NO;
PRODUCT_NAME = Timr;
SDKROOT = "";
};
name = Release;
};
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = "";
};
name = Debug;
};
C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
SDKROOT = "";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Timr" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4B08A954540054247B /* Debug */,
C01FCF4C08A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Timr" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
}

27
TimrAppDelegate.h Normal file
View file

@ -0,0 +1,27 @@
//
// TimrAppDelegate.h
// Timr
//
// Created by Jeena on 15.12.09.
// Copyright 2009 Jeena Paradies. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "Timer.h"
#if (MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_5)
@interface TimrAppDelegate : NSObject
#else
@interface TimrAppDelegate : NSObject <NSApplicationDelegate>
#endif
{
IBOutlet NSWindow *window;
IBOutlet Timer *timer;
IBOutlet NSWindow *aWindow;
}
@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet Timer *timer;
@property (assign) IBOutlet NSWindow *aWindow;
@end

24
TimrAppDelegate.m Normal file
View file

@ -0,0 +1,24 @@
//
// TimrAppDelegate.m
// Timr
//
// Created by Jeena on 15.12.09.
// Copyright 2009 Jeena Paradies. All rights reserved.
//
#import "TimrAppDelegate.h"
@implementation TimrAppDelegate
@synthesize window, timer, aWindow;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
[aWindow setBackgroundColor:[NSColor colorWithPatternImage:[NSImage imageNamed:@"wood.png"]]];
[timer applicationLoaded:self];
[aWindow orderFront:self];
}
@end

7
Timr_Prefix.pch Normal file
View file

@ -0,0 +1,7 @@
//
// Prefix header for all source files of the 'Timr' target in the 'Timr' project
//
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif

BIN
alarm.wav Normal file

Binary file not shown.

BIN
button.psd Normal file

Binary file not shown.

BIN
clear-button.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
clear.wav Normal file

Binary file not shown.

BIN
click.wav Normal file

Binary file not shown.

BIN
colon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 B

BIN
digit-0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 510 B

BIN
digit-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 B

BIN
digit-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 B

BIN
digit-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 B

BIN
digit-4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B

BIN
digit-5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

BIN
digit-6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 508 B

BIN
digit-7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 B

BIN
digit-8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 B

BIN
digit-9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 B

View file

@ -1,75 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>jeena/Timr @ GitHub</title>
<style type="text/css">
html, body { margin: 0 0 2em 0; padding: 0; }
body { font-family: "Lucida Grande", Helvetica, Verdana, sans-serif; background: url(http://pavatar.com/img/body.png) top left repeat-x; }
#container { max-width: 35em; margin: auto; }
h1 { font-size: 3.8em; }
h1 img { vertical-align: bottom; width: 80px; height: 80px; }
h2 { margin-top: 2em; }
h1, h3 { padding-bottom: 0; margin-bottom: 0; }
h3 + p, h1 + p { padding-top: 0; margin-top: 0; }
#fork { position: absolute; top: 0; right: 0; border: 0; }
a img { border: none; }
code, pre { font-size: 1.2em; }
.screenshot { margin-left: -6px; }
.description { font-size: 1.1em; margin: 30px 0; font-style: italic; }
.download { float: right; }
.download img { width: 90px; }
pre { background: #000; color: #fff; padding: 15px;}
</style>
</head>
<body>
<div id="container">
<div id="fork"><a href="http://github.com/jeena/Timr"><img src="http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a></div>
<div class="download">
<a href="http://cloud.github.com/downloads/jeena/Timr/Timr.zip">
<img src="http://github.com/images/modules/download/zip.png"></a>
</div>
<h1>Timr</h1>
<p class="description"><em><strong>Timr</strong> is a simple timer for OS X in a kind of a retro look.</em></p>
<p>You can select the time by clicking on the digits, start it by clicking on the start button,
which turns to pause, and in pause mode you can reset the timer by clicking on the little "C"
which appears under the big start button.</p>
<p class="screenshot"><img width="459" height="183" src="http://cloud.github.com/downloads/jeena/Timr/Screenshot.png" alt="Timr Screenshot" /></p>
<h2>Dependencies</h2>
<p>OS X &mdash; <a href="http://www.apple.com/macosx/">Mac OS X</a></p>
<h2>Install</h2>
<p>Download, unzip and move it to your Application folder.</p>
<h2>License</h2>
<p><a href="http://www.opensource.org/licenses/mit-license.php">MIT</a></p>
<h2>Contact</h2>
<p>Jeena Paradies (<a href="mailto:spam@jeenaparadies.net">spam@jeenaparadies.net</a>)</p>
<h2>Download</h2>
<p>
You can download this project in
<a href="http://cloud.github.com/downloads/jeena/Timr/Timr.zip">zip</a> format.
</p>
<p>You can also clone the project with <a href="http://git-scm.com">Git</a>
by running:
<pre>$ git clone git://github.com/jeena/Timr</pre>
</p>
</div>
</body>
</html>

14
main.m Normal file
View file

@ -0,0 +1,14 @@
//
// main.m
// Timr
//
// Created by Jeena on 15.12.09.
// Copyright 2009 Jeena Paradies. All rights reserved.
//
#import <Cocoa/Cocoa.h>
int main(int argc, char *argv[])
{
return NSApplicationMain(argc, (const char **) argv);
}

BIN
no_colon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

BIN
power-button-pressed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
power-button.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
wood.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB