Skip to content

Commit

Permalink
Merge pull request #7 from DrabWeb/refactoring
Browse files Browse the repository at this point in the history
Refactoring
  • Loading branch information
DrabWeb authored Jan 12, 2018
2 parents d5dfe71 + 70dc326 commit 2af0ff9
Show file tree
Hide file tree
Showing 15 changed files with 384 additions and 793 deletions.
56 changes: 28 additions & 28 deletions macfeh/macfeh.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,18 @@
objects = {

/* Begin PBXBuildFile section */
AE47904B1E009D8D00BB2038 /* MFImageViewerScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE47904A1E009D8D00BB2038 /* MFImageViewerScrollView.swift */; };
AE47904D1E009FC300BB2038 /* MFImageViewerImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE47904C1E009FC300BB2038 /* MFImageViewerImageView.swift */; };
AE5817B61DFFD46B00AA74AE /* MFGeneralPreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5817B51DFFD46B00AA74AE /* MFGeneralPreferencesViewController.swift */; };
AE5817BA1DFFD52200AA74AE /* MFPreferencesObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5817B91DFFD52200AA74AE /* MFPreferencesObject.swift */; };
AEAA6547200954B3009691C6 /* MFWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEAA6546200954B3009691C6 /* MFWindow.swift */; };
AE47904B1E009D8D00BB2038 /* ImageViewerScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE47904A1E009D8D00BB2038 /* ImageViewerScrollView.swift */; };
AE47904D1E009FC300BB2038 /* ImageViewerImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE47904C1E009FC300BB2038 /* ImageViewerImageView.swift */; };
AE5817B61DFFD46B00AA74AE /* GeneralPreferencesController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5817B51DFFD46B00AA74AE /* GeneralPreferencesController.swift */; };
AE5817BA1DFFD52200AA74AE /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5817B91DFFD52200AA74AE /* Preferences.swift */; };
AEAA6547200954B3009691C6 /* Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEAA6546200954B3009691C6 /* Window.swift */; };
AED309481DFF976B0053AA53 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED309471DFF976B0053AA53 /* AppDelegate.swift */; };
AED3094C1DFF976B0053AA53 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AED3094B1DFF976B0053AA53 /* Assets.xcassets */; };
AED3094F1DFF976B0053AA53 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AED3094D1DFF976B0053AA53 /* Main.storyboard */; };
AED3095A1DFF976B0053AA53 /* macfehTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED309591DFF976B0053AA53 /* macfehTests.swift */; };
AED309651DFF976B0053AA53 /* macfehUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED309641DFF976B0053AA53 /* macfehUITests.swift */; };
AED3097B1DFF9BA70053AA53 /* MFImageExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED3097A1DFF9BA70053AA53 /* MFImageExtensions.swift */; };
AEED5EAB1DFFD38100649545 /* MFImageViewerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEED5EAA1DFFD38100649545 /* MFImageViewerViewController.swift */; };
AED3097B1DFF9BA70053AA53 /* ImageExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED3097A1DFF9BA70053AA53 /* ImageExtensions.swift */; };
AEED5EAB1DFFD38100649545 /* ImageViewerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEED5EAA1DFFD38100649545 /* ImageViewerController.swift */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand All @@ -39,11 +39,11 @@
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
AE47904A1E009D8D00BB2038 /* MFImageViewerScrollView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MFImageViewerScrollView.swift; sourceTree = "<group>"; };
AE47904C1E009FC300BB2038 /* MFImageViewerImageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MFImageViewerImageView.swift; sourceTree = "<group>"; };
AE5817B51DFFD46B00AA74AE /* MFGeneralPreferencesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MFGeneralPreferencesViewController.swift; sourceTree = "<group>"; };
AE5817B91DFFD52200AA74AE /* MFPreferencesObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MFPreferencesObject.swift; sourceTree = "<group>"; };
AEAA6546200954B3009691C6 /* MFWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MFWindow.swift; sourceTree = "<group>"; };
AE47904A1E009D8D00BB2038 /* ImageViewerScrollView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageViewerScrollView.swift; sourceTree = "<group>"; };
AE47904C1E009FC300BB2038 /* ImageViewerImageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageViewerImageView.swift; sourceTree = "<group>"; };
AE5817B51DFFD46B00AA74AE /* GeneralPreferencesController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneralPreferencesController.swift; sourceTree = "<group>"; };
AE5817B91DFFD52200AA74AE /* Preferences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Preferences.swift; sourceTree = "<group>"; };
AEAA6546200954B3009691C6 /* Window.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Window.swift; sourceTree = "<group>"; };
AED309441DFF976B0053AA53 /* macfeh.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = macfeh.app; sourceTree = BUILT_PRODUCTS_DIR; };
AED309471DFF976B0053AA53 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
AED3094B1DFF976B0053AA53 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
Expand All @@ -55,8 +55,8 @@
AED309601DFF976B0053AA53 /* macfehUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = macfehUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
AED309641DFF976B0053AA53 /* macfehUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = macfehUITests.swift; sourceTree = "<group>"; };
AED309661DFF976B0053AA53 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
AED3097A1DFF9BA70053AA53 /* MFImageExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MFImageExtensions.swift; sourceTree = "<group>"; };
AEED5EAA1DFFD38100649545 /* MFImageViewerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MFImageViewerViewController.swift; sourceTree = "<group>"; };
AED3097A1DFF9BA70053AA53 /* ImageExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageExtensions.swift; sourceTree = "<group>"; };
AEED5EAA1DFFD38100649545 /* ImageViewerController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageViewerController.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -95,7 +95,7 @@
AE5817B81DFFD50F00AA74AE /* Preferences */ = {
isa = PBXGroup;
children = (
AE5817B91DFFD52200AA74AE /* MFPreferencesObject.swift */,
AE5817B91DFFD52200AA74AE /* Preferences.swift */,
);
path = Preferences;
sourceTree = "<group>";
Expand Down Expand Up @@ -173,33 +173,33 @@
AED309761DFF99D00053AA53 /* Views */ = {
isa = PBXGroup;
children = (
AE47904A1E009D8D00BB2038 /* MFImageViewerScrollView.swift */,
AE47904C1E009FC300BB2038 /* MFImageViewerImageView.swift */,
AE47904A1E009D8D00BB2038 /* ImageViewerScrollView.swift */,
AE47904C1E009FC300BB2038 /* ImageViewerImageView.swift */,
);
path = Views;
sourceTree = "<group>";
};
AED309791DFF9B9C0053AA53 /* Utilities */ = {
isa = PBXGroup;
children = (
AED3097A1DFF9BA70053AA53 /* MFImageExtensions.swift */,
AED3097A1DFF9BA70053AA53 /* ImageExtensions.swift */,
);
path = Utilities;
sourceTree = "<group>";
};
AEED5EA91DFFD38100649545 /* Viewer */ = {
isa = PBXGroup;
children = (
AEED5EAA1DFFD38100649545 /* MFImageViewerViewController.swift */,
AEAA6546200954B3009691C6 /* MFWindow.swift */,
AEED5EAA1DFFD38100649545 /* ImageViewerController.swift */,
AEAA6546200954B3009691C6 /* Window.swift */,
);
path = Viewer;
sourceTree = "<group>";
};
AEED5EAC1DFFD38B00649545 /* Preferences */ = {
isa = PBXGroup;
children = (
AE5817B51DFFD46B00AA74AE /* MFGeneralPreferencesViewController.swift */,
AE5817B51DFFD46B00AA74AE /* GeneralPreferencesController.swift */,
);
path = Preferences;
sourceTree = "<group>";
Expand Down Expand Up @@ -338,13 +338,13 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AE47904B1E009D8D00BB2038 /* MFImageViewerScrollView.swift in Sources */,
AED3097B1DFF9BA70053AA53 /* MFImageExtensions.swift in Sources */,
AE47904D1E009FC300BB2038 /* MFImageViewerImageView.swift in Sources */,
AE5817B61DFFD46B00AA74AE /* MFGeneralPreferencesViewController.swift in Sources */,
AEAA6547200954B3009691C6 /* MFWindow.swift in Sources */,
AEED5EAB1DFFD38100649545 /* MFImageViewerViewController.swift in Sources */,
AE5817BA1DFFD52200AA74AE /* MFPreferencesObject.swift in Sources */,
AE47904B1E009D8D00BB2038 /* ImageViewerScrollView.swift in Sources */,
AED3097B1DFF9BA70053AA53 /* ImageExtensions.swift in Sources */,
AE47904D1E009FC300BB2038 /* ImageViewerImageView.swift in Sources */,
AE5817B61DFFD46B00AA74AE /* GeneralPreferencesController.swift in Sources */,
AEAA6547200954B3009691C6 /* Window.swift in Sources */,
AEED5EAB1DFFD38100649545 /* ImageViewerController.swift in Sources */,
AE5817BA1DFFD52200AA74AE /* Preferences.swift in Sources */,
AED309481DFF976B0053AA53 /* AppDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down
152 changes: 30 additions & 122 deletions macfeh/macfeh/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,161 +10,69 @@ import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

// MARK: - Properties

/// The global preferences object for macfeh
var preferences : MFPreferencesObject = MFPreferencesObject();

/// Have the preferences already been loaded?
private var preferencesLoaded : Bool = false;


// MARK: - Menu Items

/// File/Open ⌘O
private var preferencesLoaded: Bool = false;
var preferences: Preferences = Preferences();

@IBAction func menuItemOpenAction(_ sender: NSMenuItem) {
// Prompt for files and open a new viewer
promptForAndOpenViewer();
}

/// View/Toggle Background ⌥⌘B
@IBOutlet weak var menuItemToggleBackground: NSMenuItem!

/// View/Toggle Shadow ⌥⌘S
@IBOutlet weak var menuItemToggleShadow: NSMenuItem!

/// View/Actual Size ⌘1
@IBOutlet weak var menuItemActualSize: NSMenuItem!

/// View/Zoom to Fit ⌘0
@IBOutlet weak var menuItemZoomToFit: NSMenuItem!

/// View/Zoom In ⌘=
@IBOutlet weak var menuItemZoomIn: NSMenuItem!

/// View/Zoom Out ⌘-
@IBOutlet weak var menuItemZoomOut: NSMenuItem!

/// View/Scale to Image ⌘2
@IBOutlet weak var menuItemScaleToImage: NSMenuItem!


// MARK: - Functions

func applicationWillFinishLaunching(_ notification: Notification) {
// Setup the menu items
setupMenuItems();

// Load the preferences
loadPreferences();
}

func application(_ sender: NSApplication, openFiles filenames: [String]) {
// Make sure the preferences are loaded
loadPreferences();

// Open a viewer for each file
for(_, currentFile) in filenames.enumerated() {

for (_, currentFile) in filenames.enumerated() {
self.openNewViewer(for: currentFile);
}
}

func application(_ sender: NSApplication, openFile filename: String) -> Bool {
// Make sure the preferences are loaded
loadPreferences();

// Open a viewer for the file
self.openNewViewer(for: filename);
openNewViewer(for: filename);

return true;
}

/// Prompts for an image from an open panel and displays it in a new viewer

func promptForAndOpenViewer() {
/// The open panel for asking for an image
let openPanel : NSOpenPanel = NSOpenPanel();

// Setup the open panel
let openPanel: NSOpenPanel = NSOpenPanel();

openPanel.allowsMultipleSelection = true;
openPanel.canChooseDirectories = false;
openPanel.canChooseFiles = true;
openPanel.allowedFileTypes = NSImage.imageTypes;

// Run the open panel, and if the user selects "Open"...
if(openPanel.runModal() == .OK) {
// For every opened file...
for(_, currentFile) in openPanel.urls.enumerated() {
// Open a new viewer for the current file
self.openNewViewer(for: currentFile.absoluteString.replacingOccurrences(of: "file://", with: "").removingPercentEncoding!);

if openPanel.runModal() == .OK {
for (_, currentFile) in openPanel.urls.enumerated() {
openNewViewer(for: currentFile.absoluteString.replacingOccurrences(of: "file://", with: "").removingPercentEncoding!);
}
}
}

/// Opens a new viewer for the image file at the given path
///
/// - Parameter file: The file to display in the viewer
func openNewViewer(for file : String) {
/// The `NSWindowController` for the new image viewer
weak var imageViewerWindowController : NSWindowController! = NSStoryboard(name: NSStoryboard.Name(rawValue: "Main"), bundle: nil).instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "imageViewerWindowController")) as! NSWindowController;

/// The `MFImageViewerViewController` for `imageViewerWindowController`
weak var imageViewerViewController : MFImageViewerViewController! = (imageViewerWindowController.contentViewController as! MFImageViewerViewController);

// Load and show the window
imageViewerWindowController.loadWindow();
imageViewerWindowController.showWindow(self);

// Display the file in the new viewer
imageViewerViewController.display(image: file);

// Free the memory from `imageViewerWindowController` and `imageViewerViewController`
imageViewerWindowController = nil;
imageViewerViewController = nil;
}

/// Sets up the actions of all the menu items
func setupMenuItems() {
// Setup the menu items
menuItemToggleBackground.action = #selector(MFImageViewerViewController.toggleBackground);
menuItemToggleShadow.action = #selector(MFImageViewerViewController.toggleShadow);
menuItemActualSize.action = #selector(MFImageViewerViewController.zoomToActualSize);
menuItemZoomToFit.action = #selector(MFImageViewerViewController.zoomToFit);
menuItemZoomIn.action = #selector(MFImageViewerViewController.zoomIn);
menuItemZoomOut.action = #selector(MFImageViewerViewController.zoomOut);
menuItemScaleToImage.action = #selector(MFImageViewerViewController.scaleToImage);
}

/// Saves the preferences
func savePreferences() {
/// The data for the preferences object
let data = NSKeyedArchiver.archivedData(withRootObject: preferences);

// Set the standard user defaults preferences key to that data
UserDefaults.standard.set(data, forKey: "preferences");

// Synchronize the data
UserDefaults.standard.synchronize();

func openNewViewer(for file: String) {
let storyboard = NSStoryboard(name: NSStoryboard.Name(rawValue: "Main"), bundle: nil);

if let windowController = storyboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "imageViewerWindowController")) as? NSWindowController {
if let imageViewer = windowController.contentViewController as? ImageViewerController {
windowController.loadWindow();
windowController.showWindow(self);
imageViewer.display(image: file);
}
}
}

/// Loads the preferences

func loadPreferences() {
// If the preferences have already been loaded don't load them
if(preferencesLoaded) {
if preferencesLoaded {
return;
}

// If we have any data to load...
if let data = UserDefaults.standard.object(forKey: "preferences") as? Data {
// Set the preferences object to the loaded object
preferences = (NSKeyedUnarchiver.unarchiveObject(with: data) as! MFPreferencesObject);

// Say the preferences have been loaded
self.preferencesLoaded = true;
}

preferences.load();
preferencesLoaded = true;
}

func applicationWillTerminate(_ aNotification: Notification) {
// Save the preferences
savePreferences();
preferences.save();
}
}
Loading

0 comments on commit 2af0ff9

Please sign in to comment.