Skip to content
Browse files

Make app universal and support display rotation; initial commit

  • Loading branch information...
1 parent e3b745d commit a7c5c87b54eb2039603aeb55fa90ecdd7c695d5f John Flanagan committed Apr 23, 2012
Showing with 1,333 additions and 81 deletions.
  1. BIN Default-Landscape@2x~ipad.png
  2. BIN Default-Landscape~ipad.png
  3. +479 −0 Default-Landscape~ipad.svg
  4. BIN Default-Portrait@2x~ipad.png
  5. BIN Default-Portrait~ipad.png
  6. +479 −0 Default-Portrait~ipad.svg
  7. +58 −7 MiniKeePass.xcodeproj/project.pbxproj
  8. +13 −0 MiniKeePass/AutorotatingTableViewController.h
  9. +25 −0 MiniKeePass/AutorotatingTableViewController.m
  10. +13 −0 MiniKeePass/AutorotatingViewController.h
  11. +25 −0 MiniKeePass/AutorotatingViewController.m
  12. +2 −1 MiniKeePass/CharacterSetsViewController.h
  13. +2 −1 MiniKeePass/EntryViewController.h
  14. +12 −3 MiniKeePass/FilesInfoView.m
  15. +2 −1 MiniKeePass/FilesViewController.h
  16. +2 −1 MiniKeePass/FormViewController.h
  17. +28 −7 MiniKeePass/FormViewController.m
  18. +2 −1 MiniKeePass/GroupViewController.h
  19. +2 −1 MiniKeePass/HelpViewController.h
  20. +2 −1 MiniKeePass/HelpViewController.m
  21. +2 −1 MiniKeePass/ImagesViewController.h
  22. +2 −1 MiniKeePass/LockScreenController.h
  23. +43 −14 MiniKeePass/LockScreenController.m
  24. +35 −3 MiniKeePass/MiniKeePass-Info.plist
  25. +1 −0 MiniKeePass/MiniKeePassAppDelegate.h
  26. +7 −0 MiniKeePass/MiniKeePassAppDelegate.m
  27. +9 −2 MiniKeePass/NewKdbViewController.m
  28. +2 −1 MiniKeePass/PasswordGeneratorViewController.h
  29. +4 −1 MiniKeePass/PinViewController.h
  30. +72 −29 MiniKeePass/PinViewController.m
  31. +2 −1 MiniKeePass/SelectionListViewController.h
  32. +2 −1 MiniKeePass/SettingsViewController.h
  33. +6 −3 MiniKeePass/SettingsViewController.m
  34. BIN icon@2x~ipad.png
  35. BIN icon~ipad.png
  36. BIN splash-Landscape~ipad.png
  37. BIN splash-Landscape~ipad@2x.png
  38. BIN splash-Portrait~ipad.png
  39. BIN splash-Portrait~ipad@2x.png
View
BIN Default-Landscape@2x~ipad.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN Default-Landscape~ipad.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
479 Default-Landscape~ipad.svg
@@ -0,0 +1,479 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="2048"
+ height="1536"
+ id="svg7955"
+ version="1.1"
+ inkscape:version="0.48.1 r9760"
+ sodipodi:docname="Default-Portrait~ipad.svg"
+ inkscape:export-filename="C:\Users\jarush\Desktop\Default.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45">
+ <defs
+ id="defs7957">
+ <linearGradient
+ id="linearGradient4114">
+ <stop
+ id="stop4116"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="0.27227971"
+ id="stop4118" />
+ <stop
+ id="stop4120"
+ offset="0.53654981"
+ style="stop-color:#86827e;stop-opacity:1;" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="0.78362548"
+ id="stop4122" />
+ <stop
+ id="stop4124"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4102">
+ <stop
+ id="stop4104"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:0" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="0.55049121"
+ id="stop4106" />
+ <stop
+ id="stop4108"
+ offset="0.55049121"
+ style="stop-color:#3c3c3c;stop-opacity:1;" />
+ <stop
+ id="stop4110"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9120">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop9122" />
+ <stop
+ id="stop4096"
+ offset="0.5"
+ style="stop-color:#3c3c3c;stop-opacity:1;" />
+ <stop
+ style="stop-color:#828282;stop-opacity:1;"
+ offset="0.75"
+ id="stop4098" />
+ <stop
+ id="stop4112"
+ offset="0.875"
+ style="stop-color:#3c3c3c;stop-opacity:1;" />
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="1"
+ id="stop9124" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3083-4"
+ id="linearGradient4075"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.0645166,0,0,2.0645166,-52.357399,-592.46222)"
+ x1="164.97231"
+ y1="474.8013"
+ x2="34.588753"
+ y2="293.57654" />
+ <linearGradient
+ id="linearGradient3083-4">
+ <stop
+ style="stop-color:#f1f2f5;stop-opacity:1;"
+ offset="0"
+ id="stop3085-5" />
+ <stop
+ style="stop-color:#9ba5b5;stop-opacity:1;"
+ offset="1"
+ id="stop3087-9" />
+ </linearGradient>
+ <linearGradient
+ y2="293.57654"
+ x2="34.588753"
+ y1="474.8013"
+ x1="164.97231"
+ gradientTransform="matrix(1.5944426,0,0,1.5944426,160.07343,-105.67634)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8814"
+ xlink:href="#linearGradient3083-4"
+ inkscape:collect="always" />
+ <filter
+ inkscape:collect="always"
+ id="filter8980"
+ x="-0.066500433"
+ width="1.1330009"
+ y="-0.49768066"
+ height="1.9953613"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="9.1049516"
+ id="feGaussianBlur8982" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3083-4"
+ id="linearGradient8984"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5944426,0,0,1.5944426,160.07343,-105.67634)"
+ x1="164.97231"
+ y1="474.8013"
+ x2="34.588753"
+ y2="293.57654" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3083-4"
+ id="linearGradient8990"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5944426,0,0,1.5944426,160.07343,-105.67634)"
+ x1="164.97231"
+ y1="474.8013"
+ x2="34.588753"
+ y2="293.57654" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3083-4"
+ id="radialGradient9086"
+ cx="320"
+ cy="572.36218"
+ fx="320"
+ fy="572.36218"
+ r="416"
+ gradientTransform="matrix(1,0,0,1.3846154,0,-220.1393)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9120"
+ id="linearGradient9126"
+ x1="479.43762"
+ y1="709.90295"
+ x2="203.05341"
+ y2="358.6434"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9120-4"
+ id="linearGradient9126-8"
+ x1="479.43762"
+ y1="709.90295"
+ x2="203.05341"
+ y2="358.6434"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient9120-4">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop9122-4" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="1"
+ id="stop9124-7" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9120"
+ id="linearGradient3980"
+ gradientUnits="userSpaceOnUse"
+ x1="479.43762"
+ y1="709.90295"
+ x2="203.05341"
+ y2="358.6434" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3083-4-8"
+ id="radialGradient9086-8"
+ cx="320"
+ cy="572.36218"
+ fx="320"
+ fy="572.36218"
+ r="416"
+ gradientTransform="matrix(1,0,0,1.3846154,0,-220.1393)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient3083-4-8">
+ <stop
+ style="stop-color:#9ba5b5;stop-opacity:1;"
+ offset="0"
+ id="stop3085-5-8" />
+ <stop
+ style="stop-color:#f1f2f5;stop-opacity:1;"
+ offset="1"
+ id="stop3087-9-8" />
+ </linearGradient>
+ <radialGradient
+ r="416"
+ fy="572.36218"
+ fx="320"
+ cy="572.36218"
+ cx="320"
+ gradientTransform="matrix(1,0,0,1.3846154,399.99995,1279.8607)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient4004"
+ xlink:href="#linearGradient3083-4-8"
+ inkscape:collect="always" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3083-4"
+ id="radialGradient4094"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.1999998,0,0,2.2153846,-704,-951.64023)"
+ cx="320"
+ cy="572.36218"
+ fx="320"
+ fy="572.36218"
+ r="416" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4114"
+ id="linearGradient4100"
+ gradientUnits="userSpaceOnUse"
+ x1="440.67584"
+ y1="702.15057"
+ x2="203.05341"
+ y2="358.6434" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4114-1"
+ id="linearGradient4100-4"
+ gradientUnits="userSpaceOnUse"
+ x1="440.67584"
+ y1="702.15057"
+ x2="203.05341"
+ y2="358.6434" />
+ <linearGradient
+ id="linearGradient4114-1">
+ <stop
+ id="stop4116-2"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="0.27227971"
+ id="stop4118-0" />
+ <stop
+ id="stop4120-8"
+ offset="0.53654981"
+ style="stop-color:#86827e;stop-opacity:1;" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="0.78362548"
+ id="stop4122-0" />
+ <stop
+ id="stop4124-0"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:1;" />
+ </linearGradient>
+ <filter
+ id="filter5992"
+ inkscape:label="Chrome dark"
+ inkscape:menu-tooltip="Dark version of chrome shading with a ground reflection simulation"
+ inkscape:menu="Non realistic 3D shaders"
+ height="1.5"
+ y="-0.25"
+ width="1.5"
+ x="-0.25"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur5994"
+ stdDeviation="3.5"
+ result="result8" />
+ <feComposite
+ id="feComposite5996"
+ in2="result8"
+ result="result6"
+ operator="xor"
+ in="result8" />
+ <feDisplacementMap
+ id="feDisplacementMap5998"
+ in2="result6"
+ in="result8"
+ xChannelSelector="A"
+ yChannelSelector="A"
+ scale="75"
+ result="result4" />
+ <feComposite
+ id="feComposite6000"
+ in2="result4"
+ result="result2"
+ operator="arithmetic"
+ in="result8"
+ k1="3"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ id="feComposite6002"
+ in2="result2"
+ result="fbSourceGraphic"
+ in="result2"
+ operator="in" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4114-0"
+ id="linearGradient4100-5"
+ gradientUnits="userSpaceOnUse"
+ x1="440.67584"
+ y1="702.15057"
+ x2="203.05341"
+ y2="358.6434" />
+ <linearGradient
+ id="linearGradient4114-0">
+ <stop
+ id="stop4116-29"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="0.27227971"
+ id="stop4118-08" />
+ <stop
+ id="stop4120-5"
+ offset="0.53654981"
+ style="stop-color:#86827e;stop-opacity:1;" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="0.78362548"
+ id="stop4122-1" />
+ <stop
+ id="stop4124-7"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:1;" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter3847"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="8.2214595"
+ id="feGaussianBlur3849" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4114"
+ id="linearGradient3062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.7358809,0,0,2.7358809,-101.9411,-1542.0938)"
+ x1="440.67584"
+ y1="702.15057"
+ x2="203.05341"
+ y2="358.6434" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.26513672"
+ inkscape:cx="822.83188"
+ inkscape:cy="512"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ showborder="false"
+ inkscape:window-width="1228"
+ inkscape:window-height="756"
+ inkscape:window-x="39"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0" />
+ <metadata
+ id="metadata7960">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(704,451.63782)">
+ <rect
+ style="fill:url(#radialGradient4094);fill-opacity:1;stroke:none"
+ id="rect8867-4"
+ width="2048"
+ height="1536"
+ x="-704"
+ y="-451.63782" />
+ <g
+ id="g3053"
+ transform="matrix(0.65163526,0,0,0.65189245,-185.02699,299.03129)">
+ <path
+ id="rect7974"
+ d="m 282.53567,-740.73718 c -15.15678,0 -27.35881,12.20203 -27.35881,27.35881 l 0,1477.37571 c 0,15.15678 12.20203,27.35881 27.35881,27.35881 l 984.91713,0 c 15.1568,0 27.3588,-12.20203 27.3588,-27.35881 l 0,-1477.37571 c 0,-15.15678 -12.202,-27.35881 -27.3588,-27.35881 l -984.91713,0 z m 109.00775,109.00776 766.04668,0 c 15.1567,0 27.3588,12.20202 27.3588,27.35881 l 0,902.84071 c 0,15.15678 -12.2021,27.3588 -27.3588,27.3588 l -766.04668,0 c -15.15677,0 -27.3588,-12.20202 -27.3588,-27.3588 l 0,-902.84071 c 0,-15.15679 12.20203,-27.35881 27.3588,-27.35881 z"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2.94805551;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="matrix(2.7358809,0,0,2.7358809,-101.9411,-1542.0938)"
+ id="rect3785-5-9-2-5-9-6"
+ d="m 325.16823,358.06882 c -59.24416,0 -111.52848,39.47828 -111.62263,93.52166 -9e-5,0.0488 0,0.0961 0,0.14481 l 0,47.69002 39.87039,0 0,-47.69002 0,-0.14481 c 0.10505,-27.28439 29.85658,-53.65126 71.75224,-53.65126 41.89567,0 71.64717,26.36687 71.75224,53.65126 l 0,0.14481 0,47.69002 39.84626,0 0,-47.69002 0,-0.14481 c -0.0941,-54.04336 -52.35441,-93.52166 -111.5985,-93.52166 z m -119.58706,149.48986 0,47.83481 239.17411,0 0,-47.83481 -239.17412,0 z m 0,55.79925 0,47.83482 239.17411,0 0,-47.83482 -239.17412,0 z m 0,55.79924 0,47.83483 239.17411,0 0,-47.83483 -239.17412,0 z"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter3847)"
+ inkscape:connector-curvature="0" />
+ <path
+ id="rect3785-5-9-2-5-9"
+ d="m 773.54078,-576.59981 c -162.08497,0 -305.12865,108.00788 -305.38623,255.86413 -2.5e-4,0.13351 0,0.26292 0,0.39618 l 0,130.47422 109.08063,0 0,-130.47422 0,-0.39618 c 0.28742,-74.64684 81.68406,-146.78346 196.3056,-146.78346 114.62156,0 196.01812,72.13662 196.30558,146.78346 l 0,0.39618 0,130.47422 109.01464,0 0,-130.47422 0,-0.39618 c -0.2575,-147.8562 -143.23545,-255.86413 -305.32022,-255.86413 z m -327.17596,408.98646 0,130.870348 654.35188,0 0,-130.870348 -654.35191,0 z m 0,152.660107 0,130.870373 654.35188,0 0,-130.870373 -654.35191,0 z m 0,152.660073 0,130.8704 654.35188,0 0,-130.8704 -654.35191,0 z"
+ style="fill:url(#linearGradient3062);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ inkscape:connector-curvature="0" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text8833"
+ y="525.02875"
+ x="770.99194"
+ style="font-size:153.20932007px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Calibri;-inkscape-font-specification:Calibri Bold"
+ xml:space="preserve"><tspan
+ style="font-size:196.98342896px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold"
+ y="525.02875"
+ x="770.99194"
+ id="tspan8835"
+ sodipodi:role="line">Mini</tspan><tspan
+ style="font-size:196.98342896px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold"
+ id="tspan8837"
+ y="722.01221"
+ x="770.99194"
+ sodipodi:role="line">KeePass</tspan></text>
+ <path
+ transform="matrix(3.8478984,0,0,2.3444432,-151.49265,242.74647)"
+ d="m 405.08154,231.57634 c 0,12.1247 -73.55908,21.95372 -164.29881,21.95372 -90.73973,0 -164.298813,-9.82902 -164.298813,-21.95372 0,-12.12471 73.559083,-21.95372 164.298813,-21.95372 90.73973,0 164.29881,9.82901 164.29881,21.95372 z"
+ sodipodi:ry="21.95372"
+ sodipodi:rx="164.29881"
+ sodipodi:cy="231.57634"
+ sodipodi:cx="240.78273"
+ id="path8870"
+ style="fill:#000000;fill-opacity:0.33918128;stroke:none;filter:url(#filter8980)"
+ sodipodi:type="arc" />
+ </g>
+ </g>
+</svg>
View
BIN Default-Portrait@2x~ipad.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN Default-Portrait~ipad.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
479 Default-Portrait~ipad.svg
@@ -0,0 +1,479 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1536"
+ height="2048"
+ id="svg7955"
+ version="1.1"
+ inkscape:version="0.48.1 r9760"
+ sodipodi:docname="Default-Portrait~ipad.svg"
+ inkscape:export-filename="C:\Users\jarush\Desktop\Default.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45">
+ <defs
+ id="defs7957">
+ <linearGradient
+ id="linearGradient4114">
+ <stop
+ id="stop4116"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="0.27227971"
+ id="stop4118" />
+ <stop
+ id="stop4120"
+ offset="0.53654981"
+ style="stop-color:#86827e;stop-opacity:1;" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="0.78362548"
+ id="stop4122" />
+ <stop
+ id="stop4124"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4102">
+ <stop
+ id="stop4104"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:0" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="0.55049121"
+ id="stop4106" />
+ <stop
+ id="stop4108"
+ offset="0.55049121"
+ style="stop-color:#3c3c3c;stop-opacity:1;" />
+ <stop
+ id="stop4110"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9120">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop9122" />
+ <stop
+ id="stop4096"
+ offset="0.5"
+ style="stop-color:#3c3c3c;stop-opacity:1;" />
+ <stop
+ style="stop-color:#828282;stop-opacity:1;"
+ offset="0.75"
+ id="stop4098" />
+ <stop
+ id="stop4112"
+ offset="0.875"
+ style="stop-color:#3c3c3c;stop-opacity:1;" />
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="1"
+ id="stop9124" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3083-4"
+ id="linearGradient4075"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.0645166,0,0,2.0645166,-52.357399,-592.46222)"
+ x1="164.97231"
+ y1="474.8013"
+ x2="34.588753"
+ y2="293.57654" />
+ <linearGradient
+ id="linearGradient3083-4">
+ <stop
+ style="stop-color:#f1f2f5;stop-opacity:1;"
+ offset="0"
+ id="stop3085-5" />
+ <stop
+ style="stop-color:#9ba5b5;stop-opacity:1;"
+ offset="1"
+ id="stop3087-9" />
+ </linearGradient>
+ <linearGradient
+ y2="293.57654"
+ x2="34.588753"
+ y1="474.8013"
+ x1="164.97231"
+ gradientTransform="matrix(1.5944426,0,0,1.5944426,160.07343,-105.67634)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8814"
+ xlink:href="#linearGradient3083-4"
+ inkscape:collect="always" />
+ <filter
+ inkscape:collect="always"
+ id="filter8980"
+ x="-0.066500433"
+ width="1.1330009"
+ y="-0.49768066"
+ height="1.9953613"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="9.1049516"
+ id="feGaussianBlur8982" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3083-4"
+ id="linearGradient8984"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5944426,0,0,1.5944426,160.07343,-105.67634)"
+ x1="164.97231"
+ y1="474.8013"
+ x2="34.588753"
+ y2="293.57654" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3083-4"
+ id="linearGradient8990"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5944426,0,0,1.5944426,160.07343,-105.67634)"
+ x1="164.97231"
+ y1="474.8013"
+ x2="34.588753"
+ y2="293.57654" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3083-4"
+ id="radialGradient9086"
+ cx="320"
+ cy="572.36218"
+ fx="320"
+ fy="572.36218"
+ r="416"
+ gradientTransform="matrix(1,0,0,1.3846154,0,-220.1393)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9120"
+ id="linearGradient9126"
+ x1="479.43762"
+ y1="709.90295"
+ x2="203.05341"
+ y2="358.6434"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9120-4"
+ id="linearGradient9126-8"
+ x1="479.43762"
+ y1="709.90295"
+ x2="203.05341"
+ y2="358.6434"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient9120-4">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop9122-4" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="1"
+ id="stop9124-7" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9120"
+ id="linearGradient3980"
+ gradientUnits="userSpaceOnUse"
+ x1="479.43762"
+ y1="709.90295"
+ x2="203.05341"
+ y2="358.6434" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3083-4-8"
+ id="radialGradient9086-8"
+ cx="320"
+ cy="572.36218"
+ fx="320"
+ fy="572.36218"
+ r="416"
+ gradientTransform="matrix(1,0,0,1.3846154,0,-220.1393)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient3083-4-8">
+ <stop
+ style="stop-color:#9ba5b5;stop-opacity:1;"
+ offset="0"
+ id="stop3085-5-8" />
+ <stop
+ style="stop-color:#f1f2f5;stop-opacity:1;"
+ offset="1"
+ id="stop3087-9-8" />
+ </linearGradient>
+ <radialGradient
+ r="416"
+ fy="572.36218"
+ fx="320"
+ cy="572.36218"
+ cx="320"
+ gradientTransform="matrix(1,0,0,1.3846154,399.99995,1279.8607)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient4004"
+ xlink:href="#linearGradient3083-4-8"
+ inkscape:collect="always" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3083-4"
+ id="radialGradient4094"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.4,0,0,2.9538462,-447.99997,-1118.3077)"
+ cx="320"
+ cy="572.36218"
+ fx="320"
+ fy="572.36218"
+ r="416" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4114"
+ id="linearGradient4100"
+ gradientUnits="userSpaceOnUse"
+ x1="440.67584"
+ y1="702.15057"
+ x2="203.05341"
+ y2="358.6434" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4114-1"
+ id="linearGradient4100-4"
+ gradientUnits="userSpaceOnUse"
+ x1="440.67584"
+ y1="702.15057"
+ x2="203.05341"
+ y2="358.6434" />
+ <linearGradient
+ id="linearGradient4114-1">
+ <stop
+ id="stop4116-2"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="0.27227971"
+ id="stop4118-0" />
+ <stop
+ id="stop4120-8"
+ offset="0.53654981"
+ style="stop-color:#86827e;stop-opacity:1;" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="0.78362548"
+ id="stop4122-0" />
+ <stop
+ id="stop4124-0"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:1;" />
+ </linearGradient>
+ <filter
+ id="filter5992"
+ inkscape:label="Chrome dark"
+ inkscape:menu-tooltip="Dark version of chrome shading with a ground reflection simulation"
+ inkscape:menu="Non realistic 3D shaders"
+ height="1.5"
+ y="-0.25"
+ width="1.5"
+ x="-0.25"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur5994"
+ stdDeviation="3.5"
+ result="result8" />
+ <feComposite
+ id="feComposite5996"
+ in2="result8"
+ result="result6"
+ operator="xor"
+ in="result8" />
+ <feDisplacementMap
+ id="feDisplacementMap5998"
+ in2="result6"
+ in="result8"
+ xChannelSelector="A"
+ yChannelSelector="A"
+ scale="75"
+ result="result4" />
+ <feComposite
+ id="feComposite6000"
+ in2="result4"
+ result="result2"
+ operator="arithmetic"
+ in="result8"
+ k1="3"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ id="feComposite6002"
+ in2="result2"
+ result="fbSourceGraphic"
+ in="result2"
+ operator="in" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4114-0"
+ id="linearGradient4100-5"
+ gradientUnits="userSpaceOnUse"
+ x1="440.67584"
+ y1="702.15057"
+ x2="203.05341"
+ y2="358.6434" />
+ <linearGradient
+ id="linearGradient4114-0">
+ <stop
+ id="stop4116-29"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="0.27227971"
+ id="stop4118-08" />
+ <stop
+ id="stop4120-5"
+ offset="0.53654981"
+ style="stop-color:#86827e;stop-opacity:1;" />
+ <stop
+ style="stop-color:#3c3c3c;stop-opacity:1;"
+ offset="0.78362548"
+ id="stop4122-1" />
+ <stop
+ id="stop4124-7"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:1;" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter3847"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="8.2214595"
+ id="feGaussianBlur3849" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4114"
+ id="linearGradient3062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.7358809,0,0,2.7358809,-101.9411,-1542.0938)"
+ x1="440.67584"
+ y1="702.15057"
+ x2="203.05341"
+ y2="358.6434" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.26513672"
+ inkscape:cx="1042.0584"
+ inkscape:cy="1024"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ showborder="false"
+ inkscape:window-width="1228"
+ inkscape:window-height="756"
+ inkscape:window-x="52"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0" />
+ <metadata
+ id="metadata7960">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(448,451.63782)">
+ <rect
+ style="fill:url(#radialGradient4094);fill-opacity:1;stroke:none"
+ id="rect8867-4"
+ width="1536"
+ height="2048"
+ x="-448"
+ y="-451.63782" />
+ <g
+ id="g3053"
+ transform="matrix(0.65163526,0,0,0.65189245,-185.02699,299.03129)">
+ <path
+ id="rect7974"
+ d="m 282.53567,-740.73718 c -15.15678,0 -27.35881,12.20203 -27.35881,27.35881 l 0,1477.37571 c 0,15.15678 12.20203,27.35881 27.35881,27.35881 l 984.91713,0 c 15.1568,0 27.3588,-12.20203 27.3588,-27.35881 l 0,-1477.37571 c 0,-15.15678 -12.202,-27.35881 -27.3588,-27.35881 l -984.91713,0 z m 109.00775,109.00776 766.04668,0 c 15.1567,0 27.3588,12.20202 27.3588,27.35881 l 0,902.84071 c 0,15.15678 -12.2021,27.3588 -27.3588,27.3588 l -766.04668,0 c -15.15677,0 -27.3588,-12.20202 -27.3588,-27.3588 l 0,-902.84071 c 0,-15.15679 12.20203,-27.35881 27.3588,-27.35881 z"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2.94805551;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="matrix(2.7358809,0,0,2.7358809,-101.9411,-1542.0938)"
+ id="rect3785-5-9-2-5-9-6"
+ d="m 325.16823,358.06882 c -59.24416,0 -111.52848,39.47828 -111.62263,93.52166 -9e-5,0.0488 0,0.0961 0,0.14481 l 0,47.69002 39.87039,0 0,-47.69002 0,-0.14481 c 0.10505,-27.28439 29.85658,-53.65126 71.75224,-53.65126 41.89567,0 71.64717,26.36687 71.75224,53.65126 l 0,0.14481 0,47.69002 39.84626,0 0,-47.69002 0,-0.14481 c -0.0941,-54.04336 -52.35441,-93.52166 -111.5985,-93.52166 z m -119.58706,149.48986 0,47.83481 239.17411,0 0,-47.83481 -239.17412,0 z m 0,55.79925 0,47.83482 239.17411,0 0,-47.83482 -239.17412,0 z m 0,55.79924 0,47.83483 239.17411,0 0,-47.83483 -239.17412,0 z"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter3847)"
+ inkscape:connector-curvature="0" />
+ <path
+ id="rect3785-5-9-2-5-9"
+ d="m 773.54078,-576.59981 c -162.08497,0 -305.12865,108.00788 -305.38623,255.86413 -2.5e-4,0.13351 0,0.26292 0,0.39618 l 0,130.47422 109.08063,0 0,-130.47422 0,-0.39618 c 0.28742,-74.64684 81.68406,-146.78346 196.3056,-146.78346 114.62156,0 196.01812,72.13662 196.30558,146.78346 l 0,0.39618 0,130.47422 109.01464,0 0,-130.47422 0,-0.39618 c -0.2575,-147.8562 -143.23545,-255.86413 -305.32022,-255.86413 z m -327.17596,408.98646 0,130.870348 654.35188,0 0,-130.870348 -654.35191,0 z m 0,152.660107 0,130.870373 654.35188,0 0,-130.870373 -654.35191,0 z m 0,152.660073 0,130.8704 654.35188,0 0,-130.8704 -654.35191,0 z"
+ style="fill:url(#linearGradient3062);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ inkscape:connector-curvature="0" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text8833"
+ y="525.02875"
+ x="770.99194"
+ style="font-size:153.20932007px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Calibri;-inkscape-font-specification:Calibri Bold"
+ xml:space="preserve"><tspan
+ style="font-size:196.98342896px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold"
+ y="525.02875"
+ x="770.99194"
+ id="tspan8835"
+ sodipodi:role="line">Mini</tspan><tspan
+ style="font-size:196.98342896px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold"
+ id="tspan8837"
+ y="722.01221"
+ x="770.99194"
+ sodipodi:role="line">KeePass</tspan></text>
+ <path
+ transform="matrix(3.8478984,0,0,2.3444432,-151.49265,242.74647)"
+ d="m 405.08154,231.57634 c 0,12.1247 -73.55908,21.95372 -164.29881,21.95372 -90.73973,0 -164.298813,-9.82902 -164.298813,-21.95372 0,-12.12471 73.559083,-21.95372 164.298813,-21.95372 90.73973,0 164.29881,9.82901 164.29881,21.95372 z"
+ sodipodi:ry="21.95372"
+ sodipodi:rx="164.29881"
+ sodipodi:cy="231.57634"
+ sodipodi:cx="240.78273"
+ id="path8870"
+ style="fill:#000000;fill-opacity:0.33918128;stroke:none;filter:url(#filter8980)"
+ sodipodi:type="arc" />
+ </g>
+ </g>
+</svg>
View
65 MiniKeePass.xcodeproj/project.pbxproj
@@ -20,6 +20,18 @@
529708B014FEF149003547FB /* Andale Mono.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 529708AD14FEEFD3003547FB /* Andale Mono.ttf */; };
52A177BC13EB698E00CEEFCE /* createdb.html in Resources */ = {isa = PBXBuildFile; fileRef = 52A177BB13EB698E00CEEFCE /* createdb.html */; };
52A7E1A914EDF1CB0041F950 /* LockScreenController.m in Sources */ = {isa = PBXBuildFile; fileRef = 52A7E1A814EDF1CB0041F950 /* LockScreenController.m */; };
+ 52CF7D871542515500D681C1 /* Default-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 52CF7D861542515500D681C1 /* Default-Landscape~ipad.png */; };
+ 52CF7D891542515900D681C1 /* Default-Landscape@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 52CF7D881542515900D681C1 /* Default-Landscape@2x~ipad.png */; };
+ 52CF7D8B1542515D00D681C1 /* Default-Portrait@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 52CF7D8A1542515D00D681C1 /* Default-Portrait@2x~ipad.png */; };
+ 52CF7D8D1542516300D681C1 /* Default-Portrait~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 52CF7D8C1542516300D681C1 /* Default-Portrait~ipad.png */; };
+ 52CF7D8F1542516900D681C1 /* icon@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 52CF7D8E1542516900D681C1 /* icon@2x~ipad.png */; };
+ 52CF7D911542516D00D681C1 /* icon~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 52CF7D901542516D00D681C1 /* icon~ipad.png */; };
+ 52D63AF0154596FC00EEEFD3 /* splash-Portrait~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 52D63AEE154596FC00EEEFD3 /* splash-Portrait~ipad.png */; };
+ 52D63AF1154596FC00EEEFD3 /* splash-Portrait~ipad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 52D63AEF154596FC00EEEFD3 /* splash-Portrait~ipad@2x.png */; };
+ 52D63AF515459A2300EEEFD3 /* splash-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 52D63AF315459A2300EEEFD3 /* splash-Landscape~ipad.png */; };
+ 52D63AF615459A2300EEEFD3 /* splash-Landscape~ipad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 52D63AF415459A2300EEEFD3 /* splash-Landscape~ipad@2x.png */; };
+ 52E6C88715431C7700A91CD3 /* AutorotatingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E6C88615431C7700A91CD3 /* AutorotatingViewController.m */; };
+ 52E6C88B15431D6C00A91CD3 /* AutorotatingTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E6C88A15431D6C00A91CD3 /* AutorotatingTableViewController.m */; };
6802F9C614EC9C1D00ACD4C1 /* wrench.png in Resources */ = {isa = PBXBuildFile; fileRef = 6802F9C314EC9C1D00ACD4C1 /* wrench.png */; };
6802F9C814EC9C1D00ACD4C1 /* wrench@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6802F9C514EC9C1D00ACD4C1 /* wrench@2x.png */; };
68406ACD13CA42F200A5849C /* ImageButtonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 68406ACC13CA42F200A5849C /* ImageButtonCell.m */; };
@@ -343,6 +355,20 @@
52A177BB13EB698E00CEEFCE /* createdb.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = createdb.html; sourceTree = "<group>"; };
52A7E1A714EDF1CB0041F950 /* LockScreenController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LockScreenController.h; sourceTree = "<group>"; };
52A7E1A814EDF1CB0041F950 /* LockScreenController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LockScreenController.m; sourceTree = "<group>"; };
+ 52CF7D861542515500D681C1 /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape~ipad.png"; sourceTree = "<group>"; };
+ 52CF7D881542515900D681C1 /* Default-Landscape@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape@2x~ipad.png"; sourceTree = "<group>"; };
+ 52CF7D8A1542515D00D681C1 /* Default-Portrait@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait@2x~ipad.png"; sourceTree = "<group>"; };
+ 52CF7D8C1542516300D681C1 /* Default-Portrait~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait~ipad.png"; sourceTree = "<group>"; };
+ 52CF7D8E1542516900D681C1 /* icon@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon@2x~ipad.png"; sourceTree = "<group>"; };
+ 52CF7D901542516D00D681C1 /* icon~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon~ipad.png"; sourceTree = "<group>"; };
+ 52D63AEE154596FC00EEEFD3 /* splash-Portrait~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "splash-Portrait~ipad.png"; sourceTree = "<group>"; };
+ 52D63AEF154596FC00EEEFD3 /* splash-Portrait~ipad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "splash-Portrait~ipad@2x.png"; sourceTree = "<group>"; };
+ 52D63AF315459A2300EEEFD3 /* splash-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "splash-Landscape~ipad.png"; sourceTree = "<group>"; };
+ 52D63AF415459A2300EEEFD3 /* splash-Landscape~ipad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "splash-Landscape~ipad@2x.png"; sourceTree = "<group>"; };
+ 52E6C88515431C7700A91CD3 /* AutorotatingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutorotatingViewController.h; sourceTree = "<group>"; };
+ 52E6C88615431C7700A91CD3 /* AutorotatingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AutorotatingViewController.m; sourceTree = "<group>"; };
+ 52E6C88915431D6C00A91CD3 /* AutorotatingTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutorotatingTableViewController.h; sourceTree = "<group>"; };
+ 52E6C88A15431D6C00A91CD3 /* AutorotatingTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AutorotatingTableViewController.m; sourceTree = "<group>"; };
6802F9C314EC9C1D00ACD4C1 /* wrench.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = wrench.png; sourceTree = "<group>"; };
6802F9C414EC9C1D00ACD4C1 /* wrench.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = wrench.svg; sourceTree = "<group>"; };
6802F9C514EC9C1D00ACD4C1 /* wrench@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wrench@2x.png"; sourceTree = "<group>"; };
@@ -364,13 +390,11 @@
689D001013A4277E005EBD36 /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = usr/lib/libxml2.dylib; sourceTree = SDKROOT; };
689D001213A42784005EBD36 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
689D021013A42B63005EBD36 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = "<group>"; };
- 689D021113A42B63005EBD36 /* Default.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Default.svg; sourceTree = "<group>"; };
689D021213A42B63005EBD36 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = "<group>"; };
689D021413A42B63005EBD36 /* dropbox.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = dropbox.html; sourceTree = "<group>"; };
689D021513A42B63005EBD36 /* itunes.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = itunes.html; sourceTree = "<group>"; };
689D021613A42B63005EBD36 /* style.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = style.css; sourceTree = "<group>"; };
689D021713A42B63005EBD36 /* icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon.png; sourceTree = "<group>"; };
- 689D021813A42B63005EBD36 /* icon.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = icon.svg; sourceTree = "<group>"; };
689D021913A42B63005EBD36 /* icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon@2x.png"; sourceTree = "<group>"; };
689D021B13A42B63005EBD36 /* 0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = 0.png; sourceTree = "<group>"; };
689D021C13A42B63005EBD36 /* 0@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "0@2x.png"; sourceTree = "<group>"; };
@@ -1137,14 +1161,22 @@
529708AD14FEEFD3003547FB /* Andale Mono.ttf */,
689D021313A42B63005EBD36 /* help */,
689D021A13A42B63005EBD36 /* images */,
- 689D021113A42B63005EBD36 /* Default.svg */,
689D021013A42B63005EBD36 /* Default.png */,
689D021213A42B63005EBD36 /* Default@2x.png */,
- 689D021813A42B63005EBD36 /* icon.svg */,
+ 52CF7D8C1542516300D681C1 /* Default-Portrait~ipad.png */,
+ 52CF7D8A1542515D00D681C1 /* Default-Portrait@2x~ipad.png */,
+ 52CF7D861542515500D681C1 /* Default-Landscape~ipad.png */,
+ 52CF7D881542515900D681C1 /* Default-Landscape@2x~ipad.png */,
689D021713A42B63005EBD36 /* icon.png */,
689D021913A42B63005EBD36 /* icon@2x.png */,
+ 52CF7D901542516D00D681C1 /* icon~ipad.png */,
+ 52CF7D8E1542516900D681C1 /* icon@2x~ipad.png */,
5235D58214F8160900B0C991 /* splash.png */,
5235D58414F8176300B0C991 /* splash@2x.png */,
+ 52D63AEE154596FC00EEEFD3 /* splash-Portrait~ipad.png */,
+ 52D63AEF154596FC00EEEFD3 /* splash-Portrait~ipad@2x.png */,
+ 52D63AF315459A2300EEEFD3 /* splash-Landscape~ipad.png */,
+ 52D63AF415459A2300EEEFD3 /* splash-Landscape~ipad@2x.png */,
);
name = Resources;
sourceTree = "<group>";
@@ -1226,6 +1258,10 @@
689DFFDF13A4273F005EBD36 /* MiniKeePass */ = {
isa = PBXGroup;
children = (
+ 52E6C88515431C7700A91CD3 /* AutorotatingViewController.h */,
+ 52E6C88615431C7700A91CD3 /* AutorotatingViewController.m */,
+ 52E6C88915431D6C00A91CD3 /* AutorotatingTableViewController.h */,
+ 52E6C88A15431D6C00A91CD3 /* AutorotatingTableViewController.m */,
689D042613A42C81005EBD36 /* DatabaseDocument.h */,
689D042713A42C81005EBD36 /* DatabaseDocument.m */,
689D042813A42C81005EBD36 /* DatabaseManager.h */,
@@ -1569,6 +1605,16 @@
5235D58514F8176300B0C991 /* splash@2x.png in Resources */,
52709AB9150141D9008AB6C9 /* info.png in Resources */,
52709ABA150141D9008AB6C9 /* info@2x.png in Resources */,
+ 52CF7D871542515500D681C1 /* Default-Landscape~ipad.png in Resources */,
+ 52CF7D891542515900D681C1 /* Default-Landscape@2x~ipad.png in Resources */,
+ 52CF7D8B1542515D00D681C1 /* Default-Portrait@2x~ipad.png in Resources */,
+ 52CF7D8D1542516300D681C1 /* Default-Portrait~ipad.png in Resources */,
+ 52CF7D8F1542516900D681C1 /* icon@2x~ipad.png in Resources */,
+ 52CF7D911542516D00D681C1 /* icon~ipad.png in Resources */,
+ 52D63AF0154596FC00EEEFD3 /* splash-Portrait~ipad.png in Resources */,
+ 52D63AF1154596FC00EEEFD3 /* splash-Portrait~ipad@2x.png in Resources */,
+ 52D63AF515459A2300EEEFD3 /* splash-Landscape~ipad.png in Resources */,
+ 52D63AF615459A2300EEEFD3 /* splash-Landscape~ipad@2x.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1678,6 +1724,8 @@
68F19D1F14EB3A9C00B772CB /* CharacterSetsViewController.m in Sources */,
68CE868F14EDF4C300D34A61 /* LengthCell.m in Sources */,
68633022150BCD6000D9988A /* FileOutputStream.m in Sources */,
+ 52E6C88715431C7700A91CD3 /* AutorotatingViewController.m in Sources */,
+ 52E6C88B15431D6C00A91CD3 /* AutorotatingTableViewController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1810,12 +1858,13 @@
COPY_PHASE_STRIP = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "MiniKeePass/MiniKeePass-Prefix.pch";
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+ GCC_VERSION = "";
INFOPLIST_FILE = "MiniKeePass/MiniKeePass-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 4.0;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
+ TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
WRAPPER_EXTENSION = app;
};
@@ -1901,11 +1950,12 @@
GCC_DYNAMIC_NO_PIC = NO;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "MiniKeePass/MiniKeePass-Prefix.pch";
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+ GCC_VERSION = "";
INFOPLIST_FILE = "MiniKeePass/MiniKeePass-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 4.0;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
+ TARGETED_DEVICE_FAMILY = "1,2";
WRAPPER_EXTENSION = app;
};
name = Debug;
@@ -1918,11 +1968,12 @@
COPY_PHASE_STRIP = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "MiniKeePass/MiniKeePass-Prefix.pch";
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+ GCC_VERSION = "";
INFOPLIST_FILE = "MiniKeePass/MiniKeePass-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 4.0;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
+ TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
WRAPPER_EXTENSION = app;
};
View
13 MiniKeePass/AutorotatingTableViewController.h
@@ -0,0 +1,13 @@
+//
+// AutorotatingTableViewController.h
+// MiniKeePass
+//
+// Created by John Flanagan on 4/21/12.
+// Copyright (c) 2012 Self. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface AutorotatingTableViewController : UITableViewController
+
+@end
View
25 MiniKeePass/AutorotatingTableViewController.m
@@ -0,0 +1,25 @@
+//
+// AutorotatingTableViewController.m
+// MiniKeePass
+//
+// Created by John Flanagan on 4/21/12.
+// Copyright (c) 2012 Self. All rights reserved.
+//
+
+#import "AutorotatingTableViewController.h"
+
+@implementation AutorotatingTableViewController
+
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
+ BOOL shouldRotate;
+
+ if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
+ shouldRotate = YES;
+ } else {
+ shouldRotate = interfaceOrientation == UIInterfaceOrientationPortrait;
+ }
+
+ return shouldRotate;
+}
+
+@end
View
13 MiniKeePass/AutorotatingViewController.h
@@ -0,0 +1,13 @@
+//
+// AutorotatingViewController.h
+// MiniKeePass
+//
+// Created by Mark Hewett on 4/8/12.
+// Copyright (c) 2012 Self. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface AutorotatingViewController : UIViewController
+
+@end
View
25 MiniKeePass/AutorotatingViewController.m
@@ -0,0 +1,25 @@
+//
+// AutorotatingViewController.m
+// MiniKeePass
+//
+// Created by Mark Hewett on 4/8/12.
+// Copyright (c) 2012 Self. All rights reserved.
+//
+
+#import "AutorotatingViewController.h"
+
+@implementation AutorotatingViewController
+
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
+ BOOL shouldRotate;
+
+ if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
+ shouldRotate = YES;
+ } else {
+ shouldRotate = interfaceOrientation == UIInterfaceOrientationPortrait;
+ }
+
+ return shouldRotate;
+}
+
+@end
View
3 MiniKeePass/CharacterSetsViewController.h
@@ -17,6 +17,7 @@
#import <UIKit/UIKit.h>
#import "SwitchCell.h"
+#import "AutorotatingTableViewController.h"
#define CHARACTER_SET_UPPER_CASE (1 << 0)
#define CHARACTER_SET_LOWER_CASE (1 << 1)
@@ -29,7 +30,7 @@
#define CHARACTER_SET_DEFAULT (CHARACTER_SET_UPPER_CASE | CHARACTER_SET_LOWER_CASE | CHARACTER_SET_DIGITS)
-@interface CharacterSetsViewController : UITableViewController {
+@interface CharacterSetsViewController : AutorotatingTableViewController {
SwitchCell *upperCaseSwitchCell;
SwitchCell *lowerCaseSwitchCell;
SwitchCell *digitsSwitchCell;
View
3 MiniKeePass/EntryViewController.h
@@ -26,8 +26,9 @@
#import "KdbLib.h"
#import "MiniKeePassAppDelegate.h"
#import "PasswordGeneratorViewController.h"
+#import "AutorotatingTableViewController.h"
-@interface EntryViewController : UITableViewController <UIGestureRecognizerDelegate, ImagesViewControllerDelegate, TextFieldCellDelegate, PasswordGeneratorDelegate> {
+@interface EntryViewController : AutorotatingTableViewController <UIGestureRecognizerDelegate, ImagesViewControllerDelegate, TextFieldCellDelegate, PasswordGeneratorDelegate> {
MiniKeePassAppDelegate *appDelegate;
TitleFieldCell *titleCell;
ImageButtonCell *imageButtonCell;
View
15 MiniKeePass/FilesInfoView.m
@@ -25,17 +25,26 @@ - (id)initWithFrame:(CGRect)frame {
// Initialization code
self.backgroundColor = [UIColor whiteColor];
+ CGFloat screenWidth = CGRectGetWidth([[UIScreen mainScreen] bounds]);
+
UIImage *image = [UIImage imageNamed:@"background"];
- CGFloat y = 40;
+ CGFloat y;
+ if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
+ y = 240.0f;
+ } else {
+ y = 40.0f;
+ }
+
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
- imageView.frame = CGRectMake(160 - image.size.width / 2.0, y, image.size.width, image.size.height);
+ imageView.frame = CGRectMake((screenWidth - image.size.width) / 2.0, y, image.size.width, image.size.height);
[self addSubview:imageView];
[imageView release];
y += imageView.frame.size.height + 40;
- UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, y, 320, 40)];
+ CGFloat labelWidth = 320.0f;
+ UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake((screenWidth - labelWidth) / 2.0, y, labelWidth, 40)];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = UITextAlignmentCenter;
label.numberOfLines = 0;
View
3 MiniKeePass/FilesViewController.h
@@ -19,10 +19,11 @@
#import "FilesInfoView.h"
#import "TextEntryController.h"
#import "NewKdbViewController.h"
+#import "AutorotatingTableViewController.h"
@class MiniKeePassAppDelegate;
-@interface FilesViewController : UITableViewController <TextEntryControllerDelegate, FormViewControllerDelegate> {
+@interface FilesViewController : AutorotatingTableViewController <TextEntryControllerDelegate, FormViewControllerDelegate> {
FilesInfoView *filesInfoView;
MiniKeePassAppDelegate *appDelegate;
View
3 MiniKeePass/FormViewController.h
@@ -17,10 +17,11 @@
#import <UIKit/UIKit.h>
#import "InfoBar.h"
+#import "AutorotatingTableViewController.h"
@protocol FormViewControllerDelegate;
-@interface FormViewController : UITableViewController <UITextFieldDelegate> {
+@interface FormViewController : AutorotatingTableViewController <UITextFieldDelegate> {
NSArray *controls;
NSString *headerTitle;
NSString *footerTitle;
View
35 MiniKeePass/FormViewController.m
@@ -126,13 +126,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
- CGRect frame = cell.frame;
- frame.size.width -= 40;
- frame.size.height -= 22;
- frame.origin.x = 20;
- frame.origin.y = 11;
-
- view.frame = frame;
+ view.frame = [self calculateNewFrameForView:view inOrientation:[[UIApplication sharedApplication] statusBarOrientation]];
[cell addSubview:view];
}
@@ -144,4 +138,31 @@ - (BOOL)textFieldShouldReturn:(UITextField *)textField {
return YES;
}
+- (CGRect)calculateNewFrameForView:(UIView *)view inOrientation:(UIInterfaceOrientation)orientation{
+ CGRect screenBounds = [[UIScreen mainScreen] bounds];
+ CGFloat currentWidth = UIInterfaceOrientationIsPortrait(orientation) ? CGRectGetWidth(screenBounds) : CGRectGetHeight(screenBounds);
+
+ CGFloat xOrigin = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 56.0f : 20.0f;
+ CGFloat yOrigin = 11;
+ CGFloat width = currentWidth - 2 * xOrigin;
+ CGFloat height = 22;
+
+ return CGRectMake(xOrigin, yOrigin, width, height);
+}
+
+- (void)resizeControlsForOrientation:(UIInterfaceOrientation)orientation {
+ for (UIView *view in self.controls) {
+ if (![view isKindOfClass:[UITableViewCell class]]) {
+ view.frame = [self calculateNewFrameForView:view inOrientation:orientation];
+ }
+ }
+}
+
+- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
+ // Not sure why, but the non-UITableViewCell controls do not seem to get resized during rotation, so adjust here.
+ [UIView animateWithDuration:duration animations:^{
+ [self resizeControlsForOrientation:toInterfaceOrientation];
+ }];
+}
+
@end
View
3 MiniKeePass/GroupViewController.h
@@ -19,8 +19,9 @@
#import "MiniKeePassAppDelegate.h"
#import "EditGroupViewController.h"
#import "KdbLib.h"
+#import "AutorotatingTableViewController.h"
-@interface GroupViewController : UITableViewController <UIActionSheetDelegate, UISearchDisplayDelegate, FormViewControllerDelegate> {
+@interface GroupViewController : AutorotatingTableViewController <UIActionSheetDelegate, UISearchDisplayDelegate, FormViewControllerDelegate> {
MiniKeePassAppDelegate *appDelegate;
UISearchDisplayController *searchDisplayController;
NSMutableArray *results;
View
3 MiniKeePass/HelpViewController.h
@@ -16,8 +16,9 @@
*/
#import <UIKit/UIKit.h>
+#import "AutorotatingTableViewController.h"
-@interface HelpViewController : UITableViewController {
+@interface HelpViewController : AutorotatingTableViewController {
}
@end
View
3 MiniKeePass/HelpViewController.m
@@ -16,6 +16,7 @@
*/
#import "HelpViewController.h"
+#import "AutorotatingViewController.h"
@implementation HelpViewController
@@ -80,7 +81,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
webView.backgroundColor = [UIColor whiteColor];
[webView loadRequest:[NSURLRequest requestWithURL:url]];
- UIViewController *viewController = [[UIViewController alloc] init];
+ UIViewController *viewController = [[AutorotatingViewController alloc] init];
viewController.title = NSLocalizedString(title, nil);
viewController.view = webView;
[webView release];
View
3 MiniKeePass/ImagesViewController.h
@@ -16,10 +16,11 @@
*/
#import <UIKit/UIKit.h>
+#import "AutorotatingViewController.h"
@protocol ImagesViewControllerDelegate;
-@interface ImagesViewController : UIViewController {
+@interface ImagesViewController : AutorotatingViewController {
UIView *imagesView;
NSMutableArray *imageViews;
UIImageView *selectedImageView;
View
3 MiniKeePass/LockScreenController.h
@@ -17,8 +17,9 @@
#import <UIKit/UIKit.h>
#import "PinViewController.h"
+#import "AutorotatingViewController.h"
-@interface LockScreenController : UIViewController <PinViewControllerDelegate> {
+@interface LockScreenController : AutorotatingViewController <PinViewControllerDelegate> {
PinViewController *pinViewController;
MiniKeePassAppDelegate *appDelegate;
CGRect visibleFrame;
View
57 MiniKeePass/LockScreenController.m
@@ -31,17 +31,23 @@ @implementation LockScreenController
- (id)init {
self = [super init];
if (self) {
-
- visibleFrame = CGRectZero;
- offScreenFrame = CGRectOffset(visibleFrame, 0, -95);
+ UIInterfaceOrientation orientation = self.interfaceOrientation;
+ [self updateFramesForOrientation:orientation];
+ [self setBackgroundForOrientation:orientation];
+ CGRect screenBounds = [[UIScreen mainScreen] bounds];
+ CGFloat width = UIInterfaceOrientationIsPortrait(orientation) ? CGRectGetWidth(screenBounds) : CGRectGetHeight(screenBounds);
+
pinViewController = [[PinViewController alloc] init];
+ pinViewController.backgroundColor = [UIColor clearColor];
pinViewController.delegate = self;
+ visibleFrame = CGRectMake(0, 0, width, 95);
+ offScreenFrame = CGRectMake(0, -95, width, 95);
+
+
pinViewController.view.frame = offScreenFrame;
[self.view addSubview:pinViewController.view];
- self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"splash"]];
-
appDelegate = (MiniKeePassAppDelegate*)[[UIApplication sharedApplication] delegate];
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
@@ -55,11 +61,34 @@ - (id)init {
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
-
[pinViewController release];
[super dealloc];
}
+- (void)setBackgroundForOrientation:(UIInterfaceOrientation)orientation {
+ NSString *imageName = @"splash";
+
+ if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
+ if (UIInterfaceOrientationIsPortrait(orientation)) {
+ imageName = [imageName stringByAppendingString:@"-Portrait~ipad"];
+ } else {
+ imageName = [imageName stringByAppendingString:@"-Landscape~ipad"];
+ }
+ }
+
+ self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:imageName]];
+}
+
+- (void)updateFramesForOrientation:(UIInterfaceOrientation)orientation {
+}
+
+- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
+ [UIView animateWithDuration:duration animations:^{
+// [self updateFramesForOrientation:toInterfaceOrientation];
+ [self setBackgroundForOrientation:toInterfaceOrientation];
+ }];
+}
+
- (UIViewController *)frontMostViewController {
UIViewController *frontViewController = appDelegate.window.rootViewController;
while (frontViewController.modalViewController != nil) {
@@ -69,7 +98,6 @@ - (UIViewController *)frontMostViewController {
}
- (void)show {
- self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"splash"]];
[[self frontMostViewController] presentModalViewController:self animated:NO];
}
@@ -84,14 +112,15 @@ - (void)hide {
}
- (void)lock {
- appDelegate.locked = YES;
+ NSLog(@"Lock %@\n", self);
+ appDelegate.locked = YES;
- pinViewController.textLabel.text = NSLocalizedString(@"Enter your PIN to unlock", nil);
-
- [pinViewController becomeFirstResponder];
- [UIView animateWithDuration:DURATION animations:^{
- pinViewController.view.frame = visibleFrame;
- }];
+ pinViewController.textLabel.text = NSLocalizedString(@"Enter your PIN to unlock", nil);
+
+ [pinViewController becomeFirstResponder];
+ [UIView animateWithDuration:DURATION animations:^{
+ pinViewController.view.frame = visibleFrame;
+ }];
}
- (void)unlock {
View
38 MiniKeePass/MiniKeePass-Info.plist
@@ -46,12 +46,37 @@
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
- <string></string>
+ <string>icon.png</string>
<key>CFBundleIconFiles</key>
<array>
<string>icon.png</string>
<string>icon@2x.png</string>
+ <string>Default-Landscape~ipad.png</string>
+ <string>Default-Landscape@2x~ipad.png</string>
+ <string>Default-Portrait@2x~ipad.png</string>
+ <string>Default-Portrait~ipad.png</string>
+ <string>icon@2x~ipad.png</string>
+ <string>icon~ipad.png</string>
</array>
+ <key>CFBundleIcons</key>
+ <dict>
+ <key>CFBundlePrimaryIcon</key>
+ <dict>
+ <key>CFBundleIconFiles</key>
+ <array>
+ <string>icon.png</string>
+ <string>icon@2x.png</string>
+ <string>Default-Landscape~ipad.png</string>
+ <string>Default-Landscape@2x~ipad.png</string>
+ <string>Default-Portrait@2x~ipad.png</string>
+ <string>Default-Portrait~ipad.png</string>
+ <string>icon@2x~ipad.png</string>
+ <string>icon~ipad.png</string>
+ </array>
+ <key>UIPrerenderedIcon</key>
+ <true/>
+ </dict>
+ </dict>
<key>CFBundleIdentifier</key>
<string>com.jflan.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
@@ -61,11 +86,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>1.2.2</string>
+ <string>1.3</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
- <string>1.2.2</string>
+ <string>1.3</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIAppFonts</key>
@@ -80,6 +105,13 @@
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
+ <key>UISupportedInterfaceOrientations~ipad</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
+ </array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
View
1 MiniKeePass/MiniKeePassAppDelegate.h
@@ -41,6 +41,7 @@
@property (nonatomic, assign) BOOL locked;
@property (nonatomic, readonly) BOOL backgroundSupported;
+- (CGFloat)currentScreenWidth;
- (void)closeDatabase;
- (void)deleteAllData;
- (NSStringEncoding)getPasswordEncoding;
View
7 MiniKeePass/MiniKeePassAppDelegate.m
@@ -154,6 +154,13 @@ - (void)applicationDidBecomeActive:(UIApplication *)application {
}
}
+- (CGFloat)currentScreenWidth {
+ CGRect screenRect = [[UIScreen mainScreen] bounds];
+ UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
+
+ return UIInterfaceOrientationIsPortrait(orientation) ? CGRectGetWidth(screenRect) : CGRectGetHeight(screenRect);
+}
+
- (void)openUrl:(NSURL *)url {
// Get the filename
NSString *filename = [url lastPathComponent];
View
11 MiniKeePass/NewKdbViewController.m
@@ -59,10 +59,17 @@ - (id)initWithStyle:(UITableViewStyle)style {
passwordTextField2.delegate = self;
footerView = [[UIView alloc] init];
-
+ footerView.frame = CGRectMake(0, 0, self.view.frame.size.width, BUTTON_HEIGHT);
+ footerView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
+
versionSegmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:NSLocalizedString(@"Version 1.x", nil), NSLocalizedString(@"Version 2.x", nil), nil]];
versionSegmentedControl.selectedSegmentIndex = 0;
- versionSegmentedControl.frame = CGRectMake(HSPACER, VSPACER, BUTTON_WIDTH, BUTTON_HEIGHT);
+
+ CGFloat versionSegmentedControlX = (self.view.frame.size.width - BUTTON_WIDTH) / 2;
+
+ versionSegmentedControl.frame = CGRectMake(versionSegmentedControlX, VSPACER, BUTTON_WIDTH, BUTTON_HEIGHT);
+ versionSegmentedControl.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
+ versionSegmentedControl.selectedSegmentIndex = 0;
[footerView addSubview:versionSegmentedControl];
self.controls = [NSArray arrayWithObjects:nameTextField, passwordTextField1, passwordTextField2, nil];
View
3 MiniKeePass/PasswordGeneratorViewController.h
@@ -18,10 +18,11 @@
#import <UIKit/UIKit.h>
#import "LengthCell.h"
#import "CharacterSetsViewController.h"
+#import "AutorotatingTableViewController.h"
@protocol PasswordGeneratorDelegate;
-@interface PasswordGeneratorViewController : UITableViewController <LengthCellDelegate> {
+@interface PasswordGeneratorViewController : AutorotatingTableViewController <LengthCellDelegate> {
LengthCell *lengthCell;
UITableViewCell *characterSetsCell;
UITableViewCell *passwordCell;
View
5 MiniKeePass/PinViewController.h
@@ -16,10 +16,11 @@
*/
#import <UIKit/UIKit.h>
+#import "AutorotatingViewController.h"
@protocol PinViewControllerDelegate;
-@interface PinViewController : UIViewController <UITextFieldDelegate> {
+@interface PinViewController : AutorotatingViewController <UITextFieldDelegate> {
UITextField *textField;
NSArray *pinTextFields;
UILabel *textLabel;
@@ -28,8 +29,10 @@
- (id)initWithText:(NSString*)text;
- (void)clearEntry;
+- (void)keyboardDidHide;
@property (nonatomic, copy) UILabel *textLabel;
+@property (nonatomic, copy) UIColor *backgroundColor;
@property (nonatomic, retain) id<PinViewControllerDelegate> delegate;
@end
View
101 MiniKeePass/PinViewController.m
@@ -18,6 +18,7 @@
#import <AudioToolbox/AudioToolbox.h>
#import "PinViewController.h"
#import "PinTextField.h"
+#import "MiniKeePassAppDelegate.h"
@implementation PinViewController
@@ -33,7 +34,10 @@ - (id)initWithText:(NSString*)text {
if (self) {
self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
- textField = [[UITextField alloc] initWithFrame:CGRectMake(320, 240, 0, 0)];
+ MiniKeePassAppDelegate *appDelegate = (MiniKeePassAppDelegate *)[[UIApplication sharedApplication] delegate];
+ CGFloat screenWidth = [appDelegate currentScreenWidth];
+
+ textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
textField.delegate = self;
textField.hidden = YES;
textField.secureTextEntry = YES;
@@ -42,46 +46,72 @@ - (id)initWithText:(NSString*)text {
[self.view addSubview:textField];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange:) name:UITextFieldTextDidChangeNotification object:textField];
-
- UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 240, 96)];
- [toolbar setBarStyle:UIBarStyleBlackTranslucent];
-
- PinTextField *pinTextField1 = [[PinTextField alloc] initWithFrame:CGRectMake(23, 22, 61, 52)];
- [toolbar addSubview:pinTextField1];
-
- PinTextField *pinTextField2 = [[PinTextField alloc] initWithFrame:CGRectMake(94, 22, 61, 52)];
- [toolbar addSubview:pinTextField2];
-
- PinTextField *pinTextField3 = [[PinTextField alloc] initWithFrame:CGRectMake(165, 22, 61, 52)];
- [toolbar addSubview:pinTextField3];
-
- PinTextField *pinTextField4 = [[PinTextField alloc] initWithFrame:CGRectMake(236, 22, 61, 52)];
- [toolbar addSubview:pinTextField4];
-
- pinTextFields = [[NSArray arrayWithObjects:pinTextField1, pinTextField2, pinTextField3, pinTextField4, nil] retain];
- [pinTextField1 release];
- [pinTextField2 release];
- [pinTextField3 release];
- [pinTextField4 release];
-
- textField.inputAccessoryView = toolbar;
- [toolbar release];
-
- textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 95)];
+ // Create topbar
+ textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 95)];
+ textLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth;
textLabel.backgroundColor = [UIColor clearColor];
textLabel.textColor = [UIColor whiteColor];
textLabel.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:25];
textLabel.numberOfLines = 0;
textLabel.textAlignment = UITextAlignmentCenter;
textLabel.text = text;
- UIToolbar *topBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 95)];
+ UIToolbar *topBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 95)];
+ topBar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
topBar.barStyle = UIBarStyleBlackTranslucent;
[topBar addSubview:textLabel];
[self.view addSubview:topBar];
[topBar release];
+
+ // Create PIN bar
+ CGFloat pinTextFieldWidth = 61.0f;
+ CGFloat pinTextFieldHeight = 52.0f;
+ CGFloat textFieldSpace = 10.0f;
+
+ CGFloat textFieldViewWidth = pinTextFieldWidth * 4 + textFieldSpace * 3;
+
+ UIView *textFieldsView = [[UIView alloc] initWithFrame:CGRectMake((screenWidth - textFieldViewWidth) / 2, 22, textFieldViewWidth, pinTextFieldHeight)];
+ textFieldsView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
+
+ CGFloat xOrigin = 0;
+
+ PinTextField *pinTextField1 = [[PinTextField alloc] initWithFrame:CGRectMake(xOrigin, 0, pinTextFieldWidth, pinTextFieldHeight)];
+ xOrigin += (pinTextFieldWidth + textFieldSpace);
+ [textFieldsView addSubview:pinTextField1];
+
+ PinTextField *pinTextField2 = [[PinTextField alloc] initWithFrame:CGRectMake(xOrigin, 0, pinTextFieldWidth, pinTextFieldHeight)];
+ xOrigin += (pinTextFieldWidth + textFieldSpace);
+ [textFieldsView addSubview:pinTextField2];
+
+ PinTextField *pinTextField3 = [[PinTextField alloc] initWithFrame:CGRectMake(xOrigin, 0, pinTextFieldWidth, pinTextFieldHeight)];
+ xOrigin += (pinTextFieldWidth + textFieldSpace);
+ [textFieldsView addSubview:pinTextField3];
+
+ PinTextField *pinTextField4 = [[PinTextField alloc] initWithFrame:CGRectMake(xOrigin, 0, pinTextFieldWidth, pinTextFieldHeight)];
+ [textFieldsView addSubview:pinTextField4];
+
+ pinTextFields = [[NSArray arrayWithObjects:pinTextField1, pinTextField2, pinTextField3, pinTextField4, nil] retain];
+
+ [pinTextField1 release];
+ [pinTextField2 release];
+ [pinTextField3 release];
+ [pinTextField4 release];
+
+ UIToolbar *PINbar= [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 95)];
+ PINbar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
+ [PINbar setBarStyle:UIBarStyleBlackTranslucent];
+ [PINbar addSubview:textFieldsView];
+
+ textField.inputAccessoryView = PINbar;
+ [PINbar release];
+
+ // If the keyboard is dismissed, show it again.
+// [[NSNotificationCenter defaultCenter] addObserver:self
+// selector:@selector(keyboardDidHide)
+// name:UIKeyboardDidHideNotification
+// object:nil];
}
return self;
@@ -95,6 +125,19 @@ - (void)dealloc {
[super dealloc];
}
+- (UIColor *)backgroundColor {
+ return self.view.backgroundColor;
+}
+
+- (void)setBackgroundColor:(UIColor *)backgroundColor {
+ self.view.backgroundColor = backgroundColor;
+}
+
+- (void)keyboardDidHide {
+ // If the keyboard is dismissed, show it again.
+ [self becomeFirstResponder];
+}
+
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
@@ -104,7 +147,7 @@ - (void)viewWillAppear:(BOOL)animated {
- (void)viewDidUnload {
[super viewDidUnload];
- [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:textField];
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (BOOL)textField:(UITextField *)field shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
View
3 MiniKeePass/SelectionListViewController.h
@@ -16,10 +16,11 @@
*/
#import <UIKit/UIKit.h>
+#import "AutorotatingTableViewController.h"
@protocol SelectionListViewControllerDelegate;
-@interface SelectionListViewController : UITableViewController {
+@interface SelectionListViewController : AutorotatingTableViewController {
NSArray *items;
NSInteger selectedIndex;
id<SelectionListViewControllerDelegate> delegate;
View
3 MiniKeePass/SettingsViewController.h
@@ -20,8 +20,9 @@
#import "ChoiceCell.h"
#import "SwitchCell.h"
#import "SelectionListViewController.h"
+#import "AutorotatingViewController.h"
-@interface SettingsViewController : UITableViewController <PinViewControllerDelegate, SelectionListViewControllerDelegate> {
+@interface SettingsViewController : AutorotatingTableViewController <PinViewControllerDelegate, SelectionListViewControllerDelegate> {
SwitchCell *pinEnabledCell;
ChoiceCell *pinLockTimeoutCell;
SwitchCell *deleteOnFailureEnabledCell;
View
9 MiniKeePass/SettingsViewController.m
@@ -116,25 +116,28 @@ - (void)viewDidLoad {
clearClipboardTimeoutCell = [[ChoiceCell alloc] initWithLabel:NSLocalizedString(@"Clear Timeout", nil) choices:[NSArray arrayWithObjects:NSLocalizedString(@"30 Seconds", nil), NSLocalizedString(@"1 Minute", nil), NSLocalizedString(@"2 Minutes", nil), NSLocalizedString(@"3 Minutes", nil), nil] selectedIndex:0];
// Add version number to table view footer
- UIView *tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];
+ CGFloat viewWidth = CGRectGetWidth(self.tableView.frame);
+ UIView *tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, viewWidth, 40)];
NSString *text = [NSString stringWithFormat:@"MiniKeePass version %@",
[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]];
UIFont *font = [UIFont boldSystemFontOfSize:17];
- UILabel *versionLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 30)];
+ UILabel *versionLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, viewWidth, 30)];
versionLabel.textAlignment = UITextAlignmentCenter;
versionLabel.backgroundColor = [UIColor clearColor];
versionLabel.font = font;
versionLabel.textColor = [UIColor colorWithRed:0.298039 green:0.337255 blue:0.423529 alpha:1.0];
versionLabel.text = text;
+ versionLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth;
- UILabel *highlighLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 1, 320, 30)];
+ UILabel *highlighLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 1, viewWidth, 30)];
highlighLabel.textAlignment = UITextAlignmentCenter;
highlighLabel.backgroundColor = [UIColor clearColor];
highlighLabel.font = font;
highlighLabel.textColor = [UIColor whiteColor];
highlighLabel.text = text;
+ highlighLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[tableFooterView addSubview:highlighLabel];
[tableFooterView addSubview:versionLabel];
View
BIN icon@2x~ipad.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN icon~ipad.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN splash-Landscape~ipad.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN splash-Landscape~ipad@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN splash-Portrait~ipad.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN splash-Portrait~ipad@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit a7c5c87

Please sign in to comment.