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 = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* 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 */; };
|
4C25D58516CF0F8800F6806C /* WelcomeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C25D58416CF0F8800F6806C /* WelcomeView.xib */; };
|
||||||
4C25D58716CF0FAA00F6806C /* EntryView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C25D58616CF0FAA00F6806C /* EntryView.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 */; };
|
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 */; };
|
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 */; };
|
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 */; };
|
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 */; };
|
4C61EA0316D2FD0800AC519E /* MPOutlineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C61EA0216D2FD0800AC519E /* MPOutlineViewController.m */; };
|
||||||
4C61EA0516D2FFE200AC519E /* OutlineView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C61EA0416D2FFE200AC519E /* OutlineView.xib */; };
|
4C61EA0516D2FFE200AC519E /* OutlineView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C61EA0416D2FFE200AC519E /* OutlineView.xib */; };
|
||||||
4C65C79C16DD283900E32CFF /* MPToolbarButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C65C79B16DD283900E32CFF /* MPToolbarButton.m */; };
|
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 */; };
|
4C669BA216760ED100DD0774 /* UUID.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C669B7B16760ED100DD0774 /* UUID.m */; };
|
||||||
4C69A73A16D589DF00EC1B1A /* MPGradientView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C69A73916D589DF00EC1B1A /* MPGradientView.m */; };
|
4C69A73A16D589DF00EC1B1A /* MPGradientView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C69A73916D589DF00EC1B1A /* MPGradientView.m */; };
|
||||||
4C6B0E8C16C9B99B00A9ED23 /* PasswordInputView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C6B0E8B16C9B99B00A9ED23 /* PasswordInputView.xib */; };
|
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 */; };
|
4C75CE3C16CB128700F61A4D /* MPDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C75CE3B16CB128700F61A4D /* MPDatabaseController.m */; };
|
||||||
4C77547516E55FE800970E02 /* MPInspectorTabViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C77547416E55FE800970E02 /* MPInspectorTabViewController.m */; };
|
4C77547516E55FE800970E02 /* MPInspectorTabViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C77547416E55FE800970E02 /* MPInspectorTabViewController.m */; };
|
||||||
4C77547716E55FFC00970E02 /* InspectorTabView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C77547616E55FFC00970E02 /* InspectorTabView.xib */; };
|
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 */; };
|
4C77E37A15B84A240093A587 /* MPAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C77E37915B84A240093A587 /* MPAppDelegate.m */; };
|
||||||
4C77E37D15B84A240093A587 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C77E37B15B84A240093A587 /* MainMenu.xib */; };
|
4C77E37D15B84A240093A587 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C77E37B15B84A240093A587 /* MainMenu.xib */; };
|
||||||
4C83814215BF4677001AE468 /* MPMainWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C83814115BF4677001AE468 /* MPMainWindowController.m */; };
|
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 */; };
|
4C8FECC816D57E3200BF26CF /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C8FECC716D57E3200BF26CF /* QuartzCore.framework */; };
|
||||||
4C920E2A16DCDFA00083839B /* MPLoggerProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C920E2916DCDFA00083839B /* MPLoggerProxy.m */; };
|
4C920E2A16DCDFA00083839B /* MPLoggerProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C920E2916DCDFA00083839B /* MPLoggerProxy.m */; };
|
||||||
4CA0B2ED15BCADAC00654E32 /* SettingsWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CA0B2EC15BCADAC00654E32 /* SettingsWindow.xib */; };
|
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 */; };
|
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 */; };
|
4CD78AC016D155FF00768A1D /* 11_CameraTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CD78ABB16D155FF00768A1D /* 11_CameraTemplate.pdf */; };
|
||||||
4CD884B715BD47080042BBF8 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CD884B615BD47080042BBF8 /* MainWindow.xib */; };
|
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 */; };
|
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 */; };
|
4CE8246F16E2E93400573141 /* MPOverlayWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8246E16E2E93400573141 /* MPOverlayWindowController.m */; };
|
||||||
4CE8247516E2F2B900573141 /* MPOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8247416E2F2B900573141 /* MPOverlayView.m */; };
|
4CE8247516E2F2B900573141 /* MPOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8247416E2F2B900573141 /* MPOverlayView.m */; };
|
||||||
4CFC53BF16E94729007396BE /* MPShadowBox.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC53BE16E94729007396BE /* MPShadowBox.m */; };
|
4CFC53BF16E94729007396BE /* MPShadowBox.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC53BE16E94729007396BE /* MPShadowBox.m */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference 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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
4CE8247316E2F2B900573141 /* MPOverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOverlayView.h; sourceTree = "<group>"; };
|
||||||
@@ -559,6 +552,7 @@
|
|||||||
4C77E36D15B84A240093A587 /* Supporting Files */ = {
|
4C77E36D15B84A240093A587 /* Supporting Files */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
4C888C8E16EB6C91003D34A1 /* Localizable.strings */,
|
||||||
4CB9339716D3A0DD00A13B5D /* Credits.rtf */,
|
4CB9339716D3A0DD00A13B5D /* Credits.rtf */,
|
||||||
4C77E36E15B84A240093A587 /* MacPass-Info.plist */,
|
4C77E36E15B84A240093A587 /* MacPass-Info.plist */,
|
||||||
4C77E36F15B84A240093A587 /* InfoPlist.strings */,
|
4C77E36F15B84A240093A587 /* InfoPlist.strings */,
|
||||||
@@ -598,6 +592,8 @@
|
|||||||
4CA0B30F15BCB85D00654E32 /* General */ = {
|
4CA0B30F15BCB85D00654E32 /* General */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
4C888C9516EB754B003D34A1 /* MPActionHelper.h */,
|
||||||
|
4C888C9616EB754B003D34A1 /* MPActionHelper.m */,
|
||||||
);
|
);
|
||||||
name = General;
|
name = General;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -656,18 +652,10 @@
|
|||||||
4CDB556616E29A8A00635918 /* Controls */ = {
|
4CDB556616E29A8A00635918 /* Controls */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
4C16854216D704980027ECBC /* MPPathBar.h */,
|
|
||||||
4C16854316D704980027ECBC /* MPPathBar.m */,
|
|
||||||
4C6DA0F716D81B8A0011224B /* MPPathBarItemView.h */,
|
|
||||||
4C6DA0F816D81B8A0011224B /* MPPathBarItemView.m */,
|
|
||||||
4C65C79A16DD283900E32CFF /* MPToolbarButton.h */,
|
4C65C79A16DD283900E32CFF /* MPToolbarButton.h */,
|
||||||
4C65C79B16DD283900E32CFF /* MPToolbarButton.m */,
|
4C65C79B16DD283900E32CFF /* MPToolbarButton.m */,
|
||||||
4CE06D7B16DEF3FE00840E3A /* MPButtonBar.h */,
|
4C888C9116EB6F5E003D34A1 /* MPToolbarItem.h */,
|
||||||
4CE06D7C16DEF3FE00840E3A /* MPButtonBar.m */,
|
4C888C9216EB6F5E003D34A1 /* MPToolbarItem.m */,
|
||||||
4C587F2C16E0257B0003718D /* MPButtonBarButton.h */,
|
|
||||||
4C587F2D16E0257B0003718D /* MPButtonBarButton.m */,
|
|
||||||
4CDB556216E29A7C00635918 /* MPPathControl.h */,
|
|
||||||
4CDB556316E29A7C00635918 /* MPPathControl.m */,
|
|
||||||
);
|
);
|
||||||
name = Controls;
|
name = Controls;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -785,6 +773,7 @@
|
|||||||
4C4E1DC716DC6536007B9B47 /* PathBar.xib in Resources */,
|
4C4E1DC716DC6536007B9B47 /* PathBar.xib in Resources */,
|
||||||
4C431BCF16E2BAB000700A81 /* OverlayWindow.xib in Resources */,
|
4C431BCF16E2BAB000700A81 /* OverlayWindow.xib in Resources */,
|
||||||
4C77547716E55FFC00970E02 /* InspectorTabView.xib in Resources */,
|
4C77547716E55FFC00970E02 /* InspectorTabView.xib in Resources */,
|
||||||
|
4C888C9016EB6C91003D34A1 /* Localizable.strings in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -870,18 +859,15 @@
|
|||||||
4C2C4C2C16D3BE3700D49295 /* KdbGroup+MPAdditions.m in Sources */,
|
4C2C4C2C16D3BE3700D49295 /* KdbGroup+MPAdditions.m in Sources */,
|
||||||
4CC1AEBE16D4467C006D2AAB /* KdbTree+MPAdditions.m in Sources */,
|
4CC1AEBE16D4467C006D2AAB /* KdbTree+MPAdditions.m in Sources */,
|
||||||
4C69A73A16D589DF00EC1B1A /* MPGradientView.m in Sources */,
|
4C69A73A16D589DF00EC1B1A /* MPGradientView.m in Sources */,
|
||||||
4C16854416D704980027ECBC /* MPPathBar.m in Sources */,
|
|
||||||
4C6DA0F916D81B8A0011224B /* MPPathBarItemView.m in Sources */,
|
|
||||||
4C920E2A16DCDFA00083839B /* MPLoggerProxy.m in Sources */,
|
4C920E2A16DCDFA00083839B /* MPLoggerProxy.m in Sources */,
|
||||||
4C65C79C16DD283900E32CFF /* MPToolbarButton.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 */,
|
4C431BCD16E2A82800700A81 /* MPPasteBoardController.m in Sources */,
|
||||||
4CE8246F16E2E93400573141 /* MPOverlayWindowController.m in Sources */,
|
4CE8246F16E2E93400573141 /* MPOverlayWindowController.m in Sources */,
|
||||||
4CE8247516E2F2B900573141 /* MPOverlayView.m in Sources */,
|
4CE8247516E2F2B900573141 /* MPOverlayView.m in Sources */,
|
||||||
4C77547516E55FE800970E02 /* MPInspectorTabViewController.m in Sources */,
|
4C77547516E55FE800970E02 /* MPInspectorTabViewController.m in Sources */,
|
||||||
4CFC53BF16E94729007396BE /* MPShadowBox.m in Sources */,
|
4CFC53BF16E94729007396BE /* MPShadowBox.m in Sources */,
|
||||||
|
4C888C9316EB6F5E003D34A1 /* MPToolbarItem.m in Sources */,
|
||||||
|
4C888C9716EB754B003D34A1 /* MPActionHelper.m in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -904,6 +890,14 @@
|
|||||||
name = MainMenu.xib;
|
name = MainMenu.xib;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
4C888C8E16EB6C91003D34A1 /* Localizable.strings */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
4C888C8F16EB6C91003D34A1 /* en */,
|
||||||
|
);
|
||||||
|
name = Localizable.strings;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
4CB9339716D3A0DD00A13B5D /* Credits.rtf */ = {
|
4CB9339716D3A0DD00A13B5D /* Credits.rtf */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
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 "MPMainWindowController.h"
|
||||||
#import "MPSettingsController.h"
|
#import "MPSettingsController.h"
|
||||||
#import "MPDatabaseController.h"
|
#import "MPDatabaseController.h"
|
||||||
|
#import "MPActionHelper.h"
|
||||||
|
|
||||||
@interface MPAppDelegate ()
|
@interface MPAppDelegate ()
|
||||||
|
|
||||||
@@ -70,8 +71,14 @@
|
|||||||
|
|
||||||
NSMutableArray *items = [NSMutableArray arrayWithCapacity:7];
|
NSMutableArray *items = [NSMutableArray arrayWithCapacity:7];
|
||||||
if(insertCreate) {
|
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 ]];
|
[items addObjectsFromArray:@[ newGroup, newEntry ]];
|
||||||
[newEntry release];
|
[newEntry release];
|
||||||
[newGroup release];
|
[newGroup release];
|
||||||
@@ -80,7 +87,9 @@
|
|||||||
if([items count] > 0) {
|
if([items count] > 0) {
|
||||||
[items addObject:[NSMenuItem separatorItem]];
|
[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];
|
[items addObject:delete];
|
||||||
[delete release];
|
[delete release];
|
||||||
}
|
}
|
||||||
@@ -88,13 +97,34 @@
|
|||||||
if([items count] > 0) {
|
if([items count] > 0) {
|
||||||
[items addObject:[NSMenuItem separatorItem]];
|
[items addObject:[NSMenuItem separatorItem]];
|
||||||
}
|
}
|
||||||
NSMenuItem *copyUsername = [[NSMenuItem alloc] initWithTitle:@"Copy Username" action:@selector(copyUsername:) keyEquivalent:@"C"];
|
NSMenuItem *copyUsername = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"COPY_USERNAME", @"")
|
||||||
NSMenuItem *copyPassword = [[NSMenuItem alloc] initWithTitle:@"Copy Password" action:@selector(copyPassword:) keyEquivalent:@"c"];
|
action:[MPActionHelper actionOfType:MPActionCopyUsername]
|
||||||
NSMenuItem *openURL = [[NSMenuItem alloc] initWithTitle:@"Open URL" action:@selector(openURL:) keyEquivalent:@"U"];
|
keyEquivalent:@"C"];
|
||||||
[items addObjectsFromArray:@[ copyUsername, copyPassword, openURL]];
|
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];
|
[copyPassword release];
|
||||||
[copyUsername release];
|
[copyUsername release];
|
||||||
[openURL release];
|
|
||||||
}
|
}
|
||||||
return items;
|
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 {
|
- (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
|
@end
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ typedef enum {
|
|||||||
|
|
||||||
- (void)copyUsername:(id)sender;
|
- (void)copyUsername:(id)sender;
|
||||||
- (void)copyPassword:(id)sender;
|
- (void)copyPassword:(id)sender;
|
||||||
//- (void)copyURL:(id)sender;
|
- (void)copyURL:(id)sender;
|
||||||
//- (void)createEntry:(id)sender;
|
- (void)openURL:(id)sender;
|
||||||
- (void)deleteEntry:(id)sender;
|
- (void)deleteEntry:(id)sender;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -28,6 +28,12 @@ typedef enum {
|
|||||||
MPFilterTitles = 8,
|
MPFilterTitles = 8,
|
||||||
} MPFilterModeType;
|
} MPFilterModeType;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
MPOverlayInfoPassword,
|
||||||
|
MPOverlayInfoUsername,
|
||||||
|
MPOverlayInfoURL,
|
||||||
|
} MPOVerlayInfoType;
|
||||||
|
|
||||||
NSString *const MPEntryTableUserNameColumnIdentifier = @"MPUserNameColumnIdentifier";
|
NSString *const MPEntryTableUserNameColumnIdentifier = @"MPUserNameColumnIdentifier";
|
||||||
NSString *const MPEntryTableTitleColumnIdentifier = @"MPTitleColumnIdentifier";
|
NSString *const MPEntryTableTitleColumnIdentifier = @"MPTitleColumnIdentifier";
|
||||||
NSString *const MPEntryTablePasswordColumnIdentifier = @"MPPasswordColumnIdentifier";
|
NSString *const MPEntryTablePasswordColumnIdentifier = @"MPPasswordColumnIdentifier";
|
||||||
@@ -81,7 +87,8 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
|
|||||||
- (void)_showFilterBarAnimated:(BOOL)animate;
|
- (void)_showFilterBarAnimated:(BOOL)animate;
|
||||||
- (void)_hideStatusBarAnimated:(BOOL)animate;
|
- (void)_hideStatusBarAnimated:(BOOL)animate;
|
||||||
|
|
||||||
- (void)_quickCopyEntryData:(id)sender;
|
- (void)_columnDoubleClick:(id)sender;
|
||||||
|
- (void)_copyToPasteboard:(NSString *)data overlayInfo:(MPOVerlayInfoType)overlayInfoType;
|
||||||
- (KdbEntry *)_clickedOrSelectedEntry;
|
- (KdbEntry *)_clickedOrSelectedEntry;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
@@ -127,7 +134,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
|
|||||||
[self _hideStatusBarAnimated:NO];
|
[self _hideStatusBarAnimated:NO];
|
||||||
|
|
||||||
[self.entryTable setDelegate:self];
|
[self.entryTable setDelegate:self];
|
||||||
[self.entryTable setDoubleAction:@selector(_quickCopyEntryData:)];
|
[self.entryTable setDoubleAction:@selector(_columnDoubleClick:)];
|
||||||
[self.entryTable setTarget:self];
|
[self.entryTable setTarget:self];
|
||||||
[self _setupEntryMenu];
|
[self _setupEntryMenu];
|
||||||
|
|
||||||
@@ -210,6 +217,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
|
|||||||
}
|
}
|
||||||
MPOutlineViewDelegate *delegate = [notification object];
|
MPOutlineViewDelegate *delegate = [notification object];
|
||||||
KdbGroup *group = delegate.selectedGroup;
|
KdbGroup *group = delegate.selectedGroup;
|
||||||
|
[self.entryTable deselectAll:nil];
|
||||||
if(group) {
|
if(group) {
|
||||||
[self.entryArrayController setContent:nil];
|
[self.entryArrayController setContent:nil];
|
||||||
[self.entryArrayController addObjects:group.entries];
|
[self.entryArrayController addObjects:group.entries];
|
||||||
@@ -235,7 +243,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)deselectAll:(id)sender {
|
- (void)deselectAll:(id)sender {
|
||||||
[self.entryTable deselectAll:self];
|
[self.entryTable deselectAll:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)clearFilter {
|
- (void)clearFilter {
|
||||||
@@ -298,7 +306,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark Animation
|
#pragma mark UI Feedback
|
||||||
|
|
||||||
- (void)_showFilterBarAnimated:(BOOL)animate {
|
- (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
|
#pragma mark EntryMenu
|
||||||
|
|
||||||
- (void)_setupEntryMenu {
|
- (void)_setupEntryMenu {
|
||||||
@@ -394,48 +425,40 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
|
|||||||
|
|
||||||
#pragma mark Actions
|
#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 {
|
- (void)copyPassword:(id)sender {
|
||||||
KdbEntry *selectedEntry = [self _clickedOrSelectedEntry];
|
KdbEntry *selectedEntry = [self _clickedOrSelectedEntry];
|
||||||
if(!selectedEntry) {
|
if(selectedEntry) {
|
||||||
return; // nothing found to work with;
|
[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 {
|
- (void)copyUsername:(id)sender {
|
||||||
KdbEntry *selectedEntry = [self _clickedOrSelectedEntry];
|
KdbEntry *selectedEntry = [self _clickedOrSelectedEntry];
|
||||||
if(!selectedEntry) {
|
if(selectedEntry) {
|
||||||
return; // No entry to work with;
|
[self _copyToPasteboard:selectedEntry.username overlayInfo:MPOverlayInfoUsername];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (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];
|
||||||
}
|
}
|
||||||
[[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)deleteEntry:(id)sender {
|
- (void)deleteEntry:(id)sender {
|
||||||
KdbEntry *selectedEntry = [self _clickedOrSelectedEntry];
|
KdbEntry *selectedEntry = [self _clickedOrSelectedEntry];
|
||||||
if(!selectedEntry) {
|
if(selectedEntry) {
|
||||||
return; // no entry selected
|
[self.entryArrayController removeObject:selectedEntry];
|
||||||
}
|
}
|
||||||
//[[selectedEntry parent] removeEntry:selectedEntry];
|
|
||||||
[self.entryArrayController removeObject:selectedEntry];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_toggleFilterSpace:(id)sender {
|
- (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 {
|
- (void)setFilterMode:(MPFilterModeType)newFilterMode {
|
||||||
if(_filterMode != newFilterMode) {
|
if(_filterMode != newFilterMode) {
|
||||||
if(newFilterMode == MPFilterNone) {
|
if(newFilterMode == MPFilterNone) {
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
#import "MPInspectorTabViewController.h"
|
#import "MPInspectorTabViewController.h"
|
||||||
#import "MPEntryViewController.h"
|
#import "MPEntryViewController.h"
|
||||||
|
#import "MPOutlineViewDelegate.h"
|
||||||
|
#import "MPDatabaseController.h"
|
||||||
#import "MPShadowBox.h"
|
#import "MPShadowBox.h"
|
||||||
#import "MPIconHelper.h"
|
#import "MPIconHelper.h"
|
||||||
#import "KdbLib.h"
|
#import "KdbLib.h"
|
||||||
@@ -42,6 +44,11 @@
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)dealloc {
|
||||||
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)didLoadView {
|
- (void)didLoadView {
|
||||||
|
|
||||||
for( NSTabViewItem *item in [self.tabView tabViewItems]){
|
for( NSTabViewItem *item in [self.tabView tabViewItems]){
|
||||||
@@ -55,6 +62,7 @@
|
|||||||
selector:@selector(_didChangeSelectedEntry:)
|
selector:@selector(_didChangeSelectedEntry:)
|
||||||
name:MPDidChangeSelectedEntryNotification
|
name:MPDidChangeSelectedEntryNotification
|
||||||
object:nil];
|
object:nil];
|
||||||
|
|
||||||
[self _clearContent];
|
[self _clearContent];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +102,6 @@
|
|||||||
- (void)setSelectedEntry:(KdbEntry *)selectedEntry {
|
- (void)setSelectedEntry:(KdbEntry *)selectedEntry {
|
||||||
if(_selectedEntry != selectedEntry) {
|
if(_selectedEntry != selectedEntry) {
|
||||||
_selectedEntry = selectedEntry;
|
_selectedEntry = selectedEntry;
|
||||||
if(_selectedEntry) {}
|
|
||||||
[self _updateContent];
|
[self _updateContent];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -217,25 +217,26 @@ static CGFloat _outlineSplitterPosition;
|
|||||||
if(menuAction == @selector(toggleOutlineView:)) {
|
if(menuAction == @selector(toggleOutlineView:)) {
|
||||||
NSView *outlineView = [self.splitView subviews][MPSplitViewOutlineViewIndex];
|
NSView *outlineView = [self.splitView subviews][MPSplitViewOutlineViewIndex];
|
||||||
BOOL outlineIsHidden = [self.splitView isSubviewCollapsed:outlineView];
|
BOOL outlineIsHidden = [self.splitView isSubviewCollapsed:outlineView];
|
||||||
if(outlineIsHidden) {
|
NSString *title = outlineIsHidden ? NSLocalizedString(@"SHOW_OUTLINE_VIEW", @"") : NSLocalizedString(@"HIDE_OUTLINE_VIEW", @"Hide the Outline View");
|
||||||
[menuItem setTitle:@"Show Outline View"];
|
|
||||||
}
|
[menuItem setTitle:title];
|
||||||
[menuItem setTitle:@"Hide Outline View"];
|
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( menuAction == @selector(toggleInspector:) ) {
|
if( menuAction == @selector(toggleInspector:) ) {
|
||||||
NSView *inspectorView = [self.splitView subviews][MPSplitViewInspectorViewIndex];
|
NSView *inspectorView = [self.splitView subviews][MPSplitViewInspectorViewIndex];
|
||||||
BOOL inspectorIsHidden = [self.splitView isSubviewCollapsed:inspectorView];
|
BOOL inspectorIsHidden = [self.splitView isSubviewCollapsed:inspectorView];
|
||||||
if(inspectorIsHidden) {
|
NSString *title = inspectorIsHidden ? NSLocalizedString(@"SHOW_INSPECTOR", @"Show the Inspector") : NSLocalizedString(@"HIDE_INSPECTOR", @"Hide the Inspector");
|
||||||
[menuItem setTitle:@"Show Inspecotr"];
|
|
||||||
}
|
[menuItem setTitle:title];
|
||||||
[menuItem setTitle:@"Hide Inspector"];
|
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem {
|
||||||
|
return [self.toolbarDelegate validateToolbarItem:theItem];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)performFindPanelAction:(id)sender {
|
- (void)performFindPanelAction:(id)sender {
|
||||||
[self.window makeFirstResponder:[self.toolbarDelegate.searchItem view]];
|
[self.window makeFirstResponder:[self.toolbarDelegate.searchItem view]];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,6 +71,7 @@
|
|||||||
|
|
||||||
|
|
||||||
- (void)_didOpenDocument:(NSNotification *)notification {
|
- (void)_didOpenDocument:(NSNotification *)notification {
|
||||||
|
[self.outlineView deselectAll:nil];
|
||||||
[self.outlineView reloadData];
|
[self.outlineView reloadData];
|
||||||
MPDatabaseController *dbContoller = [MPDatabaseController defaultController];
|
MPDatabaseController *dbContoller = [MPDatabaseController defaultController];
|
||||||
if(dbContoller.database) {
|
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
|
@implementation MPToolbarButton
|
||||||
|
|
||||||
|
- (id)initWithFrame:(NSRect)frameRect {
|
||||||
|
self = [super initWithFrame:frameRect];
|
||||||
|
if(self) {
|
||||||
|
[self setFocusRingType:NSFocusRingTypeNone];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setControlSize:(NSControlSize)controlSize {
|
- (void)setControlSize:(NSControlSize)controlSize {
|
||||||
[[self cell] setControlSize:controlSize];
|
[[self cell] setControlSize:controlSize];
|
||||||
switch (controlSize) {
|
switch (controlSize) {
|
||||||
|
|||||||
@@ -10,14 +10,16 @@
|
|||||||
#import "MPIconHelper.h"
|
#import "MPIconHelper.h"
|
||||||
#import "MPAppDelegate.h"
|
#import "MPAppDelegate.h"
|
||||||
#import "MPToolbarButton.h"
|
#import "MPToolbarButton.h"
|
||||||
|
#import "MPToolbarItem.h"
|
||||||
|
#import "MPActionHelper.h"
|
||||||
|
|
||||||
NSString *const MPToolbarItemAddGroup = @"AddGroup";
|
NSString *const MPToolbarItemAddGroup = @"TOOLBAR_ADD_GROUP";
|
||||||
NSString *const MPToolbarItemAddEntry = @"AddEntry";
|
NSString *const MPToolbarItemAddEntry = @"TOOLBAR_ADD_ENTRY";
|
||||||
NSString *const MPToolbarItemEdit = @"Edit";
|
NSString *const MPToolbarItemEdit = @"TOOLBAR_EDIT";
|
||||||
NSString *const MPToolbarItemDelete =@"Delete";
|
NSString *const MPToolbarItemDelete =@"TOOLBAR_DELETE";
|
||||||
NSString *const MPToolbarItemAction = @"Action";
|
NSString *const MPToolbarItemAction = @"TOOLBAR_ACTION";
|
||||||
NSString *const MPToolbarItemSearch = @"Search";
|
NSString *const MPToolbarItemSearch = @"TOOLBAR_SEARCH";
|
||||||
NSString *const MPToolbarItemInspector = @"Inspector";
|
NSString *const MPToolbarItemInspector = @"TOOLBAR_INSPECTOR";
|
||||||
|
|
||||||
@interface MPToolbarDelegate()
|
@interface MPToolbarDelegate()
|
||||||
|
|
||||||
@@ -25,6 +27,9 @@ NSString *const MPToolbarItemInspector = @"Inspector";
|
|||||||
@property (retain) NSArray *toolbarIdentifiers;
|
@property (retain) NSArray *toolbarIdentifiers;
|
||||||
@property (retain) NSDictionary *toolbarImages;
|
@property (retain) NSDictionary *toolbarImages;
|
||||||
|
|
||||||
|
- (NSString *)_localizedLabelForToolbarItemIdentifier:(NSString *)identifier;
|
||||||
|
- (SEL)_actionForToolbarItemIdentifier:(NSString *)identifier;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation MPToolbarDelegate
|
@implementation MPToolbarDelegate
|
||||||
@@ -33,7 +38,7 @@ NSString *const MPToolbarItemInspector = @"Inspector";
|
|||||||
- (id)init {
|
- (id)init {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) {
|
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];
|
_toolbarImages = [[self createToolbarImages] retain];
|
||||||
_toolbarItems = [[NSMutableDictionary alloc] initWithCapacity:[self.toolbarIdentifiers count]];
|
_toolbarItems = [[NSMutableDictionary alloc] initWithCapacity:[self.toolbarIdentifiers count]];
|
||||||
}
|
}
|
||||||
@@ -50,9 +55,9 @@ NSString *const MPToolbarItemInspector = @"Inspector";
|
|||||||
|
|
||||||
- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag {
|
- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag {
|
||||||
NSToolbarItem *item = self.toolbarItems[itemIdentifier];
|
NSToolbarItem *item = self.toolbarItems[itemIdentifier];
|
||||||
if(!item) {
|
if(!item) {
|
||||||
item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier];
|
item = [[MPToolbarItem alloc] initWithItemIdentifier:itemIdentifier];
|
||||||
NSString *label = NSLocalizedString(itemIdentifier, @"");
|
NSString *label = [self _localizedLabelForToolbarItemIdentifier:itemIdentifier];
|
||||||
[item setLabel:label];
|
[item setLabel:label];
|
||||||
|
|
||||||
if([itemIdentifier isEqualToString:MPToolbarItemSearch]) {
|
if([itemIdentifier isEqualToString:MPToolbarItemSearch]) {
|
||||||
@@ -71,7 +76,7 @@ NSString *const MPToolbarItemInspector = @"Inspector";
|
|||||||
[[popupButton cell] setImageScaling:NSImageScaleProportionallyDown];
|
[[popupButton cell] setImageScaling:NSImageScaleProportionallyDown];
|
||||||
[popupButton setTitle:@""];
|
[popupButton setTitle:@""];
|
||||||
[popupButton sizeToFit];
|
[popupButton sizeToFit];
|
||||||
|
|
||||||
NSRect newFrame = [popupButton frame];
|
NSRect newFrame = [popupButton frame];
|
||||||
newFrame.size.width += 20;
|
newFrame.size.width += 20;
|
||||||
|
|
||||||
@@ -104,13 +109,7 @@ NSString *const MPToolbarItemInspector = @"Inspector";
|
|||||||
[button setImage:image];
|
[button setImage:image];
|
||||||
[button setImagePosition:NSImageOnly];
|
[button setImagePosition:NSImageOnly];
|
||||||
[button sizeToFit];
|
[button sizeToFit];
|
||||||
if([itemIdentifier isEqualToString:MPToolbarItemEdit]) {
|
[button setAction:[self _actionForToolbarItemIdentifier:itemIdentifier]];
|
||||||
[button setTarget:nil];
|
|
||||||
[button setAction:@selector(showEditForm:)];
|
|
||||||
}
|
|
||||||
else if( [itemIdentifier isEqualToString:MPToolbarItemInspector]) {
|
|
||||||
[button setAction:@selector(toggleInspector:)];
|
|
||||||
}
|
|
||||||
|
|
||||||
NSRect fittingRect = [button frame];
|
NSRect fittingRect = [button frame];
|
||||||
fittingRect.size.width = MAX( (CGFloat)32.0,fittingRect.size.width);
|
fittingRect.size.width = MAX( (CGFloat)32.0,fittingRect.size.width);
|
||||||
@@ -137,11 +136,35 @@ NSString *const MPToolbarItemInspector = @"Inspector";
|
|||||||
NSDictionary *imageDict = @{ MPToolbarItemAddEntry: [MPIconHelper icon:MPIconPassword],
|
NSDictionary *imageDict = @{ MPToolbarItemAddEntry: [MPIconHelper icon:MPIconPassword],
|
||||||
MPToolbarItemAddGroup: [MPIconHelper icon:MPIconPassword],
|
MPToolbarItemAddGroup: [MPIconHelper icon:MPIconPassword],
|
||||||
MPToolbarItemDelete: [NSImage imageNamed:NSImageNameRemoveTemplate],
|
MPToolbarItemDelete: [NSImage imageNamed:NSImageNameRemoveTemplate],
|
||||||
MPToolbarItemEdit: [MPIconHelper icon:MPIconNotepad],
|
|
||||||
MPToolbarItemAction: [NSImage imageNamed:NSImageNameActionTemplate],
|
MPToolbarItemAction: [NSImage imageNamed:NSImageNameActionTemplate],
|
||||||
MPToolbarItemInspector: [NSImage imageNamed:NSImageNameInfo],
|
MPToolbarItemInspector: [NSImage imageNamed:NSImageNameInfo],
|
||||||
};
|
};
|
||||||
return imageDict;
|
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
|
@end
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
//
|
//
|
||||||
// MPPathControl.h
|
// MPToolbarItem.h
|
||||||
// MacPass
|
// 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.
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
@interface MPPathControl : NSPathControl
|
@interface MPToolbarItem : NSToolbarItem
|
||||||
|
|
||||||
@end
|
@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>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>48A</string>
|
<string>4B8</string>
|
||||||
<key>LSMinimumSystemVersion</key>
|
<key>LSMinimumSystemVersion</key>
|
||||||
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
|
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
|
|||||||
@@ -56,7 +56,7 @@
|
|||||||
<reference key="NSNextResponder" ref="947682332"/>
|
<reference key="NSNextResponder" ref="947682332"/>
|
||||||
<int key="NSvFlags">268</int>
|
<int key="NSvFlags">268</int>
|
||||||
<array class="NSMutableArray" key="NSSubviews"/>
|
<array class="NSMutableArray" key="NSSubviews"/>
|
||||||
<string key="NSFrameSize">{209, 449}</string>
|
<string key="NSFrameSize">{200, 449}</string>
|
||||||
<reference key="NSSuperview" ref="947682332"/>
|
<reference key="NSSuperview" ref="947682332"/>
|
||||||
<reference key="NSWindow"/>
|
<reference key="NSWindow"/>
|
||||||
<reference key="NSNextKeyView" ref="938782220"/>
|
<reference key="NSNextKeyView" ref="938782220"/>
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
<reference key="NSNextResponder" ref="947682332"/>
|
<reference key="NSNextResponder" ref="947682332"/>
|
||||||
<int key="NSvFlags">256</int>
|
<int key="NSvFlags">256</int>
|
||||||
<array class="NSMutableArray" key="NSSubviews"/>
|
<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="NSSuperview" ref="947682332"/>
|
||||||
<reference key="NSWindow"/>
|
<reference key="NSWindow"/>
|
||||||
<reference key="NSNextKeyView" ref="350501330"/>
|
<reference key="NSNextKeyView" ref="350501330"/>
|
||||||
@@ -77,7 +77,7 @@
|
|||||||
<object class="NSCustomView" id="350501330">
|
<object class="NSCustomView" id="350501330">
|
||||||
<reference key="NSNextResponder" ref="947682332"/>
|
<reference key="NSNextResponder" ref="947682332"/>
|
||||||
<int key="NSvFlags">268</int>
|
<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="NSSuperview" ref="947682332"/>
|
||||||
<reference key="NSWindow"/>
|
<reference key="NSWindow"/>
|
||||||
<string key="NSReuseIdentifierKey">_NS:9</string>
|
<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