summaryrefslogtreecommitdiff
path: root/macosx/Pcsxr-QL
diff options
context:
space:
mode:
authorSND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2014-03-28 22:51:46 +0000
committerSND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2014-03-28 22:51:46 +0000
commitebfb89de00860bbdbb6e9a72ed18a358acc7c056 (patch)
treed7c44382653ca1eb04db6876277edac4e6993a68 /macosx/Pcsxr-QL
parenta92f831335493c2ed789a3f746861af49ef5e4c8 (diff)
OS X: Begin work on a QuickLook plug-in for freeze states.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@89709 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'macosx/Pcsxr-QL')
-rw-r--r--macosx/Pcsxr-QL/GeneratePreviewForURL.c21
-rw-r--r--macosx/Pcsxr-QL/GenerateThumbnailForURL.c21
-rw-r--r--macosx/Pcsxr-QL/MyQuickLook.h25
-rw-r--r--macosx/Pcsxr-QL/Pcsxr-QL-Info.plist140
-rw-r--r--macosx/Pcsxr-QL/Pcsxr-QL-Prefix.pch10
-rw-r--r--macosx/Pcsxr-QL/en.lproj/InfoPlist.strings2
-rw-r--r--macosx/Pcsxr-QL/main.c202
7 files changed, 421 insertions, 0 deletions
diff --git a/macosx/Pcsxr-QL/GeneratePreviewForURL.c b/macosx/Pcsxr-QL/GeneratePreviewForURL.c
new file mode 100644
index 00000000..a57f116f
--- /dev/null
+++ b/macosx/Pcsxr-QL/GeneratePreviewForURL.c
@@ -0,0 +1,21 @@
+#include <CoreFoundation/CoreFoundation.h>
+#include <CoreServices/CoreServices.h>
+#include <QuickLook/QuickLook.h>
+#include "MyQuickLook.h"
+
+/* -----------------------------------------------------------------------------
+ Generate a preview for file
+
+ This function's job is to create preview for designated file
+ ----------------------------------------------------------------------------- */
+
+OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options)
+{
+ // To complete your generator please implement the function GeneratePreviewForURL in GeneratePreviewForURL.c
+ return noErr;
+}
+
+void CancelPreviewGeneration(void *thisInterface, QLPreviewRequestRef preview)
+{
+ // Implement only if supported
+}
diff --git a/macosx/Pcsxr-QL/GenerateThumbnailForURL.c b/macosx/Pcsxr-QL/GenerateThumbnailForURL.c
new file mode 100644
index 00000000..60211658
--- /dev/null
+++ b/macosx/Pcsxr-QL/GenerateThumbnailForURL.c
@@ -0,0 +1,21 @@
+#include <CoreFoundation/CoreFoundation.h>
+#include <CoreServices/CoreServices.h>
+#include <QuickLook/QuickLook.h>
+#include "MyQuickLook.h"
+
+/* -----------------------------------------------------------------------------
+ Generate a thumbnail for file
+
+ This function's job is to create thumbnail for designated file as fast as possible
+ ----------------------------------------------------------------------------- */
+
+OSStatus GenerateThumbnailForURL(void *thisInterface, QLThumbnailRequestRef thumbnail, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options, CGSize maxSize)
+{
+ // To complete your generator please implement the function GenerateThumbnailForURL in GenerateThumbnailForURL.c
+ return noErr;
+}
+
+void CancelThumbnailGeneration(void *thisInterface, QLThumbnailRequestRef thumbnail)
+{
+ // Implement only if supported
+}
diff --git a/macosx/Pcsxr-QL/MyQuickLook.h b/macosx/Pcsxr-QL/MyQuickLook.h
new file mode 100644
index 00000000..9f1c6778
--- /dev/null
+++ b/macosx/Pcsxr-QL/MyQuickLook.h
@@ -0,0 +1,25 @@
+//
+// MyQuickLook.h
+// Pcsxr
+//
+// Created by C.W. Betts on 3/28/14.
+//
+//
+
+#ifndef Pcsxr_MyQuickLook_h
+#define Pcsxr_MyQuickLook_h
+
+#include <CoreFoundation/CoreFoundation.h>
+#include <CoreFoundation/CFPlugInCOM.h>
+#include <CoreServices/CoreServices.h>
+#include <QuickLook/QuickLook.h>
+
+// The thumbnail generation function to be implemented in GenerateThumbnailForURL.c
+__private_extern__ OSStatus GenerateThumbnailForURL(void *thisInterface, QLThumbnailRequestRef thumbnail, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options, CGSize maxSize);
+__private_extern__ void CancelThumbnailGeneration(void* thisInterface, QLThumbnailRequestRef thumbnail);
+
+// The preview generation function to be implemented in GeneratePreviewForURL.c
+__private_extern__ OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options);
+__private_extern__ void CancelPreviewGeneration(void *thisInterface, QLPreviewRequestRef preview);
+
+#endif
diff --git a/macosx/Pcsxr-QL/Pcsxr-QL-Info.plist b/macosx/Pcsxr-QL/Pcsxr-QL-Info.plist
new file mode 100644
index 00000000..3646ec14
--- /dev/null
+++ b/macosx/Pcsxr-QL/Pcsxr-QL-Info.plist
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleDocumentTypes</key>
+ <array>
+ <dict>
+ <key>CFBundleTypeRole</key>
+ <string>QLGenerator</string>
+ <key>LSItemContentTypes</key>
+ <array>
+ <string>com.codeplex.pcsxr.freeze</string>
+ </array>
+ </dict>
+ </array>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string>com.github.maddthesane.${PRODUCT_NAME:rfc1034identifier}</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>CFPlugInDynamicRegisterFunction</key>
+ <string></string>
+ <key>CFPlugInDynamicRegistration</key>
+ <string>NO</string>
+ <key>CFPlugInFactories</key>
+ <dict>
+ <key>8C4B8FFE-72CC-436C-8D8A-034152616D03</key>
+ <string>QuickLookGeneratorPluginFactory</string>
+ </dict>
+ <key>CFPlugInTypes</key>
+ <dict>
+ <key>5E2D9680-5022-40FA-B806-43349622E5B9</key>
+ <array>
+ <string>8C4B8FFE-72CC-436C-8D8A-034152616D03</string>
+ </array>
+ </dict>
+ <key>CFPlugInUnloadFunction</key>
+ <string></string>
+ <key>QLNeedsToBeRunInMainThread</key>
+ <false/>
+ <key>QLPreviewHeight</key>
+ <real>600</real>
+ <key>QLPreviewWidth</key>
+ <real>800</real>
+ <key>QLSupportsConcurrentRequests</key>
+ <false/>
+ <key>QLThumbnailMinimumSize</key>
+ <real>17</real>
+ <key>UTImportedTypeDeclarations</key>
+ <array>
+ <dict>
+ <key>UTTypeConformsTo</key>
+ <array>
+ <string>public.data</string>
+ <string>public.content</string>
+ </array>
+ <key>UTTypeDescription</key>
+ <string>PCSXR Memory Card</string>
+ <key>UTTypeIconFile</key>
+ <string>pcsxrmemcard</string>
+ <key>UTTypeIdentifier</key>
+ <string>com.codeplex.pcsxr.memcard</string>
+ <key>UTTypeReferenceURL</key>
+ <string>http://pcsxr.codeplex.com/</string>
+ <key>UTTypeTagSpecification</key>
+ <dict>
+ <key>com.apple.ostype</key>
+ <array>
+ <string>Pmcr</string>
+ </array>
+ <key>public.filename-extension</key>
+ <array>
+ <string>mcr</string>
+ <string>mc</string>
+ <string>mem</string>
+ <string>vgs</string>
+ <string>mcd</string>
+ <string>gme</string>
+ <string>ddf</string>
+ </array>
+ </dict>
+ </dict>
+ <dict>
+ <key>UTTypeConformsTo</key>
+ <array>
+ <string>public.data</string>
+ <string>public.content</string>
+ </array>
+ <key>UTTypeDescription</key>
+ <string>PCSXR Freeze State</string>
+ <key>UTTypeIconFile</key>
+ <string>pcsxrfreeze</string>
+ <key>UTTypeIdentifier</key>
+ <string>com.codeplex.pcsxr.freeze</string>
+ <key>UTTypeReferenceURL</key>
+ <string>http://pcsxr.codeplex.com/</string>
+ <key>UTTypeTagSpecification</key>
+ <dict>
+ <key>com.apple.ostype</key>
+ <array>
+ <string>Pfrz</string>
+ </array>
+ <key>public.filename-extension</key>
+ <array>
+ <string>pcsxrstate</string>
+ </array>
+ </dict>
+ </dict>
+ <dict>
+ <key>UTTypeConformsTo</key>
+ <array>
+ <string>public.text</string>
+ <string>public.data</string>
+ </array>
+ <key>UTTypeDescription</key>
+ <string>PCSXR Cheat</string>
+ <key>UTTypeIdentifier</key>
+ <string>com.codeplex.pcsxr.cheat</string>
+ <key>UTTypeTagSpecification</key>
+ <dict>
+ <key>public.filename-extension</key>
+ <array>
+ <string>cht</string>
+ </array>
+ </dict>
+ </dict>
+ </array>
+</dict>
+</plist>
diff --git a/macosx/Pcsxr-QL/Pcsxr-QL-Prefix.pch b/macosx/Pcsxr-QL/Pcsxr-QL-Prefix.pch
new file mode 100644
index 00000000..ccf35331
--- /dev/null
+++ b/macosx/Pcsxr-QL/Pcsxr-QL-Prefix.pch
@@ -0,0 +1,10 @@
+//
+// Prefix header
+//
+// The contents of this file are implicitly included at the beginning of every source file.
+//
+
+#include <CoreFoundation/CoreFoundation.h>
+#include <CoreFoundation/CFPlugInCOM.h>
+#include <CoreServices/CoreServices.h>
+#include <QuickLook/QuickLook.h>
diff --git a/macosx/Pcsxr-QL/en.lproj/InfoPlist.strings b/macosx/Pcsxr-QL/en.lproj/InfoPlist.strings
new file mode 100644
index 00000000..477b28ff
--- /dev/null
+++ b/macosx/Pcsxr-QL/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/macosx/Pcsxr-QL/main.c b/macosx/Pcsxr-QL/main.c
new file mode 100644
index 00000000..1ca582ce
--- /dev/null
+++ b/macosx/Pcsxr-QL/main.c
@@ -0,0 +1,202 @@
+//==============================================================================
+//
+// DO NO MODIFY THE CONTENT OF THIS FILE
+//
+// This file contains the generic CFPlug-in code necessary for your generator
+// To complete your generator implement the function in GenerateThumbnailForURL/GeneratePreviewForURL.c
+//
+//==============================================================================
+
+#include <CoreFoundation/CoreFoundation.h>
+#include <CoreFoundation/CFPlugInCOM.h>
+#include <CoreServices/CoreServices.h>
+#include <QuickLook/QuickLook.h>
+#include "MyQuickLook.h"
+
+// -----------------------------------------------------------------------------
+// constants
+// -----------------------------------------------------------------------------
+
+// Don't modify this line
+#define PLUGIN_ID "8C4B8FFE-72CC-436C-8D8A-034152616D03"
+
+//
+// Below is the generic glue code for all plug-ins.
+//
+// You should not have to modify this code aside from changing
+// names if you decide to change the names defined in the Info.plist
+//
+
+// -----------------------------------------------------------------------------
+// typedefs
+// -----------------------------------------------------------------------------
+
+// The layout for an instance of QuickLookGeneratorPlugIn
+typedef struct __QuickLookGeneratorPluginType
+{
+ void *conduitInterface;
+ CFUUIDRef factoryID;
+ UInt32 refCount;
+} PcsxrQLPlug;
+
+// -----------------------------------------------------------------------------
+// prototypes
+// -----------------------------------------------------------------------------
+// Forward declaration for the IUnknown implementation.
+//
+
+static PcsxrQLPlug *AllocQuickLookGeneratorPluginType(CFUUIDRef inFactoryID);
+static void DeallocQuickLookGeneratorPluginType(PcsxrQLPlug *thisInstance);
+static HRESULT QuickLookGeneratorQueryInterface(void *thisInstance,REFIID iid,LPVOID *ppv);
+extern void *QuickLookGeneratorPluginFactory(CFAllocatorRef allocator,CFUUIDRef typeID);
+static ULONG QuickLookGeneratorPluginAddRef(void *thisInstance);
+static ULONG QuickLookGeneratorPluginRelease(void *thisInstance);
+
+// -----------------------------------------------------------------------------
+// myInterfaceFtbl definition
+// -----------------------------------------------------------------------------
+// The QLGeneratorInterfaceStruct function table.
+//
+static QLGeneratorInterfaceStruct myInterfaceFtbl = {
+ NULL,
+ QuickLookGeneratorQueryInterface,
+ QuickLookGeneratorPluginAddRef,
+ QuickLookGeneratorPluginRelease,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+
+// -----------------------------------------------------------------------------
+// AllocQuickLookGeneratorPluginType
+// -----------------------------------------------------------------------------
+// Utility function that allocates a new instance.
+// You can do some initial setup for the generator here if you wish
+// like allocating globals etc...
+//
+PcsxrQLPlug *AllocQuickLookGeneratorPluginType(CFUUIDRef inFactoryID)
+{
+ PcsxrQLPlug *theNewInstance;
+
+ theNewInstance = (PcsxrQLPlug *)calloc(sizeof(PcsxrQLPlug), 1);
+
+ /* Point to the function table Malloc enough to store the stuff and copy the filler from myInterfaceFtbl over */
+ theNewInstance->conduitInterface = malloc(sizeof(QLGeneratorInterfaceStruct));
+ memcpy(theNewInstance->conduitInterface, &myInterfaceFtbl, sizeof(QLGeneratorInterfaceStruct));
+
+ /* Retain and keep an open instance refcount for each factory. */
+ theNewInstance->factoryID = CFRetain(inFactoryID);
+ CFPlugInAddInstanceForFactory(inFactoryID);
+
+ /* This function returns the IUnknown interface so set the refCount to one. */
+ theNewInstance->refCount = 1;
+ return theNewInstance;
+}
+
+// -----------------------------------------------------------------------------
+// DeallocQuickLookGeneratorPluginType
+// -----------------------------------------------------------------------------
+// Utility function that deallocates the instance when
+// the refCount goes to zero.
+// In the current implementation generator interfaces are never deallocated
+// but implement this as this might change in the future
+//
+void DeallocQuickLookGeneratorPluginType(PcsxrQLPlug *thisInstance)
+{
+ CFUUIDRef theFactoryID;
+
+ theFactoryID = thisInstance->factoryID;
+ /* Free the conduitInterface table up */
+ free(thisInstance->conduitInterface);
+
+ /* Free the instance structure */
+ free(thisInstance);
+ if (theFactoryID){
+ CFPlugInRemoveInstanceForFactory(theFactoryID);
+ CFRelease(theFactoryID);
+ }
+}
+
+// -----------------------------------------------------------------------------
+// QuickLookGeneratorQueryInterface
+// -----------------------------------------------------------------------------
+// Implementation of the IUnknown QueryInterface function.
+//
+HRESULT QuickLookGeneratorQueryInterface(void *thisInstance,REFIID iid,LPVOID *ppv)
+{
+ CFUUIDRef interfaceID = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault,iid);
+
+ if (CFEqual(interfaceID,kQLGeneratorCallbacksInterfaceID)){
+ /* If the Right interface was requested, bump the ref count,
+ * set the ppv parameter equal to the instance, and
+ * return good status.
+ */
+ ((QLGeneratorInterfaceStruct *)((PcsxrQLPlug *)thisInstance)->conduitInterface)->GenerateThumbnailForURL = GenerateThumbnailForURL;
+ ((QLGeneratorInterfaceStruct *)((PcsxrQLPlug *)thisInstance)->conduitInterface)->CancelThumbnailGeneration = CancelThumbnailGeneration;
+ ((QLGeneratorInterfaceStruct *)((PcsxrQLPlug *)thisInstance)->conduitInterface)->GeneratePreviewForURL = GeneratePreviewForURL;
+ ((QLGeneratorInterfaceStruct *)((PcsxrQLPlug *)thisInstance)->conduitInterface)->CancelPreviewGeneration = CancelPreviewGeneration;
+ ((QLGeneratorInterfaceStruct *)((PcsxrQLPlug*)thisInstance)->conduitInterface)->AddRef(thisInstance);
+ *ppv = thisInstance;
+ CFRelease(interfaceID);
+ return S_OK;
+ } else {
+ /* Requested interface unknown, bail with error. */
+ *ppv = NULL;
+ CFRelease(interfaceID);
+ return E_NOINTERFACE;
+ }
+}
+
+// -----------------------------------------------------------------------------
+// QuickLookGeneratorPluginAddRef
+// -----------------------------------------------------------------------------
+// Implementation of reference counting for this type. Whenever an interface
+// is requested, bump the refCount for the instance. NOTE: returning the
+// refcount is a convention but is not required so don't rely on it.
+//
+ULONG QuickLookGeneratorPluginAddRef(void *thisInstance)
+{
+ ((PcsxrQLPlug *)thisInstance )->refCount += 1;
+ return ((PcsxrQLPlug*) thisInstance)->refCount;
+}
+
+// -----------------------------------------------------------------------------
+// QuickLookGeneratorPluginRelease
+// -----------------------------------------------------------------------------
+// When an interface is released, decrement the refCount.
+// If the refCount goes to zero, deallocate the instance.
+//
+ULONG QuickLookGeneratorPluginRelease(void *thisInstance)
+{
+ ((PcsxrQLPlug*)thisInstance)->refCount -= 1;
+ if (((PcsxrQLPlug*)thisInstance)->refCount == 0) {
+ DeallocQuickLookGeneratorPluginType((PcsxrQLPlug*)thisInstance);
+ return 0;
+ } else {
+ return ((PcsxrQLPlug*) thisInstance )->refCount;
+ }
+}
+
+// -----------------------------------------------------------------------------
+// QuickLookGeneratorPluginFactory
+// -----------------------------------------------------------------------------
+void *QuickLookGeneratorPluginFactory(CFAllocatorRef allocator,CFUUIDRef typeID)
+{
+ PcsxrQLPlug *result;
+ CFUUIDRef uuid;
+
+ /* If correct type is being requested, allocate an
+ * instance of kQLGeneratorTypeID and return the IUnknown interface.
+ */
+ if (CFEqual(typeID, kQLGeneratorTypeID)){
+ uuid = CFUUIDCreateFromString(kCFAllocatorDefault, CFSTR(PLUGIN_ID));
+ result = AllocQuickLookGeneratorPluginType(uuid);
+ CFRelease(uuid);
+ return result;
+ }
+ /* If the requested type is incorrect, return NULL. */
+ return NULL;
+}
+