From 361b405825550bcc9ee037376b186ceb42065e00 Mon Sep 17 00:00:00 2001 From: michael starke Date: Tue, 26 Feb 2013 20:57:25 +0100 Subject: [PATCH] Added MPToolbarButton to handle small control size in Toolbar EntryEditView now gets displayed (without any functionality) --- MacPass.xcodeproj/project.pbxproj | 12 + MacPass/EntryEditView.xib | 1241 ++++++++++++++++++----- MacPass/FilterBar.xib | 59 +- MacPass/MPDatabaseController.h | 1 + MacPass/MPDatabaseController.m | 4 + MacPass/MPEntryEditController.h | 5 + MacPass/MPEntryEditController.m | 27 +- MacPass/MPEntryViewController.m | 48 +- MacPass/MPGradientView.m | 8 +- MacPass/MPLoggerProxy.h | 16 + MacPass/MPLoggerProxy.m | 35 + MacPass/MPMainWindowController.h | 6 - MacPass/MPMainWindowController.m | 40 +- MacPass/MPMainWindowSplitViewDelegate.m | 14 +- MacPass/MPOutlineViewController.m | 16 +- MacPass/MPPasswordInputController.m | 14 +- MacPass/MPToolbarButton.h | 18 + MacPass/MPToolbarButton.m | 36 + MacPass/MPToolbarDelegate.m | 24 +- MacPass/MacPass-Info.plist | 2 +- MacPass/PasswordInputView.xib | 80 +- MacPass/SettingsWindow.xib | 4 +- 22 files changed, 1274 insertions(+), 436 deletions(-) create mode 100644 MacPass/MPLoggerProxy.h create mode 100644 MacPass/MPLoggerProxy.m create mode 100644 MacPass/MPToolbarButton.h create mode 100644 MacPass/MPToolbarButton.m diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index 04afd314..9b1e1f48 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -25,6 +25,7 @@ 4C586FA216D07F6A00E7DB57 /* 02_MessageBoxWarningTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C586FA116D07F6A00E7DB57 /* 02_MessageBoxWarningTemplate.pdf */; }; 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 */; }; 4C65FAE916D16DDB006E0577 /* MPPasswordInputController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C65FAE716D16DDB006E0577 /* MPPasswordInputController.m */; }; 4C669B7F16760ED100DD0774 /* AesInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C669B3116760ED100DD0774 /* AesInputStream.m */; }; 4C669B8016760ED100DD0774 /* AesOutputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C669B3316760ED100DD0774 /* AesOutputStream.m */; }; @@ -72,6 +73,7 @@ 4C77E37D15B84A240093A587 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C77E37B15B84A240093A587 /* MainMenu.xib */; }; 4C83814215BF4677001AE468 /* MPMainWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C83814115BF4677001AE468 /* MPMainWindowController.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 */; }; 4CA0B2F015BCADC800654E32 /* GeneralSettings.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CA0B2EF15BCADC800654E32 /* GeneralSettings.xib */; }; 4CA0B2F915BCAF6700654E32 /* MPGeneralSettingsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA0B2F815BCAF6700654E32 /* MPGeneralSettingsController.m */; }; @@ -125,6 +127,8 @@ 4C61EA0116D2FD0800AC519E /* MPOutlineViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOutlineViewController.h; sourceTree = ""; }; 4C61EA0216D2FD0800AC519E /* MPOutlineViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPOutlineViewController.m; sourceTree = ""; }; 4C61EA0416D2FFE200AC519E /* OutlineView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = OutlineView.xib; sourceTree = ""; }; + 4C65C79A16DD283900E32CFF /* MPToolbarButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPToolbarButton.h; sourceTree = ""; }; + 4C65C79B16DD283900E32CFF /* MPToolbarButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPToolbarButton.m; sourceTree = ""; }; 4C65FAE616D16DDB006E0577 /* MPPasswordInputController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordInputController.h; sourceTree = ""; }; 4C65FAE716D16DDB006E0577 /* MPPasswordInputController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordInputController.m; sourceTree = ""; }; 4C669B3016760ED100DD0774 /* AesInputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AesInputStream.h; sourceTree = ""; }; @@ -222,6 +226,8 @@ 4C83814015BF4677001AE468 /* MPMainWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMainWindowController.h; sourceTree = ""; }; 4C83814115BF4677001AE468 /* MPMainWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPMainWindowController.m; sourceTree = ""; }; 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 = ""; }; + 4C920E2916DCDFA00083839B /* MPLoggerProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPLoggerProxy.m; sourceTree = ""; }; 4CA0B2EC15BCADAC00654E32 /* SettingsWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SettingsWindow.xib; sourceTree = ""; }; 4CA0B2EF15BCADC800654E32 /* GeneralSettings.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GeneralSettings.xib; sourceTree = ""; }; 4CA0B2F715BCAF6700654E32 /* MPGeneralSettingsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPGeneralSettingsController.h; sourceTree = ""; }; @@ -300,6 +306,8 @@ 4C16854316D704980027ECBC /* MPPathBar.m */, 4C6DA0F716D81B8A0011224B /* MPPathBarItemView.h */, 4C6DA0F816D81B8A0011224B /* MPPathBarItemView.m */, + 4C65C79A16DD283900E32CFF /* MPToolbarButton.h */, + 4C65C79B16DD283900E32CFF /* MPToolbarButton.m */, ); name = Views; sourceTree = ""; @@ -320,6 +328,8 @@ children = ( 4C2E382116D1421B00037A9D /* MPIconHelper.h */, 4C2E382216D1421B00037A9D /* MPIconHelper.m */, + 4C920E2816DCDFA00083839B /* MPLoggerProxy.h */, + 4C920E2916DCDFA00083839B /* MPLoggerProxy.m */, ); name = Helper; sourceTree = ""; @@ -792,6 +802,8 @@ 4CF5D49616D5B6E900CB78BD /* MPEntryEditController.m in Sources */, 4C16854416D704980027ECBC /* MPPathBar.m in Sources */, 4C6DA0F916D81B8A0011224B /* MPPathBarItemView.m in Sources */, + 4C920E2A16DCDFA00083839B /* MPLoggerProxy.m in Sources */, + 4C65C79C16DD283900E32CFF /* MPToolbarButton.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/MacPass/EntryEditView.xib b/MacPass/EntryEditView.xib index 2231f22e..152df865 100644 --- a/MacPass/EntryEditView.xib +++ b/MacPass/EntryEditView.xib @@ -19,18 +19,19 @@ NSCustomView NSDatePicker NSDatePickerCell - NSImageCell - NSImageView NSMenu NSMenuItem NSPopUpButton NSPopUpButtonCell + NSScrollView + NSScroller NSSecureTextField NSSecureTextFieldCell NSTabView NSTabViewItem NSTextField NSTextFieldCell + NSTextView NSView @@ -57,9 +58,10 @@ 12 - {{13, 10}, {482, 597}} + {{13, 10}, {411, 461}} + _NS:9 @@ -71,7 +73,7 @@ 268 - {{168, 497}, {190, 22}} + {{133, 361}, {190, 22}} @@ -93,7 +95,7 @@ 6 System textBackgroundColor - + 3 MQA @@ -113,7 +115,7 @@ 268 - {{131, 500}, {32, 17}} + {{96, 364}, {32, 17}} @@ -147,7 +149,7 @@ 268 - {{168, 465}, {190, 22}} + {{133, 329}, {190, 22}} @@ -169,7 +171,7 @@ 268 - {{96, 468}, {67, 17}} + {{61, 332}, {67, 17}} @@ -190,7 +192,7 @@ 268 - {{98, 435}, {64, 16}} + {{63, 299}, {64, 16}} @@ -211,7 +213,7 @@ 268 - {{165, 331}, {132, 18}} + {{130, 195}, {132, 18}} @@ -244,7 +246,7 @@ 268 - {{167, 433}, {191, 22}} + {{132, 297}, {191, 22}} @@ -269,7 +271,7 @@ 268 - {{168, 401}, {190, 22}} + {{133, 265}, {190, 22}} @@ -294,7 +296,7 @@ 268 - {{167, 303}, {104, 27}} + {{132, 167}, {104, 27}} @@ -347,7 +349,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA 268 - {{52, 403}, {111, 17}} + {{17, 267}, {111, 17}} @@ -368,7 +370,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA 268 - {{61, 307}, {102, 17}} + {{26, 170}, {102, 17}} @@ -389,7 +391,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA 268 - {{166, 377}, {119, 18}} + {{131, 241}, {119, 18}} @@ -416,7 +418,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA 268 - {{273, 301}, {88, 26}} + {{238, 165}, {88, 26}} @@ -492,7 +494,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA 268 - {{164, 524}, {100, 26}} + {{129, 388}, {100, 26}} @@ -562,7 +564,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA 268 - {{132, 529}, {31, 17}} + {{97, 393}, {31, 17}} @@ -583,7 +585,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA 268 - {{420, 301}, {29, 26}} + {{349, 163}, {29, 26}} @@ -613,42 +615,687 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA 274 - + - 268 - {{18, 14}, {404, 205}} + 256 + + + + 2304 + + + + 2322 + + Apple HTML pasteboard type + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + Apple URL pasteboard type + CorePasteboardFlavorType 0x6D6F6F76 + NSColor pasteboard type + NSFilenamesPboardType + NSStringPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT RTFD pasteboard type + NeXT Rich Text Format v1.0 pasteboard type + NeXT TIFF v4.0 pasteboard type + NeXT font pasteboard type + NeXT ruler pasteboard type + WebURLsWithTitlesPboardType + public.url + + {333, 62} + + + + _NS:13 + + + + + + + + + + + + 38 + + + + 333 + 1 + + + 1073745667 + 0 + + + + + 6 + System + selectedTextBackgroundColor + + + + 6 + System + selectedTextColor + + + + + + + 1 + MCAwIDEAA + + + {8, -8} + 13 + + + + + + + + 2 + YES + YES + + 2 + + 6 + {592, 10000000} + {331, 62} + + + br + mr + bs + ksf + ee_TG + ms + kam_KE + mt + ha + es_HN + en_BM + ml_IN + ro_MD + kab_DZ + he + es_CO + my + bas + vai_Latn_LR + es_PA + az_Latn + mer + en_NZ + xog_UG + sg + fr_GP + sr_Cyrl_BA + hi + fil_PH + lt_LT + si + mgh_MZ + en_MT + mfe + luo_KE + it_CH + si_LK + sk + teo + uz_Cyrl_UZ + sl + rm_CH + az_Cyrl_AZ + fr_GQ + kde + sn + cgg_UG + mas_TZ + fr_RW + es_SV + so + swc_CD + en_MU + sq + hr + yav_CM + br_FR + sr + en_PH + ca + hu + mk_MK + fr_TD + nb + sv + kln_KE + sw + nd + el_GR + fo_FO + hy + ne + el_CY + es_CR + sr_Latn + pa_Arab_PK + ar_YE + seh + ja_JP + ur_PK + pa_Guru + nl_SX + gl_ES + zh_Hant_HK + ar_EG + nl + th_TH + es_PE + fr_KM + ln_CD + nn + dua + kk_Cyrl_KZ + kea + lv_LV + kln + tzm_Latn + yo + gsw_CH + ha_Latn_GH + is_IS + pt_BR + dua_CM + cs + en_PK + fa_IR + zh_Hans_SG + luo + ta + fr_TG + kde_TZ + mr_IN + ar_SA + ka_GE + mfe_MU + id + fr_LU + de_LU + ru_MD + cy + mgh + zh_Hans_HK + te + bg_BG + shi_Latn + ig + vai + ses + ii + es_BO + th + ko_KR + ti + it_IT + shi_Latn_MA + pt_MZ + ff_SN + brx + haw + ln_CG + zh_Hans + so_KE + bn_IN + en_UM + to + id_ID + agq_CM + uz_Cyrl + en_GU + es_EC + en_US_POSIX + is + sr_Latn_BA + luy + tr + en_NA + it + pt_AO + da + nl_CW + bo_IN + vun_TZ + ar_SD + uz_Latn_UZ + az_Latn_AZ + de + es_GQ + fr_FR + de_DE + ta_IN + rof_TZ + nmg_CM + ar_LY + en_BW + asa + zh + ewo_CM + rn_BI + fr_NE + nus_SD + es_MX + mua_CM + bem_ZM + ha_Latn + zh_Hans_CN + bn_BD + pt_GW + om + jmc + de_AT + kk_Cyrl + sw_TZ + ar_OM + et_EE + or + da_DK + ro_RO + zh_Hant + bm_ML + ja + lu_CD + twq + fr_CA + naq + zu + en_IE + ar_MA + es_GT + en_GY + uz_Arab_AF + en_AS + bs_BA + am_ET + ar_TN + swc + ewo + haw_US + ar_JO + fa_AF + uz_Latn + en_BZ + nyn_UG + ebu_KE + te_IN + cy_GB + uk + nyn + en_JM + dyo_SN + en_US + fil + ar_KW + af_ZA + en_CA + fr_DJ + ti_ER + ig_NG + en_AU + ur + fr_MC + pt_PT + pa + es_419 + fr_CD + en_SG + bo_CN + kn_IN + sr_Cyrl_RS + lg_UG + gu_IN + ee + nd_ZW + bem + uz + sw_KE + sq_AL + hr_HR + mas_KE + el + ti_ET + es_AR + pl + en + eo + shi + kok + fr_CF + fr_RE + mas + rof + ru_UA + yo_NG + dav_KE + ksb_TZ + gv_GB + pa_Arab + es + teo_UG + ps + es_PR + fr_MF + et + vai_Vaii_LR + pt + eu + ka + rwk_TZ + nb_NO + fr_CG + cgg + zh_Hant_TW + ses_ML + lag + sr_Cyrl_ME + brx_IN + en_ZW + ak_GH + vi_VN + sv_FI + to_TO + fr_MG + fr_GA + fr_CH + de_CH + es_US + ki + my_MM + twq_NE + vi + ar_QA + ga_IE + rwk + bez + ee_GH + fr_YT + kk + as_IN + ca_ES + kl + fr_SN + ne_IN + km + ms_BN + ar_LB + kn + ta_LK + ur_IN + fr_CI + ko + ha_Latn_NG + sg_CF + om_ET + zh_Hant_MO + uk_UA + fa + mt_MT + ki_KE + luy_KE + kw + pa_Guru_IN + en_IN + kab + ar_IQ + vai_Vaii + ff + en_TT + bez_TZ + es_NI + ar_001 + nl_AW + uz_Arab + ne_NP + fi + en_BB + khq + gsw + zh_Hans_MO + en_MH + hu_HU + en_GB + fr_BE + de_BE + sbp_TZ + saq + be_BY + sl_SI + sr_Latn_RS + fo + fr + xog + fr_BF + tzm + sk_SK + fr_ML + he_IL + ha_Latn_NE + ru_RU + fr_GF + fr_CM + ksf_CM + teo_KE + seh_MZ + kl_GL + bas_CM + fi_FI + kam + es_ES + af + asa_TZ + cs_CZ + tr_TR + es_PY + tzm_Latn_MA + lg + ebu + en_HK + nl_NL + en_BE + ms_MY + es_UY + ar_BH + kw_GB + ak + chr + dav + lag_TZ + am + so_DJ + shi_Tfng_MA + dje + dyo + ln + sr_Latn_ME + sn_ZW + or_IN + ar + as + fr_BI + jmc_TZ + chr_US + sbp + eu_ES + saq_KE + vun + lt + naq_NA + ga + af_NA + lu + nmg + kea_CV + es_DO + lv + kok_IN + de_LI + fr_BJ + az + guz_KE + rw_RW + mg_MG + km_KH + pt_ST + vai_Latn + gl + ar_AE + shi_Tfng + fr_MQ + rm + sv_SE + rn + az_Cyrl + ro + so_ET + en_ZA + ii_CN + fr_BL + hi_IN + agq + gu + mer_KE + nn_NO + gv + ru + yav + ar_DZ + ar_SY + en_MP + nl_BE + rw + be + dje_NE + en_VI + es_CL + mua + bg + mg + hy_AM + nus + zu_ZA + guz + ksb + mk + es_VE + ml + bm + khq_ML + bn + ps_AF + so_SO + sr_Cyrl + pl_PL + fr_GN + bo + om_KE + + + + {{1, 1}, {331, 62}} + + + + _NS:11 + + + + {4, 5} + + 79691776 + + + + + + file://localhost/Applications/Xcode.app/Contents/SharedFrameworks/DVTKit.framework/Resources/DVTIbeamCursor.tiff + + + + + 3 + MCAwAA + + + + 4 + + + + 256 + {{316, 1}, {16, 62}} + + + + _NS:83 + NO + + _doScroller: + 0.9920948616600791 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + + + _NS:33 + YES + NO + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {{18, 14}, {333, 64}} - + _NS:9 - {250, 750} - YES - - -1805647871 - 272629760 - - - _NS:9 - - YES - - - - NO + 133266 + + + + 0.25 + 4 + 1 - {{1, 1}, {440, 229}} + {{1, 1}, {369, 88}} - + _NS:11 - {{6, 54}, {442, 245}} + {{6, 54}, {371, 104}} _NS:9 + {250, 250} {0, 0} 67108864 @@ -674,9 +1321,10 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA 268 - {{382, 10}, {69, 32}} + {{311, 10}, {69, 32}} + _NS:9 YES @@ -698,7 +1346,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA 268 - {{300, 10}, {82, 32}} + {{229, 10}, {82, 32}} @@ -721,7 +1369,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABANO - {{10, 33}, {462, 551}} + {{10, 33}, {391, 415}} @@ -737,7 +1385,8 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA 256 - {{10, 33}, {462, 551}} + {{10, 33}, {391, 415}} + _NS:28 Advanced @@ -755,38 +1404,12 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - {508, 621} + {437, 485} NSView - - - 268 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {54, 54} - _NS:9 - YES - - 134217728 - 33554432 - _NS:9 - 0 - 0 - 2 - NO - - NO - YES - @@ -798,6 +1421,22 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA 2 + + + cancelButton + + + + 397 + + + + save: + + + + 398 + @@ -1012,20 +1651,20 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA40 3 - + - 6 + 3 0 - - 6 + + 3 1 0.0 1000 - 6 - 24 + 9 + 40 2 @@ -1044,37 +1683,21 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA29 3 - + 3 0 - - 3 + + 4 1 - 0.0 + 8 1000 6 24 - 2 - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 + 3 @@ -1124,6 +1747,54 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA24 2 + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 9 + 40 + 3 + + + + 5 + 0 + + 5 + 1 + + 9 + + 1000 + + 8 + 29 + 3 + 3 @@ -1156,37 +1827,21 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA40 2 - - - 3 + + + 10 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 + + 10 1 - 9 + 0.0 1000 - 8 - 29 - 3 + 9 + 40 + 2 @@ -1492,38 +2147,6 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA24 3 - - - 3 - 0 - - 3 - 1 - - 3 - - 1000 - - 9 - 40 - 3 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - 5 @@ -1572,6 +2195,38 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA24 2 + + + 3 + 0 + + 3 + 1 + + 3 + + 1000 + + 9 + 40 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + 11 @@ -1649,12 +2304,12 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - - - + + + @@ -2121,34 +2776,6 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - - 267 - - - - - 269 - - - - - 270 - - - - - 271 - - - - - - - - 272 - - - 214 @@ -2276,12 +2903,11 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA312 - 4 0 - + 4 1 @@ -2297,7 +2923,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA 6 0 - + 6 1 @@ -2310,7 +2936,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA3 - + 3 0 @@ -2326,7 +2952,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA3 - + 5 0 @@ -2341,6 +2967,23 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA29 3 + + + 8 + 1 + + 0 + 1 + + 100 + + 1000 + + 9 + 40 + 1 + + @@ -2354,55 +2997,6 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - - 332 - - - - - - 8 - 0 - - 0 - 1 - - 205 - - 1000 - - 3 - 9 - 1 - - - - - - 333 - - - - - 334 - - - - - 335 - - - - - 339 - - - - - 344 - - - 345 @@ -2449,30 +3043,95 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - - 360 - - - - - 362 - - - 363 - 366 + 368 + + + + + 371 + + + + + 372 + + + + + 374 + + + + + 376 + + + + + 380 + + + + + + + + + + 381 + + + + + 382 + + + + + 383 + + + + + 384 + + + + + 389 + + + + + 391 + + + + + 392 - 367 - - + 393 + + + + + 270 + + + + + 269 + + @@ -2560,11 +3219,8 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABAcom.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin @@ -2594,6 +3250,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABAcom.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + @@ -2602,16 +3259,6 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -2622,11 +3269,22 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABAcom.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -2637,11 +3295,11 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA + + - - @@ -2661,17 +3319,18 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - - + + + + - - + - + @@ -2703,13 +3362,35 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - 367 + 398 MPEntryEditController MPViewController + + save: + id + + + save: + + save: + id + + + + cancelButton + NSButton + + + cancelButton + + cancelButton + NSButton + + IBProjectSource ./Classes/MPEntryEditController.h diff --git a/MacPass/FilterBar.xib b/MacPass/FilterBar.xib index 7ff277c2..60a4d692 100644 --- a/MacPass/FilterBar.xib +++ b/MacPass/FilterBar.xib @@ -37,7 +37,7 @@ NSApplication - + 268 @@ -45,7 +45,6 @@ 268 {{496, 5}, {42, 17}} - _NS:9 YES @@ -73,7 +72,6 @@ 268 {{188, 5}, {38, 17}} - _NS:9 YES @@ -102,7 +100,6 @@ 268 {{104, 5}, {76, 17}} - _NS:9 YES @@ -127,7 +124,6 @@ 268 {{5, 6}, {44, 14}} - _NS:1535 YES @@ -168,7 +164,6 @@ 268 {{54, 4}, {42, 19}} - _NS:9 YES @@ -190,8 +185,6 @@ {546, 28} - - MPGradientView @@ -206,30 +199,6 @@ 48 - - - toggleFilterSpace: - - - - 49 - - - - toggleFilterSpace: - - - - 50 - - - - toggleFilterSpace: - - - - 51 - filterTitleButton @@ -278,6 +247,30 @@ 76 + + + _toggleFilterSpace: + + + + 77 + + + + _toggleFilterSpace: + + + + 78 + + + + _toggleFilterSpace: + + + + 79 + @@ -710,7 +703,7 @@ - 76 + 79 diff --git a/MacPass/MPDatabaseController.h b/MacPass/MPDatabaseController.h index 71f04546..21bf3e83 100644 --- a/MacPass/MPDatabaseController.h +++ b/MacPass/MPDatabaseController.h @@ -28,6 +28,7 @@ APPKIT_EXTERN NSString *const MPDatabaseControllerDatabaseKey; @property (retain, readonly, nonatomic) MPDatabaseDocument *database; + (MPDatabaseController *)defaultController; ++ (BOOL)hasOpenDatabase; //- (MPDatabaseDocument *)createDatabase:(MPDatabaseVersion )version password:(NSString *)password keyfile:(NSURL *)key; - (MPDatabaseDocument *)openDatabase:(NSURL *)file password:(NSString *)password keyfile:(NSURL *)key; diff --git a/MacPass/MPDatabaseController.m b/MacPass/MPDatabaseController.m index 84a7f9cc..88f12c6a 100644 --- a/MacPass/MPDatabaseController.m +++ b/MacPass/MPDatabaseController.m @@ -31,6 +31,10 @@ NSString *const MPDatabaseControllerDatabaseKey = @"MPDatabaseControllerDatabase return sharedInstance; } ++ (BOOL)hasOpenDatabase { + return (nil != [MPDatabaseController defaultController].database); +} + - (id)init { self = [super init]; diff --git a/MacPass/MPEntryEditController.h b/MacPass/MPEntryEditController.h index 32f88667..e44d88de 100644 --- a/MacPass/MPEntryEditController.h +++ b/MacPass/MPEntryEditController.h @@ -7,7 +7,12 @@ // #import "MPViewController.h" +@class KdbNode; @interface MPEntryEditController : MPViewController +@property (retain) id selectedItem; + +- (IBAction)save:(id)sender; + @end diff --git a/MacPass/MPEntryEditController.m b/MacPass/MPEntryEditController.m index 71e9dd18..176484ba 100644 --- a/MacPass/MPEntryEditController.m +++ b/MacPass/MPEntryEditController.m @@ -7,21 +7,42 @@ // #import "MPEntryEditController.h" +#import "MPMainWindowController.h" @interface MPEntryEditController () +@property (assign) IBOutlet NSButton *cancelButton; + @end @implementation MPEntryEditController -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ +- (id)init { + return [self initWithNibName:@"EntryEditView" bundle:nil]; +} + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Initialization code here. } - return self; } +- (void)dealloc { + self.selectedItem = nil; + [super dealloc]; +} + +- (NSResponder *)reconmendedFirstResponder { + return self.cancelButton; +} + +#pragma mark Actions + +- (IBAction)save:(id)sender { + MPMainWindowController *controller = [[self.view window] windowController]; + [controller showEntries]; +} + @end diff --git a/MacPass/MPEntryViewController.m b/MacPass/MPEntryViewController.m index 463201dc..9d08d732 100644 --- a/MacPass/MPEntryViewController.m +++ b/MacPass/MPEntryViewController.m @@ -59,19 +59,19 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername"; @property (assign, nonatomic) MPFilterModeType filterMode; @property (retain, nonatomic) NSDictionary *filterButtonToMode; -- (IBAction)toggleFilterSpace:(id)sender; +- (IBAction)_toggleFilterSpace:(id)sender; -- (BOOL)shouldFilterURLs; -- (BOOL)shouldFilterTitles; -- (BOOL)shouldFilterUsernames; +- (BOOL)_shouldFilterURLs; +- (BOOL)_shouldFilterTitles; +- (BOOL)_shouldFilterUsernames; - (BOOL)hasFilter; - (void)updateFilter; - (void)setupFilterBar; - (void)setupPathBar; -- (void)didChangeGroupSelectionInOutlineView:(NSNotification *)notification; -- (void)showFilterBarAnimated:(BOOL)animate; -- (void)hideStatusBarAnimated:(BOOL)animate; +- (void)_didChangeGroupSelectionInOutlineView:(NSNotification *)notification; +- (void)_showFilterBarAnimated:(BOOL)animate; +- (void)_hideStatusBarAnimated:(BOOL)animate; @end @@ -93,7 +93,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername"; } retain]; _entryArrayController = [[NSArrayController alloc] init]; [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(didChangeGroupSelectionInOutlineView:) + selector:@selector(_didChangeGroupSelectionInOutlineView:) name:MPOutlineViewDidChangeGroupSelection object:nil]; } @@ -111,7 +111,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername"; - (void)didLoadView { [self.view setWantsLayer:YES]; - [self hideStatusBarAnimated:NO]; + [self _hideStatusBarAnimated:NO]; [self.entryTable setDelegate:self]; @@ -179,7 +179,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername"; } #pragma mark Notifications -- (void)didChangeGroupSelectionInOutlineView:(NSNotification *)notification { +- (void)_didChangeGroupSelectionInOutlineView:(NSNotification *)notification { if([self hasFilter]) { return; @@ -216,25 +216,25 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername"; - (void)clearFilter { self.filter = nil; [[self.entryTable tableColumnWithIdentifier:MPEntryTableParentColumnIdentifier] setHidden:YES]; - [self hideStatusBarAnimated:YES]; + [self _hideStatusBarAnimated:YES]; } - (void)updateFilter { MPDatabaseDocument *openDatabase = [MPDatabaseController defaultController].database; if(openDatabase) { - [self showFilterBarAnimated:YES]; + [self _showFilterBarAnimated:YES]; dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(backgroundQueue, ^{ NSMutableArray *prediactes = [NSMutableArray arrayWithCapacity:3]; - if( [self shouldFilterTitles] ) { + if( [self _shouldFilterTitles] ) { [prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.title CONTAINS[cd] %@", self.filter]]; } - if( [self shouldFilterUsernames] ) { + if( [self _shouldFilterUsernames] ) { [prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.username CONTAINS[cd] %@", self.filter]]; } - if( [self shouldFilterURLs] ) { + if( [self _shouldFilterURLs] ) { [prediactes addObject:[NSPredicate predicateWithFormat:@"SELF.url CONTAINS[cd] %@", self.filter]]; } NSPredicate *fullFilter = [NSCompoundPredicate orPredicateWithSubpredicates:prediactes]; @@ -275,7 +275,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername"; #pragma mark Animation -- (void)showFilterBarAnimated:(BOOL)animate { +- (void)_showFilterBarAnimated:(BOOL)animate { animate = NO; @@ -285,9 +285,9 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername"; /* Make sure the buttons are set correctyl every time */ - [self.filterTitleButton setState:[self shouldFilterTitles] ? NSOnState : NSOffState]; - [self.filterURLButton setState:[self shouldFilterURLs] ? NSOnState : NSOffState ]; - [self.filterUsernameButton setState:[self shouldFilterUsernames] ? NSOnState : NSOffState]; + [self.filterTitleButton setState:[self _shouldFilterTitles] ? NSOnState : NSOffState]; + [self.filterURLButton setState:[self _shouldFilterURLs] ? NSOnState : NSOffState ]; + [self.filterUsernameButton setState:[self _shouldFilterUsernames] ? NSOnState : NSOffState]; if(self.isStatusBarVisible) { return; // nothign to to @@ -315,7 +315,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername"; } } -- (void)hideStatusBarAnimated:(BOOL)animate { +- (void)_hideStatusBarAnimated:(BOOL)animate { animate = NO; @@ -342,7 +342,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername"; #pragma mark Actions -- (void)toggleFilterSpace:(id)sender { +- (void)_toggleFilterSpace:(id)sender { NSButton *button = sender; NSNumber *value = self.filterButtonToMode[[button identifier]]; MPFilterModeType toggledMode = (MPFilterModeType)[value intValue]; @@ -371,15 +371,15 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername"; } } -- (BOOL)shouldFilterTitles { +- (BOOL)_shouldFilterTitles { return ( MPFilterNone != (self.filterMode & MPFilterTitles)); } -- (BOOL)shouldFilterURLs { +- (BOOL)_shouldFilterURLs { return ( MPFilterNone != (self.filterMode & MPFilterUrls)); } -- (BOOL)shouldFilterUsernames { +- (BOOL)_shouldFilterUsernames { return ( MPFilterNone != (self.filterMode & MPFilterUsernames)); } diff --git a/MacPass/MPGradientView.m b/MacPass/MPGradientView.m index d0167dbf..03a35098 100644 --- a/MacPass/MPGradientView.m +++ b/MacPass/MPGradientView.m @@ -14,7 +14,7 @@ @property (retain) NSGradient *activeGradient; @property (retain) NSGradient *inactiveGradient; -- (void)refreshActiveState; +- (void)_refreshActiveState; @end @@ -66,8 +66,8 @@ [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowDidResignKeyNotification object:[self window]]; } if(newWindow) { - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshActiveState) name:NSWindowDidBecomeKeyNotification object:newWindow]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshActiveState) name:NSWindowDidResignKeyNotification object:newWindow]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_refreshActiveState) name:NSWindowDidBecomeKeyNotification object:newWindow]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_refreshActiveState) name:NSWindowDidResignKeyNotification object:newWindow]; } } @@ -76,7 +76,7 @@ [super viewWillMoveToWindow:newWindow]; } -- (void)refreshActiveState { +- (void)_refreshActiveState { self.isRenderedActive = [[self window] isKeyWindow]; } diff --git a/MacPass/MPLoggerProxy.h b/MacPass/MPLoggerProxy.h new file mode 100644 index 00000000..e24ebc1d --- /dev/null +++ b/MacPass/MPLoggerProxy.h @@ -0,0 +1,16 @@ +// +// MPLoggerProxy.h +// MacPass +// +// Created by michael starke on 26.02.13. +// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved. +// + +#import + +@interface MPLoggerProxy : NSObject +@property (retain) id original; + +- (id)initWithOriginal:(id) value; + +@end diff --git a/MacPass/MPLoggerProxy.m b/MacPass/MPLoggerProxy.m new file mode 100644 index 00000000..eabc4622 --- /dev/null +++ b/MacPass/MPLoggerProxy.m @@ -0,0 +1,35 @@ +// +// MPLoggerProxy.m +// MacPass +// +// Created by michael starke on 26.02.13. +// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved. +// + +#import "MPLoggerProxy.h" + +@implementation MPLoggerProxy + +- (id) initWithOriginal:(id)value { + if (self = [super init]) { + self.original = value; + } + return self; +} + +- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel { + NSMethodSignature *sig = [super methodSignatureForSelector:sel]; + if(!sig) + { + sig = [self.original methodSignatureForSelector:sel]; + } + return sig; +} + +- (void)forwardInvocation:(NSInvocation *)inv { + NSLog(@"[%@ %@] %@ %@", self.original, inv,[inv methodSignature], + NSStringFromSelector([inv selector])); + [inv invokeWithTarget:self.original]; +} + +@end diff --git a/MacPass/MPMainWindowController.h b/MacPass/MPMainWindowController.h index 46e7f7d6..5f88ee57 100644 --- a/MacPass/MPMainWindowController.h +++ b/MacPass/MPMainWindowController.h @@ -17,10 +17,4 @@ - (void)performFindPanelAction:(id)sender; - (void)clearOutlineSelection:(id)sender; -/* - Sets the content View controller - @param viewController - use nil to reset to welcome screen - */ -- (void)setContentViewController:(MPViewController *)viewController; - @end diff --git a/MacPass/MPMainWindowController.m b/MacPass/MPMainWindowController.m index a175c622..c9e9233c 100644 --- a/MacPass/MPMainWindowController.m +++ b/MacPass/MPMainWindowController.m @@ -13,6 +13,7 @@ #import "MPToolbarDelegate.h" #import "MPOutlineViewController.h" #import "MPMainWindowSplitViewDelegate.h" +#import "MPEntryEditController.h" @interface MPMainWindowController () @@ -26,13 +27,15 @@ @property (retain) MPPasswordInputController *passwordInputController; @property (retain) MPEntryViewController *entryViewController; +@property (retain) MPEntryEditController *entryEditController; @property (retain) MPOutlineViewController *outlineViewController; @property (retain) MPToolbarDelegate *toolbarDelegate; @property (retain) MPMainWindowSplitViewDelegate *splitViewDelegate; -- (void)collapseOutlineView; -- (void)expandOutlineView; +- (void)_collapseOutlineView; +- (void)_expandOutlineView; +- (void)_setContentViewController:(MPViewController *)viewController; @end @@ -64,6 +67,7 @@ self.passwordInputController = nil; self.entryViewController = nil; + self.entryEditController = nil; self.outlineViewController = nil; self.toolbarDelegate = nil; @@ -95,11 +99,11 @@ [self.splitView replaceSubview:self.outlineView with:[self.outlineViewController view]]; [self.splitView adjustSubviews]; - [self setContentViewController:nil]; - [self collapseOutlineView]; + [self _setContentViewController:nil]; + [self _collapseOutlineView]; } -- (void)setContentViewController:(MPViewController *)viewController { +- (void)_setContentViewController:(MPViewController *)viewController { NSView *newContentView = self.welcomeView; if(viewController && viewController.view) { newContentView = viewController.view; @@ -132,14 +136,14 @@ [self.window makeFirstResponder:[viewController reconmendedFirstResponder]]; } -- (void)collapseOutlineView { +- (void)_collapseOutlineView { NSView *outlineView = [self.splitView subviews][0]; if(![outlineView isHidden]) { [self.splitView setPosition:0 ofDividerAtIndex:0]; } } -- (void)expandOutlineView { +- (void)_expandOutlineView { NSView *outlineView = [self.splitView subviews][0]; if([outlineView isHidden]) { [self.splitView setPosition:MPMainWindowSplitViewDelegateMinimumOutlineWidth ofDividerAtIndex:0]; @@ -172,7 +176,7 @@ if(result == NSFileHandlingPanelOKButton) { NSURL *file = [[openPanel URLs] lastObject]; self.passwordInputController.fileURL = file; - [self setContentViewController:self.passwordInputController]; + [self _setContentViewController:self.passwordInputController]; } }]; } @@ -196,6 +200,22 @@ [self.outlineViewController clearSelection]; } +- (void)showEditForm:(id)sender { + if( ![MPDatabaseController hasOpenDatabase] ) { + return; // No database open - nothing to do; + } + + if(!self.entryEditController) { + self.entryEditController = [[[MPEntryEditController alloc] init] autorelease]; + } + //find active selection + self.entryEditController.selectedItem = nil; + [self _setContentViewController:self.entryEditController]; +} + + +#pragma mark Helper + - (NSSearchField *)locateToolbarSearchField { for(NSToolbarItem *toolbarItem in [[self.window toolbar] items]) { NSView *view = [toolbarItem view]; @@ -213,11 +233,11 @@ } - (void)showEntries { - [self expandOutlineView]; + [self _expandOutlineView]; if(!self.entryViewController) { _entryViewController = [[MPEntryViewController alloc] init]; } - [self setContentViewController:self.entryViewController]; + [self _setContentViewController:self.entryViewController]; } - (IBAction)changedFileType:(id)sender { diff --git a/MacPass/MPMainWindowSplitViewDelegate.m b/MacPass/MPMainWindowSplitViewDelegate.m index 1148b587..d287ef95 100644 --- a/MacPass/MPMainWindowSplitViewDelegate.m +++ b/MacPass/MPMainWindowSplitViewDelegate.m @@ -13,23 +13,23 @@ const CGFloat MPMainWindowSplitViewDelegateMinimumContentWidth = 400.0; @interface MPMainWindowSplitViewDelegate () -- (NSView *)leftView:(NSSplitView *)splitView; -- (NSView *)rightView:(NSSplitView *)splitView; +- (NSView *)_leftView:(NSSplitView *)splitView; +- (NSView *)_rightView:(NSSplitView *)splitView; @end @implementation MPMainWindowSplitViewDelegate -- (NSView *)leftView:(NSSplitView *)splitView { +- (NSView *)_leftView:(NSSplitView *)splitView { return [splitView subviews][0]; } -- (NSView *)rightView:(NSSplitView *)splitView { +- (NSView *)_rightView:(NSSplitView *)splitView { return [splitView subviews][1]; } - (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview { - return (subview == [self leftView:splitView]); + return (subview == [self _leftView:splitView]); } - (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex { @@ -45,8 +45,8 @@ const CGFloat MPMainWindowSplitViewDelegateMinimumContentWidth = 400.0; NSSize newSize = [splitView frame].size; const CGFloat dividierThickness = [splitView dividerThickness]; - NSView *leftView = [self leftView:splitView]; - NSView *rightView = [self rightView:splitView]; + NSView *leftView = [self _leftView:splitView]; + NSView *rightView = [self _rightView:splitView]; CGFloat leftWidth = [leftView isHidden] ? 0.0 : [leftView frame].size.width; NSRect newRightFrame = NSMakeRect(leftWidth + dividierThickness, 0, newSize.width - leftWidth - dividierThickness, newSize.height); diff --git a/MacPass/MPOutlineViewController.m b/MacPass/MPOutlineViewController.m index 979548e7..93543830 100644 --- a/MacPass/MPOutlineViewController.m +++ b/MacPass/MPOutlineViewController.m @@ -21,9 +21,9 @@ @property (retain) NSMenu *menu; -- (void)didOpenDocument:(NSNotification *)notification; -- (void)setupMenu; -- (void)addEntry:(id)sender; +- (void)_didOpenDocument:(NSNotification *)notification; +- (void)_setupMenu; +- (void)_addEntry:(id)sender; @end @@ -40,10 +40,10 @@ self.datasource = [[[MPOutlineDataSource alloc] init] autorelease]; [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(didOpenDocument:) + selector:@selector(_didOpenDocument:) name:MPDatabaseControllerDidLoadDatabaseNotification object:nil]; - [self setupMenu]; + [self _setupMenu]; } return self; @@ -65,7 +65,7 @@ [self.outlineView setAllowsEmptySelection:YES]; } -- (void)didOpenDocument:(NSNotification *)notification { +- (void)_didOpenDocument:(NSNotification *)notification { [self.outlineView reloadData]; MPDatabaseController *dbContoller = [MPDatabaseController defaultController]; if(dbContoller.database) { @@ -77,7 +77,7 @@ [self.outlineView deselectAll:nil]; } -- (void)setupMenu { +- (void)_setupMenu { NSMenu *menu = [[NSMenu allocWithZone:[NSMenu menuZone]] init]; [menu addItemWithTitle:@"Add Group" action:@selector(addEntry:) keyEquivalent:@""]; [menu addItem: [NSMenuItem separatorItem]]; @@ -90,7 +90,7 @@ [menu release]; } -- (void)addEntry:(id)sender { +- (void)_addEntry:(id)sender { NSLog(@"Add Entry"); } diff --git a/MacPass/MPPasswordInputController.m b/MacPass/MPPasswordInputController.m index 531febcd..29bcd0ff 100644 --- a/MacPass/MPPasswordInputController.m +++ b/MacPass/MPPasswordInputController.m @@ -13,9 +13,9 @@ @property (assign) IBOutlet NSSecureTextField *passwordTextField; -- (IBAction)selectKeyFile:(id)sender; -- (IBAction)open:(id)sender; -- (void)showError; +- (IBAction)_selectKeyFile:(id)sender; +- (IBAction)_open:(id)sender; +- (void)_showError; @end @@ -34,22 +34,22 @@ return self.passwordTextField; } -- (IBAction)selectKeyFile:(id)sender { +- (IBAction)_selectKeyFile:(id)sender { } -- (IBAction)open:(id)sender { +- (IBAction)_open:(id)sender { NSString *password = [self.passwordTextField stringValue]; [self.passwordTextField setStringValue:@""]; MPDatabaseDocument *document = [[MPDatabaseController defaultController] openDatabase:self.fileURL password:password keyfile:nil]; if(!document) { - [self showError]; + [self _showError]; } } -- (void)showError { +- (void)_showError { NSLog(@"Something went wrong"); } @end diff --git a/MacPass/MPToolbarButton.h b/MacPass/MPToolbarButton.h new file mode 100644 index 00000000..b34fb7a5 --- /dev/null +++ b/MacPass/MPToolbarButton.h @@ -0,0 +1,18 @@ +// +// MPButton.h +// MacPass +// +// Created by michael starke on 26.02.13. +// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved. +// + +#import + +@interface MPToolbarButton : NSButton + +/* This methods ensure, that the button get sized correctly if used as the view in a NSToolbarItem*/ +- (void)setControlSize:(NSControlSize)controlSize; +- (NSControlSize)controlSize; + + +@end diff --git a/MacPass/MPToolbarButton.m b/MacPass/MPToolbarButton.m new file mode 100644 index 00000000..6c8786a5 --- /dev/null +++ b/MacPass/MPToolbarButton.m @@ -0,0 +1,36 @@ +// +// MPButton.m +// MacPass +// +// Created by michael starke on 26.02.13. +// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved. +// + +#import "MPToolbarButton.h" + +@implementation MPToolbarButton + +- (void)setControlSize:(NSControlSize)controlSize { + [[self cell] setControlSize:controlSize]; + switch (controlSize) { + case NSRegularControlSize: + [[self image] setSize:NSMakeSize(16, 16)]; + break; + + case NSSmallControlSize: + [[self image] setSize:NSMakeSize(14, 14)]; + break; + + case NSMiniControlSize: + [[self image] setSize:NSMakeSize(8, 8)]; + + default: + break; + } +} + +- (NSControlSize)controlSize { + return [[self cell] controlSize]; +} + +@end diff --git a/MacPass/MPToolbarDelegate.m b/MacPass/MPToolbarDelegate.m index 72116fad..504a096c 100644 --- a/MacPass/MPToolbarDelegate.m +++ b/MacPass/MPToolbarDelegate.m @@ -10,6 +10,7 @@ #import "MPIconHelper.h" #import "MPMainWindowController.h" #import "MPPathBar.h" +#import "MPToolbarButton.h" NSString *const MPToolbarItemAddGroup = @"AddGroup"; NSString *const MPToolbarItemAddEntry = @"AddEntry"; @@ -20,6 +21,7 @@ NSString *const MPToolbarItemSearch = @"Search"; @interface MPToolbarDelegate() +@property (retain) NSMutableDictionary *toolbarItems; @property (retain) NSArray *toolbarIdentifiers; @property (retain) NSDictionary *toolbarImages; @@ -34,6 +36,7 @@ NSString *const MPToolbarItemSearch = @"Search"; if (self) { self.toolbarIdentifiers = @[ MPToolbarItemAddEntry, MPToolbarItemDelete, MPToolbarItemEdit, MPToolbarItemAddGroup, MPToolbarItemAction, NSToolbarFlexibleSpaceItemIdentifier, MPToolbarItemSearch ]; self.toolbarImages = [self createToolbarImages]; + self.toolbarItems = [[NSMutableDictionary alloc] initWithCapacity:[self.toolbarIdentifiers count]]; } return self; } @@ -42,11 +45,14 @@ NSString *const MPToolbarItemSearch = @"Search"; { self.toolbarIdentifiers = nil; self.toolbarImages = nil; + self.toolbarItems = nil; [super dealloc]; } -- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag { - NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier]; +- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag { + NSToolbarItem *item = self.toolbarItems[itemIdentifier]; + if(!item) { + item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier]; [item setAction:@selector(toolbarItemPressed:)]; NSString *label = NSLocalizedString(itemIdentifier, @""); [item setLabel:label]; @@ -85,23 +91,24 @@ NSString *const MPToolbarItemSearch = @"Search"; Cleanup */ [menuItem release]; - [menu release]; + [menu release]; [item setView:popupButton]; [popupButton release]; } else { - NSButton *button = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, 32, 32)]; + NSButton *button = [[MPToolbarButton alloc] initWithFrame:NSMakeRect(0, 0, 32, 32)]; [[button cell] setBezelStyle:NSTexturedRoundedBezelStyle]; [[button cell] setImageScaling:NSImageScaleProportionallyDown]; [button setTitle:itemIdentifier]; [button setButtonType:NSMomentaryPushInButton]; NSImage *image = self.toolbarImages[itemIdentifier]; + [image setSize:NSMakeSize(16, 16)]; [button setImage:image]; [button setImagePosition:NSImageOnly]; [button sizeToFit]; - if([itemIdentifier isEqualToString:MPToolbarItemDelete]) { + if([itemIdentifier isEqualToString:MPToolbarItemEdit]) { [button setTarget:nil]; - [button setAction:@selector(clearOutlineSelection:)]; + [button setAction:@selector(showEditForm:)]; } NSRect fittingRect = [button frame]; @@ -110,7 +117,10 @@ NSString *const MPToolbarItemSearch = @"Search"; [item setView:button]; [button release]; } - return [item autorelease]; + self.toolbarItems[itemIdentifier] = item; + [item release]; + } + return item; } - (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar { diff --git a/MacPass/MacPass-Info.plist b/MacPass/MacPass-Info.plist index 58697cb0..77aba2fe 100644 --- a/MacPass/MacPass-Info.plist +++ b/MacPass/MacPass-Info.plist @@ -21,7 +21,7 @@ CFBundleSignature ???? CFBundleVersion - 310 + 34B LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSHumanReadableCopyright diff --git a/MacPass/PasswordInputView.xib b/MacPass/PasswordInputView.xib index db2d995c..147e22a2 100644 --- a/MacPass/PasswordInputView.xib +++ b/MacPass/PasswordInputView.xib @@ -39,7 +39,7 @@ NSApplication - + 268 @@ -47,7 +47,6 @@ 268 {{128, 163}, {191, 22}} - _NS:9 YES @@ -91,7 +90,6 @@ 268 {{228, 127}, {97, 32}} - _NS:9 YES @@ -116,8 +114,6 @@ 268 {{59, 166}, {64, 17}} - - _NS:1535 YES @@ -150,7 +146,6 @@ 268 {{77, 136}, {46, 17}} - _NS:1535 YES @@ -171,7 +166,6 @@ 268 {{251, 71}, {74, 32}} - _NS:9 YES @@ -192,8 +186,6 @@ {447, 347} - - NSView @@ -208,22 +200,6 @@ 143 - - - selectKeyFile: - - - - 152 - - - - open: - - - - 154 - passwordTextField @@ -232,6 +208,22 @@ 196 + + + _selectKeyFile: + + + + 198 + + + + _open: + + + + 199 + nextKeyView @@ -335,6 +327,22 @@ 40 3 + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + 5 @@ -415,22 +423,6 @@ 24 2 - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - 6 @@ -623,15 +615,15 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + - + @@ -674,7 +666,7 @@ - 197 + 199 diff --git a/MacPass/SettingsWindow.xib b/MacPass/SettingsWindow.xib index 3e04de8e..fc6a2c33 100644 --- a/MacPass/SettingsWindow.xib +++ b/MacPass/SettingsWindow.xib @@ -49,7 +49,7 @@ - {{0, 0}, {1920, 1058}} + {{0, 0}, {2560, 1418}} {10000000000000, 10000000000000} YES @@ -120,7 +120,7 @@ - 80 + 89