36 Commits

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

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

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

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

Bump minimum CMake version to avoid a bug.
2021-10-23 18:01:30 +02:00
4305c603e9 CMakeLists.txt: clean-up
Use the newer 3.0 string quoting to save some ugly escaping.
2021-10-23 16:35:36 +02:00
cbe23b7bb6 Bump version, update NEWS 2021-10-22 22:34:39 +02:00
2d103ed454 Fix the file save dialog and translations 2021-10-22 22:23:59 +02:00
885ccb46a3 Win32Depends.cmake: get rid of 7z
CMake 3.9 has been proven to successfully unpack 7z archives.
2021-10-22 21:53:35 +02:00
47fb9653b8 Bump the CMake version requirement, fix Windows
- Add a missing runtime library for gettext-tools.
 - Remove the no longer necessary customized FindGettext.cmake,
   since the downloaded gettext binaries are new enough.
 - Make the installer at least ask to uninstall previous versions.
 - Adjust the PATH of tests so that they'll run on Windows directly.
 - Fix quoting so that the project will build inside paths with spaces.
 - Resolve a GSettings deprecation warning.
 - Update the README's build instructions as appropriate.
 - Require CMake 3.9 because of the README's suggestion to fix
   FindPkgConfig.cmake manually using separate_arguments(UNIX_COMMAND).

Tested build configurations:
 - native Arch Linux,
 - native Windows XP with the newest NSIS,
 - Arch Linux Mingw-w64 i686 Win32Depends.cmake NSIS cross-build + XP,
 - Arch Linux Mingw-w64 x86_64 MSYS2 NSIS cross-build + Windows 10.

Detected issues:
 - The file save dialog will not add the extension automatically,
   seen with MSYS2.
2021-10-22 20:08:51 +02:00
42b6da1ffe README: fix cross-building instructions
Copy-pasting and exhaustion do not go well together.
2021-10-22 14:41:37 +02:00
98f16c2c76 Further minor improvements to cross-compilation 2021-10-22 01:40:29 +02:00
03c6ae0750 Include modern build instructions for Win64
Mostly just so that the two options don't look the same.
2021-10-21 21:53:20 +02:00
95f53863ec Win64Depends.sh: verify package checksums
Now the script has nearly reached feature parity with Win32Depends.sh,
though it can't be easily run on Windows.
2021-10-21 21:37:44 +02:00
8ac267c8db Figure out how to abuse MSYS2 repositories
In the end, all seems to work fairly well on Windows 10.
2021-10-21 19:38:37 +02:00
45dd1a4a86 NEWS: do not lie, theme-serviced XP looks fine 2021-10-21 12:58:13 +02:00
2c5fc3ebdd Win32Depends.cmake: show a different upgrade path 2021-10-21 11:38:53 +02:00
1ca42eb8e2 Update a comment about widget styling 2021-10-17 08:33:11 +02:00
8815d72db7 Make note of the recent g_win32_get_command_line() 2021-10-14 00:36:39 +02:00
3102bc0cb9 LdCategorySymbolView: work around a mysterious bug
We sometimes get a deselecting event when toying around with menus
and then dragging.  There might be a simpler reproducer.
2021-07-24 10:44:19 +02:00
7f357cb7c8 Fix Win32Depends.cmake, update README 2021-07-24 10:08:58 +02:00
b4db65d246 CMakeLists.txt: bump minimum version to 2.8.12
To silence a deprecation warning.

We should still be fine with this version.
2021-06-19 15:29:01 +02:00
af14119165 Name change
Also some copyright years fix-ups/updates.
2020-09-28 04:49:03 +02:00
67 changed files with 1086 additions and 914 deletions

37
.clang-format Normal file
View 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"

View File

@@ -1,23 +1,14 @@
project (logdiag C)
cmake_minimum_required (VERSION 2.8)
# Default to 2.8 behaviour
cmake_policy (VERSION 2.8)
# The last version with Windows XP support is 3.13, we want to keep that
cmake_minimum_required (VERSION 3.10)
project (logdiag VERSION 0.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
set (project_VERSION_MAJOR "0")
set (project_VERSION_MINOR "2")
set (project_VERSION_PATCH "0")
set (project_VERSION "${project_VERSION_MAJOR}")
set (project_VERSION "${project_VERSION}.${project_VERSION_MINOR}")
set (project_VERSION "${project_VERSION}.${project_VERSION_PATCH}")
set (project_URL "https://git.janouch.name/p/logdiag")
# For custom modules
@@ -28,7 +19,7 @@ if (WIN32)
set (WIN32_DEPENDS_PATH ${PROJECT_SOURCE_DIR}/win32-depends)
list (APPEND CMAKE_PREFIX_PATH ${WIN32_DEPENDS_PATH})
list (APPEND CMAKE_INCLUDE_PATH ${WIN32_DEPENDS_PATH}/lib)
list (APPEND CMAKE_C_FLAGS "-mms-bitfields")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mms-bitfields")
if (CMAKE_CROSSCOMPILING)
list (APPEND CMAKE_FIND_ROOT_PATH ${WIN32_DEPENDS_PATH})
@@ -90,7 +81,6 @@ else (NOT WIN32)
# For whatever reason this now seems to be required
set (LUA_INCLUDE_DIR "${WIN32_DEPENDS_PATH}/include")
# XXX: this seems to require CMake 3.0 ... include it in the project?
find_package (Lua REQUIRED)
if (LUA_VERSION_STRING VERSION_LESS "5.2")
message (FATAL_ERROR "Lua 5.2 not found")
@@ -114,10 +104,6 @@ foreach (file ${project_PO_FILES})
list (APPEND project_TRANSLATIONS "${translation}")
endforeach (file)
# Documentation
find_package (GtkDoc 1.25)
set (project_DOC_DIR "${PROJECT_BINARY_DIR}/liblogdiag")
# Project source files
set (liblogdiag_SOURCES
liblogdiag/ld-marshal.c
@@ -185,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})
@@ -232,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
@@ -250,20 +238,36 @@ if (BUILD_TESTING)
foreach (name ${logdiag_TESTS})
add_executable (test-${name} tests/${name}.c)
target_link_libraries (test-${name} liblogdiag ${logdiag_LIBS})
add_test (test-${name} test-${name})
add_test (NAME test-${name} COMMAND test-${name})
list (APPEND logdiag_TEST_TARGETS test-${name})
endforeach (name)
if (WIN32 AND NOT CMAKE_CROSSCOMPILING)
set_tests_properties (${logdiag_TEST_TARGETS}
PROPERTIES ENVIRONMENT "PATH=${WIN32_DEPENDS_PATH}/bin")
endif ()
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 ()
@@ -340,19 +344,22 @@ 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)
install (DIRECTORY
${WIN32_DEPENDS_PATH}/lib/gdk-pixbuf-2.0
DESTINATION lib)
DESTINATION lib
FILES_MATCHING PATTERN "*" PATTERN "*.a" EXCLUDE)
install (DIRECTORY
${WIN32_DEPENDS_PATH}/share/glib-2.0/schemas
DESTINATION share/glib-2.0
FILES_MATCHING PATTERN "org.gtk.Settings.*")
install (DIRECTORY
${WIN32_DEPENDS_PATH}/share/icons/Adwaita
DESTINATION share/icons OPTIONAL)
install (FILES
${WIN32_DEPENDS_PATH}/share/icons/hicolor/index.theme
DESTINATION share/icons/hicolor)
@@ -369,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)
@@ -380,25 +389,21 @@ else (WIN32)
install (FILES LICENSE NEWS DESTINATION share/doc/${PROJECT_NAME})
endif (WIN32)
install (FILES ${GSETTINGS_SCHEMAS}
DESTINATION share/glib-2.0/schemas)
install (CODE " # DESTDIR is not in use on Windows
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 (WIN32 is only native here!)
if (WIN32 OR \"\$ENV{DESTDIR}\" STREQUAL \"\")
execute_process (COMMAND ${GLIB_COMPILE_SCHEMAS_EXECUTABLE}
execute_process (COMMAND \"${GLIB_COMPILE_SCHEMAS_EXECUTABLE}\"
\"\${CMAKE_INSTALL_PREFIX}/share/glib-2.0/schemas\")
endif (WIN32 OR \"\$ENV{DESTDIR}\" STREQUAL \"\")")
install (DIRECTORY share/gui share/library
DESTINATION share/${PROJECT_NAME})
endif ()")
# CPack
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Schematic editor")
set (CPACK_PACKAGE_VENDOR "Premysl Janouch")
set (CPACK_PACKAGE_CONTACT "Přemysl Janouch <p@janouch.name>")
set (CPACK_PACKAGE_VENDOR "Premysl Eric Janouch")
set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch <p@janouch.name>")
set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
set (CPACK_PACKAGE_VERSION_MAJOR ${project_VERSION_MAJOR})
set (CPACK_PACKAGE_VERSION_MINOR ${project_VERSION_MINOR})
set (CPACK_PACKAGE_VERSION_PATCH ${project_VERSION_PATCH})
set (CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
if (WIN32)
set (CPACK_GENERATOR "NSIS;ZIP")
@@ -408,29 +413,30 @@ else (WIN32)
endif (WIN32)
set (CPACK_PACKAGE_FILE_NAME
"${PROJECT_NAME}-${project_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
set (CPACK_PACKAGE_INSTALL_DIRECTORY
"${PROJECT_NAME} ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}")
"${PROJECT_NAME}-${PROJECT_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
set (CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME} ${CPACK_PACKAGE_VERSION}")
# XXX: It is still possible to install multiple copies, making commands collide.
set (CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${PROJECT_NAME}")
# FIXME: It is possible to install multiple copies. Everything screws up then.
set (CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/share\\\\header.bmp")
set (CPACK_NSIS_INSTALLED_ICON_NAME "logdiag.exe")
set (CPACK_NSIS_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")
@@ -446,7 +452,6 @@ set (CPACK_RPM_PACKAGE_URL "${project_URL}")
set (CPACK_SOURCE_GENERATOR "TGZ;ZIP")
set (CPACK_SOURCE_IGNORE_FILES "/\\\\.git;/build;/CMakeLists.txt.user;/win32-depends;/liblogdiag/ld-marshal.[ch]")
set (CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${project_VERSION}")
set (CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}")
include (CPack)

View File

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

8
NEWS
View File

@@ -1,3 +1,9 @@
Version 0.2.1
- Set up grounds for 64-bit Windows builds using the latest GTK+ 3.
- Made the Windows installer ask to uninstall previous versions first.
- Worked around a mysterious recent GTK+ bug with symbol dragging.
- Put a default filename in the save dialog, ensuring a file extension.
Version 0.2.0
- Added a library pane instead of a toolbar.
- Added scrolling using the middle mouse button.
@@ -15,7 +21,7 @@ Version 0.2.0
- This is the last version supporting Windows XP (we use an outdated GTK+
bundle, support for this operating system has been dropped in version 3.18).
- Various unimportant fixes and changes.
- Known issues: Windows XP looks ugly now and there's little we can do.
- Known issues: Windows XP looks ugly with the classic theme, little we can do.
Version 0.1.2
- Updated symbol library.

View File

@@ -3,8 +3,8 @@ logdiag
'logdiag' is a simple multiplatform schematic editor written in GTK+.
This software is considered to be of alpha quality and isn't recommended for
regular usage.
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"]
@@ -13,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 >= 2.8
Build dependencies: CMake >= 3.10
Build from source on Unix-like systems
--------------------------------------
@@ -33,74 +36,78 @@ 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.
$ fakeroot cpack -G DEB
+
$ cpack -G DEB
# dpkg -i logdiag-version-system-arch.deb
Leave out the fakeroot for CMake >= 2.8.9, it's been fixed since.
Build from source on Windows
----------------------------
_Note that with the current method we're stuck with GTK+ 3.10.4 at best._
_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 >= 3.1 and MinGW. Add both to your system path. If you want
to build an installation package, also install NSIS.
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
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:
1. An NSIS-based installation package:
+
> cpack -G NSIS
2. A portable ZIP package:
+
> cpack -G ZIP
By default, that is if you specify no generator, both packages are built.
Cross-compilation for Windows
-----------------------------
The procedure is almost exactly the same as before, including the requirements.
Just install MinGW-w64 and let automation take care of the rest.
$ cmake -P Win32Depends.cmake
$ mkdir build
$ cd build
$ cmake .. \
-DCMAKE_TOOLCHAIN_FILE=../ToolchainDebianMinGWW64.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:
$ sh Win64Depends.sh
$ cmake -DCMAKE_TOOLCHAIN_FILE=ToolchainCrossWin64.cmake \
-DCMAKE_BUILD_TYPE=Release -B build
$ cmake --build build -- package
Contributing and Support
------------------------
Use https://git.janouch.name/p/logdiag to report any bugs, request features,

16
ToolchainCrossWin64.cmake Normal file
View File

@@ -0,0 +1,16 @@
set (CMAKE_SYSTEM_NAME "Windows")
set (CMAKE_SYSTEM_PROCESSOR "x86_64")
set (CMAKE_C_COMPILER "x86_64-w64-mingw32-gcc")
set (CMAKE_CXX_COMPILER "x86_64-w64-mingw32-g++")
set (CMAKE_RC_COMPILER "x86_64-w64-mingw32-windres")
# Not needed to crosscompile an installation package
#set (CMAKE_CROSSCOMPILING_EMULATOR "wine64")
set (CMAKE_FIND_ROOT_PATH "/usr/x86_64-w64-mingw32")
set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

37
Win32Cleanup.cmake Normal file
View File

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

View File

@@ -1,14 +1,11 @@
# Usage: cmake -P Win32Depends.cmake
# Only CMake 3.1+ supports XZ archives and 7z doesn't also untar automatically
cmake_minimum_required (VERSION 3.1)
# Only CMake 3.1+ supports XZ archives, not sure when 7z support comes from
cmake_minimum_required (VERSION 3.9)
# Directories
set (working_dir ${CMAKE_CURRENT_BINARY_DIR}/win32-depends)
set (pkg_dir ${working_dir}/packages)
set (tools_dir ${working_dir}/tools)
set (sevenzip_executable ${tools_dir}/7za)
set (tmp_dir ${working_dir}/tmp)
file (MAKE_DIRECTORY ${working_dir})
file (MAKE_DIRECTORY ${pkg_dir})
@@ -21,27 +18,25 @@ if (files)
endif (files)
# Packages
set (pkg_list "7za" "gtk" "gtkalt" "winlibs" "mingw_lua")
set (pkg_7za_root "http://sourceforge.net/projects/sevenzip/files")
set (pkg_7za_urls "${pkg_7za_root}/7-Zip/9.20/7za920.zip")
set (pkg_7za_md5 "2fac454a90ae96021f4ffc607d4c00f8")
set (pkg_list "gtk" "gtkalt" "winlibs" "mingw_lua")
set (pkg_gtk_root "http://ftp.gnome.org/pub/gnome/binaries/win32")
set (pkg_gtk_urls "${pkg_gtk_root}/dependencies/gettext-tools-0.17.zip")
set (pkg_gtk_md5 "09baff956ebd1c391c7f71e9bd768edd")
set (pkg_gtk_urls
"${pkg_gtk_root}/dependencies/gettext-tools-0.17.zip"
"${pkg_gtk_root}/dependencies/gettext-runtime-0.17-1.zip")
set (pkg_gtk_md5
"09baff956ebd1c391c7f71e9bd768edd"
"110394b4b1e0a50cd440f1e8729d159c")
set (pkg_gtkalt_root "http://win32builder.gnome.org")
# https://sourceforge.net/projects/urlget/files
# /GTK%2B%203%20binary%20for%20Windows/GTK%2B%203.16.6/
# contains a binary bundle that may be more or less simply transplanted over,
# due to ABI compatibility, however something is wrong with icons,
# and it looks alien on Windows XP (use themes) for close to no improvement.
set (pkg_gtkalt_root "https://download.geany.org/contrib/gtk")
set (pkg_gtkalt_urls "${pkg_gtkalt_root}/gtk+-bundle_3.8.2-20131001_win32.zip")
set (pkg_gtkalt_md5 "3f9b159207edf44937f209b4a5e6bb63")
# Doesn't work, no gtk+-3.0.pc file present
#set (pkg_gtkalt_urls "${pkg_gtkalt_root}/gtk+-bundle_3.10.4-20131202_win32.zip")
#set (pkg_gtkalt_md5 "520bed70943974efdaeea2a1dbe48f84")
# Too old
#set (pkg_gtkalt_urls "${pkg_gtkalt_root}/gtk+-bundle_3.6.4-20130921_win32.zip")
#set (pkg_gtkalt_md5 "9bcb87d917982a6e52a69141ade8bd56")
set (pkg_winlibs_root "http://sourceforge.net/projects/winlibs/files")
set (pkg_winlibs_urls "${pkg_winlibs_root}/GTK+/libjson-glib-1.0-1-mingw32.7z")
set (pkg_winlibs_md5 "f06e42c5998dae5fb6245fecc96a403e")
@@ -66,11 +61,11 @@ foreach (pkg_set ${pkg_list})
message (WARNING "MD5 checksum missing for ${basename}")
set (pkg_md5_sum)
set (pkg_md5_param)
else (NOT pkg_md5)
else ()
list (GET pkg_md5 0 pkg_md5_sum)
list (REMOVE_AT pkg_md5 0)
set (pkg_md5_param EXPECTED_MD5 ${pkg_md5_sum})
endif (NOT pkg_md5)
endif ()
if (NOT EXISTS ${filename})
message (STATUS "Downloading ${url}...")
@@ -88,74 +83,27 @@ foreach (pkg_set ${pkg_list})
if (NOT output MATCHES "^${pkg_md5_sum}")
message (FATAL_ERROR "MD5 mismatch for ${basename}")
endif (NOT output MATCHES "^${pkg_md5_sum}")
endif (NOT EXISTS ${filename})
endif ()
endforeach (url)
endforeach (pkg_set)
if (NOT WIN32)
unset (sevenzip_executable)
find_program (sevenzip_executable 7za)
if (NOT sevenzip_executable)
message (FATAL_ERROR "Could not find 7za (part of p7zip)")
endif (NOT sevenzip_executable)
endif (NOT WIN32)
# Stage 2: setup 7za first
file (MAKE_DIRECTORY ${tmp_dir})
foreach (url ${pkg_7za_urls})
get_filename_component (filename ${url} NAME)
message (STATUS "Extracting ${filename}...")
set (filename ${pkg_dir}/${filename})
execute_process (COMMAND ${CMAKE_COMMAND} -E tar xf ${filename}
WORKING_DIRECTORY ${tmp_dir}
RESULT_VARIABLE status)
if (status)
message (FATAL_ERROR "Extraction failed: ${status}")
endif (status)
endforeach (url)
file (MAKE_DIRECTORY ${tools_dir})
file (COPY ${tmp_dir}/7za.exe DESTINATION ${tools_dir})
file (REMOVE_RECURSE ${tmp_dir})
list (REMOVE_ITEM pkg_list "7za")
# Stage 3: extract the rest of packages
# Stage 2: extract the rest of packages
foreach (pkg_set ${pkg_list})
foreach (url ${pkg_${pkg_set}_urls})
get_filename_component (filename ${url} NAME)
message (STATUS "Extracting ${filename}...")
if (filename MATCHES "\\.7z$")
set (extract_command ${sevenzip_executable} x)
set (quiet OUTPUT_QUIET)
else (filename MATCHES "\\.7z$")
set (extract_command ${CMAKE_COMMAND} -E tar xf)
set (quiet)
endif (filename MATCHES "\\.7z$")
set (filename ${pkg_dir}/${filename})
if (pkg_${pkg_set}_strip)
file (MAKE_DIRECTORY ${tmp_dir})
execute_process (COMMAND ${extract_command} ${filename}
WORKING_DIRECTORY ${tmp_dir}
RESULT_VARIABLE status ${quiet})
file (COPY ${tmp_dir}/${pkg_${pkg_set}_strip}/
DESTINATION ${working_dir})
file (REMOVE_RECURSE ${tmp_dir})
else (pkg_${pkg_set}_strip)
execute_process (COMMAND ${extract_command} ${filename}
WORKING_DIRECTORY ${working_dir}
RESULT_VARIABLE status ${quiet})
endif (pkg_${pkg_set}_strip)
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 (status)
endif ()
endforeach (url)
endforeach (pkg_set)
# Stage 4: final touches
# Stage 3: final touches
# We have to fix the prefix path as it is completely wrong everywhere
file (GLOB files ${working_dir}/lib/pkgconfig/*.pc)
foreach (file ${files})

74
Win64Depends.sh Normal file
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,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">
&nbsp;&#8230;&nbsp;
<img src="create-connection-end.png" alt="Konec operace" align="center">
<br>Obrázek 3: Propojení terminálů dvou značek
<h2>Časté problémy</h2>
<h3>Nelze otevřít uložený diagram</h3>
<p>Při ukládání se ujistěte, že zadaný název souboru obsahuje příponu
<q>.ldd</q>. V opačném případě se nezobrazí v dialogu pro otevření diagramu.
Pokud jste nějaký soubor již bez přípony uložili, napravíte to dodatečným
přidáním přípony k jeho názvu.
<h3>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>

View File

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

View File

@@ -0,0 +1,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 its also valid for other operating systems to
a certain extent.
<h2>Getting the application</h2>
<p>Download the newest version of the application at the following web address:
<a href="https://git.janouch.name/p/logdiag">https://git.janouch.name/p/logdiag</a>.
<p class="figure"><img src="gitea.png" alt="Gitea">
<br>Figure 1: The download menu on the project site
<p>While on the web, look for a tab entitled <q>Releases</q> and click on it.
A list of versions will appear with files for download listed under
<q>Downloads</q> headings. The installation file for Microsoft Windows is named
in the style of <q>logdiag-<i>version</i>-Windows-x86.exe</q>.
<h2>Installation</h2>
<p>The installation process is quite straight-forward. After the initial screen
a license agreement is required. Next, choose a folder in which to install
the application and another one for placement in the Start menu. So long as
no unexpected errors have occurred, all thats left is confirming a successful
installation.
<p><b>Warning</b>: If the application is installed into a folder where
a previous installation is already located, problems may arise. Although it is
possible to do so, dont try to install multiple copies parallely either, for
the same reasons. Remove the current installation first, for example by using
the shortcut located in the Start menu.
<h2>Operations with objects</h2>
<p>Each diagram consists of objects, and these are accompanied by the operations
described below. To cancel any current operation, press the Escape key.
<!-- TODO: see the Czech version -->
<h3>Selecting objects</h3>
<p>Select single objects by left-clicking on them. They will get highlighted
with red color in reaction to this. To select multiple objects, hold the Shift
key while clicking.
<p class="figure" id="select-objects">
<img src="select-objects.png" alt="select objects">
<br>Figure 2: Selecting objects inside an area
<p>Alternatively drag the mouse from free space within the diagram into
the area, see <a href="#select-objects">Figure 2</a>. Objects contained in this
rectangle will be selected. The selection may later be dismissed by just
clicking into free space.
<h3>Moving objects</h3>
<p>Moving of objects is done by dragging them with the mouse onto the desired
place. If these objects form a part of the current selection, the whole
selection is moved. The selection may also be moved using cursor keys.
<h3>Removing objects</h3>
<p>Remove objects either by pressing the Delete key or from the application
menu.
<h3>Inserting symbols</h3>
<p><i>Symbols</i> constitute the most important kind of objects. Insert them
into the diagram by choosing one from the symbol menu located on the left side
of the main application window and dragging it onto the diagram where you want
the symbol to be placed.
<h3>Rotating symbols</h3>
<p>Rotate a symbol inserted into the diagram by right-clicking on it.
<h3>Connecting terminals</h3>
<p>A point intended for creation of connections between symbols or other
connections is called a <i>terminal</i>. To lead a connection out of it, first
hover it with the mouse pointer, so it gets visibly highlighted with a circle.
Then press the left mouse button and drag the pointer onto the place where you
want the connection to end.
<p class="figure" id="create-connection">
<img src="create-connection-begin.png" alt="Start of operation" align="center">
&nbsp;&#8230;&nbsp;
<img src="create-connection-end.png" alt="End of operation" align="center">
<br>Figure 3: Interconnecting terminals of two symbols
<h2>Frequent problems</h2>
<h3>Cant open a saved diagram</h3>
<p>When saving, ensure that the filename youve typed in contains the
<q>.ldd</q> suffix. If not, it wont show up in the dialog for opening diagrams.
In case youve already saved a file without an extension, you may fix this
situation by adding the suffix to its name.
<h3>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 doesnt 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>

View File

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

View File

@@ -2,7 +2,7 @@
* ld-category-symbol-view.h
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2012
* Copyright 2012 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -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;

View File

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

View File

@@ -2,7 +2,7 @@
* ld-category-tree-view.h
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2011, 2012
* Copyright 2011, 2012 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -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;

View File

@@ -2,7 +2,7 @@
* ld-category-view.c
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2012
* Copyright 2012 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -21,7 +21,7 @@
* hierarchies.
*/
G_DEFINE_INTERFACE (LdCategoryView, ld_category_view, 0);
G_DEFINE_INTERFACE (LdCategoryView, ld_category_view, 0)
static void
ld_category_view_default_init (LdCategoryViewInterface *iface)
@@ -77,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);

View File

@@ -2,7 +2,7 @@
* ld-category-view.h
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2012
* Copyright 2012 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -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);

View File

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

View File

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

View File

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

View File

@@ -2,7 +2,7 @@
* ld-diagram-connection.h
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2011
* Copyright 2011 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -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__ */

View File

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

View File

@@ -2,7 +2,7 @@
* ld-diagram-object.h
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010, 2011
* Copyright 2010, 2011 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -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__ */

View File

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

View File

@@ -2,7 +2,7 @@
* ld-diagram-symbol.h
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010, 2011
* Copyright 2010, 2011 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -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__ */

View File

@@ -2,7 +2,7 @@
* ld-diagram-view.c
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010, 2011, 2012
* Copyright 2010, 2011, 2012, 2015 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -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

View File

@@ -2,7 +2,7 @@
* ld-diagram-view.h
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010, 2011
* Copyright 2010, 2011 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -15,16 +15,18 @@ G_BEGIN_DECLS
#define LD_TYPE_DIAGRAM_VIEW (ld_diagram_view_get_type ())
#define LD_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;

View File

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

View File

@@ -2,7 +2,7 @@
* ld-diagram.h
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010, 2011
* Copyright 2010, 2011 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -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__ */

View File

@@ -2,7 +2,7 @@
* ld-library.c
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010, 2011, 2012
* Copyright 2010, 2011, 2012 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -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;
}

View File

@@ -2,7 +2,7 @@
* ld-library.h
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010, 2012
* Copyright 2010, 2012 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -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__ */

View File

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

View File

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

View File

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

View File

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

View File

@@ -2,7 +2,7 @@
* ld-lua.c
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010, 2011, 2012
* Copyright 2010, 2011, 2012 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -150,7 +150,7 @@ static luaL_Reg ld_lua_cairo_table[] =
/* ===== Generic =========================================================== */
G_DEFINE_TYPE (LdLua, ld_lua, G_TYPE_OBJECT);
G_DEFINE_TYPE (LdLua, ld_lua, G_TYPE_OBJECT)
static void
ld_lua_class_init (LdLuaClass *klass)
@@ -187,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)

View File

@@ -2,7 +2,7 @@
* ld-lua.h
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010
* Copyright 2010 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -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__ */

View File

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

View File

@@ -2,7 +2,7 @@
* ld-symbol.h
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010, 2011
* Copyright 2010, 2011 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -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__ */

View File

@@ -2,7 +2,7 @@
* ld-types.c
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010, 2011
* Copyright 2010, 2011 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -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);

View File

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

View File

@@ -2,7 +2,7 @@
* ld-undo-action.c
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2011
* Copyright 2011 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -40,7 +40,7 @@ struct _LdUndoActionPrivate
static void ld_undo_action_finalize (GObject *gobject);
G_DEFINE_TYPE (LdUndoAction, ld_undo_action, G_TYPE_OBJECT);
G_DEFINE_TYPE (LdUndoAction, ld_undo_action, G_TYPE_OBJECT)
static void
ld_undo_action_class_init (LdUndoActionClass *klass)
@@ -84,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;

View File

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

View File

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

View File

@@ -1,32 +1,32 @@
# Czech translation for logdiag.
# Copyright (C) 2011 Přemysl Janouch
# Copyright (C) 2011 Přemysl Eric Janouch
# This file is distributed under the same license as the logdiag package.
# Přemysl Janouch <p@janouch.name>, 2011.
# Přemysl Eric Janouch <p@janouch.name>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: logdiag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-27 04:52+0200\n"
"PO-Revision-Date: 2018-06-25 04:02+0200\n"
"Last-Translator: Přemysl Janouch <p@janouch.name>\n"
"Report-Msgid-Bugs-To: https://git.janouch.name/p/logdiag/issues\n"
"POT-Creation-Date: 2021-10-22 22:16+0200\n"
"PO-Revision-Date: 2021-10-22 22:21+0200\n"
"Last-Translator: Přemysl Eric Janouch <p@janouch.name>\n"
"Language-Team: Czech <cs@li.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.8\n"
"X-Generator: Poedit 3.0\n"
#: ../src/ld-window-main.c:931
#: ../src/ld-window-main.c:937
#, c-format
msgid "%d%%"
msgstr "%d %%"
#: ../src/logdiag.c:146
#: ../src/logdiag.c:147
msgid "- Schematic editor"
msgstr "- Editor schémat"
#: ../src/ld-window-main.c:855
#: ../src/ld-window-main.c:861
msgid "Close _without Saving"
msgstr "Zavřít _bez uložení"
@@ -59,7 +59,7 @@ msgstr "Nelze otevřít soubor"
msgid "Failed to save the diagram"
msgstr "Nelze uložit diagram"
#: ../src/ld-window-main.c:853
#: ../src/ld-window-main.c:859
msgid "If you don't save, changes will be permanently lost."
msgstr "Pokud je neuložíte, budou změny navždy ztraceny."
@@ -87,7 +87,7 @@ msgstr "Provede posledně vrácenou akci"
msgid "Reset zoom level back to the default"
msgstr "Vrátí přiblížení na výchozí hodnotu"
#: ../src/ld-window-main.c:790
#: ../src/ld-window-main.c:792
msgid "Save As..."
msgstr "Uložit jako..."
@@ -97,17 +97,15 @@ msgstr "Uložit _jako..."
#: ../src/ld-window-main.c:623
#, c-format
msgid ""
"Save the changes to diagram \"%s\" before closing it and creating a new one?"
msgid "Save the changes to diagram \"%s\" before closing it and creating a new one?"
msgstr "Uložit změny v diagramu \"%s\" před jeho zavřením a vytvořením nového?"
#: ../src/ld-window-main.c:755
#, c-format
msgid ""
"Save the changes to diagram \"%s\" before closing it and opening another one?"
msgid "Save the changes to diagram \"%s\" before closing it and opening another one?"
msgstr "Uložit změny v diagramu \"%s\" před jeho zavřením a otevřením jiného?"
#: ../src/ld-window-main.c:893
#: ../src/ld-window-main.c:899
#, c-format
msgid "Save the changes to diagram \"%s\" before closing?"
msgstr "Uložit změny v diagramu \"%s\" před jeho zavřením?"
@@ -160,6 +158,10 @@ msgstr "Vrátí poslední akci"
msgid "Unsaved Diagram"
msgstr "Neuložený diagram"
#: ../src/ld-window-main.c:806
msgid "Untitled diagram"
msgstr "Nepojmenovaný diagram"
#: ../src/ld-window-main.c:171
msgid "Zoom _Out"
msgstr "_Oddálit"
@@ -240,9 +242,9 @@ msgstr "_Zobrazení"
msgid "_Zoom In"
msgstr "_Přiblížit"
#: ../src/ld-window-main.c:977
#: ../src/ld-window-main.c:983
msgid "translator-credits"
msgstr "Přemysl Janouch <p@janouch.name>"
msgstr "Přemysl Eric Janouch <p@janouch.name>"
#~ msgid "The file is probably corrupted."
#~ msgstr "Soubor je pravděpodobně poškozen."

View File

@@ -1,15 +1,15 @@
# German translation for logdiag.
# Copyright (C) 2011 Přemysl Janouch
# Copyright (C) 2011 Přemysl Eric Janouch
# This file is distributed under the same license as the logdiag package.
# Andy J., 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: logdiag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-27 04:52+0200\n"
"Report-Msgid-Bugs-To: https://git.janouch.name/p/logdiag/issues\n"
"POT-Creation-Date: 2021-10-22 22:16+0200\n"
"PO-Revision-Date: 2018-06-25 04:11+0200\n"
"Last-Translator: Přemysl Janouch <p@janouch.name>\n"
"Last-Translator: Přemysl Eric Janouch <p@janouch.name>\n"
"Language-Team: German <de@li.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
@@ -17,16 +17,16 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.8\n"
#: ../src/ld-window-main.c:931
#: ../src/ld-window-main.c:937
#, c-format
msgid "%d%%"
msgstr "%d %%"
#: ../src/logdiag.c:146
#: ../src/logdiag.c:147
msgid "- Schematic editor"
msgstr "- Schema Editor"
#: ../src/ld-window-main.c:855
#: ../src/ld-window-main.c:861
msgid "Close _without Saving"
msgstr "Schließen _ohne Speichern"
@@ -61,7 +61,7 @@ msgstr "Fehler beim Öffnen der Datei"
msgid "Failed to save the diagram"
msgstr "Fehler beim Speichern des Diagramms"
#: ../src/ld-window-main.c:853
#: ../src/ld-window-main.c:859
msgid "If you don't save, changes will be permanently lost."
msgstr "Wenn Sie nicht speichern, gehen alle Änderungen verloren."
@@ -89,7 +89,7 @@ msgstr "Letzte nicht abgeschlossene Aktion wiederholen"
msgid "Reset zoom level back to the default"
msgstr "Zoom Bereich zurücksetzen"
#: ../src/ld-window-main.c:790
#: ../src/ld-window-main.c:792
msgid "Save As..."
msgstr "Speichern unter..."
@@ -111,7 +111,7 @@ msgstr ""
"Änderungen im Diagramm \"%s\" speichern bevor es beendet und ein Weiteres "
"geöffnet wird?"
#: ../src/ld-window-main.c:893
#: ../src/ld-window-main.c:899
#, c-format
msgid "Save the changes to diagram \"%s\" before closing?"
msgstr "Änderungen im Diagramm \"%s\" vor dem Schließen speichern?"
@@ -164,6 +164,11 @@ msgstr "Letzte Aktion rückgangig machen"
msgid "Unsaved Diagram"
msgstr "Ungespeichertes Diagramm"
#: ../src/ld-window-main.c:806
#, fuzzy
msgid "Untitled diagram"
msgstr "Ungespeichertes Diagramm"
#: ../src/ld-window-main.c:171
msgid "Zoom _Out"
msgstr "Zoom _heraus"
@@ -244,7 +249,7 @@ msgstr "_Ansicht"
msgid "_Zoom In"
msgstr "_Hineinzoomen"
#: ../src/ld-window-main.c:977
#: ../src/ld-window-main.c:983
msgid "translator-credits"
msgstr "Andy J."

View File

@@ -1,5 +1,5 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Přemysl Janouch
# Copyright (C) YEAR Přemysl Eric Janouch
# This file is distributed under the same license as the logdiag package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
@@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: logdiag 0.2.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-27 04:52+0200\n"
"Report-Msgid-Bugs-To: https://git.janouch.name/p/logdiag/issues\n"
"POT-Creation-Date: 2021-10-22 22:16+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -206,29 +206,33 @@ msgstr ""
msgid "Open..."
msgstr ""
#: ../src/ld-window-main.c:790
#: ../src/ld-window-main.c:792
msgid "Save As..."
msgstr ""
#: ../src/ld-window-main.c:853
#: ../src/ld-window-main.c:806
msgid "Untitled diagram"
msgstr ""
#: ../src/ld-window-main.c:859
msgid "If you don't save, changes will be permanently lost."
msgstr ""
#: ../src/ld-window-main.c:855
#: ../src/ld-window-main.c:861
msgid "Close _without Saving"
msgstr ""
#: ../src/ld-window-main.c:893
#: ../src/ld-window-main.c:899
#, c-format
msgid "Save the changes to diagram \"%s\" before closing?"
msgstr ""
#: ../src/ld-window-main.c:931
#: ../src/ld-window-main.c:937
#, c-format
msgid "%d%%"
msgstr ""
#: ../src/ld-window-main.c:977
#: ../src/ld-window-main.c:983
msgid "translator-credits"
msgstr ""
@@ -236,7 +240,7 @@ msgstr ""
msgid "[FILE...]"
msgstr ""
#: ../src/logdiag.c:146
#: ../src/logdiag.c:147
msgid "- Schematic editor"
msgstr ""

View File

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

View File

@@ -1,15 +1,15 @@
# Polish translation for logdiag.
# Copyright (C) 2011 Přemysl Janouch
# Copyright (C) 2011 Přemysl Eric Janouch
# This file is distributed under the same license as the logdiag package.
# Robert Svoboda <ravath@gmail.com>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: logdiag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-27 04:52+0200\n"
"Report-Msgid-Bugs-To: https://git.janouch.name/p/logdiag/issues\n"
"POT-Creation-Date: 2021-10-22 22:16+0200\n"
"PO-Revision-Date: 2018-06-25 04:09+0200\n"
"Last-Translator: Přemysl Janouch <p@janouch.name>\n"
"Last-Translator: Přemysl Eric Janouch <p@janouch.name>\n"
"Language-Team: Polish <pl@li.org>\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
@@ -17,16 +17,16 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.8\n"
#: ../src/ld-window-main.c:931
#: ../src/ld-window-main.c:937
#, c-format
msgid "%d%%"
msgstr "%d%%"
#: ../src/logdiag.c:146
#: ../src/logdiag.c:147
msgid "- Schematic editor"
msgstr "- Edytor schematów"
#: ../src/ld-window-main.c:855
#: ../src/ld-window-main.c:861
msgid "Close _without Saving"
msgstr "Zamknąć _bez zapisu"
@@ -59,7 +59,7 @@ msgstr "Pliku nie da się otworzyć"
msgid "Failed to save the diagram"
msgstr "Nie udało się zapisać wykresu"
#: ../src/ld-window-main.c:853
#: ../src/ld-window-main.c:859
msgid "If you don't save, changes will be permanently lost."
msgstr "Jeżeli nie zapiszesz zmian, zostaną one trwale utracone"
@@ -87,7 +87,7 @@ msgstr "Powtórzy ostatnio cofniętą akcję"
msgid "Reset zoom level back to the default"
msgstr "Przywróci poziom zbliżenia na poziom wyjściowy"
#: ../src/ld-window-main.c:790
#: ../src/ld-window-main.c:792
msgid "Save As..."
msgstr "Zapisz jako..."
@@ -109,7 +109,7 @@ msgid ""
msgstr ""
"Zapisać zmiany w wykresie \"%s\" przed jego zamknięciem i stworzeniem nowego?"
#: ../src/ld-window-main.c:893
#: ../src/ld-window-main.c:899
#, c-format
msgid "Save the changes to diagram \"%s\" before closing?"
msgstr "Zapisać zmiany w wykresie \"%s\" przed jego zamknięciem?"
@@ -162,6 +162,11 @@ msgstr "Cofnie ostatnią akcję"
msgid "Unsaved Diagram"
msgstr "Niezapisany Wykres"
#: ../src/ld-window-main.c:806
#, fuzzy
msgid "Untitled diagram"
msgstr "Niezapisany Wykres"
#: ../src/ld-window-main.c:171
msgid "Zoom _Out"
msgstr "_Oddalić widok"
@@ -242,7 +247,7 @@ msgstr "_Widok"
msgid "_Zoom In"
msgstr "_Przybliżyć"
#: ../src/ld-window-main.c:977
#: ../src/ld-window-main.c:983
msgid "translator-credits"
msgstr "Robert Svoboda <ravath@gmail.com>"

View File

@@ -1,15 +1,15 @@
# Slovak translation for logdiag.
# Copyright (C) 2011 Přemysl Janouch
# Copyright (C) 2011 Přemysl Eric Janouch
# This file is distributed under the same license as the logdiag package.
# Miroslav Rigler <itsgoingd@luzer.sk>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: logdiag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-27 04:52+0200\n"
"Report-Msgid-Bugs-To: https://git.janouch.name/p/logdiag/issues\n"
"POT-Creation-Date: 2021-10-22 22:16+0200\n"
"PO-Revision-Date: 2018-06-25 04:05+0200\n"
"Last-Translator: Přemysl Janouch <p@janouch.name>\n"
"Last-Translator: Přemysl Eric Janouch <p@janouch.name>\n"
"Language-Team: Slovak <sk@li.org>\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
@@ -17,16 +17,16 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.8\n"
#: ../src/ld-window-main.c:931
#: ../src/ld-window-main.c:937
#, c-format
msgid "%d%%"
msgstr "%d %%"
#: ../src/logdiag.c:146
#: ../src/logdiag.c:147
msgid "- Schematic editor"
msgstr "- Editor schém"
#: ../src/ld-window-main.c:855
#: ../src/ld-window-main.c:861
msgid "Close _without Saving"
msgstr "Zatvoriť _bez uloženia"
@@ -59,7 +59,7 @@ msgstr "Nepodarilo sa otvoriť súbor"
msgid "Failed to save the diagram"
msgstr "Nepodarilo sa uložiť diagram"
#: ../src/ld-window-main.c:853
#: ../src/ld-window-main.c:859
msgid "If you don't save, changes will be permanently lost."
msgstr "Ak ich neuložíte, budú zmeny navždy stratené."
@@ -87,7 +87,7 @@ msgstr "Vykoná naposledy vrátenú akciu"
msgid "Reset zoom level back to the default"
msgstr "Vráti priblíženie na východiskovú hodnotu"
#: ../src/ld-window-main.c:790
#: ../src/ld-window-main.c:792
msgid "Save As..."
msgstr "Uložiť ako..."
@@ -108,7 +108,7 @@ msgid ""
"Save the changes to diagram \"%s\" before closing it and opening another one?"
msgstr "Uložiť zmeny v diagrame \"%s\" pred jeho zatvorením a otvorením iného?"
#: ../src/ld-window-main.c:893
#: ../src/ld-window-main.c:899
#, c-format
msgid "Save the changes to diagram \"%s\" before closing?"
msgstr "Uložiť zmeny v diagrame \"%s\" pred jeho zatvorením?"
@@ -161,6 +161,11 @@ msgstr "Vráti poslednú akciu"
msgid "Unsaved Diagram"
msgstr "Neuložený diagram"
#: ../src/ld-window-main.c:806
#, fuzzy
msgid "Untitled diagram"
msgstr "Neuložený diagram"
#: ../src/ld-window-main.c:171
msgid "Zoom _Out"
msgstr "_Oddialiť"
@@ -241,7 +246,7 @@ msgstr "_Zobrazenie"
msgid "_Zoom In"
msgstr "_Priblížiť"
#: ../src/ld-window-main.c:977
#: ../src/ld-window-main.c:983
msgid "translator-credits"
msgstr "Miroslav Rigler <itsgoingd@luzer.sk>"

View File

@@ -36,6 +36,7 @@
<menuitem action="NormalSize" />
</menu>
<menu name="HelpMenu" action="HelpMenu">
<menuitem action="UserGuide" />
<menuitem action="About" />
</menu>
</menubar>

View File

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

View File

@@ -2,7 +2,7 @@
* ld-window-main.c
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010, 2011, 2012
* Copyright 2010 - 2021 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -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)
@@ -784,6 +793,8 @@ static void
diagram_show_save_as_dialog (LdWindowMain *self)
{
GtkWidget *dialog;
GtkFileChooser *file_chooser;
gchar *filename;
g_return_if_fail (LD_IS_WINDOW_MAIN (self));
@@ -796,15 +807,19 @@ diagram_show_save_as_dialog (LdWindowMain *self)
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog),
diagram_get_file_filter ());
file_chooser = GTK_FILE_CHOOSER (dialog);
if (self->priv->filename)
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog),
self->priv->filename);
gtk_file_chooser_set_filename (file_chooser, self->priv->filename);
else
{
filename = g_strdup_printf ("%s.ldd", _("Untitled diagram"));
gtk_file_chooser_set_current_name (file_chooser, filename);
g_free (filename);
}
while (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
{
gchar *filename;
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
filename = gtk_file_chooser_get_filename (file_chooser);
if (diagram_save (self, GTK_WINDOW (dialog), filename))
{
diagram_set_filename (self, filename);
@@ -967,17 +982,126 @@ 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,
"translator-credits", _("translator-credits"),
"copyright", "Copyright Přemysl Janouch 2010 - 2018",
"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

View File

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

View File

@@ -2,7 +2,7 @@
* logdiag.c -- logdiag main source file.
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010, 2011
* Copyright 2010, 2011 Přemysl Eric Janouch
*
* See the file LICENSE for licensing information.
*
@@ -137,6 +137,7 @@ main (int argc, char *argv[])
#ifdef _WIN32
/* Don't be unneccessarily limited by the system ANSI codepage. */
/* g_win32_get_command_line() should replace this code for GLib >= 2.40. */
argv_overriden = get_utf8_args (&argc, &argv);
if (argv_overriden)
_putenv ("CHARSET=UTF-8");
@@ -160,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)
@@ -174,4 +180,3 @@ main (int argc, char *argv[])
gtk_main ();
return 0;
}

View File

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

View File

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