Compare commits

..

No commits in common. "master" and "v0.2.0" have entirely different histories.

78 changed files with 1500 additions and 1997 deletions

View File

@ -1,38 +0,0 @@
# clang-format is fairly limited, and these rules are approximate:
# - array initializers can get terribly mangled with clang-format 12.0,
# - sometimes it still aligns with space characters,
# - struct name NL { NL ... NL } NL name; is unachievable.
BasedOnStyle: GNU
ColumnLimit: 80
IndentWidth: 4
TabWidth: 4
UseTab: ForContinuationAndIndentation
BreakBeforeBraces: Allman
SpaceAfterCStyleCast: true
AlignConsecutiveAssignments: true
AlignAfterOpenBracket: DontAlign
AlignEscapedNewlines: DontAlign
AlignOperands: DontAlign
AlignConsecutiveMacros: Consecutive
AllowAllArgumentsOnNextLine: false
AllowAllParametersOfDeclarationOnNextLine: false
IndentGotoLabels: false
Cpp11BracedListStyle: true
MaxEmptyLinesToKeep: 2
# IncludeCategories has some potential, but currently it breaks build.
# Note that the documentation says the value should be "Never".
SortIncludes: false
# Must be kept synchronized with gi18n.h and make-template.sh.
WhitespaceSensitiveMacros: ['_', 'Q_', 'N_', 'C_', 'NC_']
# This is a compromise, it generally works out aesthetically better.
BinPackArguments: false
# Unfortunately, this doesn't work for block comments, used in logdiag.
SpacesBeforeTrailingComments: 2
# logdiag-specific function body wrappers.
MacroBlockBegin: "LD_LUA_CAIRO_BEGIN"
MacroBlockEnd: "LD_LUA_CAIRO_END"

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
/build
/win32-depends
/liblogdiag/ld-marshal.[ch]
/CMakeLists.txt.user

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "vera++"]
path = vera++
url = https://bitbucket.org/verateam/vera.git

View File

@ -1,15 +1,23 @@
# The last version with Windows XP support is 3.13, we want to keep that
cmake_minimum_required (VERSION 3.10)
project (logdiag VERSION 0.3.0 DESCRIPTION "Schematic editor" LANGUAGES C)
project (logdiag C)
cmake_minimum_required (VERSION 2.8)
# Default to 2.8 behaviour
cmake_policy (VERSION 2.8)
# Options
option (OPTION_CLANG_TIDY "Enable use of clang-tidy" OFF)
option (OPTION_NOINSTALL "For developers only--work without installing" OFF)
option (OPTION_GTKDOC "For developers only--enable use of gtk-doc" OFF)
option (OPTION_USE_VERA "Use vera++ for source code style checks" OFF)
option (OPTION_NOINSTALL "Only for developers; work without installing" OFF)
option (BUILD_TESTING "Build tests" OFF)
# Project information
set (project_ID "name.janouch.${PROJECT_NAME}")
set (project_VERSION_MAJOR "0")
set (project_VERSION_MINOR "2")
set (project_VERSION_PATCH "0")
set (project_VERSION "${project_VERSION_MAJOR}")
set (project_VERSION "${project_VERSION}.${project_VERSION_MINOR}")
set (project_VERSION "${project_VERSION}.${project_VERSION_PATCH}")
set (project_URL "https://git.janouch.name/p/logdiag")
# For custom modules
@ -20,17 +28,23 @@ if (WIN32)
set (WIN32_DEPENDS_PATH ${PROJECT_SOURCE_DIR}/win32-depends)
list (APPEND CMAKE_PREFIX_PATH ${WIN32_DEPENDS_PATH})
list (APPEND CMAKE_INCLUDE_PATH ${WIN32_DEPENDS_PATH}/lib)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mms-bitfields")
list (APPEND CMAKE_C_FLAGS "-mms-bitfields")
if (CMAKE_CROSSCOMPILING)
list (APPEND CMAKE_FIND_ROOT_PATH ${WIN32_DEPENDS_PATH})
endif ()
endif (CMAKE_CROSSCOMPILING)
set (PKG_CONFIG_USE_CMAKE_PREFIX_PATH FALSE)
# Seems like there is a regression setting this to two paths in one,
# setting the path manually
set (ENV{PKG_CONFIG_PATH} "${WIN32_DEPENDS_PATH}/lib/pkgconfig")
endif ()
add_custom_target (win32-depends COMMAND ${CMAKE_COMMAND} -P
${PROJECT_SOURCE_DIR}/Win32Depends.cmake
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
add_custom_target (win32-depends-clean COMMAND ${CMAKE_COMMAND} -E
remove_directory ${WIN32_DEPENDS_PATH})
endif (WIN32)
# Generate icons
find_program (CONVERT_EXECUTABLE convert)
@ -41,7 +55,6 @@ if (CONVERT_EXECUTABLE AND NOT WIN32)
set (icon_svg ${icon_base}/scalable/apps/logdiag.svg)
set (icon_size_list 16x16 32x32 48x48)
# ImageMagick very oddly outperforms rsvg-convert with our specific SVG
set (icon_png_list)
set (icon_symbolic_list)
foreach (icon_size ${icon_size_list})
@ -58,37 +71,36 @@ if (CONVERT_EXECUTABLE AND NOT WIN32)
DEPENDS ${icon_svg} VERBATIM)
set_source_files_properties (${icon_symbolic}
PROPERTIES SYMBOLIC TRUE)
endforeach ()
endforeach (icon_size)
# Symbolic targets prevent the icons from being either cleaned,
# or pointlessly regenerated slightly differently
set (icon_ico ${PROJECT_SOURCE_DIR}/share/logdiag.ico)
add_custom_target (${PROJECT_NAME}_icons
DEPENDS ${icon_symbolic_list}
COMMAND ${CONVERT_EXECUTABLE} ${icon_png_list} ${icon_ico}
COMMENT "Generating logdiag.ico" VERBATIM)
endif ()
endif (CONVERT_EXECUTABLE AND NOT WIN32)
# Dependencies
find_package (PkgConfig REQUIRED)
pkg_check_modules (GTK3 REQUIRED gtk+-3.0 json-glib-1.0)
link_directories (${GTK3_LIBRARY_DIRS})
if (NOT WIN32)
pkg_search_module (Lua REQUIRED lua>=5.2
lua5.4 lua-5.4 lua5.3 lua-5.3 lua5.2 lua-5.2)
link_directories (${Lua_LIBRARY_DIRS})
else ()
pkg_search_module (Lua REQUIRED lua>=5.2 lua5.3 lua-5.3 lua5.2 lua-5.2)
else (NOT WIN32)
# For whatever reason this now seems to be required
set (LUA_INCLUDE_DIR "${WIN32_DEPENDS_PATH}/include")
# XXX: this seems to require CMake 3.0 ... include it in the project?
find_package (Lua REQUIRED)
if (LUA_VERSION_STRING VERSION_LESS "5.2")
message (FATAL_ERROR "Lua 5.2 not found")
endif ()
endif (LUA_VERSION_STRING VERSION_LESS "5.2")
set (Lua_LIBRARIES ${LUA_LIBRARIES})
set (Lua_INCLUDE_DIRS ${LUA_INCLUDE_DIR})
endif ()
endif (NOT WIN32)
# This actually fucks up MinGW cross-compilation if omitted
link_directories (${GTK3_LIBRARY_DIRS})
# Localization
find_package (Gettext REQUIRED)
@ -100,11 +112,15 @@ GETTEXT_CREATE_TRANSLATIONS (
foreach (file ${project_PO_FILES})
get_filename_component (translation "${file}" NAME_WE)
list (APPEND project_TRANSLATIONS "${translation}")
endforeach ()
endforeach (file)
# Documentation
find_package (GtkDoc 1.25)
set (project_DOC_DIR "${PROJECT_BINARY_DIR}/liblogdiag")
# Project source files
set (liblogdiag_SOURCES
${PROJECT_BINARY_DIR}/ld-marshal.c
liblogdiag/ld-marshal.c
liblogdiag/ld-types.c
liblogdiag/ld-undo-action.c
liblogdiag/ld-diagram.c
@ -121,9 +137,9 @@ set (liblogdiag_SOURCES
liblogdiag/ld-lua.c
liblogdiag/ld-lua-symbol.c)
set (liblogdiag_HEADERS
${PROJECT_BINARY_DIR}/ld-marshal.h
${PROJECT_BINARY_DIR}/config.h
liblogdiag/liblogdiag.h
liblogdiag/ld-marshal.h
liblogdiag/ld-types.h
liblogdiag/ld-undo-action.h
liblogdiag/ld-diagram.h
@ -147,93 +163,77 @@ set (logdiag_TESTS
diagram)
set (logdiag_SOURCES
${PROJECT_BINARY_DIR}/gresource.c
src/ld-window-main.c
src/logdiag.c)
set (logdiag_HEADERS
${liblogdiag_HEADERS}
src/ld-window-main.h)
# Resource compilation for Windows
# Resource compilation for MinGW
if (MINGW)
set (CMAKE_RC_COMPILER_INIT windres)
enable_language (RC)
set (CMAKE_RC_FLAGS "-O coff")
set (CMAKE_RC_COMPILE_OBJECT
"<CMAKE_RC_COMPILER> <FLAGS> <DEFINES> -o <OBJECT> <SOURCE>")
endif (MINGW)
if (WIN32)
# The file isn't scanned for dependencies, but they will only rarely change
list (APPEND logdiag_SOURCES share/logdiag.rc)
endif ()
set (logdiag_SOURCES
${logdiag_SOURCES}
share/logdiag.rc)
endif (WIN32)
# Generate a configure file
configure_file (${PROJECT_SOURCE_DIR}/config.h.in
${PROJECT_BINARY_DIR}/config.h)
include_directories (${PROJECT_BINARY_DIR})
# Generate marshallers
function (glib_genmarshal listfile prefix)
find_program (GLIB_GENMARSHAL_EXECUTABLE glib-genmarshal)
if (NOT GLIB_GENMARSHAL_EXECUTABLE)
message (FATAL_ERROR "glib-genmarshal not found")
endif ()
find_program (GLIB_GENMARSHAL_EXECUTABLE glib-genmarshal)
if (NOT GLIB_GENMARSHAL_EXECUTABLE)
message (FATAL_ERROR "glib-genmarshal not found")
endif (NOT GLIB_GENMARSHAL_EXECUTABLE)
get_filename_component (_basename "${listfile}" NAME_WE)
set (_command_base ${GLIB_GENMARSHAL_EXECUTABLE} --prefix ${prefix}
"${listfile}")
function (glib_genmarshal base prefix)
get_filename_component (base_path "${base}" PATH)
get_filename_component (base_name "${base}" NAME)
set (command_base ${GLIB_GENMARSHAL_EXECUTABLE}
--prefix ${prefix} "${base_name}.list")
add_custom_command (OUTPUT ${_basename}.c ${_basename}.h
COMMAND ${_command_base} --body > ${_basename}.c
COMMAND ${_command_base} --header > ${_basename}.h
DEPENDS "${listfile}"
COMMENT "Generating marshallers source files" VERBATIM)
endfunction ()
glib_genmarshal (${PROJECT_SOURCE_DIR}/liblogdiag/ld-marshal.list ld_marshal)
# Generate resources
function (glib_compile_resources xml target)
find_program (GLIB_COMPILE_RESOURCES_EXECUTABLE glib-compile-resources)
if (NOT GLIB_COMPILE_RESOURCES_EXECUTABLE)
message (FATAL_ERROR "glib-compile-resources not found")
endif ()
# glib-compile-resources reads paths relative to its working directory
get_filename_component (_xml_path "${xml}" PATH)
# On Windows, the final Makefile may contain:
# On Windows, the final makefile may contain:
# cd e:\abc && ...
# That won't actually change the directory. We have to do:
# cd e:\abc && e: && ...
set (_prefix)
if (WIN32 AND "${_xml_path}" MATCHES "^.:[/\\\\]")
string (SUBSTRING "${_xml_path}" 0 2 _xml_drive)
set (_prefix ${_xml_drive} &&)
endif ()
if (WIN32 AND "${base_path}" MATCHES "^.:[/\\\\]")
string (SUBSTRING "${base_path}" 0 2 base_drive)
set (command_base "${base_drive}" && "${command_base}")
endif (WIN32 AND "${base_path}" MATCHES "^.:[/\\\\]")
# VERBATIM would cause problems, so it is not used here
add_custom_command (OUTPUT ${target}
COMMAND ${_prefix} ${GLIB_COMPILE_RESOURCES_EXECUTABLE}
--generate-source --target ${target} "${xml}" DEPENDS "${xml}"
WORKING_DIRECTORY "${_xml_path}" COMMENT "Compiling resources")
# NOTE: VERBATIM would cause problems, so it is not used here
add_custom_command (OUTPUT ${base}.c
COMMAND ${command_base} --body > "${base_name}.c"
DEPENDS "${base}.list"
WORKING_DIRECTORY "${base_path}"
COMMENT "Generating marshallers source file")
add_custom_command (OUTPUT ${base}.h
COMMAND ${command_base} --header > "${base_name}.h"
DEPENDS "${base}.list"
WORKING_DIRECTORY "${base_path}"
COMMENT "Generating marshallers header file")
endfunction (glib_genmarshal)
execute_process (COMMAND ${GLIB_COMPILE_RESOURCES_EXECUTABLE}
--generate-dependencies "${xml}"
WORKING_DIRECTORY "${_xml_path}" OUTPUT_VARIABLE _deps)
string (REPLACE "\n" ";" _deps "${_deps}")
foreach (_dep ${_deps})
set_property (SOURCE "${target}"
APPEND PROPERTY OBJECT_DEPENDS "${_xml_path}/${_dep}")
endforeach ()
glib_genmarshal (${PROJECT_SOURCE_DIR}/liblogdiag/ld-marshal
ld_marshal)
configure_file ("${xml}" glib-compile-resources.stamp COPYONLY)
endfunction ()
glib_compile_resources (${PROJECT_SOURCE_DIR}/share/logdiag.gresource.xml
${PROJECT_BINARY_DIR}/gresource.c)
# Generate a configure file
add_definitions (-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_36)
add_definitions (-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_36)
configure_file (config.h.in ${PROJECT_BINARY_DIR}/config.h)
include_directories (${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR}
${GTK3_INCLUDE_DIRS} ${Lua_INCLUDE_DIRS})
include_directories (${PROJECT_SOURCE_DIR})
include_directories (${GTK3_INCLUDE_DIRS} ${Lua_INCLUDE_DIRS})
set (logdiag_LIBS ${GTK3_LIBRARIES} ${Lua_LIBRARIES} m)
if (WIN32)
find_package (Intl REQUIRED)
list (APPEND logdiag_LIBS ${Intl_LIBRARIES} shell32)
endif ()
find_package (LibIntl REQUIRED)
list (APPEND logdiag_LIBS ${LIBINTL_LIBRARIES})
endif (WIN32)
# Build the library
add_library (liblogdiag STATIC ${liblogdiag_SOURCES} ${liblogdiag_HEADERS})
@ -243,66 +243,27 @@ set_target_properties (liblogdiag PROPERTIES OUTPUT_NAME logdiag)
add_executable (logdiag WIN32 ${logdiag_SOURCES} ${logdiag_HEADERS})
target_link_libraries (logdiag liblogdiag ${logdiag_LIBS})
# GSettings
find_program (GLIB_COMPILE_SCHEMAS_EXECUTABLE glib-compile-schemas)
if (NOT GLIB_COMPILE_SCHEMAS_EXECUTABLE)
message (FATAL_ERROR "glib-compile-schemas not found")
endif ()
set (GSETTINGS_DIR "${PROJECT_SOURCE_DIR}/share")
set (GSETTINGS_SCHEMAS "${GSETTINGS_DIR}/${PROJECT_NAME}.gschema.xml")
if (OPTION_NOINSTALL)
set (GSETTINGS_COMPILED_SCHEMA "${PROJECT_BINARY_DIR}/gschemas.compiled")
add_custom_command (OUTPUT "${GSETTINGS_COMPILED_SCHEMA}"
COMMAND ${GLIB_COMPILE_SCHEMAS_EXECUTABLE}
"--targetdir=${PROJECT_BINARY_DIR}" "${GSETTINGS_DIR}"
DEPENDS "${GSETTINGS_SCHEMAS}"
COMMENT "Compiling GSettings schema files" VERBATIM)
add_custom_target (${PROJECT_NAME}-gschema ALL
DEPENDS "${GSETTINGS_COMPILED_SCHEMA}")
endif ()
# Testing
if (BUILD_TESTING)
enable_testing ()
add_test (NAME test-gschema-${PROJECT_NAME}
COMMAND ${GLIB_COMPILE_SCHEMAS_EXECUTABLE} --dry-run "${GSETTINGS_DIR}")
foreach (name ${logdiag_TESTS})
add_executable (test-${name} tests/${name}.c)
target_link_libraries (test-${name} liblogdiag ${logdiag_LIBS})
add_test (NAME test-${name} COMMAND test-${name})
list (APPEND logdiag_TEST_TARGETS test-${name})
endforeach ()
if (WIN32 AND NOT CMAKE_CROSSCOMPILING)
set_tests_properties (${logdiag_TEST_TARGETS}
PROPERTIES ENVIRONMENT "PATH=${WIN32_DEPENDS_PATH}/bin")
endif ()
endif ()
add_test (test-${name} test-${name})
endforeach (name)
endif (BUILD_TESTING)
# Generate documentation
if (OPTION_GTKDOC)
find_package (GtkDoc 1.25 REQUIRED)
set (project_DOC_DIR "${PROJECT_BINARY_DIR}/liblogdiag")
# Extracted LDFLAGS didn't contain -l in CMake 3.21.3 and gtk-doc 1.33.2,
# pass them explicitly and work around insanity; CMake still exits with
# an error and gtk-doc produces empty HTML documentation
string (REGEX REPLACE "(;)([^-])" "\\1-l\\2" xldflags "${logdiag_LIBS}")
set_target_properties (liblogdiag PROPERTIES LINK_LIBRARIES "")
# The "official" module wants an XML file I don't want to give it
file (WRITE ${PROJECT_BINARY_DIR}/liblogdiag-docs-dummy.xml "<book/>")
# XXX: not our bug but xml/gtkdocentities.ent cannot be passed
# XXX: this causes `make clean` to remove the entire build directory,
# because it marks CMAKE_CURRENT_BINARY_DIR as an output
if (GTKDOC_FOUND)
# FIXME: not our bug but xml/gtkdocentities.ent cannot be passed
target_link_libraries (liblogdiag ${logdiag_LIBS})
gtk_doc_add_module (liblogdiag
SOURCE ${PROJECT_SOURCE_DIR}/liblogdiag
SUFFIXES c h LDFLAGS "-l${xldflags}"
XML ${PROJECT_BINARY_DIR}/liblogdiag-docs-dummy.xml
SUFFIXES c h
# The "official" module wants an XML file I don't want to give it
XML ${PROJECT_BINARY_DIR}/liblogdiag/liblogdiag-docs.xml
LIBRARIES liblogdiag)
endif ()
@ -310,38 +271,68 @@ find_package (CppCheck)
GENERATE_CPPCHECK (SOURCES liblogdiag src tests ENABLE_IDS all
TARGET_NAME ${PROJECT_NAME}_cppcheck INCLUDES ${PROJECT_BINARY_DIR})
# Various clang-based diagnostics, loads of fake positives and spam
if (OPTION_CLANG_TIDY)
set (clang_tidy_checks
clang-analyzer-* bugprone-* misc-* readability-* performance-*
-bugprone-reserved-identifier # GObject
-performance-no-int-to-ptr # GObject
-bugprone-narrowing-conversions
-bugprone-macro-parentheses # too coarse-grained
-readability-braces-around-statements # fine by me
-readability-isolate-declaration # fine by me
-readability-magic-numbers # too coarse-grained
-misc-unused-parameters) # fine by me
if (OPTION_USE_VERA)
# Force this off, we don't need it
option (VERA_LUA "" OFF)
string (REPLACE ";" "," clang_tidy_checks "${clang_tidy_checks}")
set (clang_tidy_config "{
Checks: '${clang_tidy_checks}',
CheckOptions: [{
key: readability-function-cognitive-complexity.Threshold,
value: '30'
}]}")
# Make it build within the same build tree
get_directory_property (backup_includes INCLUDE_DIRECTORIES)
set_directory_properties (PROPERTIES INCLUDE_DIRECTORIES "")
set (backup_source_dir "${CMAKE_SOURCE_DIR}")
set (CMAKE_SOURCE_DIR "${CMAKE_SOURCE_DIR}/vera++")
string (REPLACE "\n" " " clang_tidy_config "${clang_tidy_config}")
add_subdirectory ("vera++")
set (CMAKE_EXPORT_COMPILE_COMMANDS ON)
set (clang_tidy_sources ${liblogdiag_SOURCES} ${logdiag_SOURCES})
add_custom_target (${PROJECT_NAME}_clang_tidy
COMMAND clang-tidy --quiet -p ${PROJECT_BINARY_DIR}
"--config=${clang_tidy_config}" ${clang_tidy_sources}
| sh -c "cat 1>&2"
DEPENDS ${clang_tidy_sources} VERBATIM
USES_TERMINAL WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
endif ()
set_directory_properties (PROPERTIES INCLUDE_DIRECTORIES "${backup_includes}")
set (CMAKE_SOURCE_DIR "${backup_source_dir}")
# Check the sources
# XXX: maybe do it per source file and not all at once
set (vera_srcs ${liblogdiag_SOURCES} ${logdiag_SOURCES} ${logdiag_HEADERS})
set (vera_output ${PROJECT_BINARY_DIR}/vera.log)
add_custom_command (OUTPUT ${vera_output}
COMMAND vera
-R F001 -R L001 -R T001 -R T004 -R T005 -R T006
-R T007 -R T009 -R T010 -R T015 -R T017 -R T018
-R L004 -P max-line-length=80
-R L005 -P max-consecutive-empty-lines=2
--root ${CMAKE_SOURCE_DIR}/vera++
--std-report=-
--std-report=${vera_output}
--warning -s
${vera_srcs}
DEPENDS ${vera_srcs}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Checking style for logdiag")
add_custom_target (logdiag_vera ALL DEPENDS ${vera_output})
endif (OPTION_USE_VERA)
# GSettings
find_program (GLIB_COMPILE_SCHEMAS_EXECUTABLE glib-compile-schemas)
if (NOT GLIB_COMPILE_SCHEMAS_EXECUTABLE)
message (FATAL_ERROR "glib-compile-schemas not found")
endif (NOT GLIB_COMPILE_SCHEMAS_EXECUTABLE)
set (GSETTINGS_DIR "${PROJECT_SOURCE_DIR}/share")
set (GSETTINGS_SCHEMAS "${GSETTINGS_DIR}/org.logdiag.gschema.xml")
add_custom_target (${PROJECT_NAME}_gschema_check
COMMAND ${GLIB_COMPILE_SCHEMAS_EXECUTABLE} --dry-run "${GSETTINGS_DIR}"
DEPENDS "${GSETTINGS_SCHEMAS}"
COMMENT "Checking GSettings schema files" VERBATIM)
if (OPTION_NOINSTALL)
set (GSETTINGS_COMPILED_SCHEMA "${PROJECT_BINARY_DIR}/gschemas.compiled")
add_custom_command (OUTPUT "${GSETTINGS_COMPILED_SCHEMA}"
COMMAND ${GLIB_COMPILE_SCHEMAS_EXECUTABLE}
"--targetdir=${PROJECT_BINARY_DIR}" "${GSETTINGS_DIR}"
DEPENDS "${GSETTINGS_SCHEMAS}"
COMMENT "Compiling GSettings schema files" VERBATIM)
add_custom_target (${PROJECT_NAME}_gschema ALL
DEPENDS "${GSETTINGS_COMPILED_SCHEMA}")
endif (OPTION_NOINSTALL)
# Installation
if (WIN32)
@ -349,22 +340,19 @@ if (WIN32)
install (DIRECTORY
${WIN32_DEPENDS_PATH}/bin/
DESTINATION .
FILES_MATCHING PATTERN "*.dll" PATTERN "gspawn-*-helper.exe")
FILES_MATCHING PATTERN "*.dll"
PATTERN "libgettext*" EXCLUDE)
install (DIRECTORY
${WIN32_DEPENDS_PATH}/etc/
DESTINATION etc)
install (DIRECTORY
${WIN32_DEPENDS_PATH}/lib/gdk-pixbuf-2.0
DESTINATION lib
FILES_MATCHING PATTERN "*" PATTERN "*.a" EXCLUDE)
DESTINATION lib)
install (DIRECTORY
${WIN32_DEPENDS_PATH}/share/glib-2.0/schemas
DESTINATION share/glib-2.0
FILES_MATCHING PATTERN "org.gtk.Settings.*")
install (DIRECTORY
${WIN32_DEPENDS_PATH}/share/icons/Adwaita
DESTINATION share/icons OPTIONAL)
install (FILES
${WIN32_DEPENDS_PATH}/share/icons/hicolor/index.theme
DESTINATION share/icons/hicolor)
@ -379,11 +367,9 @@ if (WIN32)
install (DIRECTORY
${WIN32_DEPENDS_PATH}/share/locale/${translation}
DESTINATION share/locale)
endif ()
endforeach ()
install (SCRIPT Win32Cleanup.cmake)
else ()
endif (translation_found GREATER -1)
endforeach (locale)
else (WIN32)
install (TARGETS logdiag DESTINATION bin)
install (FILES share/logdiag.desktop DESTINATION share/applications)
install (FILES share/logdiag.xml DESTINATION share/mime/packages)
@ -392,56 +378,59 @@ else ()
# install (DIRECTORY "${project_DOC_DIR}/html/"
# DESTINATION share/gtk-doc/html/${PROJECT_NAME})
install (FILES LICENSE NEWS DESTINATION share/doc/${PROJECT_NAME})
endif ()
endif (WIN32)
install (DIRECTORY docs/user-guide DESTINATION share/doc/${PROJECT_NAME})
install (DIRECTORY share/library DESTINATION share/${PROJECT_NAME})
install (FILES ${GSETTINGS_SCHEMAS} DESTINATION share/glib-2.0/schemas
RENAME "${project_ID}.gschema.xml")
install (CODE " # DESTDIR is not in use on Windows (WIN32 is only native here!)
install (FILES ${GSETTINGS_SCHEMAS}
DESTINATION share/glib-2.0/schemas)
install (CODE " # DESTDIR is not in use on Windows
if (WIN32 OR \"\$ENV{DESTDIR}\" STREQUAL \"\")
execute_process (COMMAND \"${GLIB_COMPILE_SCHEMAS_EXECUTABLE}\"
execute_process (COMMAND ${GLIB_COMPILE_SCHEMAS_EXECUTABLE}
\"\${CMAKE_INSTALL_PREFIX}/share/glib-2.0/schemas\")
endif ()")
endif (WIN32 OR \"\$ENV{DESTDIR}\" STREQUAL \"\")")
install (DIRECTORY share/gui share/library
DESTINATION share/${PROJECT_NAME})
# CPack
set (CPACK_PACKAGE_VENDOR "Premysl Eric Janouch")
set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch <p@janouch.name>")
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Schematic editor")
set (CPACK_PACKAGE_VENDOR "Premysl Janouch")
set (CPACK_PACKAGE_CONTACT "Přemysl Janouch <p@janouch.name>")
set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
set (CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
set (CPACK_PACKAGE_VERSION_MAJOR ${project_VERSION_MAJOR})
set (CPACK_PACKAGE_VERSION_MINOR ${project_VERSION_MINOR})
set (CPACK_PACKAGE_VERSION_PATCH ${project_VERSION_PATCH})
if (WIN32)
set (CPACK_GENERATOR "NSIS;ZIP")
else ()
else (WIN32)
set (CPACK_GENERATOR "TGZ;ZIP")
set (CPACK_SET_DESTDIR TRUE)
endif ()
endif (WIN32)
set (CPACK_PACKAGE_FILE_NAME
"${PROJECT_NAME}-${PROJECT_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
set (CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME} ${CPACK_PACKAGE_VERSION}")
# XXX: It is still possible to install multiple copies, making commands collide.
set (CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${PROJECT_NAME}")
"${PROJECT_NAME}-${project_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
set (CPACK_PACKAGE_INSTALL_DIRECTORY
"${PROJECT_NAME} ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}")
# FIXME: It is possible to install multiple copies. Everything screws up then.
set (CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/share\\\\header.bmp")
set (CPACK_NSIS_INSTALLED_ICON_NAME "logdiag.exe")
set (CPACK_NSIS_URL_INFO_ABOUT "${project_URL}")
set (CPACK_NSIS_HELP_LINK "${project_URL}")
# Or CPACK_NSIS_EXECUTABLES_DIRECTORY needs to be changed from "bin"
set (CPACK_NSIS_MENU_LINKS "logdiag.exe" ${PROJECT_NAME})
set (CPACK_NSIS_EXTRA_INSTALL_COMMANDS [[
set (CPACK_NSIS_CREATE_ICONS_EXTRA "
CreateShortCut '\$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\logdiag.lnk' '\$INSTDIR\\\\logdiag.exe'")
set (CPACK_NSIS_DELETE_ICONS_EXTRA "
Delete '\$SMPROGRAMS\\\\$MUI_TEMP\\\\logdiag.lnk'")
set (CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
WriteRegStr HKCR '.ldd' '' 'logdiag.Diagram'
WriteRegStr HKCR 'logdiag.Diagram' '' 'logdiag Diagram'
WriteRegStr HKCR 'logdiag.Diagram\\shell\\open\\command' '' '\"$INSTDIR\\logdiag.exe\" \"%1\"'
WriteRegStr HKCR 'logdiag.Diagram\\shell\\edit\\command' '' '\"$INSTDIR\\logdiag.exe\" \"%1\"'
System::Call 'shell32::SHChangeNotify(i,i,i,i) (0x08000000, 0x1000, 0, 0)'
]])
set (CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS [[
WriteRegStr HKCR 'logdiag.Diagram\\\\shell\\\\open\\\\command' '' '\\\"\$INSTDIR\\\\logdiag.exe\\\" \\\"%1\\\"'
WriteRegStr HKCR 'logdiag.Diagram\\\\shell\\\\edit\\\\command' '' '\\\"\$INSTDIR\\\\logdiag.exe\\\" \\\"%1\\\"'
System::Call 'shell32::SHChangeNotify(i,i,i,i) (0x08000000, 0x1000, 0, 0)'")
set (CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "
DeleteRegKey HKCR 'logdiag.Diagram'
System::Call 'shell32::SHChangeNotify(i,i,i,i) (0x08000000, 0x1000, 0, 0)'
]])
System::Call 'shell32::SHChangeNotify(i,i,i,i) (0x08000000, 0x1000, 0, 0)'")
string (REPLACE "https://" "https:\\\\\\\\" project_URL_NSIS "${project_URL}")
set (CPACK_NSIS_URL_INFO_ABOUT "${project_URL_NSIS}")
set (CPACK_DEBIAN_PACKAGE_DEPENDS
"libgtk3.0-0 (>= 3.8), libjson-glib-1.0-0 (>= 0.10.4), liblua5.2-0")
@ -452,11 +441,12 @@ set (CPACK_DEBIAN_PACKAGE_HOMEPAGE "${project_URL}")
set (CPACK_RPM_PACKAGE_REQUIRES "gtk3 >= 3.8, json-glib >= 0.10.4, lua = 5.2")
set (CPACK_RPM_PACKAGE_GROUP "Graphics")
set (CPACK_RPM_PACKAGE_LICENSE "0BSD")
set (CPACK_RPM_PACKAGE_LICENSE "ISC")
set (CPACK_RPM_PACKAGE_URL "${project_URL}")
set (CPACK_SOURCE_GENERATOR "TGZ;ZIP")
set (CPACK_SOURCE_IGNORE_FILES "/\\\\.git;/build;/CMakeLists.txt.user;/win32-depends")
set (CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}")
set (CPACK_SOURCE_IGNORE_FILES "/\\\\.git;/build;/CMakeLists.txt.user;/win32-depends;/liblogdiag/ld-marshal.[ch]")
set (CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${project_VERSION}")
include (CPack)

View File

@ -1,4 +1,4 @@
Copyright (c) 2010 - 2021, Přemysl Eric Janouch <p@janouch.name>
Copyright (c) 2010 - 2018, Přemysl Janouch <p@janouch.name>
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.

21
NEWS
View File

@ -1,20 +1,3 @@
Version 0.3.0
- Added basic print functionality (lines may have the wrong width).
- Fine-tuned rendering of a few symbols.
- Bound toggling of the grid to the # key, following Inkscape.
- Ensured all opened files are added to the list of recent files.
- View position is reset when opening files.
- Made the user guide available from the Help menu.
- The website link in the About dialog now opens on Windows XP.
- Put the project's license in the About dialog.
- Made Windows builds considerably slimmer.
Version 0.2.1
- Set up grounds for 64-bit Windows builds using the latest GTK+ 3.
- Made the Windows installer ask to uninstall previous versions first.
- Worked around a mysterious recent GTK+ bug with symbol dragging.
- Put a default filename in the save dialog, ensuring a file extension.
Version 0.2.0
- Added a library pane instead of a toolbar.
- Added scrolling using the middle mouse button.
@ -29,8 +12,10 @@ Version 0.2.0
- Symbol categories are also loaded from user-specific directories.
- Show current zoom in the statusbar.
- Ported to GTK+ 3 and Lua 5.2.
- This is the last version supporting Windows XP (we use an outdated GTK+
bundle, support for this operating system has been dropped in version 3.18).
- Various unimportant fixes and changes.
- Known issues: Windows XP looks ugly with the classic theme, little we can do.
- Known issues: Windows XP looks ugly now and there's little we can do.
Version 0.1.2
- Updated symbol library.

View File

@ -3,25 +3,20 @@ logdiag
'logdiag' is a simple multiplatform schematic editor written in GTK+.
This software has never really been finished, and is no longer being worked on,
although I strive to keep it building on Windows XP and elsewhere.
This software is considered to be of alpha quality and isn't recommended for
regular usage.
image::docs/user-guide/logdiag-en.png[align="center"]
Packages
--------
Regular releases are sporadic. git master should be stable enough.
You can get a package with the latest development version using Arch Linux's
https://aur.archlinux.org/packages/logdiag-git[AUR],
or as a https://git.janouch.name/p/nixexprs[Nix derivation].
Windows installers can be downloaded from
https://git.janouch.name/p/logdiag/releases[the Releases page on Gitea].
Regular releases are sporadic. git master should be stable enough. You can get
a package with the latest development version from Archlinux's AUR.
Requirements
------------
Runtime dependencies: GTK+ >= 3.8, json-glib >= 0.10.4, lua >= 5.2 +
Build dependencies: CMake >= 3.10
Build dependencies: CMake >= 2.8
Build from source on Unix-like systems
--------------------------------------
@ -38,81 +33,74 @@ application to be installed. The default is _/usr/local_.
$ cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
Now you have two basic choices of installing the application:
Now you have two basic choices of installing the application.
Using _make install_
~~~~~~~~~~~~~~~~~~~~
1. Using _make install_:
+
# make install
2. Using _cpack_:
+
Using _cpack_
~~~~~~~~~~~~~
You have to choose a package format understood by your system package manager.
CMake offers DEB and RPM.
+
After _cpack_ finishes making the package, install this file.
+
$ cpack -G DEB
$ fakeroot cpack -G DEB
# dpkg -i logdiag-version-system-arch.deb
Leave out the fakeroot for CMake >= 2.8.9, it's been fixed since.
Build from source on Windows
----------------------------
_Note that using the current method we're stuck with GTK+ 3.8.2, which works
worse on Windows 10, but better on XP and under WINE._
_Note that with the current method we're stuck with GTK+ 3.10.4 at best._
First, install CMake and MinGW (mingw32-base-bin, mingw32-gettext-dev).
Ensure they're both in your system path. If you want to build an installation
package, also install NSIS. If you want to build within a path containing
spaces, https://gitlab.kitware.com/cmake/cmake/-/issues/22396[fix] your CMake's
FindPkgConfig.cmake module to say:
separate_arguments(_pkgconfig_invoke_result UNIX_COMMAND "${_pkgconfig_invoke_result}")
First install CMake >= 3.1 and MinGW. Add both to your system path. If you want
to build an installation package, also install NSIS.
Run the following command in the directory with source files to automatically
fetch and set up all dependencies:
fetch and setup all dependencies (contact me if the script becomes obsolete,
it's easy to fix but I usually update it only just a short while before
releasing a new version in order to resolve compatibility issues):
> cmake -P Win32Depends.cmake
Note that on Windows XP, CMake will fail to download those files, even with
https://emailarchitect.net/easendmail/sdk/html/object_tls12.htm[updates].
You will have to run the script externally.
Reserve a directory for an out-of-source build and let CMake prepare the build:
Reserve a directory for an out-of-source build:
> mkdir build
> cd build
Let CMake prepare the build:
> cmake .. -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release
Now you can generate a package with CPack. You may choose between:
1. An NSIS-based installation package:
+
> cpack -G NSIS
2. A portable ZIP package:
+
> cpack -G ZIP
By default, that is if you specify no generator, both packages are built.
Cross-compilation for Windows
-----------------------------
The procedure is almost exactly the same as before, including the requirements.
Just install MinGW-w64 and let automation take care of the rest.
$ cmake -P Win32Depends.cmake
$ mkdir build
$ cd build
$ cmake -DCMAKE_TOOLCHAIN_FILE=../ToolchainCrossMinGWW64.cmake \
-DCMAKE_BUILD_TYPE=Release ..
$ cmake .. \
-DCMAKE_TOOLCHAIN_FILE=../ToolchainDebianMinGWW64.cmake \
-DCMAKE_BUILD_TYPE=Release
$ cpack
Alternatively, for an unnecessarily bloated MSYS2-based 64-bit build:
$ sh -e Win64Depends.sh
$ cmake -DCMAKE_TOOLCHAIN_FILE=ToolchainCrossWin64.cmake \
-DCMAKE_BUILD_TYPE=Release -B build
$ cmake --build build -- package
Contributing and Support
------------------------
Use https://git.janouch.name/p/logdiag to report any bugs, request features,

View File

@ -1,15 +0,0 @@
set (CMAKE_SYSTEM_NAME "Windows")
set (CMAKE_SYSTEM_PROCESSOR "x86_64")
set (CMAKE_C_COMPILER "x86_64-w64-mingw32-gcc")
set (CMAKE_CXX_COMPILER "x86_64-w64-mingw32-g++")
set (CMAKE_RC_COMPILER "x86_64-w64-mingw32-windres")
# Remember to set WINEPATH for library dependencies
set (CMAKE_CROSSCOMPILING_EMULATOR "wine64")
set (CMAKE_FIND_ROOT_PATH "/usr/x86_64-w64-mingw32")
set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

View File

@ -5,11 +5,12 @@ set (CMAKE_C_COMPILER "i586-mingw32msvc-gcc")
set (CMAKE_CXX_COMPILER "i586-mingw32msvc-g++")
set (CMAKE_RC_COMPILER "i586-mingw32msvc-windres")
# Remember to set WINEPATH for library dependencies
set (CMAKE_CROSSCOMPILING_EMULATOR "wine")
# Not needed to crosscompile an installation package
#set (CMAKE_CROSSCOMPILING_EMULATOR "wine")
set (CMAKE_FIND_ROOT_PATH "/usr/i586-mingw32msvc")
set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

View File

@ -5,11 +5,12 @@ set (CMAKE_C_COMPILER "i686-w64-mingw32-gcc")
set (CMAKE_CXX_COMPILER "i686-w64-mingw32-g++")
set (CMAKE_RC_COMPILER "i686-w64-mingw32-windres")
# Remember to set WINEPATH for library dependencies
set (CMAKE_CROSSCOMPILING_EMULATOR "wine")
# Not needed to crosscompile an installation package
#set (CMAKE_CROSSCOMPILING_EMULATOR "wine")
set (CMAKE_FIND_ROOT_PATH "/usr/i686-w64-mingw32")
set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

View File

@ -1,37 +0,0 @@
# To be run from cmake_install.cmake, eradicates all unreferenced libraries.
# CMake 3.9.6 has a parsing bug with ENCODING UTF-8.
cmake_minimum_required (VERSION 3.10)
# CPack runs this almost without any CMake variables at all
# (cmStateSnapshot::SetDefaultDefinitions(), CMAKE_INSTALL_PREFIX, [DESTDIR])
set (installdir "${CMAKE_INSTALL_PREFIX}")
if (NOT installdir OR installdir MATCHES "^/usr(/|$)")
return ()
endif ()
# The function is recursive and CMake has tragic scoping behaviour;
# environment variables are truly global there, in the absence of a cache
unset (ENV{seen})
function (expand path)
set (seen $ENV{seen})
if (path IN_LIST seen OR NOT EXISTS "${path}")
return ()
endif ()
set (ENV{seen} "$ENV{seen};${path}")
file (STRINGS "${path}" strings REGEX "[.][Dd][Ll][Ll]$" ENCODING UTF-8)
foreach (string ${strings})
string (REGEX MATCH "[-.+_a-zA-Z0-9]+$" word "${string}")
expand ("${installdir}/${word}")
endforeach ()
endfunction ()
file (GLOB roots LIST_DIRECTORIES false "${installdir}/*.[Ee][Xx][Ee]"
"${installdir}/lib/gdk-pixbuf-2.0/2.10.0/loaders/*.[Dd][Ll][Ll]")
foreach (binary ${roots})
expand ("${binary}")
endforeach ()
file (GLOB libraries LIST_DIRECTORIES false "${installdir}/*.[Dd][Ll][Ll]")
list (REMOVE_ITEM libraries $ENV{seen})
file (REMOVE ${libraries})

View File

@ -1,11 +1,14 @@
# Usage: cmake -P Win32Depends.cmake
# Only CMake 3.1+ supports XZ archives, not sure when 7z support comes from
cmake_minimum_required (VERSION 3.9)
# Only CMake 3.1+ supports XZ archives and 7z doesn't also untar automatically
cmake_minimum_required (VERSION 3.1)
# Directories
set (working_dir ${CMAKE_CURRENT_BINARY_DIR}/win32-depends)
set (pkg_dir ${working_dir}/packages)
set (tools_dir ${working_dir}/tools)
set (sevenzip_executable ${tools_dir}/7za)
set (tmp_dir ${working_dir}/tmp)
file (MAKE_DIRECTORY ${working_dir})
file (MAKE_DIRECTORY ${pkg_dir})
@ -15,27 +18,34 @@ file (GLOB files ${working_dir}/*)
list (REMOVE_ITEM files ${pkg_dir})
if (files)
file (REMOVE_RECURSE ${files})
endif ()
endif (files)
# Packages
set (pkg_list "geany" "winlibs" "mingw_lua")
set (pkg_list "7za" "gtk" "gtkalt" "winlibs" "mingw_lua")
# https://sourceforge.net/projects/urlget/files
# /GTK%2B%203%20binary%20for%20Windows/GTK%2B%203.16.6/
# contains a binary bundle that may be more or less simply transplanted over,
# due to ABI compatibility, however something is wrong with icons,
# and it looks alien on Windows XP (use themes) for close to no improvement.
set (pkg_geany_root "https://download.geany.org/contrib/gtk")
set (pkg_geany_urls "${pkg_geany_root}/gtk+-bundle_3.8.2-20131001_win32.zip")
set (pkg_geany_md5 "3f9b159207edf44937f209b4a5e6bb63")
set (pkg_7za_root "http://sourceforge.net/projects/sevenzip/files")
set (pkg_7za_urls "${pkg_7za_root}/7-Zip/9.20/7za920.zip")
set (pkg_7za_md5 "2fac454a90ae96021f4ffc607d4c00f8")
set (pkg_gtk_root "http://ftp.gnome.org/pub/gnome/binaries/win32")
set (pkg_gtk_urls "${pkg_gtk_root}/dependencies/gettext-tools-0.17.zip")
set (pkg_gtk_md5 "09baff956ebd1c391c7f71e9bd768edd")
set (pkg_gtkalt_root "http://win32builder.gnome.org")
set (pkg_gtkalt_urls "${pkg_gtkalt_root}/gtk+-bundle_3.8.2-20131001_win32.zip")
set (pkg_gtkalt_md5 "3f9b159207edf44937f209b4a5e6bb63")
# Doesn't work, no gtk+-3.0.pc file present
#set (pkg_gtkalt_urls "${pkg_gtkalt_root}/gtk+-bundle_3.10.4-20131202_win32.zip")
#set (pkg_gtkalt_md5 "520bed70943974efdaeea2a1dbe48f84")
# Too old
#set (pkg_gtkalt_urls "${pkg_gtkalt_root}/gtk+-bundle_3.6.4-20130921_win32.zip")
#set (pkg_gtkalt_md5 "9bcb87d917982a6e52a69141ade8bd56")
set (pkg_winlibs_root "http://sourceforge.net/projects/winlibs/files")
set (pkg_winlibs_urls "${pkg_winlibs_root}/GTK+/libjson-glib-1.0-1-mingw32.7z")
set (pkg_winlibs_md5 "f06e42c5998dae5fb6245fecc96a403e")
# With luabinaries MinGW-W64 builds the .dll/.a need to be moved to bin/lib
# manually, and note that CMake 3.10.0 FindLua.cmake can't find Lua 5.4;
# in any case there is no pkg-config file
set (pkg_mingw_lua_root "http://sourceforge.net/projects/mingw/files/MinGW/Extension")
set (pkg_mingw_lua_urls
"${pkg_mingw_lua_root}/lua/lua-5.2.0-1/lua-5.2.0-1-mingw32-dll-52.tar.xz"
@ -56,16 +66,14 @@ foreach (pkg_set ${pkg_list})
message (WARNING "MD5 checksum missing for ${basename}")
set (pkg_md5_sum)
set (pkg_md5_param)
else ()
else (NOT pkg_md5)
list (GET pkg_md5 0 pkg_md5_sum)
list (REMOVE_AT pkg_md5 0)
set (pkg_md5_param EXPECTED_MD5 ${pkg_md5_sum})
endif ()
endif (NOT pkg_md5)
if (NOT EXISTS ${filename})
message (STATUS "Downloading ${url}...")
# TODO: on Windows XP, we can't download https://curl.se/windows/
# but it would be somewhat nice to be able to detect it in PATH
file (DOWNLOAD ${url} ${filename} STATUS status ${pkg_md5_param})
list (GET status 0 status_errno)
@ -73,34 +81,81 @@ foreach (pkg_set ${pkg_list})
if (status_errno)
file (REMOVE ${filename})
message (FATAL_ERROR "Download failed: ${status_msg}")
endif ()
endif (status_errno)
elseif (pkg_md5_sum)
execute_process (COMMAND ${CMAKE_COMMAND} -E md5sum ${filename}
OUTPUT_VARIABLE output)
if (NOT output MATCHES "^${pkg_md5_sum}")
message (FATAL_ERROR "MD5 mismatch for ${basename}")
endif ()
endif ()
endforeach ()
endforeach ()
endif (NOT output MATCHES "^${pkg_md5_sum}")
endif (NOT EXISTS ${filename})
endforeach (url)
endforeach (pkg_set)
# Stage 2: extract the rest of packages
if (NOT WIN32)
unset (sevenzip_executable)
find_program (sevenzip_executable 7za)
if (NOT sevenzip_executable)
message (FATAL_ERROR "Could not find 7za (part of p7zip)")
endif (NOT sevenzip_executable)
endif (NOT WIN32)
# Stage 2: setup 7za first
file (MAKE_DIRECTORY ${tmp_dir})
foreach (url ${pkg_7za_urls})
get_filename_component (filename ${url} NAME)
message (STATUS "Extracting ${filename}...")
set (filename ${pkg_dir}/${filename})
execute_process (COMMAND ${CMAKE_COMMAND} -E tar xf ${filename}
WORKING_DIRECTORY ${tmp_dir}
RESULT_VARIABLE status)
if (status)
message (FATAL_ERROR "Extraction failed: ${status}")
endif (status)
endforeach (url)
file (MAKE_DIRECTORY ${tools_dir})
file (COPY ${tmp_dir}/7za.exe DESTINATION ${tools_dir})
file (REMOVE_RECURSE ${tmp_dir})
list (REMOVE_ITEM pkg_list "7za")
# Stage 3: extract the rest of packages
foreach (pkg_set ${pkg_list})
foreach (url ${pkg_${pkg_set}_urls})
get_filename_component (filename ${url} NAME)
message (STATUS "Extracting ${filename}...")
if (filename MATCHES "\\.7z$")
set (extract_command ${sevenzip_executable} x)
set (quiet OUTPUT_QUIET)
else (filename MATCHES "\\.7z$")
set (extract_command ${CMAKE_COMMAND} -E tar xf)
set (quiet)
endif (filename MATCHES "\\.7z$")
set (filename ${pkg_dir}/${filename})
execute_process (COMMAND ${CMAKE_COMMAND} -E tar xf ${filename}
WORKING_DIRECTORY ${working_dir}
RESULT_VARIABLE status)
if (pkg_${pkg_set}_strip)
file (MAKE_DIRECTORY ${tmp_dir})
execute_process (COMMAND ${extract_command} ${filename}
WORKING_DIRECTORY ${tmp_dir}
RESULT_VARIABLE status ${quiet})
file (COPY ${tmp_dir}/${pkg_${pkg_set}_strip}/
DESTINATION ${working_dir})
file (REMOVE_RECURSE ${tmp_dir})
else (pkg_${pkg_set}_strip)
execute_process (COMMAND ${extract_command} ${filename}
WORKING_DIRECTORY ${working_dir}
RESULT_VARIABLE status ${quiet})
endif (pkg_${pkg_set}_strip)
if (status)
message (FATAL_ERROR "Extraction failed: ${status}")
endif ()
endforeach ()
endforeach ()
endif (status)
endforeach (url)
endforeach (pkg_set)
# Stage 3: final touches
# Stage 4: final touches
# We have to fix the prefix path as it is completely wrong everywhere
file (GLOB files ${working_dir}/lib/pkgconfig/*.pc)
foreach (file ${files})
@ -109,4 +164,4 @@ foreach (file ${files})
string (REGEX REPLACE "prefix=[^\r\n]*(.*)" "prefix=${working_dir}\\1"
file_content_fixed "${file_content}")
file (WRITE ${file} "${file_content_fixed}")
endforeach ()
endforeach (file)

View File

@ -1,76 +0,0 @@
#!/bin/sh -e
# Win64Depends.sh: download dependencies from MSYS2 for cross-compilation.
# Dependencies: AWK, sed, sha256sum, cURL, bsdtar, wine64
repository=https://repo.msys2.org/mingw/mingw64/
status() {
echo "$(tput bold)-- $*$(tput sgr0)"
}
dbsync() {
status Fetching repository DB
[ -f db.tsv ] || curl -# "$repository/mingw64.db" | bsdtar -xOf- | awk '
function flush() { print f["%NAME%"] f["%FILENAME%"] f["%DEPENDS%"] }
NR > 1 && $0 == "%FILENAME%" { flush(); for (i in f) delete f[i] }
!/^[^%]/ { field = $0; next } { f[field] = f[field] $0 "\t" }
field == "%SHA256SUM%" { path = "*packages/" f["%FILENAME%"]
sub(/\t$/, "", path); print $0, path > "db.sums" } END { flush() }
' > db.tsv
}
fetch() {
status Resolving "$@"
mkdir -p packages
awk -F'\t' 'function get(name, i, a) {
if (visited[name]++ || !(name in filenames)) return
print filenames[name]; split(deps[name], a); for (i in a) get(a[i])
} BEGIN { while ((getline < "db.tsv") > 0) {
filenames[$1] = $2; deps[$1] = ""; for (i = 3; i <= NF; i++) {
gsub(/[<=>].*/, "", $i); deps[$1] = deps[$1] $i FS }
} for (i = 0; i < ARGC; i++) get(ARGV[i]) }' "$@" | tee db.want | \
while IFS= read -r name
do
status Fetching "$name"
[ -f "packages/$name" ] || curl -#o "packages/$name" "$repository/$name"
done
}
verify() {
status Verifying checksums
sha256sum --ignore-missing --quiet -c db.sums
}
extract() {
status Extracting packages
for subdir in *
do [ -d "$subdir" -a "$subdir" != packages ] && rm -rf -- "$subdir"
done
while IFS= read -r name
do bsdtar -xf "packages/$name" --strip-components 1
done < db.want
}
configure() {
status Configuring packages
glib-compile-schemas share/glib-2.0/schemas
wine64 bin/gdk-pixbuf-query-loaders.exe \
> lib/gdk-pixbuf-2.0/2.10.0/loaders.cache
# pkgconf has a command line option for this, but CMake can't pass it.
sed -i "s|^prefix=/mingw64|prefix=$(pwd)|" \
share/pkgconfig/*.pc lib/pkgconfig/*.pc
}
mkdir -p win32-depends
cd win32-depends
dbsync
fetch mingw-w64-x86_64-gtk3 mingw-w64-x86_64-lua \
mingw-w64-x86_64-libwinpthread-git # Because we don't do "provides"?
verify
extract
configure
status Success
# XXX: Why is this override needed to run some GLib-based things under wine64?
unset XDG_DATA_DIRS

View File

@ -44,7 +44,7 @@
#=============================================================================
# Copyright 2011 Johannes Wienke <jwienke at techfak dot uni-bielefeld dot de>
# Copyright 2012 Přemysl Eric Janouch <p at janouch dot name>
# Copyright 2012 Přemysl Janouch <p at janouch dot name>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without

99
cmake/FindGettext.cmake Normal file
View File

@ -0,0 +1,99 @@
# - Find GNU gettext tools
# This module looks for the GNU gettext tools. This module defines the
# following values:
# GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool.
# GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool.
# GETTEXT_FOUND: True if gettext has been found.
#
# Additionally it provides the following macros:
# GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ... fileN )
# This will create a target "${PROJECT_NAME}_translations" which will
# convert the given input po files into the binary output mo file.
# If the ALL option is used, the translations will also be created
# when building the default target.
#=============================================================================
# Copyright 2007-2009 Kitware, Inc.
# Copyright 2010-2011 Přemysl Janouch
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the Kitware nor the names of contributors may be
# used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
# OF SUCH DAMAGE.
#=============================================================================
find_program (GETTEXT_MSGMERGE_EXECUTABLE msgmerge)
find_program (GETTEXT_MSGFMT_EXECUTABLE msgfmt)
macro (GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg)
# Make it a real variable, so we can modify it here.
set (_firstPoFile "${_firstPoFileArg}")
set (_gmoFiles)
get_filename_component (_potBasename ${_potFile} NAME_WE)
get_filename_component (_absPotFile ${_potFile} ABSOLUTE)
set (_addToAll)
if (${_firstPoFile} STREQUAL "ALL")
set (_addToAll "ALL")
set (_firstPoFile)
endif (${_firstPoFile} STREQUAL "ALL")
foreach (_currentPoFile ${_firstPoFile} ${ARGN})
get_filename_component (_absFile ${_currentPoFile} ABSOLUTE)
get_filename_component (_abs_PATH ${_absFile} PATH)
get_filename_component (_lang ${_absFile} NAME_WE)
set (_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo)
# msgmerge versions older than 0.11 don't actually support --update
# and --backup, let's try to workaround that (tested on 0.10.40).
execute_process (COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} -V
OUTPUT_VARIABLE _msgmergeVersion)
string (REGEX MATCH "0[.][0-9]+" _msgmergeVersion ${_msgmergeVersion})
if ("${_msgmergeVersion}" MATCHES "[.]10|[.][0-9]")
set (_msgmergeParams --quiet -s
${_absFile} -o ${_absFile} ${_absPotFile})
else ("${_msgmergeVersion}" MATCHES "[.]10|[.][0-9]")
set (_msgmergeParams --quiet --update --backup=none -s
${_absFile} ${_absPotFile})
endif ("${_msgmergeVersion}" MATCHES "[.]10|[.][0-9]")
add_custom_command (
OUTPUT ${_gmoFile}
COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} ${_msgmergeParams}
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_absFile}
DEPENDS ${_absPotFile} ${_absFile}
)
install (FILES ${_gmoFile} DESTINATION
share/locale/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo)
set (_gmoFiles ${_gmoFiles} ${_gmoFile})
endforeach (_currentPoFile)
add_custom_target (${PROJECT_NAME}_translations ${_addToAll}
DEPENDS ${_gmoFiles})
endmacro (GETTEXT_CREATE_TRANSLATIONS)
include (FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS (Gettext DEFAULT_MSG
GETTEXT_MSGMERGE_EXECUTABLE GETTEXT_MSGFMT_EXECUTABLE)

38
cmake/FindLibIntl.cmake Normal file
View File

@ -0,0 +1,38 @@
# - Find libintl
# This module looks for libintl.
# This module defines the following values:
# LIBINTL_FOUND
# LIBINTL_LIBRARIES
#=============================================================================
# Copyright Přemysl Janouch 2011
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
# OF SUCH DAMAGE.
#=============================================================================
find_library (LIBINTL_LIBRARIES intl)
include (FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS (LibIntl DEFAULT_MSG LIBINTL_LIBRARIES)
mark_as_advanced (LIBINTL_LIBRARIES)

View File

@ -22,7 +22,7 @@
#
#=============================================================================
# Copyright 2010 Přemysl Eric Janouch
# Copyright Přemysl Janouch 2010
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without

View File

@ -9,22 +9,18 @@
#define __CONFIG_H__
#define PROJECT_NAME "${PROJECT_NAME}"
#define PROJECT_VERSION "${PROJECT_VERSION}"
#define PROJECT_ID "${project_ID}"
#define PROJECT_VERSION "${project_VERSION}"
#define PROJECT_URL "${project_URL}"
#cmakedefine OPTION_NOINSTALL
#ifdef OPTION_NOINSTALL
/* For developers. */
#define PROJECT_DOC_DIR "${CMAKE_SOURCE_DIR}/docs/"
#define PROJECT_SHARE_DIR "${CMAKE_SOURCE_DIR}/share/"
#define PROJECT_GSETTINGS_DIR "${CMAKE_BINARY_DIR}"
#elif defined (_WIN32)
#define PROJECT_DOC_DIR "share/doc/${PROJECT_NAME}/"
#define PROJECT_SHARE_DIR "share/${PROJECT_NAME}/"
#else
#define PROJECT_DOC_DIR "${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}/"
#define PROJECT_SHARE_DIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/"
#endif

View File

@ -1,7 +0,0 @@
body { max-width: 50em; margin: 0 auto 4em auto; padding: 0 2em;
font-family: sans-serif; } h1, h2, h3 { font-weight: normal; }
h1 { font-size: 2.5em; } h2 { font-size: 2em; } h3 { font-size: 1.33em; }
h2 { padding-top: .67em; border-top: 1px solid silver; }
p { line-height: 1.5; } .figure { text-align: center; } img { max-width: 100%; }
q { font-style: normal; } .details { border-bottom: 1px solid silver; }
.details br { display: none; } .details br + span:before { content: " — "; }

View File

@ -0,0 +1,148 @@
// TODO: nakonfigurovat v CMake asciidoctor-pdf, je potřeba pár `gem install`
// https://github.com/asciidoctor/asciidoctor-pdf/blob/master/README.adoc
// https://github.com/asciidoctor/asciidoctor-pdf/blob/master/docs/theming-guide.adoc
logdiag: Průvodce uživatele
===========================
Přemysl Janouch <p@janouch.name>
v0.2.0, 2018-06-27
:toc: left
:toc-title: Obsah
:sectnums:
:warning-caption: VAROVÁNÍ
:xrefstyle: short
:figure-caption: Obrázek
image::logdiag-cs.png[]
<<<
Úvod
----
Tento dokument vás má za účel provést po aplikaci a pomoci vám se v ní
zorientovat. Popis úkonů se přednostně vztahuje na operační systém Microsoft
Windows, do jisté míry je však platný i pro jiné operační systémy.
Získání aplikace
----------------
Nejnovější verzi aplikace je možné stáhnout na následující webové adrese:
https://git.janouch.name/p/logdiag.
[[gitea-download]]
.Nabídka pro stahování na stráncách projektu
image::gitea.png[]
Až se ocitnete na webu, vyhledejte v záhlaví záložku s nápisem ``Releases'' a
klepněte na ni. Zobrazí se přehled vydání a pod hlavičkami ``Downloads''
související soubory ke stažení. Instalační soubor pro Microsoft Windows nese
název ve stylu ``logdiag-__verze__-Windows-x86.exe''.
Instalace
---------
Proces instalace je velmi přímočarý. Po úvodní obrazovce je vyžadován souhlas s
licencí. Pokud nerozumíte anglicky, její stručné shrnutí zní, že aplikaci smíte
v nezměněné formě zcela volně používat a redistribuovat, ale nejsou vám
poskytovány žádné záruky. Následuje výběr složky, do které chcete aplikaci
nainstalovat, a složky pro umístění ve Start menu. V případě, že nenastala žádná
náhlá chyba, už jen stačí potvrdit úspěšnou instalaci.
WARNING: Pokud aplikaci instalujete do složky, kde se nachází již existující
instalace, mohou nastat potíže. Ačkoliv je to možné, nepokoušejte se z těch
samých příčin instalovat ani více kopií vedle sebe. Nejdříve stávající instalaci
odstraňte, například pomocí zástupce umístěného ve Start menu.
Operace s objekty
-----------------
////
TODO: zkusit restrukturalizovat na:
4. Operace s objekty
4.1 Základní operace
4.1.1 Výběr
4.1.2 Přesun
4.1.3 Odstranění
4.2 Značky
4.2.1 Vložení
4.2.2 Otáčení
4.3 Spojení
4.3.1 Tvorba
////
Každý diagram je tvořen z objektů, a s těmi se sdružují dále popsané operace.
Budete-li chtít momentálně prováděnou operaci zrušit, můžete tak obvykle učinit
stiskem klávesy Escape.
Výběr objektů
~~~~~~~~~~~~~
Jednotlivé objekty můžete vybírat levým kliknutím myší. Ty se v reakci na to
vyznačí červenou barvou. Chcete-li vybrat objektů více, držte během klikání
stisknutou klávesu Shift.
// XXX: nelze zarovnat obrázek na střed zároveň s caption
[[select-objects]]
.Výběr objektů v oblasti
image::select-objects.png[]
Alternativně můžete táhnout myší z volné oblasti diagramu do prostoru, viz
<<select-objects>>. Vyberou se objekty obsažené ve vytvořeném obdélníku. Výběr
lze zrušit klepnutím na prázdné místo.
Přesun objektů
~~~~~~~~~~~~~~
Přesun objektů se provede tažením objektů myší na požadované místo. Pokud jsou
tyto objekty součástí výběru, přesune se celý výběr. Ten lze též přesouvat
pomocí kurzorových kláves.
Odstranění objektů
~~~~~~~~~~~~~~~~~~
Objekty odstraníte stisknutím klávesy Delete, případně z menu aplikace.
Vložení značky
~~~~~~~~~~~~~~
_Značky_ představují nejdůležitější druh objektů. Do diagramu je vložíte výběrem
z nabídky značek umístěné po levé straně hlavního okna aplikace a přetažením
myší do diagramu na požadované umístění.
Otáčení značek
~~~~~~~~~~~~~~
Otočit značku vloženou do diagramu můžete přes pravé tlačítko myši.
Propojení terminálů
~~~~~~~~~~~~~~~~~~~
_Terminálem_ se nazývá bod určený pro tvorbu spojení mezi značkami nebo jinými
spojeními. Abyste z něj spojení vyvedli, nejdříve na něj najeďte kurzorem myši
tak, aby se viditelně vyznačil kroužkem. Pak stiskněte levé tlačítko myši a
přetáhněte kurzor myši na místo, kde chcete, aby spojení končilo.
// XXX: nelze sloučit do jedné figure
[[create-connection]]
.Propojení terminálů dvou značek
image:create-connection-begin.png[]
&nbsp;...&nbsp;
image:create-connection-end.png[]
Časté problémy
--------------
Nelze otevřít uložený diagram
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Při ukládání se ujistěte, že zadaný název souboru obsahuje příponu ``.ldd''. V
opačném případě se nezobrazí v dialogu pro otevření diagramu. Pokud jste nějaký
soubor již bez přípony uložili, napravíte to dodatečným přidáním přípony k jeho
názvu.
Jak můžu diagram vytisknout?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Současná verze aplikace není schopná přímo tisknout. Pro vytištění vytvořeného
diagramu můžete klávesou PrintScreen sejmout snímek obrazovky, vložit jej
například do aplikace Malování, oříznout požadovanou část a vytisknout ji z
tohoto grafického editoru.
Schází mi popisky
~~~~~~~~~~~~~~~~~
Obdobně jako v předchozím případě tato funkcionalita zatím neexistuje, ale je
možné tento nedostatek obejít přes běžný grafický editor.

View File

@ -1,137 +0,0 @@
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<title>logdiag: Průvodce uživatele</title>
<link rel="stylesheet" href="stylesheet.css">
<style>
q:lang(cs):before { content: "„"; }
q:lang(cs):after { content: "“"; }
</style>
</head>
<body>
<h1>logdiag: Průvodce uživatele</h1>
<p class="details">
<span id="author">Přemysl Eric Janouch</span><br>
<span id="email"><a href="mailto:p@janouch.name">p@janouch.name</a></span><br>
<span id="revnumber">verze 0.3.0,</span>
<span id="revdate">2021-10-28</span>
<p class="figure"><img src="logdiag-cs.png" alt="Okno programu logdiag">
<h2>Úvod</h2>
<p>Tento dokument vás má za účel provést po aplikaci a pomoci vám se v ní
zorientovat. Popis úkonů se přednostně vztahuje na operační systém Microsoft
Windows, do jisté míry je však platný i pro jiné operační systémy.
<h2>Získání aplikace</h2>
<p>Nejnovější verzi aplikace je možné stáhnout na následující webové adrese:
<a href="https://git.janouch.name/p/logdiag">https://git.janouch.name/p/logdiag</a>.
<p class="figure"><img src="gitea.png" alt="Gitea">
<br>Obrázek 1: Nabídka pro stahování na stránkách projektu
<p>Až se ocitnete na webu, vyhledejte v záhlaví záložku s nápisem
<q>Releases</q> a klepněte na ni. Zobrazí se přehled vydání a pod hlavičkami
<q>Downloads</q> související soubory ke stažení. Instalační soubor pro Microsoft
Windows nese název ve stylu <q>logdiag-<i>verze</i>-Windows-x86.exe</q>.
<h2>Instalace</h2>
<p>Proces instalace je velmi přímočarý. Po úvodní obrazovce je vyžadován souhlas
s licencí. Pokud nerozumíte anglicky, její stručné shrnutí zní, že aplikaci
smíte v nezměněné formě zcela volně používat a redistribuovat, ale nejsou vám
poskytovány žádné záruky. Následuje výběr složky, do které chcete aplikaci
nainstalovat, a složky pro umístění ve Start menu. V případě, že nenastala žádná
náhlá chyba, už jen stačí potvrdit úspěšnou instalaci.
<p><b>Pozor</b>: Pokud aplikaci instalujete do složky, kde se nachází již
existující instalace, mohou nastat potíže. Ačkoliv je to možné, nepokoušejte se
z těch samých příčin instalovat ani více kopií vedle sebe. Nejdříve stávající
instalaci odstraňte, například pomocí zástupce umístěného ve Start menu.
<h2>Operace s objekty</h2>
<p>Každý diagram je tvořen z objektů, a s těmi se sdružují dále popsané operace.
Budete-li chtít momentálně prováděnou operaci zrušit, můžete tak obvykle učinit
stiskem klávesy Escape.
<!-- TODO: zkusit restrukturalizovat na:
Operace s objekty
Základní operace
Výběr
Přesun
Odstranění
Značky
Vložení
Otáčení
Spojení
Tvorba
-->
<h3>Výběr objektů</h3>
<p>Jednotlivé objekty můžete vybírat levým kliknutím myší. Ty se v reakci na to
vyznačí červenou barvou. Chcete-li vybrat objektů více, držte během klikání
stisknutou klávesu Shift.
<p class="figure" id="select-objects">
<img src="select-objects.png" alt="Výběr objektů">
<br>Obrázek 2: Výběr objektů v oblasti
<p>Alternativně můžete táhnout myší z volné oblasti diagramu do prostoru, viz
<a href="#select-objects">Obrázek 2</a>. Vyberou se objekty obsažené
ve vytvořeném obdélníku. Výběr lze zrušit klepnutím na prázdné místo.
<h3>Přesun objektů</h3>
<p>Přesun objektů se provede tažením objektů myší na požadované místo. Pokud
jsou tyto objekty součástí výběru, přesune se celý výběr. Ten lze též přesouvat
pomocí kurzorových kláves.
<h3>Odstranění objektů</h3>
<p>Objekty odstraníte stisknutím klávesy Delete, případně z menu aplikace.
<h3>Vložení značky</h3>
<p><i>Značky</i> představují nejdůležitější druh objektů. Do diagramu je vložíte
výběrem z nabídky značek umístěné po levé straně hlavního okna aplikace
a přetažením myší do diagramu na požadované umístění.
<h3>Otáčení značek</h3>
<p>Otočit značku vloženou do diagramu můžete přes pravé tlačítko myši.
<h3>Propojení terminálů</h3>
<p><i>Terminálem</i> se nazývá bod určený pro tvorbu spojení mezi značkami nebo
jinými spojeními. Abyste z něj spojení vyvedli, nejdříve na něj najeďte kurzorem
myši tak, aby se viditelně vyznačil kroužkem. Pak stiskněte levé tlačítko myši
a přetáhněte kurzor myši na místo, kde chcete, aby spojení končilo.
<p class="figure" id="create-connection">
<img src="create-connection-begin.png" alt="Začátek operace" align="center">
&nbsp;&#8230;&nbsp;
<img src="create-connection-end.png" alt="Konec operace" align="center">
<br>Obrázek 3: Propojení terminálů dvou značek
<h2>Časté problémy</h2>
<h3>Nelze otevřít uložený diagram</h3>
<p>Při ukládání se ujistěte, že zadaný název souboru obsahuje příponu
<q>.ldd</q>. V opačném případě se nezobrazí v dialogu pro otevření diagramu.
Pokud jste nějaký soubor již bez přípony uložili, napravíte to dodatečným
přidáním přípony k jeho názvu.
<h3>Schází mi popisky</h3>
<p>Tato funkcionalita zatím neexistuje, ale je možné tento nedostatek obejít
buď sejmutím snímku obrazovky klávesou PrintScreen a jeho vložením například
do aplikace Malování, nebo obdobně doplněním vašich textů do <q>vytištěného</q>
PDF souboru.
<script>
var toc = '', all = document.querySelectorAll('h2')
for (var i = 0; i < all.length; i++) {
var name = all[i].innerHTML.replace(/[^0-9a-z]/ig, '-')
toc += '<li><p><a href="#' + name + '">' + all[i].innerHTML + '</a></li>'
all[i].id = name
all[i].innerHTML = (i + 1) + '. ' + all[i].innerHTML
}
all[0].insertAdjacentHTML('beforebegin',
'<h2>Obsah</h2><ol>' + toc + '</ol>')
</script>

View File

@ -0,0 +1,146 @@
// TODO: nakonfigurovat v CMake asciidoctor-pdf, je potřeba pár `gem install`
// https://github.com/asciidoctor/asciidoctor-pdf/blob/master/README.adoc
// https://github.com/asciidoctor/asciidoctor-pdf/blob/master/docs/theming-guide.adoc
logdiag: User Guide
===================
Přemysl Janouch <p@janouch.name>
v0.2.0, 2018-06-27
:toc: left
:sectnums:
:xrefstyle: short
image::logdiag-en.png[]
<<<
Introduction
------------
This document will guide you through the application and help to familiarize you
with it. The description of tasks mainly targets the Microsoft Windows
operating system, though it's also valid for other operating systems to
a certain extent.
Getting the application
-----------------------
Download the newest version of the application at the following web address:
https://git.janouch.name/p/logdiag.
[[gitea-download]]
.The download menu on the project site
image::gitea.png[]
While on the web, look for a tab entitled ``Releases'' and click on it. A list
of versions will appear with files for download listed under ``Downloads''
headings. The installation file for Microsoft Windows is named in the style of
``logdiag-__version__-Windows-x86.exe''.
Installation
------------
The installation process is quite straight-forward. After the initial screen a
license agreement is required. Next, choose a folder in which to install the
application and another one for placement in the Start menu. So long as no
unexpected errors have occurred, all that's left is confirming a successful
installation.
WARNING: If the application is installed into a folder where a previous
installation is already located, problems may arise. Although it is possible to
do so, don't try to install multiple copies parallely either, for the same
reasons. Remove the current installation first, for example by using the
shortcut located in the Start menu.
Operations with objects
-----------------------
////
TODO: zkusit restrukturalizovat na:
4. Operace s objekty
4.1 Základní operace
4.1.1 Výběr
4.1.2 Přesun
4.1.3 Odstranění
4.2 Značky
4.2.1 Vložení
4.2.2 Otáčení
4.3 Spojení
4.3.1 Tvorba
////
Each diagram consists of objects, and these are accompanied by the operations
described below. To cancel any current operation, press the Escape key.
Selecting objects
~~~~~~~~~~~~~~~~~
Select single objects by left-clicking on them. They will get highlighted with
red color in reaction to this. To select multiple objects, hold the Shift key
while clicking.
// XXX: nelze zarovnat obrázek na střed zároveň s caption
[[select-objects]]
.Selecting objects inside an area
image::select-objects.png[]
Alternatively drag the mouse from free space within the diagram into the area,
see <<select-objects>>. Objects contained in this rectangle will be
selected. The selection may later be dismissed by just clicking into free space.
Moving objects
~~~~~~~~~~~~~~
Moving of objects is done by dragging them with the mouse onto the desired
place. If these objects form a part of the current selection, the whole
selection is moved. The selection may also be moved using cursor keys.
Removing objects
~~~~~~~~~~~~~~~~
Remove objects either by pressing the Delete key or from the application menu.
Inserting symbols
~~~~~~~~~~~~~~~~~
_Symbols_ constitute the most important kind of objects. Insert them into the
diagram by choosing one from the symbol menu located on the left side of the
main application window and dragging it onto the diagram where you want the
symbol to be placed.
Rotating symbols
~~~~~~~~~~~~~~~~
Rotate a symbol inserted into the diagram by right-clicking on it.
Connecting terminals
~~~~~~~~~~~~~~~~~~~~
A point intended for creation of connections between symbols or other
connections is called a _terminal_. To lead a connection out of it, first
hover it with the mouse pointer, so it gets visibly highlighted with a circle.
Then press the left mouse button and drag the pointer onto the place where you
want the connection to end.
// XXX: nelze sloučit do jedné figure
[[create-connection]]
.Interconnecting terminals of two symbols
image:create-connection-begin.png[]
&nbsp;...&nbsp;
image:create-connection-end.png[]
Frequent problems
-----------------
Can't open a saved diagram
~~~~~~~~~~~~~~~~~~~~~~~~~~
When saving, ensure that the filename you've typed in contains the ``.ldd''
suffix. If not, it won't show up in the dialog for opening diagrams. In case
you've already saved a file without an extension, you may fix this situation by
adding the suffix to its name.
How do I print a diagram?
~~~~~~~~~~~~~~~~~~~~~~~~~
The current version of application is not able to print directly. To print out a
created diagram, you may use the PrintScreen key to capture a screenshot, then
insert it to, for example, Paint, and print it from inside the graphics editor.
I miss labels
~~~~~~~~~~~~~
Similarly to the previous case, this functionality doesn't exist yet, but it is
possible to get around this limitation using a graphics editor.

View File

@ -1,129 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>logdiag: User Guide</title>
<link rel="stylesheet" href="stylesheet.css">
<style>
q:lang(en):before { content: ""; }
q:lang(en):after { content: ""; }
</style>
</head>
<body>
<h1>logdiag: User Guide</h1>
<p class="details">
<span id="author">Přemysl Eric Janouch</span><br>
<span id="email"><a href="mailto:p@janouch.name">p@janouch.name</a></span><br>
<span id="revnumber">version 0.3.0,</span>
<span id="revdate">2021-10-28</span>
<p class="figure"><img src="logdiag-en.png" alt="logdiag program window">
<h2>Introduction</h2>
<p>This document will guide you through the application and help to familiarize
you with it. The description of tasks mainly targets the Microsoft Windows
operating system, though its also valid for other operating systems to
a certain extent.
<h2>Getting the application</h2>
<p>Download the newest version of the application at the following web address:
<a href="https://git.janouch.name/p/logdiag">https://git.janouch.name/p/logdiag</a>.
<p class="figure"><img src="gitea.png" alt="Gitea">
<br>Figure 1: The download menu on the project site
<p>While on the web, look for a tab entitled <q>Releases</q> and click on it.
A list of versions will appear with files for download listed under
<q>Downloads</q> headings. The installation file for Microsoft Windows is named
in the style of <q>logdiag-<i>version</i>-Windows-x86.exe</q>.
<h2>Installation</h2>
<p>The installation process is quite straight-forward. After the initial screen
a license agreement is required. Next, choose a folder in which to install
the application and another one for placement in the Start menu. So long as
no unexpected errors have occurred, all thats left is confirming a successful
installation.
<p><b>Warning</b>: If the application is installed into a folder where
a previous installation is already located, problems may arise. Although it is
possible to do so, dont try to install multiple copies parallely either, for
the same reasons. Remove the current installation first, for example by using
the shortcut located in the Start menu.
<h2>Operations with objects</h2>
<p>Each diagram consists of objects, and these are accompanied by the operations
described below. To cancel any current operation, press the Escape key.
<!-- TODO: see the Czech version -->
<h3>Selecting objects</h3>
<p>Select single objects by left-clicking on them. They will get highlighted
with red color in reaction to this. To select multiple objects, hold the Shift
key while clicking.
<p class="figure" id="select-objects">
<img src="select-objects.png" alt="select objects">
<br>Figure 2: Selecting objects inside an area
<p>Alternatively drag the mouse from free space within the diagram into
the area, see <a href="#select-objects">Figure 2</a>. Objects contained in this
rectangle will be selected. The selection may later be dismissed by just
clicking into free space.
<h3>Moving objects</h3>
<p>Moving of objects is done by dragging them with the mouse onto the desired
place. If these objects form a part of the current selection, the whole
selection is moved. The selection may also be moved using cursor keys.
<h3>Removing objects</h3>
<p>Remove objects either by pressing the Delete key or from the application
menu.
<h3>Inserting symbols</h3>
<p><i>Symbols</i> constitute the most important kind of objects. Insert them
into the diagram by choosing one from the symbol menu located on the left side
of the main application window and dragging it onto the diagram where you want
the symbol to be placed.
<h3>Rotating symbols</h3>
<p>Rotate a symbol inserted into the diagram by right-clicking on it.
<h3>Connecting terminals</h3>
<p>A point intended for creation of connections between symbols or other
connections is called a <i>terminal</i>. To lead a connection out of it, first
hover it with the mouse pointer, so it gets visibly highlighted with a circle.
Then press the left mouse button and drag the pointer onto the place where you
want the connection to end.
<p class="figure" id="create-connection">
<img src="create-connection-begin.png" alt="Start of operation" align="center">
&nbsp;&#8230;&nbsp;
<img src="create-connection-end.png" alt="End of operation" align="center">
<br>Figure 3: Interconnecting terminals of two symbols
<h2>Frequent problems</h2>
<h3>Cant open a saved diagram</h3>
<p>When saving, ensure that the filename youve typed in contains the
<q>.ldd</q> suffix. If not, it wont show up in the dialog for opening diagrams.
In case youve already saved a file without an extension, you may fix this
situation by adding the suffix to its name.
<h3>I miss labels</h3>
<p>This functionality doesn't exist yet, but it is possible to get around this
limitation either by using the PrintScreen key to capture a screenshot
and inserting it to, for example, Paint, or similarly by adding your texts
to a <q>printed</q> PDF file.
<script>
var toc = '', all = document.querySelectorAll('h2')
for (var i = 0; i < all.length; i++) {
var name = all[i].innerHTML.replace(/[^0-9a-z]/ig, '-')
toc += '<li><p><a href="#' + name + '">' + all[i].innerHTML + '</a></li>'
all[i].id = name
all[i].innerHTML = (i + 1) + '. ' + all[i].innerHTML
}
all[0].insertAdjacentHTML('beforebegin',
'<h2>Table of Contents</h2><ol>' + toc + '</ol>')
</script>

View File

@ -2,7 +2,7 @@
* ld-category-symbol-view.c
*
* This file is a part of logdiag.
* Copyright 2012, 2015 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2012
*
* See the file LICENSE for licensing information.
*
@ -47,7 +47,6 @@ SymbolData;
* @path: path to the category within the library.
* @layout: (element-type SymbolData *): current layout of symbols.
* @preselected: currently preselected symbol.
* @dragged: currently dragged symbol.
*/
struct _LdCategorySymbolViewPrivate
{
@ -55,7 +54,6 @@ struct _LdCategorySymbolViewPrivate
gchar *path;
GSList *layout;
SymbolData *preselected;
SymbolData *dragged;
};
enum
@ -182,7 +180,6 @@ layout_destroy (LdCategorySymbolView *self)
g_slist_free (self->priv->layout);
self->priv->layout = NULL;
self->priv->preselected = NULL;
self->priv->dragged = NULL;
}
static GSList *
@ -353,10 +350,7 @@ on_draw (GtkWidget *widget, cairo_t *cr)
return FALSE;
context = gtk_widget_get_style_context (widget);
// XXX: alternatively, we could use gtk_style_context_lookup_color()
// with hardcoded colour names ("theme_*_color")--this is cleaner,
// and unlike GtkStyle doesn't cause deprecation warnings
// FIXME: there have to be better means (though I can't find them)
gtk_style_context_add_class (context, "gtkstyle-fallback");
gtk_style_context_get_background_color (context,
@ -456,19 +450,19 @@ on_leave_notify (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)
}
static void
on_drag_data_get (GtkWidget *widget, GdkDragContext *ctx,
GtkSelectionData *selection_data, guint target_type, guint time,
gpointer user_data)
on_drag_data_get
(GtkWidget *widget, GdkDragContext *ctx, GtkSelectionData *selection_data,
guint target_type, guint time, gpointer user_data)
{
LdCategorySymbolView *self;
self = LD_CATEGORY_SYMBOL_VIEW (widget);
g_return_if_fail (self->priv->dragged != NULL);
g_return_if_fail (self->priv->preselected != NULL);
gtk_selection_data_set (selection_data,
gtk_selection_data_get_target (selection_data),
8, (guchar *) self->priv->dragged->path,
strlen (self->priv->dragged->path));
8, (guchar *) self->priv->preselected->path,
strlen (self->priv->preselected->path));
}
static void
@ -480,9 +474,6 @@ on_drag_begin (GtkWidget *widget, GdkDragContext *ctx, gpointer user_data)
self = LD_CATEGORY_SYMBOL_VIEW (widget);
g_return_if_fail (self->priv->preselected != NULL);
/* Working around a mysterious bug where we /sometimes/ get deselected. */
self->priv->dragged = self->priv->preselected;
/* Some of the larger previews didn't work, and we have to get rid of
* the icon later when we're hovering above LdDiagramView anyway. */
pbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, 1, 1);
@ -494,11 +485,7 @@ on_drag_begin (GtkWidget *widget, GdkDragContext *ctx, gpointer user_data)
static void
on_drag_end (GtkWidget *widget, GdkDragContext *ctx, gpointer user_data)
{
LdCategorySymbolView *self;
self = LD_CATEGORY_SYMBOL_VIEW (widget);
symbol_deselect (self);
self->priv->dragged = NULL;
symbol_deselect (LD_CATEGORY_SYMBOL_VIEW (widget));
}
static void

View File

@ -2,7 +2,7 @@
* ld-category-symbol-view.h
*
* This file is a part of logdiag.
* Copyright 2012 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2012
*
* See the file LICENSE for licensing information.
*
@ -15,22 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_CATEGORY_SYMBOL_VIEW (ld_category_symbol_view_get_type ())
#define LD_CATEGORY_SYMBOL_VIEW(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
LD_TYPE_CATEGORY_SYMBOL_VIEW, \
LdCategorySymbolView))
#define LD_CATEGORY_SYMBOL_VIEW_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
LD_TYPE_CATEGORY_SYMBOL_VIEW, \
LdCategorySymbolViewClass))
#define LD_IS_CATEGORY_SYMBOL_VIEW(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_CATEGORY_SYMBOL_VIEW))
#define LD_IS_CATEGORY_SYMBOL_VIEW_CLASS(klass) \
(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_CATEGORY_SYMBOL_VIEW))
#define LD_CATEGORY_SYMBOL_VIEW_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
LD_CATEGORY_SYMBOL_VIEW, \
LdCategorySymbolViewClass))
#define LD_CATEGORY_SYMBOL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LD_TYPE_CATEGORY_SYMBOL_VIEW, LdCategorySymbolView))
#define LD_CATEGORY_SYMBOL_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LD_TYPE_CATEGORY_SYMBOL_VIEW, LdCategorySymbolViewClass))
#define LD_IS_CATEGORY_SYMBOL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LD_TYPE_CATEGORY_SYMBOL_VIEW))
#define LD_IS_CATEGORY_SYMBOL_VIEW_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LD_TYPE_CATEGORY_SYMBOL_VIEW))
#define LD_CATEGORY_SYMBOL_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LD_CATEGORY_SYMBOL_VIEW, LdCategorySymbolViewClass))
typedef struct _LdCategorySymbolView LdCategorySymbolView;
typedef struct _LdCategorySymbolViewPrivate LdCategorySymbolViewPrivate;

View File

@ -2,7 +2,7 @@
* ld-category-tree-view.c
*
* This file is a part of logdiag.
* Copyright 2011, 2012 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2011, 2012
*
* See the file LICENSE for licensing information.
*
@ -58,7 +58,7 @@ ld_category_view_init (LdCategoryViewInterface *iface)
G_DEFINE_TYPE_WITH_CODE (LdCategoryTreeView,
ld_category_tree_view, GTK_TYPE_BOX,
G_IMPLEMENT_INTERFACE (LD_TYPE_CATEGORY_VIEW, ld_category_view_init))
G_IMPLEMENT_INTERFACE (LD_TYPE_CATEGORY_VIEW, ld_category_view_init));
static void
ld_category_tree_view_class_init (LdCategoryTreeViewClass *klass)

View File

@ -2,7 +2,7 @@
* ld-category-tree-view.h
*
* This file is a part of logdiag.
* Copyright 2011, 2012 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2011, 2012
*
* See the file LICENSE for licensing information.
*
@ -15,22 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_CATEGORY_TREE_VIEW (ld_category_tree_view_get_type ())
#define LD_CATEGORY_TREE_VIEW(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
LD_TYPE_CATEGORY_TREE_VIEW, \
LdCategoryTreeView))
#define LD_CATEGORY_TREE_VIEW_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
LD_TYPE_CATEGORY_TREE_VIEW, \
LdCategoryTreeViewClass))
#define LD_IS_CATEGORY_TREE_VIEW(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_CATEGORY_TREE_VIEW))
#define LD_IS_CATEGORY_TREE_VIEW_CLASS(klass) \
(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_CATEGORY_TREE_VIEW))
#define LD_CATEGORY_TREE_VIEW_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
LD_CATEGORY_TREE_VIEW, \
LdCategoryTreeViewClass))
#define LD_CATEGORY_TREE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LD_TYPE_CATEGORY_TREE_VIEW, LdCategoryTreeView))
#define LD_CATEGORY_TREE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LD_TYPE_CATEGORY_TREE_VIEW, LdCategoryTreeViewClass))
#define LD_IS_CATEGORY_TREE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LD_TYPE_CATEGORY_TREE_VIEW))
#define LD_IS_CATEGORY_TREE_VIEW_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LD_TYPE_CATEGORY_TREE_VIEW))
#define LD_CATEGORY_TREE_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LD_CATEGORY_TREE_VIEW, LdCategoryTreeViewClass))
typedef struct _LdCategoryTreeView LdCategoryTreeView;
typedef struct _LdCategoryTreeViewPrivate LdCategoryTreeViewPrivate;

View File

@ -2,7 +2,7 @@
* ld-category-view.c
*
* This file is a part of logdiag.
* Copyright 2012 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2012
*
* See the file LICENSE for licensing information.
*
@ -21,7 +21,7 @@
* hierarchies.
*/
G_DEFINE_INTERFACE (LdCategoryView, ld_category_view, 0)
G_DEFINE_INTERFACE (LdCategoryView, ld_category_view, 0);
static void
ld_category_view_default_init (LdCategoryViewInterface *iface)
@ -77,7 +77,8 @@ ld_category_view_default_init (LdCategoryViewInterface *iface)
* Assign an #LdCategory object to the view.
*/
void
ld_category_view_set_category (LdCategoryView *self, LdCategory *category)
ld_category_view_set_category (LdCategoryView *self,
LdCategory *category)
{
g_return_if_fail (LD_IS_CATEGORY_VIEW (self));
LD_CATEGORY_VIEW_GET_INTERFACE (self)->set_category (self, category);

View File

@ -2,7 +2,7 @@
* ld-category-view.h
*
* This file is a part of logdiag.
* Copyright 2012 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2012
*
* See the file LICENSE for licensing information.
*
@ -15,14 +15,12 @@ G_BEGIN_DECLS
#define LD_TYPE_CATEGORY_VIEW (ld_category_view_get_type ())
#define LD_CATEGORY_VIEW(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_CATEGORY_VIEW, LdCategoryView))
#define LD_IS_CATEGORY_VIEW(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_CATEGORY_VIEW))
#define LD_CATEGORY_VIEW_GET_INTERFACE(inst) \
(G_TYPE_INSTANCE_GET_INTERFACE ((inst), \
LD_TYPE_CATEGORY_VIEW, \
LdCategoryViewInterface))
#define LD_CATEGORY_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LD_TYPE_CATEGORY_VIEW, LdCategoryView))
#define LD_IS_CATEGORY_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LD_TYPE_CATEGORY_VIEW))
#define LD_CATEGORY_VIEW_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE \
((inst), LD_TYPE_CATEGORY_VIEW, LdCategoryViewInterface))
typedef struct _LdCategoryView LdCategoryView;
typedef struct _LdCategoryViewInterface LdCategoryViewInterface;
@ -50,7 +48,8 @@ struct _LdCategoryViewInterface
GType ld_category_view_get_type (void) G_GNUC_CONST;
void ld_category_view_set_category (LdCategoryView *self, LdCategory *category);
void ld_category_view_set_category (LdCategoryView *self,
LdCategory *category);
LdCategory *ld_category_view_get_category (LdCategoryView *self);

View File

@ -2,7 +2,7 @@
* ld-category.c
*
* This file is a part of logdiag.
* Copyright 2010, 2011, 2012 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011, 2012
*
* See the file LICENSE for licensing information.
*
@ -55,7 +55,7 @@ static void on_category_notify_name (LdCategory *category,
GParamSpec *pspec, gpointer user_data);
G_DEFINE_TYPE (LdCategory, ld_category, G_TYPE_OBJECT)
G_DEFINE_TYPE (LdCategory, ld_category, G_TYPE_OBJECT);
static void
ld_category_class_init (LdCategoryClass *klass)
@ -561,3 +561,4 @@ ld_category_get_children (LdCategory *self)
g_return_val_if_fail (LD_IS_CATEGORY (self), NULL);
return self->priv->subcategories;
}

View File

@ -2,7 +2,7 @@
* ld-category.h
*
* This file is a part of logdiag.
* Copyright 2010, 2012 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2012
*
* See the file LICENSE for licensing information.
*
@ -15,16 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_CATEGORY (ld_category_get_type ())
#define LD_CATEGORY(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_CATEGORY, LdCategory))
#define LD_CATEGORY_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_CATEGORY, LdCategoryClass))
#define LD_IS_CATEGORY(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_CATEGORY))
#define LD_IS_CATEGORY_CLASS(klass) \
(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_CATEGORY))
#define LD_CATEGORY_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_CATEGORY, LdCategoryClass))
#define LD_CATEGORY(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LD_TYPE_CATEGORY, LdCategory))
#define LD_CATEGORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LD_TYPE_CATEGORY, LdCategoryClass))
#define LD_IS_CATEGORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LD_TYPE_CATEGORY))
#define LD_IS_CATEGORY_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LD_TYPE_CATEGORY))
#define LD_CATEGORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LD_CATEGORY, LdCategoryClass))
typedef struct _LdCategory LdCategory;
typedef struct _LdCategoryPrivate LdCategoryPrivate;
@ -77,3 +77,4 @@ const GSList *ld_category_get_children (LdCategory *self);
G_END_DECLS
#endif /* ! __LD_CATEGORY_H__ */

View File

@ -2,7 +2,7 @@
* ld-diagram-connection.c
*
* This file is a part of logdiag.
* Copyright 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2011
*
* See the file LICENSE for licensing information.
*
@ -57,7 +57,7 @@ static void on_set_points_destroy (gpointer user_data);
G_DEFINE_TYPE (LdDiagramConnection, ld_diagram_connection,
LD_TYPE_DIAGRAM_OBJECT)
LD_TYPE_DIAGRAM_OBJECT);
static void
ld_diagram_connection_class_init (LdDiagramConnectionClass *klass)
@ -332,3 +332,4 @@ on_set_points_destroy (gpointer user_data)
json_node_free (data->new_node);
g_slice_free (SetPointsActionData, data);
}

View File

@ -2,7 +2,7 @@
* ld-diagram-connection.h
*
* This file is a part of logdiag.
* Copyright 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2011
*
* See the file LICENSE for licensing information.
*
@ -15,22 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_DIAGRAM_CONNECTION (ld_diagram_connection_get_type ())
#define LD_DIAGRAM_CONNECTION(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
LD_TYPE_DIAGRAM_CONNECTION, \
LdDiagramConnection))
#define LD_DIAGRAM_CONNECTION_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
LD_TYPE_DIAGRAM_CONNECTION, \
LdDiagramConnectionClass))
#define LD_IS_DIAGRAM_CONNECTION(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_DIAGRAM_CONNECTION))
#define LD_IS_DIAGRAM_CONNECTION_CLASS(klass) \
(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_DIAGRAM_CONNECTION))
#define LD_DIAGRAM_CONNECTION_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
LD_DIAGRAM_CONNECTION, \
LdDiagramConnectionClass))
#define LD_DIAGRAM_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LD_TYPE_DIAGRAM_CONNECTION, LdDiagramConnection))
#define LD_DIAGRAM_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LD_TYPE_DIAGRAM_CONNECTION, LdDiagramConnectionClass))
#define LD_IS_DIAGRAM_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LD_TYPE_DIAGRAM_CONNECTION))
#define LD_IS_DIAGRAM_CONNECTION_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LD_TYPE_DIAGRAM_CONNECTION))
#define LD_DIAGRAM_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LD_DIAGRAM_CONNECTION, LdDiagramConnectionClass))
typedef struct _LdDiagramConnection LdDiagramConnection;
typedef struct _LdDiagramConnectionPrivate LdDiagramConnectionPrivate;
@ -67,3 +61,4 @@ void ld_diagram_connection_set_points (LdDiagramConnection *self,
G_END_DECLS
#endif /* ! __LD_DIAGRAM_CONNECTION_H__ */

View File

@ -2,7 +2,7 @@
* ld-diagram-object.c
*
* This file is a part of logdiag.
* Copyright 2010, 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011
*
* See the file LICENSE for licensing information.
*
@ -69,7 +69,7 @@ static void on_set_param_redo (gpointer user_data);
static void on_set_param_destroy (gpointer user_data);
G_DEFINE_TYPE (LdDiagramObject, ld_diagram_object, G_TYPE_OBJECT)
G_DEFINE_TYPE (LdDiagramObject, ld_diagram_object, G_TYPE_OBJECT);
static void
ld_diagram_object_class_init (LdDiagramObjectClass *klass)

View File

@ -2,7 +2,7 @@
* ld-diagram-object.h
*
* This file is a part of logdiag.
* Copyright 2010, 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011
*
* See the file LICENSE for licensing information.
*
@ -15,20 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_DIAGRAM_OBJECT (ld_diagram_object_get_type ())
#define LD_DIAGRAM_OBJECT(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
LD_TYPE_DIAGRAM_OBJECT, \
LdDiagramObject))
#define LD_DIAGRAM_OBJECT_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
LD_TYPE_DIAGRAM_OBJECT, \
LdDiagramObjectClass))
#define LD_IS_DIAGRAM_OBJECT(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_DIAGRAM_OBJECT))
#define LD_IS_DIAGRAM_OBJECT_CLASS(klass) \
(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_DIAGRAM_OBJECT))
#define LD_DIAGRAM_OBJECT_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_DIAGRAM_OBJECT, LdDiagramObjectClass))
#define LD_DIAGRAM_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LD_TYPE_DIAGRAM_OBJECT, LdDiagramObject))
#define LD_DIAGRAM_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LD_TYPE_DIAGRAM_OBJECT, LdDiagramObjectClass))
#define LD_IS_DIAGRAM_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LD_TYPE_DIAGRAM_OBJECT))
#define LD_IS_DIAGRAM_OBJECT_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LD_TYPE_DIAGRAM_OBJECT))
#define LD_DIAGRAM_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LD_DIAGRAM_OBJECT, LdDiagramObjectClass))
typedef struct _LdDiagramObject LdDiagramObject;
typedef struct _LdDiagramObjectPrivate LdDiagramObjectPrivate;
@ -78,3 +74,4 @@ void ld_diagram_object_set_y (LdDiagramObject *self, gdouble y);
G_END_DECLS
#endif /* ! __LD_DIAGRAM_OBJECT_H__ */

View File

@ -2,7 +2,7 @@
* ld-diagram-symbol.c
*
* This file is a part of logdiag.
* Copyright 2010, 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011
*
* See the file LICENSE for licensing information.
*
@ -33,7 +33,7 @@ static void ld_diagram_symbol_set_property (GObject *object, guint property_id,
const GValue *value, GParamSpec *pspec);
G_DEFINE_TYPE (LdDiagramSymbol, ld_diagram_symbol, LD_TYPE_DIAGRAM_OBJECT)
G_DEFINE_TYPE (LdDiagramSymbol, ld_diagram_symbol, LD_TYPE_DIAGRAM_OBJECT);
static void
ld_diagram_symbol_class_init (LdDiagramSymbolClass *klass)

View File

@ -2,7 +2,7 @@
* ld-diagram-symbol.h
*
* This file is a part of logdiag.
* Copyright 2010, 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011
*
* See the file LICENSE for licensing information.
*
@ -15,20 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_DIAGRAM_SYMBOL (ld_diagram_symbol_get_type ())
#define LD_DIAGRAM_SYMBOL(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
LD_TYPE_DIAGRAM_SYMBOL, \
LdDiagramSymbol))
#define LD_DIAGRAM_SYMBOL_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
LD_TYPE_DIAGRAM_SYMBOL, \
LdDiagramSymbolClass))
#define LD_IS_DIAGRAM_SYMBOL(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_DIAGRAM_SYMBOL))
#define LD_IS_DIAGRAM_SYMBOL_CLASS(klass) \
(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_DIAGRAM_SYMBOL))
#define LD_DIAGRAM_SYMBOL_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_DIAGRAM_SYMBOL, LdDiagramSymbolClass))
#define LD_DIAGRAM_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LD_TYPE_DIAGRAM_SYMBOL, LdDiagramSymbol))
#define LD_DIAGRAM_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LD_TYPE_DIAGRAM_SYMBOL, LdDiagramSymbolClass))
#define LD_IS_DIAGRAM_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LD_TYPE_DIAGRAM_SYMBOL))
#define LD_IS_DIAGRAM_SYMBOL_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LD_TYPE_DIAGRAM_SYMBOL))
#define LD_DIAGRAM_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LD_DIAGRAM_SYMBOL, LdDiagramSymbolClass))
typedef struct _LdDiagramSymbol LdDiagramSymbol;
typedef struct _LdDiagramSymbolPrivate LdDiagramSymbolPrivate;
@ -74,3 +70,4 @@ void ld_diagram_symbol_set_rotation (LdDiagramSymbol *self, gint rotation);
G_END_DECLS
#endif /* ! __LD_DIAGRAM_SYMBOL_H__ */

View File

@ -2,7 +2,7 @@
* ld-diagram-view.c
*
* This file is a part of logdiag.
* Copyright 2010 - 2021 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011, 2012
*
* See the file LICENSE for licensing information.
*
@ -335,7 +335,7 @@ static void oper_select_begin (LdDiagramView *self, const LdPoint *point);
static void oper_select_end (LdDiagramView *self);
static void oper_select_get_rectangle (LdDiagramView *self, LdRectangle *rect);
static void oper_select_queue_draw (LdDiagramView *self);
static void oper_select_draw (DrawData *data);
static void oper_select_draw (GtkWidget *widget, DrawData *data);
static void oper_select_motion (LdDiagramView *self, const LdPoint *point);
static void oper_move_selection_begin (LdDiagramView *self,
@ -374,19 +374,13 @@ static void on_drag_leave (GtkWidget *widget, GdkDragContext *drag_ctx,
guint time, gpointer user_data);
static gboolean on_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data);
static void draw_grid (DrawData *data);
static void draw_diagram (DrawData *data);
static void draw_terminal (DrawData *data);
static void draw_grid (GtkWidget *widget, DrawData *data);
static void draw_diagram (GtkWidget *widget, DrawData *data);
static void draw_terminal (GtkWidget *widget, DrawData *data);
static void draw_object (LdDiagramObject *diagram_object, DrawData *data);
static void draw_symbol (LdDiagramSymbol *diagram_symbol, DrawData *data);
static void draw_connection (LdDiagramConnection *connection, DrawData *data);
/* Export. */
static void get_diagram_bounds (LdDiagramView *self, LdRectangle *rect);
static gboolean get_object_bounds (LdDiagramView *self, LdDiagramObject *object,
LdRectangle *rect);
G_DEFINE_TYPE_WITH_CODE (LdDiagramView, ld_diagram_view, GTK_TYPE_DRAWING_AREA,
G_IMPLEMENT_INTERFACE (GTK_TYPE_SCROLLABLE,
@ -1051,27 +1045,6 @@ ld_diagram_view_diagram_to_widget_coords (LdDiagramView *self,
*wy = scale * (dy - self->priv->y) + 0.5 * allocation.height;
}
static void
ld_diagram_view_diagram_to_widget_coords_rect (LdDiagramView *self,
const LdRectangle *area, LdRectangle *rect)
{
gdouble x1, x2, y1, y2;
ld_diagram_view_diagram_to_widget_coords (self,
area->x,
area->y,
&x1, &y1);
ld_diagram_view_diagram_to_widget_coords (self,
area->x + area->width,
area->y + area->height,
&x2, &y2);
rect->x = floor (x1);
rect->y = floor (y1);
rect->width = ceil (x2) - rect->x;
rect->height = ceil (y2) - rect->y;
}
/**
* ld_diagram_view_get_x:
* @self: an #LdDiagramView object.
@ -1315,7 +1288,7 @@ point_to_line_segment_distance
/* The projection is beyond the line segment. */
if (u < 0.)
return ld_point_distance (point, p1->x, p1->y);
if (u > 1.)
else if (u > 1.)
return ld_point_distance (point, p2->x, p2->y);
/* The projection is on the line segment. */
@ -1417,8 +1390,8 @@ move_selection (LdDiagramView *self, gdouble dx, gdouble dy)
static gboolean
is_object_selected (LdDiagramView *self, LdDiagramObject *object)
{
return g_list_find (ld_diagram_get_selection (self->priv->diagram), object)
!= NULL;
return g_list_find (ld_diagram_get_selection (self->priv->diagram),
object) != NULL;
}
static void
@ -1639,12 +1612,14 @@ get_symbol_clip_area (LdDiagramView *self,
}
static gboolean
get_symbol_area_in_diagram_units (LdDiagramView *self, LdDiagramSymbol *symbol,
get_symbol_area (LdDiagramView *self, LdDiagramSymbol *symbol,
LdRectangle *rect)
{
gdouble object_x, object_y;
LdSymbol *library_symbol;
LdRectangle area;
gdouble x1, x2;
gdouble y1, y2;
gint rotation;
g_object_get (symbol, "x", &object_x, "y", &object_y,
@ -1658,23 +1633,24 @@ get_symbol_area_in_diagram_units (LdDiagramView *self, LdDiagramSymbol *symbol,
rotate_symbol_area (&area, rotation);
rect->x = object_x + area.x;
rect->y = object_y + area.y;
rect->width = (rect->x + area.width) - rect->x;
rect->height = (rect->y + area.height) - rect->y;
return TRUE;
}
ld_diagram_view_diagram_to_widget_coords (self,
object_x + area.x,
object_y + area.y,
&x1, &y1);
ld_diagram_view_diagram_to_widget_coords (self,
object_x + area.x + area.width,
object_y + area.y + area.height,
&x2, &y2);
static gboolean
get_symbol_area (LdDiagramView *self, LdDiagramSymbol *symbol,
LdRectangle *rect)
{
LdRectangle intermediate;
x1 = floor (x1);
y1 = floor (y1);
x2 = ceil (x2);
y2 = ceil (y2);
if (!get_symbol_area_in_diagram_units (self, symbol, &intermediate))
return FALSE;
ld_diagram_view_diagram_to_widget_coords_rect (self, &intermediate, rect);
rect->x = x1;
rect->y = y1;
rect->width = x2 - x1;
rect->height = y2 - y1;
return TRUE;
}
@ -1806,7 +1782,7 @@ get_connection_clip_area (LdDiagramView *self,
}
static gboolean
get_connection_area_in_diagram_units (LdDiagramView *self,
get_connection_area (LdDiagramView *self,
LdDiagramConnection *connection, LdRectangle *rect)
{
gdouble x_origin, y_origin;
@ -1823,13 +1799,20 @@ get_connection_area_in_diagram_units (LdDiagramView *self,
g_object_get (connection, "x", &x_origin, "y", &y_origin, NULL);
x_max = x_min = x_origin + points->points[0].x;
y_max = y_min = y_origin + points->points[0].y;
ld_diagram_view_diagram_to_widget_coords (self,
x_origin + points->points[0].x,
y_origin + points->points[0].y,
&x, &y);
x_max = x_min = x;
y_max = y_min = y;
for (i = 1; i < points->length; i++)
{
x = x_origin + points->points[i].x;
y = y_origin + points->points[i].y;
ld_diagram_view_diagram_to_widget_coords (self,
x_origin + points->points[i].x,
y_origin + points->points[i].y,
&x, &y);
if (x < x_min)
x_min = x;
@ -1851,19 +1834,6 @@ get_connection_area_in_diagram_units (LdDiagramView *self,
return TRUE;
}
static gboolean
get_connection_area (LdDiagramView *self,
LdDiagramConnection *connection, LdRectangle *rect)
{
LdRectangle intermediate;
if (!get_connection_area_in_diagram_units (self, connection, &intermediate))
return FALSE;
ld_diagram_view_diagram_to_widget_coords_rect (self, &intermediate, rect);
return TRUE;
}
/* ===== Operations ======================================================== */
@ -2131,7 +2101,7 @@ oper_select_queue_draw (LdDiagramView *self)
}
static void
oper_select_draw (DrawData *data)
oper_select_draw (GtkWidget *widget, DrawData *data)
{
static const double dashes[] = {3, 5};
SelectData *select_data;
@ -2591,9 +2561,7 @@ on_drag_motion (GtkWidget *widget, GdkDragContext *drag_ctx,
/* Discard leftovers from any previous unsuccessful drag. */
if (self->priv->dnd_left)
{
/* The Wayland backend does a leave-drop-leave sequence. */
if (self->priv->dnd_symbol)
g_object_unref (self->priv->dnd_symbol);
g_object_unref (self->priv->dnd_symbol);
self->priv->dnd_symbol = NULL;
self->priv->dnd_left = FALSE;
}
@ -2696,19 +2664,19 @@ on_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data)
cairo_paint (data.cr);
if (data.self->priv->show_grid)
draw_grid (&data);
draw_grid (widget, &data);
draw_diagram (&data);
draw_terminal (&data);
draw_diagram (widget, &data);
draw_terminal (widget, &data);
if (data.self->priv->operation == OPER_SELECT)
oper_select_draw (&data);
oper_select_draw (widget, &data);
return FALSE;
}
static void
draw_grid (DrawData *data)
draw_grid (GtkWidget *widget, DrawData *data)
{
gdouble grid_step;
gint grid_factor;
@ -2770,7 +2738,7 @@ draw_grid (DrawData *data)
}
static void
draw_terminal (DrawData *data)
draw_terminal (GtkWidget *widget, DrawData *data)
{
LdDiagramViewPrivate *priv;
LdPoint widget_coords;
@ -2792,7 +2760,7 @@ draw_terminal (DrawData *data)
}
static void
draw_diagram (DrawData *data)
draw_diagram (GtkWidget *widget, DrawData *data)
{
GList *objects, *iter;
@ -2937,101 +2905,5 @@ draw_connection (LdDiagramConnection *connection, DrawData *data)
draw_connection_end:
ld_point_array_free (points);
}
/* ===== Export ============================================================ */
static void
get_diagram_bounds (LdDiagramView *self, LdRectangle *rect)
{
GList *objects;
gboolean initialized = FALSE;
LdRectangle partial;
gdouble x2, y2;
g_return_if_fail (LD_IS_DIAGRAM_VIEW (self));
g_return_if_fail (rect != NULL);
memset (rect, 0, sizeof *rect);
objects = (GList *) ld_diagram_get_objects (self->priv->diagram);
for (; objects != NULL; objects = objects->next)
{
if (!get_object_bounds (self, objects->data, &partial))
continue;
if (!initialized)
{
*rect = partial;
initialized = TRUE;
continue;
}
x2 = MAX (partial.x + partial.width, rect->x + rect->width);
y2 = MAX (partial.y + partial.height, rect->y + rect->height);
rect->x = MIN (rect->x, partial.x);
rect->y = MIN (rect->y, partial.y);
rect->width = x2 - rect->x;
rect->height = y2 - rect->y;
}
}
static gboolean
get_object_bounds (LdDiagramView *self, LdDiagramObject *object,
LdRectangle *rect)
{
if (LD_IS_DIAGRAM_SYMBOL (object))
return get_symbol_area_in_diagram_units (self,
LD_DIAGRAM_SYMBOL (object), rect);
if (LD_IS_DIAGRAM_CONNECTION (object))
return get_connection_area_in_diagram_units (self,
LD_DIAGRAM_CONNECTION (object), rect);
return FALSE;
}
/**
* ld_diagram_view_get_export_bounds:
* @self: an #LdDiagramView object.
* @rect: (out): diagram boundaries.
*
* Get the smallest rectangular area containing all objects in the diagram.
* The diagram object itself doesn't have any idea of how symbols are rendered.
*
* Return value: export units per diagram unit.
*/
gdouble
ld_diagram_view_get_export_bounds (LdDiagramView *self, LdRectangle *rect)
{
LdRectangle intermediate;
/* Presumably, cairo_recording_surface_ink_extents() could also be used,
* though DrawData::exposed_rect currently stands in the way.
*/
get_diagram_bounds (self, &intermediate);
ld_diagram_view_diagram_to_widget_coords_rect (self, &intermediate, rect);
return ld_diagram_view_get_scale_in_px (self);
}
/**
* ld_diagram_view_export:
* @self: an #LdDiagramView object.
* @cr: Cairo context to draw on.
* @clip: the clip area (the function itself does not clip).
*
* Get the smallest rectangular area containing all objects in the diagram.
* The diagram object itself doesn't have any idea of how symbols are rendered.
*/
void
ld_diagram_view_export (LdDiagramView *self, cairo_t *cr,
const LdRectangle *clip)
{
DrawData data;
data.cr = cr;
data.self = self;
/* FIXME: Various functions call this directly, this export is a hack. */
data.scale = ld_diagram_view_get_scale_in_px (data.self);
data.exposed_rect = *clip;
draw_diagram (&data);
return;
}

View File

@ -2,7 +2,7 @@
* ld-diagram-view.h
*
* This file is a part of logdiag.
* Copyright 2010 - 2021 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011
*
* See the file LICENSE for licensing information.
*
@ -15,18 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_DIAGRAM_VIEW (ld_diagram_view_get_type ())
#define LD_DIAGRAM_VIEW(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_DIAGRAM_VIEW, LdDiagramView))
#define LD_DIAGRAM_VIEW_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
LD_TYPE_DIAGRAM_VIEW, \
LdDiagramViewClass))
#define LD_IS_DIAGRAM_VIEW(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_DIAGRAM_VIEW))
#define LD_IS_DIAGRAM_VIEW_CLASS(klass) \
(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_DIAGRAM_VIEW))
#define LD_DIAGRAM_VIEW_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_DIAGRAM_VIEW, LdDiagramViewClass))
#define LD_DIAGRAM_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LD_TYPE_DIAGRAM_VIEW, LdDiagramView))
#define LD_DIAGRAM_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LD_TYPE_DIAGRAM_VIEW, LdDiagramViewClass))
#define LD_IS_DIAGRAM_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LD_TYPE_DIAGRAM_VIEW))
#define LD_IS_DIAGRAM_VIEW_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LD_TYPE_DIAGRAM_VIEW))
#define LD_DIAGRAM_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LD_DIAGRAM_VIEW, LdDiagramViewClass))
typedef struct _LdDiagramView LdDiagramView;
typedef struct _LdDiagramViewPrivate LdDiagramViewPrivate;
@ -96,11 +94,6 @@ void ld_diagram_view_set_show_grid (LdDiagramView *self, gboolean show_grid);
void ld_diagram_view_add_object_begin (LdDiagramView *self,
LdDiagramObject *object);
gdouble ld_diagram_view_get_export_bounds (LdDiagramView *self,
LdRectangle *rect);
void ld_diagram_view_export (LdDiagramView *self,
cairo_t *cr, const LdRectangle *clip);
G_END_DECLS

View File

@ -2,7 +2,7 @@
* ld-diagram.c
*
* This file is a part of logdiag.
* Copyright 2010, 2011, 2012 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011, 2012
*
* See the file LICENSE for licensing information.
*
@ -105,7 +105,7 @@ static void uninstall_object (LdDiagramObject *object, LdDiagram *self);
static void ld_diagram_unselect_all_internal (LdDiagram *self);
G_DEFINE_TYPE (LdDiagram, ld_diagram, G_TYPE_OBJECT)
G_DEFINE_TYPE (LdDiagram, ld_diagram, G_TYPE_OBJECT);
static void
ld_diagram_class_init (LdDiagramClass *klass)

View File

@ -2,7 +2,7 @@
* ld-diagram.h
*
* This file is a part of logdiag.
* Copyright 2010, 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011
*
* See the file LICENSE for licensing information.
*
@ -15,15 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_DIAGRAM (ld_diagram_get_type ())
#define LD_DIAGRAM(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_DIAGRAM, LdDiagram))
#define LD_DIAGRAM_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_DIAGRAM, LdDiagramClass))
#define LD_IS_DIAGRAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_DIAGRAM))
#define LD_IS_DIAGRAM_CLASS(klass) \
(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_DIAGRAM))
#define LD_DIAGRAM_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_DIAGRAM, LdDiagramClass))
#define LD_DIAGRAM(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LD_TYPE_DIAGRAM, LdDiagram))
#define LD_DIAGRAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LD_TYPE_DIAGRAM, LdDiagramClass))
#define LD_IS_DIAGRAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LD_TYPE_DIAGRAM))
#define LD_IS_DIAGRAM_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LD_TYPE_DIAGRAM))
#define LD_DIAGRAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LD_DIAGRAM, LdDiagramClass))
typedef struct _LdDiagram LdDiagram;
typedef struct _LdDiagramClass LdDiagramClass;
@ -113,3 +114,4 @@ void ld_diagram_unselect_all (LdDiagram *self);
G_END_DECLS
#endif /* ! __LD_DIAGRAM_H__ */

View File

@ -2,7 +2,7 @@
* ld-library.c
*
* This file is a part of logdiag.
* Copyright 2010, 2011, 2012 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011, 2012
*
* See the file LICENSE for licensing information.
*
@ -49,10 +49,8 @@ static gboolean foreach_dir (const gchar *path,
gboolean (*callback) (const gchar *, const gchar *, gpointer),
gpointer userdata, GError **error);
static LdSymbol *traverse_path (LdCategory *category, gchar **path);
G_DEFINE_TYPE (LdLibrary, ld_library, G_TYPE_OBJECT)
G_DEFINE_TYPE (LdLibrary, ld_library, G_TYPE_OBJECT);
static void
ld_library_class_init (LdLibraryClass *klass)
@ -358,51 +356,62 @@ ld_library_load (LdLibrary *self, const gchar *directory)
LdSymbol *
ld_library_find_symbol (LdLibrary *self, const gchar *identifier)
{
gchar **path;
LdSymbol *symbol = NULL;
gchar **id_el_start, **id_el;
const GSList *list, *list_el;
LdCategory *cat;
g_return_val_if_fail (LD_IS_LIBRARY (self), NULL);
g_return_val_if_fail (identifier != NULL, NULL);
path = g_strsplit (identifier, LD_LIBRARY_IDENTIFIER_SEPARATOR, 0);
if (path)
id_el_start = g_strsplit (identifier, LD_LIBRARY_IDENTIFIER_SEPARATOR, 0);
if (!id_el_start)
return NULL;
/* We need at least one category name plus the symbol name. */
id_el = id_el_start;
if (!id_el[0] || !id_el[1])
goto ld_library_find_symbol_error;
/* Find the category where the symbol is in. */
cat = self->priv->root;
while (1)
{
symbol = traverse_path (self->priv->root, path);
g_strfreev (path);
}
return symbol;
}
gboolean found = FALSE;
static LdSymbol *
traverse_path (LdCategory *category, gchar **path)
{
const GSList *list, *iter;
LdSymbol *symbol;
g_return_val_if_fail (*path != NULL, NULL);
/* Walk the category tree to where the symbol is supposed to be. */
for (; path[1]; path++)
{
list = ld_category_get_children (category);
for (iter = list; iter; iter = g_slist_next (iter))
list = ld_category_get_children (cat);
for (list_el = list; list_el; list_el = g_slist_next (list_el))
{
category = LD_CATEGORY (iter->data);
if (!strcmp (*path, ld_category_get_name (category)))
cat = LD_CATEGORY (list_el->data);
if (!strcmp (*id_el, ld_category_get_name (cat)))
{
found = TRUE;
break;
}
}
if (!iter)
return NULL;
if (!found)
goto ld_library_find_symbol_error;
if (!(id_el++)[2])
break;
}
/* And look up the actual symbol at the leaf. */
list = ld_category_get_symbols (category);
for (iter = list; iter; iter = g_slist_next (iter))
/* And then the actual symbol. */
list = ld_category_get_symbols (cat);
for (list_el = list; list_el; list_el = g_slist_next (list_el))
{
symbol = LD_SYMBOL (iter->data);
if (!strcmp (*path, ld_symbol_get_name (symbol)))
LdSymbol *symbol;
symbol = LD_SYMBOL (list_el->data);
if (!strcmp (*id_el, ld_symbol_get_name (symbol)))
{
g_strfreev (id_el_start);
return symbol;
}
}
ld_library_find_symbol_error:
g_strfreev (id_el_start);
return NULL;
}
@ -418,3 +427,4 @@ ld_library_get_root (LdLibrary *self)
g_return_val_if_fail (LD_IS_LIBRARY (self), NULL);
return self->priv->root;
}

View File

@ -2,7 +2,7 @@
* ld-library.h
*
* This file is a part of logdiag.
* Copyright 2010, 2012 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2012
*
* See the file LICENSE for licensing information.
*
@ -15,15 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_LIBRARY (ld_library_get_type ())
#define LD_LIBRARY(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_LIBRARY, LdLibrary))
#define LD_LIBRARY_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_LIBRARY, LdLibraryClass))
#define LD_IS_LIBRARY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_LIBRARY))
#define LD_IS_LIBRARY_CLASS(klass) \
(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_LIBRARY))
#define LD_LIBRARY_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_LIBRARY, LdLibraryClass))
#define LD_LIBRARY(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LD_TYPE_LIBRARY, LdLibrary))
#define LD_LIBRARY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LD_TYPE_LIBRARY, LdLibraryClass))
#define LD_IS_LIBRARY(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LD_TYPE_LIBRARY))
#define LD_IS_LIBRARY_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LD_TYPE_LIBRARY))
#define LD_LIBRARY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LD_LIBRARY, LdLibraryClass))
typedef struct _LdLibrary LdLibrary;
typedef struct _LdLibraryPrivate LdLibraryPrivate;
@ -65,3 +66,4 @@ LdCategory *ld_library_get_root (LdLibrary *self);
G_END_DECLS
#endif /* ! __LD_LIBRARY_H__ */

View File

@ -2,7 +2,7 @@
* ld-lua-private.h
*
* This file is a part of logdiag.
* Copyright 2010 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010
*
* See the file LICENSE for licensing information.
*
@ -23,3 +23,4 @@ void ld_lua_private_draw (LdLua *self, LdLuaSymbol *symbol, cairo_t *cr);
G_END_DECLS
#endif /* ! __LD_LUA_PRIVATE_H__ */

View File

@ -2,7 +2,7 @@
* ld-lua-symbol-private.h
*
* This file is a part of logdiag.
* Copyright 2010, 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011
*
* See the file LICENSE for licensing information.
*
@ -37,3 +37,4 @@ struct _LdLuaSymbolPrivate
G_END_DECLS
#endif /* ! __LD_LUA_SYMBOL_PRIVATE_H__ */

View File

@ -2,7 +2,7 @@
* ld-lua-symbol.c
*
* This file is a part of logdiag.
* Copyright 2010, 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011
*
* See the file LICENSE for licensing information.
*
@ -32,7 +32,7 @@ static const LdPointArray *ld_lua_symbol_real_get_terminals (LdSymbol *symbol);
static void ld_lua_symbol_real_draw (LdSymbol *symbol, cairo_t *cr);
G_DEFINE_TYPE (LdLuaSymbol, ld_lua_symbol, LD_TYPE_SYMBOL)
G_DEFINE_TYPE (LdLuaSymbol, ld_lua_symbol, LD_TYPE_SYMBOL);
static void
ld_lua_symbol_class_init (LdLuaSymbolClass *klass)
@ -135,3 +135,4 @@ ld_lua_symbol_real_draw (LdSymbol *symbol, cairo_t *cr)
ld_lua_private_draw (self->priv->lua, self, cr);
cairo_restore (cr);
}

View File

@ -2,7 +2,7 @@
* ld-lua-symbol.h
*
* This file is a part of logdiag.
* Copyright 2010 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010
*
* See the file LICENSE for licensing information.
*
@ -15,16 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_LUA_SYMBOL (ld_lua_symbol_get_type ())
#define LD_LUA_SYMBOL(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_LUA_SYMBOL, LdLuaSymbol))
#define LD_LUA_SYMBOL_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_LUA_SYMBOL, LdLuaSymbolClass))
#define LD_IS_LUA_SYMBOL(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_LUA_SYMBOL))
#define LD_IS_LUA_SYMBOL_CLASS(klass) \
(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_LUA_SYMBOL))
#define LD_LUA_SYMBOL_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_LUA_SYMBOL, LdLuaSymbolClass))
#define LD_LUA_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LD_TYPE_LUA_SYMBOL, LdLuaSymbol))
#define LD_LUA_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LD_TYPE_LUA_SYMBOL, LdLuaSymbolClass))
#define LD_IS_LUA_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LD_TYPE_LUA_SYMBOL))
#define LD_IS_LUA_SYMBOL_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LD_TYPE_LUA_SYMBOL))
#define LD_LUA_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LD_LUA_SYMBOL, LdLuaSymbolClass))
typedef struct _LdLuaSymbol LdLuaSymbol;
typedef struct _LdLuaSymbolPrivate LdLuaSymbolPrivate;
@ -57,3 +57,4 @@ GType ld_lua_symbol_get_type (void) G_GNUC_CONST;
G_END_DECLS
#endif /* ! __LD_LUA_SYMBOL_H__ */

View File

@ -2,7 +2,7 @@
* ld-lua.c
*
* This file is a part of logdiag.
* Copyright 2010, 2011, 2012 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011, 2012
*
* See the file LICENSE for licensing information.
*
@ -150,7 +150,7 @@ static luaL_Reg ld_lua_cairo_table[] =
/* ===== Generic =========================================================== */
G_DEFINE_TYPE (LdLua, ld_lua, G_TYPE_OBJECT)
G_DEFINE_TYPE (LdLua, ld_lua, G_TYPE_OBJECT);
static void
ld_lua_class_init (LdLuaClass *klass)
@ -187,7 +187,8 @@ ld_lua_init (LdLua *self)
lua_State *L;
LdLuaData *ud;
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, LD_TYPE_LUA, LdLuaPrivate);
self->priv = G_TYPE_INSTANCE_GET_PRIVATE
(self, LD_TYPE_LUA, LdLuaPrivate);
L = self->priv->L = lua_newstate (ld_lua_alloc, NULL);
g_return_if_fail (L != NULL);
@ -250,7 +251,8 @@ ld_lua_alloc (void *ud, void *ptr, size_t osize, size_t nsize)
g_free (ptr);
return NULL;
}
return g_try_realloc (ptr, nsize);
else
return g_try_realloc (ptr, nsize);
}
/**
@ -463,7 +465,8 @@ ld_lua_logdiag_register (lua_State *L)
lua_insert (L, -2);
lua_concat (L, 2);
g_warning ("Lua symbol registration failed: %s", lua_tostring (L, -1));
g_warning ("Lua symbol registration failed: %s",
lua_tostring (L, -1));
lua_pushboolean (L, FALSE);
}
else
@ -858,3 +861,4 @@ LD_LUA_CAIRO_BEGIN (show_text)
g_object_unref (layout);
LD_LUA_CAIRO_END (0)

View File

@ -2,7 +2,7 @@
* ld-lua.h
*
* This file is a part of logdiag.
* Copyright 2010 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010
*
* See the file LICENSE for licensing information.
*
@ -15,14 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_LUA (ld_lua_get_type ())
#define LD_LUA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_LUA, LdLua))
#define LD_LUA_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_LUA, LdLuaClass))
#define LD_IS_LUA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_LUA))
#define LD_IS_LUA_CLASS(klass) \
(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_LUA))
#define LD_LUA_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_LUA, LdLuaClass))
#define LD_LUA(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LD_TYPE_LUA, LdLua))
#define LD_LUA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LD_TYPE_LUA, LdLuaClass))
#define LD_IS_LUA(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LD_TYPE_LUA))
#define LD_IS_LUA_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LD_TYPE_LUA))
#define LD_LUA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LD_LUA, LdLuaClass))
typedef struct _LdLua LdLua;
typedef struct _LdLuaPrivate LdLuaPrivate;
@ -65,3 +67,4 @@ gboolean ld_lua_load_file (LdLua *self, const gchar *filename,
G_END_DECLS
#endif /* ! __LD_LUA_H__ */

View File

@ -1,2 +1,3 @@
VOID:OBJECT,OBJECT
VOID:OBJECT,STRING
VOID:DOUBLE,DOUBLE

View File

@ -2,7 +2,7 @@
* ld-symbol.c
*
* This file is a part of logdiag.
* Copyright 2010, 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011
*
* See the file LICENSE for licensing information.
*
@ -38,7 +38,7 @@ static void ld_symbol_set_property (GObject *object, guint property_id,
const GValue *value, GParamSpec *pspec);
G_DEFINE_ABSTRACT_TYPE (LdSymbol, ld_symbol, G_TYPE_OBJECT)
G_DEFINE_ABSTRACT_TYPE (LdSymbol, ld_symbol, G_TYPE_OBJECT);
static void
ld_symbol_class_init (LdSymbolClass *klass)

View File

@ -2,7 +2,7 @@
* ld-symbol.h
*
* This file is a part of logdiag.
* Copyright 2010, 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011
*
* See the file LICENSE for licensing information.
*
@ -15,15 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_SYMBOL (ld_symbol_get_type ())
#define LD_SYMBOL(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_SYMBOL, LdSymbol))
#define LD_SYMBOL_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_SYMBOL, LdSymbolClass))
#define LD_IS_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_SYMBOL))
#define LD_IS_SYMBOL_CLASS(klass) \
(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_SYMBOL))
#define LD_SYMBOL_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_SYMBOL, LdSymbolClass))
#define LD_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LD_TYPE_SYMBOL, LdSymbol))
#define LD_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LD_TYPE_SYMBOL, LdSymbolClass))
#define LD_IS_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LD_TYPE_SYMBOL))
#define LD_IS_SYMBOL_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LD_TYPE_SYMBOL))
#define LD_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LD_SYMBOL, LdSymbolClass))
typedef struct _LdSymbol LdSymbol;
typedef struct _LdSymbolPrivate LdSymbolPrivate;
@ -71,3 +72,4 @@ void ld_symbol_draw (LdSymbol *self, cairo_t *cr);
G_END_DECLS
#endif /* ! __LD_SYMBOL_H__ */

View File

@ -2,7 +2,7 @@
* ld-types.c
*
* This file is a part of logdiag.
* Copyright 2010, 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011
*
* See the file LICENSE for licensing information.
*
@ -256,8 +256,7 @@ ld_point_array_remove (LdPointArray *self, gint pos, guint length)
*
* Change size of the array.
*/
void
ld_point_array_set_size (LdPointArray *self, guint size)
void ld_point_array_set_size (LdPointArray *self, guint size)
{
g_return_if_fail (self != NULL);

View File

@ -2,7 +2,7 @@
* ld-types.h
*
* This file is a part of logdiag.
* Copyright 2010, 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011
*
* See the file LICENSE for licensing information.
*
@ -14,9 +14,9 @@
G_BEGIN_DECLS
#define LD_TYPE_POINT (ld_point_get_type ())
#define LD_TYPE_POINT (ld_point_get_type ())
#define LD_TYPE_POINT_ARRAY (ld_point_array_get_type ())
#define LD_TYPE_RECTANGLE (ld_rectangle_get_type ())
#define LD_TYPE_RECTANGLE (ld_rectangle_get_type ())
/**
@ -99,3 +99,4 @@ void ld_rectangle_extend (LdRectangle *self, gdouble border);
G_END_DECLS
#endif /* ! __LD_TYPES_H__ */

View File

@ -2,7 +2,7 @@
* ld-undo-action.c
*
* This file is a part of logdiag.
* Copyright 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2011
*
* See the file LICENSE for licensing information.
*
@ -40,7 +40,7 @@ struct _LdUndoActionPrivate
static void ld_undo_action_finalize (GObject *gobject);
G_DEFINE_TYPE (LdUndoAction, ld_undo_action, G_TYPE_OBJECT)
G_DEFINE_TYPE (LdUndoAction, ld_undo_action, G_TYPE_OBJECT);
static void
ld_undo_action_class_init (LdUndoActionClass *klass)
@ -84,8 +84,9 @@ ld_undo_action_finalize (GObject *gobject)
* Return value: a new #LdUndoAction object.
*/
LdUndoAction *
ld_undo_action_new (LdUndoActionFunc undo_func, LdUndoActionFunc redo_func,
LdUndoActionFunc destroy_func, gpointer user_data)
ld_undo_action_new (LdUndoActionFunc undo_func,
LdUndoActionFunc redo_func, LdUndoActionFunc destroy_func,
gpointer user_data)
{
LdUndoAction *self;

View File

@ -2,7 +2,7 @@
* ld-undo-action.h
*
* This file is a part of logdiag.
* Copyright 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2011
*
* See the file LICENSE for licensing information.
*
@ -15,16 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_UNDO_ACTION (ld_undo_action_get_type ())
#define LD_UNDO_ACTION(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_UNDO_ACTION, LdUndoAction))
#define LD_UNDO_ACTION_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_UNDO_ACTION, LdUndoActionClass))
#define LD_IS_UNDO_ACTION(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_UNDO_ACTION))
#define LD_IS_UNDO_ACTION_CLASS(klass) \
(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_UNDO_ACTION))
#define LD_UNDO_ACTION_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_UNDO_ACTION, LdUndoActionClass))
#define LD_UNDO_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LD_TYPE_UNDO_ACTION, LdUndoAction))
#define LD_UNDO_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LD_TYPE_UNDO_ACTION, LdUndoActionClass))
#define LD_IS_UNDO_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LD_TYPE_UNDO_ACTION))
#define LD_IS_UNDO_ACTION_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LD_TYPE_UNDO_ACTION))
#define LD_UNDO_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LD_UNDO_ACTION, LdUndoActionClass))
typedef struct _LdUndoAction LdUndoAction;
typedef struct _LdUndoActionPrivate LdUndoActionPrivate;
@ -73,3 +73,4 @@ void ld_undo_action_redo (LdUndoAction *self);
G_END_DECLS
#endif /* ! __LD_UNDO_ACTION_H__ */

View File

@ -2,7 +2,7 @@
* liblogdiag.h
*
* This file is a part of logdiag.
* Copyright 2011, 2012 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2011, 2012
*
* See the file LICENSE for licensing information.
*

156
po/cs.po
View File

@ -1,44 +1,44 @@
# Czech translation for logdiag.
# Copyright (C) 2011 Přemysl Eric Janouch
# Copyright (C) 2011 Přemysl Janouch
# This file is distributed under the same license as the logdiag package.
# Přemysl Eric Janouch <p@janouch.name>, 2011.
# Přemysl Janouch <p@janouch.name>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: logdiag\n"
"Report-Msgid-Bugs-To: https://git.janouch.name/p/logdiag/issues\n"
"POT-Creation-Date: 2021-10-28 20:07+0200\n"
"PO-Revision-Date: 2021-10-28 20:10+0200\n"
"Last-Translator: Přemysl Eric Janouch <p@janouch.name>\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-27 04:52+0200\n"
"PO-Revision-Date: 2018-06-25 04:02+0200\n"
"Last-Translator: Přemysl Janouch <p@janouch.name>\n"
"Language-Team: Czech <cs@li.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.0\n"
"X-Generator: Poedit 2.0.8\n"
#: ../src/ld-window-main.c:968
#: ../src/ld-window-main.c:931
#, c-format
msgid "%d%%"
msgstr "%d %%"
#: ../src/logdiag.c:147
#: ../src/logdiag.c:146
msgid "- Schematic editor"
msgstr "- Editor schémat"
#: ../src/ld-window-main.c:892
#: ../src/ld-window-main.c:855
msgid "Close _without Saving"
msgstr "Zavřít _bez uložení"
#: ../src/ld-window-main.c:141
#: ../src/ld-window-main.c:128
msgid "Create a new diagram"
msgstr "Vytvoří nový diagram"
#: ../src/ld-window-main.c:174
#: ../src/ld-window-main.c:161
msgid "Delete the contents of the selection"
msgstr "Odstraní obsah výběru"
#: ../src/ld-window-main.c:370
#: ../src/ld-window-main.c:354
msgid "Drag symbols from the library pane to add them to the diagram."
msgstr "Pro přidání symbolů do diagramu je přetáhněte z panelu knihovny."
@ -46,147 +46,129 @@ msgstr "Pro přidání symbolů do diagramu je přetáhněte z panelu knihovny."
msgid "Empty"
msgstr "Prázdné"
#: ../src/ld-window-main.c:1042
msgid "Error"
msgstr "Chyba"
#: ../src/ld-window-main.c:738
#: ../src/ld-window-main.c:707
#, c-format
msgid "Failed to open file `%s': Invalid contents."
msgstr "Nelze otevřít soubor \"%s\": Neplatný obsah."
#: ../src/ld-window-main.c:729
#: ../src/ld-window-main.c:698
msgid "Failed to open the file"
msgstr "Nelze otevřít soubor"
#: ../src/ld-window-main.c:1149
msgid "Failed to open the user guide"
msgstr "Nelze otevřít průvodce uživatele"
#: ../src/ld-window-main.c:693
#: ../src/ld-window-main.c:662
msgid "Failed to save the diagram"
msgstr "Nelze uložit diagram"
#: ../src/ld-window-main.c:890
#: ../src/ld-window-main.c:853
msgid "If you don't save, changes will be permanently lost."
msgstr "Pokud je neuložíte, budou změny navždy ztraceny."
#: ../src/ld-window-main.c:769
#: ../src/ld-window-main.c:738
msgid "Logdiag Diagrams (*.ldd)"
msgstr "Diagramy logdiag (*.ldd)"
#: ../src/ld-window-main.c:144
#: ../src/ld-window-main.c:131
msgid "Open a diagram"
msgstr "Otevře diagram"
#: ../src/ld-window-main.c:193
msgid "Open the manual"
msgstr "Otevře manuál"
#: ../src/ld-window-main.c:790
#: ../src/ld-window-main.c:759
msgid "Open..."
msgstr "Otevřít..."
#: ../src/ld-window-main.c:154
msgid "Print the diagram"
msgstr "Vytiskne diagram"
#: ../src/ld-window-main.c:158
#: ../src/ld-window-main.c:145
msgid "Quit the application"
msgstr "Ukončí aplikaci"
#: ../src/ld-window-main.c:166
#: ../src/ld-window-main.c:153
msgid "Redo the last undone action"
msgstr "Provede posledně vrácenou akci"
#: ../src/ld-window-main.c:188
#: ../src/ld-window-main.c:175
msgid "Reset zoom level back to the default"
msgstr "Vrátí přiblížení na výchozí hodnotu"
#: ../src/ld-window-main.c:823
#: ../src/ld-window-main.c:790
msgid "Save As..."
msgstr "Uložit jako..."
#: ../src/ld-window-main.c:149
#: ../src/ld-window-main.c:136
msgid "Save _As..."
msgstr "Uložit _jako..."
#: ../src/ld-window-main.c:654
#: ../src/ld-window-main.c:623
#, c-format
msgid "Save the changes to diagram \"%s\" before closing it and creating a new one?"
msgid ""
"Save the changes to diagram \"%s\" before closing it and creating a new one?"
msgstr "Uložit změny v diagramu \"%s\" před jeho zavřením a vytvořením nového?"
#: ../src/ld-window-main.c:786
#: ../src/ld-window-main.c:755
#, c-format
msgid "Save the changes to diagram \"%s\" before closing it and opening another one?"
msgid ""
"Save the changes to diagram \"%s\" before closing it and opening another one?"
msgstr "Uložit změny v diagramu \"%s\" před jeho zavřením a otevřením jiného?"
#: ../src/ld-window-main.c:930
#: ../src/ld-window-main.c:893
#, c-format
msgid "Save the changes to diagram \"%s\" before closing?"
msgstr "Uložit změny v diagramu \"%s\" před jeho zavřením?"
#: ../src/ld-window-main.c:147
#: ../src/ld-window-main.c:134
msgid "Save the current diagram"
msgstr "Uloží stávající diagram"
#: ../src/ld-window-main.c:150
#: ../src/ld-window-main.c:137
msgid "Save the current diagram with another name"
msgstr "Uloží stávající diagram pod jiným jménem"
#: ../src/ld-window-main.c:176
#: ../src/ld-window-main.c:163
msgid "Select _All"
msgstr "Vybrat _vše"
#: ../src/ld-window-main.c:177
#: ../src/ld-window-main.c:164
msgid "Select all objects in the diagram"
msgstr "Vybere všechny objekty v diagramu"
#: ../src/ld-window-main.c:208
#: ../src/ld-window-main.c:192
msgid "Show _Grid"
msgstr "Zobrazit _mřížku"
#: ../src/ld-window-main.c:196
#: ../src/ld-window-main.c:180
msgid "Show a dialog about this application"
msgstr "Zobrazí dialog o této aplikaci"
#: ../src/ld-window-main.c:209
#: ../src/ld-window-main.c:193
msgid "Toggle displaying of the grid"
msgstr "Přepne zobrazování mřížky"
#: ../src/ld-window-main.c:206
#: ../src/ld-window-main.c:190
msgid "Toggle displaying of the library pane"
msgstr "Přepne zobrazování panelu knihovny"
#: ../src/ld-window-main.c:203
#: ../src/ld-window-main.c:187
msgid "Toggle displaying of the main toolbar"
msgstr "Přepne zobrazování hlavního panelu nástrojů"
#: ../src/ld-window-main.c:696
#: ../src/ld-window-main.c:665
msgid "Try again or save it under another name."
msgstr "Zkuste to znova nebo jej uložte pod jiným názvem."
#: ../src/ld-window-main.c:163
#: ../src/ld-window-main.c:150
msgid "Undo the last action"
msgstr "Vrátí poslední akci"
#: ../src/ld-window-main.c:622
#: ../src/ld-window-main.c:591
msgid "Unsaved Diagram"
msgstr "Neuložený diagram"
#: ../src/ld-window-main.c:837
msgid "Untitled diagram"
msgstr "Nepojmenovaný diagram"
#: ../src/ld-window-main.c:184
#: ../src/ld-window-main.c:171
msgid "Zoom _Out"
msgstr "_Oddálit"
#: ../src/ld-window-main.c:182
#: ../src/ld-window-main.c:169
msgid "Zoom into the diagram"
msgstr "Přiblíží diagram"
#: ../src/ld-window-main.c:185
#: ../src/ld-window-main.c:172
msgid "Zoom out of the diagram"
msgstr "Oddálí diagram"
@ -194,81 +176,73 @@ msgstr "Oddálí diagram"
msgid "[FILE...]"
msgstr "[SOUBOR...]"
#: ../src/ld-window-main.c:195
#: ../src/ld-window-main.c:179
msgid "_About"
msgstr "_O programu"
#: ../src/ld-window-main.c:173
#: ../src/ld-window-main.c:160
msgid "_Delete"
msgstr "_Smazat"
#: ../src/ld-window-main.c:161
#: ../src/ld-window-main.c:148
msgid "_Edit"
msgstr "_Úpravy"
#: ../src/ld-window-main.c:139
#: ../src/ld-window-main.c:126
msgid "_File"
msgstr "_Soubor"
#: ../src/ld-window-main.c:191
#: ../src/ld-window-main.c:178
msgid "_Help"
msgstr "_Nápověda"
#: ../src/ld-window-main.c:205
#: ../src/ld-window-main.c:189
msgid "_Library Pane"
msgstr "Panel _knihovny"
#: ../src/ld-window-main.c:202
#: ../src/ld-window-main.c:186
msgid "_Main Toolbar"
msgstr "_Hlavní panel nástrojů"
#: ../src/ld-window-main.c:140
#: ../src/ld-window-main.c:127
msgid "_New"
msgstr "_Nový"
#: ../src/ld-window-main.c:187
#: ../src/ld-window-main.c:174
msgid "_Normal Size"
msgstr "_Normální velikost"
#: ../src/ld-window-main.c:143
#: ../src/ld-window-main.c:130
msgid "_Open..."
msgstr "_Otevřít..."
#: ../src/ld-window-main.c:153
msgid "_Print..."
msgstr "_Tisk..."
#: ../src/ld-window-main.c:157
#: ../src/ld-window-main.c:144
msgid "_Quit"
msgstr "U_končit"
#: ../src/ld-window-main.c:165
#: ../src/ld-window-main.c:152
msgid "_Redo"
msgstr "Z_novu"
#: ../src/ld-window-main.c:146
#: ../src/ld-window-main.c:133
msgid "_Save"
msgstr "_Uložit"
#: ../src/ld-window-main.c:162
#: ../src/ld-window-main.c:149
msgid "_Undo"
msgstr "_Zpět"
#: ../src/ld-window-main.c:192
msgid "_User Guide"
msgstr "_Průvodce uživatele"
#: ../src/ld-window-main.c:180
#: ../src/ld-window-main.c:167
msgid "_View"
msgstr "_Zobrazení"
#: ../src/ld-window-main.c:181
#: ../src/ld-window-main.c:168
msgid "_Zoom In"
msgstr "_Přiblížit"
#: ../src/ld-window-main.c:1163
#: ../src/ld-window-main.c:977
msgid "translator-credits"
msgstr "Přemysl Eric Janouch <p@janouch.name>"
msgstr "Přemysl Janouch <p@janouch.name>"
#~ msgid "The file is probably corrupted."
#~ msgstr "Soubor je pravděpodobně poškozen."

148
po/de.po
View File

@ -1,44 +1,44 @@
# German translation for logdiag.
# Copyright (C) 2011 Přemysl Eric Janouch
# Copyright (C) 2011 Přemysl Janouch
# This file is distributed under the same license as the logdiag package.
# Andy J., 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: logdiag\n"
"Report-Msgid-Bugs-To: https://git.janouch.name/p/logdiag/issues\n"
"POT-Creation-Date: 2021-10-28 20:07+0200\n"
"PO-Revision-Date: 2021-10-28 21:29+0200\n"
"Last-Translator: Přemysl Eric Janouch <p@janouch.name>\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-27 04:52+0200\n"
"PO-Revision-Date: 2018-06-25 04:11+0200\n"
"Last-Translator: Přemysl Janouch <p@janouch.name>\n"
"Language-Team: German <de@li.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.0\n"
"X-Generator: Poedit 2.0.8\n"
#: ../src/ld-window-main.c:968
#: ../src/ld-window-main.c:931
#, c-format
msgid "%d%%"
msgstr "%d %%"
#: ../src/logdiag.c:147
#: ../src/logdiag.c:146
msgid "- Schematic editor"
msgstr "- Schema Editor"
#: ../src/ld-window-main.c:892
#: ../src/ld-window-main.c:855
msgid "Close _without Saving"
msgstr "Schließen _ohne Speichern"
#: ../src/ld-window-main.c:141
#: ../src/ld-window-main.c:128
msgid "Create a new diagram"
msgstr "Neues Diagramm erstellen"
#: ../src/ld-window-main.c:174
#: ../src/ld-window-main.c:161
msgid "Delete the contents of the selection"
msgstr "Inhalt der markierten Einträge löschen"
#: ../src/ld-window-main.c:370
#: ../src/ld-window-main.c:354
msgid "Drag symbols from the library pane to add them to the diagram."
msgstr ""
"Ziehen Sie Symbole aus dem Bibliotheksfenster, um sie dem Diagramm "
@ -48,78 +48,62 @@ msgstr ""
msgid "Empty"
msgstr "Leere"
#: ../src/ld-window-main.c:1042
msgid "Error"
msgstr "Fehler"
#: ../src/ld-window-main.c:738
#: ../src/ld-window-main.c:707
#, c-format
msgid "Failed to open file `%s': Invalid contents."
msgstr "Fehler beim Öffnen der Datei \"%s\": Ungültiger Inhalt."
#: ../src/ld-window-main.c:729
#: ../src/ld-window-main.c:698
msgid "Failed to open the file"
msgstr "Fehler beim Öffnen der Datei"
#: ../src/ld-window-main.c:1149
msgid "Failed to open the user guide"
msgstr "Fehler beim Öffnen des Benutzerhandbuchs"
#: ../src/ld-window-main.c:693
#: ../src/ld-window-main.c:662
msgid "Failed to save the diagram"
msgstr "Fehler beim Speichern des Diagramms"
#: ../src/ld-window-main.c:890
#: ../src/ld-window-main.c:853
msgid "If you don't save, changes will be permanently lost."
msgstr "Wenn Sie nicht speichern, gehen alle Änderungen verloren."
#: ../src/ld-window-main.c:769
#: ../src/ld-window-main.c:738
msgid "Logdiag Diagrams (*.ldd)"
msgstr "Diagramme logdiag (.ldd)"
#: ../src/ld-window-main.c:144
#: ../src/ld-window-main.c:131
msgid "Open a diagram"
msgstr "Diagramm öffnen"
#: ../src/ld-window-main.c:193
msgid "Open the manual"
msgstr "Die Betriebsanleitung öffnen"
#: ../src/ld-window-main.c:790
#: ../src/ld-window-main.c:759
msgid "Open..."
msgstr "Öffnen..."
#: ../src/ld-window-main.c:154
msgid "Print the diagram"
msgstr "Das Diagramm drucken"
#: ../src/ld-window-main.c:158
#: ../src/ld-window-main.c:145
msgid "Quit the application"
msgstr "Anwendung beenden"
#: ../src/ld-window-main.c:166
#: ../src/ld-window-main.c:153
msgid "Redo the last undone action"
msgstr "Letzte nicht abgeschlossene Aktion wiederholen"
#: ../src/ld-window-main.c:188
#: ../src/ld-window-main.c:175
msgid "Reset zoom level back to the default"
msgstr "Zoom Bereich zurücksetzen"
#: ../src/ld-window-main.c:823
#: ../src/ld-window-main.c:790
msgid "Save As..."
msgstr "Speichern unter..."
#: ../src/ld-window-main.c:149
#: ../src/ld-window-main.c:136
msgid "Save _As..."
msgstr "Speichern _unter..."
#: ../src/ld-window-main.c:654
#: ../src/ld-window-main.c:623
#, c-format
msgid ""
"Save the changes to diagram \"%s\" before closing it and creating a new one?"
msgstr "Änderungen im Diagramm \"%s\" speichern bevor ein Neues geöffnet wird?"
#: ../src/ld-window-main.c:786
#: ../src/ld-window-main.c:755
#, c-format
msgid ""
"Save the changes to diagram \"%s\" before closing it and opening another one?"
@ -127,72 +111,68 @@ msgstr ""
"Änderungen im Diagramm \"%s\" speichern bevor es beendet und ein Weiteres "
"geöffnet wird?"
#: ../src/ld-window-main.c:930
#: ../src/ld-window-main.c:893
#, c-format
msgid "Save the changes to diagram \"%s\" before closing?"
msgstr "Änderungen im Diagramm \"%s\" vor dem Schließen speichern?"
#: ../src/ld-window-main.c:147
#: ../src/ld-window-main.c:134
msgid "Save the current diagram"
msgstr "Speichern des aktuellen Diagramms"
#: ../src/ld-window-main.c:150
#: ../src/ld-window-main.c:137
msgid "Save the current diagram with another name"
msgstr "Aktuelles Diagramm unter anderem Namen speichern"
#: ../src/ld-window-main.c:176
#: ../src/ld-window-main.c:163
msgid "Select _All"
msgstr "_Alles Auswählen"
#: ../src/ld-window-main.c:177
#: ../src/ld-window-main.c:164
msgid "Select all objects in the diagram"
msgstr "Alle Objekte im Diagramm auswählen"
#: ../src/ld-window-main.c:208
#: ../src/ld-window-main.c:192
msgid "Show _Grid"
msgstr "_Gitter anzeigen"
#: ../src/ld-window-main.c:196
#: ../src/ld-window-main.c:180
msgid "Show a dialog about this application"
msgstr "Zeige einen Dialog über diese Anwendung"
#: ../src/ld-window-main.c:209
#: ../src/ld-window-main.c:193
msgid "Toggle displaying of the grid"
msgstr "Gitter ein-/ausblenden"
#: ../src/ld-window-main.c:206
#: ../src/ld-window-main.c:190
msgid "Toggle displaying of the library pane"
msgstr "Bibliothek ein-/ausblenden"
#: ../src/ld-window-main.c:203
#: ../src/ld-window-main.c:187
msgid "Toggle displaying of the main toolbar"
msgstr "Symbolleiste ein-/ausblenden"
#: ../src/ld-window-main.c:696
#: ../src/ld-window-main.c:665
msgid "Try again or save it under another name."
msgstr "Erneuter Versuch oder unter anderem Namen speichern."
#: ../src/ld-window-main.c:163
#: ../src/ld-window-main.c:150
msgid "Undo the last action"
msgstr "Letzte Aktion rückgangig machen"
#: ../src/ld-window-main.c:622
#: ../src/ld-window-main.c:591
msgid "Unsaved Diagram"
msgstr "Ungespeichertes Diagramm"
#: ../src/ld-window-main.c:837
msgid "Untitled diagram"
msgstr "Unbenanntes Diagramm"
#: ../src/ld-window-main.c:184
#: ../src/ld-window-main.c:171
msgid "Zoom _Out"
msgstr "Zoom _heraus"
#: ../src/ld-window-main.c:182
#: ../src/ld-window-main.c:169
msgid "Zoom into the diagram"
msgstr "In das Diagramm zoomen"
#: ../src/ld-window-main.c:185
#: ../src/ld-window-main.c:172
msgid "Zoom out of the diagram"
msgstr "Aus dem Diagramm zoomen"
@ -200,79 +180,71 @@ msgstr "Aus dem Diagramm zoomen"
msgid "[FILE...]"
msgstr "[DATEI...]"
#: ../src/ld-window-main.c:195
#: ../src/ld-window-main.c:179
msgid "_About"
msgstr "_Info"
msgstr "_Über"
#: ../src/ld-window-main.c:173
#: ../src/ld-window-main.c:160
msgid "_Delete"
msgstr "_Löschen"
#: ../src/ld-window-main.c:161
#: ../src/ld-window-main.c:148
msgid "_Edit"
msgstr "_Ändern"
#: ../src/ld-window-main.c:139
#: ../src/ld-window-main.c:126
msgid "_File"
msgstr "_Datei"
#: ../src/ld-window-main.c:191
#: ../src/ld-window-main.c:178
msgid "_Help"
msgstr "_Hilfe"
#: ../src/ld-window-main.c:205
#: ../src/ld-window-main.c:189
msgid "_Library Pane"
msgstr "_Bibliothek Menüleiste"
#: ../src/ld-window-main.c:202
#: ../src/ld-window-main.c:186
msgid "_Main Toolbar"
msgstr "_Symbolleiste"
#: ../src/ld-window-main.c:140
#: ../src/ld-window-main.c:127
msgid "_New"
msgstr "_Neu"
#: ../src/ld-window-main.c:187
#: ../src/ld-window-main.c:174
msgid "_Normal Size"
msgstr "_Normale Größe"
#: ../src/ld-window-main.c:143
#: ../src/ld-window-main.c:130
msgid "_Open..."
msgstr "_Öffnen..."
#: ../src/ld-window-main.c:153
msgid "_Print..."
msgstr "_Drucken..."
#: ../src/ld-window-main.c:157
#: ../src/ld-window-main.c:144
msgid "_Quit"
msgstr "_Beenden"
#: ../src/ld-window-main.c:165
#: ../src/ld-window-main.c:152
msgid "_Redo"
msgstr "_Wiederholen"
#: ../src/ld-window-main.c:146
#: ../src/ld-window-main.c:133
msgid "_Save"
msgstr "_Speichern"
#: ../src/ld-window-main.c:162
#: ../src/ld-window-main.c:149
msgid "_Undo"
msgstr "_Rückgängig"
#: ../src/ld-window-main.c:192
msgid "_User Guide"
msgstr "_Benutzerhandbuch"
#: ../src/ld-window-main.c:180
#: ../src/ld-window-main.c:167
msgid "_View"
msgstr "_Ansicht"
#: ../src/ld-window-main.c:181
#: ../src/ld-window-main.c:168
msgid "_Zoom In"
msgstr "_Hineinzoomen"
#: ../src/ld-window-main.c:1163
#: ../src/ld-window-main.c:977
msgid "translator-credits"
msgstr "Andy J."

View File

@ -1,14 +1,14 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Přemysl Eric Janouch
# Copyright (C) YEAR Přemysl Janouch
# This file is distributed under the same license as the logdiag package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: logdiag 0.3.0\n"
"Report-Msgid-Bugs-To: https://git.janouch.name/p/logdiag/issues\n"
"POT-Creation-Date: 2021-10-28 20:07+0200\n"
"Project-Id-Version: logdiag 0.2.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-27 04:52+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,246 +17,218 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../src/ld-window-main.c:139
#: ../src/ld-window-main.c:126
msgid "_File"
msgstr ""
#: ../src/ld-window-main.c:140
#: ../src/ld-window-main.c:127
msgid "_New"
msgstr ""
#: ../src/ld-window-main.c:141
#: ../src/ld-window-main.c:128
msgid "Create a new diagram"
msgstr ""
#: ../src/ld-window-main.c:143
#: ../src/ld-window-main.c:130
msgid "_Open..."
msgstr ""
#: ../src/ld-window-main.c:144
#: ../src/ld-window-main.c:131
msgid "Open a diagram"
msgstr ""
#: ../src/ld-window-main.c:146
#: ../src/ld-window-main.c:133
msgid "_Save"
msgstr ""
#: ../src/ld-window-main.c:147
#: ../src/ld-window-main.c:134
msgid "Save the current diagram"
msgstr ""
#: ../src/ld-window-main.c:149
#: ../src/ld-window-main.c:136
msgid "Save _As..."
msgstr ""
#: ../src/ld-window-main.c:150
#: ../src/ld-window-main.c:137
msgid "Save the current diagram with another name"
msgstr ""
#: ../src/ld-window-main.c:153
msgid "_Print..."
msgstr ""
#: ../src/ld-window-main.c:154
msgid "Print the diagram"
msgstr ""
#: ../src/ld-window-main.c:157
#: ../src/ld-window-main.c:144
msgid "_Quit"
msgstr ""
#: ../src/ld-window-main.c:158
#: ../src/ld-window-main.c:145
msgid "Quit the application"
msgstr ""
#: ../src/ld-window-main.c:161
#: ../src/ld-window-main.c:148
msgid "_Edit"
msgstr ""
#: ../src/ld-window-main.c:162
#: ../src/ld-window-main.c:149
msgid "_Undo"
msgstr ""
#: ../src/ld-window-main.c:163
#: ../src/ld-window-main.c:150
msgid "Undo the last action"
msgstr ""
#: ../src/ld-window-main.c:165
#: ../src/ld-window-main.c:152
msgid "_Redo"
msgstr ""
#: ../src/ld-window-main.c:166
#: ../src/ld-window-main.c:153
msgid "Redo the last undone action"
msgstr ""
#: ../src/ld-window-main.c:173
#: ../src/ld-window-main.c:160
msgid "_Delete"
msgstr ""
#: ../src/ld-window-main.c:174
#: ../src/ld-window-main.c:161
msgid "Delete the contents of the selection"
msgstr ""
#: ../src/ld-window-main.c:176
#: ../src/ld-window-main.c:163
msgid "Select _All"
msgstr ""
#: ../src/ld-window-main.c:177
#: ../src/ld-window-main.c:164
msgid "Select all objects in the diagram"
msgstr ""
#: ../src/ld-window-main.c:180
#: ../src/ld-window-main.c:167
msgid "_View"
msgstr ""
#: ../src/ld-window-main.c:181
#: ../src/ld-window-main.c:168
msgid "_Zoom In"
msgstr ""
#: ../src/ld-window-main.c:182
#: ../src/ld-window-main.c:169
msgid "Zoom into the diagram"
msgstr ""
#: ../src/ld-window-main.c:184
#: ../src/ld-window-main.c:171
msgid "Zoom _Out"
msgstr ""
#: ../src/ld-window-main.c:185
#: ../src/ld-window-main.c:172
msgid "Zoom out of the diagram"
msgstr ""
#: ../src/ld-window-main.c:187
#: ../src/ld-window-main.c:174
msgid "_Normal Size"
msgstr ""
#: ../src/ld-window-main.c:188
#: ../src/ld-window-main.c:175
msgid "Reset zoom level back to the default"
msgstr ""
#: ../src/ld-window-main.c:191
#: ../src/ld-window-main.c:178
msgid "_Help"
msgstr ""
#: ../src/ld-window-main.c:192
msgid "_User Guide"
msgstr ""
#: ../src/ld-window-main.c:193
msgid "Open the manual"
msgstr ""
#: ../src/ld-window-main.c:195
#: ../src/ld-window-main.c:179
msgid "_About"
msgstr ""
#: ../src/ld-window-main.c:196
#: ../src/ld-window-main.c:180
msgid "Show a dialog about this application"
msgstr ""
#: ../src/ld-window-main.c:202
#: ../src/ld-window-main.c:186
msgid "_Main Toolbar"
msgstr ""
#: ../src/ld-window-main.c:203
#: ../src/ld-window-main.c:187
msgid "Toggle displaying of the main toolbar"
msgstr ""
#: ../src/ld-window-main.c:205
#: ../src/ld-window-main.c:189
msgid "_Library Pane"
msgstr ""
#: ../src/ld-window-main.c:206
#: ../src/ld-window-main.c:190
msgid "Toggle displaying of the library pane"
msgstr ""
#: ../src/ld-window-main.c:208
#: ../src/ld-window-main.c:192
msgid "Show _Grid"
msgstr ""
#: ../src/ld-window-main.c:209
#: ../src/ld-window-main.c:193
msgid "Toggle displaying of the grid"
msgstr ""
#: ../src/ld-window-main.c:370
#: ../src/ld-window-main.c:354
msgid "Drag symbols from the library pane to add them to the diagram."
msgstr ""
#: ../src/ld-window-main.c:622
#: ../src/ld-window-main.c:591
msgid "Unsaved Diagram"
msgstr ""
#: ../src/ld-window-main.c:654
#: ../src/ld-window-main.c:623
#, c-format
msgid ""
"Save the changes to diagram \"%s\" before closing it and creating a new one?"
msgstr ""
#: ../src/ld-window-main.c:693
#: ../src/ld-window-main.c:662
msgid "Failed to save the diagram"
msgstr ""
#: ../src/ld-window-main.c:696
#: ../src/ld-window-main.c:665
msgid "Try again or save it under another name."
msgstr ""
#: ../src/ld-window-main.c:729
#: ../src/ld-window-main.c:698
msgid "Failed to open the file"
msgstr ""
#: ../src/ld-window-main.c:738
#: ../src/ld-window-main.c:707
#, c-format
msgid "Failed to open file `%s': Invalid contents."
msgstr ""
#: ../src/ld-window-main.c:769
#: ../src/ld-window-main.c:738
msgid "Logdiag Diagrams (*.ldd)"
msgstr ""
#: ../src/ld-window-main.c:786
#: ../src/ld-window-main.c:755
#, c-format
msgid ""
"Save the changes to diagram \"%s\" before closing it and opening another one?"
msgstr ""
#: ../src/ld-window-main.c:790
#: ../src/ld-window-main.c:759
msgid "Open..."
msgstr ""
#: ../src/ld-window-main.c:823
#: ../src/ld-window-main.c:790
msgid "Save As..."
msgstr ""
#: ../src/ld-window-main.c:837
msgid "Untitled diagram"
msgstr ""
#: ../src/ld-window-main.c:890
#: ../src/ld-window-main.c:853
msgid "If you don't save, changes will be permanently lost."
msgstr ""
#: ../src/ld-window-main.c:892
#: ../src/ld-window-main.c:855
msgid "Close _without Saving"
msgstr ""
#: ../src/ld-window-main.c:930
#: ../src/ld-window-main.c:893
#, c-format
msgid "Save the changes to diagram \"%s\" before closing?"
msgstr ""
#: ../src/ld-window-main.c:968
#: ../src/ld-window-main.c:931
#, c-format
msgid "%d%%"
msgstr ""
#: ../src/ld-window-main.c:1042
msgid "Error"
msgstr ""
#: ../src/ld-window-main.c:1149
msgid "Failed to open the user guide"
msgstr ""
#: ../src/ld-window-main.c:1163
#: ../src/ld-window-main.c:977
msgid "translator-credits"
msgstr ""
@ -264,7 +236,7 @@ msgstr ""
msgid "[FILE...]"
msgstr ""
#: ../src/logdiag.c:147
#: ../src/logdiag.c:146
msgid "- Schematic editor"
msgstr ""

View File

@ -1,21 +1,36 @@
#!/bin/sh -e
# This shell script generates the translation template.
#
# The reason for this not being inside CMakeLists.txt is that the translator
# should not need to run the whole configuration process just to get this file.
dir=$(dirname $0)
#!/bin/bash
# This script makes a translation template
# The reason for this not being inside CMakeLists.txt
# is that the translator should not need to run
# the whole configure process to get this single stupid file.
export LC_ALL=C
# Source files
SOURCES=$(echo ../{src,liblogdiag}/*.c)
re='^[ \t]*project *( *\([^ \t)]\{1,\}\) \{1,\}VERSION \{1,\}\([^ \t)]\{1,\}\).*'
package=$(sed -n "s/$re/\\1/p" "$dir/../CMakeLists.txt")
version=$(sed -n "s/$re/\\2/p" "$dir/../CMakeLists.txt")
if [ -z "$package" -o -z "$version" ]; then
echo "Failed to get information from CMakeLists.txt"
exit 1
# Get the package name from CMakeLists.txt
PACKAGE=$(sed -n '/^[ \t]*[pP][rR][oO][jJ][eE][cC][tT][ \t]*([ \t]*\([^ \t)]\{1,\}\).*).*/{s//\1/p;q}' \
../CMakeLists.txt)
# Get the package version from CMakeLists.txt
EXP_BEG='/^[ \t]*[sS][eE][tT][ \t]*([ \t]*project_VERSION_'
EXP_END='[ \t]\{1,\}"\{0,1\}\([^)"]\{1,\}\)"\{0,1\}).*/{s//\1/p;q}'
MAJOR=$(sed -n "${EXP_BEG}MAJOR${EXP_END}" ../CMakeLists.txt)
MINOR=$(sed -n "${EXP_BEG}MINOR${EXP_END}" ../CMakeLists.txt)
PATCH=$(sed -n "${EXP_BEG}PATCH${EXP_END}" ../CMakeLists.txt)
if [ "$MAJOR" != "" ]; then
VERSION=$MAJOR
if [ "$MINOR" != "" ]; then
VERSION=$VERSION.$MINOR
if [ "$PATCH" != "" ]; then
VERSION=$VERSION.$PATCH
fi
fi
fi
xgettext -LC -k_ -kN_ "$dir"/../{src,liblogdiag}/*.c -o "$dir/$package.pot" \
--package-name="$package" --package-version="$version" \
--copyright-holder="Přemysl Eric Janouch" \
--msgid-bugs-address="https://git.janouch.name/p/$package/issues"
# Finally make the template
xgettext -LC -k_ -kN_ $SOURCES -o "$PACKAGE".pot \
--package-name="$PACKAGE" --package-version="$VERSION" \
--copyright-holder="Přemysl Janouch"

166
po/pl.po
View File

@ -1,44 +1,44 @@
# Polish translation for logdiag.
# Copyright (C) 2011 Přemysl Eric Janouch
# Copyright (C) 2011 Přemysl Janouch
# This file is distributed under the same license as the logdiag package.
# Robert Svoboda <ravath@gmail.com>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: logdiag\n"
"Report-Msgid-Bugs-To: https://git.janouch.name/p/logdiag/issues\n"
"POT-Creation-Date: 2021-10-28 20:07+0200\n"
"PO-Revision-Date: 2021-10-28 20:38+0200\n"
"Last-Translator: Přemysl Eric Janouch <p@janouch.name>\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-27 04:52+0200\n"
"PO-Revision-Date: 2018-06-25 04:09+0200\n"
"Last-Translator: Přemysl Janouch <p@janouch.name>\n"
"Language-Team: Polish <pl@li.org>\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.0\n"
"X-Generator: Poedit 2.0.8\n"
#: ../src/ld-window-main.c:968
#: ../src/ld-window-main.c:931
#, c-format
msgid "%d%%"
msgstr "%d%%"
#: ../src/logdiag.c:147
#: ../src/logdiag.c:146
msgid "- Schematic editor"
msgstr "- Edytor schematów"
#: ../src/ld-window-main.c:892
#: ../src/ld-window-main.c:855
msgid "Close _without Saving"
msgstr "Zamknąć _bez zapisu"
#: ../src/ld-window-main.c:141
#: ../src/ld-window-main.c:128
msgid "Create a new diagram"
msgstr "Stworzenie nowego wykresu"
#: ../src/ld-window-main.c:174
#: ../src/ld-window-main.c:161
msgid "Delete the contents of the selection"
msgstr "Usuń zawartość wyboru"
#: ../src/ld-window-main.c:370
#: ../src/ld-window-main.c:354
msgid "Drag symbols from the library pane to add them to the diagram."
msgstr "Przeciągnij symbole z panelu biblioteki, aby dodać je do diagramu."
@ -46,147 +46,131 @@ msgstr "Przeciągnij symbole z panelu biblioteki, aby dodać je do diagramu."
msgid "Empty"
msgstr "Puste"
#: ../src/ld-window-main.c:1042
msgid "Error"
msgstr "Błąd"
#: ../src/ld-window-main.c:738
#: ../src/ld-window-main.c:707
#, c-format
msgid "Failed to open file `%s': Invalid contents."
msgstr "Nie można otworzyć pliku \"%s\": Niepoprawna zawartość."
#: ../src/ld-window-main.c:729
#: ../src/ld-window-main.c:698
msgid "Failed to open the file"
msgstr "Pliku nie da się otworzyć"
#: ../src/ld-window-main.c:1149
msgid "Failed to open the user guide"
msgstr "Przewodniku użytkownika nie da się otworzyć"
#: ../src/ld-window-main.c:693
#: ../src/ld-window-main.c:662
msgid "Failed to save the diagram"
msgstr "Nie udało się zapisać wykresu"
#: ../src/ld-window-main.c:890
#: ../src/ld-window-main.c:853
msgid "If you don't save, changes will be permanently lost."
msgstr "Jeżeli nie zapiszesz zmian, zostaną one trwale utracone."
msgstr "Jeżeli nie zapiszesz zmian, zostaną one trwale utracone"
#: ../src/ld-window-main.c:769
#: ../src/ld-window-main.c:738
msgid "Logdiag Diagrams (*.ldd)"
msgstr "Wykresy logdiag (*.ldd)"
#: ../src/ld-window-main.c:144
#: ../src/ld-window-main.c:131
msgid "Open a diagram"
msgstr "Otwórz wykres"
#: ../src/ld-window-main.c:193
msgid "Open the manual"
msgstr "Otworzy podręcznik"
#: ../src/ld-window-main.c:790
#: ../src/ld-window-main.c:759
msgid "Open..."
msgstr "Otworzyć..."
#: ../src/ld-window-main.c:154
msgid "Print the diagram"
msgstr "Wydrukuje wykres"
#: ../src/ld-window-main.c:158
#: ../src/ld-window-main.c:145
msgid "Quit the application"
msgstr "Zamknie aplikację"
#: ../src/ld-window-main.c:166
#: ../src/ld-window-main.c:153
msgid "Redo the last undone action"
msgstr "Powtórzy ostatnio cofniętą akcję"
#: ../src/ld-window-main.c:188
#: ../src/ld-window-main.c:175
msgid "Reset zoom level back to the default"
msgstr "Przywróci poziom zbliżenia na poziom wyjściowy"
#: ../src/ld-window-main.c:823
#: ../src/ld-window-main.c:790
msgid "Save As..."
msgstr "Zapisz jako..."
#: ../src/ld-window-main.c:149
#: ../src/ld-window-main.c:136
msgid "Save _As..."
msgstr "Zapisz _jako..."
#: ../src/ld-window-main.c:654
#: ../src/ld-window-main.c:623
#, c-format
msgid "Save the changes to diagram \"%s\" before closing it and creating a new one?"
msgstr "Zapisać zmiany w wykresie \"%s\" przed jego zamknięciem i stworzeniem nowego?"
msgid ""
"Save the changes to diagram \"%s\" before closing it and creating a new one?"
msgstr ""
"Zapisać zmiany w wykresie \"%s\" przed jego zamknięciem i stworzeniem nowego?"
#: ../src/ld-window-main.c:786
#: ../src/ld-window-main.c:755
#, c-format
msgid "Save the changes to diagram \"%s\" before closing it and opening another one?"
msgstr "Zapisać zmiany w wykresie \"%s\" przed jego zamknięciem i stworzeniem nowego?"
msgid ""
"Save the changes to diagram \"%s\" before closing it and opening another one?"
msgstr ""
"Zapisać zmiany w wykresie \"%s\" przed jego zamknięciem i stworzeniem nowego?"
#: ../src/ld-window-main.c:930
#: ../src/ld-window-main.c:893
#, c-format
msgid "Save the changes to diagram \"%s\" before closing?"
msgstr "Zapisać zmiany w wykresie \"%s\" przed jego zamknięciem?"
#: ../src/ld-window-main.c:147
#: ../src/ld-window-main.c:134
msgid "Save the current diagram"
msgstr "Zapisz aktywny wykres"
#: ../src/ld-window-main.c:150
#: ../src/ld-window-main.c:137
msgid "Save the current diagram with another name"
msgstr "Zapisać aktywny wykres pod inną nazwą"
#: ../src/ld-window-main.c:176
#: ../src/ld-window-main.c:163
msgid "Select _All"
msgstr "Wybierz _wszystko"
#: ../src/ld-window-main.c:177
#: ../src/ld-window-main.c:164
msgid "Select all objects in the diagram"
msgstr "Wybierze wszystkie obietky w wykresie"
#: ../src/ld-window-main.c:208
#: ../src/ld-window-main.c:192
msgid "Show _Grid"
msgstr "Pokaż _siatkę"
msgstr "Pokaż _Siatkę"
#: ../src/ld-window-main.c:196
#: ../src/ld-window-main.c:180
msgid "Show a dialog about this application"
msgstr "Pokaże informacje o tej aplikacji"
#: ../src/ld-window-main.c:209
#: ../src/ld-window-main.c:193
msgid "Toggle displaying of the grid"
msgstr "Przełączy pokazywanie siatki"
#: ../src/ld-window-main.c:206
#: ../src/ld-window-main.c:190
msgid "Toggle displaying of the library pane"
msgstr "Przełączy pokazywanie panelu biblioteki"
#: ../src/ld-window-main.c:203
#: ../src/ld-window-main.c:187
msgid "Toggle displaying of the main toolbar"
msgstr "Przełączy pokazywanie głównego panelu narzędzi"
#: ../src/ld-window-main.c:696
#: ../src/ld-window-main.c:665
msgid "Try again or save it under another name."
msgstr "Spróbuj ponownie, bądź zapisz pod inną nazwą."
#: ../src/ld-window-main.c:163
#: ../src/ld-window-main.c:150
msgid "Undo the last action"
msgstr "Cofnie ostatnią akcję"
#: ../src/ld-window-main.c:622
#: ../src/ld-window-main.c:591
msgid "Unsaved Diagram"
msgstr "Niezapisany wykres"
msgstr "Niezapisany Wykres"
#: ../src/ld-window-main.c:837
msgid "Untitled diagram"
msgstr "Wykres bez nazwy"
#: ../src/ld-window-main.c:184
#: ../src/ld-window-main.c:171
msgid "Zoom _Out"
msgstr "_Oddalić widok"
#: ../src/ld-window-main.c:182
#: ../src/ld-window-main.c:169
msgid "Zoom into the diagram"
msgstr "Przybliżyć widok"
#: ../src/ld-window-main.c:185
#: ../src/ld-window-main.c:172
msgid "Zoom out of the diagram"
msgstr "Oddalić widok"
@ -194,79 +178,71 @@ msgstr "Oddalić widok"
msgid "[FILE...]"
msgstr "[PLIK...]"
#: ../src/ld-window-main.c:195
#: ../src/ld-window-main.c:179
msgid "_About"
msgstr "_O programie"
#: ../src/ld-window-main.c:173
#: ../src/ld-window-main.c:160
msgid "_Delete"
msgstr "_Usuń"
#: ../src/ld-window-main.c:161
#: ../src/ld-window-main.c:148
msgid "_Edit"
msgstr "_Edycja"
#: ../src/ld-window-main.c:139
#: ../src/ld-window-main.c:126
msgid "_File"
msgstr "_Plik"
#: ../src/ld-window-main.c:191
#: ../src/ld-window-main.c:178
msgid "_Help"
msgstr "_Pomoc"
#: ../src/ld-window-main.c:205
#: ../src/ld-window-main.c:189
msgid "_Library Pane"
msgstr "Panel _biblioteki"
#: ../src/ld-window-main.c:202
#: ../src/ld-window-main.c:186
msgid "_Main Toolbar"
msgstr "_Główny panel narzędzi"
#: ../src/ld-window-main.c:140
#: ../src/ld-window-main.c:127
msgid "_New"
msgstr "_Nowy"
#: ../src/ld-window-main.c:187
#: ../src/ld-window-main.c:174
msgid "_Normal Size"
msgstr "_Normalna wielkość"
msgstr "_Normalna Wielkość"
#: ../src/ld-window-main.c:143
#: ../src/ld-window-main.c:130
msgid "_Open..."
msgstr "_Otwórz..."
#: ../src/ld-window-main.c:153
msgid "_Print..."
msgstr "Wy_drukuj..."
#: ../src/ld-window-main.c:157
#: ../src/ld-window-main.c:144
msgid "_Quit"
msgstr "_Zakończ"
#: ../src/ld-window-main.c:165
#: ../src/ld-window-main.c:152
msgid "_Redo"
msgstr "_Powtórz"
#: ../src/ld-window-main.c:146
#: ../src/ld-window-main.c:133
msgid "_Save"
msgstr "Z_apisz"
#: ../src/ld-window-main.c:162
#: ../src/ld-window-main.c:149
msgid "_Undo"
msgstr "_Wróć"
#: ../src/ld-window-main.c:192
msgid "_User Guide"
msgstr "_Przewodnik użytkownika"
#: ../src/ld-window-main.c:180
#: ../src/ld-window-main.c:167
msgid "_View"
msgstr "_Widok"
#: ../src/ld-window-main.c:181
#: ../src/ld-window-main.c:168
msgid "_Zoom In"
msgstr "_Przybliżyć"
#: ../src/ld-window-main.c:1163
#: ../src/ld-window-main.c:977
msgid "translator-credits"
msgstr "Robert Svoboda <ravath@gmail.com>"

155
po/sk.po
View File

@ -1,44 +1,44 @@
# Slovak translation for logdiag.
# Copyright (C) 2011 Přemysl Eric Janouch
# Copyright (C) 2011 Přemysl Janouch
# This file is distributed under the same license as the logdiag package.
# Miroslav Rigler <itsgoingd@luzer.sk>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: logdiag\n"
"Report-Msgid-Bugs-To: https://git.janouch.name/p/logdiag/issues\n"
"POT-Creation-Date: 2021-10-28 20:07+0200\n"
"PO-Revision-Date: 2021-10-28 20:23+0200\n"
"Last-Translator: Přemysl Eric Janouch <p@janouch.name>\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-27 04:52+0200\n"
"PO-Revision-Date: 2018-06-25 04:05+0200\n"
"Last-Translator: Přemysl Janouch <p@janouch.name>\n"
"Language-Team: Slovak <sk@li.org>\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.0\n"
"X-Generator: Poedit 2.0.8\n"
#: ../src/ld-window-main.c:968
#: ../src/ld-window-main.c:931
#, c-format
msgid "%d%%"
msgstr "%d %%"
#: ../src/logdiag.c:147
#: ../src/logdiag.c:146
msgid "- Schematic editor"
msgstr "- Editor schém"
#: ../src/ld-window-main.c:892
#: ../src/ld-window-main.c:855
msgid "Close _without Saving"
msgstr "Zatvoriť _bez uloženia"
#: ../src/ld-window-main.c:141
#: ../src/ld-window-main.c:128
msgid "Create a new diagram"
msgstr "Vytvorí nový diagram"
#: ../src/ld-window-main.c:174
#: ../src/ld-window-main.c:161
msgid "Delete the contents of the selection"
msgstr "Odstráni obsah výberu"
#: ../src/ld-window-main.c:370
#: ../src/ld-window-main.c:354
msgid "Drag symbols from the library pane to add them to the diagram."
msgstr "Pre pridanie symbolov do diagramu ich pretiahnite z panela knižnice."
@ -46,147 +46,130 @@ msgstr "Pre pridanie symbolov do diagramu ich pretiahnite z panela knižnice."
msgid "Empty"
msgstr "Prázdne"
#: ../src/ld-window-main.c:1042
msgid "Error"
msgstr "Chyba"
#: ../src/ld-window-main.c:738
#: ../src/ld-window-main.c:707
#, c-format
msgid "Failed to open file `%s': Invalid contents."
msgstr "Nepodarilo sa otvoriť súbor \"%s\": Neplatný obsah."
#: ../src/ld-window-main.c:729
#: ../src/ld-window-main.c:698
msgid "Failed to open the file"
msgstr "Nepodarilo sa otvoriť súbor"
#: ../src/ld-window-main.c:1149
msgid "Failed to open the user guide"
msgstr "Nepodarilo sa otvoriť príručku používateľa"
#: ../src/ld-window-main.c:693
#: ../src/ld-window-main.c:662
msgid "Failed to save the diagram"
msgstr "Nepodarilo sa uložiť diagram"
#: ../src/ld-window-main.c:890
#: ../src/ld-window-main.c:853
msgid "If you don't save, changes will be permanently lost."
msgstr "Ak ich neuložíte, budú zmeny navždy stratené."
#: ../src/ld-window-main.c:769
#: ../src/ld-window-main.c:738
msgid "Logdiag Diagrams (*.ldd)"
msgstr "Diagramy logdiag (*.ldd)"
#: ../src/ld-window-main.c:144
#: ../src/ld-window-main.c:131
msgid "Open a diagram"
msgstr "Otvorí diagram"
#: ../src/ld-window-main.c:193
msgid "Open the manual"
msgstr "Otvorí manuál"
#: ../src/ld-window-main.c:790
#: ../src/ld-window-main.c:759
msgid "Open..."
msgstr "Otvoriť..."
#: ../src/ld-window-main.c:154
msgid "Print the diagram"
msgstr "Vytlačí diagram"
#: ../src/ld-window-main.c:158
#: ../src/ld-window-main.c:145
msgid "Quit the application"
msgstr "Ukončí aplikáciu"
#: ../src/ld-window-main.c:166
#: ../src/ld-window-main.c:153
msgid "Redo the last undone action"
msgstr "Vykoná naposledy vrátenú akciu"
#: ../src/ld-window-main.c:188
#: ../src/ld-window-main.c:175
msgid "Reset zoom level back to the default"
msgstr "Vráti priblíženie na východiskovú hodnotu"
#: ../src/ld-window-main.c:823
#: ../src/ld-window-main.c:790
msgid "Save As..."
msgstr "Uložiť ako..."
#: ../src/ld-window-main.c:149
#: ../src/ld-window-main.c:136
msgid "Save _As..."
msgstr "Uložiť _ako..."
#: ../src/ld-window-main.c:654
#: ../src/ld-window-main.c:623
#, c-format
msgid "Save the changes to diagram \"%s\" before closing it and creating a new one?"
msgstr "Uložiť zmeny v diagrame \"%s\" pred jeho zatvorením a vytvorením nového?"
msgid ""
"Save the changes to diagram \"%s\" before closing it and creating a new one?"
msgstr ""
"Uložiť zmeny v diagrame \"%s\" pred jeho zatvorením a vytvorením nového?"
#: ../src/ld-window-main.c:786
#: ../src/ld-window-main.c:755
#, c-format
msgid "Save the changes to diagram \"%s\" before closing it and opening another one?"
msgid ""
"Save the changes to diagram \"%s\" before closing it and opening another one?"
msgstr "Uložiť zmeny v diagrame \"%s\" pred jeho zatvorením a otvorením iného?"
#: ../src/ld-window-main.c:930
#: ../src/ld-window-main.c:893
#, c-format
msgid "Save the changes to diagram \"%s\" before closing?"
msgstr "Uložiť zmeny v diagrame \"%s\" pred jeho zatvorením?"
#: ../src/ld-window-main.c:147
#: ../src/ld-window-main.c:134
msgid "Save the current diagram"
msgstr "Uloží aktuálny diagram"
#: ../src/ld-window-main.c:150
#: ../src/ld-window-main.c:137
msgid "Save the current diagram with another name"
msgstr "Uloží aktuálny diagram pod iným menom"
#: ../src/ld-window-main.c:176
#: ../src/ld-window-main.c:163
msgid "Select _All"
msgstr "Vybrať _všetko"
#: ../src/ld-window-main.c:177
#: ../src/ld-window-main.c:164
msgid "Select all objects in the diagram"
msgstr "Vyberie všetky objekty v diagrame"
#: ../src/ld-window-main.c:208
#: ../src/ld-window-main.c:192
msgid "Show _Grid"
msgstr "Zobraziť _mriežku"
#: ../src/ld-window-main.c:196
#: ../src/ld-window-main.c:180
msgid "Show a dialog about this application"
msgstr "Zobrazí dialóg o tejto aplikácii"
#: ../src/ld-window-main.c:209
#: ../src/ld-window-main.c:193
msgid "Toggle displaying of the grid"
msgstr "Prepne zobrazovanie mriežky"
#: ../src/ld-window-main.c:206
#: ../src/ld-window-main.c:190
msgid "Toggle displaying of the library pane"
msgstr "Prepne zobrazovanie panelu knižnice"
#: ../src/ld-window-main.c:203
#: ../src/ld-window-main.c:187
msgid "Toggle displaying of the main toolbar"
msgstr "Prepne zobrazovanie hlavného panelu nástrojov"
#: ../src/ld-window-main.c:696
#: ../src/ld-window-main.c:665
msgid "Try again or save it under another name."
msgstr "Skúste to znova alebo ho uložte pod iným názvom."
#: ../src/ld-window-main.c:163
#: ../src/ld-window-main.c:150
msgid "Undo the last action"
msgstr "Vráti poslednú akciu"
#: ../src/ld-window-main.c:622
#: ../src/ld-window-main.c:591
msgid "Unsaved Diagram"
msgstr "Neuložený diagram"
#: ../src/ld-window-main.c:837
msgid "Untitled diagram"
msgstr "Nepomenovaný diagram"
#: ../src/ld-window-main.c:184
#: ../src/ld-window-main.c:171
msgid "Zoom _Out"
msgstr "_Oddialiť"
#: ../src/ld-window-main.c:182
#: ../src/ld-window-main.c:169
msgid "Zoom into the diagram"
msgstr "Priblíži diagram"
#: ../src/ld-window-main.c:185
#: ../src/ld-window-main.c:172
msgid "Zoom out of the diagram"
msgstr "Oddiali diagram"
@ -194,79 +177,71 @@ msgstr "Oddiali diagram"
msgid "[FILE...]"
msgstr "[SÚBOR...]"
#: ../src/ld-window-main.c:195
#: ../src/ld-window-main.c:179
msgid "_About"
msgstr "_O programe"
#: ../src/ld-window-main.c:173
#: ../src/ld-window-main.c:160
msgid "_Delete"
msgstr "_Zmazať"
#: ../src/ld-window-main.c:161
#: ../src/ld-window-main.c:148
msgid "_Edit"
msgstr "_Úpravy"
#: ../src/ld-window-main.c:139
#: ../src/ld-window-main.c:126
msgid "_File"
msgstr "_Súbor"
#: ../src/ld-window-main.c:191
#: ../src/ld-window-main.c:178
msgid "_Help"
msgstr "_Nápoveda"
#: ../src/ld-window-main.c:205
#: ../src/ld-window-main.c:189
msgid "_Library Pane"
msgstr "Panel _knižnice"
#: ../src/ld-window-main.c:202
#: ../src/ld-window-main.c:186
msgid "_Main Toolbar"
msgstr "_Hlavný panel nástrojov"
#: ../src/ld-window-main.c:140
#: ../src/ld-window-main.c:127
msgid "_New"
msgstr "_Nový"
#: ../src/ld-window-main.c:187
#: ../src/ld-window-main.c:174
msgid "_Normal Size"
msgstr "_Normálna veľkosť"
#: ../src/ld-window-main.c:143
#: ../src/ld-window-main.c:130
msgid "_Open..."
msgstr "_Otvoriť..."
#: ../src/ld-window-main.c:153
msgid "_Print..."
msgstr "_Tlačiť..."
#: ../src/ld-window-main.c:157
#: ../src/ld-window-main.c:144
msgid "_Quit"
msgstr "U_končiť"
#: ../src/ld-window-main.c:165
#: ../src/ld-window-main.c:152
msgid "_Redo"
msgstr "Z_novu"
#: ../src/ld-window-main.c:146
#: ../src/ld-window-main.c:133
msgid "_Save"
msgstr "_Uložiť"
#: ../src/ld-window-main.c:162
#: ../src/ld-window-main.c:149
msgid "_Undo"
msgstr "_Späť"
#: ../src/ld-window-main.c:192
msgid "_User Guide"
msgstr "_Príručka používateľa"
#: ../src/ld-window-main.c:180
#: ../src/ld-window-main.c:167
msgid "_View"
msgstr "_Zobrazenie"
#: ../src/ld-window-main.c:181
#: ../src/ld-window-main.c:168
msgid "_Zoom In"
msgstr "_Priblížiť"
#: ../src/ld-window-main.c:1163
#: ../src/ld-window-main.c:977
msgid "translator-credits"
msgstr "Miroslav Rigler <itsgoingd@luzer.sk>"

View File

@ -1,16 +1,18 @@
<ui>
<menubar name="MenuBar">
<menu action="FileMenu">
<menu name="FileMenu" action="FileMenu">
<menuitem action="New" />
<menuitem action="Open" />
<menuitem action="Save" />
<menuitem action="SaveAs" />
<separator />
<menuitem action="Print" />
<!--
<menuitem action="Export" />
<separator />
-->
<menuitem action="Quit" />
</menu>
<menu action="EditMenu">
<menu name="EditMenu" action="EditMenu">
<menuitem action="Undo" />
<menuitem action="Redo" />
<separator />
@ -23,7 +25,7 @@
<separator />
<menuitem action="SelectAll" />
</menu>
<menu action="ViewMenu">
<menu name="ViewMenu" action="ViewMenu">
<menuitem action="MainToolbar" />
<menuitem action="LibraryPane" />
<separator />
@ -33,8 +35,7 @@
<menuitem action="ZoomOut" />
<menuitem action="NormalSize" />
</menu>
<menu action="HelpMenu">
<menuitem action="UserGuide" />
<menu name="HelpMenu" action="HelpMenu">
<menuitem action="About" />
</menu>
</menubar>

View File

@ -23,7 +23,6 @@ local render = function (cr)
cr:curve_to (3, 0, 2, 2, 0, 2)
cr:line_to (-2, 2)
cr:curve_to (-1, 1, -1, -1, -2, -2)
cr:close_path ()
cr:stroke ()
-- The terminals

View File

@ -21,7 +21,8 @@ local render = function (cr)
cr:line_to (-1, 0)
-- The terminals
cr:line_to (-2, 0)
cr:move_to (-2, 0)
cr:line_to (-1, 0)
cr:move_to (1, 0)
cr:line_to (2, 0)

View File

@ -48,7 +48,7 @@ local render = function (cr)
cr:move_to (-1, -1)
cr:line_to (1, 0)
cr:line_to (-1, 1)
cr:close_path ()
cr:line_to (-1, -1)
-- The vertical line
cr:move_to (1, 1)

View File

@ -42,7 +42,7 @@ local render = function (cr)
cr:line_to (1.5, -0.5)
cr:line_to (1.5, 0.5)
cr:line_to (-1.5, 0.5)
cr:close_path ()
cr:line_to (-1.5, -0.5)
-- The terminals
cr:move_to (-2, 0)

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/logdiag">
<file>logdiag.ui</file>
<file alias="LICENSE">../LICENSE</file>
</gresource>
</gresources>

View File

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="logdiag" version="1.0.0.0" type="win32" />
<dependency>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Windows.Common-Controls"
version="6.0.0.0" type="win32" processorArchitecture="*"
publicKeyToken="6595b64144ccf1df" language="*" />
</dependentAssembly>
</dependency>
</assembly>

View File

@ -1,3 +1 @@
#include <windows.h>
LD_ICON ICON "logdiag.ico"
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "logdiag.manifest"

View File

@ -1,5 +1,5 @@
<schemalist>
<schema id="name.janouch.logdiag" path="/name/janouch/logdiag/" gettext-domain="logdiag">
<schema id="org.logdiag" path="/apps/logdiag/" gettext-domain="logdiag">
<key name="show-main-toolbar" type="b">
<default>true</default>
<summary>Whether to show the main toolbar</summary>
@ -14,3 +14,4 @@
</key>
</schema>
</schemalist>

View File

@ -2,7 +2,7 @@
* ld-window-main.c
*
* This file is a part of logdiag.
* Copyright 2010 - 2021 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011, 2012
*
* See the file LICENSE for licensing information.
*
@ -13,11 +13,6 @@
#include "ld-window-main.h"
#ifdef G_OS_WIN32
#include <gdk/gdkwin32.h>
#include <shellapi.h>
#endif
struct _LdWindowMainPrivate
{
@ -56,8 +51,6 @@ struct _LdWindowMainPrivate
static void ld_window_main_finalize (GObject *gobject);
static void load_library_directories (LdLibrary *library);
static void display_and_free_error (LdWindowMain *self, const gchar *title,
GError *error);
static void on_ui_proxy_connected (GtkUIManager *ui, GtkAction *action,
GtkWidget *proxy, LdWindowMain *window);
@ -106,14 +99,8 @@ static void on_action_new (GtkAction *action, LdWindowMain *self);
static void on_action_open (GtkAction *action, LdWindowMain *self);
static void on_action_save (GtkAction *action, LdWindowMain *self);
static void on_action_save_as (GtkAction *action, LdWindowMain *self);
static void on_action_print (GtkAction *action, LdWindowMain *self);
static void on_action_print_draw_page (GtkPrintOperation *operation,
GtkPrintContext *context, int page_nr, LdWindowMain *self);
static void on_action_quit (GtkAction *action, LdWindowMain *self);
static void on_action_user_guide (GtkAction *action, LdWindowMain *self);
static void on_action_about (GtkAction *action, LdWindowMain *self);
static gboolean on_action_about_activate_link (GtkAboutDialog *dialog,
gchar *uri, LdWindowMain *self);
static void on_action_undo (GtkAction *action, LdWindowMain *self);
static void on_action_redo (GtkAction *action, LdWindowMain *self);
@ -149,11 +136,11 @@ static GtkActionEntry wm_action_entries[] =
{"SaveAs", GTK_STOCK_SAVE_AS, N_("Save _As..."), "<Shift><Ctrl>S",
N_("Save the current diagram with another name"),
G_CALLBACK (on_action_save_as)},
{"Print", GTK_STOCK_PRINT, N_("_Print..."), "<Ctrl>P",
N_("Print the diagram"),
G_CALLBACK (on_action_print)},
/*
* {"Export", NULL, N_("_Export"), NULL,
* N_("Export the diagram"),
* NULL},
*/
{"Quit", GTK_STOCK_QUIT, N_("_Quit"), "<Ctrl>Q",
N_("Quit the application"),
G_CALLBACK (on_action_quit)},
@ -189,12 +176,9 @@ static GtkActionEntry wm_action_entries[] =
G_CALLBACK (on_action_normal_size)},
{"HelpMenu", NULL, N_("_Help"), NULL, NULL, NULL},
{"UserGuide", GTK_STOCK_HELP, N_("_User Guide"), NULL,
N_("Open the manual"),
G_CALLBACK (on_action_user_guide)},
{"About", GTK_STOCK_ABOUT, N_("_About"), NULL,
N_("Show a dialog about this application"),
G_CALLBACK (on_action_about)},
G_CALLBACK (on_action_about)}
};
static GtkToggleActionEntry wm_toggle_action_entries[] =
@ -205,7 +189,7 @@ static GtkToggleActionEntry wm_toggle_action_entries[] =
{"LibraryPane", NULL, N_("_Library Pane"), NULL,
N_("Toggle displaying of the library pane"),
G_CALLBACK (on_action_library_pane), TRUE},
{"ShowGrid", NULL, N_("Show _Grid"), "numbersign",
{"ShowGrid", NULL, N_("Show _Grid"), NULL,
N_("Toggle displaying of the grid"),
G_CALLBACK (on_action_grid), TRUE}
};
@ -231,7 +215,7 @@ ld_window_main_new (const gchar *filename)
return self;
}
G_DEFINE_TYPE (LdWindowMain, ld_window_main, GTK_TYPE_WINDOW)
G_DEFINE_TYPE (LdWindowMain, ld_window_main, GTK_TYPE_WINDOW);
static void
ld_window_main_class_init (LdWindowMainClass *klass)
@ -274,8 +258,8 @@ ld_window_main_init (LdWindowMain *self)
priv->action_group, 0);
error = NULL;
gtk_ui_manager_add_ui_from_resource
(priv->ui_manager, "/logdiag/logdiag.ui", &error);
gtk_ui_manager_add_ui_from_file
(priv->ui_manager, PROJECT_SHARE_DIR "gui/window-main.ui", &error);
if (error)
{
g_message ("building UI failed: %s", error->message);
@ -389,7 +373,7 @@ ld_window_main_init (LdWindowMain *self)
gtk_widget_show_all (GTK_WIDGET (self));
/* Set up GSettings. */
priv->settings = g_settings_new (PROJECT_ID);
priv->settings = g_settings_new ("org." PROJECT_NAME);
g_settings_bind (priv->settings, "show-main-toolbar",
gtk_action_group_get_action (priv->action_group,
@ -451,21 +435,6 @@ load_library_directories (LdLibrary *library)
g_free (user_dir);
}
static void
display_and_free_error (LdWindowMain *self, const gchar *title, GError *error)
{
GtkWidget *message_dialog;
message_dialog = gtk_message_dialog_new (GTK_WINDOW (self),
GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s", title);
gtk_message_dialog_format_secondary_text
(GTK_MESSAGE_DIALOG (message_dialog), "%s", error->message);
g_error_free (error);
gtk_dialog_run (GTK_DIALOG (message_dialog));
gtk_widget_destroy (message_dialog);
}
/*
* on_delete:
*
@ -618,8 +587,8 @@ diagram_get_name (LdWindowMain *self)
if (self->priv->filename)
return g_filename_display_basename (self->priv->filename);
return g_strdup (_("Unsaved Diagram"));
else
return g_strdup (_("Unsaved Diagram"));
}
/*
@ -698,10 +667,12 @@ diagram_save (LdWindowMain *self, GtkWindow *dialog_parent,
gtk_widget_destroy (message_dialog);
return FALSE;
}
ld_diagram_set_modified (self->priv->diagram, FALSE);
update_title (self);
return TRUE;
else
{
ld_diagram_set_modified (self->priv->diagram, FALSE);
update_title (self);
return TRUE;
}
}
/*
@ -712,10 +683,9 @@ diagram_save (LdWindowMain *self, GtkWindow *dialog_parent,
static gboolean
diagram_open (LdWindowMain *self, const gchar *filename)
{
GError *error = NULL;
GFile *file;
gchar *uri;
GError *error;
error = NULL;
ld_diagram_load_from_file (self->priv->diagram, filename, &error);
if (error)
{
@ -749,17 +719,8 @@ diagram_open (LdWindowMain *self, const gchar *filename)
return FALSE;
}
file = g_file_new_for_path (filename);
uri = g_file_get_uri (file);
g_object_unref (file);
gtk_recent_manager_add_item (gtk_recent_manager_get_default (), uri);
g_free (uri);
ld_diagram_set_modified (self->priv->diagram, FALSE);
diagram_set_filename (self, g_strdup (filename));
ld_diagram_view_set_x (self->priv->view, 0);
ld_diagram_view_set_y (self->priv->view, 0);
return TRUE;
}
@ -823,8 +784,6 @@ static void
diagram_show_save_as_dialog (LdWindowMain *self)
{
GtkWidget *dialog;
GtkFileChooser *file_chooser;
gchar *filename;
g_return_if_fail (LD_IS_WINDOW_MAIN (self));
@ -837,19 +796,15 @@ diagram_show_save_as_dialog (LdWindowMain *self)
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog),
diagram_get_file_filter ());
file_chooser = GTK_FILE_CHOOSER (dialog);
if (self->priv->filename)
gtk_file_chooser_set_filename (file_chooser, self->priv->filename);
else
{
filename = g_strdup_printf ("%s.ldd", _("Untitled diagram"));
gtk_file_chooser_set_current_name (file_chooser, filename);
g_free (filename);
}
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog),
self->priv->filename);
while (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
{
filename = gtk_file_chooser_get_filename (file_chooser);
gchar *filename;
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
if (diagram_save (self, GTK_WINDOW (dialog), filename))
{
diagram_set_filename (self, filename);
@ -1005,89 +960,6 @@ on_action_save_as (GtkAction *action, LdWindowMain *self)
diagram_show_save_as_dialog (self);
}
static void
on_action_print (GtkAction *action, LdWindowMain *self)
{
static GtkPrintSettings *settings = NULL;
GError *error = NULL;
GtkPrintOperation *print;
GtkPrintOperationResult res;
gchar *name;
print = gtk_print_operation_new ();
gtk_print_operation_set_n_pages (print, 1);
gtk_print_operation_set_embed_page_setup (print, TRUE);
gtk_print_operation_set_unit (print, GTK_UNIT_MM);
name = diagram_get_name (self);
gtk_print_operation_set_job_name (print, name);
g_free (name);
if (settings != NULL)
gtk_print_operation_set_print_settings (print, settings);
g_signal_connect (print, "draw-page",
G_CALLBACK (on_action_print_draw_page), self);
/* On Windows, it is not possible to get a print preview from the system
* print dialog. But in Windows XP previews do not work at all--unreadable
* EMFs come out. Windows 10 errors out with "A sharing violation occurred
* while accessing" the temporary EMF file on our first run of
* GtkPrintOperation, and following that it opens the previews up in
* fucking Paint, so there is no point in trying. It lacks a stage
* or controls for setting up page parameters anyway.
*/
res = gtk_print_operation_run (print,
GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
GTK_WINDOW (self), &error);
if (res == GTK_PRINT_OPERATION_RESULT_APPLY)
{
if (settings != NULL)
g_object_unref (settings);
settings
= g_object_ref (gtk_print_operation_get_print_settings (print));
}
if (error)
display_and_free_error (self, _("Error"), error);
g_object_unref (print);
}
static void
on_action_print_draw_page (GtkPrintOperation *operation,
GtkPrintContext *context, int page_nr, LdWindowMain *self)
{
cairo_t *cr;
LdDiagramView *view;
gdouble area_width_mm, area_height_mm;
gdouble diagram_width_mm, diagram_height_mm;
gdouble diagram_to_export_units, scale, width_fit, height_fit;
LdRectangle bounds;
cr = gtk_print_context_get_cairo_context (context);
view = self->priv->view;
area_width_mm = gtk_print_context_get_width (context);
area_height_mm = gtk_print_context_get_height (context);
diagram_to_export_units = ld_diagram_view_get_export_bounds (view, &bounds);
/* Scale for the view's constant, measured in milimetres. */
scale = 1 / diagram_to_export_units * LD_DIAGRAM_VIEW_BASE_UNIT_LENGTH;
diagram_width_mm = bounds.width * scale;
diagram_height_mm = bounds.height * scale;
/* Scale to fit the paper, taking care to not divide by zero. */
width_fit = (area_width_mm < diagram_width_mm)
? area_width_mm / diagram_width_mm : 1;
height_fit = (area_height_mm < diagram_height_mm)
? area_height_mm / diagram_height_mm : 1;
scale *= MIN (width_fit, height_fit);
cairo_scale (cr, scale, scale);
cairo_translate (cr, -bounds.x, -bounds.y);
ld_diagram_view_export (view, cr, &bounds);
}
static void
on_action_quit (GtkAction *action, LdWindowMain *self)
{
@ -1095,123 +967,17 @@ on_action_quit (GtkAction *action, LdWindowMain *self)
gtk_widget_destroy (GTK_WIDGET (self));
}
static GFile *
user_guide_path (const gchar *language)
{
gchar *filename, *path;
GFile *file;
filename = g_strdup_printf ("user-guide-%s.html", language);
path = g_build_filename (PROJECT_DOC_DIR, "user-guide", filename, NULL);
g_free (filename);
file = g_file_new_for_path (path);
g_free (path);
return file;
}
static gboolean
open_file (GFile *file, GdkScreen *screen, GError **error)
{
GdkDisplay *display;
GAppInfo *app_info;
GdkAppLaunchContext *context;
GList link;
gboolean success;
/* GLib 2.36.1 prevents us from using gtk_show_uri() on Windows XP. */
if (!(app_info = g_file_query_default_handler (file, NULL, error)))
return FALSE;
link.next = link.prev = NULL;
link.data = file;
display = gdk_screen_get_display (screen);
context = gdk_display_get_app_launch_context (display);
gdk_app_launch_context_set_screen (context, screen);
success = g_app_info_launch (app_info,
&link, G_APP_LAUNCH_CONTEXT (context), error);
g_object_unref (context);
return success;
}
static void
on_action_user_guide (GtkAction *action, LdWindowMain *self)
{
const gchar *const *iter;
GFile *file;
GError *error = NULL;
/* Look for a usable language variant, or fall back to the lingua franca. */
for (iter = g_get_language_names (); *iter; iter++)
{
if (g_file_query_exists ((file = user_guide_path (*iter)), NULL))
break;
g_object_unref (file);
}
if (!*iter)
file = user_guide_path ("en");
if (!open_file (file, gtk_window_get_screen (GTK_WINDOW (self)), &error))
{
display_and_free_error (self,
_("Failed to open the user guide"), error);
}
g_object_unref (file);
}
static void
on_action_about (GtkAction *action, LdWindowMain *self)
{
GtkWidget *about_dialog;
GBytes *license;
license = g_resources_lookup_data ("/logdiag/LICENSE",
G_RESOURCE_LOOKUP_FLAGS_NONE, NULL);
about_dialog = g_object_new (GTK_TYPE_ABOUT_DIALOG,
gtk_show_about_dialog (GTK_WINDOW (self),
"program-name", PROJECT_NAME,
"logo-icon-name", PROJECT_NAME,
"version", PROJECT_VERSION,
"translator-credits", _("translator-credits"),
"copyright", "Copyright 2010 - 2021 Přemysl Eric Janouch",
"license", g_bytes_get_data (license, NULL),
"copyright", "Copyright Přemysl Janouch 2010 - 2018",
"website", PROJECT_URL,
NULL);
g_bytes_unref (license);
g_signal_connect (about_dialog, "activate-link",
G_CALLBACK (on_action_about_activate_link), self);
gtk_window_set_transient_for (GTK_WINDOW (about_dialog), GTK_WINDOW (self));
gtk_window_set_modal (GTK_WINDOW (about_dialog), TRUE);
gtk_window_set_destroy_with_parent (GTK_WINDOW (about_dialog), TRUE);
gtk_dialog_run (GTK_DIALOG (about_dialog));
gtk_widget_destroy (about_dialog);
}
static gboolean
on_action_about_activate_link (GtkAboutDialog *dialog, gchar *uri,
LdWindowMain *self)
{
#ifdef G_OS_WIN32
GdkWindow *window;
window = gtk_widget_get_window (GTK_WIDGET (self));
/* gtk_show_uri() on Windows XP fails, due to trying to establish
* an SSL connection, so let's first try to not do that on Windows.
* `cmd.exe /c start "" ...` would pop up a command line window,
* so use SHELL32.DLL directly. rundll does not cover this.
* There doesn't seem to be anything better directly in GIO/GLib.
*
* When we fail here, we fall back to normal processing.
*/
if ((INT_PTR) ShellExecute (gdk_win32_window_get_handle (window),
"open", uri, NULL, NULL, SW_SHOWNORMAL) > 32)
return TRUE;
#endif /* G_OS_WIN32 */
return FALSE;
}
static void

View File

@ -2,7 +2,7 @@
* ld-window-main.h
*
* This file is a part of logdiag.
* Copyright 2010 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010
*
* See the file LICENSE for licensing information.
*
@ -15,16 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_WINDOW_MAIN (ld_window_main_get_type ())
#define LD_WINDOW_MAIN(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_WINDOW_MAIN, LdWindowMain))
#define LD_WINDOW_MAIN_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_WINDOW_MAIN, LdWindowMainClass))
#define LD_IS_WINDOW_MAIN(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_WINDOW_MAIN))
#define LD_IS_WINDOW_MAIN_CLASS(klass) \
(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_WINDOW_MAIN))
#define LD_WINDOW_MAIN_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_WINDOW_MAIN, LdWindowMainClass))
#define LD_WINDOW_MAIN(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LD_TYPE_WINDOW_MAIN, LdWindowMain))
#define LD_WINDOW_MAIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LD_TYPE_WINDOW_MAIN, LdWindowMainClass))
#define LD_IS_WINDOW_MAIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LD_TYPE_WINDOW_MAIN))
#define LD_IS_WINDOW_MAIN_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LD_TYPE_WINDOW_MAIN))
#define LD_WINDOW_MAIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LD_WINDOW_MAIN, LdWindowMainClass))
typedef struct _LdWindowMain LdWindowMain;
typedef struct _LdWindowMainPrivate LdWindowMainPrivate;
@ -53,3 +53,4 @@ GtkWidget *ld_window_main_new (const gchar *filename);
G_END_DECLS
#endif /* ! __LD_WINDOW_MAIN_H__ */

View File

@ -2,7 +2,7 @@
* logdiag.c -- logdiag main source file.
*
* This file is a part of logdiag.
* Copyright 2010, 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2010, 2011
*
* See the file LICENSE for licensing information.
*
@ -127,17 +127,16 @@ main (int argc, char *argv[])
textdomain (GETTEXT_DOMAIN);
#ifdef PROJECT_GSETTINGS_DIR
/* This is enabled when the build is set up for development,
* so that the application can find its schema. It might also find use
* when installing the application into a location that's missing from
/* This is enabled when the build is set up for developing, so that the
* application can find its schema. It might also find use when
* installing the application into a location that's missing from
* g_get_system_data_dirs(), for example /usr/local or ~/.local.
*/
g_setenv ("GSETTINGS_SCHEMA_DIR", PROJECT_GSETTINGS_DIR, 0);
#endif /* PROJECT_GSETTINGS_DIR */
#ifdef _WIN32
/* Don't be unneccessarily limited by the system's ANSI codepage. */
/* g_win32_get_command_line() should replace this code for GLib >= 2.40. */
/* Don't be unneccessarily limited by the system ANSI codepage. */
argv_overriden = get_utf8_args (&argc, &argv);
if (argv_overriden)
_putenv ("CHARSET=UTF-8");
@ -161,11 +160,6 @@ main (int argc, char *argv[])
}
#endif
#ifdef OPTION_NOINSTALL
gtk_icon_theme_prepend_search_path (gtk_icon_theme_get_default (),
PROJECT_SHARE_DIR "icons");
#endif
gtk_window_set_default_icon_name (PROJECT_NAME);
if (files)
@ -180,3 +174,4 @@ main (int argc, char *argv[])
gtk_main ();
return 0;
}

View File

@ -2,7 +2,7 @@
* diagram.c
*
* This file is a part of logdiag.
* Copyright 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2011
*
* See the file LICENSE for licensing information.
*

View File

@ -2,7 +2,7 @@
* point-array.c
*
* This file is a part of logdiag.
* Copyright 2011 Přemysl Eric Janouch
* Copyright Přemysl Janouch 2011
*
* See the file LICENSE for licensing information.
*

1
vera++ Submodule

@ -0,0 +1 @@
Subproject commit 45f3ab870d3722891642098bd7fc0d6fc97c8571