Skip to content

Commit aed399e

Browse files
Merge pull request #57 from hybridmachine/refactor/modularize-main-phase7
Refactor main_phase7.mm into 22 focused modules
2 parents fb9208f + b3b000d commit aed399e

50 files changed

Lines changed: 4434 additions & 9508 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

macos/CMakeLists.txt

Lines changed: 144 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -120,21 +120,21 @@ file(GLOB UCHARDET_SOURCES "${UCHARDET_DIR}/*.cpp")
120120
add_library(uchardet STATIC ${UCHARDET_SOURCES})
121121
target_include_directories(uchardet PUBLIC "${UCHARDET_DIR}")
122122

123-
# ============================================================
124-
# Notepad++ PowerEditor Sources (compatibility compile subset)
125-
# ============================================================
123+
# ============================================================
124+
# Notepad++ PowerEditor Sources (compatibility compile subset)
125+
# ============================================================
126126
set(NPP_SRC_DIR "${NPP_ROOT}/PowerEditor/src")
127127

128-
# We compile a minimal subset to verify the shim works.
129-
# These files are core logic that should compile with the shim headers.
130-
# This target is for compilation verification only.
128+
# We compile a minimal subset to verify the shim works.
129+
# These files are core logic that should compile with the shim headers.
130+
# This target is for compilation verification only.
131131

132-
# Compile-test target: just verify the shim + vendored libs compile
133-
# and that key N++ headers can be parsed.
134-
# Compile a simple test file that includes key N++ headers
135-
# through the shim layer. Actual N++ source files will be added
136-
# incrementally as we stub out more Windows-only headers.
137-
add_library(npp_macos_compile_test STATIC
132+
# Compile-test target: just verify the shim + vendored libs compile
133+
# and that key N++ headers can be parsed.
134+
# Compile a simple test file that includes key N++ headers
135+
# through the shim layer. Actual N++ source files will be added
136+
# incrementally as we stub out more Windows-only headers.
137+
add_library(npp_macos_compile_test STATIC
138138
"${CMAKE_CURRENT_SOURCE_DIR}/platform/npp_headers_test.cpp"
139139
"${NPP_SRC_DIR}/MISC/sha2/sha-256.cpp"
140140
"${NPP_SRC_DIR}/Utf8_16.cpp"
@@ -182,12 +182,12 @@ file(GLOB_RECURSE NPP_WINCONTROLS_SOURCES "${NPP_SRC_DIR}/WinControls/*.cpp")
182182
list(FILTER NPP_WINCONTROLS_SOURCES EXCLUDE REGEX "ReadDirectoryChanges")
183183
list(FILTER NPP_WINCONTROLS_SOURCES EXCLUDE REGEX "CustomFileDialog") # Uses IFileDialog COM - replace with NSOpenPanel/NSSavePanel
184184
list(FILTER NPP_WINCONTROLS_SOURCES EXCLUDE REGEX "pluginsAdmin") # Uses WinInet - replace with NSURLSession
185-
target_sources(npp_macos_compile_test PRIVATE ${NPP_WINCONTROLS_SOURCES})
185+
target_sources(npp_macos_compile_test PRIVATE ${NPP_WINCONTROLS_SOURCES})
186186
# Gather all subdirectories under WinControls/ for includes
187187
file(GLOB NPP_WINCONTROLS_DIRS "${NPP_SRC_DIR}/WinControls/*/")
188188
file(GLOB NPP_MISC_DIRS "${NPP_SRC_DIR}/MISC/*/")
189189

190-
target_include_directories(npp_macos_compile_test
190+
target_include_directories(npp_macos_compile_test
191191
PRIVATE "${SHIM_INCLUDE_DIR}" # Must be first!
192192
PRIVATE "${NPP_SRC_DIR}"
193193
PRIVATE "${NPP_SRC_DIR}/MISC"
@@ -205,7 +205,7 @@ target_include_directories(npp_macos_compile_test
205205
PRIVATE "${PUGIXML_DIR}"
206206
PRIVATE "${UCHARDET_DIR}"
207207
)
208-
target_compile_definitions(npp_macos_compile_test PRIVATE
208+
target_compile_definitions(npp_macos_compile_test PRIVATE
209209
UNICODE
210210
_UNICODE
211211
__APPLE__
@@ -214,7 +214,7 @@ target_compile_definitions(npp_macos_compile_test PRIVATE
214214
"NPP_LEXILLA_VERSION=\"5.4.0\""
215215
"NPP_BOOST_REGEX_VERSION=\"1.90.0\""
216216
)
217-
target_compile_options(npp_macos_compile_test PRIVATE
217+
target_compile_options(npp_macos_compile_test PRIVATE
218218
-Wno-deprecated-declarations
219219
-Wno-writable-strings
220220
-Wno-unused-parameter
@@ -223,18 +223,18 @@ target_compile_options(npp_macos_compile_test PRIVATE
223223
-Wno-c++11-narrowing
224224
-include "${SHIM_INCLUDE_DIR}/windows.h"
225225
)
226-
target_link_libraries(npp_macos_compile_test
226+
target_link_libraries(npp_macos_compile_test
227227
win32shim
228228
pugixml
229229
uchardet
230230
)
231231

232-
# ============================================================
233-
# Compatibility verification target
234-
# ============================================================
235-
# This executable just links everything together to verify compilation.
236-
# It's not the primary runnable app target.
237-
add_executable(npp_build_test
232+
# ============================================================
233+
# Compatibility verification target
234+
# ============================================================
235+
# This executable just links everything together to verify compilation.
236+
# It's not the primary runnable app target.
237+
add_executable(npp_build_test
238238
"${CMAKE_CURRENT_SOURCE_DIR}/platform/build_test.mm"
239239
)
240240
target_include_directories(npp_build_test PRIVATE
@@ -283,110 +283,130 @@ target_link_libraries(win32shim PUBLIC
283283
scintilla_bridge
284284
)
285285

286-
# ============================================================
287-
# Main macOS app target
288-
# ============================================================
289-
add_executable(MacOSNotePP
290-
"${CMAKE_CURRENT_SOURCE_DIR}/platform/main_phase7.mm"
291-
"${CMAKE_CURRENT_SOURCE_DIR}/platform/settings_manager.mm"
292-
"${CMAKE_CURRENT_SOURCE_DIR}/platform/file_monitor_mac.mm"
293-
)
294-
target_include_directories(MacOSNotePP PRIVATE
295-
"${CMAKE_CURRENT_SOURCE_DIR}/platform"
296-
"${SHIM_INCLUDE_DIR}"
297-
"${SCINTILLA_INCLUDE_DIR}"
298-
"${LEXILLA_INCLUDE_DIR}"
299-
"${UCHARDET_DIR}"
300-
)
301-
target_link_libraries(MacOSNotePP
302-
win32shim
303-
scintilla_bridge
304-
Scintilla
286+
# ============================================================
287+
# Main macOS app target
288+
# ============================================================
289+
add_executable(MacOSNotePP
290+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/app_main.mm"
291+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/app_state.mm"
292+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/app_delegate.mm"
293+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/document_manager.mm"
294+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/file_operations.mm"
295+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/find_replace.mm"
296+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/edit_commands.mm"
297+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/split_view.mm"
298+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/session_manager.mm"
299+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/preferences_dialog.mm"
300+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/menu_builder.mm"
301+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/wndproc.mm"
302+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/appearance.mm"
303+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/scintilla_config.mm"
304+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/lexer_styles.mm"
305+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/language_defs.mm"
306+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/bookmarks.mm"
307+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/autocomplete.mm"
308+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/context_menu.mm"
309+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/status_bar.mm"
310+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/recent_files.mm"
311+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/settings_manager.mm"
312+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/file_monitor_mac.mm"
313+
)
314+
target_include_directories(MacOSNotePP PRIVATE
315+
"${CMAKE_CURRENT_SOURCE_DIR}/platform"
316+
"${SHIM_INCLUDE_DIR}"
317+
"${SCINTILLA_INCLUDE_DIR}"
318+
"${LEXILLA_INCLUDE_DIR}"
319+
"${UCHARDET_DIR}"
320+
)
321+
target_link_libraries(MacOSNotePP
322+
win32shim
323+
scintilla_bridge
324+
Scintilla
305325
Lexilla
306326
pugixml
307327
uchardet
308328
"-framework Foundation"
309329
"-framework AppKit"
310330
"-framework QuartzCore"
311-
"-framework UniformTypeIdentifiers"
312-
"-framework CoreServices"
313-
)
314-
target_compile_options(MacOSNotePP PRIVATE
315-
-fobjc-arc
316-
-Wno-deprecated-declarations
317-
)
318-
add_custom_command(TARGET MacOSNotePP POST_BUILD
319-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
320-
"${NPP_ROOT}/logo.png"
321-
"$<TARGET_FILE_DIR:MacOSNotePP>/logo.png"
322-
COMMENT "Copying logo.png for Dock icon"
323-
)
324-
325-
# ============================================================
326-
# Packaging: App bundle + unsigned DMG
327-
# ============================================================
328-
set(NPP_MACOS_DIST_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dist")
329-
set(NPP_MACOS_APP_BUNDLE "${NPP_MACOS_DIST_DIR}/MacNote++.app")
330-
set(NPP_MACOS_APP_CONTENTS "${NPP_MACOS_APP_BUNDLE}/Contents")
331-
set(NPP_MACOS_APP_MACOS "${NPP_MACOS_APP_CONTENTS}/MacOS")
332-
set(NPP_MACOS_APP_RESOURCES "${NPP_MACOS_APP_CONTENTS}/Resources")
333-
set(NPP_MACOS_DMG_ROOT "${NPP_MACOS_DIST_DIR}/dmg-root")
334-
set(NPP_MACOS_DMG_APP_BUNDLE "${NPP_MACOS_DMG_ROOT}/MacNote++.app")
335-
set(NPP_MACOS_UNSIGNED_DMG "${NPP_MACOS_DIST_DIR}/MacNote++-unsigned.dmg")
336-
set(NPP_MACOS_INFO_PLIST "${CMAKE_CURRENT_BINARY_DIR}/MacNote++-Info.plist")
337-
338-
configure_file(
339-
"${CMAKE_CURRENT_SOURCE_DIR}/platform/MacNoteInfo.plist.in"
340-
"${NPP_MACOS_INFO_PLIST}"
341-
@ONLY
342-
)
343-
344-
add_custom_target(MacOSNotePP_package
345-
DEPENDS MacOSNotePP
346-
COMMAND ${CMAKE_COMMAND} -E rm -rf "${NPP_MACOS_APP_BUNDLE}"
347-
COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_MACOS_APP_MACOS}"
348-
COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_MACOS_APP_RESOURCES}"
349-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
350-
"$<TARGET_FILE:MacOSNotePP>"
351-
"${NPP_MACOS_APP_MACOS}/MacOSNotePP"
352-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
353-
"${NPP_ROOT}/logo.png"
354-
"${NPP_MACOS_APP_MACOS}/logo.png"
355-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
356-
"${NPP_ROOT}/logo.png"
357-
"${NPP_MACOS_APP_RESOURCES}/logo.png"
358-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
359-
"${NPP_MACOS_INFO_PLIST}"
360-
"${NPP_MACOS_APP_CONTENTS}/Info.plist"
361-
COMMENT "Packaging MacNote++.app"
362-
)
363-
364-
add_custom_target(MacOSNotePP_dmg
365-
DEPENDS MacOSNotePP_package
366-
COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_MACOS_DMG_ROOT}"
367-
COMMAND ${CMAKE_COMMAND} -E rm -rf "${NPP_MACOS_DMG_APP_BUNDLE}"
368-
COMMAND ${CMAKE_COMMAND} -E copy_directory
369-
"${NPP_MACOS_APP_BUNDLE}"
370-
"${NPP_MACOS_DMG_APP_BUNDLE}"
371-
COMMAND ${CMAKE_COMMAND} -E rm -rf "${NPP_MACOS_DMG_ROOT}/Applications"
372-
COMMAND ${CMAKE_COMMAND} -E create_symlink
373-
"/Applications"
374-
"${NPP_MACOS_DMG_ROOT}/Applications"
375-
COMMAND ${CMAKE_COMMAND} -E rm -f "${NPP_MACOS_UNSIGNED_DMG}"
376-
COMMAND hdiutil create
377-
-volname "MacNote++"
378-
-srcfolder "${NPP_MACOS_DMG_ROOT}"
379-
-format UDZO
380-
-ov
381-
"${NPP_MACOS_UNSIGNED_DMG}"
382-
COMMENT "Building MacNote++-unsigned.dmg"
383-
)
384-
385-
message(STATUS "=== Notepad++ macOS Port ===")
386-
message(STATUS "Compatibility compile target: npp_macos_compile_test")
387-
message(STATUS "App target: MacOSNotePP")
388-
message(STATUS "Packaging target: MacOSNotePP_package")
389-
message(STATUS "Unsigned DMG target: MacOSNotePP_dmg")
390-
message(STATUS "Shim headers: ${SHIM_INCLUDE_DIR}")
391-
message(STATUS "Scintilla: ${SCINTILLA_DIR}")
392-
message(STATUS "Lexilla: ${LEXILLA_DIR}")
331+
"-framework UniformTypeIdentifiers"
332+
"-framework CoreServices"
333+
)
334+
target_compile_options(MacOSNotePP PRIVATE
335+
-fobjc-arc
336+
-Wno-deprecated-declarations
337+
)
338+
add_custom_command(TARGET MacOSNotePP POST_BUILD
339+
COMMAND ${CMAKE_COMMAND} -E copy_if_different
340+
"${NPP_ROOT}/logo.png"
341+
"$<TARGET_FILE_DIR:MacOSNotePP>/logo.png"
342+
COMMENT "Copying logo.png for Dock icon"
343+
)
344+
345+
# ============================================================
346+
# Packaging: App bundle + unsigned DMG
347+
# ============================================================
348+
set(NPP_MACOS_DIST_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dist")
349+
set(NPP_MACOS_APP_BUNDLE "${NPP_MACOS_DIST_DIR}/MacNote++.app")
350+
set(NPP_MACOS_APP_CONTENTS "${NPP_MACOS_APP_BUNDLE}/Contents")
351+
set(NPP_MACOS_APP_MACOS "${NPP_MACOS_APP_CONTENTS}/MacOS")
352+
set(NPP_MACOS_APP_RESOURCES "${NPP_MACOS_APP_CONTENTS}/Resources")
353+
set(NPP_MACOS_DMG_ROOT "${NPP_MACOS_DIST_DIR}/dmg-root")
354+
set(NPP_MACOS_DMG_APP_BUNDLE "${NPP_MACOS_DMG_ROOT}/MacNote++.app")
355+
set(NPP_MACOS_UNSIGNED_DMG "${NPP_MACOS_DIST_DIR}/MacNote++-unsigned.dmg")
356+
set(NPP_MACOS_INFO_PLIST "${CMAKE_CURRENT_BINARY_DIR}/MacNote++-Info.plist")
357+
358+
configure_file(
359+
"${CMAKE_CURRENT_SOURCE_DIR}/platform/MacNoteInfo.plist.in"
360+
"${NPP_MACOS_INFO_PLIST}"
361+
@ONLY
362+
)
363+
364+
add_custom_target(MacOSNotePP_package
365+
DEPENDS MacOSNotePP
366+
COMMAND ${CMAKE_COMMAND} -E rm -rf "${NPP_MACOS_APP_BUNDLE}"
367+
COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_MACOS_APP_MACOS}"
368+
COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_MACOS_APP_RESOURCES}"
369+
COMMAND ${CMAKE_COMMAND} -E copy_if_different
370+
"$<TARGET_FILE:MacOSNotePP>"
371+
"${NPP_MACOS_APP_MACOS}/MacOSNotePP"
372+
COMMAND ${CMAKE_COMMAND} -E copy_if_different
373+
"${NPP_ROOT}/logo.png"
374+
"${NPP_MACOS_APP_MACOS}/logo.png"
375+
COMMAND ${CMAKE_COMMAND} -E copy_if_different
376+
"${NPP_ROOT}/logo.png"
377+
"${NPP_MACOS_APP_RESOURCES}/logo.png"
378+
COMMAND ${CMAKE_COMMAND} -E copy_if_different
379+
"${NPP_MACOS_INFO_PLIST}"
380+
"${NPP_MACOS_APP_CONTENTS}/Info.plist"
381+
COMMENT "Packaging MacNote++.app"
382+
)
383+
384+
add_custom_target(MacOSNotePP_dmg
385+
DEPENDS MacOSNotePP_package
386+
COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_MACOS_DMG_ROOT}"
387+
COMMAND ${CMAKE_COMMAND} -E rm -rf "${NPP_MACOS_DMG_APP_BUNDLE}"
388+
COMMAND ${CMAKE_COMMAND} -E copy_directory
389+
"${NPP_MACOS_APP_BUNDLE}"
390+
"${NPP_MACOS_DMG_APP_BUNDLE}"
391+
COMMAND ${CMAKE_COMMAND} -E rm -rf "${NPP_MACOS_DMG_ROOT}/Applications"
392+
COMMAND ${CMAKE_COMMAND} -E create_symlink
393+
"/Applications"
394+
"${NPP_MACOS_DMG_ROOT}/Applications"
395+
COMMAND ${CMAKE_COMMAND} -E rm -f "${NPP_MACOS_UNSIGNED_DMG}"
396+
COMMAND hdiutil create
397+
-volname "MacNote++"
398+
-srcfolder "${NPP_MACOS_DMG_ROOT}"
399+
-format UDZO
400+
-ov
401+
"${NPP_MACOS_UNSIGNED_DMG}"
402+
COMMENT "Building MacNote++-unsigned.dmg"
403+
)
404+
405+
message(STATUS "=== Notepad++ macOS Port ===")
406+
message(STATUS "Compatibility compile target: npp_macos_compile_test")
407+
message(STATUS "App target: MacOSNotePP")
408+
message(STATUS "Packaging target: MacOSNotePP_package")
409+
message(STATUS "Unsigned DMG target: MacOSNotePP_dmg")
410+
message(STATUS "Shim headers: ${SHIM_INCLUDE_DIR}")
411+
message(STATUS "Scintilla: ${SCINTILLA_DIR}")
412+
message(STATUS "Lexilla: ${LEXILLA_DIR}")

macos/platform/app_delegate.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// app_delegate.h — Application delegate and lifecycle
2+
// Part of the Notepad++ macOS port modular refactor.
3+
4+
#pragma once
5+
6+
#import <Cocoa/Cocoa.h>
7+
8+
@interface NppDropTargetView : NSView
9+
@end
10+
11+
@interface NppAppDelegate : NSObject <NSApplicationDelegate, NSWindowDelegate, NSSplitViewDelegate>
12+
- (void)performContextAction:(NSMenuItem*)sender;
13+
@end

0 commit comments

Comments
 (0)