[M1 Mac, Big Sur 11.6.5, clang 13.0.0, no Xcode]
大分前に気が付いてはいたのですが、ウィジェットを対象にしたDrag & DropはsetEditableにしておけば可能です。
しかしこれでは狭くて操作しにくいのでアプリ画面全体へのドロップができるよう実装を進めています。
[M1 Mac, Big Sur 11.6.5, clang 13.0.0, no Xcode]
大分前に気が付いてはいたのですが、ウィジェットを対象にしたDrag & DropはsetEditableにしておけば可能です。
しかしこれでは狭くて操作しにくいのでアプリ画面全体へのドロップができるよう実装を進めています。
[M1 Mac, Big Sur 11.6.5, clang 13.0.0, no Xcode]
[Obj-C++] 04で作成したAppDelegate導入環境とこれまで開発してきたコードを合体させました。画面遷移がないのでViewControllerは必要ないみたいです。
当面の目標であるDrag & Drop実装への土台が出来上がりました。
#import "AppDelegate.h"
#import "XlsxConvertor.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (void)applicationWillFinishLaunching:(NSNotification*)notification {
[[[[window alloc] init] autorelease] makeMainWindow];
}
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
// Insert code here to initialize your application
}
- (void)applicationWillTerminate:(NSNotification *)notification {
// Insert code here to tear down your application
}
- (BOOL)applicationSupportsSecureRestorableState:(NSApplication *)app {
return YES;
}
@end
#import "AppDelegate.h"
int main(int argc, const char * argv[]) {
auto app = [NSApplication sharedApplication];
app.delegate = [AppDelegate new];
[app run];
}
[M1 Mac, Big Sur 11.6.5, clang 13.0.0, no Xcode]
CMakeLists.txtをワイルドカードを使って作成しました。これでファイルが増えても追記不要です。
cmake_minimum_required(VERSION 3.1)
# Project
Project(XlsxConvertor VERSION 1.0.0)
find_library(COREFOUNDATION CoreFoundation)
find_library(COCOA Cocoa)
# C++11指定
set(CMAKE_CXX_STANDARD 11)
# コマンド表示
set(CMAKE_VERBOSE_MAKEFILE ON)
# Info.plist
set(MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION})
set(MACOSX_BUNDLE_COPYRIGHT "Copyright (C) 2022")
set(MACOSX_BUNDLE_INFO_STRING "Convert tool for XLSX")
# ファイル設定(ワイルドカードを使用)
file(GLOB SOURCE ./src/*.mm ./include/*.h)
add_executable(${PROJECT_NAME}
MACOSX_BUNDLE
${SOURCE}
)
set(INCDIR ./include)
set(INCDIR ${INCDIR} /Library/Frameworks/Python.framework/Versions/3.10/include/python3.10)
include_directories(${INCDIR})
set(LIBS dl)
set(LIBS ${LIBS} /Library/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib)
set(LIBDIR /Library/Frameworks/Python.framework/Versions/3.10/lib)
link_directories(${LIBDIR})
target_link_libraries(${PROJECT_NAME}
${COREFOUNDATION}
${COCOA}
${LIBS})
[M1 Mac, Big Sur 11.6.5, clang 13.0.0, no Xcode]
これまで非Xcode非Xib環境で開発を進めていますが、Drag & Dropを実装するに際しライフサイクルの概念を取り入れるためAppDelegateを導入しました。IDEを使わずGUIをコードで書く非Xcode非Xib環境は継続になります。
手順は以下の通りです。最初だけXcodeを使います。
1.XcodeでmacOS – Xib – Objective-Cの空プロジェクトを作成する。
2.main.m, AppDelegate.m, AppDelegate.hを用意しておいたプロジェクトにコピーする。
3.拡張子をmからmmに書き換えて、以下の様にコードを追記する。
#import "AppDelegate.h"
@interface AppDelegate ()
@property (strong) NSWindow *window;
@end
@implementation AppDelegate
- (void)applicationWillFinishLaunching:(NSNotification*)notification {
self.window = [[[NSWindow alloc] initWithContentRect: NSMakeRect(0, 0, 300, 200)
styleMask: NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskResizable
backing: NSBackingStoreBuffered
defer: NO]
autorelease];
auto app_name = [[NSProcessInfo processInfo] processName];
[self.window setTitle: app_name];
[self.window makeKeyAndOrderFront: self];
[self.window orderFront:self];
[self.window makeMainWindow];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
}
- (void)applicationWillTerminate:(NSNotification *)aNotification {
// Insert code here to tear down your application
}
- (BOOL)applicationSupportsSecureRestorableState:(NSApplication *)app {
return YES;
}
@end
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
@end
#import "AppDelegate.h"
int main(int argc, const char * argv[]) {
auto app = [NSApplication sharedApplication];
app.delegate = [AppDelegate new];
[app run];
}