Compare commits

...

61 Commits

Author SHA1 Message Date
Přemysl Eric Janouch 17d9b3cf4c
Win64Depends.sh: improve compatibility
Arch Linux AUR Success Details
Alpine 3.19 Success Details
2024-04-09 19:35:41 +02:00
Přemysl Eric Janouch 2aa0a6231c
Accept Lua 5.4 specifically
Arch Linux AUR Success Details
2024-04-09 18:54:14 +02:00
Přemysl Eric Janouch 56a2a58ed6
Enable cross-compiled tests
Arch Linux AUR Success Details
test-diagram still fails, however let's make our toolchain files
a good reference.
2024-04-09 13:02:03 +02:00
Přemysl Eric Janouch 99834e93c0
README.adoc: update package information
Arch Linux AUR Success Details
2023-07-01 21:59:05 +02:00
Přemysl Eric Janouch 266c4c7c9f
CMakeLists.txt: fix RPM license field 2023-06-28 01:57:50 +02:00
Přemysl Eric Janouch e5e42b63eb
Win64Depends.sh: only extract what we need
In case the packages directory has been preloaded or symlinked.
2023-06-26 20:54:38 +02:00
Přemysl Eric Janouch a4532ea322
Add some enlightening comments 2023-06-14 12:29:12 +02:00
Přemysl Eric Janouch 4aeaf61c99
Synchronize cross-compilation scripts 2022-08-12 12:39:21 +02:00
Přemysl Eric Janouch d5837555b8
Update README 2022-08-12 12:33:52 +02:00
Přemysl Eric Janouch 9003f36ba2
Tidy up GSettings 2022-07-25 13:31:32 +02:00
Přemysl Eric Janouch 6df51485d3
Update Windows XP vs. TLS notes 2021-12-28 04:03:54 +01:00
Přemysl Eric Janouch 2433b9046f
Eliminate a Wayland-specific warning
The handling seems to be a bit convoluted there.
2021-11-17 07:42:37 +01:00
Přemysl Eric Janouch 93cd4dc4f9
Remove an unused marshaller
It is no longer used, since the transition to GTK+ 3.
2021-11-14 05:51:07 +01:00
Přemysl Eric Janouch 9dc1d20d6c
Bump version, update NEWS 2021-11-03 07:18:35 +01:00
Přemysl Eric Janouch 66a3b3e259
CMakeLists.txt: fix macOS build
GTK+ doesn't seem to be working much on macOS/brew/M1, though.
2021-11-02 16:29:30 +01:00
Přemysl Eric Janouch 3ff0f117f9
Make note of an alternative export approach 2021-11-02 11:43:49 +01:00
Přemysl Eric Janouch de291ffddb
Reset view position on opening a file 2021-11-02 11:28:48 +01:00
Přemysl Eric Janouch baaca4c58f
Add all opened files to the recent list
The GTK+ file open/save dialog has already been adding them,
but opening files from the command line would circumvent that path.
2021-11-02 11:24:40 +01:00
Přemysl Eric Janouch 7499f92811
Close symbol paths where appropriate
Removes some ugliness in PDF exports, stemming from line thickness.
2021-11-02 10:36:17 +01:00
Přemysl Eric Janouch deceafb4f4
CMakeFiles.txt: remove a confused comment
The process is not executed from a Makefile, the concern is void.
2021-11-01 13:04:26 +01:00
Přemysl Eric Janouch 3465557a5b
Use GResources for the UI file and the LICENSE
- The About dialog now displays the licence.
 - The main UI file is now integrated into the binary.

The project needed some of its ugly CMake code back.
2021-11-01 12:20:16 +01:00
Přemysl Eric Janouch 082f1aa41c
CMakeLists.txt: shuffle things around 2021-11-01 11:57:01 +01:00
Přemysl Eric Janouch 8950a533b4
Don't generate marshallers in the source tree
This is much cleaner.  I'm unsure of the original motivations,
perhaps I just wanted to have all source files next to each other.
There is no functional issue with the build directory, though.
2021-11-01 10:14:19 +01:00
Přemysl Eric Janouch 79d2fc78ea
Win64Depends.sh: describe a more precise fix 2021-11-01 09:26:48 +01:00
Přemysl Eric Janouch 1d118d5406
CMakeLists.txt: remove pointless targets
The win32-depends target only makes sense /before/ running CMake.

Let the builder do it by hand rather than invoking it automatically,
which would be another sensible solution.
2021-11-01 07:52:41 +01:00
Přemysl Eric Janouch d5ea2e2b4d
Move GSettings schema checking to tests 2021-11-01 07:40:32 +01:00
Přemysl Eric Janouch 0cec1b4bad
CMakeLists.txt: slightly modernize
Before version 3.12, we still need to set CPACK_PACKAGE_VERSION
manually, and the subversions are actually wrongly defaulting to 0.1.1
(but we don't particularly care).

FindIntl has been there since CMake 3.2.
2021-10-31 04:18:44 +01:00
Přemysl Eric Janouch a40b281078
Improve clang-format configuration 2021-10-30 03:01:11 +02:00
Přemysl Eric Janouch dd48af42eb
Stop stuttering in CMake scripts 2021-10-29 04:56:56 +02:00
Přemysl Eric Janouch ed6d34159e
Win32Depends.cmake: make a note about cURL 2021-10-29 04:30:35 +02:00
Přemysl Eric Janouch ff03060efa
Win32Depends.cmake: reflect mingw-get's existence
But let's keep Lua in the downloader, to make cross-compiling easier.
2021-10-29 04:11:03 +02:00
Přemysl Eric Janouch 9dcef6a14f
Make ld_library_find_symbol() easier to read
As well as shorter, strangely.

Symbols may technically exist directly in the root category now.
2021-10-29 01:31:50 +02:00
Přemysl Eric Janouch ee7be81434
Clean up 2021-10-29 00:24:12 +02:00
Přemysl Eric Janouch 0c5c680f62
Get rid of broken vera++, integrate clang-tidy 2021-10-29 00:22:43 +02:00
Přemysl Eric Janouch f139efba6d
Support Windows XP forever
GTK+ 3 has been almost abandoned, and there is little newer versions
could improve, so keep supporting the old and working 3.8.
2021-10-28 21:36:54 +02:00
Přemysl Eric Janouch 83c1e7a491
Update translations 2021-10-28 21:33:09 +02:00
Přemysl Eric Janouch 59b5ff7020
Append ellipsis to the Print menu item
It opens a dialog.
2021-10-28 20:05:31 +02:00
Přemysl Eric Janouch 2bc9fe4f1d
Fix scaling to fit paper 2021-10-28 06:14:21 +02:00
Přemysl Eric Janouch bd12c0502a
Update user guides
Now add text labels, and this project is functionally complete.
2021-10-28 06:01:03 +02:00
Přemysl Eric Janouch 4f01392de5
Add basic print functionality
Sadly, the line width depends on the widget's DPI, which seems to
even cause uneven lines on Windows, where virtual printers claim
high DPI.  It might also be an unrelated problem.

Similarly, selected objects are exported highlighted.

Other than that, it works quite well.

Add a manifest to make the print dialog look nice with the older
GTK+ bundle we depend upon.

The RC file could theoretically be scanned for /\s+"([^"]+)"\s*$/,
unescaped, and the results configure_file()-stamped.
2021-10-28 05:57:27 +02:00
Přemysl Eric Janouch 6cd6ddbd1c
ld-window-main.c: clean up 2021-10-28 05:25:57 +02:00
Přemysl Eric Janouch a4a0dd2106
Clean up
It turns out the RC detection snippet is no longer necessary
after the recent CMake version bump.

The "name" argument in the UI file is redundant, implied by "action".
2021-10-28 05:18:03 +02:00
Přemysl Eric Janouch b45670f9e9
CMakeLists.txt: simplify NSIS configuration
Functionality has been verified to remain as it was
on a native Windows XP build using NSIS 3.08.
2021-10-27 21:47:49 +02:00
Přemysl Eric Janouch 06e3c9e280
Bind # to toggling the view grid
As seen in Inkscape.
2021-10-27 18:38:33 +02:00
Přemysl Eric Janouch 073a4cd4a7
CMakeLists.txt: don't look for gtk-doc by default
The integration is broken and it spams with a warning message
when building on Windows directly.
2021-10-26 20:12:26 +02:00
Přemysl Eric Janouch f7807cada2
Make the about dialog link work in Windows XP
For some weird reason, GTK+ is trying to connect to URLs first,
which typically won't succeed these days.
2021-10-26 07:37:50 +02:00
Přemysl Eric Janouch 08cf0ef2e6
Make development builds find the program icon 2021-10-26 06:32:29 +02:00
Přemysl Eric Janouch baf2dc8ccd
Fix help on Windows with newer GIO
It needs its launch helper, luckily it's a tiny binary.
2021-10-25 23:12:14 +02:00
Přemysl Eric Janouch a5e341bcc1
Update README 2021-10-25 18:21:23 +02:00
Přemysl Eric Janouch bc8ceebef7
Add clang-format configuration, clean up 2021-10-25 18:06:50 +02:00
Přemysl Eric Janouch da0a5c43dc
Add the user guide to the Help menu
The old GLib put up a good fight, it says "URIs not supported"
even for the file:// scheme.
2021-10-25 02:50:14 +02:00
Přemysl Eric Janouch 384dad7bd8
Get rid of extra semicolons after macros 2021-10-25 00:27:32 +02:00
Přemysl Eric Janouch ada833a009
Abandon AsciiDoc in favor of plain HTML
It is very difficult to set up Python or Ruby on Windows XP.

Simple HTML works better, everywhere, it covers all our needs,
and it isn't any harder to write.

This documentation is now installed.
2021-10-25 00:04:28 +02:00
Přemysl Eric Janouch 924617e1ce
Silence some GLib deprecation warnings
Using the GLib version from the GTK+ 3.8.2 bundle.
2021-10-24 16:45:53 +02:00
Přemysl Eric Janouch 67acddb26d
Disable the broken gtk-doc rule by default
Unlikely to be used by anyone, especially since it cannot produce
anything useful anymore.
2021-10-24 16:43:55 +02:00
Přemysl Eric Janouch bc1dd64fdf
Partially unbreak the hopeless gtk-doc
GNOME Idiots Inc. keep breaking everything,
sometimes in coöperation with KitWare KludgeMakers Ltd.
2021-10-24 15:31:03 +02:00
Přemysl Eric Janouch 8c290df7b5
Update README 2021-10-23 20:27:51 +02:00
Přemysl Eric Janouch 5fc35517cb
Update README 2021-10-23 20:11:10 +02:00
Přemysl Eric Janouch 5a4cffd35e
Win32Depends.cmake: remove an unused feature 2021-10-23 20:02:45 +02:00
Přemysl Eric Janouch 3a087ad581
Remove unnecessary DLLs from Windows builds
This saves 20 MiB and 4 MiB of libraries in MSYS2 and bundle
builds respectively, in total, without any adverse effects.

The MSYS2 build remains bloated, due to the Adwaita icon theme.

Bump minimum CMake version to avoid a bug.
2021-10-23 18:01:30 +02:00
Přemysl Eric Janouch 4305c603e9
CMakeLists.txt: clean-up
Use the newer 3.0 string quoting to save some ugly escaping.
2021-10-23 16:35:36 +02:00
70 changed files with 1756 additions and 1245 deletions

38
.clang-format Normal file
View File

@ -0,0 +1,38 @@
# 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,4 +1,3 @@
/build /build
/win32-depends /win32-depends
/liblogdiag/ld-marshal.[ch]
/CMakeLists.txt.user /CMakeLists.txt.user

3
.gitmodules vendored
View File

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

View File

@ -1,13 +1,15 @@
# The last version with Windows XP support is 3.13, we want to keep that # The last version with Windows XP support is 3.13, we want to keep that
cmake_minimum_required (VERSION 3.9) cmake_minimum_required (VERSION 3.10)
project (logdiag VERSION 0.2.1 LANGUAGES C) project (logdiag VERSION 0.3.0 DESCRIPTION "Schematic editor" LANGUAGES C)
# Options # Options
option (OPTION_USE_VERA "Use vera++ for source code style checks" OFF) option (OPTION_CLANG_TIDY "Enable use of clang-tidy" OFF)
option (OPTION_NOINSTALL "Only for developers; work without installing" OFF) option (OPTION_NOINSTALL "For developers only--work without installing" OFF)
option (OPTION_GTKDOC "For developers only--enable use of gtk-doc" OFF)
option (BUILD_TESTING "Build tests" OFF) option (BUILD_TESTING "Build tests" OFF)
# Project information # Project information
set (project_ID "name.janouch.${PROJECT_NAME}")
set (project_URL "https://git.janouch.name/p/logdiag") set (project_URL "https://git.janouch.name/p/logdiag")
# For custom modules # For custom modules
@ -22,19 +24,13 @@ if (WIN32)
if (CMAKE_CROSSCOMPILING) if (CMAKE_CROSSCOMPILING)
list (APPEND CMAKE_FIND_ROOT_PATH ${WIN32_DEPENDS_PATH}) list (APPEND CMAKE_FIND_ROOT_PATH ${WIN32_DEPENDS_PATH})
endif (CMAKE_CROSSCOMPILING) endif ()
set (PKG_CONFIG_USE_CMAKE_PREFIX_PATH FALSE) set (PKG_CONFIG_USE_CMAKE_PREFIX_PATH FALSE)
# Seems like there is a regression setting this to two paths in one, # Seems like there is a regression setting this to two paths in one,
# setting the path manually # setting the path manually
set (ENV{PKG_CONFIG_PATH} "${WIN32_DEPENDS_PATH}/lib/pkgconfig") 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 # Generate icons
find_program (CONVERT_EXECUTABLE convert) find_program (CONVERT_EXECUTABLE convert)
@ -45,6 +41,7 @@ if (CONVERT_EXECUTABLE AND NOT WIN32)
set (icon_svg ${icon_base}/scalable/apps/logdiag.svg) set (icon_svg ${icon_base}/scalable/apps/logdiag.svg)
set (icon_size_list 16x16 32x32 48x48) set (icon_size_list 16x16 32x32 48x48)
# ImageMagick very oddly outperforms rsvg-convert with our specific SVG
set (icon_png_list) set (icon_png_list)
set (icon_symbolic_list) set (icon_symbolic_list)
foreach (icon_size ${icon_size_list}) foreach (icon_size ${icon_size_list})
@ -61,35 +58,37 @@ if (CONVERT_EXECUTABLE AND NOT WIN32)
DEPENDS ${icon_svg} VERBATIM) DEPENDS ${icon_svg} VERBATIM)
set_source_files_properties (${icon_symbolic} set_source_files_properties (${icon_symbolic}
PROPERTIES SYMBOLIC TRUE) PROPERTIES SYMBOLIC TRUE)
endforeach (icon_size) endforeach ()
# Symbolic targets prevent the icons from being either cleaned,
# or pointlessly regenerated slightly differently
set (icon_ico ${PROJECT_SOURCE_DIR}/share/logdiag.ico) set (icon_ico ${PROJECT_SOURCE_DIR}/share/logdiag.ico)
add_custom_target (${PROJECT_NAME}_icons add_custom_target (${PROJECT_NAME}_icons
DEPENDS ${icon_symbolic_list} DEPENDS ${icon_symbolic_list}
COMMAND ${CONVERT_EXECUTABLE} ${icon_png_list} ${icon_ico} COMMAND ${CONVERT_EXECUTABLE} ${icon_png_list} ${icon_ico}
COMMENT "Generating logdiag.ico" VERBATIM) COMMENT "Generating logdiag.ico" VERBATIM)
endif (CONVERT_EXECUTABLE AND NOT WIN32) endif ()
# Dependencies # Dependencies
find_package (PkgConfig REQUIRED) find_package (PkgConfig REQUIRED)
pkg_check_modules (GTK3 REQUIRED gtk+-3.0 json-glib-1.0) pkg_check_modules (GTK3 REQUIRED gtk+-3.0 json-glib-1.0)
link_directories (${GTK3_LIBRARY_DIRS})
if (NOT WIN32) if (NOT WIN32)
pkg_search_module (Lua REQUIRED lua>=5.2 lua5.3 lua-5.3 lua5.2 lua-5.2) pkg_search_module (Lua REQUIRED lua>=5.2
else (NOT WIN32) lua5.4 lua-5.4 lua5.3 lua-5.3 lua5.2 lua-5.2)
link_directories (${Lua_LIBRARY_DIRS})
else ()
# For whatever reason this now seems to be required # For whatever reason this now seems to be required
set (LUA_INCLUDE_DIR "${WIN32_DEPENDS_PATH}/include") set (LUA_INCLUDE_DIR "${WIN32_DEPENDS_PATH}/include")
find_package (Lua REQUIRED) find_package (Lua REQUIRED)
if (LUA_VERSION_STRING VERSION_LESS "5.2") if (LUA_VERSION_STRING VERSION_LESS "5.2")
message (FATAL_ERROR "Lua 5.2 not found") message (FATAL_ERROR "Lua 5.2 not found")
endif (LUA_VERSION_STRING VERSION_LESS "5.2") endif ()
set (Lua_LIBRARIES ${LUA_LIBRARIES}) set (Lua_LIBRARIES ${LUA_LIBRARIES})
set (Lua_INCLUDE_DIRS ${LUA_INCLUDE_DIR}) set (Lua_INCLUDE_DIRS ${LUA_INCLUDE_DIR})
endif (NOT WIN32) endif ()
# This actually fucks up MinGW cross-compilation if omitted
link_directories (${GTK3_LIBRARY_DIRS})
# Localization # Localization
find_package (Gettext REQUIRED) find_package (Gettext REQUIRED)
@ -101,15 +100,11 @@ GETTEXT_CREATE_TRANSLATIONS (
foreach (file ${project_PO_FILES}) foreach (file ${project_PO_FILES})
get_filename_component (translation "${file}" NAME_WE) get_filename_component (translation "${file}" NAME_WE)
list (APPEND project_TRANSLATIONS "${translation}") list (APPEND project_TRANSLATIONS "${translation}")
endforeach (file) endforeach ()
# Documentation--gtk-doc 1.25 is required
find_package (GtkDoc 1.25)
set (project_DOC_DIR "${PROJECT_BINARY_DIR}/liblogdiag")
# Project source files # Project source files
set (liblogdiag_SOURCES set (liblogdiag_SOURCES
liblogdiag/ld-marshal.c ${PROJECT_BINARY_DIR}/ld-marshal.c
liblogdiag/ld-types.c liblogdiag/ld-types.c
liblogdiag/ld-undo-action.c liblogdiag/ld-undo-action.c
liblogdiag/ld-diagram.c liblogdiag/ld-diagram.c
@ -126,9 +121,9 @@ set (liblogdiag_SOURCES
liblogdiag/ld-lua.c liblogdiag/ld-lua.c
liblogdiag/ld-lua-symbol.c) liblogdiag/ld-lua-symbol.c)
set (liblogdiag_HEADERS set (liblogdiag_HEADERS
${PROJECT_BINARY_DIR}/ld-marshal.h
${PROJECT_BINARY_DIR}/config.h ${PROJECT_BINARY_DIR}/config.h
liblogdiag/liblogdiag.h liblogdiag/liblogdiag.h
liblogdiag/ld-marshal.h
liblogdiag/ld-types.h liblogdiag/ld-types.h
liblogdiag/ld-undo-action.h liblogdiag/ld-undo-action.h
liblogdiag/ld-diagram.h liblogdiag/ld-diagram.h
@ -152,77 +147,93 @@ set (logdiag_TESTS
diagram) diagram)
set (logdiag_SOURCES set (logdiag_SOURCES
${PROJECT_BINARY_DIR}/gresource.c
src/ld-window-main.c src/ld-window-main.c
src/logdiag.c) src/logdiag.c)
set (logdiag_HEADERS set (logdiag_HEADERS
${liblogdiag_HEADERS} ${liblogdiag_HEADERS}
src/ld-window-main.h) src/ld-window-main.h)
# Resource compilation for MinGW # Resource compilation for Windows
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) if (WIN32)
set (logdiag_SOURCES # The file isn't scanned for dependencies, but they will only rarely change
${logdiag_SOURCES} list (APPEND logdiag_SOURCES share/logdiag.rc)
share/logdiag.rc) endif ()
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 # Generate marshallers
find_program (GLIB_GENMARSHAL_EXECUTABLE glib-genmarshal) function (glib_genmarshal listfile prefix)
if (NOT GLIB_GENMARSHAL_EXECUTABLE) find_program (GLIB_GENMARSHAL_EXECUTABLE glib-genmarshal)
message (FATAL_ERROR "glib-genmarshal not found") if (NOT GLIB_GENMARSHAL_EXECUTABLE)
endif (NOT GLIB_GENMARSHAL_EXECUTABLE) message (FATAL_ERROR "glib-genmarshal not found")
endif ()
function (glib_genmarshal base prefix) get_filename_component (_basename "${listfile}" NAME_WE)
get_filename_component (base_path "${base}" PATH) set (_command_base ${GLIB_GENMARSHAL_EXECUTABLE} --prefix ${prefix}
get_filename_component (base_name "${base}" NAME) "${listfile}")
set (command_base ${GLIB_GENMARSHAL_EXECUTABLE}
--prefix ${prefix} "${base_name}.list")
# On Windows, the final makefile may contain: 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:
# cd e:\abc && ... # cd e:\abc && ...
# That won't actually change the directory. We have to do: # That won't actually change the directory. We have to do:
# cd e:\abc && e: && ... # cd e:\abc && e: && ...
if (WIN32 AND "${base_path}" MATCHES "^.:[/\\\\]") set (_prefix)
string (SUBSTRING "${base_path}" 0 2 base_drive) if (WIN32 AND "${_xml_path}" MATCHES "^.:[/\\\\]")
set (command_base "${base_drive}" && "${command_base}") string (SUBSTRING "${_xml_path}" 0 2 _xml_drive)
endif (WIN32 AND "${base_path}" MATCHES "^.:[/\\\\]") set (_prefix ${_xml_drive} &&)
endif ()
# NOTE: VERBATIM would cause problems, so it is not used here # VERBATIM would cause problems, so it is not used here
add_custom_command (OUTPUT ${base}.c add_custom_command (OUTPUT ${target}
COMMAND ${command_base} --body > "${base_name}.c" COMMAND ${_prefix} ${GLIB_COMPILE_RESOURCES_EXECUTABLE}
DEPENDS "${base}.list" --generate-source --target ${target} "${xml}" DEPENDS "${xml}"
WORKING_DIRECTORY "${base_path}" WORKING_DIRECTORY "${_xml_path}" COMMENT "Compiling resources")
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)
glib_genmarshal (${PROJECT_SOURCE_DIR}/liblogdiag/ld-marshal execute_process (COMMAND ${GLIB_COMPILE_RESOURCES_EXECUTABLE}
ld_marshal) --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 ()
include_directories (${PROJECT_SOURCE_DIR}) configure_file ("${xml}" glib-compile-resources.stamp COPYONLY)
include_directories (${GTK3_INCLUDE_DIRS} ${Lua_INCLUDE_DIRS}) 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})
set (logdiag_LIBS ${GTK3_LIBRARIES} ${Lua_LIBRARIES} m) set (logdiag_LIBS ${GTK3_LIBRARIES} ${Lua_LIBRARIES} m)
if (WIN32) if (WIN32)
find_package (LibIntl REQUIRED) find_package (Intl REQUIRED)
list (APPEND logdiag_LIBS ${LIBINTL_LIBRARIES}) list (APPEND logdiag_LIBS ${Intl_LIBRARIES} shell32)
endif (WIN32) endif ()
# Build the library # Build the library
add_library (liblogdiag STATIC ${liblogdiag_SOURCES} ${liblogdiag_HEADERS}) add_library (liblogdiag STATIC ${liblogdiag_SOURCES} ${liblogdiag_HEADERS})
@ -232,31 +243,66 @@ set_target_properties (liblogdiag PROPERTIES OUTPUT_NAME logdiag)
add_executable (logdiag WIN32 ${logdiag_SOURCES} ${logdiag_HEADERS}) add_executable (logdiag WIN32 ${logdiag_SOURCES} ${logdiag_HEADERS})
target_link_libraries (logdiag liblogdiag ${logdiag_LIBS}) 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 # Testing
if (BUILD_TESTING) if (BUILD_TESTING)
enable_testing () enable_testing ()
add_test (NAME test-gschema-${PROJECT_NAME}
COMMAND ${GLIB_COMPILE_SCHEMAS_EXECUTABLE} --dry-run "${GSETTINGS_DIR}")
foreach (name ${logdiag_TESTS}) foreach (name ${logdiag_TESTS})
add_executable (test-${name} tests/${name}.c) add_executable (test-${name} tests/${name}.c)
target_link_libraries (test-${name} liblogdiag ${logdiag_LIBS}) target_link_libraries (test-${name} liblogdiag ${logdiag_LIBS})
add_test (NAME test-${name} COMMAND test-${name}) add_test (NAME test-${name} COMMAND test-${name})
list (APPEND logdiag_TEST_TARGETS test-${name}) list (APPEND logdiag_TEST_TARGETS test-${name})
endforeach (name) endforeach ()
if (WIN32 AND NOT CMAKE_CROSSCOMPILING) if (WIN32 AND NOT CMAKE_CROSSCOMPILING)
set_tests_properties (${logdiag_TEST_TARGETS} set_tests_properties (${logdiag_TEST_TARGETS}
PROPERTIES ENVIRONMENT "PATH=${WIN32_DEPENDS_PATH}/bin") PROPERTIES ENVIRONMENT "PATH=${WIN32_DEPENDS_PATH}/bin")
endif () endif ()
endif (BUILD_TESTING) endif ()
# Generate documentation # Generate documentation
if (GTKDOC_FOUND) if (OPTION_GTKDOC)
# FIXME: not our bug but xml/gtkdocentities.ent cannot be passed find_package (GtkDoc 1.25 REQUIRED)
target_link_libraries (liblogdiag ${logdiag_LIBS}) 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
gtk_doc_add_module (liblogdiag gtk_doc_add_module (liblogdiag
SOURCE ${PROJECT_SOURCE_DIR}/liblogdiag SOURCE ${PROJECT_SOURCE_DIR}/liblogdiag
SUFFIXES c h SUFFIXES c h LDFLAGS "-l${xldflags}"
# The "official" module wants an XML file I don't want to give it XML ${PROJECT_BINARY_DIR}/liblogdiag-docs-dummy.xml
XML ${PROJECT_BINARY_DIR}/liblogdiag/liblogdiag-docs.xml
LIBRARIES liblogdiag) LIBRARIES liblogdiag)
endif () endif ()
@ -264,68 +310,38 @@ find_package (CppCheck)
GENERATE_CPPCHECK (SOURCES liblogdiag src tests ENABLE_IDS all GENERATE_CPPCHECK (SOURCES liblogdiag src tests ENABLE_IDS all
TARGET_NAME ${PROJECT_NAME}_cppcheck INCLUDES ${PROJECT_BINARY_DIR}) TARGET_NAME ${PROJECT_NAME}_cppcheck INCLUDES ${PROJECT_BINARY_DIR})
if (OPTION_USE_VERA) # Various clang-based diagnostics, loads of fake positives and spam
# Force this off, we don't need it if (OPTION_CLANG_TIDY)
option (VERA_LUA "" OFF) 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
# Make it build within the same build tree string (REPLACE ";" "," clang_tidy_checks "${clang_tidy_checks}")
get_directory_property (backup_includes INCLUDE_DIRECTORIES) set (clang_tidy_config "{
set_directory_properties (PROPERTIES INCLUDE_DIRECTORIES "") Checks: '${clang_tidy_checks}',
set (backup_source_dir "${CMAKE_SOURCE_DIR}") CheckOptions: [{
set (CMAKE_SOURCE_DIR "${CMAKE_SOURCE_DIR}/vera++") key: readability-function-cognitive-complexity.Threshold,
value: '30'
}]}")
add_subdirectory ("vera++") string (REPLACE "\n" " " clang_tidy_config "${clang_tidy_config}")
set_directory_properties (PROPERTIES INCLUDE_DIRECTORIES "${backup_includes}") set (CMAKE_EXPORT_COMPILE_COMMANDS ON)
set (CMAKE_SOURCE_DIR "${backup_source_dir}") set (clang_tidy_sources ${liblogdiag_SOURCES} ${logdiag_SOURCES})
add_custom_target (${PROJECT_NAME}_clang_tidy
# Check the sources COMMAND clang-tidy --quiet -p ${PROJECT_BINARY_DIR}
# XXX: maybe do it per source file and not all at once "--config=${clang_tidy_config}" ${clang_tidy_sources}
set (vera_srcs ${liblogdiag_SOURCES} ${logdiag_SOURCES} ${logdiag_HEADERS}) | sh -c "cat 1>&2"
set (vera_output ${PROJECT_BINARY_DIR}/vera.log) DEPENDS ${clang_tidy_sources} VERBATIM
add_custom_command (OUTPUT ${vera_output} USES_TERMINAL WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
COMMAND vera endif ()
-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 # Installation
if (WIN32) if (WIN32)
@ -333,8 +349,7 @@ if (WIN32)
install (DIRECTORY install (DIRECTORY
${WIN32_DEPENDS_PATH}/bin/ ${WIN32_DEPENDS_PATH}/bin/
DESTINATION . DESTINATION .
FILES_MATCHING PATTERN "*.dll" FILES_MATCHING PATTERN "*.dll" PATTERN "gspawn-*-helper.exe")
PATTERN "libgettext*" EXCLUDE)
install (DIRECTORY install (DIRECTORY
${WIN32_DEPENDS_PATH}/etc/ ${WIN32_DEPENDS_PATH}/etc/
DESTINATION etc) DESTINATION etc)
@ -364,9 +379,11 @@ if (WIN32)
install (DIRECTORY install (DIRECTORY
${WIN32_DEPENDS_PATH}/share/locale/${translation} ${WIN32_DEPENDS_PATH}/share/locale/${translation}
DESTINATION share/locale) DESTINATION share/locale)
endif (translation_found GREATER -1) endif ()
endforeach (locale) endforeach ()
else (WIN32)
install (SCRIPT Win32Cleanup.cmake)
else ()
install (TARGETS logdiag DESTINATION bin) install (TARGETS logdiag DESTINATION bin)
install (FILES share/logdiag.desktop DESTINATION share/applications) install (FILES share/logdiag.desktop DESTINATION share/applications)
install (FILES share/logdiag.xml DESTINATION share/mime/packages) install (FILES share/logdiag.xml DESTINATION share/mime/packages)
@ -375,18 +392,19 @@ else (WIN32)
# install (DIRECTORY "${project_DOC_DIR}/html/" # install (DIRECTORY "${project_DOC_DIR}/html/"
# DESTINATION share/gtk-doc/html/${PROJECT_NAME}) # DESTINATION share/gtk-doc/html/${PROJECT_NAME})
install (FILES LICENSE NEWS DESTINATION share/doc/${PROJECT_NAME}) install (FILES LICENSE NEWS DESTINATION share/doc/${PROJECT_NAME})
endif (WIN32) endif ()
install (DIRECTORY share/gui share/library DESTINATION share/${PROJECT_NAME}) install (DIRECTORY docs/user-guide DESTINATION share/doc/${PROJECT_NAME})
install (FILES ${GSETTINGS_SCHEMAS} DESTINATION share/glib-2.0/schemas) install (DIRECTORY share/library DESTINATION share/${PROJECT_NAME})
install (CODE " # DESTDIR is not in use on Windows 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!)
if (WIN32 OR \"\$ENV{DESTDIR}\" STREQUAL \"\") 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\") \"\${CMAKE_INSTALL_PREFIX}/share/glib-2.0/schemas\")
endif (WIN32 OR \"\$ENV{DESTDIR}\" STREQUAL \"\")") endif ()")
# CPack # CPack
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Schematic editor")
set (CPACK_PACKAGE_VENDOR "Premysl Eric Janouch") set (CPACK_PACKAGE_VENDOR "Premysl Eric Janouch")
set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch <p@janouch.name>") set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch <p@janouch.name>")
set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
@ -394,10 +412,10 @@ set (CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
if (WIN32) if (WIN32)
set (CPACK_GENERATOR "NSIS;ZIP") set (CPACK_GENERATOR "NSIS;ZIP")
else (WIN32) else ()
set (CPACK_GENERATOR "TGZ;ZIP") set (CPACK_GENERATOR "TGZ;ZIP")
set (CPACK_SET_DESTDIR TRUE) set (CPACK_SET_DESTDIR TRUE)
endif (WIN32) endif ()
set (CPACK_PACKAGE_FILE_NAME set (CPACK_PACKAGE_FILE_NAME
"${PROJECT_NAME}-${PROJECT_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}") "${PROJECT_NAME}-${PROJECT_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
@ -409,22 +427,21 @@ set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${PROJECT_NAME}")
set (CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/share\\\\header.bmp") set (CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/share\\\\header.bmp")
set (CPACK_NSIS_INSTALLED_ICON_NAME "logdiag.exe") set (CPACK_NSIS_INSTALLED_ICON_NAME "logdiag.exe")
set (CPACK_NSIS_CREATE_ICONS_EXTRA " set (CPACK_NSIS_URL_INFO_ABOUT "${project_URL}")
CreateShortCut '\$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\logdiag.lnk' '\$INSTDIR\\\\logdiag.exe'") set (CPACK_NSIS_HELP_LINK "${project_URL}")
set (CPACK_NSIS_DELETE_ICONS_EXTRA " # Or CPACK_NSIS_EXECUTABLES_DIRECTORY needs to be changed from "bin"
Delete '\$SMPROGRAMS\\\\$MUI_TEMP\\\\logdiag.lnk'") set (CPACK_NSIS_MENU_LINKS "logdiag.exe" ${PROJECT_NAME})
set (CPACK_NSIS_EXTRA_INSTALL_COMMANDS " set (CPACK_NSIS_EXTRA_INSTALL_COMMANDS [[
WriteRegStr HKCR '.ldd' '' 'logdiag.Diagram' WriteRegStr HKCR '.ldd' '' 'logdiag.Diagram'
WriteRegStr HKCR 'logdiag.Diagram' '' 'logdiag Diagram' WriteRegStr HKCR 'logdiag.Diagram' '' 'logdiag Diagram'
WriteRegStr HKCR 'logdiag.Diagram\\\\shell\\\\open\\\\command' '' '\\\"\$INSTDIR\\\\logdiag.exe\\\" \\\"%1\\\"' WriteRegStr HKCR 'logdiag.Diagram\\shell\\open\\command' '' '\"$INSTDIR\\logdiag.exe\" \"%1\"'
WriteRegStr HKCR 'logdiag.Diagram\\\\shell\\\\edit\\\\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)'") System::Call 'shell32::SHChangeNotify(i,i,i,i) (0x08000000, 0x1000, 0, 0)'
set (CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS " ]])
set (CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS [[
DeleteRegKey HKCR 'logdiag.Diagram' 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 set (CPACK_DEBIAN_PACKAGE_DEPENDS
"libgtk3.0-0 (>= 3.8), libjson-glib-1.0-0 (>= 0.10.4), liblua5.2-0") "libgtk3.0-0 (>= 3.8), libjson-glib-1.0-0 (>= 0.10.4), liblua5.2-0")
@ -435,12 +452,11 @@ 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_REQUIRES "gtk3 >= 3.8, json-glib >= 0.10.4, lua = 5.2")
set (CPACK_RPM_PACKAGE_GROUP "Graphics") set (CPACK_RPM_PACKAGE_GROUP "Graphics")
set (CPACK_RPM_PACKAGE_LICENSE "ISC") set (CPACK_RPM_PACKAGE_LICENSE "0BSD")
set (CPACK_RPM_PACKAGE_URL "${project_URL}") set (CPACK_RPM_PACKAGE_URL "${project_URL}")
set (CPACK_SOURCE_GENERATOR "TGZ;ZIP") set (CPACK_SOURCE_GENERATOR "TGZ;ZIP")
set (CPACK_SOURCE_IGNORE_FILES "/\\\\.git;/build;/CMakeLists.txt.user;/win32-depends;/liblogdiag/ld-marshal.[ch]") 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_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}")
include (CPack) include (CPack)

13
NEWS
View File

@ -1,3 +1,14 @@
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 Version 0.2.1
- Set up grounds for 64-bit Windows builds using the latest GTK+ 3. - Set up grounds for 64-bit Windows builds using the latest GTK+ 3.
- Made the Windows installer ask to uninstall previous versions first. - Made the Windows installer ask to uninstall previous versions first.
@ -18,8 +29,6 @@ Version 0.2.0
- Symbol categories are also loaded from user-specific directories. - Symbol categories are also loaded from user-specific directories.
- Show current zoom in the statusbar. - Show current zoom in the statusbar.
- Ported to GTK+ 3 and Lua 5.2. - 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. - 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 with the classic theme, little we can do.

View File

@ -3,19 +3,25 @@ logdiag
'logdiag' is a simple multiplatform schematic editor written in GTK+. 'logdiag' is a simple multiplatform schematic editor written in GTK+.
This software has never really been finished, and is no longer being worked on. 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.
image::docs/user-guide/logdiag-en.png[align="center"] image::docs/user-guide/logdiag-en.png[align="center"]
Packages Packages
-------- --------
Regular releases are sporadic. git master should be stable enough. You can get Regular releases are sporadic. git master should be stable enough.
a package with the latest development version from Archlinux's AUR. 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].
Requirements Requirements
------------ ------------
Runtime dependencies: GTK+ >= 3.8, json-glib >= 0.10.4, lua >= 5.2 + Runtime dependencies: GTK+ >= 3.8, json-glib >= 0.10.4, lua >= 5.2 +
Build dependencies: CMake >= 3.9 Build dependencies: CMake >= 3.10
Build from source on Unix-like systems Build from source on Unix-like systems
-------------------------------------- --------------------------------------
@ -32,49 +38,48 @@ application to be installed. The default is _/usr/local_.
$ cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr $ 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 # make install
Using _cpack_ 2. Using _cpack_:
~~~~~~~~~~~~~ +
You have to choose a package format understood by your system package manager. You have to choose a package format understood by your system package manager.
CMake offers DEB and RPM. CMake offers DEB and RPM.
+
After _cpack_ finishes making the package, install this file. After _cpack_ finishes making the package, install this file.
+
$ cpack -G DEB $ cpack -G DEB
# dpkg -i logdiag-version-system-arch.deb # dpkg -i logdiag-version-system-arch.deb
Build from source on Windows Build from source on Windows
---------------------------- ----------------------------
_Note that with the current method we're stuck with GTK+ 3.8.2._ _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._
First install CMake and MinGW. Add both to your system path. If you want First, install CMake and MinGW (mingw32-base-bin, mingw32-gettext-dev).
to build an installation package, also install NSIS. If you want to build within Ensure they're both in your system path. If you want to build an installation
a path containing spaces, fix your FindPkgConfig.cmake to say: 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}") separate_arguments(_pkgconfig_invoke_result UNIX_COMMAND "${_pkgconfig_invoke_result}")
Run the following command in the directory with source files to automatically Run the following command in the directory with source files to automatically
fetch and setup all dependencies (contact me if the script becomes obsolete, fetch and set up all dependencies:
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 > cmake -P Win32Depends.cmake
Note that Windows XP is no longer able to reliably download from HTTPS sources. 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: Reserve a directory for an out-of-source build and let CMake prepare the build:
> mkdir build > mkdir build
> cd build > cd build
Let CMake prepare the build:
> cmake .. -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release > cmake .. -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release
Now you can generate a package with CPack. You may choose between: Now you can generate a package with CPack. You may choose between:
@ -97,14 +102,13 @@ Just install MinGW-w64 and let automation take care of the rest.
$ cmake -P Win32Depends.cmake $ cmake -P Win32Depends.cmake
$ mkdir build $ mkdir build
$ cd build $ cd build
$ cmake .. \ $ cmake -DCMAKE_TOOLCHAIN_FILE=../ToolchainCrossMinGWW64.cmake \
-DCMAKE_TOOLCHAIN_FILE=../ToolchainCrossMinGWW64.cmake \ -DCMAKE_BUILD_TYPE=Release ..
-DCMAKE_BUILD_TYPE=Release
$ cpack $ cpack
Alternatively, for an unnecessarily bloated MSYS2-based 64-bit build: Alternatively, for an unnecessarily bloated MSYS2-based 64-bit build:
$ sh Win64Depends.sh $ sh -e Win64Depends.sh
$ cmake -DCMAKE_TOOLCHAIN_FILE=ToolchainCrossWin64.cmake \ $ cmake -DCMAKE_TOOLCHAIN_FILE=ToolchainCrossWin64.cmake \
-DCMAKE_BUILD_TYPE=Release -B build -DCMAKE_BUILD_TYPE=Release -B build
$ cmake --build build -- package $ cmake --build build -- package

View File

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

View File

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

View File

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

37
Win32Cleanup.cmake Normal file
View File

@ -0,0 +1,37 @@
# 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

@ -6,7 +6,6 @@ cmake_minimum_required (VERSION 3.9)
# Directories # Directories
set (working_dir ${CMAKE_CURRENT_BINARY_DIR}/win32-depends) set (working_dir ${CMAKE_CURRENT_BINARY_DIR}/win32-depends)
set (pkg_dir ${working_dir}/packages) set (pkg_dir ${working_dir}/packages)
set (tmp_dir ${working_dir}/tmp)
file (MAKE_DIRECTORY ${working_dir}) file (MAKE_DIRECTORY ${working_dir})
file (MAKE_DIRECTORY ${pkg_dir}) file (MAKE_DIRECTORY ${pkg_dir})
@ -16,32 +15,27 @@ file (GLOB files ${working_dir}/*)
list (REMOVE_ITEM files ${pkg_dir}) list (REMOVE_ITEM files ${pkg_dir})
if (files) if (files)
file (REMOVE_RECURSE ${files}) file (REMOVE_RECURSE ${files})
endif (files) endif ()
# Packages # Packages
set (pkg_list "gtk" "gtkalt" "winlibs" "mingw_lua") set (pkg_list "geany" "winlibs" "mingw_lua")
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"
"${pkg_gtk_root}/dependencies/gettext-runtime-0.17-1.zip")
set (pkg_gtk_md5
"09baff956ebd1c391c7f71e9bd768edd"
"110394b4b1e0a50cd440f1e8729d159c")
# https://sourceforge.net/projects/urlget/files # https://sourceforge.net/projects/urlget/files
# /GTK%2B%203%20binary%20for%20Windows/GTK%2B%203.16.6/ # /GTK%2B%203%20binary%20for%20Windows/GTK%2B%203.16.6/
# contains a binary bundle that may be more or less simply transplanted over, # contains a binary bundle that may be more or less simply transplanted over,
# due to ABI compatibility, however something is wrong with icons, # due to ABI compatibility, however something is wrong with icons,
# and it looks alien on Windows XP (use themes) for close to no improvement. # and it looks alien on Windows XP (use themes) for close to no improvement.
set (pkg_gtkalt_root "https://download.geany.org/contrib/gtk") set (pkg_geany_root "https://download.geany.org/contrib/gtk")
set (pkg_gtkalt_urls "${pkg_gtkalt_root}/gtk+-bundle_3.8.2-20131001_win32.zip") set (pkg_geany_urls "${pkg_geany_root}/gtk+-bundle_3.8.2-20131001_win32.zip")
set (pkg_gtkalt_md5 "3f9b159207edf44937f209b4a5e6bb63") set (pkg_geany_md5 "3f9b159207edf44937f209b4a5e6bb63")
set (pkg_winlibs_root "http://sourceforge.net/projects/winlibs/files") 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_urls "${pkg_winlibs_root}/GTK+/libjson-glib-1.0-1-mingw32.7z")
set (pkg_winlibs_md5 "f06e42c5998dae5fb6245fecc96a403e") 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_root "http://sourceforge.net/projects/mingw/files/MinGW/Extension")
set (pkg_mingw_lua_urls 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" "${pkg_mingw_lua_root}/lua/lua-5.2.0-1/lua-5.2.0-1-mingw32-dll-52.tar.xz"
@ -70,6 +64,8 @@ foreach (pkg_set ${pkg_list})
if (NOT EXISTS ${filename}) if (NOT EXISTS ${filename})
message (STATUS "Downloading ${url}...") 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}) file (DOWNLOAD ${url} ${filename} STATUS status ${pkg_md5_param})
list (GET status 0 status_errno) list (GET status 0 status_errno)
@ -77,44 +73,32 @@ foreach (pkg_set ${pkg_list})
if (status_errno) if (status_errno)
file (REMOVE ${filename}) file (REMOVE ${filename})
message (FATAL_ERROR "Download failed: ${status_msg}") message (FATAL_ERROR "Download failed: ${status_msg}")
endif (status_errno) endif ()
elseif (pkg_md5_sum) elseif (pkg_md5_sum)
execute_process (COMMAND ${CMAKE_COMMAND} -E md5sum ${filename} execute_process (COMMAND ${CMAKE_COMMAND} -E md5sum ${filename}
OUTPUT_VARIABLE output) OUTPUT_VARIABLE output)
if (NOT output MATCHES "^${pkg_md5_sum}") if (NOT output MATCHES "^${pkg_md5_sum}")
message (FATAL_ERROR "MD5 mismatch for ${basename}") message (FATAL_ERROR "MD5 mismatch for ${basename}")
endif (NOT output MATCHES "^${pkg_md5_sum}") endif ()
endif () endif ()
endforeach (url) endforeach ()
endforeach (pkg_set) endforeach ()
# Stage 2: extract the rest of packages # Stage 2: extract the rest of packages
foreach (pkg_set ${pkg_list}) foreach (pkg_set ${pkg_list})
foreach (url ${pkg_${pkg_set}_urls}) foreach (url ${pkg_${pkg_set}_urls})
get_filename_component (filename ${url} NAME) get_filename_component (filename ${url} NAME)
message (STATUS "Extracting ${filename}...") message (STATUS "Extracting ${filename}...")
set (extract_command ${CMAKE_COMMAND} -E tar xf)
set (filename ${pkg_dir}/${filename}) set (filename ${pkg_dir}/${filename})
if (pkg_${pkg_set}_strip) execute_process (COMMAND ${CMAKE_COMMAND} -E tar xf ${filename}
file (MAKE_DIRECTORY ${tmp_dir}) WORKING_DIRECTORY ${working_dir}
execute_process (COMMAND ${extract_command} ${filename} RESULT_VARIABLE status)
WORKING_DIRECTORY ${tmp_dir}
RESULT_VARIABLE status)
file (COPY ${tmp_dir}/${pkg_${pkg_set}_strip}/
DESTINATION ${working_dir})
file (REMOVE_RECURSE ${tmp_dir})
else ()
execute_process (COMMAND ${extract_command} ${filename}
WORKING_DIRECTORY ${working_dir}
RESULT_VARIABLE status)
endif ()
if (status) if (status)
message (FATAL_ERROR "Extraction failed: ${status}") message (FATAL_ERROR "Extraction failed: ${status}")
endif () endif ()
endforeach (url) endforeach ()
endforeach (pkg_set) endforeach ()
# Stage 3: final touches # Stage 3: final touches
# We have to fix the prefix path as it is completely wrong everywhere # We have to fix the prefix path as it is completely wrong everywhere
@ -125,4 +109,4 @@ foreach (file ${files})
string (REGEX REPLACE "prefix=[^\r\n]*(.*)" "prefix=${working_dir}\\1" string (REGEX REPLACE "prefix=[^\r\n]*(.*)" "prefix=${working_dir}\\1"
file_content_fixed "${file_content}") file_content_fixed "${file_content}")
file (WRITE ${file} "${file_content_fixed}") file (WRITE ${file} "${file_content_fixed}")
endforeach (file) endforeach ()

View File

@ -1,5 +1,5 @@
#!/bin/sh -e #!/bin/sh -e
# Win64Depends.sh: download dependencies from MSYS2 for cross-compilation # Win64Depends.sh: download dependencies from MSYS2 for cross-compilation.
# Dependencies: AWK, sed, sha256sum, cURL, bsdtar, wine64 # Dependencies: AWK, sed, sha256sum, cURL, bsdtar, wine64
repository=https://repo.msys2.org/mingw/mingw64/ repository=https://repo.msys2.org/mingw/mingw64/
@ -27,7 +27,8 @@ fetch() {
} BEGIN { while ((getline < "db.tsv") > 0) { } BEGIN { while ((getline < "db.tsv") > 0) {
filenames[$1] = $2; deps[$1] = ""; for (i = 3; i <= NF; i++) { filenames[$1] = $2; deps[$1] = ""; for (i = 3; i <= NF; i++) {
gsub(/[<=>].*/, "", $i); deps[$1] = deps[$1] $i FS } gsub(/[<=>].*/, "", $i); deps[$1] = deps[$1] $i FS }
} for (i = 0; i < ARGC; i++) get(ARGV[i]) }' "$@" | while IFS= read -r name } for (i = 0; i < ARGC; i++) get(ARGV[i]) }' "$@" | tee db.want | \
while IFS= read -r name
do do
status Fetching "$name" status Fetching "$name"
[ -f "packages/$name" ] || curl -#o "packages/$name" "$repository/$name" [ -f "packages/$name" ] || curl -#o "packages/$name" "$repository/$name"
@ -44,9 +45,9 @@ extract() {
for subdir in * for subdir in *
do [ -d "$subdir" -a "$subdir" != packages ] && rm -rf -- "$subdir" do [ -d "$subdir" -a "$subdir" != packages ] && rm -rf -- "$subdir"
done done
for i in packages/* while IFS= read -r name
do bsdtar -xf "$i" --strip-components 1 mingw64 do bsdtar -xf "packages/$name" --strip-components 1
done done < db.want
} }
configure() { configure() {
@ -55,15 +56,16 @@ configure() {
wine64 bin/gdk-pixbuf-query-loaders.exe \ wine64 bin/gdk-pixbuf-query-loaders.exe \
> lib/gdk-pixbuf-2.0/2.10.0/loaders.cache > lib/gdk-pixbuf-2.0/2.10.0/loaders.cache
# pkgconf has a command line option for this, but CMake can't pass it # pkgconf has a command line option for this, but CMake can't pass it.
sed -i "s|^prefix=/mingw64|prefix=$(pwd)|" {share,lib}/pkgconfig/*.pc sed -i "s|^prefix=/mingw64|prefix=$(pwd)|" \
share/pkgconfig/*.pc lib/pkgconfig/*.pc
} }
mkdir -p win32-depends mkdir -p win32-depends
cd win32-depends cd win32-depends
dbsync dbsync
fetch mingw-w64-x86_64-gtk3 mingw-w64-x86_64-lua \ fetch mingw-w64-x86_64-gtk3 mingw-w64-x86_64-lua \
mingw-w64-x86_64-libwinpthread-git # because we don't do "provides"? mingw-w64-x86_64-libwinpthread-git # Because we don't do "provides"?
verify verify
extract extract
configure configure
@ -71,4 +73,4 @@ configure
status Success status Success
# XXX: Why is this override needed to run some GLib-based things under wine64? # XXX: Why is this override needed to run some GLib-based things under wine64?
export XDG_DATA_DIRS=$(pwd)/share unset XDG_DATA_DIRS

View File

@ -1,38 +0,0 @@
# - Find libintl
# This module looks for libintl.
# This module defines the following values:
# LIBINTL_FOUND
# LIBINTL_LIBRARIES
#=============================================================================
# Copyright 2011 Přemysl Eric Janouch
# 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

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

View File

@ -0,0 +1,7 @@
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

@ -1,148 +0,0 @@
// 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 Eric 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

@ -0,0 +1,137 @@
<!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

@ -1,146 +0,0 @@
// 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 Eric 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

@ -0,0 +1,129 @@
<!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

@ -456,9 +456,9 @@ on_leave_notify (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)
} }
static void static void
on_drag_data_get on_drag_data_get (GtkWidget *widget, GdkDragContext *ctx,
(GtkWidget *widget, GdkDragContext *ctx, GtkSelectionData *selection_data, GtkSelectionData *selection_data, guint target_type, guint time,
guint target_type, guint time, gpointer user_data) gpointer user_data)
{ {
LdCategorySymbolView *self; LdCategorySymbolView *self;

View File

@ -15,16 +15,22 @@ G_BEGIN_DECLS
#define LD_TYPE_CATEGORY_SYMBOL_VIEW (ld_category_symbol_view_get_type ()) #define LD_TYPE_CATEGORY_SYMBOL_VIEW (ld_category_symbol_view_get_type ())
#define LD_CATEGORY_SYMBOL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST \ #define LD_CATEGORY_SYMBOL_VIEW(obj) \
((obj), LD_TYPE_CATEGORY_SYMBOL_VIEW, LdCategorySymbolView)) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
#define LD_CATEGORY_SYMBOL_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \ LD_TYPE_CATEGORY_SYMBOL_VIEW, \
((klass), LD_TYPE_CATEGORY_SYMBOL_VIEW, LdCategorySymbolViewClass)) LdCategorySymbolView))
#define LD_IS_CATEGORY_SYMBOL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_CATEGORY_SYMBOL_VIEW_CLASS(klass) \
((obj), LD_TYPE_CATEGORY_SYMBOL_VIEW)) (G_TYPE_CHECK_CLASS_CAST ((klass), \
#define LD_IS_CATEGORY_SYMBOL_VIEW_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \ LD_TYPE_CATEGORY_SYMBOL_VIEW, \
((klass), LD_TYPE_CATEGORY_SYMBOL_VIEW)) LdCategorySymbolViewClass))
#define LD_CATEGORY_SYMBOL_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \ #define LD_IS_CATEGORY_SYMBOL_VIEW(obj) \
((obj), LD_CATEGORY_SYMBOL_VIEW, LdCategorySymbolViewClass)) (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 _LdCategorySymbolView LdCategorySymbolView;
typedef struct _LdCategorySymbolViewPrivate LdCategorySymbolViewPrivate; typedef struct _LdCategorySymbolViewPrivate LdCategorySymbolViewPrivate;

View File

@ -58,7 +58,7 @@ ld_category_view_init (LdCategoryViewInterface *iface)
G_DEFINE_TYPE_WITH_CODE (LdCategoryTreeView, G_DEFINE_TYPE_WITH_CODE (LdCategoryTreeView,
ld_category_tree_view, GTK_TYPE_BOX, 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 static void
ld_category_tree_view_class_init (LdCategoryTreeViewClass *klass) ld_category_tree_view_class_init (LdCategoryTreeViewClass *klass)

View File

@ -15,16 +15,22 @@ G_BEGIN_DECLS
#define LD_TYPE_CATEGORY_TREE_VIEW (ld_category_tree_view_get_type ()) #define LD_TYPE_CATEGORY_TREE_VIEW (ld_category_tree_view_get_type ())
#define LD_CATEGORY_TREE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST \ #define LD_CATEGORY_TREE_VIEW(obj) \
((obj), LD_TYPE_CATEGORY_TREE_VIEW, LdCategoryTreeView)) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
#define LD_CATEGORY_TREE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \ LD_TYPE_CATEGORY_TREE_VIEW, \
((klass), LD_TYPE_CATEGORY_TREE_VIEW, LdCategoryTreeViewClass)) LdCategoryTreeView))
#define LD_IS_CATEGORY_TREE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_CATEGORY_TREE_VIEW_CLASS(klass) \
((obj), LD_TYPE_CATEGORY_TREE_VIEW)) (G_TYPE_CHECK_CLASS_CAST ((klass), \
#define LD_IS_CATEGORY_TREE_VIEW_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \ LD_TYPE_CATEGORY_TREE_VIEW, \
((klass), LD_TYPE_CATEGORY_TREE_VIEW)) LdCategoryTreeViewClass))
#define LD_CATEGORY_TREE_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \ #define LD_IS_CATEGORY_TREE_VIEW(obj) \
((obj), LD_CATEGORY_TREE_VIEW, LdCategoryTreeViewClass)) (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 _LdCategoryTreeView LdCategoryTreeView;
typedef struct _LdCategoryTreeViewPrivate LdCategoryTreeViewPrivate; typedef struct _LdCategoryTreeViewPrivate LdCategoryTreeViewPrivate;

View File

@ -21,7 +21,7 @@
* hierarchies. * hierarchies.
*/ */
G_DEFINE_INTERFACE (LdCategoryView, ld_category_view, 0); G_DEFINE_INTERFACE (LdCategoryView, ld_category_view, 0)
static void static void
ld_category_view_default_init (LdCategoryViewInterface *iface) ld_category_view_default_init (LdCategoryViewInterface *iface)
@ -77,8 +77,7 @@ ld_category_view_default_init (LdCategoryViewInterface *iface)
* Assign an #LdCategory object to the view. * Assign an #LdCategory object to the view.
*/ */
void void
ld_category_view_set_category (LdCategoryView *self, ld_category_view_set_category (LdCategoryView *self, LdCategory *category)
LdCategory *category)
{ {
g_return_if_fail (LD_IS_CATEGORY_VIEW (self)); g_return_if_fail (LD_IS_CATEGORY_VIEW (self));
LD_CATEGORY_VIEW_GET_INTERFACE (self)->set_category (self, category); LD_CATEGORY_VIEW_GET_INTERFACE (self)->set_category (self, category);

View File

@ -15,12 +15,14 @@ G_BEGIN_DECLS
#define LD_TYPE_CATEGORY_VIEW (ld_category_view_get_type ()) #define LD_TYPE_CATEGORY_VIEW (ld_category_view_get_type ())
#define LD_CATEGORY_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST \ #define LD_CATEGORY_VIEW(obj) \
((obj), LD_TYPE_CATEGORY_VIEW, LdCategoryView)) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_CATEGORY_VIEW, LdCategoryView))
#define LD_IS_CATEGORY_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_IS_CATEGORY_VIEW(obj) \
((obj), LD_TYPE_CATEGORY_VIEW)) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_CATEGORY_VIEW))
#define LD_CATEGORY_VIEW_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE \ #define LD_CATEGORY_VIEW_GET_INTERFACE(inst) \
((inst), LD_TYPE_CATEGORY_VIEW, LdCategoryViewInterface)) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), \
LD_TYPE_CATEGORY_VIEW, \
LdCategoryViewInterface))
typedef struct _LdCategoryView LdCategoryView; typedef struct _LdCategoryView LdCategoryView;
typedef struct _LdCategoryViewInterface LdCategoryViewInterface; typedef struct _LdCategoryViewInterface LdCategoryViewInterface;
@ -48,8 +50,7 @@ struct _LdCategoryViewInterface
GType ld_category_view_get_type (void) G_GNUC_CONST; GType ld_category_view_get_type (void) G_GNUC_CONST;
void ld_category_view_set_category (LdCategoryView *self, void ld_category_view_set_category (LdCategoryView *self, LdCategory *category);
LdCategory *category);
LdCategory *ld_category_view_get_category (LdCategoryView *self); LdCategory *ld_category_view_get_category (LdCategoryView *self);

View File

@ -55,7 +55,7 @@ static void on_category_notify_name (LdCategory *category,
GParamSpec *pspec, gpointer user_data); 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 static void
ld_category_class_init (LdCategoryClass *klass) ld_category_class_init (LdCategoryClass *klass)
@ -561,4 +561,3 @@ ld_category_get_children (LdCategory *self)
g_return_val_if_fail (LD_IS_CATEGORY (self), NULL); g_return_val_if_fail (LD_IS_CATEGORY (self), NULL);
return self->priv->subcategories; return self->priv->subcategories;
} }

View File

@ -15,16 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_CATEGORY (ld_category_get_type ()) #define LD_TYPE_CATEGORY (ld_category_get_type ())
#define LD_CATEGORY(obj) (G_TYPE_CHECK_INSTANCE_CAST \ #define LD_CATEGORY(obj) \
((obj), LD_TYPE_CATEGORY, LdCategory)) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_CATEGORY, LdCategory))
#define LD_CATEGORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \ #define LD_CATEGORY_CLASS(klass) \
((klass), LD_TYPE_CATEGORY, LdCategoryClass)) (G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_CATEGORY, LdCategoryClass))
#define LD_IS_CATEGORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_IS_CATEGORY(obj) \
((obj), LD_TYPE_CATEGORY)) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_CATEGORY))
#define LD_IS_CATEGORY_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_IS_CATEGORY_CLASS(klass) \
((klass), LD_TYPE_CATEGORY)) (G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_CATEGORY))
#define LD_CATEGORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \ #define LD_CATEGORY_GET_CLASS(obj) \
((obj), LD_CATEGORY, LdCategoryClass)) (G_TYPE_INSTANCE_GET_CLASS ((obj), LD_CATEGORY, LdCategoryClass))
typedef struct _LdCategory LdCategory; typedef struct _LdCategory LdCategory;
typedef struct _LdCategoryPrivate LdCategoryPrivate; typedef struct _LdCategoryPrivate LdCategoryPrivate;
@ -77,4 +77,3 @@ const GSList *ld_category_get_children (LdCategory *self);
G_END_DECLS G_END_DECLS
#endif /* ! __LD_CATEGORY_H__ */ #endif /* ! __LD_CATEGORY_H__ */

View File

@ -57,7 +57,7 @@ static void on_set_points_destroy (gpointer user_data);
G_DEFINE_TYPE (LdDiagramConnection, ld_diagram_connection, G_DEFINE_TYPE (LdDiagramConnection, ld_diagram_connection,
LD_TYPE_DIAGRAM_OBJECT); LD_TYPE_DIAGRAM_OBJECT)
static void static void
ld_diagram_connection_class_init (LdDiagramConnectionClass *klass) ld_diagram_connection_class_init (LdDiagramConnectionClass *klass)
@ -332,4 +332,3 @@ on_set_points_destroy (gpointer user_data)
json_node_free (data->new_node); json_node_free (data->new_node);
g_slice_free (SetPointsActionData, data); g_slice_free (SetPointsActionData, data);
} }

View File

@ -15,16 +15,22 @@ G_BEGIN_DECLS
#define LD_TYPE_DIAGRAM_CONNECTION (ld_diagram_connection_get_type ()) #define LD_TYPE_DIAGRAM_CONNECTION (ld_diagram_connection_get_type ())
#define LD_DIAGRAM_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST \ #define LD_DIAGRAM_CONNECTION(obj) \
((obj), LD_TYPE_DIAGRAM_CONNECTION, LdDiagramConnection)) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
#define LD_DIAGRAM_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \ LD_TYPE_DIAGRAM_CONNECTION, \
((klass), LD_TYPE_DIAGRAM_CONNECTION, LdDiagramConnectionClass)) LdDiagramConnection))
#define LD_IS_DIAGRAM_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_DIAGRAM_CONNECTION_CLASS(klass) \
((obj), LD_TYPE_DIAGRAM_CONNECTION)) (G_TYPE_CHECK_CLASS_CAST ((klass), \
#define LD_IS_DIAGRAM_CONNECTION_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \ LD_TYPE_DIAGRAM_CONNECTION, \
((klass), LD_TYPE_DIAGRAM_CONNECTION)) LdDiagramConnectionClass))
#define LD_DIAGRAM_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \ #define LD_IS_DIAGRAM_CONNECTION(obj) \
((obj), LD_DIAGRAM_CONNECTION, LdDiagramConnectionClass)) (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 _LdDiagramConnection LdDiagramConnection;
typedef struct _LdDiagramConnectionPrivate LdDiagramConnectionPrivate; typedef struct _LdDiagramConnectionPrivate LdDiagramConnectionPrivate;
@ -61,4 +67,3 @@ void ld_diagram_connection_set_points (LdDiagramConnection *self,
G_END_DECLS G_END_DECLS
#endif /* ! __LD_DIAGRAM_CONNECTION_H__ */ #endif /* ! __LD_DIAGRAM_CONNECTION_H__ */

View File

@ -69,7 +69,7 @@ static void on_set_param_redo (gpointer user_data);
static void on_set_param_destroy (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 static void
ld_diagram_object_class_init (LdDiagramObjectClass *klass) ld_diagram_object_class_init (LdDiagramObjectClass *klass)

View File

@ -15,16 +15,20 @@ G_BEGIN_DECLS
#define LD_TYPE_DIAGRAM_OBJECT (ld_diagram_object_get_type ()) #define LD_TYPE_DIAGRAM_OBJECT (ld_diagram_object_get_type ())
#define LD_DIAGRAM_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST \ #define LD_DIAGRAM_OBJECT(obj) \
((obj), LD_TYPE_DIAGRAM_OBJECT, LdDiagramObject)) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
#define LD_DIAGRAM_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \ LD_TYPE_DIAGRAM_OBJECT, \
((klass), LD_TYPE_DIAGRAM_OBJECT, LdDiagramObjectClass)) LdDiagramObject))
#define LD_IS_DIAGRAM_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_DIAGRAM_OBJECT_CLASS(klass) \
((obj), LD_TYPE_DIAGRAM_OBJECT)) (G_TYPE_CHECK_CLASS_CAST ((klass), \
#define LD_IS_DIAGRAM_OBJECT_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \ LD_TYPE_DIAGRAM_OBJECT, \
((klass), LD_TYPE_DIAGRAM_OBJECT)) LdDiagramObjectClass))
#define LD_DIAGRAM_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \ #define LD_IS_DIAGRAM_OBJECT(obj) \
((obj), LD_DIAGRAM_OBJECT, LdDiagramObjectClass)) (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 _LdDiagramObject LdDiagramObject;
typedef struct _LdDiagramObjectPrivate LdDiagramObjectPrivate; typedef struct _LdDiagramObjectPrivate LdDiagramObjectPrivate;
@ -74,4 +78,3 @@ void ld_diagram_object_set_y (LdDiagramObject *self, gdouble y);
G_END_DECLS G_END_DECLS
#endif /* ! __LD_DIAGRAM_OBJECT_H__ */ #endif /* ! __LD_DIAGRAM_OBJECT_H__ */

View File

@ -33,7 +33,7 @@ static void ld_diagram_symbol_set_property (GObject *object, guint property_id,
const GValue *value, GParamSpec *pspec); 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 static void
ld_diagram_symbol_class_init (LdDiagramSymbolClass *klass) ld_diagram_symbol_class_init (LdDiagramSymbolClass *klass)

View File

@ -15,16 +15,20 @@ G_BEGIN_DECLS
#define LD_TYPE_DIAGRAM_SYMBOL (ld_diagram_symbol_get_type ()) #define LD_TYPE_DIAGRAM_SYMBOL (ld_diagram_symbol_get_type ())
#define LD_DIAGRAM_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST \ #define LD_DIAGRAM_SYMBOL(obj) \
((obj), LD_TYPE_DIAGRAM_SYMBOL, LdDiagramSymbol)) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
#define LD_DIAGRAM_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \ LD_TYPE_DIAGRAM_SYMBOL, \
((klass), LD_TYPE_DIAGRAM_SYMBOL, LdDiagramSymbolClass)) LdDiagramSymbol))
#define LD_IS_DIAGRAM_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_DIAGRAM_SYMBOL_CLASS(klass) \
((obj), LD_TYPE_DIAGRAM_SYMBOL)) (G_TYPE_CHECK_CLASS_CAST ((klass), \
#define LD_IS_DIAGRAM_SYMBOL_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \ LD_TYPE_DIAGRAM_SYMBOL, \
((klass), LD_TYPE_DIAGRAM_SYMBOL)) LdDiagramSymbolClass))
#define LD_DIAGRAM_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \ #define LD_IS_DIAGRAM_SYMBOL(obj) \
((obj), LD_DIAGRAM_SYMBOL, LdDiagramSymbolClass)) (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 _LdDiagramSymbol LdDiagramSymbol;
typedef struct _LdDiagramSymbolPrivate LdDiagramSymbolPrivate; typedef struct _LdDiagramSymbolPrivate LdDiagramSymbolPrivate;
@ -70,4 +74,3 @@ void ld_diagram_symbol_set_rotation (LdDiagramSymbol *self, gint rotation);
G_END_DECLS G_END_DECLS
#endif /* ! __LD_DIAGRAM_SYMBOL_H__ */ #endif /* ! __LD_DIAGRAM_SYMBOL_H__ */

View File

@ -2,7 +2,7 @@
* ld-diagram-view.c * ld-diagram-view.c
* *
* This file is a part of logdiag. * This file is a part of logdiag.
* Copyright 2010, 2011, 2012, 2015 Přemysl Eric Janouch * Copyright 2010 - 2021 Přemysl Eric Janouch
* *
* See the file LICENSE for licensing information. * 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_end (LdDiagramView *self);
static void oper_select_get_rectangle (LdDiagramView *self, LdRectangle *rect); static void oper_select_get_rectangle (LdDiagramView *self, LdRectangle *rect);
static void oper_select_queue_draw (LdDiagramView *self); static void oper_select_queue_draw (LdDiagramView *self);
static void oper_select_draw (GtkWidget *widget, DrawData *data); static void oper_select_draw (DrawData *data);
static void oper_select_motion (LdDiagramView *self, const LdPoint *point); static void oper_select_motion (LdDiagramView *self, const LdPoint *point);
static void oper_move_selection_begin (LdDiagramView *self, static void oper_move_selection_begin (LdDiagramView *self,
@ -374,13 +374,19 @@ static void on_drag_leave (GtkWidget *widget, GdkDragContext *drag_ctx,
guint time, gpointer user_data); guint time, gpointer user_data);
static gboolean on_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data); static gboolean on_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data);
static void draw_grid (GtkWidget *widget, DrawData *data); static void draw_grid (DrawData *data);
static void draw_diagram (GtkWidget *widget, DrawData *data); static void draw_diagram (DrawData *data);
static void draw_terminal (GtkWidget *widget, DrawData *data); static void draw_terminal (DrawData *data);
static void draw_object (LdDiagramObject *diagram_object, DrawData *data); static void draw_object (LdDiagramObject *diagram_object, DrawData *data);
static void draw_symbol (LdDiagramSymbol *diagram_symbol, DrawData *data); static void draw_symbol (LdDiagramSymbol *diagram_symbol, DrawData *data);
static void draw_connection (LdDiagramConnection *connection, 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_DEFINE_TYPE_WITH_CODE (LdDiagramView, ld_diagram_view, GTK_TYPE_DRAWING_AREA,
G_IMPLEMENT_INTERFACE (GTK_TYPE_SCROLLABLE, G_IMPLEMENT_INTERFACE (GTK_TYPE_SCROLLABLE,
@ -1045,6 +1051,27 @@ ld_diagram_view_diagram_to_widget_coords (LdDiagramView *self,
*wy = scale * (dy - self->priv->y) + 0.5 * allocation.height; *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: * ld_diagram_view_get_x:
* @self: an #LdDiagramView object. * @self: an #LdDiagramView object.
@ -1288,7 +1315,7 @@ point_to_line_segment_distance
/* The projection is beyond the line segment. */ /* The projection is beyond the line segment. */
if (u < 0.) if (u < 0.)
return ld_point_distance (point, p1->x, p1->y); return ld_point_distance (point, p1->x, p1->y);
else if (u > 1.) if (u > 1.)
return ld_point_distance (point, p2->x, p2->y); return ld_point_distance (point, p2->x, p2->y);
/* The projection is on the line segment. */ /* The projection is on the line segment. */
@ -1390,8 +1417,8 @@ move_selection (LdDiagramView *self, gdouble dx, gdouble dy)
static gboolean static gboolean
is_object_selected (LdDiagramView *self, LdDiagramObject *object) is_object_selected (LdDiagramView *self, LdDiagramObject *object)
{ {
return g_list_find (ld_diagram_get_selection (self->priv->diagram), return g_list_find (ld_diagram_get_selection (self->priv->diagram), object)
object) != NULL; != NULL;
} }
static void static void
@ -1612,14 +1639,12 @@ get_symbol_clip_area (LdDiagramView *self,
} }
static gboolean static gboolean
get_symbol_area (LdDiagramView *self, LdDiagramSymbol *symbol, get_symbol_area_in_diagram_units (LdDiagramView *self, LdDiagramSymbol *symbol,
LdRectangle *rect) LdRectangle *rect)
{ {
gdouble object_x, object_y; gdouble object_x, object_y;
LdSymbol *library_symbol; LdSymbol *library_symbol;
LdRectangle area; LdRectangle area;
gdouble x1, x2;
gdouble y1, y2;
gint rotation; gint rotation;
g_object_get (symbol, "x", &object_x, "y", &object_y, g_object_get (symbol, "x", &object_x, "y", &object_y,
@ -1633,24 +1658,23 @@ get_symbol_area (LdDiagramView *self, LdDiagramSymbol *symbol,
rotate_symbol_area (&area, rotation); rotate_symbol_area (&area, rotation);
ld_diagram_view_diagram_to_widget_coords (self, rect->x = object_x + area.x;
object_x + area.x, rect->y = object_y + area.y;
object_y + area.y, rect->width = (rect->x + area.width) - rect->x;
&x1, &y1); rect->height = (rect->y + area.height) - rect->y;
ld_diagram_view_diagram_to_widget_coords (self, return TRUE;
object_x + area.x + area.width, }
object_y + area.y + area.height,
&x2, &y2);
x1 = floor (x1); static gboolean
y1 = floor (y1); get_symbol_area (LdDiagramView *self, LdDiagramSymbol *symbol,
x2 = ceil (x2); LdRectangle *rect)
y2 = ceil (y2); {
LdRectangle intermediate;
rect->x = x1; if (!get_symbol_area_in_diagram_units (self, symbol, &intermediate))
rect->y = y1; return FALSE;
rect->width = x2 - x1;
rect->height = y2 - y1; ld_diagram_view_diagram_to_widget_coords_rect (self, &intermediate, rect);
return TRUE; return TRUE;
} }
@ -1782,7 +1806,7 @@ get_connection_clip_area (LdDiagramView *self,
} }
static gboolean static gboolean
get_connection_area (LdDiagramView *self, get_connection_area_in_diagram_units (LdDiagramView *self,
LdDiagramConnection *connection, LdRectangle *rect) LdDiagramConnection *connection, LdRectangle *rect)
{ {
gdouble x_origin, y_origin; gdouble x_origin, y_origin;
@ -1799,20 +1823,13 @@ get_connection_area (LdDiagramView *self,
g_object_get (connection, "x", &x_origin, "y", &y_origin, NULL); g_object_get (connection, "x", &x_origin, "y", &y_origin, NULL);
ld_diagram_view_diagram_to_widget_coords (self, x_max = x_min = x_origin + points->points[0].x;
x_origin + points->points[0].x, y_max = y_min = y_origin + points->points[0].y;
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++) for (i = 1; i < points->length; i++)
{ {
ld_diagram_view_diagram_to_widget_coords (self, x = x_origin + points->points[i].x;
x_origin + points->points[i].x, y = y_origin + points->points[i].y;
y_origin + points->points[i].y,
&x, &y);
if (x < x_min) if (x < x_min)
x_min = x; x_min = x;
@ -1834,6 +1851,19 @@ get_connection_area (LdDiagramView *self,
return TRUE; 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 ======================================================== */ /* ===== Operations ======================================================== */
@ -2101,7 +2131,7 @@ oper_select_queue_draw (LdDiagramView *self)
} }
static void static void
oper_select_draw (GtkWidget *widget, DrawData *data) oper_select_draw (DrawData *data)
{ {
static const double dashes[] = {3, 5}; static const double dashes[] = {3, 5};
SelectData *select_data; SelectData *select_data;
@ -2561,7 +2591,9 @@ on_drag_motion (GtkWidget *widget, GdkDragContext *drag_ctx,
/* Discard leftovers from any previous unsuccessful drag. */ /* Discard leftovers from any previous unsuccessful drag. */
if (self->priv->dnd_left) if (self->priv->dnd_left)
{ {
g_object_unref (self->priv->dnd_symbol); /* The Wayland backend does a leave-drop-leave sequence. */
if (self->priv->dnd_symbol)
g_object_unref (self->priv->dnd_symbol);
self->priv->dnd_symbol = NULL; self->priv->dnd_symbol = NULL;
self->priv->dnd_left = FALSE; self->priv->dnd_left = FALSE;
} }
@ -2664,19 +2696,19 @@ on_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data)
cairo_paint (data.cr); cairo_paint (data.cr);
if (data.self->priv->show_grid) if (data.self->priv->show_grid)
draw_grid (widget, &data); draw_grid (&data);
draw_diagram (widget, &data); draw_diagram (&data);
draw_terminal (widget, &data); draw_terminal (&data);
if (data.self->priv->operation == OPER_SELECT) if (data.self->priv->operation == OPER_SELECT)
oper_select_draw (widget, &data); oper_select_draw (&data);
return FALSE; return FALSE;
} }
static void static void
draw_grid (GtkWidget *widget, DrawData *data) draw_grid (DrawData *data)
{ {
gdouble grid_step; gdouble grid_step;
gint grid_factor; gint grid_factor;
@ -2738,7 +2770,7 @@ draw_grid (GtkWidget *widget, DrawData *data)
} }
static void static void
draw_terminal (GtkWidget *widget, DrawData *data) draw_terminal (DrawData *data)
{ {
LdDiagramViewPrivate *priv; LdDiagramViewPrivate *priv;
LdPoint widget_coords; LdPoint widget_coords;
@ -2760,7 +2792,7 @@ draw_terminal (GtkWidget *widget, DrawData *data)
} }
static void static void
draw_diagram (GtkWidget *widget, DrawData *data) draw_diagram (DrawData *data)
{ {
GList *objects, *iter; GList *objects, *iter;
@ -2905,5 +2937,101 @@ draw_connection (LdDiagramConnection *connection, DrawData *data)
draw_connection_end: draw_connection_end:
ld_point_array_free (points); ld_point_array_free (points);
return; }
/* ===== 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);
} }

View File

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

View File

@ -105,7 +105,7 @@ static void uninstall_object (LdDiagramObject *object, LdDiagram *self);
static void ld_diagram_unselect_all_internal (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 static void
ld_diagram_class_init (LdDiagramClass *klass) ld_diagram_class_init (LdDiagramClass *klass)

View File

@ -15,16 +15,15 @@ G_BEGIN_DECLS
#define LD_TYPE_DIAGRAM (ld_diagram_get_type ()) #define LD_TYPE_DIAGRAM (ld_diagram_get_type ())
#define LD_DIAGRAM(obj) (G_TYPE_CHECK_INSTANCE_CAST \ #define LD_DIAGRAM(obj) \
((obj), LD_TYPE_DIAGRAM, LdDiagram)) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_DIAGRAM, LdDiagram))
#define LD_DIAGRAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \ #define LD_DIAGRAM_CLASS(klass) \
((klass), LD_TYPE_DIAGRAM, LdDiagramClass)) (G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_DIAGRAM, LdDiagramClass))
#define LD_IS_DIAGRAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_IS_DIAGRAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_DIAGRAM))
((obj), LD_TYPE_DIAGRAM)) #define LD_IS_DIAGRAM_CLASS(klass) \
#define LD_IS_DIAGRAM_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \ (G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_DIAGRAM))
((klass), LD_TYPE_DIAGRAM)) #define LD_DIAGRAM_GET_CLASS(obj) \
#define LD_DIAGRAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \ (G_TYPE_INSTANCE_GET_CLASS ((obj), LD_DIAGRAM, LdDiagramClass))
((obj), LD_DIAGRAM, LdDiagramClass))
typedef struct _LdDiagram LdDiagram; typedef struct _LdDiagram LdDiagram;
typedef struct _LdDiagramClass LdDiagramClass; typedef struct _LdDiagramClass LdDiagramClass;
@ -114,4 +113,3 @@ void ld_diagram_unselect_all (LdDiagram *self);
G_END_DECLS G_END_DECLS
#endif /* ! __LD_DIAGRAM_H__ */ #endif /* ! __LD_DIAGRAM_H__ */

View File

@ -49,8 +49,10 @@ static gboolean foreach_dir (const gchar *path,
gboolean (*callback) (const gchar *, const gchar *, gpointer), gboolean (*callback) (const gchar *, const gchar *, gpointer),
gpointer userdata, GError **error); 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 static void
ld_library_class_init (LdLibraryClass *klass) ld_library_class_init (LdLibraryClass *klass)
@ -356,62 +358,51 @@ ld_library_load (LdLibrary *self, const gchar *directory)
LdSymbol * LdSymbol *
ld_library_find_symbol (LdLibrary *self, const gchar *identifier) ld_library_find_symbol (LdLibrary *self, const gchar *identifier)
{ {
gchar **id_el_start, **id_el; gchar **path;
const GSList *list, *list_el; LdSymbol *symbol = NULL;
LdCategory *cat;
g_return_val_if_fail (LD_IS_LIBRARY (self), NULL); g_return_val_if_fail (LD_IS_LIBRARY (self), NULL);
g_return_val_if_fail (identifier != NULL, NULL); g_return_val_if_fail (identifier != NULL, NULL);
id_el_start = g_strsplit (identifier, LD_LIBRARY_IDENTIFIER_SEPARATOR, 0); path = g_strsplit (identifier, LD_LIBRARY_IDENTIFIER_SEPARATOR, 0);
if (!id_el_start) if (path)
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)
{ {
gboolean found = FALSE; symbol = traverse_path (self->priv->root, path);
g_strfreev (path);
}
return symbol;
}
list = ld_category_get_children (cat); static LdSymbol *
for (list_el = list; list_el; list_el = g_slist_next (list_el)) 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))
{ {
cat = LD_CATEGORY (list_el->data); category = LD_CATEGORY (iter->data);
if (!strcmp (*id_el, ld_category_get_name (cat))) if (!strcmp (*path, ld_category_get_name (category)))
{
found = TRUE;
break; break;
}
} }
if (!iter)
if (!found) return NULL;
goto ld_library_find_symbol_error;
if (!(id_el++)[2])
break;
} }
/* And then the actual symbol. */ /* And look up the actual symbol at the leaf. */
list = ld_category_get_symbols (cat); list = ld_category_get_symbols (category);
for (list_el = list; list_el; list_el = g_slist_next (list_el)) for (iter = list; iter; iter = g_slist_next (iter))
{ {
LdSymbol *symbol; symbol = LD_SYMBOL (iter->data);
if (!strcmp (*path, ld_symbol_get_name (symbol)))
symbol = LD_SYMBOL (list_el->data);
if (!strcmp (*id_el, ld_symbol_get_name (symbol)))
{
g_strfreev (id_el_start);
return symbol; return symbol;
}
} }
ld_library_find_symbol_error:
g_strfreev (id_el_start);
return NULL; return NULL;
} }
@ -427,4 +418,3 @@ ld_library_get_root (LdLibrary *self)
g_return_val_if_fail (LD_IS_LIBRARY (self), NULL); g_return_val_if_fail (LD_IS_LIBRARY (self), NULL);
return self->priv->root; return self->priv->root;
} }

View File

@ -15,16 +15,15 @@ G_BEGIN_DECLS
#define LD_TYPE_LIBRARY (ld_library_get_type ()) #define LD_TYPE_LIBRARY (ld_library_get_type ())
#define LD_LIBRARY(obj) (G_TYPE_CHECK_INSTANCE_CAST \ #define LD_LIBRARY(obj) \
((obj), LD_TYPE_LIBRARY, LdLibrary)) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_LIBRARY, LdLibrary))
#define LD_LIBRARY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \ #define LD_LIBRARY_CLASS(klass) \
((klass), LD_TYPE_LIBRARY, LdLibraryClass)) (G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_LIBRARY, LdLibraryClass))
#define LD_IS_LIBRARY(obj) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_IS_LIBRARY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_LIBRARY))
((obj), LD_TYPE_LIBRARY)) #define LD_IS_LIBRARY_CLASS(klass) \
#define LD_IS_LIBRARY_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \ (G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_LIBRARY))
((klass), LD_TYPE_LIBRARY)) #define LD_LIBRARY_GET_CLASS(obj) \
#define LD_LIBRARY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \ (G_TYPE_INSTANCE_GET_CLASS ((obj), LD_LIBRARY, LdLibraryClass))
((obj), LD_LIBRARY, LdLibraryClass))
typedef struct _LdLibrary LdLibrary; typedef struct _LdLibrary LdLibrary;
typedef struct _LdLibraryPrivate LdLibraryPrivate; typedef struct _LdLibraryPrivate LdLibraryPrivate;
@ -66,4 +65,3 @@ LdCategory *ld_library_get_root (LdLibrary *self);
G_END_DECLS G_END_DECLS
#endif /* ! __LD_LIBRARY_H__ */ #endif /* ! __LD_LIBRARY_H__ */

View File

@ -23,4 +23,3 @@ void ld_lua_private_draw (LdLua *self, LdLuaSymbol *symbol, cairo_t *cr);
G_END_DECLS G_END_DECLS
#endif /* ! __LD_LUA_PRIVATE_H__ */ #endif /* ! __LD_LUA_PRIVATE_H__ */

View File

@ -37,4 +37,3 @@ struct _LdLuaSymbolPrivate
G_END_DECLS G_END_DECLS
#endif /* ! __LD_LUA_SYMBOL_PRIVATE_H__ */ #endif /* ! __LD_LUA_SYMBOL_PRIVATE_H__ */

View File

@ -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); 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 static void
ld_lua_symbol_class_init (LdLuaSymbolClass *klass) ld_lua_symbol_class_init (LdLuaSymbolClass *klass)
@ -135,4 +135,3 @@ ld_lua_symbol_real_draw (LdSymbol *symbol, cairo_t *cr)
ld_lua_private_draw (self->priv->lua, self, cr); ld_lua_private_draw (self->priv->lua, self, cr);
cairo_restore (cr); cairo_restore (cr);
} }

View File

@ -15,16 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_LUA_SYMBOL (ld_lua_symbol_get_type ()) #define LD_TYPE_LUA_SYMBOL (ld_lua_symbol_get_type ())
#define LD_LUA_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST \ #define LD_LUA_SYMBOL(obj) \
((obj), LD_TYPE_LUA_SYMBOL, LdLuaSymbol)) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_LUA_SYMBOL, LdLuaSymbol))
#define LD_LUA_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \ #define LD_LUA_SYMBOL_CLASS(klass) \
((klass), LD_TYPE_LUA_SYMBOL, LdLuaSymbolClass)) (G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_LUA_SYMBOL, LdLuaSymbolClass))
#define LD_IS_LUA_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_IS_LUA_SYMBOL(obj) \
((obj), LD_TYPE_LUA_SYMBOL)) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_LUA_SYMBOL))
#define LD_IS_LUA_SYMBOL_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_IS_LUA_SYMBOL_CLASS(klass) \
((klass), LD_TYPE_LUA_SYMBOL)) (G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_LUA_SYMBOL))
#define LD_LUA_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \ #define LD_LUA_SYMBOL_GET_CLASS(obj) \
((obj), LD_LUA_SYMBOL, LdLuaSymbolClass)) (G_TYPE_INSTANCE_GET_CLASS ((obj), LD_LUA_SYMBOL, LdLuaSymbolClass))
typedef struct _LdLuaSymbol LdLuaSymbol; typedef struct _LdLuaSymbol LdLuaSymbol;
typedef struct _LdLuaSymbolPrivate LdLuaSymbolPrivate; typedef struct _LdLuaSymbolPrivate LdLuaSymbolPrivate;
@ -57,4 +57,3 @@ GType ld_lua_symbol_get_type (void) G_GNUC_CONST;
G_END_DECLS G_END_DECLS
#endif /* ! __LD_LUA_SYMBOL_H__ */ #endif /* ! __LD_LUA_SYMBOL_H__ */

View File

@ -150,7 +150,7 @@ static luaL_Reg ld_lua_cairo_table[] =
/* ===== Generic =========================================================== */ /* ===== Generic =========================================================== */
G_DEFINE_TYPE (LdLua, ld_lua, G_TYPE_OBJECT); G_DEFINE_TYPE (LdLua, ld_lua, G_TYPE_OBJECT)
static void static void
ld_lua_class_init (LdLuaClass *klass) ld_lua_class_init (LdLuaClass *klass)
@ -187,8 +187,7 @@ ld_lua_init (LdLua *self)
lua_State *L; lua_State *L;
LdLuaData *ud; LdLuaData *ud;
self->priv = G_TYPE_INSTANCE_GET_PRIVATE self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, LD_TYPE_LUA, LdLuaPrivate);
(self, LD_TYPE_LUA, LdLuaPrivate);
L = self->priv->L = lua_newstate (ld_lua_alloc, NULL); L = self->priv->L = lua_newstate (ld_lua_alloc, NULL);
g_return_if_fail (L != NULL); g_return_if_fail (L != NULL);
@ -251,8 +250,7 @@ ld_lua_alloc (void *ud, void *ptr, size_t osize, size_t nsize)
g_free (ptr); g_free (ptr);
return NULL; return NULL;
} }
else return g_try_realloc (ptr, nsize);
return g_try_realloc (ptr, nsize);
} }
/** /**
@ -465,8 +463,7 @@ ld_lua_logdiag_register (lua_State *L)
lua_insert (L, -2); lua_insert (L, -2);
lua_concat (L, 2); lua_concat (L, 2);
g_warning ("Lua symbol registration failed: %s", g_warning ("Lua symbol registration failed: %s", lua_tostring (L, -1));
lua_tostring (L, -1));
lua_pushboolean (L, FALSE); lua_pushboolean (L, FALSE);
} }
else else
@ -861,4 +858,3 @@ LD_LUA_CAIRO_BEGIN (show_text)
g_object_unref (layout); g_object_unref (layout);
LD_LUA_CAIRO_END (0) LD_LUA_CAIRO_END (0)

View File

@ -15,16 +15,14 @@ G_BEGIN_DECLS
#define LD_TYPE_LUA (ld_lua_get_type ()) #define LD_TYPE_LUA (ld_lua_get_type ())
#define LD_LUA(obj) (G_TYPE_CHECK_INSTANCE_CAST \ #define LD_LUA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_LUA, LdLua))
((obj), LD_TYPE_LUA, LdLua)) #define LD_LUA_CLASS(klass) \
#define LD_LUA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \ (G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_LUA, LdLuaClass))
((klass), LD_TYPE_LUA, LdLuaClass)) #define LD_IS_LUA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_LUA))
#define LD_IS_LUA(obj) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_IS_LUA_CLASS(klass) \
((obj), LD_TYPE_LUA)) (G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_LUA))
#define LD_IS_LUA_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_LUA_GET_CLASS(obj) \
((klass), LD_TYPE_LUA)) (G_TYPE_INSTANCE_GET_CLASS ((obj), LD_LUA, LdLuaClass))
#define LD_LUA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LD_LUA, LdLuaClass))
typedef struct _LdLua LdLua; typedef struct _LdLua LdLua;
typedef struct _LdLuaPrivate LdLuaPrivate; typedef struct _LdLuaPrivate LdLuaPrivate;
@ -67,4 +65,3 @@ gboolean ld_lua_load_file (LdLua *self, const gchar *filename,
G_END_DECLS G_END_DECLS
#endif /* ! __LD_LUA_H__ */ #endif /* ! __LD_LUA_H__ */

View File

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

View File

@ -38,7 +38,7 @@ static void ld_symbol_set_property (GObject *object, guint property_id,
const GValue *value, GParamSpec *pspec); 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 static void
ld_symbol_class_init (LdSymbolClass *klass) ld_symbol_class_init (LdSymbolClass *klass)

View File

@ -15,16 +15,15 @@ G_BEGIN_DECLS
#define LD_TYPE_SYMBOL (ld_symbol_get_type ()) #define LD_TYPE_SYMBOL (ld_symbol_get_type ())
#define LD_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST \ #define LD_SYMBOL(obj) \
((obj), LD_TYPE_SYMBOL, LdSymbol)) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_SYMBOL, LdSymbol))
#define LD_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \ #define LD_SYMBOL_CLASS(klass) \
((klass), LD_TYPE_SYMBOL, LdSymbolClass)) (G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_SYMBOL, LdSymbolClass))
#define LD_IS_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_IS_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_SYMBOL))
((obj), LD_TYPE_SYMBOL)) #define LD_IS_SYMBOL_CLASS(klass) \
#define LD_IS_SYMBOL_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \ (G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_SYMBOL))
((klass), LD_TYPE_SYMBOL)) #define LD_SYMBOL_GET_CLASS(obj) \
#define LD_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \ (G_TYPE_INSTANCE_GET_CLASS ((obj), LD_SYMBOL, LdSymbolClass))
((obj), LD_SYMBOL, LdSymbolClass))
typedef struct _LdSymbol LdSymbol; typedef struct _LdSymbol LdSymbol;
typedef struct _LdSymbolPrivate LdSymbolPrivate; typedef struct _LdSymbolPrivate LdSymbolPrivate;
@ -72,4 +71,3 @@ void ld_symbol_draw (LdSymbol *self, cairo_t *cr);
G_END_DECLS G_END_DECLS
#endif /* ! __LD_SYMBOL_H__ */ #endif /* ! __LD_SYMBOL_H__ */

View File

@ -256,7 +256,8 @@ ld_point_array_remove (LdPointArray *self, gint pos, guint length)
* *
* Change size of the array. * 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); g_return_if_fail (self != NULL);

View File

@ -14,9 +14,9 @@
G_BEGIN_DECLS 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_POINT_ARRAY (ld_point_array_get_type ())
#define LD_TYPE_RECTANGLE (ld_rectangle_get_type ()) #define LD_TYPE_RECTANGLE (ld_rectangle_get_type ())
/** /**
@ -99,4 +99,3 @@ void ld_rectangle_extend (LdRectangle *self, gdouble border);
G_END_DECLS G_END_DECLS
#endif /* ! __LD_TYPES_H__ */ #endif /* ! __LD_TYPES_H__ */

View File

@ -40,7 +40,7 @@ struct _LdUndoActionPrivate
static void ld_undo_action_finalize (GObject *gobject); 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 static void
ld_undo_action_class_init (LdUndoActionClass *klass) ld_undo_action_class_init (LdUndoActionClass *klass)
@ -84,9 +84,8 @@ ld_undo_action_finalize (GObject *gobject)
* Return value: a new #LdUndoAction object. * Return value: a new #LdUndoAction object.
*/ */
LdUndoAction * LdUndoAction *
ld_undo_action_new (LdUndoActionFunc undo_func, ld_undo_action_new (LdUndoActionFunc undo_func, LdUndoActionFunc redo_func,
LdUndoActionFunc redo_func, LdUndoActionFunc destroy_func, LdUndoActionFunc destroy_func, gpointer user_data)
gpointer user_data)
{ {
LdUndoAction *self; LdUndoAction *self;

View File

@ -15,16 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_UNDO_ACTION (ld_undo_action_get_type ()) #define LD_TYPE_UNDO_ACTION (ld_undo_action_get_type ())
#define LD_UNDO_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST \ #define LD_UNDO_ACTION(obj) \
((obj), LD_TYPE_UNDO_ACTION, LdUndoAction)) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_UNDO_ACTION, LdUndoAction))
#define LD_UNDO_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \ #define LD_UNDO_ACTION_CLASS(klass) \
((klass), LD_TYPE_UNDO_ACTION, LdUndoActionClass)) (G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_UNDO_ACTION, LdUndoActionClass))
#define LD_IS_UNDO_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_IS_UNDO_ACTION(obj) \
((obj), LD_TYPE_UNDO_ACTION)) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_UNDO_ACTION))
#define LD_IS_UNDO_ACTION_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_IS_UNDO_ACTION_CLASS(klass) \
((klass), LD_TYPE_UNDO_ACTION)) (G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_UNDO_ACTION))
#define LD_UNDO_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \ #define LD_UNDO_ACTION_GET_CLASS(obj) \
((obj), LD_UNDO_ACTION, LdUndoActionClass)) (G_TYPE_INSTANCE_GET_CLASS ((obj), LD_UNDO_ACTION, LdUndoActionClass))
typedef struct _LdUndoAction LdUndoAction; typedef struct _LdUndoAction LdUndoAction;
typedef struct _LdUndoActionPrivate LdUndoActionPrivate; typedef struct _LdUndoActionPrivate LdUndoActionPrivate;
@ -73,4 +73,3 @@ void ld_undo_action_redo (LdUndoAction *self);
G_END_DECLS G_END_DECLS
#endif /* ! __LD_UNDO_ACTION_H__ */ #endif /* ! __LD_UNDO_ACTION_H__ */

134
po/cs.po
View File

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

141
po/de.po
View File

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

View File

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

159
po/pl.po
View File

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

148
po/sk.po
View File

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

View File

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

View File

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

View File

@ -48,7 +48,7 @@ local render = function (cr)
cr:move_to (-1, -1) cr:move_to (-1, -1)
cr:line_to (1, 0) cr:line_to (1, 0)
cr:line_to (-1, 1) cr:line_to (-1, 1)
cr:line_to (-1, -1) cr:close_path ()
-- The vertical line -- The vertical line
cr:move_to (1, 1) 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:line_to (1.5, 0.5)
cr:line_to (-1.5, 0.5) cr:line_to (-1.5, 0.5)
cr:line_to (-1.5, -0.5) cr:close_path ()
-- The terminals -- The terminals
cr:move_to (-2, 0) cr:move_to (-2, 0)

View File

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

11
share/logdiag.manifest Normal file
View File

@ -0,0 +1,11 @@
<?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 +1,3 @@
#include <windows.h>
LD_ICON ICON "logdiag.ico" LD_ICON ICON "logdiag.ico"
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "logdiag.manifest"

View File

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

View File

@ -13,6 +13,11 @@
#include "ld-window-main.h" #include "ld-window-main.h"
#ifdef G_OS_WIN32
#include <gdk/gdkwin32.h>
#include <shellapi.h>
#endif
struct _LdWindowMainPrivate struct _LdWindowMainPrivate
{ {
@ -51,6 +56,8 @@ struct _LdWindowMainPrivate
static void ld_window_main_finalize (GObject *gobject); static void ld_window_main_finalize (GObject *gobject);
static void load_library_directories (LdLibrary *library); 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, static void on_ui_proxy_connected (GtkUIManager *ui, GtkAction *action,
GtkWidget *proxy, LdWindowMain *window); GtkWidget *proxy, LdWindowMain *window);
@ -99,8 +106,14 @@ static void on_action_new (GtkAction *action, LdWindowMain *self);
static void on_action_open (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 (GtkAction *action, LdWindowMain *self);
static void on_action_save_as (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_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 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_undo (GtkAction *action, LdWindowMain *self);
static void on_action_redo (GtkAction *action, LdWindowMain *self); static void on_action_redo (GtkAction *action, LdWindowMain *self);
@ -136,11 +149,11 @@ static GtkActionEntry wm_action_entries[] =
{"SaveAs", GTK_STOCK_SAVE_AS, N_("Save _As..."), "<Shift><Ctrl>S", {"SaveAs", GTK_STOCK_SAVE_AS, N_("Save _As..."), "<Shift><Ctrl>S",
N_("Save the current diagram with another name"), N_("Save the current diagram with another name"),
G_CALLBACK (on_action_save_as)}, G_CALLBACK (on_action_save_as)},
/*
* {"Export", NULL, N_("_Export"), NULL, {"Print", GTK_STOCK_PRINT, N_("_Print..."), "<Ctrl>P",
* N_("Export the diagram"), N_("Print the diagram"),
* NULL}, G_CALLBACK (on_action_print)},
*/
{"Quit", GTK_STOCK_QUIT, N_("_Quit"), "<Ctrl>Q", {"Quit", GTK_STOCK_QUIT, N_("_Quit"), "<Ctrl>Q",
N_("Quit the application"), N_("Quit the application"),
G_CALLBACK (on_action_quit)}, G_CALLBACK (on_action_quit)},
@ -176,9 +189,12 @@ static GtkActionEntry wm_action_entries[] =
G_CALLBACK (on_action_normal_size)}, G_CALLBACK (on_action_normal_size)},
{"HelpMenu", NULL, N_("_Help"), NULL, NULL, NULL}, {"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, {"About", GTK_STOCK_ABOUT, N_("_About"), NULL,
N_("Show a dialog about this application"), N_("Show a dialog about this application"),
G_CALLBACK (on_action_about)} G_CALLBACK (on_action_about)},
}; };
static GtkToggleActionEntry wm_toggle_action_entries[] = static GtkToggleActionEntry wm_toggle_action_entries[] =
@ -189,7 +205,7 @@ static GtkToggleActionEntry wm_toggle_action_entries[] =
{"LibraryPane", NULL, N_("_Library Pane"), NULL, {"LibraryPane", NULL, N_("_Library Pane"), NULL,
N_("Toggle displaying of the library pane"), N_("Toggle displaying of the library pane"),
G_CALLBACK (on_action_library_pane), TRUE}, G_CALLBACK (on_action_library_pane), TRUE},
{"ShowGrid", NULL, N_("Show _Grid"), NULL, {"ShowGrid", NULL, N_("Show _Grid"), "numbersign",
N_("Toggle displaying of the grid"), N_("Toggle displaying of the grid"),
G_CALLBACK (on_action_grid), TRUE} G_CALLBACK (on_action_grid), TRUE}
}; };
@ -215,7 +231,7 @@ ld_window_main_new (const gchar *filename)
return self; return self;
} }
G_DEFINE_TYPE (LdWindowMain, ld_window_main, GTK_TYPE_WINDOW); G_DEFINE_TYPE (LdWindowMain, ld_window_main, GTK_TYPE_WINDOW)
static void static void
ld_window_main_class_init (LdWindowMainClass *klass) ld_window_main_class_init (LdWindowMainClass *klass)
@ -258,8 +274,8 @@ ld_window_main_init (LdWindowMain *self)
priv->action_group, 0); priv->action_group, 0);
error = NULL; error = NULL;
gtk_ui_manager_add_ui_from_file gtk_ui_manager_add_ui_from_resource
(priv->ui_manager, PROJECT_SHARE_DIR "gui/window-main.ui", &error); (priv->ui_manager, "/logdiag/logdiag.ui", &error);
if (error) if (error)
{ {
g_message ("building UI failed: %s", error->message); g_message ("building UI failed: %s", error->message);
@ -373,7 +389,7 @@ ld_window_main_init (LdWindowMain *self)
gtk_widget_show_all (GTK_WIDGET (self)); gtk_widget_show_all (GTK_WIDGET (self));
/* Set up GSettings. */ /* Set up GSettings. */
priv->settings = g_settings_new ("org." PROJECT_NAME); priv->settings = g_settings_new (PROJECT_ID);
g_settings_bind (priv->settings, "show-main-toolbar", g_settings_bind (priv->settings, "show-main-toolbar",
gtk_action_group_get_action (priv->action_group, gtk_action_group_get_action (priv->action_group,
@ -435,6 +451,21 @@ load_library_directories (LdLibrary *library)
g_free (user_dir); 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: * on_delete:
* *
@ -587,8 +618,8 @@ diagram_get_name (LdWindowMain *self)
if (self->priv->filename) if (self->priv->filename)
return g_filename_display_basename (self->priv->filename); return g_filename_display_basename (self->priv->filename);
else
return g_strdup (_("Unsaved Diagram")); return g_strdup (_("Unsaved Diagram"));
} }
/* /*
@ -667,12 +698,10 @@ diagram_save (LdWindowMain *self, GtkWindow *dialog_parent,
gtk_widget_destroy (message_dialog); gtk_widget_destroy (message_dialog);
return FALSE; return FALSE;
} }
else
{ ld_diagram_set_modified (self->priv->diagram, FALSE);
ld_diagram_set_modified (self->priv->diagram, FALSE); update_title (self);
update_title (self); return TRUE;
return TRUE;
}
} }
/* /*
@ -683,9 +712,10 @@ diagram_save (LdWindowMain *self, GtkWindow *dialog_parent,
static gboolean static gboolean
diagram_open (LdWindowMain *self, const gchar *filename) diagram_open (LdWindowMain *self, const gchar *filename)
{ {
GError *error; GError *error = NULL;
GFile *file;
gchar *uri;
error = NULL;
ld_diagram_load_from_file (self->priv->diagram, filename, &error); ld_diagram_load_from_file (self->priv->diagram, filename, &error);
if (error) if (error)
{ {
@ -719,8 +749,17 @@ diagram_open (LdWindowMain *self, const gchar *filename)
return FALSE; 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); ld_diagram_set_modified (self->priv->diagram, FALSE);
diagram_set_filename (self, g_strdup (filename)); 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; return TRUE;
} }
@ -966,6 +1005,89 @@ on_action_save_as (GtkAction *action, LdWindowMain *self)
diagram_show_save_as_dialog (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 static void
on_action_quit (GtkAction *action, LdWindowMain *self) on_action_quit (GtkAction *action, LdWindowMain *self)
{ {
@ -973,17 +1095,123 @@ on_action_quit (GtkAction *action, LdWindowMain *self)
gtk_widget_destroy (GTK_WIDGET (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 static void
on_action_about (GtkAction *action, LdWindowMain *self) on_action_about (GtkAction *action, LdWindowMain *self)
{ {
gtk_show_about_dialog (GTK_WINDOW (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,
"program-name", PROJECT_NAME, "program-name", PROJECT_NAME,
"logo-icon-name", PROJECT_NAME, "logo-icon-name", PROJECT_NAME,
"version", PROJECT_VERSION, "version", PROJECT_VERSION,
"translator-credits", _("translator-credits"), "translator-credits", _("translator-credits"),
"copyright", "Copyright 2010 - 2021 Přemysl Eric Janouch", "copyright", "Copyright 2010 - 2021 Přemysl Eric Janouch",
"license", g_bytes_get_data (license, NULL),
"website", PROJECT_URL, "website", PROJECT_URL,
NULL); 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 static void

View File

@ -15,16 +15,16 @@ G_BEGIN_DECLS
#define LD_TYPE_WINDOW_MAIN (ld_window_main_get_type ()) #define LD_TYPE_WINDOW_MAIN (ld_window_main_get_type ())
#define LD_WINDOW_MAIN(obj) (G_TYPE_CHECK_INSTANCE_CAST \ #define LD_WINDOW_MAIN(obj) \
((obj), LD_TYPE_WINDOW_MAIN, LdWindowMain)) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_WINDOW_MAIN, LdWindowMain))
#define LD_WINDOW_MAIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \ #define LD_WINDOW_MAIN_CLASS(klass) \
((klass), LD_TYPE_WINDOW_MAIN, LdWindowMainClass)) (G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_WINDOW_MAIN, LdWindowMainClass))
#define LD_IS_WINDOW_MAIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_IS_WINDOW_MAIN(obj) \
((obj), LD_TYPE_WINDOW_MAIN)) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_WINDOW_MAIN))
#define LD_IS_WINDOW_MAIN_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \ #define LD_IS_WINDOW_MAIN_CLASS(klass) \
((klass), LD_TYPE_WINDOW_MAIN)) (G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_WINDOW_MAIN))
#define LD_WINDOW_MAIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \ #define LD_WINDOW_MAIN_GET_CLASS(obj) \
((obj), LD_WINDOW_MAIN, LdWindowMainClass)) (G_TYPE_INSTANCE_GET_CLASS ((obj), LD_WINDOW_MAIN, LdWindowMainClass))
typedef struct _LdWindowMain LdWindowMain; typedef struct _LdWindowMain LdWindowMain;
typedef struct _LdWindowMainPrivate LdWindowMainPrivate; typedef struct _LdWindowMainPrivate LdWindowMainPrivate;
@ -53,4 +53,3 @@ GtkWidget *ld_window_main_new (const gchar *filename);
G_END_DECLS G_END_DECLS
#endif /* ! __LD_WINDOW_MAIN_H__ */ #endif /* ! __LD_WINDOW_MAIN_H__ */

View File

@ -127,16 +127,16 @@ main (int argc, char *argv[])
textdomain (GETTEXT_DOMAIN); textdomain (GETTEXT_DOMAIN);
#ifdef PROJECT_GSETTINGS_DIR #ifdef PROJECT_GSETTINGS_DIR
/* This is enabled when the build is set up for developing, so that the /* This is enabled when the build is set up for development,
* application can find its schema. It might also find use when * so that the application can find its schema. It might also find use
* installing the application into a location that's missing from * when installing the application into a location that's missing from
* g_get_system_data_dirs(), for example /usr/local or ~/.local. * g_get_system_data_dirs(), for example /usr/local or ~/.local.
*/ */
g_setenv ("GSETTINGS_SCHEMA_DIR", PROJECT_GSETTINGS_DIR, 0); g_setenv ("GSETTINGS_SCHEMA_DIR", PROJECT_GSETTINGS_DIR, 0);
#endif /* PROJECT_GSETTINGS_DIR */ #endif /* PROJECT_GSETTINGS_DIR */
#ifdef _WIN32 #ifdef _WIN32
/* Don't be unneccessarily limited by the system ANSI codepage. */ /* Don't be unneccessarily limited by the system's ANSI codepage. */
/* g_win32_get_command_line() should replace this code for GLib >= 2.40. */ /* g_win32_get_command_line() should replace this code for GLib >= 2.40. */
argv_overriden = get_utf8_args (&argc, &argv); argv_overriden = get_utf8_args (&argc, &argv);
if (argv_overriden) if (argv_overriden)
@ -161,6 +161,11 @@ main (int argc, char *argv[])
} }
#endif #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); gtk_window_set_default_icon_name (PROJECT_NAME);
if (files) if (files)
@ -175,4 +180,3 @@ main (int argc, char *argv[])
gtk_main (); gtk_main ();
return 0; return 0;
} }

1
vera++

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