From fb7f3b833d31cb7dcae259c6a9a0118cdeafc96c Mon Sep 17 00:00:00 2001
From: Teddy Wing
Date: Sat, 16 Sep 2023 16:21:49 +0200
Subject: Make a document-based application
Add the basic necessities for a document-based application. This is what
I came up with on 2023-09-10. The `DocumentWindowController` was just an
initial idea and doesn't do anything: we create the required window
controller in `Document`.
The `CFBundleDocumentTypes` entry enables us to interact with text
files.
This confirms that the "Open Recent" menu does get added automatically
below the "Open" menu.
---
Info.plist | 14 ++++++++++++++
src/Document.h | 4 ++++
src/Document.m | 38 ++++++++++++++++++++++++++++++++++++++
src/DocumentWindowController.h | 4 ++++
src/DocumentWindowController.m | 11 +++++++++++
5 files changed, 71 insertions(+)
create mode 100644 src/Document.h
create mode 100644 src/Document.m
create mode 100644 src/DocumentWindowController.h
create mode 100644 src/DocumentWindowController.m
diff --git a/Info.plist b/Info.plist
index e1b9e8c..6a6eedd 100644
--- a/Info.plist
+++ b/Info.plist
@@ -24,5 +24,19 @@
10.12
NSHumanReadableCopyright
Copyright © 2023 Teddy Wing
+
+ CFBundleDocumentTypes
+
+
+ CFBundleTypeRole
+ Editor
+ LSItemContentTypes
+
+ public.plain-text
+
+ NSDocumentClass
+ Document
+
+
diff --git a/src/Document.h b/src/Document.h
new file mode 100644
index 0000000..e566ac0
--- /dev/null
+++ b/src/Document.h
@@ -0,0 +1,4 @@
+#import
+
+@interface Document : NSDocument
+@end
diff --git a/src/Document.m b/src/Document.m
new file mode 100644
index 0000000..7b514eb
--- /dev/null
+++ b/src/Document.m
@@ -0,0 +1,38 @@
+#import "Document.h"
+
+@implementation Document
+
+- (id)init
+{
+ self = [super init];
+ if (self) {
+ }
+ return self;
+}
+
+// TODO: Are window controllers deallocated automatically by the parent?
+// [[NSWindowController alloc] initWithWindow:]?
+
+- (void)makeWindowControllers
+{
+ // DocumentWindowController *controller = [[DocumentWindowController alloc] init];
+
+ NSWindow *window = [[NSWindow alloc]
+ initWithContentRect:NSMakeRect(0, 0, 600, 500)
+ styleMask:
+ NSWindowStyleMaskTitled
+ | NSWindowStyleMaskClosable
+ | NSWindowStyleMaskMiniaturizable
+ | NSWindowStyleMaskResizable
+ backing:NSBackingStoreBuffered
+ defer:NO];
+ // [window setFrameAutosaveName:@"document"]; // document name?
+
+ NSWindowController *window_controller = [[NSWindowController alloc]
+ initWithWindow:window];
+ // [window_controller setShouldCascadeWindows:YES];
+
+ [self addWindowController:window_controller];
+}
+
+@end
diff --git a/src/DocumentWindowController.h b/src/DocumentWindowController.h
new file mode 100644
index 0000000..e3b277b
--- /dev/null
+++ b/src/DocumentWindowController.h
@@ -0,0 +1,4 @@
+#import
+
+@interface DocumentWindowController : NSWindowController
+@end
diff --git a/src/DocumentWindowController.m b/src/DocumentWindowController.m
new file mode 100644
index 0000000..e83af36
--- /dev/null
+++ b/src/DocumentWindowController.m
@@ -0,0 +1,11 @@
+#import "DocumentWindowController.h"
+
+@implementation DocumentWindowController
+
+- (void)windowWillLoad
+{
+ // NSWindow *window = ;
+ // self = [self initWithWindow:window];
+}
+
+@end
--
cgit v1.2.3