mirror of
https://github.com/MacPass/MacPass.git
synced 2025-12-14 01:12:31 +00:00
Removed unused View stubs
Cleaned the deselectoin/selection behavior on click/select/open/close of databases
This commit is contained in:
@@ -7,7 +7,6 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
4C16854416D704980027ECBC /* MPPathBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C16854316D704980027ECBC /* MPPathBar.m */; };
|
||||
4C25D58516CF0F8800F6806C /* WelcomeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C25D58416CF0F8800F6806C /* WelcomeView.xib */; };
|
||||
4C25D58716CF0FAA00F6806C /* EntryView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C25D58616CF0FAA00F6806C /* EntryView.xib */; };
|
||||
4C2C4C2C16D3BE3700D49295 /* KdbGroup+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C2C4C2B16D3BE3700D49295 /* KdbGroup+MPAdditions.m */; };
|
||||
@@ -25,7 +24,6 @@
|
||||
4C586F9E16D07ABD00E7DB57 /* 00_PasswordTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C586F9D16D07ABD00E7DB57 /* 00_PasswordTemplate.pdf */; };
|
||||
4C586FA016D07D7200E7DB57 /* 01_PackageNetworkTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C586F9F16D07D7200E7DB57 /* 01_PackageNetworkTemplate.pdf */; };
|
||||
4C586FA216D07F6A00E7DB57 /* 02_MessageBoxWarningTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C586FA116D07F6A00E7DB57 /* 02_MessageBoxWarningTemplate.pdf */; };
|
||||
4C587F2E16E0257B0003718D /* MPButtonBarButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C587F2D16E0257B0003718D /* MPButtonBarButton.m */; };
|
||||
4C61EA0316D2FD0800AC519E /* MPOutlineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C61EA0216D2FD0800AC519E /* MPOutlineViewController.m */; };
|
||||
4C61EA0516D2FFE200AC519E /* OutlineView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C61EA0416D2FFE200AC519E /* OutlineView.xib */; };
|
||||
4C65C79C16DD283900E32CFF /* MPToolbarButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C65C79B16DD283900E32CFF /* MPToolbarButton.m */; };
|
||||
@@ -67,7 +65,6 @@
|
||||
4C669BA216760ED100DD0774 /* UUID.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C669B7B16760ED100DD0774 /* UUID.m */; };
|
||||
4C69A73A16D589DF00EC1B1A /* MPGradientView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C69A73916D589DF00EC1B1A /* MPGradientView.m */; };
|
||||
4C6B0E8C16C9B99B00A9ED23 /* PasswordInputView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C6B0E8B16C9B99B00A9ED23 /* PasswordInputView.xib */; };
|
||||
4C6DA0F916D81B8A0011224B /* MPPathBarItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C6DA0F816D81B8A0011224B /* MPPathBarItemView.m */; };
|
||||
4C75CE3C16CB128700F61A4D /* MPDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C75CE3B16CB128700F61A4D /* MPDatabaseController.m */; };
|
||||
4C77547516E55FE800970E02 /* MPInspectorTabViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C77547416E55FE800970E02 /* MPInspectorTabViewController.m */; };
|
||||
4C77547716E55FFC00970E02 /* InspectorTabView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C77547616E55FFC00970E02 /* InspectorTabView.xib */; };
|
||||
@@ -77,6 +74,9 @@
|
||||
4C77E37A15B84A240093A587 /* MPAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C77E37915B84A240093A587 /* MPAppDelegate.m */; };
|
||||
4C77E37D15B84A240093A587 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C77E37B15B84A240093A587 /* MainMenu.xib */; };
|
||||
4C83814215BF4677001AE468 /* MPMainWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C83814115BF4677001AE468 /* MPMainWindowController.m */; };
|
||||
4C888C9016EB6C91003D34A1 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4C888C8E16EB6C91003D34A1 /* Localizable.strings */; };
|
||||
4C888C9316EB6F5E003D34A1 /* MPToolbarItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C888C9216EB6F5E003D34A1 /* MPToolbarItem.m */; };
|
||||
4C888C9716EB754B003D34A1 /* MPActionHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C888C9616EB754B003D34A1 /* MPActionHelper.m */; };
|
||||
4C8FECC816D57E3200BF26CF /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C8FECC716D57E3200BF26CF /* QuartzCore.framework */; };
|
||||
4C920E2A16DCDFA00083839B /* MPLoggerProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C920E2916DCDFA00083839B /* MPLoggerProxy.m */; };
|
||||
4CA0B2ED15BCADAC00654E32 /* SettingsWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CA0B2EC15BCADAC00654E32 /* SettingsWindow.xib */; };
|
||||
@@ -101,17 +101,13 @@
|
||||
4CD78ABF16D155FF00768A1D /* 10_ContactTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CD78ABA16D155FF00768A1D /* 10_ContactTemplate.pdf */; };
|
||||
4CD78AC016D155FF00768A1D /* 11_CameraTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CD78ABB16D155FF00768A1D /* 11_CameraTemplate.pdf */; };
|
||||
4CD884B715BD47080042BBF8 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CD884B615BD47080042BBF8 /* MainWindow.xib */; };
|
||||
4CDB556416E29A7C00635918 /* MPPathControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CDB556316E29A7C00635918 /* MPPathControl.m */; };
|
||||
4CDF01A316D1B76700D0AC08 /* MPEntryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CDF01A216D1B76700D0AC08 /* MPEntryViewController.m */; };
|
||||
4CE06D7D16DEF3FE00840E3A /* MPButtonBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE06D7C16DEF3FE00840E3A /* MPButtonBar.m */; };
|
||||
4CE8246F16E2E93400573141 /* MPOverlayWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8246E16E2E93400573141 /* MPOverlayWindowController.m */; };
|
||||
4CE8247516E2F2B900573141 /* MPOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8247416E2F2B900573141 /* MPOverlayView.m */; };
|
||||
4CFC53BF16E94729007396BE /* MPShadowBox.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC53BE16E94729007396BE /* MPShadowBox.m */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
4C16854216D704980027ECBC /* MPPathBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPathBar.h; sourceTree = "<group>"; };
|
||||
4C16854316D704980027ECBC /* MPPathBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPathBar.m; sourceTree = "<group>"; };
|
||||
4C25D58416CF0F8800F6806C /* WelcomeView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WelcomeView.xib; sourceTree = "<group>"; };
|
||||
4C25D58616CF0FAA00F6806C /* EntryView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = EntryView.xib; sourceTree = "<group>"; };
|
||||
4C2C4C2A16D3BE3700D49295 /* KdbGroup+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KdbGroup+MPAdditions.h"; sourceTree = "<group>"; };
|
||||
@@ -135,8 +131,6 @@
|
||||
4C586F9D16D07ABD00E7DB57 /* 00_PasswordTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 00_PasswordTemplate.pdf; sourceTree = "<group>"; };
|
||||
4C586F9F16D07D7200E7DB57 /* 01_PackageNetworkTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 01_PackageNetworkTemplate.pdf; sourceTree = "<group>"; };
|
||||
4C586FA116D07F6A00E7DB57 /* 02_MessageBoxWarningTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 02_MessageBoxWarningTemplate.pdf; sourceTree = "<group>"; };
|
||||
4C587F2C16E0257B0003718D /* MPButtonBarButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPButtonBarButton.h; sourceTree = "<group>"; };
|
||||
4C587F2D16E0257B0003718D /* MPButtonBarButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPButtonBarButton.m; sourceTree = "<group>"; };
|
||||
4C61EA0116D2FD0800AC519E /* MPOutlineViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOutlineViewController.h; sourceTree = "<group>"; };
|
||||
4C61EA0216D2FD0800AC519E /* MPOutlineViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPOutlineViewController.m; sourceTree = "<group>"; };
|
||||
4C61EA0416D2FFE200AC519E /* OutlineView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = OutlineView.xib; sourceTree = "<group>"; };
|
||||
@@ -220,8 +214,6 @@
|
||||
4C69A73816D589DF00EC1B1A /* MPGradientView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPGradientView.h; sourceTree = "<group>"; };
|
||||
4C69A73916D589DF00EC1B1A /* MPGradientView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPGradientView.m; sourceTree = "<group>"; };
|
||||
4C6B0E8B16C9B99B00A9ED23 /* PasswordInputView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PasswordInputView.xib; sourceTree = "<group>"; };
|
||||
4C6DA0F716D81B8A0011224B /* MPPathBarItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPathBarItemView.h; sourceTree = "<group>"; };
|
||||
4C6DA0F816D81B8A0011224B /* MPPathBarItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPathBarItemView.m; sourceTree = "<group>"; };
|
||||
4C75CE3A16CB128700F61A4D /* MPDatabaseController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPDatabaseController.h; sourceTree = "<group>"; };
|
||||
4C75CE3B16CB128700F61A4D /* MPDatabaseController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPDatabaseController.m; sourceTree = "<group>"; };
|
||||
4C77547316E55FE800970E02 /* MPInspectorTabViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPInspectorTabViewController.h; sourceTree = "<group>"; };
|
||||
@@ -241,6 +233,11 @@
|
||||
4C77E37C15B84A240093A587 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||
4C83814015BF4677001AE468 /* MPMainWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMainWindowController.h; sourceTree = "<group>"; };
|
||||
4C83814115BF4677001AE468 /* MPMainWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPMainWindowController.m; sourceTree = "<group>"; };
|
||||
4C888C8F16EB6C91003D34A1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
4C888C9116EB6F5E003D34A1 /* MPToolbarItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPToolbarItem.h; sourceTree = "<group>"; };
|
||||
4C888C9216EB6F5E003D34A1 /* MPToolbarItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPToolbarItem.m; sourceTree = "<group>"; };
|
||||
4C888C9516EB754B003D34A1 /* MPActionHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPActionHelper.h; sourceTree = "<group>"; };
|
||||
4C888C9616EB754B003D34A1 /* MPActionHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPActionHelper.m; sourceTree = "<group>"; };
|
||||
4C8FECC716D57E3200BF26CF /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
||||
4C920E2816DCDFA00083839B /* MPLoggerProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPLoggerProxy.h; sourceTree = "<group>"; };
|
||||
4C920E2916DCDFA00083839B /* MPLoggerProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPLoggerProxy.m; sourceTree = "<group>"; };
|
||||
@@ -280,12 +277,8 @@
|
||||
4CD78ABA16D155FF00768A1D /* 10_ContactTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 10_ContactTemplate.pdf; sourceTree = "<group>"; };
|
||||
4CD78ABB16D155FF00768A1D /* 11_CameraTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 11_CameraTemplate.pdf; sourceTree = "<group>"; };
|
||||
4CD884B615BD47080042BBF8 /* MainWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = "<group>"; };
|
||||
4CDB556216E29A7C00635918 /* MPPathControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPathControl.h; sourceTree = "<group>"; };
|
||||
4CDB556316E29A7C00635918 /* MPPathControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPathControl.m; sourceTree = "<group>"; };
|
||||
4CDF01A116D1B76700D0AC08 /* MPEntryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPEntryViewController.h; sourceTree = "<group>"; };
|
||||
4CDF01A216D1B76700D0AC08 /* MPEntryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPEntryViewController.m; sourceTree = "<group>"; };
|
||||
4CE06D7B16DEF3FE00840E3A /* MPButtonBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPButtonBar.h; sourceTree = "<group>"; };
|
||||
4CE06D7C16DEF3FE00840E3A /* MPButtonBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPButtonBar.m; sourceTree = "<group>"; };
|
||||
4CE8246D16E2E93400573141 /* MPOverlayWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOverlayWindowController.h; sourceTree = "<group>"; };
|
||||
4CE8246E16E2E93400573141 /* MPOverlayWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPOverlayWindowController.m; sourceTree = "<group>"; };
|
||||
4CE8247316E2F2B900573141 /* MPOverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOverlayView.h; sourceTree = "<group>"; };
|
||||
@@ -559,6 +552,7 @@
|
||||
4C77E36D15B84A240093A587 /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C888C8E16EB6C91003D34A1 /* Localizable.strings */,
|
||||
4CB9339716D3A0DD00A13B5D /* Credits.rtf */,
|
||||
4C77E36E15B84A240093A587 /* MacPass-Info.plist */,
|
||||
4C77E36F15B84A240093A587 /* InfoPlist.strings */,
|
||||
@@ -598,6 +592,8 @@
|
||||
4CA0B30F15BCB85D00654E32 /* General */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C888C9516EB754B003D34A1 /* MPActionHelper.h */,
|
||||
4C888C9616EB754B003D34A1 /* MPActionHelper.m */,
|
||||
);
|
||||
name = General;
|
||||
sourceTree = "<group>";
|
||||
@@ -656,18 +652,10 @@
|
||||
4CDB556616E29A8A00635918 /* Controls */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C16854216D704980027ECBC /* MPPathBar.h */,
|
||||
4C16854316D704980027ECBC /* MPPathBar.m */,
|
||||
4C6DA0F716D81B8A0011224B /* MPPathBarItemView.h */,
|
||||
4C6DA0F816D81B8A0011224B /* MPPathBarItemView.m */,
|
||||
4C65C79A16DD283900E32CFF /* MPToolbarButton.h */,
|
||||
4C65C79B16DD283900E32CFF /* MPToolbarButton.m */,
|
||||
4CE06D7B16DEF3FE00840E3A /* MPButtonBar.h */,
|
||||
4CE06D7C16DEF3FE00840E3A /* MPButtonBar.m */,
|
||||
4C587F2C16E0257B0003718D /* MPButtonBarButton.h */,
|
||||
4C587F2D16E0257B0003718D /* MPButtonBarButton.m */,
|
||||
4CDB556216E29A7C00635918 /* MPPathControl.h */,
|
||||
4CDB556316E29A7C00635918 /* MPPathControl.m */,
|
||||
4C888C9116EB6F5E003D34A1 /* MPToolbarItem.h */,
|
||||
4C888C9216EB6F5E003D34A1 /* MPToolbarItem.m */,
|
||||
);
|
||||
name = Controls;
|
||||
sourceTree = "<group>";
|
||||
@@ -785,6 +773,7 @@
|
||||
4C4E1DC716DC6536007B9B47 /* PathBar.xib in Resources */,
|
||||
4C431BCF16E2BAB000700A81 /* OverlayWindow.xib in Resources */,
|
||||
4C77547716E55FFC00970E02 /* InspectorTabView.xib in Resources */,
|
||||
4C888C9016EB6C91003D34A1 /* Localizable.strings in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -870,18 +859,15 @@
|
||||
4C2C4C2C16D3BE3700D49295 /* KdbGroup+MPAdditions.m in Sources */,
|
||||
4CC1AEBE16D4467C006D2AAB /* KdbTree+MPAdditions.m in Sources */,
|
||||
4C69A73A16D589DF00EC1B1A /* MPGradientView.m in Sources */,
|
||||
4C16854416D704980027ECBC /* MPPathBar.m in Sources */,
|
||||
4C6DA0F916D81B8A0011224B /* MPPathBarItemView.m in Sources */,
|
||||
4C920E2A16DCDFA00083839B /* MPLoggerProxy.m in Sources */,
|
||||
4C65C79C16DD283900E32CFF /* MPToolbarButton.m in Sources */,
|
||||
4CE06D7D16DEF3FE00840E3A /* MPButtonBar.m in Sources */,
|
||||
4C587F2E16E0257B0003718D /* MPButtonBarButton.m in Sources */,
|
||||
4CDB556416E29A7C00635918 /* MPPathControl.m in Sources */,
|
||||
4C431BCD16E2A82800700A81 /* MPPasteBoardController.m in Sources */,
|
||||
4CE8246F16E2E93400573141 /* MPOverlayWindowController.m in Sources */,
|
||||
4CE8247516E2F2B900573141 /* MPOverlayView.m in Sources */,
|
||||
4C77547516E55FE800970E02 /* MPInspectorTabViewController.m in Sources */,
|
||||
4CFC53BF16E94729007396BE /* MPShadowBox.m in Sources */,
|
||||
4C888C9316EB6F5E003D34A1 /* MPToolbarItem.m in Sources */,
|
||||
4C888C9716EB754B003D34A1 /* MPActionHelper.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -904,6 +890,14 @@
|
||||
name = MainMenu.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4C888C8E16EB6C91003D34A1 /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
4C888C8F16EB6C91003D34A1 /* en */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CB9339716D3A0DD00A13B5D /* Credits.rtf */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
|
||||
28
MacPass/MPActionHelper.h
Normal file
28
MacPass/MPActionHelper.h
Normal file
@@ -0,0 +1,28 @@
|
||||
//
|
||||
// MPActionHelper.h
|
||||
// MacPass
|
||||
//
|
||||
// Created by Michael Starke on 09.03.13.
|
||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
typedef enum {
|
||||
MPActionAddEntry, // Add an new entry
|
||||
MPActionAddGroup, // Add a new group
|
||||
MPActionEdit, // Edit entry or group
|
||||
MPActionDelete, // Delete entry or group
|
||||
MPActionCopyUsername, // copy username to pasteboard
|
||||
MPActionCopyPassword, // copy password to pasteboard
|
||||
MPActionCopyURL, // copy url to pasteboard
|
||||
MPActionOpenURL, // open url in default browser
|
||||
MPActionToggleInspector,
|
||||
}
|
||||
MPActionType;
|
||||
|
||||
@interface MPActionHelper : NSObject
|
||||
|
||||
+ (SEL)actionOfType:(MPActionType)type;
|
||||
|
||||
@end
|
||||
32
MacPass/MPActionHelper.m
Normal file
32
MacPass/MPActionHelper.m
Normal file
@@ -0,0 +1,32 @@
|
||||
//
|
||||
// MPActionHelper.m
|
||||
// MacPass
|
||||
//
|
||||
// Created by Michael Starke on 09.03.13.
|
||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MPActionHelper.h"
|
||||
|
||||
@implementation MPActionHelper
|
||||
|
||||
+ (SEL)actionOfType:(MPActionType)type {
|
||||
static NSDictionary *actionDict;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
actionDict = [@{
|
||||
@(MPActionAddEntry) : @"createEntry:",
|
||||
@(MPActionAddGroup) : @"createGroup:",
|
||||
@(MPActionCopyPassword) : @"copyPassword:",
|
||||
@(MPActionCopyURL) : @"copyURL:",
|
||||
@(MPActionCopyUsername) : @"copyUsername:",
|
||||
@(MPActionDelete) : @"deleteEntry:",
|
||||
@(MPActionEdit) : @"editEntry:",
|
||||
@(MPActionOpenURL) : @"openURL:",
|
||||
@(MPActionToggleInspector) : @"toggleInspector:"
|
||||
} retain];
|
||||
});
|
||||
return NSSelectorFromString(actionDict[@(type)]);
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -11,6 +11,7 @@
|
||||
#import "MPMainWindowController.h"
|
||||
#import "MPSettingsController.h"
|
||||
#import "MPDatabaseController.h"
|
||||
#import "MPActionHelper.h"
|
||||
|
||||
@interface MPAppDelegate ()
|
||||
|
||||
@@ -70,8 +71,14 @@
|
||||
|
||||
NSMutableArray *items = [NSMutableArray arrayWithCapacity:7];
|
||||
if(insertCreate) {
|
||||
NSMenuItem *newGroup = [[NSMenuItem alloc] initWithTitle:@"New Group" action:@selector(createGroup:) keyEquivalent:@"G"];
|
||||
NSMenuItem *newEntry = [[NSMenuItem alloc] initWithTitle:@"New Entry" action:@selector(createEntry:) keyEquivalent:@"E"];
|
||||
|
||||
NSMenuItem *newGroup = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"ADD_GROUP", @"")
|
||||
action:[MPActionHelper actionOfType:MPActionAddGroup]
|
||||
keyEquivalent:@"G"];
|
||||
NSMenuItem *newEntry = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"ADD_ENTRY", @"")
|
||||
action:[MPActionHelper actionOfType:MPActionAddEntry]
|
||||
keyEquivalent:@"E"];
|
||||
|
||||
[items addObjectsFromArray:@[ newGroup, newEntry ]];
|
||||
[newEntry release];
|
||||
[newGroup release];
|
||||
@@ -80,7 +87,9 @@
|
||||
if([items count] > 0) {
|
||||
[items addObject:[NSMenuItem separatorItem]];
|
||||
}
|
||||
NSMenuItem *delete = [[NSMenuItem alloc] initWithTitle:@"Delete" action:@selector(deleteEntry:) keyEquivalent:@""];
|
||||
NSMenuItem *delete = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"DELETE", @"")
|
||||
action:[MPActionHelper actionOfType:MPActionDelete]
|
||||
keyEquivalent:@""];
|
||||
[items addObject:delete];
|
||||
[delete release];
|
||||
}
|
||||
@@ -88,13 +97,34 @@
|
||||
if([items count] > 0) {
|
||||
[items addObject:[NSMenuItem separatorItem]];
|
||||
}
|
||||
NSMenuItem *copyUsername = [[NSMenuItem alloc] initWithTitle:@"Copy Username" action:@selector(copyUsername:) keyEquivalent:@"C"];
|
||||
NSMenuItem *copyPassword = [[NSMenuItem alloc] initWithTitle:@"Copy Password" action:@selector(copyPassword:) keyEquivalent:@"c"];
|
||||
NSMenuItem *openURL = [[NSMenuItem alloc] initWithTitle:@"Open URL" action:@selector(openURL:) keyEquivalent:@"U"];
|
||||
[items addObjectsFromArray:@[ copyUsername, copyPassword, openURL]];
|
||||
NSMenuItem *copyUsername = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"COPY_USERNAME", @"")
|
||||
action:[MPActionHelper actionOfType:MPActionCopyUsername]
|
||||
keyEquivalent:@"C"];
|
||||
NSMenuItem *copyPassword = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"COPY_PASSWORD", @"")
|
||||
action:[MPActionHelper actionOfType:MPActionCopyPassword]
|
||||
keyEquivalent:@"c"];
|
||||
NSMenu *urlMenu = [[NSMenu alloc] init];
|
||||
NSMenuItem *urlItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"URL", @"")
|
||||
action:0
|
||||
keyEquivalent:@""];
|
||||
[urlItem setSubmenu:urlMenu];
|
||||
[urlMenu release];
|
||||
|
||||
NSMenuItem *copyURL = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"COPY_URL", @"")
|
||||
action:[MPActionHelper actionOfType:MPActionCopyURL]
|
||||
keyEquivalent:@"u"];
|
||||
NSMenuItem *openURL = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"OPEN_URL", @"")
|
||||
action:[MPActionHelper actionOfType:MPActionOpenURL]
|
||||
keyEquivalent:@"U"];
|
||||
[urlMenu addItem:copyURL];
|
||||
[urlMenu addItem:openURL];
|
||||
[openURL release];
|
||||
[copyURL release];
|
||||
|
||||
[items addObjectsFromArray:@[ copyUsername, copyPassword, urlItem]];
|
||||
[urlItem release];
|
||||
[copyPassword release];
|
||||
[copyUsername release];
|
||||
[openURL release];
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
//
|
||||
// MPButtonBar.h
|
||||
// MacPass
|
||||
//
|
||||
// Created by michael starke on 28.02.13.
|
||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MPGradientView.h"
|
||||
|
||||
/*
|
||||
Notifications and userInfo dictionary keys
|
||||
*/
|
||||
APPKIT_EXTERN NSString *const MPButtonBarSelectionChangedNotification;
|
||||
/*
|
||||
Key in for the Index of the new selection. NSNumber with NSUInteger
|
||||
*/
|
||||
APPKIT_EXTERN NSString *const MPButtonBarSelectionIndexKey;
|
||||
|
||||
/*
|
||||
Exception thrown if an illegal delegate is used.
|
||||
*/
|
||||
APPKIT_EXTERN NSString *const MPButtonBarInvalidDelegateException;
|
||||
|
||||
@class MPButtonBar;
|
||||
|
||||
@protocol MPButtonBarDelegate <NSObject>
|
||||
|
||||
@required
|
||||
- (NSUInteger)buttonsInButtonBar:(MPButtonBar *)buttonBar;
|
||||
@optional
|
||||
- (NSImage *)buttonBar:(MPButtonBar *)buttonBar imageAtIndex:(NSUInteger)index;
|
||||
- (NSString *)buttonBar:(MPButtonBar *)buttonBar labelAtIndex:(NSUInteger)index;
|
||||
|
||||
/*
|
||||
A delegate that implements this function automatically gets registred to recive MPButtonBarSelectionDidChangeNotification
|
||||
The object in the notification is the buttonbar,
|
||||
The userDictionary contrains the following keys:
|
||||
MPButtonBarSelectionIndexKey;
|
||||
*/
|
||||
- (void)didChangeButtonSelection:(NSNotification *)notification;
|
||||
|
||||
@end
|
||||
|
||||
@interface MPButtonBar : MPGradientView
|
||||
|
||||
@property (nonatomic, assign) id<MPButtonBarDelegate> delegate;
|
||||
@property (nonatomic, readonly) NSUInteger selectedIndex;
|
||||
@property (nonatomic, readonly) BOOL hasSelection;
|
||||
|
||||
|
||||
@end
|
||||
@@ -1,131 +0,0 @@
|
||||
//
|
||||
// MPButtonBar.m
|
||||
// MacPass
|
||||
//
|
||||
// Created by michael starke on 28.02.13.
|
||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MPButtonBar.h"
|
||||
#import "MPButtonBarButton.h"
|
||||
|
||||
#define MPBUTTONBAR_BUTTON_MARGIN 5.0;
|
||||
|
||||
NSString *const MPButtonBarSelectionChangedNotification = @"MPButtonBarSelectionChangedNotification";
|
||||
NSString *const MPButtonBarSelectionIndexKey = @"MPButtonBarSelectionIndexKey";
|
||||
|
||||
NSString *const MPButtonBarInvalidDelegateException = @"MPButtonBarInvalidDelegateException";
|
||||
|
||||
|
||||
@interface MPButtonBar ()
|
||||
|
||||
@property (retain) NSMutableArray *buttons;
|
||||
@property (nonatomic, assign) NSUInteger selectedIndex;
|
||||
@property (assign) BOOL delegateSupportsImage;
|
||||
@property (assign) BOOL delegateSupportsLabel;
|
||||
|
||||
- (void)_updateButtons;
|
||||
- (void)_didClickButton:(id)sender;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MPButtonBar
|
||||
|
||||
- (id)initWithFrame:(NSRect)frame {
|
||||
self = [super initWithFrame:frame];
|
||||
if (self) {
|
||||
self.selectedIndex = NSNotFound;
|
||||
self.buttons = [NSMutableArray arrayWithCapacity:5];
|
||||
self.delegateSupportsImage = NO;
|
||||
self.delegateSupportsLabel = NO;
|
||||
[self _updateButtons];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
# pragma mark Layout
|
||||
|
||||
- (void)_updateButtons {
|
||||
NSUInteger currentButtonCount = [self.buttons count];
|
||||
NSUInteger newButtonCount = 5;//[self.delegate buttonsInButtonBar:self];
|
||||
/*
|
||||
remove unused buttons
|
||||
*/
|
||||
if(currentButtonCount > newButtonCount) {
|
||||
NSRange removalRange = NSMakeRange(newButtonCount - 1, currentButtonCount - newButtonCount);
|
||||
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:removalRange];
|
||||
NSArray *obsolteButtons = [self.buttons objectsAtIndexes:indexSet];
|
||||
for(NSButton *button in obsolteButtons) {
|
||||
[button removeFromSuperviewWithoutNeedingDisplay];
|
||||
}
|
||||
[self.buttons removeObjectsInRange:NSMakeRange(newButtonCount - 1, currentButtonCount - newButtonCount)];
|
||||
}
|
||||
CGFloat startPosition = MPBUTTONBAR_BUTTON_MARGIN;
|
||||
for(NSUInteger buttonIndex = 0; buttonIndex < newButtonCount ; buttonIndex++) {
|
||||
BOOL needsDisplay = NO;
|
||||
if(buttonIndex >= currentButtonCount) {
|
||||
NSButton *newButton= [[MPButtonBarButton alloc] initWithFrame:NSMakeRect(0, 0, 30, 30)];
|
||||
[self addSubview:newButton];
|
||||
[self.buttons addObject:newButton];
|
||||
[newButton release];
|
||||
[newButton setTarget:self];
|
||||
[newButton setImage:[NSImage imageNamed:NSImageNameActionTemplate]];
|
||||
[newButton setAction:@selector(_didClickButton:)];
|
||||
needsDisplay = YES;
|
||||
}
|
||||
NSButton *currentButton = self.buttons[buttonIndex];
|
||||
if (self.delegateSupportsImage) {
|
||||
[currentButton setImage:[self.delegate buttonBar:self imageAtIndex:buttonIndex]];
|
||||
needsDisplay = YES;
|
||||
}
|
||||
if(self.delegateSupportsLabel) {
|
||||
[currentButton setStringValue:[self.delegate buttonBar:self labelAtIndex:buttonIndex]];
|
||||
needsDisplay = YES;
|
||||
}
|
||||
[currentButton sizeToFit];
|
||||
NSRect frame = [currentButton frame];
|
||||
frame.size.width += 20;
|
||||
frame.origin.x = startPosition;
|
||||
[currentButton setFrame:frame];
|
||||
startPosition += frame.size.width + MPBUTTONBAR_BUTTON_MARGIN;
|
||||
[self setNeedsDisplay:needsDisplay];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark Button Events
|
||||
|
||||
- (void)_didClickButton:(id)sender {
|
||||
NSUInteger index = [[self subviews] indexOfObject:sender];
|
||||
if(index == NSNotFound) {
|
||||
return; // Nothing we need to know about happened;
|
||||
}
|
||||
NSDictionary *userInfo = @{ MPButtonBarSelectionIndexKey: @(index) };
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPButtonBarSelectionChangedNotification object:self userInfo:userInfo];
|
||||
}
|
||||
|
||||
# pragma mark Properties
|
||||
|
||||
- (void)setDelegate:(id<MPButtonBarDelegate>)delegate {
|
||||
if( ![delegate conformsToProtocol:@protocol(MPButtonBarDelegate)]) {
|
||||
NSException *invalidDelegateException = [NSException exceptionWithName:MPButtonBarInvalidDelegateException reason:@"The Delegate does not conform to the MPButtonBarDelegate protocoll" userInfo:nil];
|
||||
@throw invalidDelegateException;
|
||||
}
|
||||
if(_delegate != delegate) {
|
||||
if([_delegate respondsToSelector:@selector(didChangeButtonSelection:)]) {
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:_delegate];
|
||||
}
|
||||
_delegate = delegate;
|
||||
self.delegateSupportsLabel = [delegate respondsToSelector:@selector(buttonBar:labelAtIndex:)];
|
||||
self.delegateSupportsImage = [delegate respondsToSelector:@selector(buttonBar:imageAtIndex:)];
|
||||
if([delegate respondsToSelector:@selector(selectionDidChanged:)]) {
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self.delegate selector:@selector(didChangeButtonSelection:) name:MPButtonBarSelectionChangedNotification object:self];
|
||||
}
|
||||
[self _updateButtons];
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)hasSelection {
|
||||
return self.selectedIndex != NSNotFound;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,13 +0,0 @@
|
||||
//
|
||||
// MPButtonBarButton.h
|
||||
// MacPass
|
||||
//
|
||||
// Created by Michael Starke on 01.03.13.
|
||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface MPButtonBarButton : NSButton
|
||||
|
||||
@end
|
||||
@@ -1,42 +0,0 @@
|
||||
//
|
||||
// MPButtonBarButton.m
|
||||
// MacPass
|
||||
//
|
||||
// Created by Michael Starke on 01.03.13.
|
||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MPButtonBarButton.h"
|
||||
|
||||
@implementation MPButtonBarButton
|
||||
|
||||
- (id)initWithFrame:(NSRect)frame
|
||||
{
|
||||
self = [super initWithFrame:frame];
|
||||
if (self) {
|
||||
[self setButtonType:NSPushOnPushOffButton];
|
||||
[self setBordered:NO];
|
||||
|
||||
[[self cell] setHighlightsBy:NSContentsCellMask];
|
||||
[[self cell] setShowsStateBy:NSNoCellMask];
|
||||
[[self cell] setBackgroundStyle:NSBackgroundStyleRaised];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)drawRect:(NSRect)dirtyRect {
|
||||
if(self.state == NSOnState) {
|
||||
NSRect drawingRect = [self bounds];
|
||||
NSColor *edgeColor = [NSColor colorWithCalibratedWhite:0.0 alpha:0.2];
|
||||
NSColor *middelColor = [NSColor colorWithCalibratedWhite:0.0 alpha:0];
|
||||
NSGradient *borderGradient = [[NSGradient alloc] initWithColors:@[edgeColor, middelColor]];
|
||||
drawingRect.size.width = 5;
|
||||
[borderGradient drawInRect:drawingRect relativeCenterPosition:NSMakePoint(-1.0, 0)];
|
||||
drawingRect.origin.x = [self bounds].size.width - 5;
|
||||
[borderGradient drawInRect:drawingRect relativeCenterPosition:NSMakePoint(1.0, 0)];
|
||||
[borderGradient release];
|
||||
}
|
||||
[super drawRect:dirtyRect];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -126,7 +126,7 @@ NSString *const MPDidLoadDatabaseNotification = @"DidLoadDataBaseNotification";
|
||||
}
|
||||
|
||||
- (KdbPassword *)passwordHash {
|
||||
return [[KdbPassword alloc] initWithPassword:self.password passwordEncoding:NSUTF8StringEncoding keyFile:[self.key path]];
|
||||
return [[[KdbPassword alloc] initWithPassword:self.password passwordEncoding:NSUTF8StringEncoding keyFile:[self.key path]] autorelease];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -43,8 +43,8 @@ typedef enum {
|
||||
|
||||
- (void)copyUsername:(id)sender;
|
||||
- (void)copyPassword:(id)sender;
|
||||
//- (void)copyURL:(id)sender;
|
||||
//- (void)createEntry:(id)sender;
|
||||
- (void)copyURL:(id)sender;
|
||||
- (void)openURL:(id)sender;
|
||||
- (void)deleteEntry:(id)sender;
|
||||
|
||||
@end
|
||||
|
||||
@@ -28,6 +28,12 @@ typedef enum {
|
||||
MPFilterTitles = 8,
|
||||
} MPFilterModeType;
|
||||
|
||||
typedef enum {
|
||||
MPOverlayInfoPassword,
|
||||
MPOverlayInfoUsername,
|
||||
MPOverlayInfoURL,
|
||||
} MPOVerlayInfoType;
|
||||
|
||||
NSString *const MPEntryTableUserNameColumnIdentifier = @"MPUserNameColumnIdentifier";
|
||||
NSString *const MPEntryTableTitleColumnIdentifier = @"MPTitleColumnIdentifier";
|
||||
NSString *const MPEntryTablePasswordColumnIdentifier = @"MPPasswordColumnIdentifier";
|
||||
@@ -81,7 +87,8 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
|
||||
- (void)_showFilterBarAnimated:(BOOL)animate;
|
||||
- (void)_hideStatusBarAnimated:(BOOL)animate;
|
||||
|
||||
- (void)_quickCopyEntryData:(id)sender;
|
||||
- (void)_columnDoubleClick:(id)sender;
|
||||
- (void)_copyToPasteboard:(NSString *)data overlayInfo:(MPOVerlayInfoType)overlayInfoType;
|
||||
- (KdbEntry *)_clickedOrSelectedEntry;
|
||||
|
||||
@end
|
||||
@@ -127,7 +134,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
|
||||
[self _hideStatusBarAnimated:NO];
|
||||
|
||||
[self.entryTable setDelegate:self];
|
||||
[self.entryTable setDoubleAction:@selector(_quickCopyEntryData:)];
|
||||
[self.entryTable setDoubleAction:@selector(_columnDoubleClick:)];
|
||||
[self.entryTable setTarget:self];
|
||||
[self _setupEntryMenu];
|
||||
|
||||
@@ -210,6 +217,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
|
||||
}
|
||||
MPOutlineViewDelegate *delegate = [notification object];
|
||||
KdbGroup *group = delegate.selectedGroup;
|
||||
[self.entryTable deselectAll:nil];
|
||||
if(group) {
|
||||
[self.entryArrayController setContent:nil];
|
||||
[self.entryArrayController addObjects:group.entries];
|
||||
@@ -235,7 +243,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
|
||||
}
|
||||
|
||||
- (void)deselectAll:(id)sender {
|
||||
[self.entryTable deselectAll:self];
|
||||
[self.entryTable deselectAll:nil];
|
||||
}
|
||||
|
||||
- (void)clearFilter {
|
||||
@@ -298,7 +306,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark Animation
|
||||
#pragma mark UI Feedback
|
||||
|
||||
- (void)_showFilterBarAnimated:(BOOL)animate {
|
||||
|
||||
@@ -365,6 +373,29 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
|
||||
}
|
||||
}
|
||||
|
||||
- (void)_copyToPasteboard:(NSString *)data overlayInfo:(MPOVerlayInfoType)overlayInfoType {
|
||||
[[MPPasteBoardController defaultController] copyObjects:@[ data ]];
|
||||
NSImage *infoImage = nil;
|
||||
NSString *infoText = nil;
|
||||
switch (overlayInfoType) {
|
||||
case MPOverlayInfoPassword:
|
||||
infoImage = [[NSBundle mainBundle] imageForResource:@"00_PasswordTemplate"];
|
||||
infoText = NSLocalizedString(@"COPIED_PASSWORD", @"Password was copied to the pasteboard");
|
||||
break;
|
||||
|
||||
case MPOverlayInfoURL:
|
||||
infoImage = [[NSBundle mainBundle] imageForResource:@"01_PackageNetworkTemplate"];
|
||||
infoText = NSLocalizedString(@"COPIED_URL", @"URL was copied to the pasteboard");
|
||||
break;
|
||||
|
||||
case MPOverlayInfoUsername:
|
||||
infoImage = [[NSBundle mainBundle] imageForResource:@"09_IdentityTemplate"];
|
||||
infoText = NSLocalizedString(@"COPIED_USERNAME", @"Username was copied to the pasteboard");
|
||||
break;
|
||||
}
|
||||
[[MPOverlayWindowController sharedController] displayOverlayImage:infoImage label:infoText atView:self.view];
|
||||
}
|
||||
|
||||
#pragma mark EntryMenu
|
||||
|
||||
- (void)_setupEntryMenu {
|
||||
@@ -394,48 +425,40 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
|
||||
|
||||
#pragma mark Actions
|
||||
|
||||
- (void)_quickCopyEntryData:(id)sender {
|
||||
NSTableColumn *column = [self.entryTable tableColumns][[self.entryTable clickedColumn]];
|
||||
NSString *identifier = [column identifier];
|
||||
if([identifier isEqualToString:MPEntryTablePasswordColumnIdentifier]) {
|
||||
[self copyPassword:nil];
|
||||
}
|
||||
else if([identifier isEqualToString:MPEntryTableUserNameColumnIdentifier]) {
|
||||
[self copyUsername:nil];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)copyPassword:(id)sender {
|
||||
KdbEntry *selectedEntry = [self _clickedOrSelectedEntry];
|
||||
if(!selectedEntry) {
|
||||
return; // nothing found to work with;
|
||||
if(selectedEntry) {
|
||||
[self _copyToPasteboard:selectedEntry.password overlayInfo:MPOverlayInfoPassword];
|
||||
}
|
||||
[[MPPasteBoardController defaultController] copyObjects:@[ selectedEntry.password ]];
|
||||
NSImage *image = [[NSBundle mainBundle] imageForResource:@"00_PasswordTemplate"];
|
||||
NSString *lable = @"Password copied!";
|
||||
[[MPOverlayWindowController sharedController] displayOverlayImage:image label:lable atView:self.view];
|
||||
}
|
||||
|
||||
- (void)copyUsername:(id)sender {
|
||||
KdbEntry *selectedEntry = [self _clickedOrSelectedEntry];
|
||||
if(!selectedEntry) {
|
||||
return; // No entry to work with;
|
||||
if(selectedEntry) {
|
||||
[self _copyToPasteboard:selectedEntry.username overlayInfo:MPOverlayInfoUsername];
|
||||
}
|
||||
[[MPPasteBoardController defaultController] copyObjects:@[ selectedEntry.username ] ];
|
||||
}
|
||||
|
||||
[[MPPasteBoardController defaultController] copyObjects:@[ selectedEntry.username ]];
|
||||
NSImage *image = [[NSBundle mainBundle] imageForResource:@"09_IdentityTemplate"];
|
||||
NSString *lable = @"Username copied!";
|
||||
[[MPOverlayWindowController sharedController] displayOverlayImage:image label:lable atView:self.view];
|
||||
- (void)copyURL:(id)sender {
|
||||
KdbEntry *selectedEntry = [self _clickedOrSelectedEntry];
|
||||
if(selectedEntry) {
|
||||
[self _copyToPasteboard:selectedEntry.url overlayInfo:MPOverlayInfoURL];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)openURL:(id)sender {
|
||||
KdbEntry *selectedEntry = [self _clickedOrSelectedEntry];
|
||||
if(selectedEntry && [selectedEntry.url length] > 0) {
|
||||
NSURL *webURL = [NSURL URLWithString:selectedEntry.url];
|
||||
[[NSWorkspace sharedWorkspace] openURL:webURL];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)deleteEntry:(id)sender {
|
||||
KdbEntry *selectedEntry = [self _clickedOrSelectedEntry];
|
||||
if(!selectedEntry) {
|
||||
return; // no entry selected
|
||||
if(selectedEntry) {
|
||||
[self.entryArrayController removeObject:selectedEntry];
|
||||
}
|
||||
//[[selectedEntry parent] removeEntry:selectedEntry];
|
||||
[self.entryArrayController removeObject:selectedEntry];
|
||||
}
|
||||
|
||||
- (void)_toggleFilterSpace:(id)sender {
|
||||
@@ -456,6 +479,20 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
|
||||
}
|
||||
}
|
||||
|
||||
- (void)_columnDoubleClick:(id)sender {
|
||||
NSTableColumn *column = [self.entryTable tableColumns][[self.entryTable clickedColumn]];
|
||||
NSString *identifier = [column identifier];
|
||||
if([identifier isEqualToString:MPEntryTablePasswordColumnIdentifier]) {
|
||||
[self copyPassword:nil];
|
||||
}
|
||||
else if([identifier isEqualToString:MPEntryTableUserNameColumnIdentifier]) {
|
||||
[self copyUsername:nil];
|
||||
}
|
||||
else if([identifier isEqualToString:MPEntryTableURLColumnIdentifier]) {
|
||||
[self copyURL:nil];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setFilterMode:(MPFilterModeType)newFilterMode {
|
||||
if(_filterMode != newFilterMode) {
|
||||
if(newFilterMode == MPFilterNone) {
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
|
||||
#import "MPInspectorTabViewController.h"
|
||||
#import "MPEntryViewController.h"
|
||||
#import "MPOutlineViewDelegate.h"
|
||||
#import "MPDatabaseController.h"
|
||||
#import "MPShadowBox.h"
|
||||
#import "MPIconHelper.h"
|
||||
#import "KdbLib.h"
|
||||
@@ -42,6 +44,11 @@
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void)didLoadView {
|
||||
|
||||
for( NSTabViewItem *item in [self.tabView tabViewItems]){
|
||||
@@ -55,6 +62,7 @@
|
||||
selector:@selector(_didChangeSelectedEntry:)
|
||||
name:MPDidChangeSelectedEntryNotification
|
||||
object:nil];
|
||||
|
||||
[self _clearContent];
|
||||
}
|
||||
|
||||
@@ -94,7 +102,6 @@
|
||||
- (void)setSelectedEntry:(KdbEntry *)selectedEntry {
|
||||
if(_selectedEntry != selectedEntry) {
|
||||
_selectedEntry = selectedEntry;
|
||||
if(_selectedEntry) {}
|
||||
[self _updateContent];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,25 +217,26 @@ static CGFloat _outlineSplitterPosition;
|
||||
if(menuAction == @selector(toggleOutlineView:)) {
|
||||
NSView *outlineView = [self.splitView subviews][MPSplitViewOutlineViewIndex];
|
||||
BOOL outlineIsHidden = [self.splitView isSubviewCollapsed:outlineView];
|
||||
if(outlineIsHidden) {
|
||||
[menuItem setTitle:@"Show Outline View"];
|
||||
}
|
||||
[menuItem setTitle:@"Hide Outline View"];
|
||||
NSString *title = outlineIsHidden ? NSLocalizedString(@"SHOW_OUTLINE_VIEW", @"") : NSLocalizedString(@"HIDE_OUTLINE_VIEW", @"Hide the Outline View");
|
||||
|
||||
[menuItem setTitle:title];
|
||||
return YES;
|
||||
}
|
||||
|
||||
if( menuAction == @selector(toggleInspector:) ) {
|
||||
NSView *inspectorView = [self.splitView subviews][MPSplitViewInspectorViewIndex];
|
||||
BOOL inspectorIsHidden = [self.splitView isSubviewCollapsed:inspectorView];
|
||||
if(inspectorIsHidden) {
|
||||
[menuItem setTitle:@"Show Inspecotr"];
|
||||
}
|
||||
[menuItem setTitle:@"Hide Inspector"];
|
||||
NSString *title = inspectorIsHidden ? NSLocalizedString(@"SHOW_INSPECTOR", @"Show the Inspector") : NSLocalizedString(@"HIDE_INSPECTOR", @"Hide the Inspector");
|
||||
|
||||
[menuItem setTitle:title];
|
||||
return YES;
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem {
|
||||
return [self.toolbarDelegate validateToolbarItem:theItem];
|
||||
}
|
||||
|
||||
- (void)performFindPanelAction:(id)sender {
|
||||
[self.window makeFirstResponder:[self.toolbarDelegate.searchItem view]];
|
||||
}
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
|
||||
|
||||
- (void)_didOpenDocument:(NSNotification *)notification {
|
||||
[self.outlineView deselectAll:nil];
|
||||
[self.outlineView reloadData];
|
||||
MPDatabaseController *dbContoller = [MPDatabaseController defaultController];
|
||||
if(dbContoller.database) {
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
//
|
||||
// MPPathBar.h
|
||||
// MacPass
|
||||
//
|
||||
// Created by michael starke on 22.02.13.
|
||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MPGradientView.h"
|
||||
|
||||
@class MPPathBar;
|
||||
/*
|
||||
Delegate protocoll
|
||||
*/
|
||||
@protocol MPPathBarDelegateProtocoll <NSObject>
|
||||
|
||||
@required
|
||||
- (NSUInteger)numberOfItemsInPathBar:(MPPathBar *)pathBar;
|
||||
- (NSString *)pathbar:(MPPathBar *)pathbar stringAtIndex:(NSUInteger)index;
|
||||
|
||||
@optional
|
||||
- (NSImage *)pathbar:(MPPathBar *)pathbar imageAtIndex:(NSUInteger)index;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@interface MPPathBar : MPGradientView
|
||||
|
||||
@property (assign, nonatomic) id<MPPathBarDelegateProtocoll> delegate;
|
||||
|
||||
@end
|
||||
|
||||
@@ -1,92 +0,0 @@
|
||||
//
|
||||
// MPPathBar.m
|
||||
// MacPass
|
||||
//
|
||||
// Created by michael starke on 22.02.13.
|
||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MPPathBar.h"
|
||||
#import "MPPathBarItemView.h"
|
||||
|
||||
#define INTER_BUTTON_SPACING 5.0
|
||||
|
||||
@interface MPPathBar ()
|
||||
|
||||
@property (retain) NSMutableArray *itemViews;
|
||||
@property (assign) BOOL delegateSupportsImage;
|
||||
|
||||
- (void)update;
|
||||
- (void)createViews;
|
||||
- (MPPathBarItemView *)viewForIndex:(NSUInteger)index;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MPPathBar
|
||||
|
||||
- (id)initWithFrame:(NSRect)frame activeGradient:(NSGradient *)activeGradient inactiveGradient:(NSGradient *)inactiveGradient {
|
||||
self = [super initWithFrame:frame activeGradient:activeGradient inactiveGradient:inactiveGradient];
|
||||
if(self) {
|
||||
_itemViews = [[NSMutableArray alloc] initWithCapacity:5];
|
||||
_delegateSupportsImage = NO;
|
||||
[self createViews];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
self.itemViews = nil;
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void)drawRect:(NSRect)dirtyRect {
|
||||
[super drawRect:dirtyRect];
|
||||
[self update];
|
||||
}
|
||||
|
||||
- (void)createViews {
|
||||
NSUInteger items = 5;//[self.delegate numberOfItemsInPathBar:self];
|
||||
CGFloat startPosition = 0;
|
||||
for (NSUInteger iIndex = 0; iIndex < items; iIndex++) {
|
||||
MPPathBarItemView *textField = [self viewForIndex:iIndex];
|
||||
[textField setFrame:NSMakeRect(startPosition, 0, 20, 20)];
|
||||
[self addSubview:textField];
|
||||
}
|
||||
[self update];
|
||||
}
|
||||
|
||||
- (void)update {
|
||||
CGFloat startPosition = 0;
|
||||
for(MPPathBarItemView *view in self.itemViews) {
|
||||
[view sizeToFit];
|
||||
NSRect newFrame = [view frame];
|
||||
newFrame.origin.x = startPosition;
|
||||
[view setFrame:newFrame];
|
||||
startPosition += newFrame.size.width + INTER_BUTTON_SPACING;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setDelegate:(id<MPPathBarDelegateProtocoll>)delegate {
|
||||
if(_delegate != delegate) {
|
||||
_delegate = delegate;
|
||||
self.delegateSupportsImage = [_delegate respondsToSelector:@selector(pathbar:imageAtIndex:)];
|
||||
[self update];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
- (MPPathBarItemView *)viewForIndex:(NSUInteger)index {
|
||||
MPPathBarItemView *itemView = nil;
|
||||
if([self.itemViews count] > index) {
|
||||
itemView = self.itemViews[index];
|
||||
}
|
||||
if(!itemView) {
|
||||
itemView = [[[MPPathBarItemView alloc] initWithFrame:NSMakeRect(0, 0, 50, 24)] autorelease];
|
||||
}
|
||||
itemView.text = [NSString stringWithFormat:@"Button %ld", (unsigned long)index ];
|
||||
itemView.image = [NSImage imageNamed:NSImageNameActionTemplate];
|
||||
//[itemView setStringValue:[self.delegate pathbar:self stringAtIndex:index]];
|
||||
[self.itemViews addObject:itemView];
|
||||
return itemView;
|
||||
}
|
||||
@end
|
||||
@@ -1,18 +0,0 @@
|
||||
//
|
||||
// MPPathBarItemView.h
|
||||
// MacPass
|
||||
//
|
||||
// Created by michael starke on 22.02.13.
|
||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface MPPathBarItemView : NSView
|
||||
|
||||
@property (retain, nonatomic) NSImage *image;
|
||||
@property (retain, nonatomic) NSString *text;
|
||||
|
||||
- (void)sizeToFit;
|
||||
|
||||
@end
|
||||
@@ -1,105 +0,0 @@
|
||||
//
|
||||
// MPPathBarItemView.m
|
||||
// MacPass
|
||||
//
|
||||
// Created by michael starke on 22.02.13.
|
||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MPPathBarItemView.h"
|
||||
|
||||
#define IMAGE_TO_TEXT_MARGIN 5.0
|
||||
|
||||
@interface MPPathBarItemView ()
|
||||
|
||||
@property (retain) NSImageView *imageView;
|
||||
@property (retain) NSTextField *textField;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MPPathBarItemView
|
||||
|
||||
- (id)initWithFrame:(NSRect)frameRect {
|
||||
self = [super initWithFrame:frameRect];
|
||||
if(self) {
|
||||
|
||||
_imageView = [[NSImageView alloc] initWithFrame:NSMakeRect(0, 0, 20, 24)];
|
||||
[[_imageView cell] setImageAlignment:NSImageAlignCenter];
|
||||
[[_imageView cell] setBackgroundStyle:NSBackgroundStyleRaised];
|
||||
[[_imageView cell] setBordered:NO];
|
||||
[[_imageView cell] setDrawsBackground:NO];
|
||||
[_imageView setImage:[NSImage imageNamed:NSImageNameActionTemplate ]];
|
||||
|
||||
_textField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 20, 24)];
|
||||
[_textField setBordered:NO];
|
||||
[_textField setFont:[NSFont systemFontOfSize:13]];
|
||||
[_textField setDrawsBackground:NO];
|
||||
[_textField setEditable:NO];
|
||||
[_textField setSelectable:NO];
|
||||
[[_textField cell] setBackgroundStyle:NSBackgroundStyleRaised];
|
||||
[_textField setStringValue:@"Boo"];
|
||||
|
||||
|
||||
[self addSubview:_textField];
|
||||
[self addSubview:_imageView];
|
||||
|
||||
|
||||
[self sizeToFit];
|
||||
|
||||
[self needsLayout];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)setText:(NSString *)text {
|
||||
if(_text != text) {
|
||||
[_text release];
|
||||
_text = [text retain];
|
||||
[self.textField setStringValue:text];
|
||||
[self sizeToFit];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setImage:(NSImage *)image {
|
||||
if(_image != image) {
|
||||
[_image release];
|
||||
_image = [image retain];
|
||||
[_imageView setImage:image];
|
||||
[self sizeToFit];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)sizeToFit {
|
||||
|
||||
const BOOL isAutoResize = [self autoresizesSubviews];/* Disable autoresizing */
|
||||
[self setAutoresizesSubviews:NO];
|
||||
NSRect superFrame = [self frame];
|
||||
/*
|
||||
Let our subviews calculate their sizes
|
||||
*/
|
||||
[self.textField sizeToFit];
|
||||
//[self.imageView sizeToFit];
|
||||
NSRect textFrame = [self.textField frame];
|
||||
NSRect imageFrame = [self.imageView frame];
|
||||
/*
|
||||
Determine our size
|
||||
*/
|
||||
CGFloat height = MAX(textFrame.size.height, imageFrame.size.height);
|
||||
CGFloat width = textFrame.size.width + IMAGE_TO_TEXT_MARGIN + imageFrame.size.width;
|
||||
|
||||
[self setFrame:NSMakeRect(superFrame.origin.x, superFrame.origin.y, width, height)];
|
||||
|
||||
imageFrame.origin.x = 0;
|
||||
imageFrame.origin.y = 0;
|
||||
imageFrame.size.height = height;
|
||||
textFrame.origin.x = imageFrame.size.width + IMAGE_TO_TEXT_MARGIN;
|
||||
textFrame.origin.y = 0;
|
||||
textFrame.size.height = height;
|
||||
|
||||
[self.textField setFrame:textFrame];
|
||||
[self.imageView setFrame:imageFrame];
|
||||
/* Reset the autoresizing */
|
||||
[self setAutoresizesSubviews:isAutoResize];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,22 +0,0 @@
|
||||
//
|
||||
// MPPathControl.m
|
||||
// MacPass
|
||||
//
|
||||
// Created by Michael Starke on 02.03.13.
|
||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MPPathControl.h"
|
||||
|
||||
@implementation MPPathControl
|
||||
|
||||
- (id)initWithFrame:(NSRect)frame
|
||||
{
|
||||
self = [super initWithFrame:frame];
|
||||
if (self) {
|
||||
[[self cell] setShowsStateBy:NSNoCellMask];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -10,6 +10,14 @@
|
||||
|
||||
@implementation MPToolbarButton
|
||||
|
||||
- (id)initWithFrame:(NSRect)frameRect {
|
||||
self = [super initWithFrame:frameRect];
|
||||
if(self) {
|
||||
[self setFocusRingType:NSFocusRingTypeNone];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)setControlSize:(NSControlSize)controlSize {
|
||||
[[self cell] setControlSize:controlSize];
|
||||
switch (controlSize) {
|
||||
|
||||
@@ -10,14 +10,16 @@
|
||||
#import "MPIconHelper.h"
|
||||
#import "MPAppDelegate.h"
|
||||
#import "MPToolbarButton.h"
|
||||
#import "MPToolbarItem.h"
|
||||
#import "MPActionHelper.h"
|
||||
|
||||
NSString *const MPToolbarItemAddGroup = @"AddGroup";
|
||||
NSString *const MPToolbarItemAddEntry = @"AddEntry";
|
||||
NSString *const MPToolbarItemEdit = @"Edit";
|
||||
NSString *const MPToolbarItemDelete =@"Delete";
|
||||
NSString *const MPToolbarItemAction = @"Action";
|
||||
NSString *const MPToolbarItemSearch = @"Search";
|
||||
NSString *const MPToolbarItemInspector = @"Inspector";
|
||||
NSString *const MPToolbarItemAddGroup = @"TOOLBAR_ADD_GROUP";
|
||||
NSString *const MPToolbarItemAddEntry = @"TOOLBAR_ADD_ENTRY";
|
||||
NSString *const MPToolbarItemEdit = @"TOOLBAR_EDIT";
|
||||
NSString *const MPToolbarItemDelete =@"TOOLBAR_DELETE";
|
||||
NSString *const MPToolbarItemAction = @"TOOLBAR_ACTION";
|
||||
NSString *const MPToolbarItemSearch = @"TOOLBAR_SEARCH";
|
||||
NSString *const MPToolbarItemInspector = @"TOOLBAR_INSPECTOR";
|
||||
|
||||
@interface MPToolbarDelegate()
|
||||
|
||||
@@ -25,6 +27,9 @@ NSString *const MPToolbarItemInspector = @"Inspector";
|
||||
@property (retain) NSArray *toolbarIdentifiers;
|
||||
@property (retain) NSDictionary *toolbarImages;
|
||||
|
||||
- (NSString *)_localizedLabelForToolbarItemIdentifier:(NSString *)identifier;
|
||||
- (SEL)_actionForToolbarItemIdentifier:(NSString *)identifier;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MPToolbarDelegate
|
||||
@@ -33,7 +38,7 @@ NSString *const MPToolbarItemInspector = @"Inspector";
|
||||
- (id)init {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_toolbarIdentifiers = [@[ MPToolbarItemAddEntry, MPToolbarItemDelete, MPToolbarItemEdit, MPToolbarItemAddGroup, MPToolbarItemAction, NSToolbarFlexibleSpaceItemIdentifier, NSToolbarSpaceItemIdentifier, MPToolbarItemInspector, MPToolbarItemSearch ] retain];
|
||||
_toolbarIdentifiers = [@[ MPToolbarItemAddEntry, MPToolbarItemDelete, MPToolbarItemAddGroup, MPToolbarItemAction, NSToolbarFlexibleSpaceItemIdentifier, NSToolbarSpaceItemIdentifier, MPToolbarItemInspector, MPToolbarItemSearch ] retain];
|
||||
_toolbarImages = [[self createToolbarImages] retain];
|
||||
_toolbarItems = [[NSMutableDictionary alloc] initWithCapacity:[self.toolbarIdentifiers count]];
|
||||
}
|
||||
@@ -51,8 +56,8 @@ NSString *const MPToolbarItemInspector = @"Inspector";
|
||||
- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag {
|
||||
NSToolbarItem *item = self.toolbarItems[itemIdentifier];
|
||||
if(!item) {
|
||||
item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier];
|
||||
NSString *label = NSLocalizedString(itemIdentifier, @"");
|
||||
item = [[MPToolbarItem alloc] initWithItemIdentifier:itemIdentifier];
|
||||
NSString *label = [self _localizedLabelForToolbarItemIdentifier:itemIdentifier];
|
||||
[item setLabel:label];
|
||||
|
||||
if([itemIdentifier isEqualToString:MPToolbarItemSearch]) {
|
||||
@@ -104,13 +109,7 @@ NSString *const MPToolbarItemInspector = @"Inspector";
|
||||
[button setImage:image];
|
||||
[button setImagePosition:NSImageOnly];
|
||||
[button sizeToFit];
|
||||
if([itemIdentifier isEqualToString:MPToolbarItemEdit]) {
|
||||
[button setTarget:nil];
|
||||
[button setAction:@selector(showEditForm:)];
|
||||
}
|
||||
else if( [itemIdentifier isEqualToString:MPToolbarItemInspector]) {
|
||||
[button setAction:@selector(toggleInspector:)];
|
||||
}
|
||||
[button setAction:[self _actionForToolbarItemIdentifier:itemIdentifier]];
|
||||
|
||||
NSRect fittingRect = [button frame];
|
||||
fittingRect.size.width = MAX( (CGFloat)32.0,fittingRect.size.width);
|
||||
@@ -137,11 +136,35 @@ NSString *const MPToolbarItemInspector = @"Inspector";
|
||||
NSDictionary *imageDict = @{ MPToolbarItemAddEntry: [MPIconHelper icon:MPIconPassword],
|
||||
MPToolbarItemAddGroup: [MPIconHelper icon:MPIconPassword],
|
||||
MPToolbarItemDelete: [NSImage imageNamed:NSImageNameRemoveTemplate],
|
||||
MPToolbarItemEdit: [MPIconHelper icon:MPIconNotepad],
|
||||
MPToolbarItemAction: [NSImage imageNamed:NSImageNameActionTemplate],
|
||||
MPToolbarItemInspector: [NSImage imageNamed:NSImageNameInfo],
|
||||
};
|
||||
return imageDict;
|
||||
}
|
||||
|
||||
- (NSString *)_localizedLabelForToolbarItemIdentifier:(NSString *)identifier {
|
||||
NSDictionary *labelDict = @{
|
||||
MPToolbarItemAction: NSLocalizedString(@"ACTION", @""),
|
||||
MPToolbarItemAddEntry: NSLocalizedString(@"ADD_ENTRY", @""),
|
||||
MPToolbarItemAddGroup: NSLocalizedString(@"ADD_GROUP", @""),
|
||||
MPToolbarItemDelete: NSLocalizedString(@"DELETE", @""),
|
||||
MPToolbarItemEdit: NSLocalizedString(@"EDIT", @""),
|
||||
MPToolbarItemInspector: NSLocalizedString(@"TOGGLE_INSPECTOR", @""),
|
||||
MPToolbarItemSearch: NSLocalizedString(@"SEARCH", @"")
|
||||
};
|
||||
return labelDict[identifier];
|
||||
}
|
||||
|
||||
- (SEL)_actionForToolbarItemIdentifier:(NSString *)identifier {
|
||||
NSDictionary *actionDict = @{
|
||||
MPToolbarItemAddEntry: @(MPActionAddEntry),
|
||||
MPToolbarItemAddGroup: @(MPActionAddGroup),
|
||||
MPToolbarItemDelete: @(MPActionDelete),
|
||||
MPToolbarItemEdit: @(MPActionEdit),
|
||||
MPToolbarItemInspector: @(MPActionToggleInspector)
|
||||
};
|
||||
MPActionType actionType = (MPActionType)[actionDict[identifier] integerValue];
|
||||
return [MPActionHelper actionOfType:actionType];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
//
|
||||
// MPPathControl.h
|
||||
// MPToolbarItem.h
|
||||
// MacPass
|
||||
//
|
||||
// Created by Michael Starke on 02.03.13.
|
||||
// Created by Michael Starke on 09.03.13.
|
||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface MPPathControl : NSPathControl
|
||||
@interface MPToolbarItem : NSToolbarItem
|
||||
|
||||
@end
|
||||
20
MacPass/MPToolbarItem.m
Normal file
20
MacPass/MPToolbarItem.m
Normal file
@@ -0,0 +1,20 @@
|
||||
//
|
||||
// MPToolbarItem.m
|
||||
// MacPass
|
||||
//
|
||||
// Created by Michael Starke on 09.03.13.
|
||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MPToolbarItem.h"
|
||||
#import "MPActionHelper.h"
|
||||
|
||||
@implementation MPToolbarItem
|
||||
|
||||
- (void)validate {
|
||||
if(![self.view menu]) {
|
||||
id target = [NSApp targetForAction:[self action] to:nil from:self];
|
||||
[self setEnabled:( nil != target )];
|
||||
}
|
||||
}
|
||||
@end
|
||||
@@ -21,7 +21,7 @@
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>48A</string>
|
||||
<string>4B8</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
<reference key="NSNextResponder" ref="947682332"/>
|
||||
<int key="NSvFlags">268</int>
|
||||
<array class="NSMutableArray" key="NSSubviews"/>
|
||||
<string key="NSFrameSize">{209, 449}</string>
|
||||
<string key="NSFrameSize">{200, 449}</string>
|
||||
<reference key="NSSuperview" ref="947682332"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="938782220"/>
|
||||
@@ -67,7 +67,7 @@
|
||||
<reference key="NSNextResponder" ref="947682332"/>
|
||||
<int key="NSvFlags">256</int>
|
||||
<array class="NSMutableArray" key="NSSubviews"/>
|
||||
<string key="NSFrame">{{210, 0}, {383, 449}}</string>
|
||||
<string key="NSFrame">{{201, 0}, {325, 449}}</string>
|
||||
<reference key="NSSuperview" ref="947682332"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="350501330"/>
|
||||
@@ -77,7 +77,7 @@
|
||||
<object class="NSCustomView" id="350501330">
|
||||
<reference key="NSNextResponder" ref="947682332"/>
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{594, 0}, {133, 449}}</string>
|
||||
<string key="NSFrame">{{527, 0}, {200, 449}}</string>
|
||||
<reference key="NSSuperview" ref="947682332"/>
|
||||
<reference key="NSWindow"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:9</string>
|
||||
|
||||
BIN
MacPass/en.lproj/Localizable.strings
Normal file
BIN
MacPass/en.lproj/Localizable.strings
Normal file
Binary file not shown.
Reference in New Issue
Block a user