Compare commits
	
		
			19 Commits
		
	
	
		
			v0.2.1
			...
			b45670f9e9
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						b45670f9e9
	
				 | 
					
					
						|||
| 
						
						
							
						
						06e3c9e280
	
				 | 
					
					
						|||
| 
						
						
							
						
						073a4cd4a7
	
				 | 
					
					
						|||
| 
						
						
							
						
						f7807cada2
	
				 | 
					
					
						|||
| 
						
						
							
						
						08cf0ef2e6
	
				 | 
					
					
						|||
| 
						
						
							
						
						baf2dc8ccd
	
				 | 
					
					
						|||
| 
						
						
							
						
						a5e341bcc1
	
				 | 
					
					
						|||
| 
						
						
							
						
						bc8ceebef7
	
				 | 
					
					
						|||
| 
						
						
							
						
						da0a5c43dc
	
				 | 
					
					
						|||
| 
						
						
							
						
						384dad7bd8
	
				 | 
					
					
						|||
| 
						
						
							
						
						ada833a009
	
				 | 
					
					
						|||
| 
						
						
							
						
						924617e1ce
	
				 | 
					
					
						|||
| 
						
						
							
						
						67acddb26d
	
				 | 
					
					
						|||
| 
						
						
							
						
						bc1dd64fdf
	
				 | 
					
					
						|||
| 
						
						
							
						
						8c290df7b5
	
				 | 
					
					
						|||
| 
						
						
							
						
						5fc35517cb
	
				 | 
					
					
						|||
| 
						
						
							
						
						5a4cffd35e
	
				 | 
					
					
						|||
| 
						
						
							
						
						3a087ad581
	
				 | 
					
					
						|||
| 
						
						
							
						
						4305c603e9
	
				 | 
					
					
						
							
								
								
									
										37
									
								
								.clang-format
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								.clang-format
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
# 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
 | 
			
		||||
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,10 +1,11 @@
 | 
			
		||||
# 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)
 | 
			
		||||
 | 
			
		||||
# Options
 | 
			
		||||
option (OPTION_USE_VERA "Use vera++ for source code style checks" 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)
 | 
			
		||||
 | 
			
		||||
# Project information
 | 
			
		||||
@@ -103,10 +104,6 @@ foreach (file ${project_PO_FILES})
 | 
			
		||||
	list (APPEND project_TRANSLATIONS "${translation}")
 | 
			
		||||
endforeach (file)
 | 
			
		||||
 | 
			
		||||
# Documentation--gtk-doc 1.25 is required
 | 
			
		||||
find_package (GtkDoc 1.25)
 | 
			
		||||
set (project_DOC_DIR "${PROJECT_BINARY_DIR}/liblogdiag")
 | 
			
		||||
 | 
			
		||||
# Project source files
 | 
			
		||||
set (liblogdiag_SOURCES
 | 
			
		||||
	liblogdiag/ld-marshal.c
 | 
			
		||||
@@ -174,6 +171,8 @@ if (WIN32)
 | 
			
		||||
endif (WIN32)
 | 
			
		||||
 | 
			
		||||
# 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 (${PROJECT_SOURCE_DIR}/config.h.in
 | 
			
		||||
	${PROJECT_BINARY_DIR}/config.h)
 | 
			
		||||
include_directories (${PROJECT_BINARY_DIR})
 | 
			
		||||
@@ -221,7 +220,7 @@ set (logdiag_LIBS ${GTK3_LIBRARIES} ${Lua_LIBRARIES} m)
 | 
			
		||||
 | 
			
		||||
if (WIN32)
 | 
			
		||||
	find_package (LibIntl REQUIRED)
 | 
			
		||||
	list (APPEND logdiag_LIBS ${LIBINTL_LIBRARIES})
 | 
			
		||||
	list (APPEND logdiag_LIBS ${LIBINTL_LIBRARIES} shell32)
 | 
			
		||||
endif (WIN32)
 | 
			
		||||
 | 
			
		||||
# Build the library
 | 
			
		||||
@@ -249,14 +248,26 @@ if (BUILD_TESTING)
 | 
			
		||||
endif (BUILD_TESTING)
 | 
			
		||||
 | 
			
		||||
# Generate documentation
 | 
			
		||||
if (GTKDOC_FOUND)
 | 
			
		||||
	# FIXME: not our bug but xml/gtkdocentities.ent cannot be passed
 | 
			
		||||
	target_link_libraries (liblogdiag ${logdiag_LIBS})
 | 
			
		||||
if (OPTION_GTKDOC)
 | 
			
		||||
	find_package (GtkDoc 1.25 REQUIRED)
 | 
			
		||||
	set (project_DOC_DIR "${PROJECT_BINARY_DIR}/liblogdiag")
 | 
			
		||||
 | 
			
		||||
	# Extracted LDFLAGS didn't contain -l in CMake 3.21.3 and gtk-doc 1.33.2,
 | 
			
		||||
	# pass them explicitly and work around insanity; CMake still exits with
 | 
			
		||||
	# an error and gtk-doc produces empty HTML documentation
 | 
			
		||||
	string (REGEX REPLACE "(;)([^-])" "\\1-l\\2" xldflags "${logdiag_LIBS}")
 | 
			
		||||
	set_target_properties (liblogdiag PROPERTIES LINK_LIBRARIES "")
 | 
			
		||||
 | 
			
		||||
	# The "official" module wants an XML file I don't want to give it
 | 
			
		||||
	file (WRITE ${PROJECT_BINARY_DIR}/liblogdiag-docs-dummy.xml "<book/>")
 | 
			
		||||
 | 
			
		||||
	# XXX: not our bug but xml/gtkdocentities.ent cannot be passed
 | 
			
		||||
	# XXX: this causes `make clean` to remove the entire build directory,
 | 
			
		||||
	# because it marks CMAKE_CURRENT_BINARY_DIR as an output
 | 
			
		||||
	gtk_doc_add_module (liblogdiag
 | 
			
		||||
		SOURCE ${PROJECT_SOURCE_DIR}/liblogdiag
 | 
			
		||||
		SUFFIXES c h
 | 
			
		||||
		# The "official" module wants an XML file I don't want to give it
 | 
			
		||||
		XML ${PROJECT_BINARY_DIR}/liblogdiag/liblogdiag-docs.xml
 | 
			
		||||
		SUFFIXES c h LDFLAGS "-l${xldflags}"
 | 
			
		||||
		XML ${PROJECT_BINARY_DIR}/liblogdiag-docs-dummy.xml
 | 
			
		||||
		LIBRARIES liblogdiag)
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
@@ -333,8 +344,7 @@ if (WIN32)
 | 
			
		||||
	install (DIRECTORY
 | 
			
		||||
		${WIN32_DEPENDS_PATH}/bin/
 | 
			
		||||
		DESTINATION .
 | 
			
		||||
		FILES_MATCHING PATTERN "*.dll"
 | 
			
		||||
		PATTERN "libgettext*" EXCLUDE)
 | 
			
		||||
		FILES_MATCHING PATTERN "*.dll" PATTERN "gspawn-*-helper.exe")
 | 
			
		||||
	install (DIRECTORY
 | 
			
		||||
		${WIN32_DEPENDS_PATH}/etc/
 | 
			
		||||
		DESTINATION etc)
 | 
			
		||||
@@ -366,6 +376,8 @@ if (WIN32)
 | 
			
		||||
				DESTINATION share/locale)
 | 
			
		||||
		endif (translation_found GREATER -1)
 | 
			
		||||
	endforeach (locale)
 | 
			
		||||
 | 
			
		||||
	install (SCRIPT Win32Cleanup.cmake)
 | 
			
		||||
else (WIN32)
 | 
			
		||||
	install (TARGETS logdiag DESTINATION bin)
 | 
			
		||||
	install (FILES share/logdiag.desktop DESTINATION share/applications)
 | 
			
		||||
@@ -377,13 +389,14 @@ else (WIN32)
 | 
			
		||||
	install (FILES LICENSE NEWS DESTINATION share/doc/${PROJECT_NAME})
 | 
			
		||||
endif (WIN32)
 | 
			
		||||
 | 
			
		||||
install (DIRECTORY docs/user-guide DESTINATION share/doc/${PROJECT_NAME})
 | 
			
		||||
install (DIRECTORY share/gui share/library DESTINATION share/${PROJECT_NAME})
 | 
			
		||||
install (FILES ${GSETTINGS_SCHEMAS} DESTINATION share/glib-2.0/schemas)
 | 
			
		||||
install (CODE " # DESTDIR is not in use on Windows
 | 
			
		||||
install (CODE " # DESTDIR is not in use on Windows (WIN32 is only native here!)
 | 
			
		||||
	if (WIN32 OR \"\$ENV{DESTDIR}\" STREQUAL \"\")
 | 
			
		||||
		execute_process (COMMAND \"${GLIB_COMPILE_SCHEMAS_EXECUTABLE}\"
 | 
			
		||||
			\"\${CMAKE_INSTALL_PREFIX}/share/glib-2.0/schemas\")
 | 
			
		||||
	endif (WIN32 OR \"\$ENV{DESTDIR}\" STREQUAL \"\")")
 | 
			
		||||
	endif ()")
 | 
			
		||||
 | 
			
		||||
# CPack
 | 
			
		||||
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Schematic editor")
 | 
			
		||||
@@ -409,22 +422,21 @@ set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${PROJECT_NAME}")
 | 
			
		||||
 | 
			
		||||
set (CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/share\\\\header.bmp")
 | 
			
		||||
set (CPACK_NSIS_INSTALLED_ICON_NAME "logdiag.exe")
 | 
			
		||||
set (CPACK_NSIS_CREATE_ICONS_EXTRA "
 | 
			
		||||
	CreateShortCut '\$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\logdiag.lnk' '\$INSTDIR\\\\logdiag.exe'")
 | 
			
		||||
set (CPACK_NSIS_DELETE_ICONS_EXTRA "
 | 
			
		||||
	Delete '\$SMPROGRAMS\\\\$MUI_TEMP\\\\logdiag.lnk'")
 | 
			
		||||
set (CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
 | 
			
		||||
set (CPACK_NSIS_URL_INFO_ABOUT "${project_URL}")
 | 
			
		||||
set (CPACK_NSIS_HELP_LINK "${project_URL}")
 | 
			
		||||
# Or CPACK_NSIS_EXECUTABLES_DIRECTORY needs to be changed from "bin"
 | 
			
		||||
set (CPACK_NSIS_MENU_LINKS "logdiag.exe" ${PROJECT_NAME})
 | 
			
		||||
set (CPACK_NSIS_EXTRA_INSTALL_COMMANDS [[
 | 
			
		||||
	WriteRegStr HKCR '.ldd' '' 'logdiag.Diagram'
 | 
			
		||||
	WriteRegStr HKCR 'logdiag.Diagram' '' 'logdiag Diagram'
 | 
			
		||||
	WriteRegStr HKCR 'logdiag.Diagram\\\\shell\\\\open\\\\command' '' '\\\"\$INSTDIR\\\\logdiag.exe\\\" \\\"%1\\\"'
 | 
			
		||||
	WriteRegStr HKCR 'logdiag.Diagram\\\\shell\\\\edit\\\\command' '' '\\\"\$INSTDIR\\\\logdiag.exe\\\" \\\"%1\\\"'
 | 
			
		||||
	System::Call 'shell32::SHChangeNotify(i,i,i,i) (0x08000000, 0x1000, 0, 0)'")
 | 
			
		||||
set (CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "
 | 
			
		||||
	WriteRegStr HKCR 'logdiag.Diagram\\shell\\open\\command' '' '\"$INSTDIR\\logdiag.exe\" \"%1\"'
 | 
			
		||||
	WriteRegStr HKCR 'logdiag.Diagram\\shell\\edit\\command' '' '\"$INSTDIR\\logdiag.exe\" \"%1\"'
 | 
			
		||||
	System::Call 'shell32::SHChangeNotify(i,i,i,i) (0x08000000, 0x1000, 0, 0)'
 | 
			
		||||
]])
 | 
			
		||||
set (CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS [[
 | 
			
		||||
	DeleteRegKey HKCR 'logdiag.Diagram'
 | 
			
		||||
	System::Call 'shell32::SHChangeNotify(i,i,i,i) (0x08000000, 0x1000, 0, 0)'")
 | 
			
		||||
 | 
			
		||||
string (REPLACE "https://" "https:\\\\\\\\" project_URL_NSIS "${project_URL}")
 | 
			
		||||
set (CPACK_NSIS_URL_INFO_ABOUT "${project_URL_NSIS}")
 | 
			
		||||
	System::Call 'shell32::SHChangeNotify(i,i,i,i) (0x08000000, 0x1000, 0, 0)'
 | 
			
		||||
]])
 | 
			
		||||
 | 
			
		||||
set (CPACK_DEBIAN_PACKAGE_DEPENDS
 | 
			
		||||
	"libgtk3.0-0 (>= 3.8), libjson-glib-1.0-0 (>= 0.10.4), liblua5.2-0")
 | 
			
		||||
@@ -443,4 +455,3 @@ set (CPACK_SOURCE_IGNORE_FILES "/\\\\.git;/build;/CMakeLists.txt.user;/win32-dep
 | 
			
		||||
set (CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}")
 | 
			
		||||
 | 
			
		||||
include (CPack)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										51
									
								
								README.adoc
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								README.adoc
									
									
									
									
									
								
							@@ -3,7 +3,8 @@ logdiag
 | 
			
		||||
 | 
			
		||||
'logdiag' is a simple multiplatform schematic editor written in GTK+.
 | 
			
		||||
 | 
			
		||||
This software has never really been finished, and is no longer being worked on.
 | 
			
		||||
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"]
 | 
			
		||||
 | 
			
		||||
@@ -12,10 +13,13 @@ Packages
 | 
			
		||||
Regular releases are sporadic.  git master should be stable enough.  You can get
 | 
			
		||||
a package with the latest development version from Archlinux's AUR.
 | 
			
		||||
 | 
			
		||||
Windows installers can be downloaded from
 | 
			
		||||
https://git.janouch.name/p/logdiag/releases[the Releases page on Gitea].
 | 
			
		||||
 | 
			
		||||
Requirements
 | 
			
		||||
------------
 | 
			
		||||
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
 | 
			
		||||
--------------------------------------
 | 
			
		||||
@@ -32,49 +36,45 @@ application to be installed. The default is _/usr/local_.
 | 
			
		||||
 | 
			
		||||
 $ cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
 | 
			
		||||
 | 
			
		||||
Now you have two basic choices of installing the application.
 | 
			
		||||
 | 
			
		||||
Using _make install_
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
Now you have two basic choices of installing the application:
 | 
			
		||||
 | 
			
		||||
1. Using _make install_:
 | 
			
		||||
+
 | 
			
		||||
 # make install
 | 
			
		||||
 | 
			
		||||
Using _cpack_
 | 
			
		||||
~~~~~~~~~~~~~
 | 
			
		||||
2. Using _cpack_:
 | 
			
		||||
+
 | 
			
		||||
You have to choose a package format understood by your system package manager.
 | 
			
		||||
CMake offers DEB and RPM.
 | 
			
		||||
 | 
			
		||||
+
 | 
			
		||||
After _cpack_ finishes making the package, install this file.
 | 
			
		||||
 | 
			
		||||
+
 | 
			
		||||
 $ cpack -G DEB
 | 
			
		||||
 # dpkg -i logdiag-version-system-arch.deb
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
to build an installation package, also install NSIS. If you want to build within
 | 
			
		||||
a path containing spaces, fix your FindPkgConfig.cmake to say:
 | 
			
		||||
First, install CMake and MinGW.  Add both to your system path.  If you want
 | 
			
		||||
to build an installation package, also install NSIS.  If you want to build
 | 
			
		||||
within a path containing spaces,
 | 
			
		||||
https://gitlab.kitware.com/cmake/cmake/-/issues/22396[fix] your CMake's
 | 
			
		||||
FindPkgConfig.cmake module to say:
 | 
			
		||||
 | 
			
		||||
 separate_arguments(_pkgconfig_invoke_result UNIX_COMMAND "${_pkgconfig_invoke_result}")
 | 
			
		||||
 | 
			
		||||
Run the following command in the directory with source files to automatically
 | 
			
		||||
fetch and setup all dependencies (contact me if the script becomes obsolete,
 | 
			
		||||
it's easy to fix but I usually update it only just a short while before
 | 
			
		||||
releasing a new version in order to resolve compatibility issues):
 | 
			
		||||
fetch and set up all dependencies (note that Windows XP is no longer able to
 | 
			
		||||
download from HTTPS sources, you'll have to run this externally):
 | 
			
		||||
 | 
			
		||||
 > cmake -P Win32Depends.cmake
 | 
			
		||||
 | 
			
		||||
Note that Windows XP is no longer able to reliably download from HTTPS sources.
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 > cd build
 | 
			
		||||
 | 
			
		||||
Let CMake prepare the build:
 | 
			
		||||
 | 
			
		||||
 > cmake .. -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release
 | 
			
		||||
 | 
			
		||||
Now you can generate a package with CPack. You may choose between:
 | 
			
		||||
@@ -97,9 +97,8 @@ Just install MinGW-w64 and let automation take care of the rest.
 | 
			
		||||
 $ cmake -P Win32Depends.cmake
 | 
			
		||||
 $ mkdir build
 | 
			
		||||
 $ cd build
 | 
			
		||||
 $ cmake .. \
 | 
			
		||||
   -DCMAKE_TOOLCHAIN_FILE=../ToolchainCrossMinGWW64.cmake \
 | 
			
		||||
   -DCMAKE_BUILD_TYPE=Release
 | 
			
		||||
 $ cmake -DCMAKE_TOOLCHAIN_FILE=../ToolchainCrossMinGWW64.cmake \
 | 
			
		||||
   -DCMAKE_BUILD_TYPE=Release ..
 | 
			
		||||
 $ cpack
 | 
			
		||||
 | 
			
		||||
Alternatively, for an unnecessarily bloated MSYS2-based 64-bit build:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										37
									
								
								Win32Cleanup.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								Win32Cleanup.cmake
									
									
									
									
									
										Normal 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})
 | 
			
		||||
@@ -6,7 +6,6 @@ cmake_minimum_required (VERSION 3.9)
 | 
			
		||||
# Directories
 | 
			
		||||
set (working_dir ${CMAKE_CURRENT_BINARY_DIR}/win32-depends)
 | 
			
		||||
set (pkg_dir ${working_dir}/packages)
 | 
			
		||||
set (tmp_dir ${working_dir}/tmp)
 | 
			
		||||
file (MAKE_DIRECTORY ${working_dir})
 | 
			
		||||
file (MAKE_DIRECTORY ${pkg_dir})
 | 
			
		||||
 | 
			
		||||
@@ -93,23 +92,11 @@ foreach (pkg_set ${pkg_list})
 | 
			
		||||
	foreach (url ${pkg_${pkg_set}_urls})
 | 
			
		||||
		get_filename_component (filename ${url} NAME)
 | 
			
		||||
		message (STATUS "Extracting ${filename}...")
 | 
			
		||||
		set (extract_command ${CMAKE_COMMAND} -E tar xf)
 | 
			
		||||
 | 
			
		||||
		set (filename ${pkg_dir}/${filename})
 | 
			
		||||
		if (pkg_${pkg_set}_strip)
 | 
			
		||||
			file (MAKE_DIRECTORY ${tmp_dir})
 | 
			
		||||
			execute_process (COMMAND ${extract_command} ${filename}
 | 
			
		||||
				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 ()
 | 
			
		||||
 | 
			
		||||
		execute_process (COMMAND ${CMAKE_COMMAND} -E tar xf ${filename}
 | 
			
		||||
			WORKING_DIRECTORY ${working_dir}
 | 
			
		||||
			RESULT_VARIABLE status)
 | 
			
		||||
		if (status)
 | 
			
		||||
			message (FATAL_ERROR "Extraction failed: ${status}")
 | 
			
		||||
		endif ()
 | 
			
		||||
 
 | 
			
		||||
@@ -16,11 +16,14 @@
 | 
			
		||||
 | 
			
		||||
#ifdef OPTION_NOINSTALL
 | 
			
		||||
	/* For developers. */
 | 
			
		||||
	#define PROJECT_DOC_DIR "${CMAKE_SOURCE_DIR}/docs/"
 | 
			
		||||
	#define PROJECT_SHARE_DIR "${CMAKE_SOURCE_DIR}/share/"
 | 
			
		||||
	#define PROJECT_GSETTINGS_DIR "${CMAKE_BINARY_DIR}"
 | 
			
		||||
#elif defined (_WIN32)
 | 
			
		||||
	#define PROJECT_DOC_DIR "share/doc/${PROJECT_NAME}/"
 | 
			
		||||
	#define PROJECT_SHARE_DIR "share/${PROJECT_NAME}/"
 | 
			
		||||
#else
 | 
			
		||||
	#define PROJECT_DOC_DIR "${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}/"
 | 
			
		||||
	#define PROJECT_SHARE_DIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								docs/user-guide/stylesheet.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								docs/user-guide/stylesheet.css
									
									
									
									
									
										Normal 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: " — "; }
 | 
			
		||||
@@ -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[]
 | 
			
		||||
 ... 
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										141
									
								
								docs/user-guide/user-guide-cs.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								docs/user-guide/user-guide-cs.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,141 @@
 | 
			
		||||
<!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.2.0,</span>
 | 
			
		||||
<span id="revdate">2018-06-27</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">
 | 
			
		||||
 … 
 | 
			
		||||
<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>Jak můžu diagram vytisknout?</h3>
 | 
			
		||||
<p>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.
 | 
			
		||||
 | 
			
		||||
<h3>Schází mi popisky</h3>
 | 
			
		||||
<p>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.
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
@@ -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[]
 | 
			
		||||
 ... 
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										133
									
								
								docs/user-guide/user-guide-en.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								docs/user-guide/user-guide-en.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,133 @@
 | 
			
		||||
<!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.2.0,</span>
 | 
			
		||||
<span id="revdate">2018-06-27</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 it’s 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 that’s 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, 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.
 | 
			
		||||
 | 
			
		||||
<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">
 | 
			
		||||
 … 
 | 
			
		||||
<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>Can’t open a saved diagram</h3>
 | 
			
		||||
<p>When saving, ensure that the filename you’ve typed in contains the
 | 
			
		||||
<q>.ldd</q> 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.
 | 
			
		||||
 | 
			
		||||
<h3>How do I print a diagram?</h3>
 | 
			
		||||
<p>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.
 | 
			
		||||
 | 
			
		||||
<h3>I miss labels</h3>
 | 
			
		||||
<p>Similarly to the previous case, this functionality doesn’t exist yet, but it
 | 
			
		||||
is possible to get around this limitation using a graphics editor.
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
@@ -456,9 +456,9 @@ on_leave_notify (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_drag_data_get
 | 
			
		||||
(GtkWidget *widget, GdkDragContext *ctx, GtkSelectionData *selection_data,
 | 
			
		||||
	guint target_type, guint time, gpointer user_data)
 | 
			
		||||
on_drag_data_get (GtkWidget *widget, GdkDragContext *ctx,
 | 
			
		||||
	GtkSelectionData *selection_data, guint target_type, guint time,
 | 
			
		||||
	gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
	LdCategorySymbolView *self;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,16 +15,22 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_CATEGORY_SYMBOL_VIEW (ld_category_symbol_view_get_type ())
 | 
			
		||||
#define LD_CATEGORY_SYMBOL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST \
 | 
			
		||||
	((obj), LD_TYPE_CATEGORY_SYMBOL_VIEW, LdCategorySymbolView))
 | 
			
		||||
#define LD_CATEGORY_SYMBOL_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
 | 
			
		||||
	((klass), LD_TYPE_CATEGORY_SYMBOL_VIEW, LdCategorySymbolViewClass))
 | 
			
		||||
#define LD_IS_CATEGORY_SYMBOL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((obj), LD_TYPE_CATEGORY_SYMBOL_VIEW))
 | 
			
		||||
#define LD_IS_CATEGORY_SYMBOL_VIEW_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((klass), LD_TYPE_CATEGORY_SYMBOL_VIEW))
 | 
			
		||||
#define LD_CATEGORY_SYMBOL_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
 | 
			
		||||
	((obj), LD_CATEGORY_SYMBOL_VIEW, LdCategorySymbolViewClass))
 | 
			
		||||
#define LD_CATEGORY_SYMBOL_VIEW(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
 | 
			
		||||
		LD_TYPE_CATEGORY_SYMBOL_VIEW, \
 | 
			
		||||
		LdCategorySymbolView))
 | 
			
		||||
#define LD_CATEGORY_SYMBOL_VIEW_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_CLASS_CAST ((klass), \
 | 
			
		||||
		LD_TYPE_CATEGORY_SYMBOL_VIEW, \
 | 
			
		||||
		LdCategorySymbolViewClass))
 | 
			
		||||
#define LD_IS_CATEGORY_SYMBOL_VIEW(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_CATEGORY_SYMBOL_VIEW))
 | 
			
		||||
#define LD_IS_CATEGORY_SYMBOL_VIEW_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_CATEGORY_SYMBOL_VIEW))
 | 
			
		||||
#define LD_CATEGORY_SYMBOL_VIEW_GET_CLASS(obj) \
 | 
			
		||||
	(G_TYPE_INSTANCE_GET_CLASS ((obj), \
 | 
			
		||||
		LD_CATEGORY_SYMBOL_VIEW, \
 | 
			
		||||
		LdCategorySymbolViewClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _LdCategorySymbolView LdCategorySymbolView;
 | 
			
		||||
typedef struct _LdCategorySymbolViewPrivate LdCategorySymbolViewPrivate;
 | 
			
		||||
 
 | 
			
		||||
@@ -58,7 +58,7 @@ ld_category_view_init (LdCategoryViewInterface *iface)
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_CODE (LdCategoryTreeView,
 | 
			
		||||
	ld_category_tree_view, GTK_TYPE_BOX,
 | 
			
		||||
	G_IMPLEMENT_INTERFACE (LD_TYPE_CATEGORY_VIEW, ld_category_view_init));
 | 
			
		||||
	G_IMPLEMENT_INTERFACE (LD_TYPE_CATEGORY_VIEW, ld_category_view_init))
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ld_category_tree_view_class_init (LdCategoryTreeViewClass *klass)
 | 
			
		||||
 
 | 
			
		||||
@@ -15,16 +15,22 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_CATEGORY_TREE_VIEW (ld_category_tree_view_get_type ())
 | 
			
		||||
#define LD_CATEGORY_TREE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST \
 | 
			
		||||
	((obj), LD_TYPE_CATEGORY_TREE_VIEW, LdCategoryTreeView))
 | 
			
		||||
#define LD_CATEGORY_TREE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
 | 
			
		||||
	((klass), LD_TYPE_CATEGORY_TREE_VIEW, LdCategoryTreeViewClass))
 | 
			
		||||
#define LD_IS_CATEGORY_TREE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((obj), LD_TYPE_CATEGORY_TREE_VIEW))
 | 
			
		||||
#define LD_IS_CATEGORY_TREE_VIEW_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((klass), LD_TYPE_CATEGORY_TREE_VIEW))
 | 
			
		||||
#define LD_CATEGORY_TREE_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
 | 
			
		||||
	((obj), LD_CATEGORY_TREE_VIEW, LdCategoryTreeViewClass))
 | 
			
		||||
#define LD_CATEGORY_TREE_VIEW(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
 | 
			
		||||
		LD_TYPE_CATEGORY_TREE_VIEW, \
 | 
			
		||||
		LdCategoryTreeView))
 | 
			
		||||
#define LD_CATEGORY_TREE_VIEW_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_CLASS_CAST ((klass), \
 | 
			
		||||
		LD_TYPE_CATEGORY_TREE_VIEW, \
 | 
			
		||||
		LdCategoryTreeViewClass))
 | 
			
		||||
#define LD_IS_CATEGORY_TREE_VIEW(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_CATEGORY_TREE_VIEW))
 | 
			
		||||
#define LD_IS_CATEGORY_TREE_VIEW_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_CATEGORY_TREE_VIEW))
 | 
			
		||||
#define LD_CATEGORY_TREE_VIEW_GET_CLASS(obj) \
 | 
			
		||||
	(G_TYPE_INSTANCE_GET_CLASS ((obj), \
 | 
			
		||||
		LD_CATEGORY_TREE_VIEW, \
 | 
			
		||||
		LdCategoryTreeViewClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _LdCategoryTreeView LdCategoryTreeView;
 | 
			
		||||
typedef struct _LdCategoryTreeViewPrivate LdCategoryTreeViewPrivate;
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
 * hierarchies.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
G_DEFINE_INTERFACE (LdCategoryView, ld_category_view, 0);
 | 
			
		||||
G_DEFINE_INTERFACE (LdCategoryView, ld_category_view, 0)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ld_category_view_default_init (LdCategoryViewInterface *iface)
 | 
			
		||||
@@ -77,8 +77,7 @@ ld_category_view_default_init (LdCategoryViewInterface *iface)
 | 
			
		||||
 * Assign an #LdCategory object to the view.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
ld_category_view_set_category (LdCategoryView *self,
 | 
			
		||||
	LdCategory *category)
 | 
			
		||||
ld_category_view_set_category (LdCategoryView *self, LdCategory *category)
 | 
			
		||||
{
 | 
			
		||||
	g_return_if_fail (LD_IS_CATEGORY_VIEW (self));
 | 
			
		||||
	LD_CATEGORY_VIEW_GET_INTERFACE (self)->set_category (self, category);
 | 
			
		||||
 
 | 
			
		||||
@@ -15,12 +15,14 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_CATEGORY_VIEW (ld_category_view_get_type ())
 | 
			
		||||
#define LD_CATEGORY_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST \
 | 
			
		||||
	((obj), LD_TYPE_CATEGORY_VIEW, LdCategoryView))
 | 
			
		||||
#define LD_IS_CATEGORY_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((obj), LD_TYPE_CATEGORY_VIEW))
 | 
			
		||||
#define LD_CATEGORY_VIEW_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE \
 | 
			
		||||
	((inst), LD_TYPE_CATEGORY_VIEW, LdCategoryViewInterface))
 | 
			
		||||
#define LD_CATEGORY_VIEW(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_CATEGORY_VIEW, LdCategoryView))
 | 
			
		||||
#define LD_IS_CATEGORY_VIEW(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_CATEGORY_VIEW))
 | 
			
		||||
#define LD_CATEGORY_VIEW_GET_INTERFACE(inst) \
 | 
			
		||||
	(G_TYPE_INSTANCE_GET_INTERFACE ((inst), \
 | 
			
		||||
		LD_TYPE_CATEGORY_VIEW, \
 | 
			
		||||
		LdCategoryViewInterface))
 | 
			
		||||
 | 
			
		||||
typedef struct _LdCategoryView LdCategoryView;
 | 
			
		||||
typedef struct _LdCategoryViewInterface LdCategoryViewInterface;
 | 
			
		||||
@@ -48,8 +50,7 @@ struct _LdCategoryViewInterface
 | 
			
		||||
 | 
			
		||||
GType ld_category_view_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
void ld_category_view_set_category (LdCategoryView *self,
 | 
			
		||||
	LdCategory *category);
 | 
			
		||||
void ld_category_view_set_category (LdCategoryView *self, LdCategory *category);
 | 
			
		||||
LdCategory *ld_category_view_get_category (LdCategoryView *self);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -55,7 +55,7 @@ static void on_category_notify_name (LdCategory *category,
 | 
			
		||||
	GParamSpec *pspec, gpointer user_data);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (LdCategory, ld_category, G_TYPE_OBJECT);
 | 
			
		||||
G_DEFINE_TYPE (LdCategory, ld_category, G_TYPE_OBJECT)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ld_category_class_init (LdCategoryClass *klass)
 | 
			
		||||
@@ -561,4 +561,3 @@ ld_category_get_children (LdCategory *self)
 | 
			
		||||
	g_return_val_if_fail (LD_IS_CATEGORY (self), NULL);
 | 
			
		||||
	return self->priv->subcategories;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,16 +15,16 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_CATEGORY (ld_category_get_type ())
 | 
			
		||||
#define LD_CATEGORY(obj) (G_TYPE_CHECK_INSTANCE_CAST \
 | 
			
		||||
	((obj), LD_TYPE_CATEGORY, LdCategory))
 | 
			
		||||
#define LD_CATEGORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
 | 
			
		||||
	((klass), LD_TYPE_CATEGORY, LdCategoryClass))
 | 
			
		||||
#define LD_IS_CATEGORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((obj), LD_TYPE_CATEGORY))
 | 
			
		||||
#define LD_IS_CATEGORY_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((klass), LD_TYPE_CATEGORY))
 | 
			
		||||
#define LD_CATEGORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
 | 
			
		||||
	((obj), LD_CATEGORY, LdCategoryClass))
 | 
			
		||||
#define LD_CATEGORY(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_CATEGORY, LdCategory))
 | 
			
		||||
#define LD_CATEGORY_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_CATEGORY, LdCategoryClass))
 | 
			
		||||
#define LD_IS_CATEGORY(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_CATEGORY))
 | 
			
		||||
#define LD_IS_CATEGORY_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_CATEGORY))
 | 
			
		||||
#define LD_CATEGORY_GET_CLASS(obj) \
 | 
			
		||||
	(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_CATEGORY, LdCategoryClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _LdCategory LdCategory;
 | 
			
		||||
typedef struct _LdCategoryPrivate LdCategoryPrivate;
 | 
			
		||||
@@ -77,4 +77,3 @@ const GSList *ld_category_get_children (LdCategory *self);
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* ! __LD_CATEGORY_H__ */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -57,7 +57,7 @@ static void on_set_points_destroy (gpointer user_data);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (LdDiagramConnection, ld_diagram_connection,
 | 
			
		||||
	LD_TYPE_DIAGRAM_OBJECT);
 | 
			
		||||
	LD_TYPE_DIAGRAM_OBJECT)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ld_diagram_connection_class_init (LdDiagramConnectionClass *klass)
 | 
			
		||||
@@ -332,4 +332,3 @@ on_set_points_destroy (gpointer user_data)
 | 
			
		||||
		json_node_free (data->new_node);
 | 
			
		||||
	g_slice_free (SetPointsActionData, data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,16 +15,22 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_DIAGRAM_CONNECTION (ld_diagram_connection_get_type ())
 | 
			
		||||
#define LD_DIAGRAM_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST \
 | 
			
		||||
	((obj), LD_TYPE_DIAGRAM_CONNECTION, LdDiagramConnection))
 | 
			
		||||
#define LD_DIAGRAM_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
 | 
			
		||||
	((klass), LD_TYPE_DIAGRAM_CONNECTION, LdDiagramConnectionClass))
 | 
			
		||||
#define LD_IS_DIAGRAM_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((obj), LD_TYPE_DIAGRAM_CONNECTION))
 | 
			
		||||
#define LD_IS_DIAGRAM_CONNECTION_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((klass), LD_TYPE_DIAGRAM_CONNECTION))
 | 
			
		||||
#define LD_DIAGRAM_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
 | 
			
		||||
	((obj), LD_DIAGRAM_CONNECTION, LdDiagramConnectionClass))
 | 
			
		||||
#define LD_DIAGRAM_CONNECTION(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
 | 
			
		||||
		LD_TYPE_DIAGRAM_CONNECTION, \
 | 
			
		||||
		LdDiagramConnection))
 | 
			
		||||
#define LD_DIAGRAM_CONNECTION_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_CLASS_CAST ((klass), \
 | 
			
		||||
		LD_TYPE_DIAGRAM_CONNECTION, \
 | 
			
		||||
		LdDiagramConnectionClass))
 | 
			
		||||
#define LD_IS_DIAGRAM_CONNECTION(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_DIAGRAM_CONNECTION))
 | 
			
		||||
#define LD_IS_DIAGRAM_CONNECTION_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_DIAGRAM_CONNECTION))
 | 
			
		||||
#define LD_DIAGRAM_CONNECTION_GET_CLASS(obj) \
 | 
			
		||||
	(G_TYPE_INSTANCE_GET_CLASS ((obj), \
 | 
			
		||||
		LD_DIAGRAM_CONNECTION, \
 | 
			
		||||
		LdDiagramConnectionClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _LdDiagramConnection LdDiagramConnection;
 | 
			
		||||
typedef struct _LdDiagramConnectionPrivate LdDiagramConnectionPrivate;
 | 
			
		||||
@@ -61,4 +67,3 @@ void ld_diagram_connection_set_points (LdDiagramConnection *self,
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* ! __LD_DIAGRAM_CONNECTION_H__ */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -69,7 +69,7 @@ static void on_set_param_redo (gpointer user_data);
 | 
			
		||||
static void on_set_param_destroy (gpointer user_data);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (LdDiagramObject, ld_diagram_object, G_TYPE_OBJECT);
 | 
			
		||||
G_DEFINE_TYPE (LdDiagramObject, ld_diagram_object, G_TYPE_OBJECT)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ld_diagram_object_class_init (LdDiagramObjectClass *klass)
 | 
			
		||||
 
 | 
			
		||||
@@ -15,16 +15,20 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_DIAGRAM_OBJECT (ld_diagram_object_get_type ())
 | 
			
		||||
#define LD_DIAGRAM_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST \
 | 
			
		||||
	((obj), LD_TYPE_DIAGRAM_OBJECT, LdDiagramObject))
 | 
			
		||||
#define LD_DIAGRAM_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
 | 
			
		||||
	((klass), LD_TYPE_DIAGRAM_OBJECT, LdDiagramObjectClass))
 | 
			
		||||
#define LD_IS_DIAGRAM_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((obj), LD_TYPE_DIAGRAM_OBJECT))
 | 
			
		||||
#define LD_IS_DIAGRAM_OBJECT_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((klass), LD_TYPE_DIAGRAM_OBJECT))
 | 
			
		||||
#define LD_DIAGRAM_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
 | 
			
		||||
	((obj), LD_DIAGRAM_OBJECT, LdDiagramObjectClass))
 | 
			
		||||
#define LD_DIAGRAM_OBJECT(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
 | 
			
		||||
		LD_TYPE_DIAGRAM_OBJECT, \
 | 
			
		||||
		LdDiagramObject))
 | 
			
		||||
#define LD_DIAGRAM_OBJECT_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_CLASS_CAST ((klass), \
 | 
			
		||||
		LD_TYPE_DIAGRAM_OBJECT, \
 | 
			
		||||
		LdDiagramObjectClass))
 | 
			
		||||
#define LD_IS_DIAGRAM_OBJECT(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_DIAGRAM_OBJECT))
 | 
			
		||||
#define LD_IS_DIAGRAM_OBJECT_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_DIAGRAM_OBJECT))
 | 
			
		||||
#define LD_DIAGRAM_OBJECT_GET_CLASS(obj) \
 | 
			
		||||
	(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_DIAGRAM_OBJECT, LdDiagramObjectClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _LdDiagramObject LdDiagramObject;
 | 
			
		||||
typedef struct _LdDiagramObjectPrivate LdDiagramObjectPrivate;
 | 
			
		||||
@@ -74,4 +78,3 @@ void ld_diagram_object_set_y (LdDiagramObject *self, gdouble y);
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* ! __LD_DIAGRAM_OBJECT_H__ */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@ static void ld_diagram_symbol_set_property (GObject *object, guint property_id,
 | 
			
		||||
	const GValue *value, GParamSpec *pspec);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (LdDiagramSymbol, ld_diagram_symbol, LD_TYPE_DIAGRAM_OBJECT);
 | 
			
		||||
G_DEFINE_TYPE (LdDiagramSymbol, ld_diagram_symbol, LD_TYPE_DIAGRAM_OBJECT)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ld_diagram_symbol_class_init (LdDiagramSymbolClass *klass)
 | 
			
		||||
 
 | 
			
		||||
@@ -15,16 +15,20 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_DIAGRAM_SYMBOL (ld_diagram_symbol_get_type ())
 | 
			
		||||
#define LD_DIAGRAM_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST \
 | 
			
		||||
	((obj), LD_TYPE_DIAGRAM_SYMBOL, LdDiagramSymbol))
 | 
			
		||||
#define LD_DIAGRAM_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
 | 
			
		||||
	((klass), LD_TYPE_DIAGRAM_SYMBOL, LdDiagramSymbolClass))
 | 
			
		||||
#define LD_IS_DIAGRAM_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((obj), LD_TYPE_DIAGRAM_SYMBOL))
 | 
			
		||||
#define LD_IS_DIAGRAM_SYMBOL_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((klass), LD_TYPE_DIAGRAM_SYMBOL))
 | 
			
		||||
#define LD_DIAGRAM_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
 | 
			
		||||
	((obj), LD_DIAGRAM_SYMBOL, LdDiagramSymbolClass))
 | 
			
		||||
#define LD_DIAGRAM_SYMBOL(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
 | 
			
		||||
		LD_TYPE_DIAGRAM_SYMBOL, \
 | 
			
		||||
		LdDiagramSymbol))
 | 
			
		||||
#define LD_DIAGRAM_SYMBOL_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_CLASS_CAST ((klass), \
 | 
			
		||||
		LD_TYPE_DIAGRAM_SYMBOL, \
 | 
			
		||||
		LdDiagramSymbolClass))
 | 
			
		||||
#define LD_IS_DIAGRAM_SYMBOL(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_DIAGRAM_SYMBOL))
 | 
			
		||||
#define LD_IS_DIAGRAM_SYMBOL_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_DIAGRAM_SYMBOL))
 | 
			
		||||
#define LD_DIAGRAM_SYMBOL_GET_CLASS(obj) \
 | 
			
		||||
	(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_DIAGRAM_SYMBOL, LdDiagramSymbolClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _LdDiagramSymbol LdDiagramSymbol;
 | 
			
		||||
typedef struct _LdDiagramSymbolPrivate LdDiagramSymbolPrivate;
 | 
			
		||||
@@ -70,4 +74,3 @@ void ld_diagram_symbol_set_rotation (LdDiagramSymbol *self, gint rotation);
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* ! __LD_DIAGRAM_SYMBOL_H__ */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1390,8 +1390,8 @@ move_selection (LdDiagramView *self, gdouble dx, gdouble dy)
 | 
			
		||||
static gboolean
 | 
			
		||||
is_object_selected (LdDiagramView *self, LdDiagramObject *object)
 | 
			
		||||
{
 | 
			
		||||
	return g_list_find (ld_diagram_get_selection (self->priv->diagram),
 | 
			
		||||
		object) != NULL;
 | 
			
		||||
	return g_list_find (ld_diagram_get_selection (self->priv->diagram), object)
 | 
			
		||||
		!= NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
 
 | 
			
		||||
@@ -15,16 +15,18 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_DIAGRAM_VIEW (ld_diagram_view_get_type ())
 | 
			
		||||
#define LD_DIAGRAM_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST \
 | 
			
		||||
	((obj), LD_TYPE_DIAGRAM_VIEW, LdDiagramView))
 | 
			
		||||
#define LD_DIAGRAM_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
 | 
			
		||||
	((klass), LD_TYPE_DIAGRAM_VIEW, LdDiagramViewClass))
 | 
			
		||||
#define LD_IS_DIAGRAM_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((obj), LD_TYPE_DIAGRAM_VIEW))
 | 
			
		||||
#define LD_IS_DIAGRAM_VIEW_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((klass), LD_TYPE_DIAGRAM_VIEW))
 | 
			
		||||
#define LD_DIAGRAM_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
 | 
			
		||||
	((obj), LD_DIAGRAM_VIEW, LdDiagramViewClass))
 | 
			
		||||
#define LD_DIAGRAM_VIEW(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_DIAGRAM_VIEW, LdDiagramView))
 | 
			
		||||
#define LD_DIAGRAM_VIEW_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_CLASS_CAST ((klass), \
 | 
			
		||||
		LD_TYPE_DIAGRAM_VIEW, \
 | 
			
		||||
		LdDiagramViewClass))
 | 
			
		||||
#define LD_IS_DIAGRAM_VIEW(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_DIAGRAM_VIEW))
 | 
			
		||||
#define LD_IS_DIAGRAM_VIEW_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_DIAGRAM_VIEW))
 | 
			
		||||
#define LD_DIAGRAM_VIEW_GET_CLASS(obj) \
 | 
			
		||||
	(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_DIAGRAM_VIEW, LdDiagramViewClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _LdDiagramView LdDiagramView;
 | 
			
		||||
typedef struct _LdDiagramViewPrivate LdDiagramViewPrivate;
 | 
			
		||||
 
 | 
			
		||||
@@ -105,7 +105,7 @@ static void uninstall_object (LdDiagramObject *object, LdDiagram *self);
 | 
			
		||||
static void ld_diagram_unselect_all_internal (LdDiagram *self);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (LdDiagram, ld_diagram, G_TYPE_OBJECT);
 | 
			
		||||
G_DEFINE_TYPE (LdDiagram, ld_diagram, G_TYPE_OBJECT)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ld_diagram_class_init (LdDiagramClass *klass)
 | 
			
		||||
 
 | 
			
		||||
@@ -15,16 +15,15 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_DIAGRAM (ld_diagram_get_type ())
 | 
			
		||||
#define LD_DIAGRAM(obj) (G_TYPE_CHECK_INSTANCE_CAST \
 | 
			
		||||
	((obj), LD_TYPE_DIAGRAM, LdDiagram))
 | 
			
		||||
#define LD_DIAGRAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
 | 
			
		||||
	((klass), LD_TYPE_DIAGRAM, LdDiagramClass))
 | 
			
		||||
#define LD_IS_DIAGRAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((obj), LD_TYPE_DIAGRAM))
 | 
			
		||||
#define LD_IS_DIAGRAM_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((klass), LD_TYPE_DIAGRAM))
 | 
			
		||||
#define LD_DIAGRAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
 | 
			
		||||
	((obj), LD_DIAGRAM, LdDiagramClass))
 | 
			
		||||
#define LD_DIAGRAM(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_DIAGRAM, LdDiagram))
 | 
			
		||||
#define LD_DIAGRAM_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_DIAGRAM, LdDiagramClass))
 | 
			
		||||
#define LD_IS_DIAGRAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_DIAGRAM))
 | 
			
		||||
#define LD_IS_DIAGRAM_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_DIAGRAM))
 | 
			
		||||
#define LD_DIAGRAM_GET_CLASS(obj) \
 | 
			
		||||
	(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_DIAGRAM, LdDiagramClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _LdDiagram LdDiagram;
 | 
			
		||||
typedef struct _LdDiagramClass LdDiagramClass;
 | 
			
		||||
@@ -114,4 +113,3 @@ void ld_diagram_unselect_all (LdDiagram *self);
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* ! __LD_DIAGRAM_H__ */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -50,7 +50,7 @@ static gboolean foreach_dir (const gchar *path,
 | 
			
		||||
	gpointer userdata, GError **error);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (LdLibrary, ld_library, G_TYPE_OBJECT);
 | 
			
		||||
G_DEFINE_TYPE (LdLibrary, ld_library, G_TYPE_OBJECT)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ld_library_class_init (LdLibraryClass *klass)
 | 
			
		||||
@@ -427,4 +427,3 @@ ld_library_get_root (LdLibrary *self)
 | 
			
		||||
	g_return_val_if_fail (LD_IS_LIBRARY (self), NULL);
 | 
			
		||||
	return self->priv->root;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,16 +15,15 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_LIBRARY (ld_library_get_type ())
 | 
			
		||||
#define LD_LIBRARY(obj) (G_TYPE_CHECK_INSTANCE_CAST \
 | 
			
		||||
	((obj), LD_TYPE_LIBRARY, LdLibrary))
 | 
			
		||||
#define LD_LIBRARY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
 | 
			
		||||
	((klass), LD_TYPE_LIBRARY, LdLibraryClass))
 | 
			
		||||
#define LD_IS_LIBRARY(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((obj), LD_TYPE_LIBRARY))
 | 
			
		||||
#define LD_IS_LIBRARY_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((klass), LD_TYPE_LIBRARY))
 | 
			
		||||
#define LD_LIBRARY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
 | 
			
		||||
	((obj), LD_LIBRARY, LdLibraryClass))
 | 
			
		||||
#define LD_LIBRARY(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_LIBRARY, LdLibrary))
 | 
			
		||||
#define LD_LIBRARY_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_LIBRARY, LdLibraryClass))
 | 
			
		||||
#define LD_IS_LIBRARY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_LIBRARY))
 | 
			
		||||
#define LD_IS_LIBRARY_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_LIBRARY))
 | 
			
		||||
#define LD_LIBRARY_GET_CLASS(obj) \
 | 
			
		||||
	(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_LIBRARY, LdLibraryClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _LdLibrary LdLibrary;
 | 
			
		||||
typedef struct _LdLibraryPrivate LdLibraryPrivate;
 | 
			
		||||
@@ -66,4 +65,3 @@ LdCategory *ld_library_get_root (LdLibrary *self);
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* ! __LD_LIBRARY_H__ */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -23,4 +23,3 @@ void ld_lua_private_draw (LdLua *self, LdLuaSymbol *symbol, cairo_t *cr);
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* ! __LD_LUA_PRIVATE_H__ */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -37,4 +37,3 @@ struct _LdLuaSymbolPrivate
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* ! __LD_LUA_SYMBOL_PRIVATE_H__ */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ static const LdPointArray *ld_lua_symbol_real_get_terminals (LdSymbol *symbol);
 | 
			
		||||
static void ld_lua_symbol_real_draw (LdSymbol *symbol, cairo_t *cr);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (LdLuaSymbol, ld_lua_symbol, LD_TYPE_SYMBOL);
 | 
			
		||||
G_DEFINE_TYPE (LdLuaSymbol, ld_lua_symbol, LD_TYPE_SYMBOL)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ld_lua_symbol_class_init (LdLuaSymbolClass *klass)
 | 
			
		||||
@@ -135,4 +135,3 @@ ld_lua_symbol_real_draw (LdSymbol *symbol, cairo_t *cr)
 | 
			
		||||
	ld_lua_private_draw (self->priv->lua, self, cr);
 | 
			
		||||
	cairo_restore (cr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,16 +15,16 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_LUA_SYMBOL (ld_lua_symbol_get_type ())
 | 
			
		||||
#define LD_LUA_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST \
 | 
			
		||||
	((obj), LD_TYPE_LUA_SYMBOL, LdLuaSymbol))
 | 
			
		||||
#define LD_LUA_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
 | 
			
		||||
	((klass), LD_TYPE_LUA_SYMBOL, LdLuaSymbolClass))
 | 
			
		||||
#define LD_IS_LUA_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((obj), LD_TYPE_LUA_SYMBOL))
 | 
			
		||||
#define LD_IS_LUA_SYMBOL_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((klass), LD_TYPE_LUA_SYMBOL))
 | 
			
		||||
#define LD_LUA_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
 | 
			
		||||
	((obj), LD_LUA_SYMBOL, LdLuaSymbolClass))
 | 
			
		||||
#define LD_LUA_SYMBOL(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_LUA_SYMBOL, LdLuaSymbol))
 | 
			
		||||
#define LD_LUA_SYMBOL_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_LUA_SYMBOL, LdLuaSymbolClass))
 | 
			
		||||
#define LD_IS_LUA_SYMBOL(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_LUA_SYMBOL))
 | 
			
		||||
#define LD_IS_LUA_SYMBOL_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_LUA_SYMBOL))
 | 
			
		||||
#define LD_LUA_SYMBOL_GET_CLASS(obj) \
 | 
			
		||||
	(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_LUA_SYMBOL, LdLuaSymbolClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _LdLuaSymbol LdLuaSymbol;
 | 
			
		||||
typedef struct _LdLuaSymbolPrivate LdLuaSymbolPrivate;
 | 
			
		||||
@@ -57,4 +57,3 @@ GType ld_lua_symbol_get_type (void) G_GNUC_CONST;
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* ! __LD_LUA_SYMBOL_H__ */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -150,7 +150,7 @@ static luaL_Reg ld_lua_cairo_table[] =
 | 
			
		||||
 | 
			
		||||
/* ===== Generic =========================================================== */
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (LdLua, ld_lua, G_TYPE_OBJECT);
 | 
			
		||||
G_DEFINE_TYPE (LdLua, ld_lua, G_TYPE_OBJECT)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ld_lua_class_init (LdLuaClass *klass)
 | 
			
		||||
@@ -187,8 +187,7 @@ ld_lua_init (LdLua *self)
 | 
			
		||||
	lua_State *L;
 | 
			
		||||
	LdLuaData *ud;
 | 
			
		||||
 | 
			
		||||
	self->priv = G_TYPE_INSTANCE_GET_PRIVATE
 | 
			
		||||
		(self, LD_TYPE_LUA, LdLuaPrivate);
 | 
			
		||||
	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, LD_TYPE_LUA, LdLuaPrivate);
 | 
			
		||||
 | 
			
		||||
	L = self->priv->L = lua_newstate (ld_lua_alloc, NULL);
 | 
			
		||||
	g_return_if_fail (L != NULL);
 | 
			
		||||
@@ -465,8 +464,7 @@ ld_lua_logdiag_register (lua_State *L)
 | 
			
		||||
		lua_insert (L, -2);
 | 
			
		||||
		lua_concat (L, 2);
 | 
			
		||||
 | 
			
		||||
		g_warning ("Lua symbol registration failed: %s",
 | 
			
		||||
			lua_tostring (L, -1));
 | 
			
		||||
		g_warning ("Lua symbol registration failed: %s", lua_tostring (L, -1));
 | 
			
		||||
		lua_pushboolean (L, FALSE);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
@@ -861,4 +859,3 @@ LD_LUA_CAIRO_BEGIN (show_text)
 | 
			
		||||
 | 
			
		||||
	g_object_unref (layout);
 | 
			
		||||
LD_LUA_CAIRO_END (0)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,16 +15,14 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_LUA (ld_lua_get_type ())
 | 
			
		||||
#define LD_LUA(obj) (G_TYPE_CHECK_INSTANCE_CAST \
 | 
			
		||||
	((obj), LD_TYPE_LUA, LdLua))
 | 
			
		||||
#define LD_LUA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
 | 
			
		||||
	((klass), LD_TYPE_LUA, LdLuaClass))
 | 
			
		||||
#define LD_IS_LUA(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((obj), LD_TYPE_LUA))
 | 
			
		||||
#define LD_IS_LUA_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((klass), LD_TYPE_LUA))
 | 
			
		||||
#define LD_LUA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
 | 
			
		||||
	((obj), LD_LUA, LdLuaClass))
 | 
			
		||||
#define LD_LUA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_LUA, LdLua))
 | 
			
		||||
#define LD_LUA_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_LUA, LdLuaClass))
 | 
			
		||||
#define LD_IS_LUA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_LUA))
 | 
			
		||||
#define LD_IS_LUA_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_LUA))
 | 
			
		||||
#define LD_LUA_GET_CLASS(obj) \
 | 
			
		||||
	(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_LUA, LdLuaClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _LdLua LdLua;
 | 
			
		||||
typedef struct _LdLuaPrivate LdLuaPrivate;
 | 
			
		||||
@@ -67,4 +65,3 @@ gboolean ld_lua_load_file (LdLua *self, const gchar *filename,
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* ! __LD_LUA_H__ */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ static void ld_symbol_set_property (GObject *object, guint property_id,
 | 
			
		||||
	const GValue *value, GParamSpec *pspec);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
G_DEFINE_ABSTRACT_TYPE (LdSymbol, ld_symbol, G_TYPE_OBJECT);
 | 
			
		||||
G_DEFINE_ABSTRACT_TYPE (LdSymbol, ld_symbol, G_TYPE_OBJECT)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ld_symbol_class_init (LdSymbolClass *klass)
 | 
			
		||||
 
 | 
			
		||||
@@ -15,16 +15,15 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_SYMBOL (ld_symbol_get_type ())
 | 
			
		||||
#define LD_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST \
 | 
			
		||||
	((obj), LD_TYPE_SYMBOL, LdSymbol))
 | 
			
		||||
#define LD_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
 | 
			
		||||
	((klass), LD_TYPE_SYMBOL, LdSymbolClass))
 | 
			
		||||
#define LD_IS_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((obj), LD_TYPE_SYMBOL))
 | 
			
		||||
#define LD_IS_SYMBOL_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((klass), LD_TYPE_SYMBOL))
 | 
			
		||||
#define LD_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
 | 
			
		||||
	((obj), LD_SYMBOL, LdSymbolClass))
 | 
			
		||||
#define LD_SYMBOL(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_SYMBOL, LdSymbol))
 | 
			
		||||
#define LD_SYMBOL_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_SYMBOL, LdSymbolClass))
 | 
			
		||||
#define LD_IS_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_SYMBOL))
 | 
			
		||||
#define LD_IS_SYMBOL_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_SYMBOL))
 | 
			
		||||
#define LD_SYMBOL_GET_CLASS(obj) \
 | 
			
		||||
	(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_SYMBOL, LdSymbolClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _LdSymbol LdSymbol;
 | 
			
		||||
typedef struct _LdSymbolPrivate LdSymbolPrivate;
 | 
			
		||||
@@ -72,4 +71,3 @@ void ld_symbol_draw (LdSymbol *self, cairo_t *cr);
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* ! __LD_SYMBOL_H__ */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -256,7 +256,8 @@ ld_point_array_remove (LdPointArray *self, gint pos, guint length)
 | 
			
		||||
 *
 | 
			
		||||
 * Change size of the array.
 | 
			
		||||
 */
 | 
			
		||||
void ld_point_array_set_size (LdPointArray *self, guint size)
 | 
			
		||||
void
 | 
			
		||||
ld_point_array_set_size (LdPointArray *self, guint size)
 | 
			
		||||
{
 | 
			
		||||
	g_return_if_fail (self != NULL);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -14,9 +14,9 @@
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_POINT (ld_point_get_type ())
 | 
			
		||||
#define LD_TYPE_POINT       (ld_point_get_type ())
 | 
			
		||||
#define LD_TYPE_POINT_ARRAY (ld_point_array_get_type ())
 | 
			
		||||
#define LD_TYPE_RECTANGLE (ld_rectangle_get_type ())
 | 
			
		||||
#define LD_TYPE_RECTANGLE   (ld_rectangle_get_type ())
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -99,4 +99,3 @@ void ld_rectangle_extend (LdRectangle *self, gdouble border);
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* ! __LD_TYPES_H__ */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ struct _LdUndoActionPrivate
 | 
			
		||||
static void ld_undo_action_finalize (GObject *gobject);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (LdUndoAction, ld_undo_action, G_TYPE_OBJECT);
 | 
			
		||||
G_DEFINE_TYPE (LdUndoAction, ld_undo_action, G_TYPE_OBJECT)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ld_undo_action_class_init (LdUndoActionClass *klass)
 | 
			
		||||
@@ -84,9 +84,8 @@ ld_undo_action_finalize (GObject *gobject)
 | 
			
		||||
 * Return value: a new #LdUndoAction object.
 | 
			
		||||
 */
 | 
			
		||||
LdUndoAction *
 | 
			
		||||
ld_undo_action_new (LdUndoActionFunc undo_func,
 | 
			
		||||
	LdUndoActionFunc redo_func, LdUndoActionFunc destroy_func,
 | 
			
		||||
	gpointer user_data)
 | 
			
		||||
ld_undo_action_new (LdUndoActionFunc undo_func, LdUndoActionFunc redo_func,
 | 
			
		||||
	LdUndoActionFunc destroy_func, gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
	LdUndoAction *self;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,16 +15,16 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_UNDO_ACTION (ld_undo_action_get_type ())
 | 
			
		||||
#define LD_UNDO_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST \
 | 
			
		||||
	((obj), LD_TYPE_UNDO_ACTION, LdUndoAction))
 | 
			
		||||
#define LD_UNDO_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
 | 
			
		||||
	((klass), LD_TYPE_UNDO_ACTION, LdUndoActionClass))
 | 
			
		||||
#define LD_IS_UNDO_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((obj), LD_TYPE_UNDO_ACTION))
 | 
			
		||||
#define LD_IS_UNDO_ACTION_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((klass), LD_TYPE_UNDO_ACTION))
 | 
			
		||||
#define LD_UNDO_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
 | 
			
		||||
	((obj), LD_UNDO_ACTION, LdUndoActionClass))
 | 
			
		||||
#define LD_UNDO_ACTION(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_UNDO_ACTION, LdUndoAction))
 | 
			
		||||
#define LD_UNDO_ACTION_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_UNDO_ACTION, LdUndoActionClass))
 | 
			
		||||
#define LD_IS_UNDO_ACTION(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_UNDO_ACTION))
 | 
			
		||||
#define LD_IS_UNDO_ACTION_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_UNDO_ACTION))
 | 
			
		||||
#define LD_UNDO_ACTION_GET_CLASS(obj) \
 | 
			
		||||
	(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_UNDO_ACTION, LdUndoActionClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _LdUndoAction LdUndoAction;
 | 
			
		||||
typedef struct _LdUndoActionPrivate LdUndoActionPrivate;
 | 
			
		||||
@@ -73,4 +73,3 @@ void ld_undo_action_redo (LdUndoAction *self);
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* ! __LD_UNDO_ACTION_H__ */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,7 @@
 | 
			
		||||
			<menuitem action="NormalSize" />
 | 
			
		||||
		</menu>
 | 
			
		||||
		<menu name="HelpMenu" action="HelpMenu">
 | 
			
		||||
			<menuitem action="UserGuide" />
 | 
			
		||||
			<menuitem action="About" />
 | 
			
		||||
		</menu>
 | 
			
		||||
	</menubar>
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,11 @@
 | 
			
		||||
 | 
			
		||||
#include "ld-window-main.h"
 | 
			
		||||
 | 
			
		||||
#ifdef G_OS_WIN32
 | 
			
		||||
#include <gdk/gdkwin32.h>
 | 
			
		||||
#include <shellapi.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct _LdWindowMainPrivate
 | 
			
		||||
{
 | 
			
		||||
@@ -100,6 +105,7 @@ static void on_action_open (GtkAction *action, LdWindowMain *self);
 | 
			
		||||
static void on_action_save (GtkAction *action, LdWindowMain *self);
 | 
			
		||||
static void on_action_save_as (GtkAction *action, LdWindowMain *self);
 | 
			
		||||
static void on_action_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_undo (GtkAction *action, LdWindowMain *self);
 | 
			
		||||
@@ -176,9 +182,12 @@ static GtkActionEntry wm_action_entries[] =
 | 
			
		||||
			G_CALLBACK (on_action_normal_size)},
 | 
			
		||||
 | 
			
		||||
	{"HelpMenu", NULL, N_("_Help"), NULL, NULL, NULL},
 | 
			
		||||
		{"UserGuide", GTK_STOCK_HELP, N_("_User Guide"), NULL,
 | 
			
		||||
			N_("Open the manual"),
 | 
			
		||||
			G_CALLBACK (on_action_user_guide)},
 | 
			
		||||
		{"About", GTK_STOCK_ABOUT, N_("_About"), NULL,
 | 
			
		||||
			N_("Show a dialog about this application"),
 | 
			
		||||
			G_CALLBACK (on_action_about)}
 | 
			
		||||
			G_CALLBACK (on_action_about)},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static GtkToggleActionEntry wm_toggle_action_entries[] =
 | 
			
		||||
@@ -189,7 +198,7 @@ static GtkToggleActionEntry wm_toggle_action_entries[] =
 | 
			
		||||
	{"LibraryPane", NULL, N_("_Library Pane"), NULL,
 | 
			
		||||
		N_("Toggle displaying of the library pane"),
 | 
			
		||||
		G_CALLBACK (on_action_library_pane), TRUE},
 | 
			
		||||
	{"ShowGrid", NULL, N_("Show _Grid"), NULL,
 | 
			
		||||
	{"ShowGrid", NULL, N_("Show _Grid"), "numbersign",
 | 
			
		||||
		N_("Toggle displaying of the grid"),
 | 
			
		||||
		G_CALLBACK (on_action_grid), TRUE}
 | 
			
		||||
};
 | 
			
		||||
@@ -215,7 +224,7 @@ ld_window_main_new (const gchar *filename)
 | 
			
		||||
	return self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (LdWindowMain, ld_window_main, GTK_TYPE_WINDOW);
 | 
			
		||||
G_DEFINE_TYPE (LdWindowMain, ld_window_main, GTK_TYPE_WINDOW)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ld_window_main_class_init (LdWindowMainClass *klass)
 | 
			
		||||
@@ -973,10 +982,110 @@ on_action_quit (GtkAction *action, LdWindowMain *self)
 | 
			
		||||
		gtk_widget_destroy (GTK_WIDGET (self));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static GFile *
 | 
			
		||||
user_guide_path (const gchar *language)
 | 
			
		||||
{
 | 
			
		||||
	gchar *filename, *path;
 | 
			
		||||
	GFile *file;
 | 
			
		||||
 | 
			
		||||
	filename = g_strdup_printf ("user-guide-%s.html", language);
 | 
			
		||||
	path = g_build_filename (PROJECT_DOC_DIR, "user-guide", filename, NULL);
 | 
			
		||||
	g_free (filename);
 | 
			
		||||
	file = g_file_new_for_path (path);
 | 
			
		||||
	g_free (path);
 | 
			
		||||
	return file;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
open_file (GFile *file, GdkScreen *screen, GError **error)
 | 
			
		||||
{
 | 
			
		||||
	GdkDisplay *display;
 | 
			
		||||
	GAppInfo *app_info;
 | 
			
		||||
	GdkAppLaunchContext *context;
 | 
			
		||||
	GList link;
 | 
			
		||||
	gboolean success;
 | 
			
		||||
 | 
			
		||||
	/* GLib 2.36.1 prevents us from using gtk_show_uri() on Windows XP. */
 | 
			
		||||
	if (!(app_info = g_file_query_default_handler (file, NULL, error)))
 | 
			
		||||
		return FALSE;
 | 
			
		||||
 | 
			
		||||
	link.next = link.prev = NULL;
 | 
			
		||||
	link.data = file;
 | 
			
		||||
 | 
			
		||||
	display = gdk_screen_get_display (screen);
 | 
			
		||||
	context = gdk_display_get_app_launch_context (display);
 | 
			
		||||
	gdk_app_launch_context_set_screen (context, screen);
 | 
			
		||||
	success = g_app_info_launch (app_info,
 | 
			
		||||
		&link, G_APP_LAUNCH_CONTEXT (context), error);
 | 
			
		||||
	g_object_unref (context);
 | 
			
		||||
	return success;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_action_user_guide (GtkAction *action, LdWindowMain *self)
 | 
			
		||||
{
 | 
			
		||||
	const gchar *const *iter;
 | 
			
		||||
	GFile *file;
 | 
			
		||||
	GError *error = NULL;
 | 
			
		||||
 | 
			
		||||
	/* Look for a usable language variant, or fall back to the lingua franca. */
 | 
			
		||||
	for (iter = g_get_language_names (); *iter; iter++)
 | 
			
		||||
	{
 | 
			
		||||
		if (g_file_query_exists ((file = user_guide_path (*iter)), NULL))
 | 
			
		||||
			break;
 | 
			
		||||
		g_object_unref (file);
 | 
			
		||||
	}
 | 
			
		||||
	if (!*iter)
 | 
			
		||||
		file = user_guide_path ("en");
 | 
			
		||||
 | 
			
		||||
	if (!open_file (file, gtk_window_get_screen (GTK_WINDOW (self)), &error))
 | 
			
		||||
	{
 | 
			
		||||
		GtkWidget *message_dialog;
 | 
			
		||||
 | 
			
		||||
		message_dialog = gtk_message_dialog_new (GTK_WINDOW (self),
 | 
			
		||||
			GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
 | 
			
		||||
			_("Failed to open the user guide"));
 | 
			
		||||
		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);
 | 
			
		||||
	}
 | 
			
		||||
	g_object_unref (file);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
on_action_about_activate_link (GtkAboutDialog *dialog, gchar *uri,
 | 
			
		||||
	LdWindowMain *self)
 | 
			
		||||
{
 | 
			
		||||
	GdkWindow *window;
 | 
			
		||||
 | 
			
		||||
	window = gtk_widget_get_window (GTK_WIDGET (self));
 | 
			
		||||
 | 
			
		||||
#ifdef G_OS_WIN32
 | 
			
		||||
	/* 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
 | 
			
		||||
on_action_about (GtkAction *action, LdWindowMain *self)
 | 
			
		||||
{
 | 
			
		||||
	gtk_show_about_dialog (GTK_WINDOW (self),
 | 
			
		||||
	GtkWidget *about_dialog;
 | 
			
		||||
 | 
			
		||||
	about_dialog = g_object_new (GTK_TYPE_ABOUT_DIALOG,
 | 
			
		||||
		"program-name", PROJECT_NAME,
 | 
			
		||||
		"logo-icon-name", PROJECT_NAME,
 | 
			
		||||
		"version", PROJECT_VERSION,
 | 
			
		||||
@@ -984,6 +1093,15 @@ on_action_about (GtkAction *action, LdWindowMain *self)
 | 
			
		||||
		"copyright", "Copyright 2010 - 2021 Přemysl Eric Janouch",
 | 
			
		||||
		"website", PROJECT_URL,
 | 
			
		||||
		NULL);
 | 
			
		||||
 | 
			
		||||
	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 void
 | 
			
		||||
 
 | 
			
		||||
@@ -15,16 +15,16 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LD_TYPE_WINDOW_MAIN (ld_window_main_get_type ())
 | 
			
		||||
#define LD_WINDOW_MAIN(obj) (G_TYPE_CHECK_INSTANCE_CAST \
 | 
			
		||||
	((obj), LD_TYPE_WINDOW_MAIN, LdWindowMain))
 | 
			
		||||
#define LD_WINDOW_MAIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
 | 
			
		||||
	((klass), LD_TYPE_WINDOW_MAIN, LdWindowMainClass))
 | 
			
		||||
#define LD_IS_WINDOW_MAIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((obj), LD_TYPE_WINDOW_MAIN))
 | 
			
		||||
#define LD_IS_WINDOW_MAIN_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
 | 
			
		||||
	((klass), LD_TYPE_WINDOW_MAIN))
 | 
			
		||||
#define LD_WINDOW_MAIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
 | 
			
		||||
	((obj), LD_WINDOW_MAIN, LdWindowMainClass))
 | 
			
		||||
#define LD_WINDOW_MAIN(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_CAST ((obj), LD_TYPE_WINDOW_MAIN, LdWindowMain))
 | 
			
		||||
#define LD_WINDOW_MAIN_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_CLASS_CAST ((klass), LD_TYPE_WINDOW_MAIN, LdWindowMainClass))
 | 
			
		||||
#define LD_IS_WINDOW_MAIN(obj) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((obj), LD_TYPE_WINDOW_MAIN))
 | 
			
		||||
#define LD_IS_WINDOW_MAIN_CLASS(klass) \
 | 
			
		||||
	(G_TYPE_CHECK_INSTANCE_TYPE ((klass), LD_TYPE_WINDOW_MAIN))
 | 
			
		||||
#define LD_WINDOW_MAIN_GET_CLASS(obj) \
 | 
			
		||||
	(G_TYPE_INSTANCE_GET_CLASS ((obj), LD_WINDOW_MAIN, LdWindowMainClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _LdWindowMain LdWindowMain;
 | 
			
		||||
typedef struct _LdWindowMainPrivate LdWindowMainPrivate;
 | 
			
		||||
@@ -53,4 +53,3 @@ GtkWidget *ld_window_main_new (const gchar *filename);
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* ! __LD_WINDOW_MAIN_H__ */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -161,6 +161,11 @@ main (int argc, char *argv[])
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef OPTION_NOINSTALL
 | 
			
		||||
	gtk_icon_theme_prepend_search_path (gtk_icon_theme_get_default (),
 | 
			
		||||
		PROJECT_SHARE_DIR "icons");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	gtk_window_set_default_icon_name (PROJECT_NAME);
 | 
			
		||||
 | 
			
		||||
	if (files)
 | 
			
		||||
@@ -175,4 +180,3 @@ main (int argc, char *argv[])
 | 
			
		||||
	gtk_main ();
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user