diff options
author | Timothy Pearson <[email protected]> | 2011-12-03 11:05:10 -0600 |
---|---|---|
committer | Timothy Pearson <[email protected]> | 2011-12-03 11:05:10 -0600 |
commit | f7e7a923aca8be643f9ae6f7252f9fb27b3d2c3b (patch) | |
tree | 1f78ef53b206c6b4e4efc88c4849aa9f686a094d /tde-i18n-da/docs/tdevelop | |
parent | 85ca18776aa487b06b9d5ab7459b8f837ba637f3 (diff) | |
download | tde-i18n-f7e7a923aca8be643f9ae6f7252f9fb27b3d2c3b.tar.gz tde-i18n-f7e7a923aca8be643f9ae6f7252f9fb27b3d2c3b.zip |
Second part of prior commit
Diffstat (limited to 'tde-i18n-da/docs/tdevelop')
40 files changed, 29417 insertions, 0 deletions
diff --git a/tde-i18n-da/docs/tdevelop/Makefile.am b/tde-i18n-da/docs/tdevelop/Makefile.am new file mode 100644 index 00000000000..29f2e0115ae --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/Makefile.am @@ -0,0 +1,4 @@ +KDE_LANG = da +SUBDIRS = $(AUTODIRS) +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/tde-i18n-da/docs/tdevelop/Makefile.in b/tde-i18n-da/docs/tdevelop/Makefile.in new file mode 100644 index 00000000000..3ce133327c5 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/Makefile.in @@ -0,0 +1,587 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = docs/tdevelop +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +#>- html-recursive info-recursive install-data-recursive \ +#>- install-dvi-recursive install-exec-recursive \ +#>- install-html-recursive install-info-recursive \ +#>- install-pdf-recursive install-ps-recursive install-recursive \ +#>- installcheck-recursive installdirs-recursive pdf-recursive \ +#>- ps-recursive uninstall-recursive +#>+ 7 +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CONF_FILES = @CONF_FILES@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +GMSGFMT = @GMSGFMT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDECONFIG = @KDECONFIG@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_RPATH = @KDE_RPATH@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPSUBDIRS = @TOPSUBDIRS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +X_RPATH = @X_RPATH@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +#>- bindir = @bindir@ +#>+ 2 +DEPDIR = .deps +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libs_htmldir = @kde_libs_htmldir@ +kde_libs_prefix = @kde_libs_prefix@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +tdeinitdir = @tdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ +KDE_LANG = da +#>- SUBDIRS = $(AUTODIRS) +#>+ 1 +SUBDIRS =. kde_app_devel tdevelop kdearch +KDE_DOCS = AUTO +KDE_MANS = AUTO +#>- all: all-recursive +#>+ 1 +all: docs-am all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdevelop/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu docs/tdevelop/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdevelop/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdevelop/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdevelop/Makefile.in +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +#>- clean: clean-recursive +#>+ 1 +clean: kde-rpo-clean clean-recursive + +#>- clean-am: clean-generic mostlyclean-am +#>+ 1 +clean-am: clean-bcheck clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +#>+ 2 +KDE_DIST=Makefile.in Makefile.am + +#>+ 2 +docs-am: + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdevelop/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdevelop/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdevelop/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-recursive + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/tde-i18n-da/docs/tdevelop/kde_app_devel/Makefile.am b/tde-i18n-da/docs/tdevelop/kde_app_devel/Makefile.am new file mode 100644 index 00000000000..29f2e0115ae --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/kde_app_devel/Makefile.am @@ -0,0 +1,4 @@ +KDE_LANG = da +SUBDIRS = $(AUTODIRS) +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/tde-i18n-da/docs/tdevelop/kde_app_devel/Makefile.in b/tde-i18n-da/docs/tdevelop/kde_app_devel/Makefile.in new file mode 100644 index 00000000000..60aa9682938 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/kde_app_devel/Makefile.in @@ -0,0 +1,635 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = docs/tdevelop/kde_app_devel +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +#>- html-recursive info-recursive install-data-recursive \ +#>- install-dvi-recursive install-exec-recursive \ +#>- install-html-recursive install-info-recursive \ +#>- install-pdf-recursive install-ps-recursive install-recursive \ +#>- installcheck-recursive installdirs-recursive pdf-recursive \ +#>- ps-recursive uninstall-recursive +#>+ 7 +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CONF_FILES = @CONF_FILES@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +GMSGFMT = @GMSGFMT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDECONFIG = @KDECONFIG@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_RPATH = @KDE_RPATH@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPSUBDIRS = @TOPSUBDIRS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +X_RPATH = @X_RPATH@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +#>- bindir = @bindir@ +#>+ 2 +DEPDIR = .deps +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libs_htmldir = @kde_libs_htmldir@ +kde_libs_prefix = @kde_libs_prefix@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +tdeinitdir = @tdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ +KDE_LANG = da +#>- SUBDIRS = $(AUTODIRS) +#>+ 1 +SUBDIRS =. +KDE_DOCS = AUTO +KDE_MANS = AUTO +#>- all: all-recursive +#>+ 1 +all: docs-am all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdevelop/kde_app_devel/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu docs/tdevelop/kde_app_devel/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdevelop/kde_app_devel/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdevelop/kde_app_devel/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdevelop/kde_app_devel/Makefile.in +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +#>- distdir: $(DISTFILES) +#>+ 1 +distdir: distdir-nls $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +#>- uninstall: uninstall-recursive +#>+ 1 +uninstall: uninstall-docs uninstall-nls uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +#>- clean: clean-recursive +#>+ 1 +clean: kde-rpo-clean clean-recursive + +#>- clean-am: clean-generic mostlyclean-am +#>+ 1 +clean-am: clean-docs clean-bcheck clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +#>- install-data-am: +#>+ 1 +install-data-am: install-docs install-nls + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +#>+ 2 +KDE_DIST=index.docbook index.cache.bz2 Makefile.in Makefile.am + +#>+ 24 +index.cache.bz2: $(srcdir)/index.docbook $(KDE_XSL_STYLESHEET) index.docbook + @if test -n "$(MEINPROC)"; then echo $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; fi + +docs-am: index.cache.bz2 + +install-docs: docs-am install-nls + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kde_app_devel + @if test -f index.cache.bz2; then \ + echo $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kde_app_devel/; \ + $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kde_app_devel/; \ + elif test -f $(srcdir)/index.cache.bz2; then \ + echo $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kde_app_devel/; \ + $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kde_app_devel/; \ + fi + -rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kde_app_devel/common + $(LN_S) $(kde_libs_htmldir)/$(KDE_LANG)/common $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kde_app_devel/common + +uninstall-docs: + -rm -rf $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kde_app_devel + +clean-docs: + -rm -f index.cache.bz2 + + +#>+ 13 +install-nls: + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kde_app_devel + @for base in index.docbook ; do \ + echo $(INSTALL_DATA) $$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kde_app_devel/$$base ;\ + $(INSTALL_DATA) $(srcdir)/$$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kde_app_devel/$$base ;\ + done + +uninstall-nls: + for base in index.docbook ; do \ + rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kde_app_devel/$$base ;\ + done + + +#>+ 5 +distdir-nls: + for file in index.docbook ; do \ + cp $(srcdir)/$$file $(distdir); \ + done + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdevelop/kde_app_devel/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdevelop/kde_app_devel/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdevelop/kde_app_devel/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-recursive + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/tde-i18n-da/docs/tdevelop/kde_app_devel/index.cache.bz2 b/tde-i18n-da/docs/tdevelop/kde_app_devel/index.cache.bz2 Binary files differnew file mode 100644 index 00000000000..f066d9032fb --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/kde_app_devel/index.cache.bz2 diff --git a/tde-i18n-da/docs/tdevelop/kde_app_devel/index.docbook b/tde-i18n-da/docs/tdevelop/kde_app_devel/index.docbook new file mode 100644 index 00000000000..261eddd3006 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/kde_app_devel/index.docbook @@ -0,0 +1,1870 @@ +<?xml version="1.0" ?> +<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [ + <!ENTITY tdevelop "<application +>KDevelop</application +>"> + <!ENTITY kappname "&tdevelop;"> + <!ENTITY % addindex "INCLUDE"> + <!ENTITY % Danish "INCLUDE" +> <!-- change language only here --> +]> + +<book lang="&language;"> + +<bookinfo> +<title +>&tdevelop; programmeringshåndbog</title> + +<date +>2002-12-05</date> +<releaseinfo +>2.0</releaseinfo> + +<authorgroup> +<author +><firstname +>Ralf</firstname +> <surname +>Nolden</surname +> <affiliation +><address +><email +>[email protected]</email +></address +></affiliation> +</author> +<author +><firstname +>Caleb</firstname +> <surname +>Tennis</surname +> <affiliation +><address +><email +>[email protected]</email +></address +></affiliation> +</author> +</authorgroup> + +<copyright> +<year +>1999</year> +<holder +>Ralf Nolden</holder> +</copyright> +<copyright> +<year +>2002</year> +<holder +>Caleb Tennis</holder> +</copyright> + +<!-- ROLES_OF_TRANSLATORS --> + +<legalnotice +>&FDLNotice;</legalnotice> + +<abstract> +<para +>Brugerguide til C++ programudvikling for K-desktopmiljøet (KDE) med det integrerede udviklingsmiljø &tdevelop;</para> +</abstract> + +<keywordset> +<keyword +>KDE</keyword> +<keyword +>KDevelop</keyword> +<keyword +>IDE</keyword> +<keyword +>udvikling</keyword> +<keyword +>programmering</keyword> +</keywordset> + +</bookinfo> + +<chapter id="chapter1"> +<title +>Indledning</title> +<para +>Mens Unix-systemer bliver mere og mere populære selv for nybegyndere som arbejder med computere, på grund af deres fordele i form af stabilitet og funktionalitet, bliver de fleste på en måde skuffede, fordi disse programmer ikke har konsistent udseende og hvert af dem opfører sig anderledes. Med KDE har udviklere en næsten perfekt måde at lave førsteklasses programmer for Unix-desktopsystemer, for at få en bredere brugergruppe kun på grund af kvaliteten som programmerne tilbyder. Derfor bliver KDE mere og mere populært som en basis for programkonstruktion, og udviklere vil drage fordel af mulighederne som systemet tilbyder. </para> + +<sect1 id="c1s1"> +<title +>Hvad du allerede bør vide</title> +<para +>For at bruge denne programmeringshåndbog på bedste måde, antager vi at du allerede kender til programmeringssproget C++. Hvis du ikke gør det, bør du gøre dig bekendt med det først. Information om C++ er tilgængelig via forskellige kilder, enten på skriftlig form i den lokale boghandel eller med vejledninger på internettet. Kendskab til konstruktion af grafiske brugergrænseflader kræves ikke, eftersom håndbogen forsøger at dække konstruktion af KDE-programmer, som også omfatter en introduktion til QT-værktøjskassen samt KDE-bibliotekerne og konstruktion af brugergrænseflader. Desuden bør du have gjort dig bekendt med &tdevelop;, ved at læse brugermanualen til &tdevelop;, som indeholder en beskrivende gennemgang af funktionerne som det integrerede udviklingsmiljø sørger for. </para> +</sect1> + +<sect1 id="c1s2"> +<title +>Om denne håndbog</title> +<para +>Denne håndbog er skrevet for at give udviklere en introduktion til udvikling af KDE-programmer ved at bruge det integrerede udviklingsmiljø KDevelop. </para> +<para +>Følgende kapitler giver derfor en introduktion til hvordan projekter laves, forklarer kildekoden som allerede er lavet, og viser hvordan den givne kildekode kan udvides med forskellige funktioner som værktøjslinjer, menulinjer og visningsområder. </para> +<para +>Derefter beskrives dialogeditoren i detalje, det forklares hvordan grafiske komponenter laves og hvordan indstillinger af komponentegenskaber udføres i detalje for alle komponenter som er til stede. </para> +<para +>Endelig vil du lære om flere emner som udvider din kundskab om projektkonstruktion og hjælper dig med at løse yderligere problemer udover kodning, som at tilføje dokumentation om programgrænsefladen og udvide håndbøger. </para> +<sect2 id="c1s2s1"> +<title +>I det næste kapitel</title> +<para +>Vi vil kigge på QT- og KDE-bibliotekerne, vise grundlæggende begreber og hvorfor tingene ser ud som de gør. Desuden beskriver vi hvordan eksempelprogrammerne som kommer med med QT-værktøjskassen laves ved at bruge KDevelop, så nybegyndere allerede kan se de første resultater efter nogle få skridt, og derved lærer sig hvordan nogen af de bedste funktioner i &tdevelop; bruges. </para> +</sect2> + +<sect2 id="c1s2s2"> +<title +>I de følgende kapitler</title> +<para +>Vil du lære hvordan: <itemizedlist> +<listitem +><para +>et program oprettes med programguiden</para +></listitem> +<listitem +><para +>Hvad projektskelettet allerede sørger for</para +></listitem> +<listitem +><para +>Hvad koden som allerede er lavet betyder</para +></listitem> +<listitem +><para +>Hvordan man laver egne visninger</para +></listitem> +<listitem +><para +>Hvordan programmets funktion kan udvides med dialoger, menulinjer og værktøjslinjer</para +></listitem> +<listitem +><para +>Hvordan programmet kan gøres brugervenligt ved at sørge for hjælpefunktioner</para +></listitem> +<listitem +><para +>Hvordan man skriver dokumentation til netbrug</para +></listitem> +</itemizedlist> +</para> +</sect2> + +</sect1> + +<sect1 id="c1s3"> +<title +>Yderligere information</title> +<para +>Yderligere information om QT- og KDE-programmering er tilgængelig fra forskellige kilder: <itemizedlist> +<listitem +><para +>Programming with Qt af Matthias Kalle Dalheimer</para +></listitem> +<listitem +><para +><ulink url="www.tdevelop.org" +>KDevelop's brugermanual, som kommer med udviklingsmiljøet KDevelop</ulink +></para +></listitem> +<listitem +><para +><ulink url="doc.trolltech.com" +>Online-referencen til QT-biblioteket</ulink +></para +></listitem> +<listitem +><para +><ulink url="developer.kde.org" +>KDE's hjemmeside for udviklere</ulink +></para +></listitem> +</itemizedlist> +</para> +<para +>Desuden bør du søge hjælp ved at abonnere på de forskellige e-mail-lister, hvis adresser er tilgængelige på ovennævnte netsider, og på diskussionsgrupper i Usenet beregnet til brug for KDE og Unix-systemer samt programmeringssprogene C og C++. </para> +<para +>For at få hjælp til det integrerede udviklingsmiljøet KDevelop, kan du sende spørgsmål til vores e-mail-liste på <email +>[email protected]</email +>. Husk at KDevelop-gruppen er interesseret i at tilbyde dig muligheder for at lave programmer, og derfor ikke er beregnet til at være en teknisk støttegruppe ifald de programmer du udvikler ikke virker på grund af implementeringsfejl eller forkert indstilling af operativsystemet. Med dette beder vi alle brugere at drage fordel af e-mail-listen i de tilfælde hvor problemer med brug af selve det integrerede udviklingsmiljø opstår, samt for fejlrapporter og forbedringsforslag af funktionerne i udviklingsmiljøet. </para> +</sect1> + +</chapter> + +<chapter id="chapter2"> +<title +>KDE- og QT-bibliotekerne</title> +<para +>Det norske foretagende TrollTech (<ulink url="http://www.trolltech.com" +>http://www.trolltech.com</ulink +>) sørger for en såkaldt GUI-værktøjskasse, som kaldes QT. GUI betyder "grafisk brugergrænseflade", og derfor vises QT-baserede program med knapper, vinduer osv., hvilket muliggør brugerinput ved at synliggøre funktionerne som et program sørger for. En sådan værktøjskasse behøves for at udvikle grafiske programmer som bruger grænsefladen X-windows på Unix-systemer, eftersom X ikke selv indeholder et fordefineret brugergrænseflade. Selv om andre værktøjspakker også er tilgængelige til at oprette en brugergrænseflade, tilbyder QT nogle tekniske fordele som gør programkonstruktion meget enkel. Desuden er QT-værktøjskassen også tilgængelig på Microsoft Windows-systemer, hvilket gør det muligt for udviklerne at lave deres programmer på begge platformene. </para> +<para +>KDE-gruppen (<ulink url="http://www.kde.org" +>http://www.kde.org</ulink +>) dannedes med det formål at gøre det mere brugervenligt at bruge Unix-systemer, og bestemte at QT-værktøjskassen skulle bruges til udvikling af en vinduehåndtering for X-windows, samt en mængde værktøjer som indgår i KDE-pakken. K-desktopmiljøet indeholder derfor hovedkomponenterne vinduehåndteringen kwm, filhåndteringen kfm og startpanelet kpanel samt en mængde førsteklasses værktøjer og programmer. Efter KDE blev udgivet, kiggede mange udviklere på det nye miljø og hvad det havde at tilbyde. KDE-bibliotekerne sørger for væsentlige metoder og klasser som gør at alle programmer som konstrueres med dem ligner hinanden og opfører sig ens, så brugeren har den store fordel kun at behøve at vænne sig til brugen af et bestemt program, ikke til håndtering af dialoger og knapper. Desuden integreres KDE-programmer med desktoppen, kan virke sammen med filhåndteringen via træk og slip, tilbyder sessionshåndtering, og meget mere hvis alle funktioner som tilbydes af KDE-bibliotekerne bruges. Både QT-værktøjskassen og KDE-bibliotekerne er implementerede med programsproget C++. Derfor er de fleste programmer som benytter sig af bibliotekerne også skrevet i C++. I de følgende kapitel tager vi en kort tur gennem bibliotekerne for at se hvad der allerede sørges for, og hvordan QT- og KDE-programmer i almindelighed laves. </para> +<para +>Både QT-værktøjskassen og KDE-bibliotekerne er implementerede med programsproget C++. Derfor skrives også programmerne som bruger disse biblioteker oftest i C++. I de følgende kapitel tager vi en hurtig tur gennem bibliotekerne for at se hvad der allerede sørges for, og hvordan QT- og KDE-program laves i almindelighed. </para> + +<sect1 id="c2s1"> +<title +>QT-værktøjskassen for grafiske brugergrænseflader</title> +<para +>Som sagt, er QT-biblioteket en værktøjskasse som tilbyder grafiske elementer som bruges til at lave programmer med grafiske grænseflader og behøves for programmering for X-windows. Desuden tilbyder værktøjskassen: <itemizedlist> +<listitem +><para +>Et komplet sæt af klasser og metoder klare til at bruge til og med for programmering som ikke berører grafik</para +></listitem> +<listitem +><para +>En god løsning på brugerkommunikationen med virtuelle metoder og mekanismen med signaler og slot</para +></listitem> +<listitem +><para +>Et sæt fordefinerede grafiske grænsefladeselementer, som kaldes "grafiske kontroller" som kan bruges til at oprette synlige elementer</para +></listitem> +<listitem +><para +>Desuden fuldstændige fordefinerede dialoger som ofte bruges i programmer såsom fremgang- og fildialoger</para +></listitem> +</itemizedlist> +</para> +<para +>Derfor er det meget væsentligt at kende til QT-klasserne, også selvom du kun vil programmere KDE-programmer. For at få et indblik i grundbegreberne for at oprette og kompilere et program med grafisk grænseflade, tager vi først et kig på et eksempelprogram som kun bruger QT. Derefter udvider vi det til et KDE-program. </para> + +<sect2 id="c2s1s1"> +<title +>Det første QT-program</title> +<para +>Som sædvanligt skal programmer i C++ indeholde funktionen <function +>main()</function +>, som er programkørslens startpunkt. Eftersom vi ønsker at programmet skal være synligt som grafik i vinduer og tilbyde kommunikation med brugeren, skal vi først vide hvordan de kan vises for brugeren. Som et eksempel, tager vi et kig på det første eksempel som indgår i QT's referencedokumentation, og forklarer de grundlæggende skridt i kørslen, inklusive hvorfor og hvordan programmets vindue vises: <programlisting +>#include <qapplication.h> +#include <qpushbutton.h> + +int main( int argc, char **argv ) +{ +QApplication a( argc, argv ); + +QPushButton hello( "Hello world!", 0 ); +hello.resize( 100, 30 ); + +a.setMainWidget( &hello ); +hello.show(); +return a.exec(); +} +</programlisting> +</para> +<para +>Dette program tegner blot et vindue som indeholder en knap med "Hello world" som tekst. Som for alle Qt-baserede programmer, skal du først oprette en udgave af klassen <classname +>QApplication</classname +>, som repræsenteres af variablen a. </para> +<para +>Derefter laver programmet en udgave af klassen <classname +>QPushButton</classname +> som hedder hello. Dette bliver til knappen. Konstruktøren i hello tager en streng som parameter, som er indholdet af den synlige kontrol, her knappens tekst. </para> +<para +>Derefter kaldes metoden <methodname +>resize()</methodname +> for knappen hello. Den ændrer komponenternes normalstørrelse (som i dette tilfælde er <classname +>QPushButton</classname +>) som den havde da den oprettedes, til længden 100 billedpunkter og højden 80 billedpunkter. Tilsidst kaldes metoden setMainWidget() og metoden show() for hello. Endelig køres vores QApplication med <methodname +>a.exec()</methodname +>, går ind i hovedbegivenhedsløkken og venter til den skal returnere en heltalsværdi til det omgivende operativsystem for at signalere at programmet er afsluttet. </para> +</sect2> + +<sect2 id="c2s1s2"> +<title +>Referencedokumentation for Qt</title> +<para +>Lad os nu tage et hurtigt kig på referencedokumentationen for QT-biblioteket. For at gøre dette, start &tdevelop; og vælg "Qt" i dokumentationsfanebladets træ. Dokumentationssøgeren åbnes og viser startsiden i QT-referencedokumentationen. Dette er det første sted hvor du kan hente information om QT, dens klasser og tilgængelige funktioner som de sørger for. Desuden er ovenstående program det første som er med i vejledningsafsnittet. For at komme til klasserne vil vi kigge på, <classname +>QApplication</classname +> og <classname +>QPushButton</classname +>, vælg "Alphabetical Class List" og led efter tilsvarende navne. Følg en af dem for at tage en kig på klassedokumentationen. </para> +<para +>Alternativt kan du bruge net-dokumentationen fra TrollTechs <ulink url="doc.trolltech.com" +>QT-dokumentation</ulink +>. </para> +<para +>Du vil se konstruktoren og alle andre metoder som klassen <classname +>QApplication</classname +> sørger for. Hvis du følger et link, får du mere information om brugen og betydningen af metoderne, hvilket er meget nyttigt hvis du sommetider ikke kan indse den rigtige brug eller vil have et eksempel. Dette gælder også dokumentationen af KDE-bibliotekerne, som bruger en lignende slags dokumentation, derfor er dette næsten alt du behøver at vide om at bruge klassereferencer med dokumentationssøgeren. </para> +<sect3 id="c2s1s2s1"> +<title +>Tolkning af eksemplet</title> +<para +>Begyndende fra <classname +>QApplication</classname +>, finder du alle metoder som bruges i vort første eksempel: <itemizedlist> +<listitem +><para +>konstruktoren <methodname +>QApplication()</methodname +></para +></listitem> +<listitem +><para +>metoden <methodname +>setMainWidget()</methodname +></para +></listitem> +<listitem +><para +>metoden <methodname +>exec()</methodname +></para +></listitem> +</itemizedlist> +</para> +<para +>Tolkningen af hvorfor vi bruger disse metoder er meget enkel: <orderedlist> +<listitem +><para +>Opret en instans af klassen <classname +>QApplication</classname +> med konstruktoren, så vi kan bruge elementer for den grafiske grænsefladen som QT sørger for</para +></listitem> +<listitem +><para +>Opret en grafisk komponent som bliver indholdet i vort programvindue</para +></listitem> +<listitem +><para +>Sæt kontrollen som hovedkontrol for en</para +></listitem> +<listitem +><para +>Kør en instans af <classname +>QApplication</classname +></para +></listitem> +</orderedlist +> +</para> +<para +>Det andet objekt i vort program er trykknappen, en instans af klassen <classname +>QPushButton</classname +>. Af de to konstruktorer der er til at oprette klassen, bruger vi den anden. Den tager en tekst, som er tekstindholdet i knappen. Her er det strengen "Hello world!". Derefter kalder vi metoden <methodname +>resize()</methodname +> for at ændre størrelse på knappen ifølge dens indhold. Knappen skal være større for at gøre strengen fuldstændigt synlig. </para> +<para +>Men hvad gælder for metoden <methodname +>show()</methodname +>? Nu mærker du, at som de fleste andre grafiske komponenter, er <classname +>QPushButton</classname +> baseret på enkelt arv. Dokumentationen siger, Arver <classname +>QButton</classname +>. Følg linket til klassen <classname +>QButton</classname +>. Det viser mange andre kontroller som arves af <classname +>QPushButton</classname +>, som vi senere bruger til at forklare signal/slot-mekanismen. Under alle omstændigheder er metoden <methodname +>show()</methodname +> ikke på listen, og derfor skal den være en metode som også sørges for via arv. Klassen som <classname +>QButton</classname +> arver er <classname +>QWidget</classname +>. Følg kun linket igen, så ser du en hel mængde metoder som klassen QWidget sørger for, inklusive metoden <methodname +>show()</methodname +>. Nu forstår vi hvad der blev gjort i eksemplet med knappen: <orderedlist> +<listitem +><para +>Lav en instans af <classname +>QPushButton</classname +>, og brug den anden konstruktor til at angive knappens tekst</para +></listitem> +<listitem +><para +>Ændr størrelsen på kontrollen til dens indhold</para +></listitem> +<listitem +><para +>Sæt kontrollen som hovedkontrol instansen af <classname +>QApplication</classname +></para +></listitem> +<listitem +><para +>Fortæl den grafiske kontrol at den skal vises på skærmen ved at kalde <methodname +>show()</methodname +>, en metode som blev arvet fra <classname +>QWidget</classname +></para +></listitem> +</orderedlist> +</para> +<para +>Efter at have kaldet metoden <methodname +>exec()</methodname +>, er programmet synligt for brugeren, og viser et vindue med knappen "Hello world!". Bemærk at programmer med grafiske grænseflader opfører sig noget anderledes sammenlignet med procedurebaserede program. Det vigtigste er at programmet går ind i en såkaldt "hovedbegivenhedsløkke". Det betyder at programmet skal vente på brugerens handlinger og derefter reagere på dem. Det betyder også, for et QT-program, at programmet skal være i hovedbegivenhedsløkken for at starte begivenhedshåndteringen. Næste afsnit beskriver kortfattet hvad det betyder for programmøren og hvad QT tilbyder for at håndtere begivenheder. </para> +<note +><para +>For brugere som allerede er avancerede: Knappen har ingen overliggende kontrol deklareret i konstruktoren. Derfor er den en topniveaukontrol og kører med en lokal begivenhedsløkke som ikke behøver at vente på hovedbegivenhedsløkken. Se dokumentationen for klassen QWidget og KDE's biblioteksreferenceguide.</para> +</note +> + +</sect3> +</sect2> + +<sect2 id="c2s1s3"> +<title +>Brugerkommandoer</title> +<para +>Efter at have læst foregående afsnit, bør du allerede vide: <itemizedlist> +<listitem +><para +>Hvad QT-biblioteket sørger for for programmer med grafiske grænseflader,</para +></listitem> +<listitem +><para +>Hvordan et program som bruger QT laves, og</para +></listitem> +<listitem +><para +>Hvor og hvordan du finder information om klasser som du vil bruge med dokumentationssøgeren.</para +></listitem> +</itemizedlist +> +</para> +<para +>Nu fortsætter vi med at give programmet "liv" ved at behandle brugerbegivenheder. I almindelighed har brugeren to måder at kommunikere med et program: musen og tastaturet. En grafisk brugergrænseflade skal sørge for metoder for begge måder, som detekterer handlinger og gør noget som reaktion på handlingerne. </para +> +<para +>Vinduesystemet sender derfor alle kommunikationsbegivenheder til det tilsvarende program. <classname +>QApplication</classname +> sender dem derefter til det aktive vindue som en <classname +>QEvent</classname +>, og kontrollerne selv skal bestemme hvad som skal udføres med dem. En kontrol tager imod begivenheden og behandler <methodname +>QWidget::event(QEvent*)</methodname +>, som afgør hvilken begivenhed der er sket og hvordan reaktionen skal være. Metoden <methodname +>event()</methodname +> udfører derfor håndteringen af hovedbegivenheden. Derefter sender metoden <methodname +>event()</methodname +> begivenheden til et såkaldt begivenhedfilter som afgør hvad der sker og hvad der skal udføres med begivenheden. Hvis intet filter signalerer at det er ansvarligt for begivenheden, kaldes speciel begivenhedshåndtering. På den måde kan vi skelne mellem: <itemizedlist> +<listitem +><para +>Tastaturbegivenheder: Tabulator og Shift+Tabulator:</para> +<itemizedlist> +<listitem +><para +><methodname +>virtual void focusInEvent(QFocusEvent *)</methodname +></para +></listitem> +<listitem +><para +><methodname +>virtual void focusOutEvent(QFocusEvent *)</methodname +></para +></listitem> +</itemizedlist> +</listitem> + +<listitem +><para +>Al øvrig tastaturindtastning:</para> +<itemizedlist> +<listitem +><para +><methodname +>virtual void keyPressEvent(QKeyEvent *)</methodname +></para +></listitem> +<listitem +><para +><methodname +>virtual void keyReleaseEvent(QKeyEvent *)</methodname +></para +></listitem> +</itemizedlist> +</listitem> + +<listitem +><para +>Museflytning:</para> +<itemizedlist> +<listitem +><para +><methodname +>virtual void mouseMoveEvent(QMouseEvent *)</methodname +></para +></listitem> +<listitem +><para +><methodname +>virtual void enterEvent(QEvent *)</methodname +></para +></listitem> +<listitem +><para +><methodname +>virtual void leaveEvent(QEvent *)</methodname +></para +></listitem> +</itemizedlist> +</listitem> + +<listitem +><para +>Handlinger med museknapperne</para> +<itemizedlist> +<listitem +><para +><methodname +>virtual void mousePressEvent(QMouseEvent *)</methodname +></para +></listitem> +<listitem +><para +><methodname +>virtual void mouseReleaseEvent(QMouseEvent *)</methodname +></para +></listitem> +<listitem +><para +><methodname +>virtual void mouseDoubleClickEvent(QMouseEvent *)</methodname +></para +></listitem> +</itemizedlist> +</listitem> + +<listitem +><para +>Vinduesbegivenheder som indeholder den grafiske kontrol</para> +<itemizedlist> +<listitem +><para +><methodname +>virtual void moveEvent(QMoveEvent *)</methodname +></para +></listitem> +<listitem +><para +><methodname +>virtual void resizeEvent(QResizeEvent *)</methodname +></para +></listitem> +<listitem +><para +><methodname +>virtual void closeEvent(QCloseEvent *)</methodname +></para +></listitem> +</itemizedlist> +</listitem> + +</itemizedlist> +</para> +<para +>Bemærk at alle begivenhedsfunktioner er virtuelle og protected. Derfor kan du implementere begivenhederne som du behøver i egne kontroller og angive hvordan din kontrol skal reagere. <classname +>QWidget</classname +> indeholder også nogle andre virtuelle metoder som kan være nyttige i dine programmer. Under alle omstændigheder er det nødvendigt at kende <classname +>QWidget</classname +> godt. </para> +</sect2> +<sect2 id="c1s2s4"> +<title +>Interaktion mellem objekt med signaler og slots</title> +<para +>Nu kommer vi til den mest åbenbare fordel ved QT-værktøjskassen: signal/slot-mekanismen. Den tilbyder en meget bekvem og nyttig løsning for kommunikation mellem objekter, som sædvanligvis løses med tilbagekaldsfunktioner i X-windows værktøjskasser. Eftersom kommunikationen kræver strikt programmering og ind imellem gør det meget svært at oprette brugergrænseflader (som beskrevet i QT-dokumentationen og forklaret i Programming with Qt af K. Dalheimer), opfandt TrollTech et nyt system hvor objekter kan sende signaler som kan forbindes til metoder som deklareres som slots. Som programmør af C++, behøver man kun at vide nogen ting om denne mekanisme: <itemizedlist> +<listitem +><para +>klassedeklarationen af en klasse som bruger signaler og slots skal indeholde makroen Q_OBJECT i begyndelsen (uden et semikolon), og skal afledes fra klassen <classname +>QObject</classname +> </para +></listitem> +<listitem +><para +>et signal kan sendes med nøgleordet emit, f.eks. emit signal(parametre);, inde i en hvilken som helst medlemsfunktion i en klasse som tillader brug af signaler og slots </para +></listitem> + +<listitem +><para +>alle signaler som bruges af klasser som ikke arves skal tilføjes i klassedeklarationen i en signalsektion </para +></listitem> +<listitem +><para +>alle metoder som kan forbindes med et signal deklareres i sektioner med det yderligere nøgleord slot, f.eks. public slots: inde i klassedeklarationen </para +></listitem> +<listitem +><para +>metaobjektoversætteren moc skal køres over deklarationsfilen for at ekspandere makroer og oprette implementeringen (som man ikke behøver kende til). Uddatafilerne fra moc kompileres også af C++ oversætteren. </para +></listitem> +</itemizedlist> +</para> +<para +>En anden måde at bruge signaler uden at aflede fra <classname +>QObject</classname +> er at bruge klassen <classname +>QSignal</classname +>. Se referencedokumentationen for mere information og eksempel på brug. Vi antager at du afleder fra <classname +>QObject</classname +> i det følgende. </para> +<para +>På denne måde kan din klasse sende signaler hvor som helst og sørge for slots som signaler kan forbindes til. Ved at bruge et signal, behøver du ikke bryde dig om hvem der modtager det. Du behøver kun at sende signalet, og hvilken slot du end forbinder den til kan reagere når den sendes. Desuden kan en slot bruges som en almindelig metode i implementeringen. </para> +<para +>For nu at forbinde et signal til en slot, skal du bruge metoderne <methodname +>connect()</methodname +> som varetages af <classname +>QObject</classname +> eller, hvis tilgængelige, specielle metoder som objekter sørger for for at angive forbindelsen for et vist signal. </para> + +<sect3 id="c1s2s4s1"> +<title +>Eksempel på brug</title> +<para +>For at forklare hvordan objektinteraktion håndteres, tager vi vort første eksempel igen og udvider det med en enkel forbindelse: <programlisting +>#include <qapplication.h> +#include <qpushbutton.h> + +int main( int argc, char **argv ) +{ +QApplication a( argc, argv ); + +QPushButton hello( "Hello world!" , 0); +hello.resize( 100, 30 ); + +a.setMainWidget( &hello ); + +QObject::connect(&hello, SIGNAL( clicked() ), &a, SLOT( quit() )); + +hello.show(); +return a.exec(); +} +</programlisting> +</para> +<para +>Du mærker at alt du skal tilføje for at give knappen mere kommunikation er metoden <methodname +>connect()</methodname +>: <methodname +>connect (&hello, SIGNAL( clicked() ), &a, SLOT( quit() ))</methodname +>;. Hvad er betydningen nu? Klassedeklarationen af QObject siger følgende om metoden <methodname +>connect()</methodname +>: </para> +<para +><methodname +>bool connect ( const QObject * afsender, const char * signal, const QObject * modtager, const char * medlem ) </methodname +></para> +<para +>Dette betyder at du skal angive en <classname +>QObject</classname +>-instanspeger som er signalets afsender, hvilket betyder at den kan sende signalet, som første parameter. Derefter skal du angive signalet som du vil forbinde til. De to sidste parametre er modtagerobjektet som sørger for en slot, fulgt af medlemsfunktionen som er en virkelig slot som vil køres når signalet sendes. </para> +<para +>Ved at bruge signaler og slots, kan programmets objekter nemt kommunikere med hinanden uden udtrykkeligt at afhænge af typen af modtagarobjektet. Du vil lære mere om hvordan denne mekanisme bruges produktivt senere i håndbogen. Mere information om signal/slot-mekanismen findes også i <ulink url="developer.kde.org/documentation/library/libraryref.html" +>KDE's biblioteksreferenceguide</ulink +> og <ulink url="doc.trolltech.com" +>QT's reference på nettet</ulink +>. </para> +</sect3> +</sect2> +</sect1> + +<sect1 id="c2s3"> +<title +>Hvad KDE sørger for</title> +<sect2 id="c2s3s1"> +<title +>KDE 3.x bibliotekerne</title> +<para +>KDE's hovedbibliotek som bruges til at lave KDE-programmer er: <itemizedlist> +<listitem +><para +>biblioteket tdecore, som indeholder alle klasser som er usynlige elementer til at sørge for programfunktioner </para +></listitem> +<listitem +><para +>biblioteket tdeui, som indeholder elementer i brugergrænsefladen såsom menulinjer, værktøjslinjer, osv. </para +></listitem> +<listitem +><para +>biblioteket kfile, som indeholder filvalgsdialoger </para +></listitem> +</itemizedlist> +</para> +<para +>Desuden tilbyder KDE følgende biblioteker til specialløsninger: <itemizedlist> +<listitem +><para +>biblioteket tdefx, som indeholder pixmaps, billedeffekter og KStyle-udvidelsen af QStyle </para +></listitem> +<listitem +><para +>biblioteket khtml, som indeholder KDE's HTML-komponent </para +></listitem> +<listitem +><para +>biblioteket kjs, som indeholder KDE's understøttelse for Javascript </para +></listitem> +<listitem +><para +>biblioteket kio, som indeholder adgang til netværksfiler på lavt niveau </para +></listitem> +<listitem +><para +>biblioteket kparts, med understøttelse for programmer som kan genbruges, indlejres og udvides </para +></listitem> +</itemizedlist> +</para> +<para +>Derefter tager vi et kig på hvad der behøves for at forvandle vort første QT-program til et KDE-program. </para> +</sect2> +<sect2 id="c2s3s2"> +<title +>Eksempel på et KDE-program</title> +<para +>Du ser i det følgende, at det ikke er meget sværere at skrive et KDE-program end et QT-program. Du skal kun bruge nogle andre klasser for at komme til KDE's funktioner, så er du næsten klar. Vi diskuterer en ændret version af QT-koden ovenfor, som et eksempel: <programlisting +>#include <kapplication.h> +#include <qpushbutton.h> + +int main( int argc, char **argv ) +{ +KApplication a( argc, argv ); + +QPushButton hello( "Hello world!", 0 ); +hello.resize( 100, 30 ); + +a.setTopWidget( &hello ); + +QObject::connect(&hello, SIGNAL( clicked() ), &a, SLOT( quit() )); + +hello.show(); +return a.exec(); +} +</programlisting> +</para +> +<para +>Du ser at vi først har ændret fra <classname +>QApplication</classname +> til <classname +>KApplication</classname +>. Desuden var vi tvunget til at ændre den tidligere brugte metode <methodname +>setMainWidget()</methodname +> til <methodname +>setTopWidget</methodname +> som <classname +>KApplication</classname +> bruger til for at angive hovedkontrollen. Det er alt! Dit første KDE-program er klart. Du behøver kun at fortælle oversætteren hvilken deklarationssøgesti KDE har, og linkeren at den skal linke med tdecore-biblioteket med -ltdecore. </para> +<para +>Eftersom du nu i det mindste ved hvad funktionen <function +>main()</function +> i almindelighed sørger for, og hvordan et program bliver synligt og tillader kommunikation mellem brugere og objekt, fortsætter vi med næste kapitel, hvor vort første program med &tdevelop; laves. Der kan du også prøve alt som tidligere blev nævnt, og se effekterne. </para> +<para +>Hvad du yderligere bør have kigget på hidtil er QT-referencedokumentationen, især klasserne <classname +>QApplication</classname +>, <classname +>QWidget</classname +> og <classname +>QObject</classname +> og tdecore-biblioteksdokumentationen for klassen <classname +>KApplication</classname +>. <ulink url="developer.kde.org/documentation/library/libraryref.html" +>KDE's biblioteksreferenceguide</ulink +> har også en fuldstændig beskrivelse af hvordan konstruktorerne i <classname +>QApplication</classname +> og <classname +>KApplication</classname +> kaldes, inklusive behandling af kommandolinjeflag. </para> +</sect2> +</sect1> + +</chapter> + +<chapter id="chapter3"> +<title +>Lav nye programmer</title> + +<sect1 id="c3s1"> +<title +>Programguiden</title> +<para +>Programguiden i &tdevelop; er beregnet til at lade dig begynde at arbejde med et nyt projekt i &tdevelop;. Derfor laves alle projekter først af guiden, og derefter kan du begynde at bygge dem og udvide det som allerede varetages af kildekodeskelettet. Du kan vælge blandt flere projekttyper ifølge målet med dit projekt: <itemizedlist> +<listitem +><para +>KDE Application Framework: Indeholder kildekode for en fuldstændig rammestruktur til et almindeligt KDE-program </para +></listitem> +<listitem +><para +>QMake project: Laver et programskelet baseret på TrollTechs qmake konfigurationssystem </para +></listitem> +<listitem +><para +>Simple Hello world program: Opretter et C++ terminalbaseret program uden støtte for grafisk grænseflade </para +></listitem> +<listitem +><para +>En mængde andre programskeletter </para +></listitem> +</itemizedlist> +</para> +<para +>I dette kapitel ser vi hvordan Programguiden kan startes, og hvad der skal udføres for at oprette et KDE-programmeringsprojekt. Dette er også det første skridt i opfølgningen hvor vi laver den oprindelige version af vort eksempelprojekt. Skridtene er oftest ens for alle andre projekttyper, men der er måske ikke så mange tilgængelige alternativer. </para> +</sect1> + +<sect1 id="c3s2"> +<title +>Start af programguiden og oprettelse af projekt</title> +<sect2 id="c3s2s1"> +<title +>Start af programguiden og første side</title> +<para +>Åbn &tdevelop; for at begynde med dit KDE-program. Vælg Nyt projekt i projektmenuen. Programguiden starter, og du ser udvalgstræet på første side som indeholder tilgængelige projekttyper som kan laves. Vælg deltræet C++, derefter KDE, og Application framework. </para> +<para +>Vi vil lave programmet KScribble som eksempelprojekt. Indtast det som programmets navn, og ændr eventuelt anden information som behøves længst nede på skærmen. Vælg derefter Næste. <screenshot +><mediaobject +><imageobject> +<imagedata fileref="appwizard.png" format="PNG"/> +</imageobject +><textobject +><phrase +>Programguiden</phrase +></textobject> +</mediaobject +></screenshot> +</para> +</sect2> +<sect2 id="c3s2s2"> +<title +>Versionskontrolinformation</title> +<para +>På denne skærm har du mulighed for at bestemme om projektet skal bruge et versionskontrollsystem som CVS. For vort eksempelprojekt bruger vi ikke versionskontrol, så sørg for at feltet siger Intet, og vælg Næste. </para> +</sect2> +<sect2 id="c3s2s3"> +<title +>Deklarations- og kildekodeskabeloner</title> +<para +>Følgende to sider viser eksempler på sidehoveder som havner øverst i deklarations- og kildekodefilerne som du laver med &tdevelop;. Lad dem blot være som de er for øjeblikket, og vælg Næste og derefter Afslut. Hvis knappen Afslut ikke er aktiveret, har du ikke indstillet alle valgmuligheder rigtigt. Brug knappen Tilbage for at gå tilbage til tidligere sider og ret eventuelle fejl. </para> +</sect2> +<sect2 id="c3s2s4"> +<title +>Afslutning</title> +<para +>Når den er færdig, skal Programguiden lukkes og meddelelsesvinduet skulle dukke op og vise information om aktiviteterne som &tdevelop; for øjeblikket udfører. I slutningen af alle aktiviteter skal du se **** Succes ****. Det betyder at det er lykkedes at lave programmets rammeomgivelser. </para> +</sect2> +</sect1> + +<sect1 id="c3s3"> +<title +>Byg første gang</title> +<para +>Efter at projektet har oprettet, tager vi først en tur gennem kildekoden for at få en almen forståelse for hvordan programmets rammeomgivelser ser ud. Det hjælper os ikke kun med at komme i gang, men vi ved også hvor ændringer skal udføres i senere skridt. </para> +<para +>I dette kapitel gøres antagelsen at du forstår den grundlæggende håndtering af &tdevelop;. Kig i KDevelops håndbog for at finde information hvis du behøver det. </para> +<para +>Håndtering af automake viser projektfilerne som følger: <screenshot +><mediaobject +><imageobject> +<imagedata fileref="kscribblefiles.png" format="PNG"/> +</imageobject +><textobject +><phrase +>Filer i vores projekt</phrase +></textobject> +</mediaobject +></screenshot> +</para> +<para +>Inden vi dukker ned i kildekoden, skal vi lade &tdevelop; bygge og køre vort nye program. For at gøre det, vælges Byg projekt i menuen Byg, eller der trykkes på F8. Udskriftsvinduet åbnes og viser udskrevne meddelelser under kompileringsfasen. <programlisting +>1 cd /home/caleb/kscribble && WANT_AUTOCONF_2_5=1 WANT_AUTOMAKE_1_6=1 gmake k +2 gmake all-recursive +3 gmake[1]: Entering directory `/home/caleb/kscribble' +4 Making all in doc +5 gmake[2]: Entering directory `/home/caleb/kscribble/doc' +6 Making all in . +7 gmake[3]: Entering directory `/home/caleb/kscribble/doc' +8 gmake[3]: Nothing to be done for `all-am'. +9 gmake[3]: Leaving directory `/home/caleb/kscribble/doc' +10 Making all in en +11 gmake[3]: Entering directory `/home/caleb/kscribble/doc/en' +12 /usr/local/kde3/bin/meinproc --check --cache index.cache.bz2 /home/caleb/kscribble/doc/en/index.docbook +13 gmake[3]: Leaving directory `/home/caleb/kscribble/doc/en' +14 gmake[2]: Leaving directory `/home/caleb/kscribble/doc' +15 Making all in po +16 gmake[2]: Entering directory `/home/caleb/kscribble/po' +17 gmake[2]: Nothing to be done for `all'. +18 gmake[2]: Leaving directory `/home/caleb/kscribble/po' +19 Making all in src +20 gmake[2]: Entering directory `/home/caleb/kscribble/src' +21 source='main.cpp' object='main.o' libtool=no \ +22 depfile='.deps/main.Po' tmpdepfile='.deps/main.TPo' \ +23 depmode=gcc3 /bin/sh /home/caleb/kscribble/admin/depcomp \ +24 g++ -DHAVE_CONFIG_H -I. -I/home/caleb/kscribble/src -I.. -I/usr/local/kde3/include + -I/usr/lib/qt/include -I/usr/X11R6/include -DQT_THREAD_SUPPORT -D_REENTRANT -Wnon-virtual-dtor + -Wno-long-long -Wundef -Wall -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings + -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -O2 -fno-exceptions -fno-check-new + -c -o main.o `test -f 'main.cpp' || echo '/home/caleb/kscribble/src/'`main.cpp +25 /usr/lib/qt/bin/moc /home/caleb/kscribble/src/kscribble.h -o kscribble.moc +26 source='kscribble.cpp' object='kscribble.o' libtool=no \ +27 depfile='.deps/kscribble.Po' tmpdepfile='.deps/kscribble.TPo' \ +28 depmode=gcc3 /bin/sh /home/caleb/kscribble/admin/depcomp \ +29 g++ -DHAVE_CONFIG_H -I. -I/home/caleb/kscribble/src -I.. -I/usr/local/kde3/include + -I/usr/lib/qt/include -I/usr/X11R6/include -DQT_THREAD_SUPPORT -D_REENTRANT -Wnon-virtual-dtor + -Wno-long-long -Wundef -Wall -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings + -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -O2 -fno-exceptions -fno-check-new + -c -o kscribble.o `test -f 'kscribble.cpp' || echo '/home/caleb/kscribble/src/'`kscribble.cpp +30 kscribble.cpp: In member function `void KScribble::setupActions()' +31 kscribble.cpp:107: warning: unused variable `KAction*custom' +32 /usr/lib/qt/bin/moc /home/caleb/kscribble/src/kscribbleview.h -o kscribbleview.moc +33 source='kscribbleview.cpp' object='kscribbleview.o' libtool=no \ +34 depfile='.deps/kscribbleview.Po' tmpdepfile='.deps/kscribbleview.TPo' \ +35 depmode=gcc3 /bin/sh /home/caleb/kscribble/admin/depcomp \ +36 g++ -DHAVE_CONFIG_H -I. -I/home/caleb/kscribble/src -I.. -I/usr/local/kde3/include + -I/usr/lib/qt/include -I/usr/X11R6/include -DQT_THREAD_SUPPORT -D_REENTRANT -Wnon-virtual-dtor + -Wno-long-long -Wundef -Wall -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -ansi + -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -O2 -fno-exceptions -fno-check-new -c + -o kscribbleview.o `test -f 'kscribbleview.cpp' || echo '/home/caleb/kscribble/src/'`kscribbleview.cpp +37 kscribbleview.cpp: In member function `void KScribbleView::print(QPainter*, +38 int, int)': +39 kscribbleview.cpp:79: warning: unused parameter `QPainter*p' +40 kscribbleview.cpp:79: warning: unused parameter `int height' +41 kscribbleview.cpp:79: warning: unused parameter `int width' +42 /usr/lib/qt/bin/moc /home/caleb/kscribble/src/pref.h -o pref.moc +43 source='pref.cpp' object='pref.o' libtool=no \ +44 depfile='.deps/pref.Po' tmpdepfile='.deps/pref.TPo' \ +45 depmode=gcc3 /bin/sh /home/caleb/kscribble/admin/depcomp \ +46 g++ -DHAVE_CONFIG_H -I. -I/home/caleb/kscribble/src -I.. -I/usr/local/kde3/include + -I/usr/lib/qt/include -I/usr/X11R6/include -DQT_THREAD_SUPPORT -D_REENTRANT -Wnon-virtual-dtor + -Wno-long-long -Wundef -Wall -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings + -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -O2 -fno-exceptions -fno-check-new + -c -o pref.o `test -f 'pref.cpp' || echo '/home/caleb/kscribble/src/'`pref.cpp +47 /usr/local/kde3/bin/dcopidl /home/caleb/kscribble/src/kscribbleiface.h +> kscribbleiface.kidl || + ( rm -f kscribbleiface.kidl ; /bin/false ) +48 /usr/local/kde3/bin/dcopidl2cpp --c++-suffix cpp --no-signals --no-stub kscribbleiface.kidl +49 source='kscribbleiface_skel.cpp' object='kscribbleiface_skel.o' libtool=no \ +50 depfile='.deps/kscribbleiface_skel.Po' tmpdepfile='.deps/kscribbleiface_skel.TPo' \ +51 depmode=gcc3 /bin/sh /home/caleb/kscribble/admin/depcomp \ +52 g++ -DHAVE_CONFIG_H -I. -I/home/caleb/kscribble/src -I.. -I/usr/local/kde3/include + -I/usr/lib/qt/include -I/usr/X11R6/include -DQT_THREAD_SUPPORT -D_REENTRANT -Wnon-virtual-dtor + -Wno-long-long -Wundef -Wall -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings + -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -O2 -fno-exceptions -fno-check-new + -c -o kscribbleiface_skel.o `test -f 'kscribbleiface_skel.cpp' || + echo '/home/caleb/kscribble/src/'`kscribbleiface_skel.cpp +53 /bin/sh ../libtool --silent --mode=link --tag=CXX g++ -Wnon-virtual-dtor -Wno-long-long -Wundef -Wall + -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -ansi -D_XOPEN_SOURCE=500 + -D_BSD_SOURCE -Wcast-align -Wconversion -O2 -fno-exceptions -fno-check-new -o kscribble -R + /usr/local/kde3/lib -R /usr/lib/qt/lib -R /usr/X11R6/lib -L/usr/X11R6/lib -L/usr/lib/qt/lib + -L/usr/local/kde3/lib main.o kscribble.o kscribbleview.o pref.o kscribbleiface_skel.o -lkio +54 source='kscribble_client.cpp' object='kscribble_client.o' libtool=no \ +55 depfile='.deps/kscribble_client.Po' tmpdepfile='.deps/kscribble_client.TPo' \ +56 depmode=gcc3 /bin/sh /home/caleb/kscribble/admin/depcomp \ +57 g++ -DHAVE_CONFIG_H -I. -I/home/caleb/kscribble/src -I.. -I/usr/local/kde3/include + -I/usr/lib/qt/include -I/usr/X11R6/include -DQT_THREAD_SUPPORT -D_REENTRANT -Wnon-virtual-dtor + -Wno-long-long -Wundef -Wall -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings + -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -O2 -fno-exceptions -fno-check-new + -c -o kscribble_client.o `test -f 'kscribble_client.cpp' || echo + '/home/caleb/kscribble/src/'`kscribble_client.cpp +58 /bin/sh ../libtool --silent --mode=link --tag=CXX g++ -Wnon-virtual-dtor -Wno-long-long -Wundef + -Wall -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -ansi -D_XOPEN_SOURCE=500 + -D_BSD_SOURCE -Wcast-align -Wconversion -O2 -fno-exceptions -fno-check-new -o kscribble_client -R + /usr/local/kde3/lib -R /usr/lib/qt/lib -R /usr/X11R6/lib -L/usr/X11R6/lib -L/usr/lib/qt/lib + -L/usr/local/kde3/lib kscribble_client.o -ltdecore +59 gmake[2]: Leaving directory `/home/caleb/kscribble/src' +60 gmake[2]: Entering directory `/home/caleb/kscribble' +61 gmake[2]: Nothing to be done for `all-am'. +62 gmake[2]: Leaving directory `/home/caleb/kscribble' +63 gmake[1]: Leaving directory `/home/caleb/kscribble' +64 *** Succes *** +</programlisting> +</para> +<para +>Som du kan se, har vi puttet linjenumre foran hver linje som ikke vises i udskriften, men som gør det nemmere at beskrive hvad der sker under bygningen. For det første virker byggeprogrammet rekursivt. Det betyder at det begynder i mappen hvor det startes, først går ned i undermapper, en af gangen, og derefter går tilbage til mappen hvor det startedes, behandler den, og derefter afslutter. </para> +<para +>Den første interessante linje er 24. Bemærk at g++, som er vores C++ oversætter, kaldes af make på denne linje for at kompilere den første kildekodefilen i vores projekt - i dette tilfælde main.cpp. Mange yderligere kommandolinjeflag bruges også med g++ oversætteren. Visse er standard, mens andre kan indstilles via &tdevelop;. </para> +<para +>Inden næste fil (kscribble.cpp, linje 29) kompileres, køres først moc (metaobjektoversætteren) for kscribble.h (linje 25). Det sker fordi KScribble-klasser bruger signaler og slots, så makroen Q_OBJECT skal ekspanderes, og moc gør det for os. Resultatfilen, kscribble.moc, bruges af kscribble.cpp via udsagnet #include i filen. </para> +</sect1> + +<sect1 id="c3s4"> +<title +>Kildekodeskelettet</title> +<para +>For at gøre det klart hvordan et KDE-program virker, skal vi først undersøge kildekodeskelettet, som allerede varetages af programguiden, meget nøjagtigt. Som vi allerede har set, har vi et sæt kildekode- og deklarationsfiler som opbygger den oprindelige programkode og gør den klar til at køre. Derfor er den nemmeste måde at forklare koden at følge implementeringen linje for linje som den behandles under kørsel af programmet til det går ind i hovedbegivenhedsløkken og er klart til at acceptere brugerindput. Derefter kigger vi på funktionerne som muliggør kommunikation med brugeren, og hvordan visse ting fungerer. Dette er formodentlig den bedste måde at forklare rammeomgivelserne, og eftersom det er ens for næsten alle KDE-programmer, gør det at du kan læse kildekode også fra andre projekter. Desuden lærer du dig hvor forskellige dele af koden skal ændres for at få dit program til at opføre sig som det er beregnet til at gøre. </para> + +<sect2 id="c3s4s1"> +<title +>Funktionen main()</title> +<para +>Eftersom programmet begynder at køre ved at gå ind i funktionen <function +>main()</function +>, er det der vi begynder at kigge på koden. Funktionen <function +>main()</function +> i KScribble er implementeret i filen main.cpp, og kan også findes ved at bruge klassesøgeren og vælge mappen "Globale funktioner". <programlisting +>1 int main(int argc, char **argv) +2 { +3 KAboutData about("kscribble", I18N_NOOP("KScribble"), version, description, +4 KAboutData::License_GPL, "(C) 2002 Dit Navn", 0, 0, "[email protected]"); +5 about.addAuthor( "Dit Navn", 0, "[email protected]" ); +6 KCmdLineArgs::init(argc, argv, &about); +7 KCmdLineArgs::addCmdLineOptions(options); +8 KApplication app; +9 +10 // registrer os som en DCOP-klient +11 app.dcopClient()->registerAs(app.name(), false); +12 +13 // se om vi starter med sessionshåndtering +14 if (app.isRestored()) +15 RESTORE(KScribble) +16 else +17 { +18 // ingen session.. start kun som almindeligt +19 KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); +20 if (args->count() == 0) +21 { +22 KScribble *widget = new KScribble; +23 widget->show(); +24 } +25 else +26 { +27 int i = 0; +28 for (; i < args->count(); i++) +29 { +30 KScribble *widget = new KScribble; +31 widget->show(); +32 widget->load(args->url(i)); +33 } +34 } +35 args->clear(); +36 } +37 +38 return app.exec(); +39 } +</programlisting> +</para +> +<para +>Det der først sker nu, er at objektet <classname +>KApplication</classname +> laves som almindeligt, men vi har tilføjet nogle KDE-metoder som angiver information om programmet og forfatteren af programmet. </para> +</sect2> +<sect2> +<title +>Start af brugerprogrammet</title> + +<para +>... (endnu ikke skrevet)</para> + +</sect2> +<sect2> +<title +>Konstruktoren</title> +<para +>Lad os kigge lidt på konstruktoren og se hvordan instansen kaldes <programlisting +>1 KScribble::KScribble() +2 : KMainWindow( 0, "KScribble" ), +3 m_view(new KScribbleView(this)), +4 m_printer(0) +5 { +6 // accepter træk og slip +7 setAcceptDrops(true); +8 +9 // fortæl KMainWindow at det virkelig er hovedkontrollen +10 setCentralWidget(m_view); +11 +12 // indstil derefter vore handlinger +13 setupActions(); +14 +15 // og en statuslinje +16 statusBar()->show(); +17 +18 // tillad visningen at ændre statuslinjen og overskriften +19 connect(m_view, SIGNAL(signalChangeStatusbar(const QString&)), +20 this, SLOT(changeStatusbar(const QString&))); +21 connect(m_view, SIGNAL(signalChangeCaption(const QString&)), +22 this, SLOT(changeCaption(const QString&))); +23 +24 } +</programlisting> +</para> +<para +>Bemærk at <classname +>KScribble</classname +> arver klassen <classname +>KMainWindow</classname +>, en ofte brugt basisklasse for KDE-programmer. Vi initierer en klasse som hedder <classname +>KScribbleView</classname +> som central grafikkomponent, laver en <classname +>KStatusBar</classname +> via metoden <methodname +>statusBar()</methodname +> (på linje 16), og forbinder nogle signaler og slots. </para> +</sect2> +</sect1> +</chapter> + + +<chapter id="chapter4"> +<title +>Konstruktion af programvisning</title> +<sect1 id="c4s1"> +<title +>Indledning</title> +<para +>Når et program med en grafisk grænseflade udvikles, sker hoveddelen af arbejdet ved at sørge for en såkaldt "visning" for programmet. En visning er i almindelighed en grafisk kontrol som viser data i et dokument og sørger for metoder til at manipulere dokumentets indhold. Dette kan udføres af brugeren via de begivenheder som laves via tastaturet og musen. Kompleksere handlinger behandles ofte af værktøjslinjer og menulinjer som kommunikerer med visningen og dokumentet. Statuslinjen sørger så for information om dokumentet, visningen eller programmets status. Som eksempel, kigger vi på hvordan en editor er konstrueret, og hvor hver del kan findes. </para> +<para +>En editor antages i almindelighed at sørge for en grænseflade til at vise og/eller ændre indhold i et tekstdokument for brugeren. Hvis du starter Kate, ser du følgende i den visuelle grænseflade: <itemizedlist> +<listitem +><para +>Menulinjen: sørger for komplekse handlinger samt at åbne, gemme og lukke filer eller afslutte programmet. </para +></listitem> +<listitem +><para +>Værktøjslinjen: tilbyder ikoner som giver hurtigere adgang til de oftest brugte funktioner, </para +></listitem> +<listitem +><para +>Statuslinjen viser status for markørpositionen med nuværende linje og søjle, </para +></listitem> +<listitem +><para +>Visningen i vinduets midte, som viser et dokument og tilbyder en markør forbundet til tastaturet og musen for at håndtere data. </para +></listitem> +</itemizedlist> +</para> +<para +>Nu er det enkelt at forstå at en visning er programmets mest enestående del, og at konstruktionen af visningen bestemmer hvor nyttigt og let at acceptere programmet er. Det betyder at et af de første skridt i udviklingen er at afgøre formålet med programmet og hvilken slags konstruktion af visningen som passer bedst til at lade en hvilken som helst bruger arbejde med programmet, med en minimal anstrengelse for at lære sig hvordan brugergrænsefladen skal håndteres. </para> +<para +>Visninger varetages af QT- og KDE-bibliotekerne for visse formål, såsom tekstredigering og visning af HTML-filer. Vi beskriver visse aspekter af disse her højniveaukontroller i næste afsnit. Men for de fleste programmer skal nye komponenter konstrueres og implementeres. Det er dette som gør at programmøren også bliver en formgiver, og hvor kreativiteten sættes på prøve. Trods dette bør du først forsøge at opnå noget intuitivt. Husk at mange brugere accepterer ikke et program som ikke: <itemizedlist> +<listitem +><para +>har et godt grafisk udseende </para +></listitem> +<listitem +><para +>tilbyder mange funktioner </para +></listitem> +<listitem +><para +>er nemt at håndtere </para +></listitem> +<listitem +><para +>er hurtigt at lære at bruge </para +></listitem> +</itemizedlist> +</para> +<para +>Det behøves ikke at siges at stabilitet er et af hovedmålene med konstruktionen. Ingen kan forhindre fejl, men et minimum kan i det mindste opnås med smarte konstruktionsmål og udbredt brug af objektorienterede konstruktioner. C++ gør det til en fornøjelse at programmere hvis du ved hvordan man udnytter dens muligheder - arv, at skjule information og genbrug af eksisterende kode. </para> +<para +>Når et KDE- eller QT-projekt laves, skal du altid have en visning som arver en QWidget, enten med direkte arv eller fordi en bibliotekskontrol som du vil bruge arver QWidget. Derfor har Programguiden allerede oprettet en visning som er en instans af klassen programnavnView, som allerede arver QWidget. </para> +<para +>Dette kapitel beskriver derfor hvordan bibliotekskontroller bruges til at oprette visninger for KDE- og QT-programmer som laves med &tdevelop;. Derefter kigger vi på bibliotekerne og hvilke slags visninger de allerede tilbyder. </para> +</sect1> +<sect1 id="c4s2"> +<title +>Brug af biblioteksvisninger</title> +<para +>Når programmets konstruktion er sat op, bør du først lede efter eksisterende kode som kan gøre livet meget enklere. En del af dette er at lede efter en grafisk komponent som kan bruges til visningen, eller i det mindste for en del af den, enten direkte eller med arv. KDE- og QT-bibliotekerne indeholder allerede et sæt grafiske komponenter som kan bruges til endemålet. Der er to muligheder at bruge dem: <orderedlist> +<listitem +><para +>Fjern den nye visningsklasse og opret en instans af en bibliotekskontrol, og sæt den så som visningen, </para +></listitem> +<listitem +><para +>Ændr arv for den visningsklasse der sørges for, til klassen for bibliotekskontrollen som skal bruges. </para +></listitem> +</orderedlist> +</para> +<para +>Under alle omstændigheder er det vigtigt at vide at hvis programskelet ikke linkes med biblioteket som indeholder den grafiske kontrol for øjeblikket, kommer linkningen til at mislykkes. Efter du har bestemt dig for at bruge en vis grafisk kontrol, så kig efter biblioteket som skal linkes ind. Åbn derefter "Projekt"->"Projektindstillinger" i menulinjen for &tdevelop;. Gå til siden "Link-indstillinger" og led efter afkrydsningsfelterne som angiver de biblioteker som bruges for øjeblikket. Hvis biblioteket for din kontrol allerede er markeret, kan du lade projektindstillingerne være uforandrede og begynde at gøre de nødvendige ændringer baseret på dit valg. Hvis ikke, og linkindstillingerne tilbyder at tilføje biblioteket med et afkrydsningsfelt, så markér den og tryk på "O.k." for at lukke dialogen igen. I alle andre tilfælde, tilføj biblioteket i redigeringslinjen nedenunder med flaget -l. For biblioteker som dit program skal søge efter inden byggefiler laves af configure-scriptet, tilføjes tilsvarende søgemakro i filen configure.in som findes i projektets rodmappe, og makroen tilføjes på redigeringslinjen. Tænk på at du skal køre "Byg"->"Autoconf og automake" og "Byg"->"Configure" inden byggefilerne indeholder den rigtige ekspansion af biblioteksmakroen. </para> +<para +>Desuden, hvis deklarationsfilerne for biblioteket som skal tilføjes ikke er med i den nuværende deklarationssøgesti (som ses i flaget -I for "make" i udskriftsvinduet), skal du tilføje søgestien i dialogen Projektindstillinger på siden "Oversætterindstillinger" med flaget -I eller i den tilsvarende automake-makro på redigeringslinjen for "Yderligere indstillinger". </para> +<sect2 id="c4s3s1"> +<title +>Visninger i Qt</title> +<para +>Når du kigger på den første side af QT's net-dokumentation, finder du et link til "Widget Screenshots", hvor du kan kigge på hvordan de grafiske kontroller som QT indeholder ser ud. De er parate til at bruge, og kan kombineres til at give komplekse kontroller som kan oprette programvisninger eller dialoger. I det følgende beskriver vi nogle af disse, som er meget nyttigt til at oprette programvisninger, men husk at KDE-bibliotekerne sommetider indeholder andre kontroller med samme formål. Disse diskuteres i næste afsnit. </para> +<para +>Her er nogle vink om hvilken Qt-komponent der kan bruges til hvilket slutmål: <orderedlist> +<listitem +><para +>Hvis visningsområdet ikke er stort nok til at vise alle data, skal brugeren kunne panorere i dokumentet med lister til venstre og længst nede i visningen. QT sørger for klassen <classname +>QScrollView</classname +> for dette, som tilbyder et underliggende område med panoreringsmulighed. Som tidligere forklaret, kan du lade dine egne grafiske kontroller arve <classname +>QScrollView</classname +>, eller bruge en instans for at håndtere dit dokuments visningskomponent. </para +></listitem +> +<listitem +><para +>For at oprette en egen ScrollView, lad komponenten View arve fra <classname +>QWidget</classname +> og tilføj lodrette og vandrette rullebjælker med <classname +>QScrollBars</classname +>. (Dette udføres af KDE's kontrol KHTMLView.) </para +></listitem +> +<listitem +><para +>Til tekstbehandling, bruges <classname +>QTextEdit</classname +>. Denne klasse sørger for en fuldstændig grafisk teksteditorkontrol, som allerede kan klippe, kopiere og indsætte tekst og håndteres af en visning med rullebjælker. </para +></listitem +> +<listitem +><para +>Brug <classname +>QTable</classname +> til at vise data som er arrangeret i en tabel. Eftersom <classname +>QTable</classname +> også håndteres af rullebjælker, tilbyder den en god løsning for programmer med tabelberegninger. </para +></listitem +> +<listitem +><para +>For at vise to forskellige grafiske kontroller eller to instanser af samme kontrol samtidigt, bruges <classname +>QSplitter</classname +>. Den tillader at visninger lægges side ved side med vandrette eller lodrette opdelere. Kmail er et godt eksempel på hvordan det ser ud. Hovedvinduet er opdelt lodret af en opdeler, og det højre vindue er igen opdelt vandret. </para +></listitem +> +<listitem +><para +><classname +>QListView</classname +> viser information i en liste og et træ. Det er nyttigt til at oprette filtræer eller en hvilken som helst anden hierarkisk information som du vil håndtere. </para +></listitem +> +</orderedlist> +</para> +<para +>Du mærker at kun QT tilbyder et helt sæt grafiske kontroller som er klare til brug, så du ikke behøver opfinde nye løsninger hvis de passer til dine behov. Sideeffekten når standardkontroller bruges er at brugere allerede ved hvordan de håndteres, og kun behøver koncentrere sig om de data som vises. </para> +</sect2> +<sect2 id="c4s3s2"> +<title +>Visninger i KDE</title> +<para +>KDE-bibliotekerne blev opfundet for at gøre det nemmere at designe programmer for K-desktopmiljøet og gøre det muligt for dem at have flere funktioner end kun hvad QT tilbyder. Biblioteket tdeui tilbyder: <orderedlist> +<listitem +><para +>KListView: en mere kraftfuld version af <classname +>QListView</classname +> </para +></listitem> +<listitem +><para +>KIconView: en grafisk viser af ikonfiler </para +></listitem> +</orderedlist> +</para> +<para +>Biblioteket khtml sørger på den anden side en fuldstændig HTML-tolkningskomponent, som er klar til brug. Den har allerede rullebjælker, så du behøver ikke engang at håndtere det. En mulig brug kan være at integrere den som en forhåndsvisningskontrol for en HTML-editor. Den bruges af programmer såsom Konqueror til at vise HTML-filer. </para> +</sect2> +</sect1> +<sect1 id="c4s4"> +<title +>Lav egne visninger</title> +<para +>Ikke skrevet endnu </para> +</sect1> +</chapter> + +<chapter id="chapter5"> +<title +>Indstil menulinjer og værktøjslinjer</title> +<sect1 id="c5s1"> +<title +>Indledning</title> +<para +>Menulinjer og værktøjslinjer er nogen af de vigtigste dele af et program til at sørge for metoder at arbejde med en dokumentstruktur. Du bør gøre alle funktioner tilgængelige via menulinjen, som en almen regel. Disse metoder som ikke er tilgængelige på et vist tidspunkt i brugen af programmet bør være deaktiverede. </para> +<para +>Desuden kan et program kun indeholde en menulinje, men flere værktøjslinjer. Værktøjslinjer, på den anden side, bør kun indeholde de oftest brugte kommandoer med ikoner eller sørge for metoder til hurtig adgang som kombinationsfelter til at vælge værdier. </para> +</sect1> +<sect1 id="c5s2"> +<title +>Hvordan virker det?</title> +<para +>Vort program arver klassen <classname +>KMainWindow</classname +> som automatisk håndterer at oprette en menulinje og værktøjslinjer for os. I metoden <methodname +>KScribble::setupActions()</methodname +> er der et kald til <methodname +>KMainWindow::createGUI()</methodname +>. Denne metode indlæser en ressourcefil, i dette tilfælde kscribbleui.rc, for at initiere menuerne ved start. Bemærk at kscribbleui.rc er på listen som en af projektfilerne i Håndtering af automake. Åbnes filen ses dette: <programlisting +>1 <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd"> +2 <kpartgui name="kscribble" version="1"> +3 <MenuBar> +4 <Menu name="custom" +><text +>C&ustom</text> +5 <Action name="custom_action" /> +6 </Menu> +7 </MenuBar> +8 </kpartgui +> +</programlisting> +</para> +<para +>Forklaring ... </para> +<para +>En anden måde at ændre indholdet i menuen og værktøjslinjerne er at manipulere dem direkte via metoderne som der sørges for i deres klasser. Metoden <methodname +>menuBar()</methodname +> returnerer for eksempel kontrollen <classname +>KMenuBar</classname +> som er menulinjen i vort program. Kigger du i dokumentationen for <classname +>KMenuBar</classname +> og klassen den arver <classname +>QMenuBar</classname +>, finder du et stort antal metoder der hedder <methodname +>insertItem()</methodname +>, som lader dig tilføje punkter til menulinjen. </para> +<para +><classname +>KMainWindow</classname +>s metoder <methodname +>statusBar()</methodname +> og <methodname +> toolBar()</methodname +> giver dig også passende grafiske kontroller. </para> +</sect1> +<sect1 id="c5s3"> +<title +>Indstilling af genvejstaster</title> +<para +>Noget meget professionelt som du altid bør tilføje i programmet er genvejstaster. De bruges oftest af erfarne brugere som vil arbejde hurtigt med deres programmer og er villige til at lære sig genveje. KDE-bibliotekerne tilbyder klassen <classname +>KAction</classname +> til dette, som sørger for genvejstaster og adgang til globalt indstillede standardgenveje. </para> +<para +>Normalt bruger kun rammeprogrammer oprettet af &tdevelop; almindelige genvejstaster såsom F1 for at komme til nethjælp, Ctrl+N for Ny fil, osv. </para> +<para +>Hvis programmet indeholder mange genvejstaster bør du gøre dem indstillelige via en indstillingsmenu. Enten kan det kombineres med anden programindstilling i en QWidget eller være alene. KDE-biblioteket sørger allerede for en <classname +>KKeyChooser</classname +> til at bruge i fanebladsdialoger, mens <classname +>KKeyDialog</classname +> sørger for en indstillingsdialog for genvejstaster som er parat til brug. </para> + +</sect1> +</chapter> + +<!-- +<chapter id="chapter6"> +<title +>Other Features</title> +</chapter> + +<chapter id="chapter7"> +<title +>Printing Support</title> +</chapter> +--> +<chapter id="chapter8"> +<title +>Hjælpefunktioner</title> +<sect1 id="c8s1"> +<title +>Indledning</title> +<para +>En meget vigtig del af udviklingsprocessen er at sørge for hjælpefunktioner for brugeren om muligt. De fleste udviklere tenderer at forsinke dette, men du bør huske at en normal bruger ikke nødvendigvis er en Unix-ekspert. Han kommer måske fra den mørke side af programmelbrug som tilbyder alle gode ting som en bruger kan behøve for at indarbejde sig i brugen af et program uden nogensinde at røre ved en håndbog. Derfor sørger KDE- og QT-bibliotekerne for alle muligheder som oftest anses at gøre et program professionelt i den almindelige brugers øjne, med hjælpefunktioner som er klare til brug. Inde i programmet er de:</para> +<itemizedlist> +<listitem +><para +>Værktøjsvink</para +></listitem> +<listitem +><para +>Hjælp i statuslinjen</para +></listitem> +<listitem +><para +>Hvad er dette...? knapper</para +></listitem> +</itemizedlist> +<para +>Desuden bør programmet sørge for en mulighed for at komme til en HTML-baseret håndbog direkte med den almindelige hjælpetast F1. Dette sammenhængsafhængige hjælpesystem sørges der automatisk for via klassen <classname +>KMainWindow</classname +>, også selvom du som forfatter skal sørge for indholdet. </para> +<para +>Eftersom &tdevelop; også tilbyder alle slags hjælp, ligesom KDE-rammeomgivelserne som laves af programguiden allerede indeholder støtte for dette, hjælper dette kapitel dig med at lære dig hvor og hvordan du kan tilføje hjælpefunktioner. </para> +<para +>Under udviklingen af programmet bør du forsøge at være konsekvent i hvad du gør. Derfor bør du udføre nødvendige skridt direkte når du udvider koden. Det forhindrer at du behøver at dykke ned i koden igen for at finde ud af hvad programmet gør eller hvad du havde til hensigt med visse dele af koden. </para> +</sect1> + +<sect1 id="c8s2"> +<title +>Værktøjsvink</title> +<para +>En meget nem måde at sørge for hjælp er værktøjsvink. De er små hjælpemeddelelser som dukker op når brugeren flytter musen hen over en kontrol som sørger for et værktøjsvink, og forsvinder når musen flyttes. Den populæreste brug af værktøjsvink er i værktøjslinjer hvor værktøjsvinkene bør være så små som muligt, eftersom værktøjslinjer kan indstilles til at vise indholdet på forskellige måder: enten vises knappen, knappen med tekst til højre, knappen med tekst nedenfor, eller kun tekst. Denne indstilling bør kunne indstilles af brugeren, men det er ikke helt nødvendigt. Teksten vises alligevel som et værktøjstips, og en værktøjslinje består oftest af knapper og andre grafiske kontroller såsom redigeringsfelter og kombinationsfelter. For en fuldstændig beskrivelse, se klassereferencen for <classname +>KToolBar</classname +>, som findes i tdeui-biblioteket. </para> +<para +>Som et eksempel kigger vi på knappen "Ny fil" i et generelt program: </para> +<para +>Der sørger parten i18n("New File") for meddelelsen i værktøjsvinket. Det omgives af makroen i18n(), som som sørges for af kapp.h, for at oversætte værktøjsvinket til sproget som for øjeblikket er valgt. </para> +<para +>Værktøjsvink kan også tilføjes i hvilken som helst egen grafisk kontrol ved at bruge <classname +>QToolTip</classname +> som QT sørger for. Et eksempel på det ville kunne være: </para> +</sect1> +<sect1 id="c8s3"> +<title +>Udvidelse af statuslinjen</title> +<para +>Eftersom programmer som arver <classname +>KMainWindow</classname +> også indeholder en statuslinje, tilbyder den også et sæt færdige statuslinjemeddelelser for alle menu- og værktøjslinjesobjekter. En hjælpemeddelelse i statuslinjen er en kort meddelelse som udvider betydningen af et værktøjsvink, eller kan ses som en erstatning for et værktøjsvink for et punkt i menulinjen, og vises (som navnet angiver) i statuslinjen når brugeren aktiverer en menu og markerer et menupunkt. </para> +</sect1> +<sect1 id="c8s4"> +<title +>Knappen <guibutton +>Hvad er dette?</guibutton +></title> +<para +>Knappen <guibutton +>Hvad er dette...?</guibutton +> sørger for hjælpevinduer med formålet at give brugeren hjælp med en vis kontrol i visningen som bruges eller et objekt i en værktøjslinje. Den er i værktøjslinjen og aktiveres når brugeren trykker på knappen. Markøren ændres til en pilemarkør med et spørgsmålstegn, præcis som knappen selv ser ud. Derefter kan brugeren klikke på en synlig kontrol og får så et hjælpevindue. Som en øvelse kan du prøve opførslen med knappen <guibutton +>Hvad er dette...?</guibutton +> inde i &tdevelop;. </para> +<para +>For at tilføje "Hvad er dette...?" hjælp til en af dine grafiske kontroller, bruges den statiske metode <methodname +>QWhatsThis::add(QWidget *widget, const QString &text)</methodname +> </para> +</sect1> +</chapter> + +<chapter id="chapter9"> +<title +>Dokumentation</title> +<sect1 id="c9s1"> +<title +>Indledning</title> +<para +>På grund af at projekter ofte mangler et fuldstændigt sæt brugerdokumentation, indeholder alle projekter i &tdevelop; en håndbog oprettet i forvejen. På den måde opfyldes et andet af KDE's mål: At sørge for tilstrækkeligt med nethjælp for at støtte brugere som ikke er bekendte med programmet. Dette kapitel introducerer derfor hvordan dokumentationsskabelone der sørges for kan udvides, og hvad du skal gøre for at brugeren skal få adgang til den. </para> +</sect1> +<sect1 id="c9s2"> +<title +>Brugerdokumentation</title> +<para +>Projektdokumentationen er i projektmappe/doc/en, eller måske en anden mappe hvis engelsk ikke er dit modersmål. Der er en fil, index.docbook, hvor dokumentationen opbevares. Formatet for at redigere filen forklares på <ulink url="http://i18n.kde.org/doc/markup/" +>KDE's netside for dokumentation</ulink +>. </para> +</sect1> +<sect1 id="c9s3"> +<title +>Programdokumentation</title> +<para +>En anden vigtig del af dokumentationen er at inkludere en beskrivende hjælp for klassegrænsefladen. Det lader dig og andre programmører bruge dine klasser ved at læse klassedokumentationen i HTML, som kan laves med KDoc. &tdevelop; understøtter fuldstændigt brug af KDoc til at oprette KDE-biblioteksdokumentation en, rammeomgivelserne for dit program er også allerede dokumenteret. For at arbejde sig ind i koden som der sørges for, er det en god starte at læse netdokumentationen. Det følgende beskriver hvad som skal udføres for at få dokumentation af programmeringsgrænsefladen frem, hvordan &tdevelop; hjælper dig med at tilføje den, og hvilke særlige mærker som KDoc sørger for. </para> +</sect1> +</chapter> + +<chapter id="chapter10"> +<title +>Internationalisering</title> +<sect1 id="c10s1"> +<title +>Indledning</title> +<para +>Internationalisering med i18n er et system som bruges for at tilbyde internationale versioner af et program eller projekt. Det svære ved at skrive programmer er at de kun understøtter sproget som de oprindelig blev lavet med. Dette synliggøres med tekster, menupunkter og lignende. Målet med internationaliseringen er at sørge for programmer og biblioteksfunktioner på brugerens sprog, og på den måde gøre det muligt for brugere som ikke har originalsproget som modersmål at bruge funktionerne som tilbydes og føle sig mere fornøjet og behagelig. </para> +</sect1> +<!-- +<sect1 id="c10s2"> +<title +>How KDE support Internationalization</title> + +</sect1 +> --> +</chapter> +<!-- +<chapter id="chapter11"> +<title +>Finding Errors</title> +</chapter> + +<chapter id="chapter12"> +<title +>Licensing</title> +</chapter> + +<chapter id="chapter13"> +<title +>References</title> +</chapter> +--> +<chapter id="credits"> +<title +>Medvirkende</title> + +<para +>(... endnu ikke skrevet ...) </para> + +<!--CREDITS_FOR_TRANSLATORS--> + +</chapter +> <!-- credits --> + +<appendix id="bibliography"> +<title +>Bibliografi</title> +<bibliography> + +<biblioentry> +<title +><ulink url="info://make/Top" +>GNU Make-manual</ulink +></title> +<authorgroup> +<author +><firstname +>Richard M.</firstname +><surname +>Stallman</surname +></author> +<author +><firstname +>Roland</firstname +><surname +>McGrath</surname +></author> +</authorgroup> +</biblioentry> + +<biblioentry> +<title +><ulink url="info://automake/Top" +>GNU Automake</ulink +></title> +<authorgroup> +<author +><firstname +>David</firstname +><surname +>MacKenzie</surname +></author> +<author +><firstname +>Tom</firstname +><surname +>Tromey</surname +></author> +</authorgroup> +</biblioentry> + +<biblioentry> +<title +><ulink url="info://autoconf/Top" +>GNU Autoconf</ulink +></title> +<authorgroup> +<author +><firstname +>David</firstname +><surname +>MacKenzie</surname +></author> +<author +><firstname +>Ben</firstname +><surname +>Elliston</surname +></author> +</authorgroup> +</biblioentry> + +<biblioentry> +<title +><ulink url="info://gcc/Top" +>Brug af GNU's kompiler-samling</ulink +></title> +<author +><firstname +>Richard M.</firstname +><surname +>Stallman</surname +></author> +</biblioentry> + +<biblioentry> +<title +><ulink url="info://libtool/Top" +>GNU Libtool</ulink +></title> +<authorgroup> +<author +><firstname +>Gordon</firstname +><surname +>Matzigkeit</surname +></author> +<author +><firstname +>Alexandre</firstname +><surname +>Oliva</surname +></author> +<author +><firstname +>Thomas</firstname +><surname +>Tanner</surname +></author> +<author +><firstname +>Gary V.</firstname +><surname +>Vaughan</surname +></author> +</authorgroup> +</biblioentry> + +<biblioentry> +<title +>GNU Autoconf, Automake, og Libtool</title> +<edition +>1st edition</edition> +<pubdate +>October 2000</pubdate> +<authorgroup> +<author +><firstname +>Gary V.</firstname +><surname +>Vaughan</surname +></author> +<author +><firstname +>Ben</firstname +><surname +>Elliston</surname +></author> +<author +><firstname +>Tom</firstname +><surname +>Tromey</surname +></author> +<author +><firstname +>Ian Lance</firstname +><surname +>Taylor</surname +></author> +</authorgroup> +<publisher +><publishername +>New Riders Publishing</publishername +></publisher> +<isbn +>ISBN 1578701902</isbn> +</biblioentry> + + +<biblioentry> +<title +>Advanced Programming in the UNIX(R) Environment</title> +<edition +>1st edition</edition> +<pubdate +>June 1992</pubdate> +<author +><firstname +>W. Richard</firstname +><surname +>Stevens</surname +></author> +<publisher +><publishername +>Addison-Wesley Pub Co</publishername +></publisher> +<isbn +>ISBN 0201563177</isbn> +</biblioentry> + +<biblioentry> +<title +>Thinking in C++, Volume 1: Introduction to Standard C++</title> +<edition +>2nd Edition</edition> +<pubdate +>April 15, 2000</pubdate> +<author +><firstname +>Bruce</firstname +><surname +>Eckel</surname +></author> +<publisher +><publishername +>Prentice Hall</publishername +></publisher> +<isbn +>ISBN 0139798099</isbn> +</biblioentry> + +<biblioentry> +<title +>Åben kilde udvikling med CVS</title> +<edition +>2nd Edition</edition> +<pubdate +>October 12, 2001</pubdate> +<authorgroup> +<author +><firstname +>Karl</firstname +><surname +>Fogel</surname +></author> +<author +><firstname +>Moshe</firstname +><surname +>Bar</surname +></author> +</authorgroup> +<publisher +><publishername +>The Coriolis Group</publishername +></publisher> +<isbn +>ISBN 158880173X</isbn> +</biblioentry> + +<biblioentry> +<title +>Programmering i PHP</title> +<edition +>1st edition</edition> +<pubdate +>March 2002</pubdate> +<authorgroup> +<author +><firstname +>Rasmus</firstname +><surname +>Lerdorf</surname +></author> +<author +><firstname +>Kevin</firstname +><surname +>Tatroe</surname +></author> +</authorgroup> +<publisher +><publishername +>O'Reilly & Associates</publishername +></publisher> +<isbn +>ISBN 1565926102</isbn> +</biblioentry> + +<biblioentry> +<title +>Programmering i Python</title> +<edition +>2nd Edition</edition> +<pubdate +>March 2001</pubdate> +<author +><firstname +>Mark</firstname +><surname +>Lutz</surname +></author> +<publisher +><publishername +>O'Reilly & Associates</publishername +></publisher> +<isbn +>ISBN 0596000855</isbn> +</biblioentry> + +<biblioentry> +<title +>Gui Programmering med Python : Ved brug af Qt værktøjssamlingen</title> +<edition +>Bk&Cd-r edition</edition> +<pubdate +>January 2002</pubdate> +<author +><firstname +>Boudewijn</firstname +><surname +>Rempt</surname +></author> +<publisher +><publishername +>Opendocs Llc</publishername +></publisher> +<isbn +>ISBN 0970033044</isbn> +</biblioentry> + +<biblioentry> +<title +>Programmering i Perl</title> +<subtitle +>Kamelbogen</subtitle> +<edition +>3rd Edition</edition> +<pubdate +>July 2000</pubdate> +<authorgroup> +<author +><firstname +>Larry</firstname +><surname +>Wall</surname +></author> +<author +><firstname +>Tom</firstname +><surname +>Christiansen</surname +></author> +<author +><firstname +>Jon</firstname +><surname +>Orwant</surname +></author> +</authorgroup> +<publisher +><publishername +>O'Reilly & Associates</publishername +></publisher> +<isbn +>ISBN 0596000278</isbn> +</biblioentry> + +<biblioentry> +<title +>At lære Perl</title> +<subtitle +>Lama-bogen</subtitle> +<edition +>3rd Edition</edition> +<pubdate +>July 15, 2001</pubdate> +<authorgroup> +<author +><firstname +>Randal L.</firstname +><surname +>Schwartz</surname +></author> +<author +><firstname +>Tom</firstname +><surname +>Phoenix</surname +></author> +</authorgroup> +<publisher +><publishername +>O'Reilly & Associates</publishername +></publisher> +<isbn +>ISBN 0596001320</isbn> +</biblioentry> + +</bibliography> + +&underFDL; + + +</appendix> + +</book> diff --git a/tde-i18n-da/docs/tdevelop/kdearch/Makefile.am b/tde-i18n-da/docs/tdevelop/kdearch/Makefile.am new file mode 100644 index 00000000000..29f2e0115ae --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/kdearch/Makefile.am @@ -0,0 +1,4 @@ +KDE_LANG = da +SUBDIRS = $(AUTODIRS) +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/tde-i18n-da/docs/tdevelop/kdearch/Makefile.in b/tde-i18n-da/docs/tdevelop/kdearch/Makefile.in new file mode 100644 index 00000000000..87957b3060f --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/kdearch/Makefile.in @@ -0,0 +1,635 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = docs/tdevelop/kdearch +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +#>- html-recursive info-recursive install-data-recursive \ +#>- install-dvi-recursive install-exec-recursive \ +#>- install-html-recursive install-info-recursive \ +#>- install-pdf-recursive install-ps-recursive install-recursive \ +#>- installcheck-recursive installdirs-recursive pdf-recursive \ +#>- ps-recursive uninstall-recursive +#>+ 7 +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CONF_FILES = @CONF_FILES@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +GMSGFMT = @GMSGFMT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDECONFIG = @KDECONFIG@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_RPATH = @KDE_RPATH@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPSUBDIRS = @TOPSUBDIRS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +X_RPATH = @X_RPATH@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +#>- bindir = @bindir@ +#>+ 2 +DEPDIR = .deps +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libs_htmldir = @kde_libs_htmldir@ +kde_libs_prefix = @kde_libs_prefix@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +tdeinitdir = @tdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ +KDE_LANG = da +#>- SUBDIRS = $(AUTODIRS) +#>+ 1 +SUBDIRS =. +KDE_DOCS = AUTO +KDE_MANS = AUTO +#>- all: all-recursive +#>+ 1 +all: docs-am all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdevelop/kdearch/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu docs/tdevelop/kdearch/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdevelop/kdearch/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdevelop/kdearch/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdevelop/kdearch/Makefile.in +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +#>- distdir: $(DISTFILES) +#>+ 1 +distdir: distdir-nls $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +#>- uninstall: uninstall-recursive +#>+ 1 +uninstall: uninstall-docs uninstall-nls uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +#>- clean: clean-recursive +#>+ 1 +clean: kde-rpo-clean clean-recursive + +#>- clean-am: clean-generic mostlyclean-am +#>+ 1 +clean-am: clean-docs clean-bcheck clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +#>- install-data-am: +#>+ 1 +install-data-am: install-docs install-nls + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +#>+ 2 +KDE_DIST=index.docbook index.cache.bz2 Makefile.in Makefile.am + +#>+ 24 +index.cache.bz2: $(srcdir)/index.docbook $(KDE_XSL_STYLESHEET) index.docbook + @if test -n "$(MEINPROC)"; then echo $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; fi + +docs-am: index.cache.bz2 + +install-docs: docs-am install-nls + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kdearch + @if test -f index.cache.bz2; then \ + echo $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kdearch/; \ + $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kdearch/; \ + elif test -f $(srcdir)/index.cache.bz2; then \ + echo $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kdearch/; \ + $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kdearch/; \ + fi + -rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kdearch/common + $(LN_S) $(kde_libs_htmldir)/$(KDE_LANG)/common $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kdearch/common + +uninstall-docs: + -rm -rf $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kdearch + +clean-docs: + -rm -f index.cache.bz2 + + +#>+ 13 +install-nls: + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kdearch + @for base in index.docbook ; do \ + echo $(INSTALL_DATA) $$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kdearch/$$base ;\ + $(INSTALL_DATA) $(srcdir)/$$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kdearch/$$base ;\ + done + +uninstall-nls: + for base in index.docbook ; do \ + rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kdearch/$$base ;\ + done + + +#>+ 5 +distdir-nls: + for file in index.docbook ; do \ + cp $(srcdir)/$$file $(distdir); \ + done + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdevelop/kdearch/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdevelop/kdearch/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdevelop/kdearch/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-recursive + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/tde-i18n-da/docs/tdevelop/kdearch/index.cache.bz2 b/tde-i18n-da/docs/tdevelop/kdearch/index.cache.bz2 Binary files differnew file mode 100644 index 00000000000..e12fad32dfa --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/kdearch/index.cache.bz2 diff --git a/tde-i18n-da/docs/tdevelop/kdearch/index.docbook b/tde-i18n-da/docs/tdevelop/kdearch/index.docbook new file mode 100644 index 00000000000..aa8e16f9a26 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/kdearch/index.docbook @@ -0,0 +1,3680 @@ +<?xml version="1.0" ?> +<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [ + <!ENTITY % addindex "INCLUDE"> + <!ENTITY % Danish "INCLUDE" +> <!-- change language only here --> +]> + +<book lang="&language;"> + +<bookinfo> +<title +>Oversigt over KDE's arkitektur</title> + +<date +></date> +<releaseinfo +></releaseinfo> + +<authorgroup> +<author +><firstname +>Bernd</firstname +> <surname +>Gehrmann</surname +> <affiliation +><address +><email +>[email protected]</email +></address +></affiliation> +</author> +</authorgroup> + +<copyright> +<year +>2001</year> +<year +>2002</year> +<holder +>Bernd Gehrmann</holder> +</copyright> + +<legalnotice +>&FDLNotice;</legalnotice> + +<abstract> +<para +>Denne dokumentation giver en oversigt over KDE-udviklingsmiljøet.</para> +</abstract> + +<keywordset> +<keyword +>KDE</keyword> +<keyword +>arkitektur</keyword> +<keyword +>udvikling</keyword> +<keyword +>programmering</keyword> +</keywordset> + +</bookinfo> + +<chapter id="structure"> +<title +>Biblioteksstruktur</title> + +<simplesect id="structure-byname"> +<title +>Bibliotek ordnede efter navn</title> + +<variablelist> + +<varlistentry> +<term +><ulink url="kdeapi:tdecore/index.html" +>tdecore</ulink +></term> +<listitem +><para +>Biblioteket tdecore er det grundlæggende programskelet for alle KDE-baserede programmer. Det giver adgang til konfigurationssystemet, håndtering af kommandolinjen, indlæsning og håndtering af ikoner, visse særlige slags interproceskommunikation, filhåndtering og diverse andre værktøjer. </para +></listitem> +</varlistentry> + +<varlistentry> +<term +><ulink url="kdeapi:tdeui/index.html" +>tdeui</ulink +></term> +<listitem +><para +>Biblioteket <literal +>tdeui</literal +> sørger for mange grafiske komponenter og standarddialoger som Qt ikke har eller som har flere funktioner end de tilsvarende i Qt. Det indeholder også flere grafiske kontroller som er delklasser af dem i Qt, men er bedre integrerede med KDE-desktoppen derved at de respekterer brugerindstillinger. </para +></listitem> +</varlistentry> + +<varlistentry> +<term +><ulink url="kdeapi:kio/index.html" +>kio</ulink +></term> +<listitem +><para +>Biblioteket <literal +>kio</literal +> indeholder funktioner for asynkron, netværkstransparent I/O og adgang til håndtering af Mime-typer. Det sørger også for KDE's fildialog og dets hjælpeklasser. </para +></listitem> +</varlistentry> + +<varlistentry> +<term +><ulink url="kdeapi:kjs/index.html" +>kjs</ulink +></term> +<listitem +><para +>Biblioteket <literal +>kjs</literal +> sørger for en implementering af Javascript. </para +></listitem> +</varlistentry> + +<varlistentry> +<term +><ulink url="kdeapi:khtml/index.html" +>khtml</ulink +></term> +<listitem +><para +>Biblioteket <literal +>khtml</literal +> indeholder KHTML-delen, en HTML-søgekomponent, DOM-grænseflade og tolk, inklusive grænseflade til Java og Javascript. </para +></listitem> +</varlistentry> + +</variablelist> + +</simplesect> + + +<simplesect id="structure-grouped"> +<title +>Grupperede klasser</title> + +<para +>Centralt programskelet: klasser som næsten alle programmer har brug for. </para> + +<itemizedlist> + +<listitem +><formalpara> +<title +><ulink url="kdeapi:tdecore/KApplication" +>KApplication</ulink +></title> +<para +>Initierer og styrer et KDE-program. </para> +</formalpara +></listitem> + +<listitem +><formalpara> +<title +><ulink url="kdeapi:tdecore/KUniqueApplication" +>KUniqueApplication</ulink +></title> +<para +>Sørger for at kun en instans af et program kan køre samtidigt. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KAboutData" +>KAboutData</ulink +></title> +<para +>Indeholder information for dialogen Om. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KCmdLineArgs" +>KCmdLineArgs</ulink +></title> +<para +>Behandling af kommandolinjeflag. </para> +</formalpara +></listitem> + +</itemizedlist> + +<para +>Konfigurationsindstillinger: adgang til KDE's hierarkiske konfigurationsdatabase, globale indstillinger og programressourcer. </para> + +<itemizedlist> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KConfig" +>KConfig</ulink +></title> +<para +>Giver adgang til KDE's konfigurationsdatabase. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KSimpleConfig" +>KSimpleConfig</ulink +></title> +<para +>Adgang til enkle, ikke-hierarkiske konfigurationsfiler. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KDesktopFile" +>KDesktopFile</ulink +></title> +<para +>Adgang til <literal +>.desktop</literal +>-filer. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KGlobalSettings" +>KGlobalSettings</ulink +></title> +<para +>Bekvem adgang til indstillinger som ikke er programspecifikke. </para> +</formalpara +></listitem> + +</itemizedlist> + +<para +>Fil- og URL-håndtering: afkodning af URL'er, midlertidige filer, osv. </para> + +<itemizedlist> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KURL" +>KURL</ulink +></title> +<para +>Repræsenterer og tolker URL'er. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KTempFile" +>KTempFile</ulink +></title> +<para +>Opretter entydige filer for midlertidig data. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KSaveFile" +>KSaveFile</ulink +></title> +<para +>Tillader at filer gemmes atomisk. </para> +</formalpara +></listitem> + +</itemizedlist> + +<para +>Interproceskommunikation: DCOP-hjælpeklasser og start af underprocesser. </para> + +<itemizedlist> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KProcess" +>KProcess</ulink +></title> +<para +>Starter og styrer underprocesser. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KShellProcess" +>KShellProcess</ulink +></title> +<para +>Starter underprocesser via en skal. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdesu/PtyProcess" +>PtyProcess</ulink +></title> +<para +>Kommunikation med underprocesser via en pseudoterminal. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KIPC" +>KIPC</ulink +></title> +<para +>Enkel IPC-mekanisme som bruger X11-klientmeddelelser. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:dcop/DCOPClient" +>DCOPClient</ulink +></title> +<para +>DCOP-meddelelser. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KDCOPPropertyProxy" +>KDCOPPropertyProxy</ulink +></title> +<para +>En proxyklasse som offentliggør Qt-egenskaber via DCOP. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KDCOPActionProxy" +>KDCOPActionProxy</ulink +></title> +<para +>En proxyklasse som offentliggør en DCOP-grænseflade for handlinger. </para> +</formalpara +></listitem> + +</itemizedlist> + +<para +>Værktøjsklasser: hukommelseshåndtering, regulære udtryk, strenghåndtering, tilfældige tal. </para> + +<itemizedlist> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KRegExp" +>KRegExp</ulink +></title> +<para +>Matchning af POSIX regulære udtryk. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KStringHandler" +>KStringHandler</ulink +></title> +<para +>En overdådig grænseflade for strenghåndtering. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KZoneAllocator" +>KZoneAllocator</ulink +></title> +<para +>Effektiv hukommelsestildeling for store grupper af små objekter. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KRandomSequence" +>KRandomSequence</ulink +></title> +<para +>Opret pseudotilfældige tal. </para> +</formalpara +></listitem> + +</itemizedlist> + +<para +>Genvejstaster: klasser som hjælper med at oprette overensstemmende tastebindninger over hele desktoppen. </para> + +<itemizedlist> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KAccel" +>KAccel</ulink +></title> +<para +>Samling af genvejstaster. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KStdAccel" +>KStdAccel</ulink +></title> +<para +>Let adgang til de almindelige genvejstaster. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KGlobalAccel" +></ulink +></title> +<para +>Samling af genvejstaster som gælder for hele systemet. </para> +</formalpara +></listitem> + +</itemizedlist> + +<para +>Billedbehandling: ikonindlæsning og -håndtering. </para> + +<itemizedlist> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KIconLoader" +>KIconLoader</ulink +></title> +<para +>Indlæser ikoner som passer med temaet. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KIconTheme" +>KIconTheme</ulink +></title> +<para +>Hjælpeklasser for KIconLoader. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KPixmap" +>KPixmap</ulink +></title> +<para +>En pixmap-klasse med udvidede gittermuligheder. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KPixmapEffect" +>KPixmapEffect</ulink +></title> +<para +>Pixmapeffekter såsom toning og mønster. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KPixmapIO" +>KPixmapIO</ulink +></title> +<para +>Hurtig konvertering mellem <classname +>QImage</classname +> og <classname +>QPixmap</classname +>. </para> +</formalpara +></listitem> + +</itemizedlist> + +<para +>Træk og slip: træk objekter for farver og URL'er. </para> + +<itemizedlist> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KURLDrag" +>KURLDrag</ulink +></title> +<para +>Trækobjekt for URL'er. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KColorDrag" +>KColorDrag</ulink +></title> +<para +>Trækobjekt for farver. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KMultipleDrag" +>KMultipleDrag</ulink +></title> +<para +>Tillader at trækobjekter laves ud fra flere andre. </para> +</formalpara +></listitem> + +</itemizedlist> + +<para +>Automatisk komplettering </para> + +<itemizedlist> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KCompletion" +>KCompletion</ulink +></title> +<para +>Generel automatisk komplettering af strenge. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:kio/KURLCompletion" +>KURLCompletion</ulink +></title> +<para +>Automatisk komplettering af URL'er. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:kio/KShellCompletion" +>KShellCompletion</ulink +></title> +<para +>Automatisk komplettering for kørbare programmer. </para> +</formalpara +></listitem> + +</itemizedlist> + +<para +>Grafiske kontroller: klasser for listevisninger, linealer, farvevalg, osv. </para> + +<itemizedlist> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KListView" +>KListView</ulink +></title> +<para +>En version af <classname +>QListView</classname +> som følger KDE's systemindstillinger. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KListView" +>KListBox</ulink +></title> +<para +>En version af <classname +>QListBox</classname +> som følger KDE's systemindstillinger. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KListView" +>KIconView</ulink +></title> +<para +>En version af <classname +>QIconView</classname +> som følger KDE's systemindstillinger. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KListView" +>KLineEdit</ulink +></title> +<para +>En version af <classname +>QLineEdit</classname +> med understøttelse for komplettering. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KComboBox" +>KComboBox</ulink +></title> +<para +>En version af <classname +>QComboBox</classname +> med understøttelse for komplettering. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KFontCombo" +>KFontCombo</ulink +></title> +<para +>Et dropned-felt for at vælge skrifttyper. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KColorCombo" +>KColorCombo</ulink +></title> +<para +>Et dropned-felt til at vælge farver. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KColorButton" +>KColorButton</ulink +></title> +<para +>En knap til at vælge farver. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KURLCombo" +>KURLCombo</ulink +></title> +<para +>Et dropned-felt til at vælge filnavne og URL'er. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:kfile/KURLRequester" +>KURLRequester</ulink +></title> +<para +>En linjeeditor til at vælge filnavne og URL'er. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KRuler" +>KRuler</ulink +></title> +<para +>En linealkontrol. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink +url="kdeapi:tdeui/KAnimWidget" +>KAnimWidget</ulink +></title> +<para +>Animeringer. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KNumInput" +>KNumInput</ulink +></title> +<para +>En kontrol til at indtaste tal. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KPasswordEdit" +>KPasswordEdit</ulink +></title> +<para +>En kontrol til at indtaste kodeord. </para> +</formalpara +></listitem> + +</itemizedlist> + +<para +>Dialoger: dialoger med fuldstændig funktion for valg af filer, farver og skrifttyper. </para> + +<itemizedlist> + +<listitem +><formalpara +><title +><ulink url="kdeapi:kfile/KFileDialog" +>KFileDialog</ulink +></title> +<para +>En dialog til valg af filer. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KColorDialog" +>KColorDialog</ulink +></title> +<para +>En dialog til valg af farver. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KFontDialog" +>KFontDialog</ulink +></title> +<para +>En dialog til valg af skrifttype. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:kfile/KIconDialog" +>KIconDialog</ulink +></title> +<para +>En dialog til valg af ikoner. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KKeyDialog" +>KKeyDialog</ulink +></title> +<para +>En dialog til at redigere tastaturbindinger. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KEditToolBar" +>KEditToolBar</ulink +></title> +<para +>En dialog til at redigere værktøjslinjer. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KTipDialog" +>KTipDialog</ulink +></title> +<para +>En dialog med dagens vink. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KAboutDialog" +>KAboutDialog</ulink +></title> +<para +>En Om-dialog. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KLineEditDlg" +>KLineEditDlg</ulink +></title> +<para +>En enkel dialog til at indtaste tekst. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:kfile/KURLRequesterDlg" +>KURLRequesterDlg</ulink +></title> +<para +>En enkel dialog til at indtaste URL'er. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KMessageBox" +>KMessageBox</ulink +></title> +<para +>En dialog til at meddele fejl og advarsler. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KPasswordDialog" +>KPasswordDialog</ulink +></title> +<para +>En dialog til at indtaste kodeord. </para> +</formalpara +></listitem> + +</itemizedlist> + +<para +>Handlinger og grafisk XML-grænseflade </para> + +<itemizedlist> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KAction" +>KAction</ulink +></title> +<para +>En abstraktion af en handling som kan forbindes til menulinjer og værktøjslinjer. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KActionCollection" +>KActionCollection</ulink +></title> +<para +>En samling handlinger. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdeui/KXMLGUIClient" +>KXMLGUIClient</ulink +></title> +<para +>Et fragment af en grafisk grænseflade som består af en handling og et DOM-træ som svarer til dets plads i det grafiske grænsefladen. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:kparts/KPartManager" +>KPartManager</ulink +></title> +<para +>Håndterer aktivering af klienter til den grafiske XML-grænseflade. </para> +</formalpara +></listitem> + +</itemizedlist> + +<para +>Plugin og komponenter </para> + +<itemizedlist> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KLibrary" +>KLibrary</ulink +></title> +<para +>Repræsenterer et dynamisk indlæst bibliotek. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KLibrary" +>KLibLoader</ulink +></title> +<para +>Indlæsning af delte biblioteker. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:tdecore/KLibFactory" +>KLibFactory</ulink +></title> +<para +>Tilvirkning af objekter for plugin. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:kio/KServiceType" +>KServiceType</ulink +></title> +<para +>Repræsenterer en tjenestetype. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:kio/KService" +>KService</ulink +></title> +<para +>Repræsenterer en tjeneste. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:kio/KMimeType" +>KMimeType</ulink +></title> +<para +>Repræsenterer en Mime-type. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:kio/KServiceTypeProfile" +>KServiceTypeProfile</ulink +></title> +<para +>Brugerindstillinger for tildelinger af Mime-typer. </para> +</formalpara +></listitem> + +<listitem +><formalpara +><title +><ulink url="kdeapi:kio/KServiceTypeProfile" +>KTrader</ulink +></title> +<para +>Forespørgsler om tjenester. </para> +</formalpara +></listitem> + +</itemizedlist> + +</simplesect> + +</chapter> + + + +<chapter id="graphics"> +<title +>Grafik</title> + +<sect1 id="graphics-qpainter"> +<title +>Lavniveaugrafik med QPainter.</title> + +<simplesect id="qpainter-rendering"> +<title +>Optegning med QPainter</title> + +<para +>Qt's lavniveau tegnemodel er baseret på de muligheder som tilbydes af X11 og andre vinduessystemer hvor en version af Qt findes. Men den udvider dem også ved at implementere yderligere funktioner såsom vilkårlige affine transformationer for tekst og billeder. </para> + +<para +>Den centrale grafiske klasse til at tegne todimensionalt med Qt er <ulink url="kdeapi:qt/QPainter" +>QPainter</ulink +>. Den kan tegne på en <ulink url="kdeapi:qt/QPaintDevice" +>QPaintDevice</ulink +>. Der er tre mulige tegneenheder implementerede: En er <ulink url="kdeapi:qt/QWidget" +>QWidget</ulink +>, som repræsenterer en grafisk kontrol på skærmen. Den anden er <ulink url="kdeapi:qt/QPrinter" +>QPrinter</ulink +>, som repræsenterer en printer, og producerer Postscript-udskrift. Den tredje er klassen <ulink url="kdeapi:qt/QPicture" +>QPicture</ulink +>, som indspiller tegnekommandoer og kan gemme dem til disk, og derefter afspille dem. Et muligt lagringsformat for tegnekommandoer er W3C-standarden SVG. </para> + +<para +>Altså er det muligt at genbruge visningskoden som du bruger til for at vise en grafisk kontrol for udskrift, med støtte for samme funktioner. Naturligvis bruges koden i praksis i en noget anderledes sammenhæng. Tegning på en grafisk kontrol gøres næsten kun i metoden paintEvent() i en kontrolklasse. </para> + +<programlisting +>void MinKomponent::paintEvent() +{ + QPainter p(this); + // Indstil + // Brug +} +</programlisting> + +<para +>Når der tegnes på en printer, skal du sikre dig at bruge QPrinter::newPage() for at afslutte en side, og begynde på en ny: noget som ikke er relevant for at tegne grafiske kontroller. Ved udskrift vil du måske også bruge <ulink url="kdeapi:qt/QPaintDeviceMetrics" +>enhedsmetrikker</ulink +> for at beregne koordinater. </para> + +</simplesect> + + +<simplesect id="qpainter-transformations"> +<title +>Transformationer</title> + +<para +>Normalt når QPainter bruges, tegner den i det naturlige koordinatsystemet som bruges af enheden. Det betyder at hvis du tegner en linje med længden 10 enheder, tegnes den som en vandret linje på skærmen med længden 10 billedpunkter. QPainter kan dog bruge vilkårlige affine transformationer før former og kurver rent faktisk toptegnes. En affin transformation overfører x- og y-koordinater lineært til x' og y' som følger: </para> + +<mediaobject> +<imageobject +><imagedata fileref="affine-general.png"/></imageobject> +</mediaobject> + +<para +>QPainter::setWorldMatrix() kan bruges til at angive denne 3x3 matrix i ligningen, som har typen <ulink url="kdeapi:qt/QWMatrix" +>QWMatrix</ulink +>. Normalt er dette identitetsmatricen, dvs. m11 og m22 er et, og de øvrige værdier er nul. Der er basalt set tre forskellige grupper af transformationer: </para> + +<itemizedlist> + +<listitem +><formalpara> +<title +>Translationer</title> +<para +>Disse flytter alle et objekts punkter med en fast værdi i en eller anden retning. En flytningsmatrix kan opnås ved at kalde metoden m.translate(dx, dy) med en QWMatrix. Det svarer til matricen: </para> +</formalpara> + +<mediaobject> +<imageobject +><imagedata fileref="affine-translate.png"/></imageobject> +</mediaobject> + +</listitem> + +<listitem +><formalpara> +<title +>Skalering</title> +<para +>Disse forstørrer eller formindsker et objekts koordinater, og gør det større eller mindre uden at forvrænge det. En skaleringstransformation kan udføres for en QWMatrix ved at kalde m.scale(sx, sy). Det svarer til matricen: </para> +</formalpara> + +<mediaobject> +<imageobject +><imagedata fileref="affine-scale.png"/></imageobject> +</mediaobject> + +<para +>Ved at give en af parametrene en negativ værdi, kan man opnå spejling af koordinatsystemet. </para> + +</listitem> + +<listitem +><formalpara> +<title +>Forskydning</title> +<para +>En forvrængning af koordinatsystemet med to parametre. En forskydningstransformation kan udføres ved at kalde m.shear(sh, sv), hvilket svarer til matricen: </para> +</formalpara> + +<mediaobject> + <imageobject +><imagedata fileref="affine-shear.png"/></imageobject> +</mediaobject> + +</listitem> + +<listitem +><formalpara> +<title +>Rotation</title> +<para +>Dette roterer et objekt. En rotationstransformation kan udføres ved at kalde m.rotate(alfa). Bemærk at vinklen skal angives i grader, ikke som en matematisk vinkel! Tilsvarende matrix er: </para> +</formalpara> + +<mediaobject> +<imageobject +><imagedata fileref="affine-rotate.png"/></imageobject> +</mediaobject> + +<para +>Bemærk at rotation er ækvivalent med en kombination af skalering og forskydning. </para> + +</listitem> + +</itemizedlist> + +<para +>Her er nogle billeder som viser effekten af de grundlæggende transformationer for vores maskot: </para> + +<informaltable frame="none"> +<tgroup cols="3"> +<tbody> +<row> +<entry +><mediaobject> + <imageobject +><imagedata fileref="konqi-normal.png"/></imageobject> +</mediaobject +></entry> +<entry +><mediaobject> + <imageobject +><imagedata fileref="konqi-rotated.png"/></imageobject> +</mediaobject +></entry> +<entry +><mediaobject> + <imageobject +><imagedata fileref="konqi-sheared.png"/></imageobject> +</mediaobject +></entry> +<entry +><mediaobject> + <imageobject +><imagedata fileref="konqi-mirrored.png"/></imageobject> +</mediaobject +></entry> +</row> +<row> +<entry +>a) Normal</entry> +<entry +>b) Roteret 30 grader</entry> +<entry +>c) Forskudt med 0,4</entry> +<entry +>d) Spejlet</entry> +</row> +</tbody> +</tgroup> +</informaltable> + +<para +>Transformationer kan kombineres ved at multiplicere grundlæggende matricer. Bemærk at matrixoperationer ikke i almindelighed kommutative, og derfor afhænger den kombinerede effekt af en sammensætning af rækkefølgen som matricerne multipliceres med. </para> + +</simplesect> + + +<simplesect id="qpainter-strokeattributes"> +<title +>Angiv stregegenskaber</title> + +<para +>Fremvisning af linjer, kurver og polygonkanter kan ændres ved at angive en særlig pen med QPainter::setPen(). Argumentet til denne funktion er et <ulink url="kdeapi:qt/QPen" +>QPen</ulink +>-objekt. Egenskaberne som opbevares i det er en stil, en farve, en sammenføjningsstil og en slutstil. </para> + +<para +>Pennestilen er et medlem af nummereringstypen <ulink url="kdeapi:qt/Qt#PenStyle-enum" +>Qt::PenStyle</ulink +>. og kan have en af følgende værdier: </para> + +<mediaobject> + <imageobject +><imagedata fileref="penstyles.png"/></imageobject> +</mediaobject> + +<para +>Sammenføjningsstilen er et medlem af nummereringstypen <ulink url="kdeapi:qt/Qt#PenJoinStyle-enum" +>Qt::PenJoinStyle</ulink +>. Den angiver hvordan forbindelsen mellem flere linjer som sættes sammen tegnes. Den kan have en af følgende værdier: </para> + +<informaltable frame="none"> +<tgroup cols="3"> +<tbody> +<row> +<entry +><mediaobject> + <imageobject +><imagedata fileref="joinmiter.png"/></imageobject> +</mediaobject +></entry> +<entry +><mediaobject> + <imageobject +><imagedata fileref="joinbevel.png"/></imageobject> +</mediaobject +></entry> +<entry +><mediaobject> + <imageobject +><imagedata fileref="joinround.png"/></imageobject> +</mediaobject +></entry> +</row> +<row> +<entry +>a) MiterJoin</entry> +<entry +>c) BevelJoin</entry> +<entry +>b) RoundJoin</entry> +</row> +</tbody> +</tgroup> +</informaltable> + +<para +>Slutstilen er et medlem af nummereringstypen <ulink url="kdeapi:qt/Qt#PenCapStyle-enum" +>Qt::PenCapStyle</ulink +> og angiver hvordan linjernes endepunkter tegnes. Den antager en værdi fra følgende tabel: </para> + +<informaltable frame="none"> +<tgroup cols="3"> +<tbody> +<row> +<entry +><mediaobject> + <imageobject +><imagedata fileref="capflat.png"/></imageobject> +</mediaobject +></entry> +<entry +><mediaobject> + <imageobject +><imagedata fileref="capsquare.png"/></imageobject> +</mediaobject +></entry> +<entry +><mediaobject> + <imageobject +><imagedata fileref="capround.png"/></imageobject> +</mediaobject +></entry> +</row> +<row> +<entry +>a) FlatCap</entry> +<entry +>b) SquareCap</entry> +<entry +>c) RoundCap</entry> +</row> +</tbody> +</tgroup> +</informaltable> + +</simplesect> + + +<simplesect id="qpainter-fillattributes"> +<title +>Angiv udfyldningsegenskaber</title> + +<para +>Udfyldningsstilen for polygoner, cirkler eller rektangler kan ændres ved at angive en særlig pensel med QPainter::setBrush(). Denne funktions argument er et <ulink url="kdeapi:qt/QBrush" +>QBrush</ulink +>-objekt. Pensler kan laves på fire forskellige måder: </para> + +<itemizedlist> +<listitem> +<para +>QBrush::QBrush(): dette laver en pensel som ikke udfylder former.</para> +</listitem> +<listitem> +<para +>QBrush::QBrush(BrushStyle): dette laver en sort pensel, med et af de fordefinerede mønstre som vises nedenfor.</para> +</listitem> +<listitem> +<para +>QBrush::QBrush(const QColor &, BrushStyle): dette laver en farvet pensel, med et af de fordefinerede mønstre som vises nedenfor.</para> +</listitem> +<listitem> +<para +>QBrush::QBrush(const QColor &, const QPixmap): dette laver en farvet pensel, med det egne mønster som angives som anden parameter.</para> +</listitem> +</itemizedlist> + +<para +>En standardpenselstil fra nummereringstypen <ulink url="kdeapi:qt/Qt#BrushStyle-enum" +>Qt::BrushStyle</ulink +>. Her er et billede af alle fordefinerede mønstre: </para> + +<mediaobject> + <imageobject +><imagedata fileref="brushstyles.png"/></imageobject> +</mediaobject> + +<para +>Yderligere en måde at indstille en pensels opførsel er at bruge funktionen QPainter::setBrushOrigin(). </para> + +</simplesect> + + +<simplesect id="qpainter-color"> +<title +>Farve</title> + +<para +>Farver har betydning både når kurvor tegnes, og når former udfyldes. Farver repræsenteres af klassen <ulink url="kdeapi:qt/QColor" +>QColor</ulink +> i Qt. Qt understøtter ikke avancerede grafikfunktioner såsom ICC-farveprofiler og farvekorrektion. Farver laves oftest ved at angive deres røde, grønne og blå komponenter, eftersom RGB-modellen er måden som billedpunkter sammensættes en billedskærm. </para> + +<para +>Det er også muligt at bruge farvetone, mætning og værdi. Denne HSV-repræsentation er den som bruges i GTK's farvedialog, f.eks. i GIMP. Der svarer farvetonen til en vinkel i farvehjulet, mens farvemætningen svarer til afstanden fra cirklens midte. Værdien vælges med en separat glider. </para> + +</simplesect> + + +<simplesect id="qpainter-paintsettings"> +<title +>Øvrige indstillinger</title> + +<para +>Normalt når du tegner på en tegneenhed, så erstatter billedpunkterne dem som var der tidligere. Det betyder at hvis du udfylder et vist område med rød farve, og derefter udfylder samme område med blå farve, så er kun den blå farven synlig. Qt's billedmodel tillader ikke gennemsigtighed, dvs. en måde at blande forgrunden som tegnes med baggrunden. Der er dog en enkel måde at kombinere baggrund og forgrund med Booleske operationer. Metoden QPainter::setRasterOp() angiver operationen som bruges, som kommer fra nummereringstypen <ulink url="kdeapi:qt/Qt#RasterOp-enum" +>RasterOp</ulink +>. </para> + +<para +>Standardværdien er CopyROP, som ignorerer baggrunden. Et andet populært valg er XorROP. Hvis du tegner en sort linje med denne operationen på et farvet billede, så inverteres området som dækkes. Denne effekt bruges for eksempel til at oprette gummibåndsmarkeringer i billedbehandlingsprogrammer, som er kendte under navnet "vandrende myrer". </para> + +</simplesect> + + +<simplesect id="qpainter-primitives"> +<title +>Tegn grafiske primitiver</title> + +<para +>I det følgende giver vi en liste over de grundlæggende grafiske elementer som understøttes af QPainter. De fleste af dem findes i flere overbelastede versioner som har forskellige antal argumenter. Metoder som håndterer rektangler, har for eksempel oftest en <ulink url="kdeapi:qt/QRect" +>QRect</ulink +> som argument, eller et sæt med fire heltal. </para> + +<itemizedlist> +<listitem> +<para +>Tegn et enkelt punkt: drawPoint().</para> +</listitem> +<listitem> +<para +>Tegn linjer: drawLine(), drawLineSegments() og drawPolyLine().</para> +</listitem> +<listitem> +<para +>Tegn og udfyld rektangler: drawRect(), drawRoundRect(), fillRect() og eraseRect().</para> +</listitem> +<listitem> +<para +>Tegn og udfyld i cirkler, ellipser og dele af dem: drawEllipse(), drawArc(), drawPie og drawChord().</para> +</listitem> +<listitem> +<para +>Tegn og udfyld generelle polygoner: drawPolygon().</para> +</listitem> +<listitem> +<para +>Tegn Bezierkurvor: drawQuadBezier() [drawCubicBezier i Qt 3.0].</para> +</listitem> +</itemizedlist> + +</simplesect> + + +<simplesect id="qpainter-pixmaps"> +<title +>Tegn pixmaps og billeder</title> + +<para +>Qt sørger for to meget forskellige klasser til at repræsentere billeder. </para> + +<para +><ulink url="kdeapi:qt/QPixmap" +>QPixmap</ulink +> svarer direkte til pixmapsobjekter i X11. En pixmap er et objekt på serversiden og kan, med et moderne grafikkort, til og med opbevares direkte i kortets hukommelse. Det gør det <emphasis +>meget</emphasis +> effektivt at overføre en pixmap til skærmen. En pixmap virker også som en svarende til grafiske kontroller udenfor skærmen. QPixmap-klassen er en delklasse til QPaintDevice, så det er muligt at tegne på den med en QPainter. Elementære tegneoperationer accelereres ofte af moderne grafik. Derfor er et almindeligt brugsmønster at bruge en pixmap til dobbeltbuffering. Dette betyder at i stedet for at tegne direkte på en grafisk kontrol, tegner man på et tilfældigt pixmapobjekt og bruger funktionen <ulink url="kdeapi:qt/QPaintDevice#bitBlt-1" +>bitBlt</ulink +> til at overføre det til kontrollen. For komplekse gentegninger, hjælper dette med at undgå flimmer. </para> + +<para +>I modsætning til dette, er der <ulink url="kdeapi:qt/QImage" +>QImage</ulink +>-objekter på klientsiden. Deres hovedopgave er at give direkte adgang til billedpunkterne i billederne. Det gør dem nyttige til billedhåndtering, og ting såsom at indlæse og gemme til disk (Metoden load() for QPixmap bruger QImage som et mellemtrin). På den anden siden, så bliver optegning af et billede på en grafisk kontrol en ganske krævende handling, eftersom det indebærer en overførsel til X-serveren, hvilket kan tage en vis tid, især for store billeder og fjernservere. Afhængig af farvedybden, kan konvertering fra QImage til QPixmap også kræve brug af dithering. </para> + +</simplesect> + + +<simplesect id="qpainter-drawingtext"> +<title +>Tegn tekst</title> + +<para +>Tekst kan tegnes med en af de overbelastede varianter af metoden QPainter::drawText(). Disse tegner en QString, enten ved et given punkt eller inde i en given rektangel, med skrifttypen som indstilles med QPainter::setFont(). Der er også en parameter som tager en ELLER-kombination af visse flag fra nummereringstyperne <ulink url="kdeapi:qt/Qt#AlignmentFlags-enum" +>Qt::AlignmentFlags</ulink +> og <ulink url="kdeapi:qt/Qt#TextFlags-enum" +>Qt::TextFlags</ulink +>. </para> + +<para +>Begyndende i version 3.0, håndterer Qt fuldstændig tekstlayout også for sprog som skrives fra højre til venstre. </para> + +<para +>En mere avanceret måde at vise opmarkeret tekst, er klassen <ulink url="kdeapi:qt/QSimpleRichText" +>QSimpleRichText</ulink +>. Objekter fra klassen kan laves med et tekststykke som bruger en delmængde af HTML-mærkerne, som er ganske omfattende og til og med tilbyder tabeller. Tekststilen kan indstilles ved at bruge <ulink url="kdeapi/qt/QStyleSheet" +>QStyleSheet</ulink +> (mærkernes dokumentation findes også her). Så snart tekstobjektet er lavet, kan det tegnes op på en grafisk kontrol eller en anden tegneenhed med metoden QSimpleRichText::draw(). </para> + +</simplesect> + +</sect1> + + +<sect1 id="graphics-qcanvas"> +<title +>Struktureret grafik med QCanvas</title> + +<para +>QPainter tilbyder en kraftfuld tegnemodel til at tegne på grafiske kontroller og pixmaps. Den kan dog være omstændelig at bruge. Hver gang kontrollen modtager en tegnebegivenhed, skal den analysere QPaintEvent::region() eller QPaintEvent::rect() for det som skal tegnes om. Derefter skal den indstille en QPainter, og tegne alle objekter som overlapper dette område. Tænk for eksempel på et vektortegneprogram som tillader at objekter såsom polygoner, cirkler og grupper af dem at trækkes omkring. Hver gang objekterne flyttes en lille smule, aktiverer kontrolles musebegivenhedshåndtering en tegnebegivenhed for hele området som dækkes af objekternes gamle sted og deres nye sted. At regne de nødvendige omtegninger ud, og at udføre dem på en effektiv måde, kan være svært, og kan også være i konflikt med programkodens objektorienterede struktur. </para> + +<para +>Som et alternativ indeholder Qt klassen <ulink url="kdeapi:qt/QCanvas" +>QCanvas</ulink +>, hvor man tilføjer grafiske objekter, såsom polygoner, tekst eller pixmaps. Man kan også oprette yderligere objekter ved at oprette en delklasse af <ulink url="kdeapi:qt/QCanvasItem" +>QCanvasItem</ulink +> eller en af dens mere specialiserede delklasser. En dug kan vises på skærmen ved en eller flere kontroller fra klassen <ulink url="kdeapi:qt/QCanvas" +>QCanvasView</ulink +>, som man skal oprette en delklasse af for at håndtere interaktion med brugeren. Qt sørger for al omtegning af objekter i visningen, det være sig de forårsages af at kontrollen vises, nye objekter laves eller ændres, eller andre grunde. Ved at bruge dobbeltbuffering, kan dette gøres på en effektiv og flimmerfri måde. </para> + +<para +>Objekter på dugen kan overlappe hinanden. I dette tilfælde, så afhænger det der ses af z-rækkefølgen, som kan tildeles med QCanvasItem::setZ(). Objekter kan også gøres synlige eller usynlige. Man kan også sørge for en baggrund som skal tegnes "bagved" alle objekter, og en forgrund. For at associere musebegivenheder med objekter på dugen, findes metoden QCanvas::collisions(), som returnerer en liste med objekter som overlappar med et givet punkt. Her viser vi et skærmaftryk af en dugvisning i arbejde: </para> + +<mediaobject> +<imageobject +><imagedata fileref="canvas.png"/></imageobject> +</mediaobject> + +<para +>Her optegnes rudemønstret i baggrunden. Desuden findes et QCanvasText-objekt og en violet QCanvasPolygon. Sommerfuglen er en QCanvasPixmap. Den har gennemsigtige områder, så du kan se underliggende objekt gennem den. </para> + +<para +>En vejledning om hvordan QCanvas bruges til at skrive spil baserede på småfigurer findes <ulink url="http://zez.org/article/articleview/2/1/" +>her</ulink +>. </para> + +</sect1> + + +<sect1 id="graphics-qglwidget"> +<title +>3D-grafik med OpenGL</title> + +<simplesect id="qglwidget-lowlevel"> +<title +>Lavniveaugrænseflade</title> + +<para +>De-facto standarden for at optegne 3D-grafik nu for tiden er <ulink url="http://www.opengl.org" +>OpenGL</ulink +>. Implementeringer af standarden levereres med Microsoft Windows, Mac OS X og XFree86, og de understøtter ofte funktioner for hardwareacceleration som tilbydes af moderne grafikkort. OpenGL selv håndterer kun optegning på et angivet område i rammebufferen gennem en <emphasis +>GL-sammenhæng</emphasis +>, og har ingen interaktion med værktøjskassen eller miljøet. </para> + +<para +>Qt tilbyder den grafiske komponent <ulink url="kdeapi:qt/QGLWidget" +>QGLWidget</ulink +>, som indkapsler et vindue med tilhørende GL-sammenhæng. Egentlig bruges det ved at oprette en delklasse af det og omimplementere nogle metoder. </para> + +<itemizedlist> + +<listitem +><para +>I stedet for at implementere paintEvent(), og bruge QPainter til at tegne kontrollens indhold, overskrider man paintGL() og bruger GL-kommandoer til at optegne en scene. QGLWidget tager sig af at gøre sin GL-sammenhæng til den aktuelle inden paintGL() kaldes, og tømmer den bagefter. </para +></listitem> + +<listitem +><para +>Den virtuelle metode initializeGL() kaldes en gang inden den første gang inden resizeGL() eller paintGL() kaldes. Dette kan bruges til at oprette visningslister for objekter, og udføre alle initieringer. </para +></listitem> + +<listitem +><para +>I stedet for at omimplementere resizeEvent(), overskrider man resizeGL(). Dette kan bruges til at indstille visningsområdet på en passende måde. </para +></listitem> + +<listitem +><para +>I stedet for at kalde update() når scenens tilstand er ændret, for eksempel hvis du animerer den med et ur, skal man kalde updateGL(). Dette aktiverer en omtegning. </para +></listitem> + +</itemizedlist> + +<para +>I almindelighed opfører QGLWidget sig som en hvilken som helst anden grafisk kontrol, dvs. man kan for eksempel håndtere musebegivenheder som sædvanligt, ændre størrelse på kontrollen og kombinere den med andre i et layout. </para> + +<mediaobject> +<imageobject +><imagedata fileref="opengl.png"/></imageobject> +</mediaobject> + +<para +>Qt indeholder nogle eksempler på brug af QGLWidget i <literal +>demo</literal +>-eksemplerne. En samling vejledninger findes <ulink url="http://www.libsdl.org/opengl/intro.html" +>her</ulink +>, og mere information samt en OpenGL-reference findes på <ulink url="http://www.opengl.org" +>OpenGL's hjemmeside</ulink +>. </para> + +</simplesect> + + +<simplesect id="qglwidget-highlevel"> +<title +>Højniveau-grænseflade</title> + +<para +>OpenGL er en grænseflade på ganske lavt niveau for at tegne 3D-grafik. På samme måde som QCanvas giver programmøren en grænseflade på højere niveau som håndterer objekter og deres egenskaber, er der også grænseflade på højere niveau for 3D-grafik. En af de mest populære er Open Inventor. Oprindelig var det en teknologi som udvikledes af SGI, men i dag er der også en implementering med åben kildekode, <ulink url="http://www.coin3d.org" +>Coin</ulink +>, som komplementeres af en værktøjsbinding til Qt, som hedder SoQt. </para> + +<para +>Det grundlæggende begreb i Open Inventor er en <emphasis +>scene</emphasis +>. En scene kan indlæses fra disken, og gemmes i et særligt format, nært beslægtet med <ulink url="http://www.vrml.org" +>VRML</ulink +>. En scene består af en samling objekter som kaldes <emphasis +>knuder</emphasis +>. Inventor sørger allerede for en omfattende samling med genbrugelige knuder, såsom kuber, cylindre og gitre. Desuden er der lyskilder, materiale, kameraer, osv. Knuder repræsenteres af C++ klasser, og kan kombineres og delklasser kan laves. </para> + +<para +>En introduktion til Inventor findes <ulink url="http://www.motifzone.com/tmd/articles/OpenInventor/OpenInventor.html" +>her</ulink +> (du kan generelt erstatte alle SoXt som nævnes i artiklen med SoQt). </para> + +</simplesect> + +</sect1> + +</chapter> + + + +<chapter id="userinterface"> +<title +>Brugergrænseflade</title> + +<sect1 id="userinterface-actionpattern"> +<title +>Handlingsmønstret</title> + +<para +></para> + +</sect1> + + +<sect1 id="userinterface-xmlgui"> +<title +>Definition af menuer og værktøjslinjer i XML</title> + +<simplesect id="xmlgui-intro"> +<title +>Indledning</title> + +<para +>Mens <link linkend="userinterface-actionpattern" +>handlingsmønstret</link +> tillader at handlinger som aktiveres af brugeren kapsles ind i et objekt, som kan "forbindes" til et sted i menulinjerne eller værktøjslinjerne, løser det ikke i sig selv problemet med at oprette selve menuerne. I særdeleshed skal du bygge alle sammenhængsafhængige menuer i C++ kode, og udtrykkelig indsætte handlingerne i en vis rækkefølge, med hensyn taget til stilguiden for standardhandlinger. Det gør det rigtigt svært at lade brugeren indstille menuerne eller ændre genvejstaster så de passer til hans behov, uden at ændre kildekoden. </para> + +<para +>Dette problem løses med en samling klasser som kaldes <literal +>grafisk XML-grænseflade</literal +>. I grunden adskiller de handlingerne (kodede i C++) fra deres udseende i menulinjer og værktøjslinjer (kodede i XML). Uden at ændre nogen kildekode, kan menuer nemt indstilles ved at justere en XML-fil. Desuden hjælper det til at sikre at standardhandlinger (såsom <menuchoice +><guimenu +>Fil</guimenu +> <guimenuitem +>Åbn</guimenuitem +></menuchoice +> eller <menuchoice +><guimenu +>Hjælp</guimenu +> <guimenuitem +>Om</guimenuitem +></menuchoice +>) vises på de steder som foreslås af stilguiden. Grafiske XML-grænseflader er særligt vigtige for modulære programmer, hvor valgmulighederne i menulinjerne kan komme fra mange forskellige plugin eller dele. </para> + +<para +>KDE's klasse for topniveauvindue, <ulink url="kdeapi:tdeui/KMainWindow.html" +>KMainWindow</ulink +>, arver <ulink url="kdeapi:tdeui/KXMLGUIClient.html" +>KXMLGUIClient</ulink +>, og understøtter derfor grafiske XML-grænseflader fra begyndelsen. Alle handlinger som laves inde i det skal have klientens <literal +>actionCollection()</literal +> som forælder. Et kald til <literal +> createGUI()</literal +> bygger siden hele sættet af menuer og værktøjslinjer som defineres af programmets XML-fil (almindeligvis med endelsen <literal +>ui.rc</literal +>). </para> + +</simplesect> + + +<simplesect id="xmlgui-kviewexample"> +<title +>Et eksempel: Menuen i Kview</title> + +<para +>I det følgende bruger vi KDE's billedfremviser <application +>Kview</application +> som eksempel. Den har en <literal +>ui.rc</literal +>-fil som hedder <filename +>kviewui.rc</filename +>, som installeres med et fragment fra <filename +>Makefile.am</filename +> </para> + +<programlisting +>rcdir = $(kde_datadir)/kview +rc_DATA = kviewui.rc +</programlisting> + +<para +>Her er et uddrag fra filen <filename +>kviewui.rc</filename +>. For enkelhedens skyld, viser vi kun definitionen for menuen <guimenu +>View</guimenu +>. </para> + +<programlisting +><!DOCTYPE kpartgui> +<kpartgui name="kview"> + <MenuBar> + <Menu name="view" > + <Action name="zoom50" /> + <Action name="zoom100" /> + <Action name="zoom200" /> + <Action name="zoomMaxpect" /> + <Separator/> + <Action name="fullscreen" /> + </Menu> + </MenuBar> +</kpartgui> +</programlisting> + +<para +>Den tilsvarende del til at oprette dette i C++ er: </para> + +<programlisting +>KStdAction::zoomIn ( this, SLOT(slotZoomIn()), actionCollection() ); + KStdAction::zoomOut ( this, SLOT(slotZoomOut()), actionCollection() ); + KStdAction::zoom ( this, SLOT(slotZoom()), actionCollection() ); + new KAction ( i18n("&Half size"), ALT+Key_0, + this, SLOT(slotHalfSize()), + actionCollection(), "zoom50" ); + new KAction ( i18n("&Normal size"), ALT+Key_1, + this, SLOT(slotDoubleSize()), + actionCollection(), "zoom100" ); + new KAction ( i18n("&Double size"), ALT+Key_2, + this, SLOT(slotDoubleSize()), + actionCollection(), "zoom200" ); + new KAction ( i18n("&Fill Screen"), ALT+Key_3, + this, SLOT(slotFillScreen()), + actionCollection(), "zoomMaxpect" ); + new KAction ( i18n("Fullscreen &Mode"), CTRL+SHIFT+Key_F, + this, SLOT(slotFullScreen()), + actionCollection(), "fullscreen" ); +</programlisting> + +<para +>Menuen <guimenu +>View</guimenu +> som laves af denne definition af den grafiske grænseflade ser ud som det vises på dette skærmaftryk: </para> + +<mediaobject> +<imageobject +><imagedata fileref="kview-menu.png"/></imageobject> +</mediaobject> + +<para +>XML-filen begynder med en dokumenttypedeklaration. DTD'en for kpartgui findes i tdelibs-kildekoden i <filename +>tdeui/kpartgui.dtd</filename +>. Det yderste element i filen indeholder programmets instansnavn som en egenskab. Det kan også indeholde et versionsnummer på formen "version=2". Dette er nyttigt når du udgiver nye versioner af et program med ændret menustruktur, f.eks. med flere funktioner. Hvis du hæver versionsnummeret i filen <literal +>ui.rc</literal +>, sørger KDE for at alle indstillede versioner af filen kasseres og at den nye fil bruges i stedet. </para> + +<para +>Næste linje, <literal +><MenuBar></literal +>, indeholder en deklaration af en menulinje. Du kan også indsætte så mange <literal +><ToolBar></literal +>-deklarationer som helst, for at oprette nogle værktøjslinjer. Menuen indeholder en undermenu, med navnet "view". Dette navn er allerede fordefineret, og derfor vil den oversatte version af ordet "View" blive vist. Hvis du deklarerer undermenuer, skal du udtrykkelig tilføje titlen. <application +>Kview</application +> har for eksempel en undermenu med titlen "Image", som deklareres som følger: </para> + +<programlisting +><Menu name="image" > + <text>&amp;Image</text> + ... +</Menu> +</programlisting> + +<para +>I KDE's automatiske byggeskelet, plukkes sådanne titler automatisk ud og placeres i programmets <ulink url="tde-i18n-howto.html" +><literal +>.po</literal +></ulink +>-fil, så de håndteres af oversættere. Bemærk at du skal skrive markeringen af genvejstasten "&" på en form som følger XML-syntaksen "&amp;". </para> + +<para +>Lad os vende tilbage til eksemplet. <application +>Kview</application +>'s menu <guimenu +>Vis</guimenu +> indeholder et antal egne handlinger <literal +>zoom50</literal +>, <literal +>zoom100</literal +>, <literal +>zoom200</literal +>, <literal +>zoomMaxpect</literal +> og <literal +>fullscreen</literal +>, deklarerede med elementet <literal +><Action></literal +>. Skillelinjen i skærmaftrykkene svarer til elementet <literal +><Separator></literal +>. </para> + +<para +>Du bemærker at visse menupunkter ikke har et tilsvarende element i XML-filen. De er <emphasis +>standardhandlinger</emphasis +>. Standardhandlinger laves af klassen <ulink url="kdeapi:tdeui/KStdAction.html" +>KStdAction</ulink +>. Når du laver sådanne handlinger i dit program (som i C++ eksemplet ovenfor), indsættes de automatisk på en foreskreven plads, og muligvis med en ikon og en genvejstast. Du kan slå disse steder i filen op i <filename +>tdeui/ui_standards.rc</filename +> i tdelibs-kildekoden. </para> + +</simplesect> + + +<simplesect id="xmlgui-konqexample"> +<title +>Et eksempel: Værktøjslinjer i Konqueror</title> + +<para +>For beskrivelsen af værktøjslinjer, skifter vi til <application +>Konquerors</application +> definition af grafisk grænseflade. Dette uddrag definerer stedlinjen, som indeholder indtastningsfeltet for URL'er. </para> + +<programlisting +><ToolBar name="locationToolBar" fullWidth="true" newline="true" > + <text>Location Toolbar</text> + <Action name="clear_location" /> + <Action name="location_label" /> + <Action name="toolbar_url_combo" /> + <Action name="go_url" /> +</ToolBar> +</programlisting> + +<para +>Det første vi bemærker er at der er mange flere egenskaber end for menulinjer. De omfatter: </para> + +<itemizedlist> + +<listitem +><para +><literal +>fullWidth</literal +>: Fortæller den grafiske XML-grænsefladen at værktøjslinjen har samme bredde som topniveauvinduet. Hvis dette er "false", optager værktøjslinjen kun så meget plads som nødvendigt, og yderligere værktøjslinjer placeres på samme linje. </para +></listitem> + +<listitem +><para +><literal +>newline</literal +>: Dette hører sammen med ovenstående valgmulighed. Hvis newline er "true", så placeres værktøjslinjen på en ny linje. Ellers kan den placeres i en linje sammen med den foregående værktøjslinje. </para +></listitem> + +<listitem +><para +><literal +>noEdit</literal +>: Normalt kan værktøjslinjer indstilles af brugeren, f.eks. med <menuchoice +><guimenu +>Indstillinger</guimenu +> <guimenuitem +>Indstil værktøjslinjer</guimenuitem +></menuchoice +> i <application +>Konqueror</application +>. Sættes dette til "true", markeres værktøjslinjen så den ikke kan redigeres. Det er vigtigt for værktøjslinjer som fyldes op med objekter når programmet kører, f.eks. <application +>Konqueror</application +>'s bogmærkeværktøjslinje. </para +></listitem> + +<listitem +><para +><literal +>iconText</literal +>: Beder den grafiske XML-grænseflade om at vise handlingens tekst før ikonen. Normalt vises teksten kun som et værktøjsvink når musemarkøren holdes over ikonen et stykke tid. Mulige værdier for egenskaben er "icononly" (viser kun ikonen), "textonly" (viser kun teksten), "icontextright" (viser teksten til højre for ikonen) og "icontextbottom" (viser teksten under ikonen). </para +></listitem> + + +<listitem +><para +><literal +>hidden</literal +>: Hvis dette er "true", så vises værktøjslinjen ikke fra begyndelsen, og skal aktiveres af et menupunkt. </para +></listitem> + + +<listitem +><para +><literal +>position</literal +>: Standardværdien for denne egenskab er "top", hvilket betyder at værktøjslinjen placeres under menulinjen. For programmer med mange værktøjer, såsom grafikprogram, kan det være interessant at erstatte dette med "left" (venstre), "right" (højre) eller "bottom" (under). </para +></listitem> + +</itemizedlist> + +</simplesect> + + +<simplesect id="xmlgui-dynamical"> +<title +>Dynamiske menuer</title> + +<para +>XML kan naturligvis kun indeholde en statisk beskrivelse af en brugergrænseflade. Ofte er der menuer som ændres under kørsel. <application +>Konqueror</application +>'s menu <guimenu +>Sted</guimenu +> indeholder for eksempel et sæt punkter <guimenuitem +>Åbn med ...</guimenuitem +>, med programmer som kan indlæse en fil med en given Mime-type. Hver gang dokumentet som vises ændres, opdateres listen med menupunkter. Den grafiske XML-grænseflade er forberedt på at håndtere sådanne tilfælde med begrebet <emphasis +>handlingslister</emphasis +>. En handlingsliste deklareres som et objekt i XML-filen, men består af flere handlinger som forbindes til menuen når programmet kører. Ovenstående eksempel implementeres med følgende deklaration i <application +>Konqueror</application +>'s XML-fil: </para> + +<programlisting +><Menu name="file"> + <text>&amp;Location</text> + ... + <ActionList name="openwith"> + ... +</Menu> +</programlisting> + +<para +>Funktionen <function +>KXMLGUIClient::plugActionList()</function +> bruges derefter for at tilføje handlinger som skal vises, mens funktionen <function +>KXMLGuiClient::unplugActionList()</function +> fjerner alle forbundne handlinger. Rutinen som er ansvarlig for at udføre opdateringerne ser ud som følger: </para> + +<programlisting +>void MainWindow::updateOpenWithActions() +{ + unplugActionList("openwith"); + openWithActions.clear(); + for ( /* Løkke for relevante tjenester */ ) { + KAction *action = new KAction( ...); + openWithActions.append(action); + } + plugActionList("openwith", openWithActions); +} +</programlisting> + +<para +>Bemærk at i modsætning til statiske handlinger, så laves disse <emphasis +>ikke</emphasis +> med handlingssamlingen som forælder, og du har selv ansvaret for at de fjernes. Den nemmeste måde at opnå dette er ved at bruge <literal +>openWithActions.setAutoDelete(true)</literal +> i eksemplet ovenfor. </para> + +</simplesect> + + +<simplesect id="xmlgui-contextmenus"> +<title +>Sammenhængsafhængige menuer</title> + +<para +>Eksemplerne ovenfor indeholder kun klasser hvor et hovedvindues menulinje og værktøjslinjer laves. I de tilfælde er processen som laver beholdarne helt skjult for dig inde i kaldet af funktionen <function +>createGUI()</function +> (medmindre du har egne beholdere). Der er dog tilfælde hvor du vil oprette andre beholdere og befolke dem med grafiske grænsefladedefinitioner fra XML-filen. Et sådant eksempel er sammenhængsafhængige menuer. For at få en peger til en sammenhængsafhængig menu, skal du bede klientens tilvirker om det: </para> + +<programlisting +>void MainWindow::popupRequested() +{ + QWidget *w = factory()->container("context_popup", this); + QPopupMenu *popup = static_cast<QPopupMenu *>(w); + popup->exec(QCursor::pos()); +} +</programlisting> + +<para +>Metoden <function +>KXMLGUIFactory::container()</function +> som bruges ovenfor, ser efter om den finder en beholder i XML-filen med det angivne navn. Altså kan en mulig definition se ud på følgende måde: </para> + +<programlisting +>... +<Menu name="context_popup"> + <Action name="file_add"/> + <Action name="file_remove"/> +</Menu> +... +</programlisting> + +</simplesect> + +</sect1> + + +<sect1 id="help"> +<title +>Sørg for indbygget hjælp</title> + +<para +>At gøre et program let og intuitivt at bruge omfatter en stor mængde funktioner, som ofte kaldes indbygget hjælp. Indbygget hjælp har flere, delvis modstridende, mål: på den ene siden skal den give brugeren svar på spørgsmål "Hvordan kan jeg udføre en vis opgave?", på den anden side skal den hjælpe brugeren med at udforske programmet og finde funktioner som han endnu ikke kender til. Det er vigtigt at indse at dette kun kan opnås ved at tilbyde flere hjælpeniveauer: </para> + +<itemizedlist> + +<listitem +><para +>Værktøjsvink er små etiketter som dukker op over grænsefladeelementer når musen bliver der hvor et længere stykke tid. De er særligt vigtige for værktøjslinjer, hvor ikonerne ikke altid er nok til for at forklare formålet med en knap. </para +></listitem> + +<listitem +><para +>"Hvad er dette?" hjælp er ofte en længere og mere udførlig forklaring af en kontrol eller et menupunkt. Den er også mere kluntet at bruge. I dialoger kan den vises på to forskellige måder: enten ved at trykke på <keycombo +><keycap +>Shift</keycap +> <keycap +>F1</keycap +></keycombo +>, eller ved at klikke på spørgsmålstegnet i navnelisten (understøttelse for dette afhænger af vindueshåndteringen). Musemarkøren ændres så til en pil med et spørgsmålstegn, og et hjælpevindue vises når der klikkes på et element i brugergrænsefladen. "Hvad er dette ?" hjælp for menuer aktiveres oftest med en knap i værktøjslinjen som indeholder en pil og et spørgsmålstegn. </para +></listitem> + +<listitem +><para +>Problemet med denne metode er at brugeren ikke kan se om en grafisk kontrol sørger for hjælp eller ej. Når brugeren aktiverer knappen med spørgsmålstegn og ikke får noget hjælpevindue ved klik på et element i brugergrænsefladen, bliver han meget snart frustreret. </para> + +<para +>Fordelen med "Hvad er dette?" hjælpevinduer som de tilbydes af Qt og KDE, er at de kan indeholde <ulink url="kdeapi:qt/QStyleSheet" +> formateret tekst</ulink +>, dvs. de kan indeholde forskellige skrifttyper, tekst i fed type og kursiv stil, og til og med billeder og tabeller. </para> + +<para +>Et eksempel på "Hvad er dette?" hjælp: </para> + +<mediaobject> +<imageobject +><imagedata fileref="whatsthis.png"/></imageobject> +</mediaobject> + +</listitem> + +<listitem +><para +>Endelig skal alle programmer have en håndbog. En håndbog vises normalt i <application +>Hjælpecentralen</application +> ved at bruge menuen <guimenu +>Hjælp</guimenu +>. Det betyder at et helt nyt program dukker op og afleder brugeren fra arbejdet. Følgelig skal det kun være nødvendigt at rådspørge håndbogen om andre funktioner, når værktøjsvink og hvad er dette hjælp, ikke rækker til. Naturligvis har en håndbog fordelen at den ikke forklarer enkelte isolerede aspekter af brugergrænsefladen. Den kan i stedet forklare visse af programmets aspekter i en større sammenhæng. Håndbøger for KDE skrives ved brug af <ulink url="http://i18n.kde.org" +>DocBook</ulink +>-opmarkeringssproget. </para +></listitem> + +</itemizedlist> + +<para +>Fra programmørens synvinkel, tilbyder Qt en enkel grænseflade for indbygget hjælp. For at tildele et værktøjsvink til en grafisk kontrol, bruges klassen <ulink url="kdeapi:qt/QToolTip" +>QToolTip</ulink +>. </para> + +<programlisting +>QToolTip::add(w, i18n("This widget does something.")) +</programlisting> + +<para +>Hvis menulinjerne og værktøjslinjerne laves som <ulink url="actionpattern.html" +>handlingsmønstre</ulink +>, hentes strengen som bruges som værktøjsvink fra det første argument i konstruktoren <ulink url="kdeapi:tdeui/KAction.html" +>KAction</ulink +>. </para> + +<programlisting +>action = new KAction(i18n("&Delete"), "editdelete", + SHIFT+Key_Delete, actionCollection(), "del") +</programlisting> + +<para +>Her er det også muligt at tildele en tekst som vises i statuslinjen når det tilsvarende menupunkt markeres: </para> + +<programlisting +>action->setStatusText(i18n("Deletes the marked file")) +</programlisting> + +<para +>Programmeringsgrænsefladen for "Hvad er dette?" er meget lignende. Brug følgende kode i dialoger: </para> + +<programlisting +>QWhatsThis::add(w, i18n("<qt>This demonstrates <b>Qt</b>'s" + " rich text engine.<ul>" + "<li>Foo</li>" + "<li>Bar</li>" + "</ul></qt>")) +</programlisting> + +<para +>For menupunkter, brug </para> + +<programlisting +>action->setWhatsThis(i18n("Deletes the marked file")) +</programlisting> + +<para +>Starten af <application +>Hjælpecentralen</application +> er indkapslet i klassen <ulink url="kdeapi:tdecore/KApplication" +>KApplication</ulink +>. For at vise håndbogen for programmet, bruges blot </para> + +<programlisting +>kapp->invokeHelp() +</programlisting> + +<para +>Dette viser den første side med indholdsfortegnelsen. Når du kun vil vise et vist afsnit af håndbogen, kan du give yderligere et argument til <function +>invokeHelp()</function +>, som afgør ankeret som søgeren hopper til. </para> + +</sect1> + +</chapter> + + + +<chapter id="components"> +<title +>Komponenter og tjenester</title> + +<sect1 id="components-services"> +<title +>KDE-tjenester</title> + +<simplesect id="services-whatarekdeservices"> +<title +>Hvad er KDE-tjenester?</title> + +<para +>Begrebet <emphasis +>tjeneste</emphasis +> er en central idé i KDE's modulære arkitektur. Der er ingen strikt teknisk implementering koblet til benævnelsen: tjenester kan være plugin i form af delte biblioteker, eller programmer som styres via <ulink url="dcop.html" +>DCOP</ulink +>. Ved at påstå at være af en vis <emphasis +>tjenestetype</emphasis +>, lover en tjeneste at implementere visse programmeringsgrænseflader eller funktioner. I C++ sprogbrug, kan man forestille sig en tjenestetype som en abstrakt klasse, og en tjeneste som en implementering af grænsefladen. </para> + +<para +>Fordelen ved denne opdeling er åbenbar: Et program som udnytter en tjenestetype behøver ikke kende til mulige implementeringer af den. Den bruger kun programmeringsgrænsefladen som hører sammen med tjenestetypen. På denne måde kan tjenesten som bruges ændres uden at påvirke programmet. Desuden kan brugeren indstille hvilke tjenester han foretrækker til bestemte funktioner. </para> + +<para +>Nogle eksempler: </para> + +<itemizedlist> + +<listitem +><para +>HTML-fremvisningskomponenten som bruges i <application +>Konqueror</application +> er en indlejret komponent som implementerer tjenestetypen <literal +>KParts/ReadOnlyPart</literal +> og <literal +>Browser/View</literal +>. </para +></listitem> +<listitem +><para +>I de seneste versioner af <application +>KDevelop</application +>, er størstedelen af funktionerne pakkede i plugin med tjenestetypen <literal +>KDevelop/Part</literal +>. Ved opstart, indlæses alle tjenester af denne type, så du kan udvide det integrerede udviklingsmiljø på en meget smidig måde. </para +></listitem> +<listitem +><para +><application +>Konqueror</application +> kan vise miniaturer af billeder, HTML-sider, PDF- og tekstfiler, hvis det aktiveres. Denne formåen kan udvides. Hvis du vil vise forhåndsvisningsbilleder af egne datafiler af en vis Mime-type, kan du implementere en tjeneste med tjenestetypen <classname +>ThumbCreator</classname +>. </para +></listitem> + +</itemizedlist> + +<para +>Naturligvis karakteriseres en tjeneste ikke kun af tjenestetypen som den implementerer, men også af nogle <emphasis +>egenskaber</emphasis +>. For eksempel så gør en ThumbCreator ikke kun krav på at den implementerer C++ klassen med typen <classname +>ThumbCreator</classname +>, den har også en liste med Mime-typer som den er ansvarlig for. På samme måde har KDevelop-dele programsproget de understøtter som en egenskab. Når et program beder om en tjenestetype, kan den også angive begrænsninger for tjenestens egenskaber. I eksemplet ovenfor, når KDevelop indlæser plugin for et Java-projekt, spørger det kun efter plugin som har egenskaben Java som programmeringssprog. KDE indeholder en fuldstændig CORBA-lignende <emphasis +>handler</emphasis +>, med et komplekst forespørgselssprog, til dette formål. </para> + +</simplesect> + + +<simplesect id="services-definingservicetypes"> +<title +>Definition af tjenestetyper</title> + +<para +>Nye tjenestetyper tilføjes ved at installere en beskrivelse af dem i mappen <filename +>KDEDIR/share/servicetypes</filename +>. I det automatiske byggeskelet, kan det gøres med dette fragment fra <filename +>Makefile.am</filename +>: </para> + +<programlisting +>kde_servicetypesdir_DATA = tdeveloppart.desktop +EXTRA_DIST = $(kde_servicetypesdir_DATA) +</programlisting> + +<para +>Definitionen <filename +>tdeveloppart.desktop</filename +> for en part til <application +>KDevelop</application +> ser ud som følger: </para> + +<programlisting +>[Desktop Entry] +Type=ServiceType +X-KDE-ServiceType=KDevelop/Part +Name=KDevelop Part + +[PropertyDef::X-KDevelop-Scope] +Type=QString + +[PropertyDef::X-KDevelop-ProgrammingLanguages] +Type=QStringList + +[PropertyDef::X-KDevelop-Args] +Type=QString +</programlisting> + +<para +>Foruden de sædvanlige indgange, demonstrerer dette eksempel hvordan man angiver at en tjeneste har visse egenskaber. Hver definition af en egenskab svarer til en gruppe <literal +>[PropertyDef::name]</literal +> i konfigurationsfilen. I gruppen, angiver indgangen <literal +>Type</literal +> egenskabens type. Mulige typer er alt som kan opbevares i en <ulink url="kdeapi:qt/QVariant" +>QVariant</ulink +>. </para> + +</simplesect> + + +<simplesect id="services-defininglibraryservices"> +<title +>Definition af delte bibliotekstjenester</title> + +<para +>Tjenestedefinitioner opbevares i mappen <filename +>KDEDIR/share/services</filename +>: </para> + +<programlisting +>kde_servicesdir_DATA = kdevdoxygen.desktop +EXTRA_DIST = $(kde_servicesdir_DATA) +</programlisting> + +<para +>Indholdet i følgende eksempelfil, <filename +>kdevdoxygen.desktop</filename +>, angiver pluginnet <literal +>KDevDoxygen</literal +> med tjenestetypen <literal +>KDevelop/Part</literal +>: </para> + +<programlisting +>[Desktop Entry] +Type=Service +Comment=Doxygen +Name=KDevDoxygen +ServiceTypes=KDevelop/Part +X-KDE-Library=libkdevdoxygen +X-KDevelop-ProgrammingLanguages=C,C++,Java +X-KDevelop-Scope=Project +</programlisting> + +<para +>Foruden de almindelige deklarationer, er en vigtig indgang <literal +>X-KDE-Library</literal +>. Den indeholder navnet på libtool-biblioteket (uden filendelsen <literal +>.la</literal +>). Det fastlægger også navnet på det eksporterede symbol i biblioteket som returnerer objekttilvirkeren (med det indledende præfiks <literal +>init_</literal +>). I ovenstående eksempel, skal biblioteket indeholde følgende funktion: </para> + +<programlisting +>extern "C" { + void *init_libkdevdoxygen() + { + return new DoxygenFactory; + } +}; +</programlisting> + +<para +>Typen for tilvirkningsklassen <classname +>DoxygenFactory</classname +> afhænger af den specifikke tjenestetype som tjenesten implementerer. I vort eksempel med et KDevelop-plugin, skal tilvirkeren være en <classname +>KDevFactory</classname +> (som arver <classname +>KLibFactory</classname +>). Et mere almindeligt eksempel er <ulink url="kdeapi:kparts/KParts::Factory" +>KParts::Factory</ulink +> som antages at oprette objekterne <ulink url="kdeapi:kparts/KParts::ReadOnlyPart" +>KParts::ReadOnlyPart</ulink +> eller i de fleste tilfælde den generiske <ulink url="kdeapi:tdecore/KLibFactory" +>KLibFactory</ulink +>. </para> + +</simplesect> + + +<simplesect id="services-usinglibraryservices"> +<title +>Brug af delte bibliotekstjenester</title> + +<para +>For at kunne bruge en delt bibliotekstjeneste i et program, skal du skaffe et <ulink url="kdeapi:kio/KService.html" +>KService</ulink +>-objekt som repræsenterer den. Dette beskrives i <ulink url="mime.html" +>afsnittet om Mime-typer</ulink +> (og i et afsnit om handleren som endnu ikke er skrevet :-) </para> + +<para +>Med objektet <classname +>KService</classname +> tilgængeligt, kan du meget let indlæse biblioteket og få en peger til dets tilvirkningsobjekt. </para> + +<programlisting +>KService *service = ... +QString libName = QFile::encodeName(service->library()); +KLibFactory *factory = KLibLoader::self()->factory(libName); +if (!factory) { + QString name = service->name(); + QString errorMessage = KLibLoader::self()->lastErrorMessage(); + KMessageBox::error(0, i18n("There was an error loading service %1.\n" + "The diagnostics from libtool is:\n%2") + .arg(name).arg(errorMessage); +} +</programlisting> + +<para +>Fra dette øjeblik, afhænger fortsættelsen igen af tjenestetypen. For generelle plugin, laver man objekter med metoden <ulink url="kdeapi:tdecore/KLibFactory.html#ref3" +>KLibFactory::create()</ulink +>. Med KParts, skal tilvirkningspegeren konverteres til det mere specifikke KParts::Factory, og dets metode create() skal bruges: </para> + +<programlisting +>if (factory->inherits("KParts::Factory")) { + KParts::Factory *partFactory = static_cast<KParts::Factory*>(factory); + QObject *obj = partFactory->createPart(parentWidget, widgetName, + parent, name, "KParts::ReadOnlyPart"); + ... +} else { + cout << "Tjenesten implementerer ikke de rette tilvirkere" << endl; +} +</programlisting> + +</simplesect> + + +<simplesect id="services-definingdcopservices"> +<title +>Definition af DCOP-tjenester</title> + +<para +>En DCOP-tjeneste implementeres oftest som et program som startes når det behøves. Det går derefter ind i en løkke og lytter efter DCOP-forbindelser. Programmet kan være interaktivt, men det kan også køre som en dæmon i baggrunden under hele eller dele af sin livstid, uden at brugeren mærker det. Et eksempel på en sådan dæmon er <literal +>kio_uiserver</literal +>, som implementerer vekselvirken med brugeren som fremgangsdialoger for KIO-biblioteket. Fordelen ved en sådan central dæmon er at f.eks. download-forløbet for flere forskellige filer kan vises i et vindue, selvom dine download startedes fra forskellige programmer. </para> + +<para +>En DCOP-tjeneste defineres på en anden måde end en tjeneste i et delt bibliotek. Naturligvis angiver den ikke et bibliotek, men i stedet et kørbart program. Desuden angiver en DCOP-tjeneste ikke linjen med tjenestetype, eftersom den startes med navn. Den indeholder yderligere to linjer med yderligere egenskaber: </para> + +<para +><literal +>X-DCOP-ServiceType</literal +> angiver hvordan tjenesten startes. Værdien <literal +>Unique</literal +> (unik) angiver at tjenesten ikke må startes mere end én gang. Det betyder at hvis du forsøger at starte tjenesten (f.eks. via <ulink url="kdeapi:tdecore/KApplication.html#startServiceByName" +> KApplication::startServiceByName()</ulink +>, kontrollerer KDE om den allerede er registreret i DCOP, og bruger tjenesten som kører. Hvis den ikke allerede er registreret, starter KDE den og venter til den er registreret. Derfor kan du med det samme sende DCOP-kald til tjenesten. I dette tilfælde, skal tjenesten implementeres som <ulink url="kdeapi:tdecore/KUniqueApplication.html" +>KUniqueApplication</ulink +>. </para> + +<para +>Værdien <literal +>Multi</literal +> for <literal +>X-DCOP-ServiceType</literal +> angiver at flere instanser af tjenesten kan eksistere samtidigt, så hvert forsøg på at starte tjenesten skaber en ny proces. Som en sidste mulighed kan værdien <literal +>None</literal +> (ingen) bruges. I dette tilfælde, venter starten af tjenesten ikke på at den er registreret i DCOP. </para> + +<para +><literal +>X-KDE-StartupNotify</literal +> skal normalt angives som "false". Ellers viser aktivitetsfeltet en startbekræftelse, eller, afhængig af brugerindstillingerne, så ændres markøren. </para> + +<para +>Her er definitionen af <literal +>kio_uiserver</literal +>: </para> + +<programlisting +>[Desktop Entry] +Type=Service +Name=kio_uiserver +Exec=kio_uiserver +X-DCOP-ServiceType=Unique +X-KDE-StartupNotify=false +</programlisting> + +</simplesect> + + +<simplesect id="services-usingdcopservices"> +<title +>Brug af DCOP-tjenester</title> + +<para +>En DCOP-tjeneste startes med en af flere metoder i klassen KApplication: </para> + +<programlisting +>DCOPClient *client = kapp->dcopClient(); +client->attach(); +if (!client->isApplicationRegistered("kio_uiserver")) { + QString error; + if (KApplication::startServiceByName("kio_uiserver", QStringList(), &error)) + cout << "Start af KIO-server mislykkedes med meddelelsen " << error << endl; +} +... +QByteArray data, replyData; +QCString replyType; +QDataStream arg(data, IO_WriteOnly); +arg << true; +if (!client->call("kio_uiserver", "UIServer", "setListMode(bool)", + data, replyType, replyData)) + cout << "Kald til kio_uiserver mislykkedes" << endl; +... +</programlisting> + +<para +>Bemærk at eksemplet med et DCOP-kald som gives her udtrykkelig bruger sammensætning af argumenter. Ofte vil man i stedet bruge en prototype som laves af dcopidl2cpp, eftersom det er meget enklere, med mindre risiko for fejl. </para> + +<para +>I eksemplet som gives her, startes tjenesten "med navn", dvs. første argument til <function +>KApplication::startServiceByName() </function +> er navnet, som det angives på linjen <literal +>Name</literal +> i desktop-filen. Et alternativ er at bruge <function +>KApplication::startServiceByDesktopName()</function +>, som bruger navnet på desktop-filen som argument, dvs. i dette tilfælde <literal +>"kio_uiserver.desktop"</literal +>. </para> + +<para +>Alle disse kald har en liste med URL'er som andet argument, som gives til tjenesten på kommandolinjen. Det tredje argument er en peger til en <classname +>QString</classname +>. Hvis starten af tjenesten mislykkes, tildeles dette argument til en oversat fejlmeddelelse. </para> + +</simplesect> + +</sect1> + + +<sect1 id="components-mime"> +<title +>Mime-typer</title> + +<simplesect id="mime-whataremimetypes"> +<title +>Hvad er Mime-typer?</title> + +<para +>Mime-typer bruges til at beskrive type af indhold for filer eller datafragmenter. Oprindeligt indførtes de for at tillade at billeder eller lydfiler, osv. kunne sendes med e-mail (Mime betyder "Multipurpose Internet Mail Extensions"). Senere blev systemet også brugt af browsere for at afgøre hvordan data som sendtes af en web-server skulle vises for brugeren. En HTML-side har for eksempel Mime-typen "text/html", og en Postscript-fil "application/postscript". I KDE bruges denne ide mange forskellige steder: </para> + +<itemizedlist> + +<listitem +><para +>I <application +>Konqueror</application +>'s ikonvisning, repræsenteres filer af ikoner. Hver Mime-type har en vis ikon som den hører sammen med, som vises her. </para +></listitem> + +<listitem +><para +>Når man klikker på en filikon eller et filnavn i <application +>Konqueror</application +>, så vises filen enten i en indlejret visning, eller også startes et program som hører sammen med filtypen. </para +></listitem> + +<listitem +><para +>Når du trækker og slipper nogle data fra et program til et andet (eller indenfor samme program), kan målet vælge kun at acceptere visse datatyper. Desuden håndteres billeddata på en anden måde end tekstdata. </para +></listitem> + +<listitem +><para +>Data på klippebordet har en Mime-type. Traditionelt håndterede X-programmer kun pixmaps eller tekst, men med Qt er der ingen begrænsning af datatypen. </para +></listitem> + +</itemizedlist> + +<para +>Det er klart fra ovenstående eksempel, at Mime-håndtering er en kompleks ting. Først skal en tildeling af filnavne til Mime-typer gøres. KDE går yderligere et skridt, og lader til og med filindhold tildeles Mime-typer, i de tilfælde hvor filnavnet ikke er tilgængeligt. Derefter skal Mime-typer tildeles programmer eller biblioteker som kan vise eller redigere en fil af en vis type, eller oprette et miniature af den. </para> + +<para +>Der er en mængde forskellige programmeringsgrænseflader til at regne ud hvad Mime-typen for data eller filer er. Generelt skal man gøre en afvejning mellem hastighed og tilforladelighed. Man kan finde en filtype ved blot at kigge på filnavnet (i de fleste tilfælde filendelsen). Filen <filename +>foo.jpg</filename +> er for eksempel normalt "image/jpeg". I de tilfælde hvor filendelsen er taget væk er dette ikke sikkert, og man skal virkelig kigge i filens indhold. Det er naturligvis langsommere, især for filer som først skal hentes via HTTP. Den indholdsbaserede metode anvender filen <filename +>KDEDIR/share/mimelnk/magic</filename +>, og er derfor svær at udvide. Men i almindelighed kan information om Mime-typer let gøres tilgængeligt for systemet, ved at installere en <literal +>.desktop</literal +>-fil, og den bliver effektivt og bekvemt tilgængelig via KDE-bibliotekerne. </para> + +</simplesect> + + +<simplesect id="mime-definingmimetypes"> +<title +>Definition af Mime-typer</title> + +<para +>Lad os definere typen <literal +>"application/x-foo"</literal +>, for vort nye program <application +>foobar</application +>. For at gøre det, skal filen <filename +>foo.desktop</filename +> skrives, og installeres i <filename +>KDEDIR/share/mimelnk/application</filename +>. (Det er det sædvanlige sted, som kan variere mellem distributioner). Dette kan gøres ved at tilføje følgende til <filename +>Makefile.am</filename +>: </para> + +<programlisting +>mimedir = $(kde_mimedir)/application +mime_DATA = foo.desktop +EXTRA_DIST = $(mime_DATA) +</programlisting> + +<para +>Filen <filename +>foo.desktop</filename +> skal se ud som følger: </para> + +<programlisting +>[Desktop Entry] +Type=MimeType +MimeType=application/x-foo +Icon=fooicon +Patterns=*.foo; +DefaultApp=foobar +Comment=Foo Data File +Comment[sv]=Foo-datafil +</programlisting> + +<para +>Indgangen <literal +>"Comment"</literal +> er beregnet til at oversættes. Eftersom <filename +>.desktop</filename +>-filen angiver en ikon, bør du også installere en ikon <filename +>fooicon.png</filename +>, som repræsenterer filen, f.eks. i <application +>Konqueror</application +>. </para> + +<para +>I KDE-bibliotekerne svarer en sådan typedefinition til en instans af klassen <ulink url="kdeapi:kio/KMimeType.html" +>KMimeType</ulink +>. Brug dette som i følgende eksempel: </para> + +<programlisting +>KMimeType::Ptr type = KMimeType::mimeType("application/x-foo"); +cout << "Type: " << type->name() < endl; +cout << "Ikon: " << type->icon() < endl; +cout << "Kommentar: " << type->icon() < endl; +QStringList patterns = type->patterns(); +QStringList::ConstIterator it; +for (it = patterns.begin(); it != patterns.end(); ++it) + cout << "Mønster: " << (*it) << endl; +</programlisting> + +</simplesect> + + +<simplesect id="mime-determiningmimetypes"> +<title +>Afgøre Mime-type for data</title> + +<para +>Den hurtige måde at afgøre filtypen er <function +>KMimeType::findByURL()</function +>. Den kigger efter URL'en og afgør i de fleste tilfælde typen ud fra filendelsen. Med visse protokoller (f.eks. http, man, info), bruges denne mekanisme ikke. CGI-scripter på web-servere som skrives i Perl, har for eksempel ofte endelsen <literal +>.pl</literal +>, som ville angive typen <literal +>"text/x-perl"</literal +>. Alligevel er filen som levereres af serveren udskrift fra scriptet, som normalt er HTML. I sådanne tilfælde, returnerer <function +>KMimeType::findByURL()</function +> Mime-typen <literal +>"application/octet-stream"</literal +> (tilgængelig via <function +>KMimeType::defaultMimeType()</function +>), som angiver at det mislykkedes at finde ud af typen. </para> + +<programlisting +>KMimeType::Ptr type = KMimeType::findByURL("/home/bernd/foobar.jpg"); +if (type->name() == KMimeType::defaultMimeType()) + cout << "Kunne ikke afgøre typen" << endl; +else + cout << "Type: " << type->name() << endl; +</programlisting> + +<para +>(denne metode har nogle flere argumenter, men disse er ikke dokumenterede, så glem dem hellere helt.) </para> + +<para +>Man kan ville finde ud af en Mime-type ud fra filens indhold i stedet for filnavnet. Det er tilforladeligere, men også langsommere, eftersom det kræver at en del af filen læses. Det gøres med klassen <ulink url="kdeapi:kio/KMimeMagic.html" +>KMimeMagic</ulink +>, som har en anderledes fejlhåndtering: </para> + +<programlisting +>KMimeMagicResult *result = KMimeMagic::self()->findFileType("/home/bernd/foobar.jpg"); +if (!result || !result->isValid()) + cout << "Kunne ikke afgøre typen" << endl; +else + cout << "Type: " << result->mimeType() << endl; +</programlisting> + +<para +>Med en variant af denne funktion, kan du også afgøre typen for en hukommelsesstump. Det bruges for eksempel af <application +>Kate</application +> til at regne fremhævningstilstand ud: </para> + +<programlisting +>QByteArray array; +... +KMimeMagicResult *result = KMimeMagic::self()->findBufferType(array); +if (!result || !result->isValid()) + cout << "Kunne ikke afgøre typen" << endl; +else + cout << "Type: " << result->mimeType() << endl; +</programlisting> + +<para +>Naturligvis kan selv KMimeMagic kun afgøre filtypen ud fra indholdet i en lokal fil. For fjernfiler, er der yderligere en mulighed: </para> + +<programlisting +>KURL url("http://developer.kde.org/favicon.ico"); +QString type = KIO::NetAccess::mimetype(url); +if (type == KMimeType::defaultMimeType()) + cout << "Kunne ikke afgøre typen" << endl; +else + cout << "Type: " << type << endl; +</programlisting> + +<para +>Dette starter et KIO-job til at hente en del af filen, og kontrollere dette. Bemærk at denne funktion måske er rigtig langsom og blokerer programmet. Normalt vil man kun bruge den hvis <function +>KMimeType::findByURL()</function +> returnerede <literal +>"application/octet-stream"</literal +>. </para> + +<para +>På den anden side, hvis du ikke vil blokere programmet, kan du også udtrykkelig starte KIO-jobbet og forbinde til et af dets signaler: </para> + +<programlisting +>void FooClass::findType() +{ + KURL url("http://developer.kde.org/favicon.ico"); + KIO::MimetypeJob *job = KIO::mimetype(url); + connect( job, SIGNAL(result(KIO::Job*)), + this, SLOT(mimeResult(KIO::Job*)) ); +} + +void FooClass::mimeResult(KIO::Job *job) +{ + if (job->error()) + job->showErrorDialog(); + else + cout << "Mime type: " << ((KIO::MimetypeJob *)job)->mimetype() << endl; +} +</programlisting> + +</simplesect> + + +<simplesect id="mime-mappingmimetypes"> +<title +>Tildel en Mime-type til et program eller tjeneste</title> + +<para +>Når et program installeres, installerer det en <literal +>.desktop</literal +>-fil, som indeholder en liste med MIME-typer som programmet kan indlæse. På samme måde gør komponenter, som en KPart, denne information tilgængelig med deres <literal +>.desktop</literal +>-tjenestefiler. Altså er der generelt flere programmer og komponenter som kan behandle en given MIME-type. Du kan skaffe en sådan liste fra klassen <classname +>KServiceTypeProfile</classname +>: </para> + +<programlisting +>KService::OfferList offers = KServiceTypeProfile::offers("text/html", "Application"); +KService::OfferList::ConstIterator it; +for (it = offers.begin(); it != offers.end(); ++it) { + KService::Ptr service = (*it); + cout << "Navn: " << service->name() << endl; +} +</programlisting> + +<para +>Returværdien fra funktionen er en liste med tjenesteudbydere. Et <classname +>KServiceOffer</classname +>-objekt pakker en KService::Ptr, sammen med et rangrækkefølgenummer. Listen som returneres af <function +>KServiceTypeProfile::offers()</function +> er ordnet efter hvad brugeren foretrækker. Brugeren kan ændre dette ved at kalde <command +>"keditfiletype text/html"</command +> eller vælge <guimenuitem +>Redigér filtype</guimenuitem +> i <application +>Konqueror</application +>'s sammenhængsafhængige menu for en HTML-fil. </para> + +<para +>I eksemplet ovenfor, blev der bedt om en liste med tilbydere af programmer som understøtter <literal +>text/html</literal +>. Det omfatter, blandt andet, HTML-editorer såsom <application +>Quanta Plus</application +>. Du kan også erstatte det andet argument <literal +>"Application"</literal +> med <literal +>"KParts::ReadOnlyPart"</literal +>. I det tilfælde, får du en liste med indlejrbare komponenter til at præsentere HTML-indhold, for eksempel KHTML. </para> + +<para +>I de fleste tilfælde er du ikke interesseret i listen med alle tilbud om tjenester for en kombination af Mime-type og tjenestetype. Der er en bekvemmelighedsfunktion som kun giver dig de tjenestetilbud som foretrækkes mest: </para> + +<programlisting +>KService::Ptr offer = KServiceTypeProfile::preferredService("text/html", "Application"); +if (offer) + cout << "Navn: " << service->name() << endl; +else + cout << "Ingen passende tjeneste fundet" << endl; +</programlisting> + +<para +>For endnu mere komplicerede forespørgsler, er der en fuldstændig CORBA-lignende <ulink url="kdeapi:kio/KTrader.html" +>handler</ulink +>. </para> + +<para +>For at køre en programtjeneste med nogle URL'er, bruges <ulink url="kdeapi:kio/KRun.html" +>KRun</ulink +>: </para> + +<programlisting +>KURL::List urlList; +urlList << "http://www.ietf.org/rfc/rfc1341.txt?number=1341"; +urlList << "http://www.ietf.org/rfc/rfc2046.txt?number=2046"; +KRun::run(offer.service(), urlList); +</programlisting> + +</simplesect> + + +<simplesect id="mime-misc"> +<title +>Diverse</title> + +<para +>I dette afsnit giver vi en liste over nogen af de programmeringsgrænseflader som på en eller anden måde hører sammen med den foregående beskrivelse. </para> + +<para +>Hent en ikon for en URL. Dette kigger efter URL'ens type, og returnerer en tilsvarende ikon. </para> + +<programlisting +>KURL url("ftp://ftp.kde.org/pub/incoming/wibble.c"); +QString icon = KMimeType::iconForURL(url); +</programlisting> + +<para +>Kør en URL. Dette kigger efter URL'ens type, og starter et tilhørende program til typen som brugeren foretrækker. </para> + +<programlisting +>KURL url("http://dot.kde.org"); +new KRun(url); +</programlisting> + +</simplesect> + +</sect1> + + +<sect1 id="nettransparency"> +<title +>Netværkstransparens</title> + +<simplesect id="nettransparency-intro"> +<title +>Indledning</title> + +<para +>I internetalderen er det yderst vigtigt at desktopprogrammer kan få adgang til ressourcer via internettet: De skal kunne hente filer fra en web-server, skrive filer til en FTP-server eller læse e-mail fra en e-mail-server. Ofte kaldes muligheden for at få adgang til filer uafhængig af deres sted for <emphasis +>netværkstransparens</emphasis +>. </para> + +<para +>Tidligere implementeredes forskellige måder at nå dette mål. Det gamle NFS-filsystem er et forsøg på at implementere netværkstransparens på POSIX-grænsefladesniveau. Mens dette fungerer rigtigt godt i lokale, tætkoblede netværk, skalerer det ikke for ressourcer med utilforladelig og muligvis langsom adgang. Her er <emphasis +>asynkronisme</emphasis +> vigtig. Mens du venter på at browseren skal hente en side, skal brugergrænsefladen ikke blokeres. Desuden skal sidefremvisningen ikke begynde når hele siden er tilgængelig, men den skal opdateres regelmæssigt mens data ankommer. </para> + +<para +>I KDE-bibliotekerne implementeres netværkstransparens med KIO-programmeringsgrænsefladen. Det centrale begreb i arkitekturen er et I/O-<emphasis +>job</emphasis +>. Et job kan kopiere filer, fjerne filer og lignende ting. Så snart et job er startet, arbejder det i baggrunden og blokerer ikke programmet. Al kommunikation fra jobbet tilbage til programmet, såsom at leverere data eller fremgangsinformation, gøres integreret i Qt's begivenhedsløkke. </para> + +<para +>Baggrundsoperationer opnås ved at starte <emphasis +>I/O-slaver</emphasis +> til at udføre visse opgaver. I/O-slaver startes som separate processer, og kommunikation sker via Unix domæneudtag. På denne måde behøves intet flertrådssystem, og ustabile slaver kan ikke få programmet som bruger dem til at bryde sammen. </para> + +<para +>Filsteder udtrykkes med URL'er som er omfattende brugt. Men i KDE, udvider URL'er ikke kun området med tilgængelige filer udenfor det lokale filsystem. De går også i modsat retning, f.eks. kan man søge i tar-arkiver. Dette opnås ved at indlejre URL'er i hinanden. En fil i et tar-arkiv på en HTTP-server ville kunne have URL'en: </para> + +<programlisting +>http://www-com.physik.hu-berlin.de/~bernd/article.tgz#tar:/paper.tex +</programlisting> + +</simplesect> + + +<simplesect id="nettransparency-usingkio"> +<title +>Brug af KIO</title> + +<para +>I de fleste tilfælde oprettes job ved at kalde funktioner i KIO-navnerummet. Disse funktioner har en eller to URL'er som argument, og muligvis også andre nødvendige parametre. Når jobbet er afsluttet, sender det signalet <literal +>result(KIO::Job*)</literal +>. Efter signalet er sendets, fjerner jobbet sig selv. Derfor ser et typisk brugertilfælde sådan her ud: </para> + +<programlisting +>void FooClass::makeDirectory() +{ + SimpleJob *job = KIO::mkdir(KURL("file:/home/bernd/kiodir")); + connect( job, SIGNAL(result(KIO::Job*)), + this, SLOT(mkdirResult(KIO::Job*)) ); +} + +void FooClass::mkdirResult(KIO::Job *job) +{ + if (job->error()) + job->showErrorDialog(); + else + cout << "mkdir gik godt" << endl; +} +</programlisting> + +<para +>Afhængig af jobtypen, kan du også forbinde til andre signaler. </para> + +<para +>Her er en oversigt over de mulige funktioner: </para> + +<variablelist> + +<varlistentry +><term +>KIO::mkdir(const KURL &url, int permission)</term> +<listitem +><para +>Opretter en mappe, valgfrit med visse rettigheder. </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::rmdir(const KURL &url)</term> +<listitem +><para +>Fjerner en mappe. </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::chmod(const KURL &url, int permissions)</term> +<listitem +><para +>Ændrer rettigheder for en fil. </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::rename(const KURL &src, const KURL &dest, bool overwrite)</term> +<listitem +><para +>Omdøber en fil. </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::symlink(const QString &target, const KURL &dest, bool overwrite, bool showProgressInfo)</term> +<listitem +><para +>Opretter et symbolsk link. </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::stat(const KURL &url, bool showProgressInfo)</term> +<listitem +><para +>Finder nogen information om filen, såsom størrelse, ændringstid og rettigheder. Informationen kan hentes fra KIO::StatJob::statResult() efter jobbet er afsluttet. </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::get(const KURL &url, bool reload, bool showProgressInfo)</term> +<listitem +><para +>Overfører data fra en URL. </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::put(const KURL &url, int permissions, bool overwrite, bool resume, bool showProgressInfo)</term> +<listitem +><para +>Overfører data til en URL. </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::http_post(const KURL &url, const QByteArray &data, bool showProgressInfo)</term> +<listitem +><para +>Sender data. Især for HTTP. </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::mimetype(const KURL &url, bool showProgressInfo)</term> +<listitem +><para +>Forsøger at finde URL'ens Mime-type. Typen kan hentes fra KIO::MimetypeJob::mimetype() efter jobbet er afsluttet. </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::file_copy(const KURL &src, const KURL &dest, int permissions, bool overwrite, bool resume, bool showProgressInfo)</term> +<listitem +><para +>Kopierer en enkelt fil. </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::file_move(const KURL &src, const KURL &dest, int permissions, bool overwrite, bool resume, bool showProgressInfo)</term> +<listitem +><para +>Omdøber eller flytter en enkelt fil. </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::file_delete(const KURL &url, bool showProgressInfo)</term> +<listitem +><para +>Sletter en enkelt fil </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::listDir(const KURL &url, bool showProgressInfo)</term> +<listitem +><para +>Laver en liste med indholdet i en mappe. Hver gang nogle nye indgange bliver kendte, sendes signalet KIO::ListJob::entries(). </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::listRecursive(const KURL &url, bool showProgressInfo)</term> +<listitem +><para +>Ligner funktionen listDir(), men denne er rekursiv. </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::copy(const KURL &src, const KURL &dest, bool showProgressInfo)</term> +<listitem +><para +>Kopierer en fil eller mappe. Mapper kopieres rekursivt. </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::move(const KURL &src, const KURL &dest, bool showProgressInfo)</term> +<listitem +><para +>Flytter eller omdøber en fil eller mappe. </para +></listitem> +</varlistentry> + +<varlistentry +><term +>KIO::del(const KURL &src, bool shred, bool showProgressInfo)</term> +<listitem +><para +>Sletter en fil eller mappe. </para +></listitem> +</varlistentry> + +</variablelist> + +</simplesect> + + +<simplesect id="nettransparency-direntries"> +<title +>Mappeindgange</title> + +<para +>Begge jobbene KIO::stat() og KIO::listDir() returnerer deres resultater med typerne UDSEntry og UDSEntryList. Den sidste er defineret som QValueList<UDSEntry>. Forkortelsen UDS betyder "Universal directory service" (Generel mappetjeneste). Principperne bagved dette er at mappeindgangen kun indeholder information som en I/O-slave kan sørge for, ikke mere. For eksempel sørger HTTP-slaven ikke for nogen information om adgangsrettigheder eller ejere af filer. I stedet er en UDSEntry en liste med UDSAtoms. Hvert objekt sørger for en vis information. Den består af en type som opbevares i m_uds, og enten en heltalsværdi i m_long, eller en strengværdi i m_str, afhængig af typen. </para> + +<para +>Følgende typer er for øjeblikket definerede: </para> + +<itemizedlist> + +<listitem +><para +>UDS_SIZE (heltal) - Filens størrelse. </para +></listitem> + +<listitem +><para +>UDS_USER (streng) - Brugeren som ejer filen. </para +></listitem> + +<listitem +><para +>UDS_GROUP (streng): Gruppen som ejer filen. </para +></listitem> + +<listitem +><para +>UDS_NAME (streng): Filnavnet. </para +></listitem> + +<listitem +><para +>UDS_ACCESS (heltal) - Filens rettigheder, som f.eks. opbevares af C-biblioteksfunktionen stat() i feltet st_mode. </para +></listitem> + +<listitem +><para +>UDS_FILE_TYPE (heltal): Filtypen, som f.eks. opbevares af stat() i feltet st_mode. Derfor kan du bruge almindelige makroer fra C-biblioteket, som S_ISDIR, for at kontrollere værdien. Bemærk at data som sørges for af I/O-slaver svarer til stat(), ikke lstat(), dvs. i tilfældet med symbolske link, så er filtyperne typen på filen som linket peger på, ikke selve linket. </para +></listitem> + +<listitem +><para +>UDS_LINK_DEST (streng): I tilfældet med et symbolsk link, navnet på filen som udpeges. </para +></listitem> + +<listitem +><para +>UDS_MODIFICATION_TIME (heltal) - Tiden (med typen time_t) da filen sidst ændredes, som f.eks. opbevares af stat() i feltet st_mtime. </para +></listitem> + +<listitem +><para +>UDS_ACCESS_TIME (heltal) - Tiden da filen sidst blev brugt, som f.eks. opbevares af stat() i feltet st_atime. </para +></listitem> + +<listitem +><para +>UDS_CREATION_TIME (heltal) - Tiden da filen oprettedes, som f.eks. opbevares af stat() i feltet st_ctime. </para +></listitem> + +<listitem +><para +>UDS_URL (streng) - Sørger for en fils URL, hvis den ikke blot er sammensætningen af mappens URL og filnavnet. </para +></listitem> + +<listitem +><para +>UDS_MIME_TYPE (streng): Filens Mime-type </para +></listitem> + +<listitem +><para +>UDS_GUESSED_MIME_TYPE (streng): Mime-type for filen som gættet af slaven. Forskellen til den foregående type er at den som sørges for her ikke skal betragtes som tilforladelig (eftersom at afgøre den på en tilforladelig måde ville være for dyrt). Klassen KRun kontrollerer for eksempel udtrykkelig Mime-typen, hvis den ikke har tilforladelig information. </para +></listitem> + +</itemizedlist> + +<para +>Selv om måden at opbevare information om filer i en <classname +>UDSEntry</classname +> er fleksibel og praktisk ud fra en I/O-slaves synvinkel, er det noget rod at bruge for den som skriver programmet. For eksempel for at finde ud af Mime-typen for filen, skal du løbe gennem hele indholdet og kontrollere om <literal +>m_uds</literal +> er <literal +>UDS_MIME_TYPE</literal +>. Heldigvis, er der en programmeringsgrænseflade som er meget nemmere at bruge: klassen <classname +>KFileItem</classname +>. </para> + +</simplesect> + + +<simplesect id="nettransparency-syncuse"> +<title +>Synkron brug</title> + +<para +>Ofte er KIO's asynkrone programmeringsgrænseflade for kompleks at bruge, og derfor er implementering af fuldstændig asynkronisme ikke en prioritet. I et program som for eksempel kun kan håndtere en dokumentfil af gangen, er der alligevel ikke meget som kan gøres mens programmet henter en fil. I disse enkle tilfælde, er der en meget nemmere programmeringsgrænseflade, i form af et antal statiske funktioner i KIO::NetAccess. For eksempel for at kopiere en fil, bruges: </para> + +<programlisting +>KURL source, target; +source = ...; +target = ... +KIO::NetAccess::copy(source, target); +</programlisting> + +<para +>Funktionen returnerer efter hele kopieringsprocessen er afsluttet. Alligevel så sørger denne metode for en fremgangsdialog, og den sikrer at programmet behandler omtegningsbegivenheder. </para> + +<para +>En særlig interessant kombination af funktioner er <function +>download()</function +> sammen med <function +>removeTempFile()</function +>. Den første henter en fil fra en given URL, og gemmer den i en midlertidig fil med et entydigt navn. Navnet opbevares som det andet argument. <emphasis +>Hvis</emphasis +> URL'en er lokal, hentes filen ikke, men i stedet sættes det andet argument til det lokale filnavn. Funktionen <function +>removeTempFile()</function +> sletter filen som angives af argumentet, hvis filen blev oprettet af den foregående nedtegning. Hvis dette ikke er tilfældet, gør den ingenting. På den måde får man et meget enkelt kodefragment til at indlæse filer, uafhængig af deres sted: </para> + +<programlisting +>KURL url; +url = ...; +QString tempFile; +if (KIO::NetAccess::download(url, tempFile) { + // indlæse filen med navnet tempFile + KIO::NetAccess::removeTempFile(tempFile); +} +</programlisting> + +</simplesect> + + +<simplesect id="nettransparency-metadata"> +<title +>Metadata</title> + +<para +>Som det ses ovenfor, er grænsefladen for I/O-job ganske abstrakt og håndterer ikke nogen udbytning af information mellem programmer og I/O-slaver som er protokolspecifik. Det er ikke altid passendet. Man kan for eksempel give visse parametre til HTTP-slaven for at styre dens cacheopførsel eller sende en mængde cookies sammen med forespørgsler. Til dette behov er et begreb med metadata indført. Når et job oprettes, kan man indstille det ved at tilføje metadata til det. Hvert metadataobjekt består af et par med nøgle og værdi. For eksempel for at forhindre HTTP-slaven fra at hente en URL fra cachen, kan du bruge: </para> + +<programlisting +>void FooClass::reloadPage() +{ + KURL url("http://www.tdevelop.org/index.html"); + KIO::TransferJob *job = KIO::get(url, true, false); + job->addMetaData("cache", "reload"); + ... +} +</programlisting> + +<para +>Samme teknik bruges i den anden retning, dvs. til kommunikation fra slaven til programmet. Metoden <function +>Job::queryMetaData()</function +> spørger efter værdien af en vis nøgle som levereres af slaven. For HTTP-slaven, er et sådant eksempel nøglen <literal +>"modified"</literal +> (ændret), som indeholder datoen da URL'en sidst blev ændret (i form af en streng). Et eksempel på hvordan det kan bruges er følgende: </para> + +<programlisting +>void FooClass::printModifiedDate() +{ + KURL url("http://developer.kde.org/documentation/kde2arch/index.html"); + KIO::TransferJob *job = KIO::get(url, true, false); + connect( job, SIGNAL(result(KIO::Job*)), + this, SLOT(transferResult(KIO::Job*)) ); +} + +void FooClass::transferResult(KIO::Job *job) +{ + QString mimetype; + if (job->error()) + job->showErrorDialog(); + else { + KIO::TransferJob *transferJob = (KIO::TransferJob*) job; + QString modified = transferJob->queryMetaData("modified"); + cout << "Seneste ændring: " << modified << endl; +} +</programlisting> + +</simplesect> + + +<simplesect id="nettransparency-scheduling"> +<title +>Skemalægning</title> + +<para +>Når KIO-programmeringsgrænsefladen bruges, behøver du oftest ikke håndtere detaljerne med at starte I/O-slaver og kommunikere med dem. Det normale brugstilfælde er at starte et job med nogle parametre, og håndtere signalerne som jobbet sender. </para> + +<para +>Bagved scenen er scenariet meget mere kompliceret. Når du opretter et job, lægges det i en kø. Når programmet går tilbage til begivenhedsløkken, tildeles KIO slaveprocesser for jobbene i køen. For det første job som startes, er dette trivielt: en I/O-slave for en passende protokol startes. Efter jobbet (såsom en download fra en HTTP-server) er afsluttet, tages det dog ikke væk med det samme. I stedet tilføjes det til en gruppe med ledige slaver og fjernes efter en vis tid uden aktivitet (for øjeblikket tre minutter). Hvis en ny forespørgsel for samme værtsmaskine og protokol ankommer, genbruges slaven. Den åbenbare fordel er at ved en serie job med samme værtsmaskine, sparer man omkostningen ved at oprette nye processer, og muligvis også at gå gennem adgangskontrol. </para> + +<para +>Naturligvis er genbrug kun mulig når den eksisterende slave allerede har afsluttet sit tidligere job. Hvis en ny forespørgsel ankommer mens en eksisterende slaveproces stadigvæk kører, skal en ny proces startes og bruges. Med brugen i eksemplerne ovenfor af programmeringsgrænsefladen, er der ingen begrænsning på at oprette nye slaveprocesser: hvis man starter en serie download af 20 forskellige filer i række, laver KIO 20 slaveprocesser. Dette system til at tildele slaver til job kaldes <emphasis +>direkte</emphasis +>. Det er ikke altid det mest passende system, eftersom det kan behøve meget hukommelse og give høj belastning både på klient- og servermaskine. </para> + +<para +>Så der er en anden måde. Man kan <emphasis +>skemalægge</emphasis +> job. Hvis man gør det, laves kun et begrænset antal (for øjeblikket tre) slaveprocesser for en protokol. Hvis du opretter flere job endnu det, så tilføjes de i en kø og behandles når en slaveprocess bliver ledig. Det gøres på følgende måde: </para> + +<programlisting +>KURL url("http://developer.kde.org/documentation/kde2arch/index.html"); +KIO::TransferJob *job = KIO::get(url, true, false); +KIO::Scheduler::scheduleJob(job); +</programlisting> + +<para +>En tredje mulighed er <emphasis +>forbindelsesorienteret</emphasis +>. For eksempel for IMAP-slaven, giver det ikke mening at starte flere processer for samme server. Kun en IMAP-forbindelse af gangen skal opretholdes. I dette tilfælde skal programmet udtrykkelig håndtere slavebegrebet. Det skal tildele en slave for en vis forbindelse og derefter tildele alle job som skal gå til samme forbindelse til samme slave. Dette kan igen nemt opnås ved at bruge KIO::Scheduler: </para> + +<programlisting +>KURL baseUrl("imap://[email protected]"); +KIO::Slave *slave = KIO::Scheduler::getConnectedSlave(baseUrl); + +KIO::TransferJob *job1 = KIO::get(KURL(baseUrl, "/INBOX;UID=79374")); +KIO::Scheduler::assignJobToSlave(slave, job1); + +KIO::TransferJob *job2 = KIO::get(KURL(baseUrl, "/INBOX;UID=86793")); +KIO::Scheduler::assignJobToSlave(slave, job2); + +... + +KIO::Scheduler::disconnectSlave(slave); +</programlisting> + +<para +>Du kan kun afbryde slaven efter alle job som blev tildelt den er garanteret at være afsluttet. </para> + +</simplesect> + + +<simplesect id="nettransparency-definingslaves"> +<title +>Definition af en I/O-slave</title> + +<para +>I det følgende beskriver vi hvordan du kan tilføje en ny I/O-slave til systemet. På lignende måde som tjenester, annonceres I/O-slaver for systemet ved at installere en lille konfigurationsfil. Følgende fragment af Makefile.am installerer FTP-protokollen: </para> + +<programlisting +>protocoldir = $(kde_servicesdir) +protocol_DATA = ftp.protocol +EXTRA_DIST = $(mime_DATA) +</programlisting> + +<para +>Indholdet i filen ftp.protocol er følgende: </para> + +<programlisting +>[Protocol] +exec=kio_ftp +protocol=ftp +input=none +output=filesystem +listing=Name,Type,Size,Date,Access,Owner,Group,Link, +reading=true +writing=true +makedir=true +deleting=true +Icon=ftp +</programlisting> + +<para +>Indgangen <literal +>"protocol"</literal +> angiver hvilken protokol som slaven har ansvar for. <literal +>"exec"</literal +> er (i modsætning til hvad man naivt kan forvente sig) navnet på biblioteket som implementerer slaven. Når det er meningen at slaven skal starte, startes programmet <command +>"tdeinit"</command +>, som derefter indlæser biblioteket i sit adresserum. I praksis kan du betragte slaven som kører som en separat proces, også selvom den er implementeret som et bibliotek. Fordelen ved denne mekanisme er at det sparer meget hukommelse, og reducerer tiden som behøves til linkning under kørsel. </para> + +<para +>Linjerne "input" og "output" bruges ikke for øjeblikket. </para> + +<para +>De tilbageværende linjer i filen <literal +>.protocol</literal +> angiver hvilke muligheder slaven har. Generelt er de funktioner som slaven skal implementere meget enklere end de funktioner som KIO-programmeringsgrænsefladen sørger for programmet. Grunden til dette er at komplekse job skemalægges som en følge af deljob. For eksempel for at få en liste over en mappe rekursivt, startes et job for topniveaumappen. For hver undermappe som rapporteres tilbage, startes nye underjob. Skemalægning i KIO sikrer at ikke for mange job er aktive samtidigt. På lignende måde, for at kopiere en fil med en protokol som ikke understøtter kopiering direkte (såsom <literal +>FTP</literal +>-protokollen), kan KIO læse kildefilen og derefter skrive data til målfilen. For at dette skal virke, skal <literal +>.protocol</literal +> annoncere handlingerne som slaven understøtter. </para> + +<para +>Eftersom slaver indlæses som delte biblioteker, men udgør fuldstændige programmer, ser deres kodeskelet noget anderledes ud sammenlignet med normale delte biblioteks-plugin. Funktionen som kaldes for at starte slaven kaldes <function +>kdemain()</function +>. Denne funktion gør en del initieringer, og går derefter ind i en begivenhedsløkke og venter på forespørgsler fra programmet som bruger den. Dette ser ud som følger: </para> + +<programlisting +>extern "C" { int kdemain(int argc, char **argv); } + +int kdemain(int argc, char **argv) +{ + KLocale::setMainCatalogue("tdelibs"); + KInstance instance("kio_ftp"); + (void) KGlobal::locale(); + + if (argc != 4) { + fprintf(stderr, "Usage: kio_ftp protocol " + "domain-socket1 domain-socket2\n"); + exit(-1); + } + + FtpSlave slave(argv[2], argv[3]); + slave.dispatchLoop(); + return 0; +} +</programlisting> + +</simplesect> + + +<simplesect id="nettransparency-implementingslaves"> +<title +>Implementering af en I/O-slave</title> + +<para +>Slaver implementeres som delklasser til <classname +>KIO::SlaveBase</classname +> (FtpSlave i eksemplet ovenfor). På den måde svarer handlingerne i <literal +>.protocol</literal +> til visse virtuelle funktioner i <classname +>KIO::SlaveBase</classname +> som implementeringen af slaven skal omimplementere. Her er en liste med mulige handlinger og tilsvarende virtuelle funktioner: </para> + +<variablelist> + +<varlistentry +><term +>læse: Læser data fra en URL</term> +<listitem +><para +>void get(const KURL &url)</para +></listitem +></varlistentry> + +<varlistentry +><term +>skrive: Skriver data til en URL og opretter filen hvis den ikke findes endnu.</term> +<listitem +><para +>void put(const KURL &url, int permissions, bool overwrite, bool resume)</para +></listitem +></varlistentry> + +<varlistentry +><term +>flytte: Omdøber filen.</term> +<listitem +><para +>void rename(const KURL &src, const KURL &dest, bool overwrite)</para +></listitem +></varlistentry> + +<varlistentry +><term +>slette: Fjerner en fil eller mappe.</term> +<listitem +><para +>void del(const KURL &url, bool isFile)</para +></listitem +></varlistentry> + +<varlistentry +><term +>liste: Giver en liste med indholdet i en mappe.</term> +<listitem +><para +>void listDir(const KURL &url)</para +></listitem +></varlistentry> + +<varlistentry +><term +>oprette mappe: Opretter en mappe.</term> +<listitem +><para +>void mkdir(const KURL &url, int permissions)</para +></listitem +></varlistentry> + +</variablelist> + +<para +>Desuden er der funktioner som kan omimplementeres, og ikke er på listen i filen <literal +>.protocol</literal +>. For disse handlinger, afgør KIO automatisk om de understøttes eller ej (dvs. standardimplementationen returnerer en fejl). </para> + +<variablelist> + +<varlistentry +><term +>Leverer information om en fil, ligner C-funktionen stat().</term> +<listitem +><para +>void stat(const KURL &url)</para +></listitem +></varlistentry> + +<varlistentry +><term +>Ændrer adgangsrettigheder for en fil.</term> +<listitem +><para +>void chmod(const KURL &url, int permissions)</para +></listitem +></varlistentry> + +<varlistentry +><term +>Afgør Mime-type for en fil.</term> +<listitem +><para +>void mimetype(const KURL &url)</para +></listitem +></varlistentry> + +<varlistentry +><term +>Kopierer en fil.</term> +<listitem +><para +>copy(const KURL &url, const KURL &dest, int permissions, bool overwrite)</para +></listitem +></varlistentry> + +<varlistentry +><term +>Opretter et symbolsk link.</term> +<listitem +><para +>void symlink(const QString &target, const KURL &dest, bool overwrite)</para +></listitem +></varlistentry> + +</variablelist> + +<para +>Alle disse implementationer skal slutte af med et af to kald: Hvis handlingen lykkedes, skal de kalde <literal +>finished()</literal +>. Hvis en fejl opstod, skal de kalde <literal +>error()</literal +> med en fejlkode som første argument og en streng som andet. Mulige fejlkoder er på listen som nummereringstypen <type +>KIO::Error</type +>. Det andet argument er oftest URL'en det drejer sig om. Den bruges f.eks. i <function +>KIO::Job::showErrorDialog()</function +> for at parametrisere fejlmeddelelsen som er læsbart af brugeren. </para> + +<para +>For slaver som svarer til netværksprotokoller, kan det være interessant at omimplementere metoden <function +>SlaveBase::setHost()</function +>. Den kaldes for at fortælle slaveprocessen om værtsmaskine og port, og brugernavn og kodeord der skal bruges for at logge på. Generelt kan metadata som angives af programmet hentes med <function +>SlaveBase::metaData()</function +>. Du kan kontrollere om metadata med en vis nøgle findes med <function +>SlaveBase::hasMetaData()</function +>. </para> + +</simplesect> + + +<simplesect id="nettransparency-communication"> +<title +>Kommunikation tilbage til programmet</title> + +<para +>Diverse handlinger som implementeres i en slave, behøver en måde at sende data tilbage til programmet som bruger slaveprocessen. </para> + +<itemizedlist> + +<listitem +><para +><function +>get()</function +> sender datablokke. Det gøres med <function +>data()</function +>, som bruger argumentet <classname +>QByteArray</classname +>. Du behøver naturligvis ikke sende al data på en gang. Hvis du sender en stor fil, så kald <function +>data()</function +> med mindre datablokke, så programmet kan behandle dem. Kald <function +>finished()</function +> når overførslen er klar. </para +></listitem> + +<listitem +><para +><function +>listDir()</function +> rapporterer information om indgangene i en mappe. Kald <function +>listEntries()</function +> med en <classname +>KIO::UDSEntryList</classname +> som argument, for dette formål. På tilsvarende måde som <function +>data()</function +>, kan du kalde den flere gange. Når du er klar, så kald <function +>listEntry()</function +> med det andet argument sat til true. Du kan også kalde <function +>totalSize()</function +> for at rapportere det totale antal mappeindgange, hvis det er kendt. </para +></listitem> + +<listitem +><para +><function +>stat()</function +> rapporterer information om en fil, såsom størrelse, Mime-type, etc. Sådan information pakkes i en <classname +>KIO::UDSEntry</classname +>, som beskrives nedenfor. Brug <function +>statEntry()</function +> for at sende et sådant objekt til programmet. </para +></listitem> + +<listitem +><para +><function +>mimetype()</function +> kalder <function +>mimeType()</function +> med et strengargument. </para +></listitem> + +<listitem +><para +><function +>get()</function +> og <function +>copy()</function +> vil måske sørge for fremgangsinformation. Dette gøres med metoderne <function +>totalSize()</function +>, <function +>processedSize()</function +> og <function +>speed()</function +>. Den totale størrelse og den behandlede størrelse rapporteres som byte, og hastigheden som byte pr sekund. </para +></listitem> + +<listitem +><para +>Du kan sende vilkårlige nøgle/værdipar af metadata med <function +>setMetaData()</function +>. </para +></listitem> + +</itemizedlist> + +</simplesect> + + +<simplesect id="nettransparency-interacting"> +<title +>Kommunikation med brugeren</title> + +<para +>Ind imellem skal en slave kommunikere med brugeren. Eksempler kan være informative meddelelser, dialoger til godkendelseskontrol og bekræftelsesdialoger når en fil er ved at blive overskrevet. </para> + +<itemizedlist> + +<listitem +><para +><function +>infoMessage()</function +>: Dette er for informativ tilbagemelding, såsom meddelelsen "Henter data fra <værtsmaskine>" fra HTTP-slaven, som ofte vises i programmets statuslinje. På programsiden, svarer metoden til signalet <function +>KIO::Job::infoMessage()</function +>. </para +></listitem> + +<listitem +><para +><function +>warning()</function +>: Viser en advarsel i et meddelelsesfelt med <function +>KMessageBox::information()</function +>. Hvis et meddelelsesfelt stadigvæk vises fra et tidligere kald af warning() fra samme underproces, sker der ingenting. </para +></listitem> + +<listitem +><para +><function +>messageBox()</function +>: Denne er endnu udførligere end den tidligere metode. Den tillader at et meddelelsesfelt med tekst og titel og nogle knapper vises. Se nummereringstypen <type +>SlaveBase::MessageBoxType</type +> som reference. </para +></listitem> + +<listitem +><para +><function +>openPassDlg()</function +>: Viser en dialog til at indtaste brugernavn og kodeord. </para +></listitem> + +</itemizedlist> + +</simplesect> + +</sect1> + +</chapter> + + + +<appendix id="misc"> +<title +>Licenser</title> + +&underFDL; +&underGPL; + +</appendix> + +</book> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/Makefile.am b/tde-i18n-da/docs/tdevelop/tdevelop/Makefile.am new file mode 100644 index 00000000000..29f2e0115ae --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/Makefile.am @@ -0,0 +1,4 @@ +KDE_LANG = da +SUBDIRS = $(AUTODIRS) +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/Makefile.in b/tde-i18n-da/docs/tdevelop/tdevelop/Makefile.in new file mode 100644 index 00000000000..54cba28335e --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/Makefile.in @@ -0,0 +1,635 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = docs/tdevelop/tdevelop +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +#>- html-recursive info-recursive install-data-recursive \ +#>- install-dvi-recursive install-exec-recursive \ +#>- install-html-recursive install-info-recursive \ +#>- install-pdf-recursive install-ps-recursive install-recursive \ +#>- installcheck-recursive installdirs-recursive pdf-recursive \ +#>- ps-recursive uninstall-recursive +#>+ 7 +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CONF_FILES = @CONF_FILES@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +GMSGFMT = @GMSGFMT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDECONFIG = @KDECONFIG@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_RPATH = @KDE_RPATH@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPSUBDIRS = @TOPSUBDIRS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +X_RPATH = @X_RPATH@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +#>- bindir = @bindir@ +#>+ 2 +DEPDIR = .deps +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libs_htmldir = @kde_libs_htmldir@ +kde_libs_prefix = @kde_libs_prefix@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +tdeinitdir = @tdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ +KDE_LANG = da +#>- SUBDIRS = $(AUTODIRS) +#>+ 1 +SUBDIRS =. +KDE_DOCS = AUTO +KDE_MANS = AUTO +#>- all: all-recursive +#>+ 1 +all: docs-am all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdevelop/tdevelop/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu docs/tdevelop/tdevelop/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdevelop/tdevelop/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdevelop/tdevelop/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdevelop/tdevelop/Makefile.in +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +#>- distdir: $(DISTFILES) +#>+ 1 +distdir: distdir-nls $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +#>- uninstall: uninstall-recursive +#>+ 1 +uninstall: uninstall-docs uninstall-nls uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +#>- clean: clean-recursive +#>+ 1 +clean: kde-rpo-clean clean-recursive + +#>- clean-am: clean-generic mostlyclean-am +#>+ 1 +clean-am: clean-docs clean-bcheck clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +#>- install-data-am: +#>+ 1 +install-data-am: install-docs install-nls + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +#>+ 2 +KDE_DIST=unixdev.docbook tdevelop-install.docbook app-files.docbook file-browsers.docbook index.docbook applicationwizard.docbook getting-started.docbook plugin-tools.docbook project-management.docbook tdevelop-scripting.docbook cvs.docbook setup.docbook credits.docbook documentation.docbook commands.docbook app-uimodes-examples.docbook index.cache.bz2 app-menu.docbook survey-manual.docbook editing.docbook app-misc-info.docbook app-changelog.docbook nutshell.docbook project-advanced.docbook adv-build-management.docbook Makefile.in class-browsers.docbook tdevelop-survey.docbook debugger.docbook Makefile.am + +#>+ 24 +index.cache.bz2: $(srcdir)/index.docbook $(KDE_XSL_STYLESHEET) app-uimodes-examples.docbook editing.docbook commands.docbook documentation.docbook file-browsers.docbook tdevelop-install.docbook debugger.docbook applicationwizard.docbook index.docbook app-files.docbook app-menu.docbook project-management.docbook cvs.docbook adv-build-management.docbook credits.docbook tdevelop-survey.docbook tdevelop-scripting.docbook unixdev.docbook survey-manual.docbook nutshell.docbook project-advanced.docbook plugin-tools.docbook class-browsers.docbook app-changelog.docbook getting-started.docbook app-misc-info.docbook setup.docbook + @if test -n "$(MEINPROC)"; then echo $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; fi + +docs-am: index.cache.bz2 + +install-docs: docs-am install-nls + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/tdevelop + @if test -f index.cache.bz2; then \ + echo $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/tdevelop/; \ + $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/tdevelop/; \ + elif test -f $(srcdir)/index.cache.bz2; then \ + echo $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/tdevelop/; \ + $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/tdevelop/; \ + fi + -rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/tdevelop/common + $(LN_S) $(kde_libs_htmldir)/$(KDE_LANG)/common $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/tdevelop/common + +uninstall-docs: + -rm -rf $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/tdevelop + +clean-docs: + -rm -f index.cache.bz2 + + +#>+ 13 +install-nls: + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/tdevelop + @for base in app-uimodes-examples.docbook editing.docbook commands.docbook documentation.docbook file-browsers.docbook tdevelop-install.docbook debugger.docbook applicationwizard.docbook index.docbook app-files.docbook app-menu.docbook project-management.docbook cvs.docbook adv-build-management.docbook credits.docbook tdevelop-survey.docbook tdevelop-scripting.docbook unixdev.docbook survey-manual.docbook nutshell.docbook project-advanced.docbook plugin-tools.docbook class-browsers.docbook app-changelog.docbook getting-started.docbook app-misc-info.docbook setup.docbook ; do \ + echo $(INSTALL_DATA) $$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/tdevelop/$$base ;\ + $(INSTALL_DATA) $(srcdir)/$$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/tdevelop/$$base ;\ + done + +uninstall-nls: + for base in app-uimodes-examples.docbook editing.docbook commands.docbook documentation.docbook file-browsers.docbook tdevelop-install.docbook debugger.docbook applicationwizard.docbook index.docbook app-files.docbook app-menu.docbook project-management.docbook cvs.docbook adv-build-management.docbook credits.docbook tdevelop-survey.docbook tdevelop-scripting.docbook unixdev.docbook survey-manual.docbook nutshell.docbook project-advanced.docbook plugin-tools.docbook class-browsers.docbook app-changelog.docbook getting-started.docbook app-misc-info.docbook setup.docbook ; do \ + rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/tdevelop/$$base ;\ + done + + +#>+ 5 +distdir-nls: + for file in app-uimodes-examples.docbook editing.docbook commands.docbook documentation.docbook file-browsers.docbook tdevelop-install.docbook debugger.docbook applicationwizard.docbook index.docbook app-files.docbook app-menu.docbook project-management.docbook cvs.docbook adv-build-management.docbook credits.docbook tdevelop-survey.docbook tdevelop-scripting.docbook unixdev.docbook survey-manual.docbook nutshell.docbook project-advanced.docbook plugin-tools.docbook class-browsers.docbook app-changelog.docbook getting-started.docbook app-misc-info.docbook setup.docbook ; do \ + cp $(srcdir)/$$file $(distdir); \ + done + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/tdevelop/tdevelop/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/tdevelop/tdevelop/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/tdevelop/tdevelop/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-recursive + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/adv-build-management.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/adv-build-management.docbook new file mode 100644 index 00000000000..fee73053452 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/adv-build-management.docbook @@ -0,0 +1,172 @@ +<chapter id="adv-build-management"> +<title +>Avanceret byggehåndtering</title> +<indexterm zone="adv-build-management" +><primary +>&automake;</primary +></indexterm> + +<sect1 id="buildconfigurations"> +<title +>Flere byggeindstillinger</title> +<indexterm zone="buildconfigurations" +><primary +>byggeindstillinger</primary +><secondary +>flere</secondary +></indexterm> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect1 +> <!-- buildconfigurations --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="crosscompiling"> +<title +>Krydskompilering</title> +<indexterm zone="crosscompiling" +><primary +>krydskompilering</primary +></indexterm> +<indexterm zone="crosscompiling" +><primary +>kompilering</primary +><secondary +>kryds</secondary +></indexterm> +<indexterm zone="crosscompiling" +><primary +><option +>--host</option +></primary +></indexterm> + +<para +>Hvis du har passende krydskompilere tilgængelige, kan du kompilere dine programmer for processorer og operativsystemer som adskiller sig fra systemet hvor &tdevelop; og oversætteren kører. &GNU;-oversætteren, &gcc;, kan konfigureres og kompileres som en krydsoversætter hvis du kompilerer den selv. Rådspørg <ulink url="info://gcc/Cross-Compiler" +>GCC infosiderne</ulink +> for mere information. Visse Linux-distributioner sørger også for binære pakker. </para> + +<para +>En automake-baseret pakke kan let krydskompileres ved at angive flaget <option +>--host</option +> til configure-scriptet og indstille miljøvariablerne <envar +>CC</envar +> og <envar +>CXX</envar +> til tilsvarende krydsoversættere. Ofte vil du skifte mellem en krydskompileret version af programmet, og en som er kompileret for udviklingssystemet. For at gøre dette, er det en fordel at bruge muligheden i &tdevelop; at oprette flere byggekonfigurationer, som forklaret under <xref linkend="buildconfigurations"/>. Når du har oprettet en ny byggekonfiguration for krydskompilering i dialogen <menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Projekttilvalg...</guimenuitem +></menuchoice +>, tilføj så flaget </para> + +<screen +><option +>--host=</option +><replaceable +>platform</replaceable +></screen> + +<para +>til configure-flagene. Værdien <replaceable +>platform</replaceable +> er en kombination af formen </para> + +<programlisting +>cpu-forhandler-operativsystem</programlisting> +<para +>eller</para> +<programlisting +>cpu-forhandler-kerne-operativsystem</programlisting> + +<para +>For mange kombinationer kan du bruge en kortform, for eksempel <wordasword +>i386-linux</wordasword +> eller <wordasword +>arm-elf</wordasword +>. </para> + +</sect1 +> <!-- crosscompiling --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="qtembedded"> +<title +>Qt/Embedded</title> +<indexterm zone="qtembedded" +><primary +>indlejret</primary +><secondary +>Qt</secondary +></indexterm> +<indexterm zone="qtembedded" +><primary +>Qt/Embedded</primary +></indexterm> +<indexterm zone="qtembedded" +><primary +>Qtopia</primary +></indexterm> +<indexterm zone="qtembedded" +><primary +>rammebuffer</primary +></indexterm> + +<para +>&qte; er en version af &Qt;-biblioteket som ikke bruger X-window systemet, men tegner direkte i rammebufferen på Linuxsystemer. Den er derfor interessant for indlejrede systemer som har hårde begrænsninger for hukommelsesbrugen i hele systemet. Dens programmeringsgrænseflade stemmer fuldstændigt overens med X11-versionen. </para> + +<para +>At udvikle et program for &qte; med &tdevelop; adskiller sig ikke meget fra at udvikle et program for X11-versionen af &Qt;. I virkeligheden kan du bruge samme grundkode for begge versioner. Hvis du bruger projekthåndtering med autoprojekt, skifter du til den indlejrede version ved at sende flaget <option +>--enable-embedded</option +> til configure-scriptet. Du kan indstille det i dialogen <menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Projektindstillinger...</guimenuitem +></menuchoice +> under <guilabel +>Indstilling af configure</guilabel +>. Med flaget <option +>--with-qt-dir=KATALOG</option +>, indstiller du mappen hvor &qte; er installeret. </para> + +<para +>Efter at have konfigureret og kompileret programmet med disse flag, linkes det med biblioteket <filename +>libqpe.so</filename +>. Denne version af programmet kører ikke normalt når du bruger X11. For at teste den, kør den ved hjælp af programmet <application +>qvfb</application +> (Qt's virtuelle rammebuffer). Det gøres ved at starte <application +>qvfb</application +> og derefter starte programmet med </para> + +<screen +><command> +program <option +>-qws</option +> <option +>-display QVFb:0</option> +</command +></screen> + +<para +>Når du har en version af programmet som virker, vil du naturligvis bruge den på målprocessoren. Det kan formodentlig være bekvemt at kunne oprette flere byggekonfigurationer, som forklaret ovenfor, så du hurtigt kan skifte mellem versionen som kører på udviklingssystemet og versionen som kører på målsystemet. </para> + +<para +>Programmer for &qte; kør normalt som enkelte programmer på enheden de er konstruerede for. Trolltech understøtter også Qtopia, som er en samling programmer for personlig information, web-læsning og diverse andre områder som fungerer sammen på en konsekvent måde. Det er for eksempel standardomgivelsen på Sharp Zaurus. Du kan skrive programmer som passer ind i denne omgivelse ved at bruge Qtopias udviklingsmiljø (SDK). Det medfører at dit program skal være en delklasse til <classname +>QPEApplication</classname +> og det skal linkes med biblioteket <filename +>libqpe.so</filename +>. Hvis du udvikler programmet med projekthåndteringen autoprojekt, skal du tilføje <option +>--enable-qtopia</option +> til konfigurationsflagene. </para> + +</sect1 +> <!-- qtembedded --> + +</chapter +> <!-- adv-build-management --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/app-changelog.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/app-changelog.docbook new file mode 100644 index 00000000000..99903eb423a --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/app-changelog.docbook @@ -0,0 +1,89 @@ +<appendix id="app-changelog"> +<title +>Ændringer</title> +<sect1 id="changes"> +<title +>Ændringer i dokumentet</title> + +<itemizedlist> + <listitem> + <para +>2003-01-03 Bernd Gehrmann, Caleb Tennis <itemizedlist> + <listitem> + <para +>oprindelig layout af håndbogen</para> + </listitem> + <listitem> + <para +>disposition for indholdet i mange kapitler</para> + </listitem> + </itemizedlist> + </para> + </listitem> + + + <listitem> + <para +>2004-08-01 Bernd Pol, Ian Wadham <itemizedlist> + <listitem> + <para +>håndbogen lettere reorganiseret</para> + </listitem> + <listitem> + <para +>nogle manglende kapitler skrevet</para> + </listitem> + </itemizedlist> + </para> + </listitem> + + <listitem> + <para +>2005-05-02 Volker Paul — Mange ændringer, inklusive: <itemizedlist> + <listitem> + <para +>opdelt i en fil per kapitel og appendiks</para> + </listitem> + <listitem> + <para +>tilføjelse af kommandoreference sorteret ifølge menu (beskrivelser endnu ikke fuldstændige)</para> + </listitem> + <listitem> + <para +>vejledning for programguiden i getting-started.docbook</para> + </listitem> + <listitem> + <para +>reorganisering af kapitler, inspireret af Konquerors håndbog</para> + </listitem> + <listitem> + <para +>flyttede Installation, Udvikling på Unix, <quote +>I korthed</quote +> til appendiks</para> + </listitem> + <listitem> + <para +>omskrev appendiks om plugin, inklusive generering af pluginliste med listplugins.sh</para> + </listitem> + </itemizedlist> + </para> + <para +>Stadig langt fra komplet, men et lille skridt fremad.</para> + </listitem> + + <listitem> + <para +>2006-05-20 Bernd Pol — Udfyldte nogle flere huller med <quote +>endnu ikke skrevet</quote +>:</para> + </listitem> + +</itemizedlist> + +</sect1 +> <!-- changes --> +</appendix +> <!-- app-changelog --> + +<!-- ====================================================================== --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/app-files.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/app-files.docbook new file mode 100644 index 00000000000..f7ef73c7990 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/app-files.docbook @@ -0,0 +1,1686 @@ +<appendix id="app-files"> +<!-- LWatts (2005-04-30): A lot of this might be better as variable lists, --> +<!-- but it's not that big a deal. Something to be done only when there's --> +<!-- a lot of textual changes needed here (e.g., maybe never ) --> + +<appendixinfo> + <authorgroup> + <author +><firstname +>Bernd</firstname +><surname +>Pol</surname +></author> + <!-- ROLES_OF_TRANSLATORS --> + </authorgroup> +</appendixinfo> + +<title +>Konfigurationsfiler brugt af &tdevelop;</title> + +<para +>&tdevelop; bruger en række konfigurationsfiler som er fordelt blandt flere kataloger. Der skelnes mellem to hovedgrupper af konfigurationsfiler: </para> +<simplelist> + <member +><link linkend="app-files-default" +>&tdevelop; Standardkonfigurations</link +> — filer der blev indstillet da &tdevelop; blev installeret. </member> + <member +><link linkend="app-files-user" +>Brugerorienteret konfiguration</link +> — filer som indeholder brugerens ændringer af standardindstillingerne lavet af &tdevelop; selv og dens plugin. </member> +</simplelist> + +<sect1 id="app-files-default"> +<title +>&tdevelop; Standardkonfiguration.</title> + +<para +>Ved installation lægger &tdevelop; nogle standardfiler med information til opsætnings- og konfigurationsformål, i underkatalogerne i <filename class="directory" +>$<envar +>KDEDIR</envar +></filename +> installationskataloget (normalt noget lignende <filename class="directory" +>/opt/kde</filename +>, <filename class="directory" +>/usr/local/kde</filename +>, eller et andet brugerdefineret installationskatalog. Se <link linkend="tdevelop-install" +>Installering af &tdevelop;</link +>). </para> + +<sect2 id="app-files-default-config"> +<title +>Standardopsætning af &tdevelop;</title> + +<para +>Der er kun en &tdevelop;-specifik standardkonfigurationsfil i kataloget<filename class="directory" +>$<envar +>KDEDIR</envar +>/share/config/</filename +>: </para> +<variablelist> + <varlistentry> + <term +><filename +>tdeveloprc</filename +></term> + <listitem +><para +>Denne fil indeholder de basale indstillinger &tdevelop; skal bruge for at kunne starte. Den kopieres til brugernes <filename class="directory" +>$<envar +>KDEDIR</envar +>/share/config</filename +> katalog når &tdevelop; ikke finder en <filename +>tdeveloprc</filename +> fil der ved opstart af programmet. </para +></listitem> + </varlistentry> +</variablelist> + +</sect2 +> <!-- app-files-default-config --> + +<sect2 id="app-files-default-apps"> +<title +>Programspecifikke standarder</title> + +<para +>De fleste funktioner i &tdevelop; stilles til rådighed af KParts. De er egentlig bare programmer der er specialdesignet til at køre i et &tdevelop;-framework (se oversigten i <link linkend="plugin-tools" +>Plugin-værktøjer</link +> appendikset). Hver KPart-program har sit eget sæt af konfigurationsfiler hvis standarder lagres i flere underkataloger <filename class="directory" +>$<envar +>KDEDIR</envar +>/share/apps/</filename +> i installationskataloget. </para> + +<para +>Der er temmelig mange underkataloger med standardkonfigurationsfiler i <filename class="directory" +>$<envar +>KDEDIR</envar +>/share/apps/</filename +>, hvis navne alle starter med et <filename +>kdev</filename +> stavelse. De fleste er kun til intern brug i &tdevelop;. De kan være grupperet for overskuelighedens skyld og læsbarhed således: <simplelist> + <member +><link linkend="app-files-default-apps-stdalone" +>Selvstændigt program</link +></member> + <member +><link linkend="app-files-default-apps-task" +>Opgavespecifikke parter</link +></member> + <member +><link linkend="app-files-default-apps-project" +>Projektoprettelsesparter</link +></member> + <member +><link linkend="app-files-default-apps-lang" +>Sprogspecifikke parter</link +></member> +</simplelist> +</para> + +<itemizedlist> + <listitem id="app-files-default-apps-stdalone" +><itemizedlist> + <title +>Selvstændige programmer</title> + <listitem> + <para +><filename class="directory" +>tdevelop/</filename +> — indeholder til til indstilling af det integrerede &tdevelop; udviklingsmiljø:</para> + <itemizedlist> + <listitem +><para +><filename class="directory" +>licenser/</filename +> — indeholder forskellige licenstekster.</para +></listitem> + <listitem +><para +><filename class="directory" +>pics/</filename +>: Indeholder billedfilerne som bruges af startskærmene i &tdevelop;, &tdevelop; assistent og &tdevelop; designer.</para +></listitem> + <listitem +><para +><filename class="directory" +>profiler/</filename +> — indeholder standard plugin-profilindstillinger. (Aktuelt findes der kun en <filename +>lillebitte</filename +> profil, som definerer et minimalt sæt af aktive &tdevelop; plugin.)</para +></listitem> + <listitem +><para +><filename +>eventsrc</filename +> — indeholder en masse <quote +>Proces successfuld</quote +> lokaliseringsstrenge.</para +></listitem> + <listitem +><para +><filename +>tdevelopui.rc</filename +> — sørger for de basale menu- og værktøjslinjeindgange &tdevelop; bruger.</para +></listitem> + <listitem +><para +><filename +>kdevhtml_partui.rc</filename +> — søger for <guimenuitem +>Udskriv...</guimenuitem +>-indgangen i <guimenu +>Fil</guimenu +>-menuen, en <guimenuitem +>Kopiér</guimenuitem +> indgang i <guimenu +>Redigér</guimenu +>-menuen og <guilabel +>Tilbage</guilabel +> og <guilabel +>Fremad</guilabel +>-pile i <guilabel +>Browser-værktøjslinjen</guilabel +> hvis der ses på en &HTML;-fil fra <guilabel +>Dokumentation</guilabel +>s-plugin.</para +></listitem> + </itemizedlist> + </listitem> + <listitem +><para +><filename class="directory" +>kdevassistant/</filename +> — sørger for menuen og værktøjslinjer i provides the menu and tool bars of the selvstændige &tdevelop; Assistant dokumentations-browser.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevdesigner/</filename +> og <filename class="directory" +>kdevdesignerpart/</filename +> — sørger for menu- og værktøjslinjer i den selvstændige &tdevelop; Designer.</para +></listitem> + </itemizedlist +></listitem> + + <listitem +><itemizedlist id="app-files-default-apps-task"> + <title +>Opgavespecifikke dele</title> + <listitem id="app-files-default-abbrev"> + <para +><filename class="directory" +>kdevabbrev/</filename +> — indeholder filer der bruges af <guilabel +>Forkortelses</guilabel +>-plugin:</para> + <itemizedlist> + <listitem +><para +><filename class="directory" +>sources/</filename +> — indeholder definitioner af nøgleord, der bruges af <guilabel +>Udvid tekst</guilabel +>-kommandoen.</para +></listitem> + <listitem +><para +><filename class="directory" +>templates/</filename +> — indeholder skabelondefinitionsfiler der bruges af <guilabel +>Udvid forkortelse</guilabel +>-kommandoen.</para +></listitem> + <listitem +><para +><filename +>kdevabbrev.rc</filename +> — sørger for <guimenuitem +>Udvid tekst</guimenuitem +> og <guimenuitem +>Udvid forkortelse</guimenuitem +> indgangene i <guimenu +>Redigér</guimenu +>-menuen.</para +></listitem> +</itemizedlist> + </listitem> + <listitem id="app-files-default-appwizard"> + <para +><filename class="directory" +>kdevappwizard/</filename +> — indeholder filer der bruges af &appwizard; part:</para> + <itemizedlist> + <listitem +><para +><filename class="directory" +>importfiles/</filename +> — indeholder<filename +>.tdevelop</filename +> projektfiler som kontrollerer initialiseringen af et nyt projekt.</para +></listitem> + <listitem +><para +><filename class="directory" +>imports/</filename +> — indeholder skabeloner til opsætning af projektspecifikke <filename +>.desktop</filename +>-filer.</para +></listitem> + <listitem +><para +><filename class="directory" +>template-common/</filename +> — indeholder forskellige filerder ofte bruges i projektkildekatalogerne.</para +></listitem> + <listitem +><para +><filename class="directory" +>templates/</filename +> — indeholder konfigurationsfiler som beskriver informationen der skal inkluderes i et givet projektkatalog.</para +></listitem> + <listitem +><para +><filename +>*.png</filename +> — forhåndsvisningsbilleder af projekter, der bruges af &appwizard;.</para +></listitem> + <listitem +><para +><filename +>*.tar.gz</filename +> — tar-arkiver der indeholder kildekodefiler der skal inkluderes i et nyligt oprettet projektkatalog.</para +></listitem> + </itemizedlist> + </listitem> + <listitem +><para +><filename class="directory" +>kdevastyle/</filename +> — sørger for <guimenuitem +>Formatér kildekode igen</guimenuitem +>-indgangen i <guimenu +>Redigér</guimenu +>-menuen.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevautoproject/</filename +> — sørger for de fleste indgange i <guimenu +>Byg</guimenu +>-menuen og <guilabel +>Byg værktøjslinje (&tdevelop;) </guilabel +>-værktøjslinjen.</para +></listitem> + <listitem> + <para +><filename class="directory" +>kdevclassview/</filename +> — indeholder filer der bruges af <guilabel +>Klassevisning</guilabel +>-plugin:</para> + <itemizedlist> + <listitem +><para +><filename class="directory" +>pics/</filename +> — indeholder ikoner der bruges i <guilabel +>Klasser</guilabel +>-klassevisningstræet.</para +></listitem> + <listitem +><para +><filename +>kdevclassview.tc</filename +> — sørger for <guimenuitem +>Klasse arve-diagram</guimenuitem +>-indgangen i <guimenu +>Projekter</guimenu +>-menuen, såvel som kombinationsfeltet til klassenavigering i <guilabel +>Browser-værktøjslinjen</guilabel +>.</para +></listitem> + </itemizedlist> + </listitem> + <listitem +><para +><filename class="directory" +>kdevcloser/</filename +> —sørger for <guimenu +>Vindue</guimenu +>-menuens lukke-indgange.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevctags/</filename +> — sørger for <guimenuitem +>CTags</guimenuitem +>-indgangen i <guimenu +>Værktøjer</guimenu +>-menuen, til <guilabel +>CTags forende</guilabel +>-projekt-plugin.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevcvsservice/</filename +> — sørger for ikonen der bruges af <guilabel +>CvsService</guilabel +>-fanebladet og et kort skal-script til at føje nye indgange til &cvs;-lageret, begge bruges af <guilabel +>CVS Integration</guilabel +> projekt-plugin.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevdebugger/</filename +> — sørger for <guimenu +>Fejlsøg</guimenu +>-menuindgangene til <guilabel +>Fejlsøger forende</guilabel +>-projekt-plugin.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevdiff/</filename +> — sørger for <guimenuitem +>Diff-fremviser</guimenuitem +>-indgangen i <guimenu +>Værktøjer</guimenu +>-menuen.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevdistpart/</filename +> — sørger for <guimenuitem +>Distribution & publicering</guimenuitem +>-indgangen i <guimenu +>Projekt</guimenu +>-menuen til <guilabel +>Endelig pakning</guilabel +> project plugin.</para +></listitem> + <listitem id="app-files-default-kdevdoc"> + <para +><filename class="directory" +>kdevdokumentation</filename +> — indeholder filer der bruges af <guilabel +> Dokumentation</guilabel +>s-plugin:</para> + <itemizedlist> + <listitem +><para +><filename class="directory" +>en/</filename +> og <filename class="directory" +>pics/</filename +> — indeholder filer der bruges af <application +>htdig</application +> søgeværktøjet.</para +></listitem> + <listitem +><para +><filename class="directory" +>indholdsfortegnelse/</filename +> — indeholder standard &tdevelop;-dokumentationens beskrivelsesfiler (se beskrivelse i <link linkend="toc-file-structure" +>Basal struktur af &tdevelop; indholdsfortegnelse Filer</link +>.</para +></listitem> + <listitem +><para +><filename +>kdevpart_dokumentation.rc</filename +> — sørger for de søgningsrelaterede indgange i menuen <guimenu +>Hjælp</guimenu +>.</para +></listitem> + </itemizedlist> + </listitem> + <listitem +><para +><filename class="directory" +>kdevdoxygen/</filename +> — sørger for menuindgangene til <guilabel +>Doxygen-understøttelse</guilabel +> projekt plugin.</para +></listitem> + <listitem id="app-files-default-filecreate"> + <para +><filename class="directory" +>kdevfilecreate/</filename +> — indeholder filer brugt af guiden <guilabel +>Ny fil</guilabel +>. <itemizedlist> + <listitem +><para +><filename class="directory" +>filskabeloner/</filename +> — sørger for tekstskelettet der lægges i nye kildekodefiler af en given type.</para +></listitem> + <listitem +><para +><filename +>kdevpart_filecreate.rc</filename +> — sørger for indgangen <guimenuitem +>Ny</guimenuitem +> i menuen <guimenu +>Fil</guimenu +>.</para +></listitem> + <listitem +><para +><filename +>skabelon-info.xml</filename +> — indeholder beskrivelser af de til rådighed værende filtyper der skal vises i værktøjsvisningen <guilabel +>Ny fil</guilabel +>.</para +></listitem> + </itemizedlist> + </para +></listitem> + <listitem +><para +><filename class="directory" +>kdevfilter/</filename +> — sørger for menuindgangene <guimenuitem +>Kør kommando...</guimenuitem +> og <guimenuitem +>Filtrér markering gennem kommando...</guimenuitem +> i menuen <guimenu +>Værktøjer</guimenu +> der bruges af <guilabel +>Skalfiltrering og indsætning</guilabel +>-plugin.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevfullscreen/</filename +> — sørger for menuindgangen <guimenuitem +>Fuldskærmstilstand</guimenuitem +> i <guimenu +>Vis</guimenu +>-menuen og som ikon på værktøjslinjen.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevgrepview/</filename +> — sørger for indgangen <guimenuitem +>Find i filer...</guimenuitem +> i menuen <guimenu +>Redigér</guimenu +> som bruges af <guilabel +>Grep-grænseflade</guilabel +>-plugin.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevhistory/</filename +> — sørger for indgangene <guimenuitem +>Tilbage</guimenuitem +> og <guimenuitem +>Fremad</guimenuitem +> i <guimenu +>Vis</guimenu +>-menuen.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevjavadebugger/</filename +> — sørger for en <guimenu +>Java-fejlsøgning</guimenu +>smenu til at fejlsøge i et &Java;-program.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevoutputviews/</filename +> — sørger for indgangene <guimenuitem +>Næste fejl</guimenuitem +> og <guimenuitem +>Forrige fejl</guimenuitem +> i menuen <guimenu +>Vis</guimenu +>.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevpartexplorer/</filename +> — sørger for ingangen <guimenuitem +>Partudforsker</guimenuitem +> i menuen <guimenu +>Værktøjer</guimenu +> der bruges af <guilabel +>Partværktøj</guilabel +>-plugin.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevquickopen/</filename +> — sørger for menuindgangen <guimenuitem +>Åbn fil</guimenuitem +> i menuen <guimenu +>Fil</guimenu +> og <guimenuitem +>Åbn klasse</guimenuitem +> og <guimenuitem +>Åbn metode</guimenuitem +> i menuen <guimenu +>Værktøjer</guimenu +> der bruges af <guilabel +>Hurtig-åbn</guilabel +>-plugin.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevregexptest/</filename +> — sørger for menuindgangen <guimenuitem +>Fejlsøg regulært udtryk</guimenuitem +> i menuen i<guimenu +>Værktøjer</guimenu +> der bruges af <guilabel +>Regulært udtryk-tester</guilabel +>-plugin.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevreplace/</filename +> — sørger for menuindgangen i <guimenuitem +>Find-vælg-erstat</guimenuitem +> i menuen <guimenu +>Redigér</guimenu +> der bruges af <guilabel +>Erstat-part</guilabel +>-plugin.</para +></listitem> + <listitem id="app-files-default-tips" +><para +><filename class="directory" +>kdevtipofday/</filename +> — sørger for indgangen <guimenuitem +>Dagens vink</guimenuitem +> i menuen <guimenu +>Hjælp</guimenu +> såvel som en HTML med de tilgængelige vink.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevtools/</filename +> — kontrollerer diverse menuindgange der oprettes af menuen <guimenu +>Værktøjer</guimenu +> og menuen <guilabel +>Eksterne værktøjer</guilabel +> der kommer fra <guilabel +>Tilføjelse af værktøjer</guilabel +>-plugin.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevvalgrind/</filename +> — sørger for indgangene <guimenuitem +>Valgrind kontrol af hukommelseslækker</guimenuitem +> og <guimenuitem +> Profil med KCachegrind</guimenuitem +> i menuen <guimenu +>Fejlsøg</guimenu +> der bruges af <guilabel +>Valgrind grænseflade</guilabel +>-plugin.</para +></listitem> + </itemizedlist +></listitem> + + <listitem +><itemizedlist id="app-files-default-apps-project"> + <title +>Projektoprettelses-part</title> + <listitem +><para +><filename class="directory" +>kdevadaproject/</filename +> — sørger for indgangene i menuen <guimenu +>Byg</guimenu +> og tilhørende værktøjslinjeikoner der bruges til at bygge et Ada-program.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevantproject</filename +>— sørger for indgangene i menuen <guimenu +>Byg</guimenu +> når Ant-projektoprettelsen bruges.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevautoproject/</filename +>— sørger for indgangene til menuen <guimenu +>Byg</guimenu +> og de tilhørende værktøjslinjeikoner, når der arbejdes med &GNU;-værktøjer-baseret &automake;-projektoprettelse. Derudover sørges der for indgangene <guimenuitem +>Tilføj oversættelse</guimenuitem +> og <guimenuitem +>Byg indstillinger</guimenuitem +> til <guimenu +>Projekt</guimenu +>-menuen.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevcustomproject/</filename +> — sørger for indgangene til menuen <guimenu +>Byg</guimenu +> og de tilhørende værktøjslinjeikoner når projektet baseres på Makefiler.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevgenericproject/</filename +> — indeholder menudefinitioner til en eksperimentel generisk projektoprettelse. Aktuelt (version 3.1.0) ubrugt.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevhaskellproject/</filename +> — sørger for indgangene i menuen <guimenu +>Byg</guimenu +> og de tilhørende værktøjslinjeikoner der bruges til at bygge et Haskell-program.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevpascalproject/</filename +> — sørger for indgange til menuen <guimenu +>Byg</guimenu +> og de tilhørende værktøjslinjeikoner der bruges til at bygge et Pascal-program.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevtrollproject/</filename +> — sørger for indgange til menuen <guimenu +>Byg</guimenu +> og de tilhørende værktøjslinjeikoner der bruges til at bygge et program med &Qt; QMake-projekthåndtering.</para +></listitem> + </itemizedlist +></listitem> + + <listitem +><itemizedlist id="app-files-default-apps-lang"> + <title +>Sprogspecifikke parter</title> + <listitem +><para +><filename class="directory" +>kdevadasupport</filename +> — sørger for indgange til menuen <guimenu +>Værktøjer</guimenu +> og de tilhørende værktøjslinjeikoner der bruges til at udvikle Ada-programmer.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevbashsupport/</filename +> — sørger for indgange til menuen <guimenu +>Byg</guimenu +> og de tilhørende værktøjslinjeikoner der behøves for at udviklet bash-scripter.</para +></listitem> + <listitem id="app-files-default-apps-lang-cpp"> + <para +><filename class="directory" +>kdevcppsupport</filename +> — indeholder filer der bruges af &appwizard; til at bygge C++-programmer.</para> + <itemizedlist> + <listitem +><para +><filename class="directory" +>newclass/</filename +> — indeholder sidehoved og kildekode-skabeloner fra hvilke &appwizard; bygger de tilhørende kildekodefiler.</para +></listitem> + <listitem +><para +><filename class="directory" +>underklasser/</filename +> — indeholder skabeloner som &appwizard; bruger til at lave skelettet til klasse-erklæringer- og definitioner i kildekodefilerne.</para +></listitem> + <listitem +><para +><filename class="directory" +>skabeloner</filename +> — indeholder skabeloner fra hvilke &appwizard; indstiller standard hvoed og kildekodeskabelonfiler, der bruges af &nfwizard;. </para +></listitem> + <listitem +><para +><filename +>indstillinger</filename +> — skabelon-attrap til at tilføje makroer.</para +></listitem> + <listitem +><para +><filename +>kdevcppsupport.rc</filename +> — sørger for indgangene <guimenuitem +>Fuldstændiggør tekst</guimenuitem +> og <guimenuitem +>Gør til medlem</guimenuitem +> til menuen <guimenu +>Redigér</guimenu +>, indgangene <guimenuitem +>Skift mellem inkludering/implementering</guimenuitem +> til menuen <guimenu +>Vis</guimenu +> og <guimenuitem +>Ny klasse</guimenuitem +> i menuen <guimenu +>Projekt</guimenu +> og ikonen <guiicon +>Opret en ny klasse</guiicon +> i <guilabel +>Browserværktøjslinjen</guilabel +>.</para +></listitem> + </itemizedlist> + </listitem> + <listitem +><para +><filename class="directory" +>kdevfortransupport/</filename +> — sørger for indgangene i menuen <guimenu +>Byg</guimenu +> der bruges til at udvikle Fortranprogrammer.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevhaskellsupport/</filename +> — sørger for indgange i menuen <guimenu +>Byg</guimenu +> og de tilhørende værktøjslinjeikoner der skal bruges til udvikling af Haskell-programmer.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevjavasupport/</filename +> — indeholder brugerfladedefinitionen der bruges ved udvikling af &Java;-programmer.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevpascalsupport/</filename +> — indeholder brugerfladedefinitionen der skal bruges ved udvikling af Pascalprogrammer.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevperlsupport/</filename +> — sørger for menuindgangene <guimenu +>Projekt</guimenu +> og <guimenu +>Hjælp</guimenu +> der bruges ved udvikling af Perl-programmer.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevphpsupport/</filename +> — indeholder brugerflade og PHP-funktionsdefinitionsfiler der skal bruges ved udvikling af PHP-scripter.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevpythonsupport/</filename +> — sørger for menuindgangene <guimenu +>Byg</guimenu +> og <guimenu +>Hjælp</guimenu +> og de tilhørende værktøjslinjeikoner der bruges ved udvikling af Python-scripter.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevrubysupport/</filename +> — sørger for <guimenu +>Byg</guimenu +>-menuen og tilhørende værktøjslinjeikoner der bruges ved udvikling af Ruby-scripter.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevscriptproject/</filename +> — sørger for brugergrænseflade-definitioner der er nødvendige for at kunne udvikle brugertilpassede projekter. Aktuelt (version 3.1.0) ubrugt.</para +></listitem> + <listitem +><para +><filename class="directory" +>kdevsqlsupport/</filename +> — sørger for brugergrænseflade-definitioner der er nødvendige for at kunne udvikle SQL-projekter. Aktuelt (version 3.1.0) ubrugt.</para +></listitem> + </itemizedlist +></listitem> + +</itemizedlist> + +</sect2 +> <!-- app-files-default-apps --> + +</sect1 +> <!-- app-files-default --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="app-files-user"> +<title +>Brugerorienterede indstillinger</title> + +<para +>Al information om brugerdefinerede indstillinger, gemmes i to undermapper i <filename class="directory" +>$<envar +>KDEHOME</envar +></filename +>, : <simplelist> + <member +><link linkend="app-files-user-apps" +>Programspecifikke indstillinger</link +> i <filename class="directory" +>$<envar +>KDEHOME</envar +>/share/apps/</filename +>-mappen og</member> + <member +><link linkend="app-files-user-config" +>Ressourceindstillingsfil</link +> i <filename class="directory" +>$<envar +>KDEHOME</envar +>/share/config</filename +>-mappen.</member> +</simplelist> +</para> + +<sect2 id="app-files-user-apps"> +<title +>Programspecifikke indstillinger</title> + +<para +>Alle ændringer foretaget af brugeren <link linkend="app-files-default" +>&tdevelop; Standardindstillinger</link +> så vel som brugerspecifikke indstillinger der ikke opbevares i nogen af <link linkend="app-files-user-config" +>Ressource-indstillingsfilerne</link +> findes i <filename +>kdev...</filename +> undermapperne i <filename class="directory" +>$<envar +>KDEHOME</envar +>/share/apps/</filename +>-mappen. </para> +<para +>De fleste af disse indstillingsfiler bruges dog af diverse &tdevelop;-plugin for at sørge for specifikke menu og/eller værktøjslinjeindgange. Derfor er de kun interessante i tilfælde af at noget gik rigtig galt med brugergrænsefladen. </para> +<note +><para +>I tilfælde af at indeholdet af disse mapper afspejler dem i Standardindstillingerne, vil &tdevelop; have kopieret dem fra <filename class="directory" +>$<envar +>KDEDIR</envar +>/apps/</filename +> ind i <filename class="directory" +>$<envar +>KDEHOME</envar +>/apps/</filename +>-mappen ved den første opstart af programmet. Alle efterfølgende ændringer foretages udelukkende i disse to mapper. Standardindstillingerne forbliver uændrede under alle omstændigheder. </para +></note> + +<itemizedlist> + <listitem> + <para +><filename class="directory" +>kdevabbrev/</filename +> — indeholder filer der bruges af <guilabel +>Forkortelses</guilabel +>-plugin:</para> + <itemizedlist> + <listitem +><para +><filename class="directory" +>sources/</filename +> — tom lige nu. &tdevelop; bruger <link linkend="app-files-default-abbrev" +>standardnøgleord</link +> filer til <guilabel +>Udvid tekst</guilabel +>-kommandoer.</para +></listitem> + <listitem +><para +><filename class="directory" +>templates/</filename +> — indeholder de af brugeren ændrede skabelondefinitionsfiler der bruges af <guilabel +>Udvid forkortelse</guilabel +>-kommandoen.</para +></listitem> + <listitem +><para +><filename +>kdevabbrev.rc</filename +> — sørger for <guimenuitem +>Udvid tekst</guimenuitem +> og <guimenuitem +>Udvid forkortelse</guimenuitem +> indgangene i <guimenu +>Redigér</guimenu +>-menuen.</para +></listitem> + </itemizedlist +> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevappwizard/</filename +> — sørger kun for indgangene <guimenuitem +>Nyt projekt</guimenuitem +> og <guimenuitem +>Importér projekt</guimenuitem +> i menuen <guimenu +>Projekter</guimenu +>. &appwizard; bruger <link linkend="app-files-default-appwizard" +>standardindstillingerne</link +> for egentligt arbejde.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevastyle/</filename +> — sørger for indgangen <guimenuitem +>Formatér kilde igen</guimenuitem +>i menuen <guimenu +>Redigér</guimenu +>.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevautoproject/</filename +> — sørger for indgangene i menuen <guimenu +>Byg</guimenu +> og de tilhørende værktøjslinjeikoner i<guimenu +> Byg</guimenu +> menu og<guilabel +>Værktøjslinjen til bygning</guilabel +>.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevclassview/</filename +> — sørger for indgangen <guimenu +>Klasse-arvediagram</guimenu +> i menuen <guimenu +>Projekt</guimenu +> og klassebrowser kombinationsfeltet i <guilabel +>Browserværktøjslinjen</guilabel +> fra <guilabel +>Klassevisning</guilabel +> projekt-plugin.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevcloser/</filename +> — sørger for indgangen <guimenuitem +>Luk markerede vinduer...</guimenuitem +> i menuen <guimenu +>Vindue</guimenu +>-menuen.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevcppsupport/</filename +>— indeholder de faktiske indstillinger der bruges af &appwizard; til at bygge C++-programmer. &appwizard; bruger do hovedparten af informationen om indstillinger direkte fra <link linkend="app-files-default-apps-lang-cpp" +>standardindstillingsmappen</link +>. Se her for detaljer.</para> + <itemizedlist> + <listitem> + <para +><filename class="directory" +>newclass/</filename +> — indeholder sidehoved- og kildekodeskabeloner ud fra hvilke &appwizard; bygger de tilhørende kildekodefiler.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>pcs/</filename +> — indeholder databasefiler som &tdevelop; bruger til at bygge overlevende kodeopbevaringsfiler <filename +>.pcs</filename +> til et &kde;-C++-projekt</para> + </listitem> + <listitem> + <para +><filename +>kdevcppsupport.rc</filename +> — sørger for indgangene <guimenuitem +>Fuldstændiggør tekst</guimenuitem +> og <guimenuitem +>Gør til medlem</guimenuitem +> til menuen <guimenu +>Redigér</guimenu +>, indgangene <guimenuitem +>Skift mellem inkludering/implementering</guimenuitem +> til menuen <guimenu +>Vis</guimenu +> og <guimenuitem +>Ny klasse</guimenuitem +> i menuen <guimenu +>Projekt</guimenu +> og ikonen <guiicon +>Opret en ny klasse</guiicon +> i <guilabel +>Browserværktøjslinjen</guilabel +>.</para> + </listitem> + </itemizedlist> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevctags/</filename +> — sørger for <guimenuitem +>CTags</guimenuitem +>-indgangen i <guimenu +>Værktøjer</guimenu +>-menuen, til <guilabel +>CTags forende</guilabel +>-projekt-plugin.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevdebugger/</filename +> — sørger for <guimenu +>Fejlsøg</guimenu +>-menuindgangene til <guilabel +>Fejlsøger forende</guilabel +>-projekt-plugin.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevdiff/</filename +> — sørger for <guimenuitem +>Diff-fremviser</guimenuitem +>-indgangen i <guimenu +>Værktøjer</guimenu +>-menuen.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevdocumentation/</filename +> — indeholder filer der bruges af <guilabel +>Dokumentation</guilabel +>-plugin foruden <link linkend="app-files-default-kdevdoc" +>standardindstillingsfilerne</link +>. Se her for detaljer.</para> + <para +>Mapperne i <filename class="directory" +>kdevdocumentation/</filename +> indeholder for det meste bogholderi-information. De indstillede dokumentationsfiler opbevares i <link linkend="app-files-user-config-doc" +><quote +><filename +>doc...pluginrc</filename +></quote +>-filer</link +> i <filename class="directory" +>$<envar +>KDEHOME</envar +>/share/config/</filename +>-mappen.</para> + <itemizedlist> + <listitem> + <para +><filename class="directory" +>bookmarks/</filename +> — vedligeholder indgangene i fanebladet <guilabel +>Bogmærker</guilabel +> i &tdevelop;s <guilabel +>Dokumentation</guilabel +>-plugin.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>index/</filename +> — indeholder diverser cache-filer som &tdevelop; bruger til at til øge hastigheden på indekseret dokumentationssøgninger i fanebladet <guilabel +>Indeks</guilabel +> i <guilabel +>Dokumentation</guilabel +>-plugin.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>search/</filename +> — indeholder filer der bruges af søgeværktøjet <application +>htdig</application +> der fungerer varetager søgekald fra <guilabel +>Søg</guilabel +>-fanebladet i <guilabel +>Dokumentation</guilabel +>-plugin.</para> + </listitem> + <listitem> + <para +><filename +>kdevpart_dokumentation.rc</filename +> — sørger for de søgningsrelaterede indgange i menuen <guimenu +>Hjælp</guimenu +>.</para> + </listitem> + </itemizedlist> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevdoxygen/</filename +> — sørger for menuindgangene til <guilabel +>Doxygen-understøttelse</guilabel +> projekt plugin.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>tdevelop/</filename +> — indeholder indstillinger som &tdevelop; bruger til sin basisopsætning:</para> + <itemizedlist> + <listitem +><para +><filename class="directory" +>profiles/</filename +> — sørger for plugin-profilindstillinger. (Til at begynde med er der kun en <filename +>Fuldstændigt udviklingsmiljø</filename +>-profil der definerer en hel samling af aktive &tdevelop; plugin, første gang programmet startes.</para +></listitem> + <listitem +><para +><filename +>tdevelopui.rc</filename +> — sørger for de basale menu- og værktøjslinjeindgange &tdevelop; bruger.</para +></listitem> + </itemizedlist> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevfilecreate/</filename +> — indeholder filer brugt af guiden <guilabel +>Ny fil</guilabel +>.</para> + <itemizedlist> + <listitem +><para +><filename class="directory" +>file-templates/</filename +> — sørger for tekstindholdet puttes i den nye kildekodefil af en given type. Flere filskabeloner kan findes i mappen <link linkend="app-files-default-filecreate" +>standardindstillingsfiler</link +>.</para +></listitem> + <listitem +><para +><filename +>kdevpart_filecreate.rc</filename +> — sørger for indgangen <guimenuitem +>Ny</guimenuitem +> i menuen <guimenu +>Fil</guimenu +>.</para +></listitem> + <listitem +><para +><filename +>skabelon-info.xml</filename +> — indeholder beskrivelser af de til rådighed værende filtyper der skal vises i værktøjsvisningen <guilabel +>Ny fil</guilabel +>.</para +></listitem> + </itemizedlist> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevfilter/</filename +> — sørger for menuindgangene <guimenuitem +>Kør kommando...</guimenuitem +> og <guimenuitem +>Filtrér markering gennem kommando...</guimenuitem +> i menuen <guimenu +>Værktøjer</guimenu +> der bruges af <guilabel +>Skalfiltrering og indsætning</guilabel +>-plugin.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevfullscreen/</filename +> — sørger for menuindgangen <guimenuitem +>Fuldskærmstilstand</guimenuitem +> i <guimenu +>Vis</guimenu +>-menuen og som ikon på værktøjslinjen.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevgrepview/</filename +> — sørger for indgangen <guimenuitem +>Find i filer...</guimenuitem +> i menuen <guimenu +>Redigér</guimenu +> som bruges af <guilabel +>Grep-grænseflade</guilabel +>-plugin.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevoutputviews/</filename +> — sørger for indgangene <guimenuitem +>Næste fejl</guimenuitem +> og <guimenuitem +>Forrige fejl</guimenuitem +> i menuen <guimenu +>Vis</guimenu +>.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevpartexplorer/</filename +> — sørger for ingangen <guimenuitem +>Partudforsker</guimenuitem +> i menuen <guimenu +>Værktøjer</guimenu +> der bruges af <guilabel +>Partværktøj</guilabel +>-plugin.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevquickopen/</filename +> — sørger for menuindgangen <guimenuitem +>Åbn fil</guimenuitem +> i menuen <guimenu +>Fil</guimenu +> og <guimenuitem +>Åbn klasse</guimenuitem +> og <guimenuitem +>Åbn metode</guimenuitem +> i menuen <guimenu +>Værktøjer</guimenu +> der bruges af <guilabel +>Hurtig-åbn</guilabel +>-plugin.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevregexptest/</filename +> — sørger for menuindgangen <guimenuitem +>Fejlsøg regulært udtryk</guimenuitem +> i menuen i<guimenu +>Værktøjer</guimenu +> der bruges af <guilabel +>Regulært udtryk-tester</guilabel +>-plugin.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevreplace/</filename +> — sørger for menuindgangen i <guimenuitem +>Find-vælg-erstat</guimenuitem +> i menuen <guimenu +>Redigér</guimenu +> der bruges af <guilabel +>Erstat-part</guilabel +>-plugin.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevtipofday/</filename +>— sørger for indgangen <guimenuitem +>Dagens vink</guimenuitem +> i menuen <guimenu +>Hjælp</guimenu +>. HTML-filen der indeholder de tilgængelige vink findes kun som en <link linkend="app-files-default-tips" +>standardindstillingsfil</link +>.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevtools/</filename +> — kontrollerer diverse menuindgange der oprettes af menuen <guimenu +>Værktøjer</guimenu +> og menuen <guilabel +>Eksterne værktøjer</guilabel +> der kommer fra <guilabel +>Tilføjelse af værktøjer</guilabel +>-plugin.</para> + </listitem> + <listitem> + <para +><filename class="directory" +>kdevvalgrind/</filename +> — sørger for indgangene <guimenuitem +>Valgrind kontrol af hukommelseslækker</guimenuitem +> og <guimenuitem +> Profil med KCachegrind</guimenuitem +> i menuen <guimenu +>Fejlsøg</guimenu +> der bruges af <guilabel +>Valgrind grænseflade</guilabel +>-plugin.</para> + </listitem> +</itemizedlist> + +</sect2 +> <!-- app-files-user-apps --> + +<sect2 id="app-files-user-config"> +<title +>Ressourceindstillingsfiler</title> + +<para +>Der er to grupper af &tdevelop; indstillingsfiler i mappen <filename class="directory" +>$<envar +>KDEHOME</envar +>/share/config/</filename +> der kan skelnes imellem vha. de omkringliggende tegnsekvenser: <simplelist> + <member +><quote +><filename +>doc...pluginrc</filename +></quote +> betegner <link linkend="app-files-user-config-doc" +> filer der bruges af dokumentationsplugin.</link +></member> + <member +><quote +><filename +>kdev...rc</filename +></quote +> betegner indstillings<link linkend="app-files-user-config-kdev" +>filer der bruges af &tdevelop;</link +> og dens tilgængelige plugin.</member> +</simplelist> +</para> + +<itemizedlist id="app-files-user-config-kdev"> +<title +>Konfigurationsfiler brugt af &tdevelop;</title> + <listitem> + <para +><filename +>kdevabbrevrc</filename +> — indeholder <guilabel +>Forkortelser</guilabel +>nes aktuelle indstillingstilstand der sørges for af <guilabel +>Forkortelsesudvidelse</guilabel +>-plugin.</para> + <note +><para +>Dette registrerer blot om forkortelser benyttes eller ej. De faktiske definitioner af nye forkortelser bliver lagt i <filename +>$<envar +>KDEHOME</envar +>/share/apps/kdevabbrev/templates/templates</filename +>-filen.</para +></note> + </listitem> + <listitem> + <para +><filename +>kdevassistantrc</filename +> — indeholder nogle indstillings-tilstande, specifikke for den alenestående &tdevelop; Assistent dokumentationsbrowser.</para> + <note +><para +>De fleste fælles indstillinger deles med &tdevelop;-udviklingsmiljøets <filename +>tdeveloprc</filename +>-fil.</para +></note> + </listitem> + <listitem +><para +><filename +>kdevassistantuimode4rc</filename +> — indeholder den aktuelle MDI-indstillingstilstand (dokplaceringer &etc;) for den alenestående &tdevelop; Assistent dokumentationsbrowser.</para +></listitem> + <listitem> + <para +><filename +>kdevclassviewrc</filename +> — indeholder indstillingerne for <guilabel +>Vis tilstand</guilabel +> i klassebrowserens faneblad <guilabel +>Klasser</guilabel +> der sørges for af <guilabel +>Klassevisning</guilabel +> projekt-plugin.</para> + <note +><para +>Dette er en global indstilling, selvom <guilabel +>Klassevisning</guilabel +>-plugin kan være deaktiveret på projektniveau. En hvilken som helst ændring i denne indstilling bliver opdateret globalt hver gang det aktuelle projekt lukkes og har dermed betydning for alle projekter der indlæses efterfølgende.</para +></note> + </listitem> + <listitem +><para +><filename +>kdevcppsupportrc</filename +> — indeholder nogle indstililnger der bruges til opsætning af CPP kildekodefiler. Specifikt vil du kunne finde indstillinger der laves i indstillingsdialogen <guilabel +>C++- klasseoprettelse</guilabel +> herinde.</para +></listitem> + <listitem +><para +><filename +>kdevdocumentationrc</filename +> — indeholder opsætningen for <guilabel +>Dokumentation</guilabel +>s-plugin.</para +></listitem> + <listitem +><para +><filename +>tdeveloprc</filename +> — indeholder den globale opsætning som &tdevelop; udviklingsmiljøet og &tdevelop; Assistent dokumentationsbrowseren bruger.</para +></listitem> + <listitem +><para +><filename +>tdevelopuimode4rc</filename +> — indeholder &tdevelop;s aktuelle MDI-tilstandsindstillinger (dokplaceringer &etc;).</para +></listitem> + <listitem +><para +><filename +>kdevfileselectorrc</filename +> — indeholder opsætningen til <guilabel +>Filvælger</guilabel +>-plugin.</para +></listitem> + <listitem +><para +><filename +>kdevfileviewrc</filename +> — indeholder opsætningen for farven på filnavne som bruges til fremvisning i <guilabel +>CVS-integration (Cervisia)</guilabel +> projekt-plugin.</para +></listitem> + <listitem +><para +><filename +>kdevfilterrc</filename +> — indeholder opsætningen for <guilabel +>Skalfiltrering og indsætning</guilabel +>-plugin.</para +></listitem> + <listitem +><para +><filename +>kdevgrepviewrc</filename +> — indeholder opsætningen der bruges af <guilabel +>Grep-grænseflade</guilabel +>-plugin.</para +></listitem> + <listitem +><para +><filename +>kdevsnippetrc</filename +> — indeholder opsætningen som bruges af <guilabel +>Kodestumper</guilabel +>-plugin.</para +></listitem> + <listitem +><para +><filename +>kdevtoolsrc</filename +> — indeholder opsætningen som bruges af <guilabel +>Menutilføjelse af værktøjer</guilabel +>-plugin.</para +></listitem> +</itemizedlist> + +<itemizedlist id="app-files-user-config-doc"> +<title +>Indstillingsfiler der bruges at Dokumentations-plugin</title> + <listitem +><para +><filename +>docchmpluginrc</filename +> — indeholder information om &Microsoft; CHM-hjælpefiler som defineret på indstillingssiden <guilabel +>Dokumentationssamling</guilabel +>.</para +></listitem> + <listitem +><para +><filename +>doccustompluginrc</filename +> — indeholder information om en hvilken som helst dokumentationsfil der er defineret på indstillingssiden <guilabel +>Tilpas dokumentationssamling</guilabel +>.</para +></listitem> + <listitem +><para +><filename +>docdevhelppluginrc</filename +> — indeholder information om GNOME2 DevHelp-dokumentationsfiler som defineret på indstillingssiden <guilabel +>Dokumentationssamling</guilabel +>.</para +></listitem> + <listitem +><para +><filename +>docdoxygenpluginrc</filename +> — indeholder information Doxygen-genereret API-dokumentation som defineret på indstillingssiden <guilabel +>Doxygen-dokumentationssamling</guilabel +>.</para +></listitem> + <listitem +><para +><filename +>dockdevtocpluginrc</filename +> — indeholder information om KDevelopIndholdsfortegnelsens strukturerede dokumentation filer som defineret på indstillingssiden <guilabel +>Dokumentationssamling</guilabel +>.</para +></listitem> + <listitem +><para +><filename +>docqtpluginrc</filename +> — indeholder information om Qt-dokumentationsfiler der er inkluderet på Qt indstillingssiden i <guilabel +>Dokumentationssamling</guilabel +>.</para +></listitem> +</itemizedlist> + +</sect2 +> <!-- app-files-user-config --> + +</sect1 +> <!-- app-files-user --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="app-files-project"> +<title +>Projektafhængige indstillinger</title> + +<para +>Det fleste projektafhængige indstillinger opbevares i <filename +><projektnavn> tdevelop</filename +> og <filename +><projektnavn> kdevses</filename +> &tdevelop; projektindstillingsfiler frem for i separate filer, som de andre mere globale indstillinger. Kort sagt filerne er beregnet til: </para> +<simplelist> + <member +><filename +><projektnavn> tdevelop</filename +> — globale projektindstillingsinformation.</member> + <member +><filename +><projektnavn> kdevses</filename +> — indstillingsinformation der bruges til at genoprette den kørende sessions opførsel.</member> +</simplelist> +<para +>Begge er &XML;-kodede filer. De kan vises og (varsomt) ændres med en hvilken som helst teksteditor. </para> + +<sect2> +<title +>Overlevende kodeopbevaringsfiler</title> + +<para +>Der er en tredje projektafhængig konfigurationsfil, <filename +><projektnavn> tdevelop.pcs</filename +> Overlevende kodeopbevaring. Dette er en binært kodet fil der indeholder en intern fortolker-cache der normalt bruges til at øge hastigheden på indlæsningen af projektet. Desuden opbevares informationen der bruges af &tdevelop;s <guilabel +>Kodefuldstændiggørelse</guilabel +> i denne fil. </para> + +<note +><para +>Der kan være yderligere overlevende kodeopbevaringsfiler i fanebladet <guilabel +>Kodefuldstændiggørelse</guilabel +> i den <guilabel +>C++-specifikke</guilabel +> projektindstillingsside. Information om disse yderligere <filename +>.pcs</filename +> opbevares i <filename class="directory" +>$<envar +>KDEHOME</envar +>/share/apps/kdevcppsupport/pcs/</filename +>-mappen. </para +></note> +</sect2> + +</sect1 +> <!-- app-files-project --> + +</appendix +> <!-- app-files --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/app-menu.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/app-menu.docbook new file mode 100644 index 00000000000..d5e76539022 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/app-menu.docbook @@ -0,0 +1,72 @@ +<appendix id="app-menus"> + +<appendixinfo> + <authorgroup> + <author +><firstname +>Bernd</firstname +><surname +>Pol</surname +></author> + <!-- ROLES_OF_TRANSLATORS --> + </authorgroup> +</appendixinfo> + +<title +>Menu- og værktøjslinjeoversigt</title> + +<para +>(... endnu ikke skrevet ...) </para> + +<sect1 id="app-menus-menu"> +<title +>Menuer</title> + +<para +>(... endnu ikke skrevet ...) </para> + +<sect2 id="app-menus-menu-common"> +<title +>Almindeligt tilgængelige menuer</title> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect2 +> <!-- app-menus-menu-common --> + +<sect2 id="app-menus-menu-project"> +<title +>Projektspecifikke menuer</title> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect2 +> <!-- app-menus-menu-project --> + +<sect2 id="app-menus-menu-specific"> +<title +>Plugin-værktøjsmenuer</title> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect2 +> <!-- app-menus-menu-specific --> + +</sect1 +> <!-- app-menus-menu --> + +<sect1 id="app-menus-tool"> +<title +>Værktøjslinjer</title> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect1 +> <!-- app-menus-tool --> + +</appendix +> <!-- app-menus --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/app-misc-info.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/app-misc-info.docbook new file mode 100644 index 00000000000..70a5d97c7ac --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/app-misc-info.docbook @@ -0,0 +1,28 @@ +<appendix id="app-misc-info"> +<title +>Yderligere information</title> +<sect1 id="gettinginformation"> +<title +>Hent information</title> +<para +>(... endnu ikke skrevet ...) </para> +</sect1 +> <!-- gettinginformation --> + +<sect1 id="app-reporting-bugs"> +<title +>Rapportér programfejl</title> +<para +>(... endnu ikke skrevet ...) </para> +</sect1 +> <!-- app-reporting-bugs --> + +<sect1 id="app-licensing"> +<title +>Licenser</title> +&underFDL; &underGPL; </sect1 +> <!-- app-licensing --> +</appendix +> <!-- app-misc-info --> + +<!-- ====================================================================== --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/app-uimodes-examples.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/app-uimodes-examples.docbook new file mode 100644 index 00000000000..3e8217dfbe9 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/app-uimodes-examples.docbook @@ -0,0 +1,174 @@ +<appendix id="app-uimodes-examples"> +<title +>Eksempel på tilstande i brugergrænsefladen for &tdevelop;</title> + +<sect1 id="ideal-desc"> +<title +>IDEA-vinduetilstand</title> + +<para +>Klik <link linkend="uimodes-survey" +>her</link +> for at gå tilbage til oversigten over tilstande. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="tdevelop-ideal-mode.png" format="PNG"/> + </imageobject> + <textobject +><phrase +>Skærmaftryk</phrase +></textobject> + <caption +><para +>&tdevelop; IDEA-vinduetilstand</para +></caption> + </mediaobject> +</screenshot> + +<para +>Klik <link linkend="uimodes-survey" +>her</link +> for at gå tilbage til oversigten over tilstande. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="tdevelop-ideal-mode-0.png" format="PNG"/> + </imageobject> + <textobject +><phrase +>Skærmaftryk</phrase +></textobject> + <caption +><para +>&tdevelop; IDEA-tilstand, lukkede faneblade</para +></caption> + </mediaobject> +</screenshot> + +<para +>Dette eksempel på et skærmaftryk demonstrerer en af hovedfordelene ved IDEAl tilstand. Der er et maksimum af arbejdsplads tilgængeligt. Alligevel er en vilkårlig anden værktøjsvisning parat med det samme ved at klikke på det tilsvarende faneblad. </para> +<para +>Du vil sandsynligvis behøve noget tid for at vænne dig til ikonerne i fanebladslinjen. Hvis du er faret vild, så placér blot musen over et faneblad og vent nogle få sekunder. En kort værktøjsvink beskrivelse vil komme frem. I dette skærmaftryk er <quote +>Automake Manager</quote +> værktøjsvinket vist som et eksempel. Det beskriver det nederste faneblad i fanebladslinjen til højre. </para> + +<para +>Klik <link linkend="uimodes-survey" +>her</link +> for at gå tilbage til oversigten over tilstande. </para> + +</sect1 +> <!-- ideal-desc --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="mdi-desc"> +<title +>Underrammevinduetilstand</title> + +<para +>Klik <link linkend="uimodes-survey" +>her</link +> for at gå tilbage til oversigten over tilstande. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="tdevelop-mdi-mode.png" format="PNG"/> + </imageobject> + <textobject +><phrase +>Skærmaftryk</phrase +></textobject> + <caption +><para +>&tdevelop; underrammetilstand</para +></caption> + </mediaobject> +</screenshot> + +<para +>Klik <link linkend="uimodes-survey" +>her</link +> for at gå tilbage til oversigten over tilstande. </para> + +</sect1 +> <!-- mdi-desc --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="tabbed-desc"> +<title +>Fanebladssidetilstand</title> + +<para +>Klik <link linkend="uimodes-survey" +>her</link +> for at gå tilbage til oversigten over tilstande. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="tdevelop-tabbed-mode.png" format="PNG"/> + </imageobject> + <textobject +><phrase +>Skærmaftryk</phrase +></textobject> + <caption +><para +>&tdevelop; faneblads-sidetilstand</para +></caption> + </mediaobject> +</screenshot> + +<para +>Klik <link linkend="uimodes-survey" +>her</link +> for at gå tilbage til oversigten over tilstande. </para> + +</sect1 +> <!-- tabbed-desc --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="toplevel-desc"> +<title +>Topniveauvinduetilstand</title> + +<para +>Klik <link linkend="uimodes-survey" +>her</link +> for at gå tilbage til oversigten over tilstande. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="tdevelop-toplevel-mode.png" format="PNG"/> + </imageobject> + <textobject +><phrase +>Skærmaftryk</phrase +></textobject> + <caption +><para +>&tdevelop; topniveautilstand</para +></caption> + </mediaobject> +</screenshot> + +<para +>Klik <link linkend="uimodes-survey" +>her</link +> for at gå tilbage til oversigten over tilstande. </para> + +</sect1 +> <!-- toplevel-desc --> + +</appendix +> <!-- app-uimodes-examples --> + +<!-- ====================================================================== --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/applicationwizard.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/applicationwizard.docbook new file mode 100644 index 00000000000..858c8271c4a --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/applicationwizard.docbook @@ -0,0 +1,1382 @@ +<chapter id="applicationwizard"> + +<chapterinfo> + <authorgroup> + <author +><firstname +>Bernd</firstname +><surname +>Pol</surname +></author> + <!-- ROLES_OF_TRANSLATORS --> + </authorgroup> +</chapterinfo> + +<title +>Kom i gang — med &appwizard;</title> +<!-- FIXME (bp, 2006-06-18) This is a misnomer. It should be something like --> +<!-- Working With Projects --> +<!-- featuring the application manager as part of the New Projects section. --> + +<indexterm zone="applicationwizard"> + <primary +>Programguiden</primary +></indexterm> + +<para +>Arbejdet med at udvikle programmel i &tdevelop; organiseres i <emphasis +>projekter</emphasis +>. Et sådant projekt holder alt sammen, som hører til en fuldstændig programmeringsopgave: kildekodefiler, yderligere datafiler, alle håndteringsfunktioner som behøves, som f.eks. byggesystemet samt adgang til alle kontroller og yderligere værktøjer som behøves for at få programmet klart til at køre. </para> +<para +>At organisere udviklingsarbejdet i projekter tillader dig nemt at skifte mellem eksisterende globale opgaver. Dette er rigtigt bekvemt hvis du ⪚ arbejder med flere programmer samtidigt, hvilket ofte er tilfældet. Bed &tdevelop; om at åbne projektet du vil arbejde med, og du kan fortsætte i miljøet præcis hvor du tidligere forlod det. </para> + +<sect1 id="new-projects"> +<title +>Nye projekter</title> + +<!-- TODO (bp, 2006-06-18) This whole section must be completely rewritten. --> +<!-- There is no need for a tutorial habit anymore. --> + +<indexterm zone="new-projects"> + <primary +>projekt</primary> + <secondary +>ny</secondary +></indexterm> + +<para +>Hver gang du vil påbegynde et nyt programmeringsprojekt, skal der udføres en hel del formelle indstillingsprocedurer. En startstruktur for mapper skal laves, nye deklarationsfiler og kildekodefiler skal laves, byggesystemet skal initieres, &etc; </para> +<para +>&tdevelop; sørger for en nem måde at starte et nyt programmeringsprojekt—<emphasis +>programguiden</emphasis +>. Du finder programguiden via menupunktet <menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Nyt projekt</guimenuitem +></menuchoice +>. </para> +<para +>Det er kun et fåtal af skridt der er nødvendige for at oprette et nyt programmeringsprojekt med programguiden: </para> +<orderedlist> + <listitem +><para +><link linkend="new-projects-start-type" +>Vælg programmeringssproget</link +> du vil bruge, og type af program som du vil oprette ud fra et sæt fordefinerede skabeloner. </para +></listitem> + <listitem +><para +><link linkend="new-projects-start-general" +>Sørg for en del generel information</link +> såsom programnavn, mappe hvor programmet skal bygges, &etc; </para +></listitem> + <listitem +><para +>Bestem om du vil bruge et <link linkend="new-projects-start-cvs" +>versionskontrolsystem</link +>, som ⪚ CVS, og sørg for nødvendig information som behøves. </para +></listitem> + <listitem +><para +>Indstil nogle skabeloner for <link linkend="new-projects-start-templates" +>oprindelig deklarationsfil og kildekodefil</link +> (om nødvendigt). </para +></listitem> + <listitem +><para +>Bed til sidst programguiden om at <link linkend="new-projects-start-build" +>oprette alle nye ting</link +>, mappestruktur, startskabeloner for deklarationsfiler og kildekodefiler, og håndteringsværktøj såsom ⪚ et startskelet til at bygge programmet, &etc; </para +></listitem> +</orderedlist> +<para +>Voilà—det er alt. Programguiden har nu givet dig et første fungerende sæt programfiler, hvor du enkelt kan begynde at arbejde. </para> +<para +>Lad os nu tage et mere detaljeret kig på alt dette... </para> + +<sect2 id="new-projects-start"> +<title +>Indledende skridt</title> + +<indexterm zone="new-projects-start"> + <primary +>dialog</primary> + <secondary +>opret nyt projekt</secondary +></indexterm> +<indexterm zone="new-projects-start"> + <primary +>projekt</primary> + <secondary +>opret nyt projekt</secondary> + <tertiary +>dialog</tertiary +></indexterm> +<indexterm zone="new-projects-start"> + <primary +>projekt</primary> + <secondary +>skabeloner</secondary +></indexterm> +<indexterm zone="new-projects-start"> + <primary +>skabeloner</primary> + <secondary +>projekt</secondary +></indexterm> + +<para +>For at oprette et nyt projekt i &tdevelop;, vælges <guimenuitem +>Nyt projekt</guimenuitem +> i menuen <guimenu +>Projekt</guimenu +>. Du vil nu se guiden for at oprette nyt projekt, som vises nedenfor: </para> + +<screenshot id="screenshot-newprojectwizard"> + <mediaobject> + <imageobject> + <imagedata fileref="create-new-project.png" format="PNG"/> + </imageobject> + <caption +><para +>Indledende dialog for at oprette et nyt projekt </para +></caption> + </mediaobject> +</screenshot> + +<para +>Som du kan se, er dialogen opdelt i en øvre og en nedre del. I den øverste del kan du bestemme dig for programmeringssprog og programtype. Den nederste del indeholder en del generel information. </para> + +<sect3 id="new-projects-start-type"> +<title +>Vælg programmeringssprog og programtype</title> + +<indexterm zone="new-projects-start-type"> + <primary +>projekt</primary> + <secondary +>programtype</secondary +></indexterm> +<indexterm zone="new-projects-start-type"> + <primary +>projekt</primary> + <secondary +>programmeringssprog</secondary +></indexterm> +<indexterm zone="new-projects-start-type"> + <primary +>projekt</primary> + <secondary +>sprog</secondary +></indexterm> +<indexterm zone="new-projects-start-type"> + <primary +>sprog</primary +></indexterm> +<indexterm zone="new-projects-start-type"> + <primary +>programmeringssprog</primary +></indexterm> +<indexterm zone="new-projects-start-type"> + <primary +>program</primary> + <secondary +>type</secondary +></indexterm> + +<para +>Du udfører dine valg på venstresiden længst oppe i dialogen. Når den kommer frem er der en liste med mapper, hver med navnet på et programmeringssprog, som for eksempel: </para> + +<itemizedlist> + <listitem +><para +>Ada <indexterm> + <primary +>Ada</primary> + <secondary +>nyt projekt</secondary +></indexterm> + </para +></listitem> + <listitem +><para +>C <indexterm> + <primary +>C</primary> + <secondary +>nyt projekt</secondary +></indexterm> + </para +></listitem> + <listitem +><para +>C++ <indexterm> + <primary +>C++</primary> + <secondary +>nyt projekt</secondary +></indexterm> + </para +></listitem> + <listitem +><para +>Database (SQL-projekter) <indexterm> + <primary +>SQL</primary> + <secondary +>nyt projekt</secondary +></indexterm> + <indexterm> + <primary +>Database</primary> + <secondary +>nyt projekt</secondary +></indexterm> + </para +></listitem> + <listitem +><para +>Fortran <indexterm> + <primary +>Fortran</primary> + <secondary +>nyt projekt</secondary +></indexterm> + </para +></listitem> + <listitem +><para +>Haskell <indexterm> + <primary +>Haskell</primary> + <secondary +>nyt projekt</secondary +></indexterm> + </para +></listitem> + <listitem +><para +>Java <indexterm> + <primary +>Java</primary> + <secondary +>nyt projekt</secondary +></indexterm> + </para +></listitem> + <listitem +><para +>PHP <indexterm> + <primary +>PHP</primary> + <secondary +>nyt projekt</secondary +></indexterm> + </para +></listitem> + <listitem +><para +>Pascal <indexterm> + <primary +>Pascal</primary> + <secondary +>nyt projekt</secondary +></indexterm> + </para +></listitem> + <listitem +><para +>Perl <indexterm> + <primary +>Perl</primary> + <secondary +>nyt projekt</secondary +></indexterm> + </para +></listitem> + <listitem +><para +>Python <indexterm> + <primary +>Python</primary> + <secondary +>nyt projekt</secondary +></indexterm> + </para +></listitem> + <listitem +><para +>Ruby <indexterm> + <primary +>Ruby</primary> + <secondary +>nyt projekt</secondary +></indexterm> + </para +></listitem> + <listitem +><para +>Skal (scripter for Bash skallen) <indexterm> + <primary +>Bash</primary> + <secondary +>nyt projekt</secondary +></indexterm> + <indexterm> + <primary +>skal</primary> + <secondary +>nyt projekt</secondary +></indexterm> + </para +></listitem> +</itemizedlist> + +<para +>For at være præcis, indeholder mapperne i virkeligheden ikke rigtige programmeringsværktøjer. De fører til fordefinerede <emphasis +>skabeloner</emphasis +> som du kan bruge som udgangspunkt for udvikling i et sprog. For at få en idé om hvad der tilbydes, åbn kun en mappe af gangen. Der er en serie af undermapper i visse, men kun en eller flere enkle indgange i andre. Undermapperne du ser organiserer de tilgængelige skabeloner ifølge visse opgaver, de enkle indgange navngiver skabeloner som du kan vælge. </para> +<para +>Her kan vi ikke i detalje gå ind på hvilke opgaver hver skabelon sørger for, men det er nemt at finde ud af. Så snart du markerer en skabelonindgang, vises nogen information i feltet til højre. I det nederste felt ser du en <emphasis +>kort beskrivelse</emphasis +> om hvad skabelonen er beregnet til at gøre. I feltet ovenfor vises et billede, om tilgængelig, med hvordan programmet som skabelonen producerer ser ud hvis du kompilerer og kører den uden ændring. Oftest er det et <emphasis +>skærmaftryk</emphasis +> af hovedvinduet som programmet viser. </para> +<para +>Vælg skabelonen som bedst passer målene for dit program som startpunkt. Indtast derefter information om almene egenskaber i de nederste felter, som vises i næste kapitel. </para> + +<formalpara> +<title +>Vælg et projekthåndteringssystem</title> +<para +>Hver skabelon er bundet til et bestemt <link linkend="makesystems" +>Projekt håndteringssystem</link +>. For øjeblikket er der ikke nogen måde frit at vælge et sådant projekthåndteringssystem. Du skal finde en skabelon som passer til dine behov eller ændre dit projekt ifølge et efter oprettelsen. </para> +</formalpara> + +</sect3 +> <!-- new-projects-start-type --> + +<sect3 id="new-projects-start-general"> +<title +>Angiv almen information</title> + +<indexterm zone="new-projects-start-general"> + <primary +>projekt</primary> + <secondary +>egenskaber</secondary +></indexterm> +<indexterm zone="new-projects-start-general"> + <primary +>egenskaber</primary +></indexterm> +<indexterm zone="new-projects-start-general"> + <primary +>program</primary> + <secondary +>navn</secondary +></indexterm> +<indexterm zone="new-projects-start-general"> + <primary +>navn</primary> + <secondary +>program</secondary +></indexterm> +<indexterm zone="new-projects-start-general"> + <primary +>projekt</primary> + <secondary +>mappe</secondary +></indexterm> +<indexterm zone="new-projects-start-general"> + <primary +>mappe</primary> + <secondary +>projekt</secondary +></indexterm> +<indexterm zone="new-projects-start-general"> + <primary +>søgesti</primary> + <secondary +>nyt projekt</secondary +></indexterm> +<indexterm zone="new-projects-start-general"> + <primary +>projekt</primary> + <secondary +>forfatter</secondary +></indexterm> +<indexterm zone="new-projects-start-general"> + <primary +>projekt</primary> + <secondary +>e-mail</secondary +></indexterm> +<indexterm zone="new-projects-start-general"> + <primary +>forfatter</primary +></indexterm> +<indexterm zone="new-projects-start-general"> + <primary +>e-mail</primary +></indexterm> +<indexterm zone="new-projects-start-general"> + <primary +>projekt</primary> + <secondary +>main.cpp</secondary +></indexterm> +<indexterm zone="new-projects-start-general"> + <primary +>main.cpp</primary +></indexterm> +<indexterm zone="new-projects-start-general"> + <primary +>projekt</primary> + <secondary +>licens</secondary +></indexterm> +<indexterm zone="new-projects-start-general"> + <primary +>licens</primary +></indexterm> + +<para +>Den nederste del af siden <guilabel +>Generelt</guilabel +> i dialogen <guilabel +>Opret nyt projekt</guilabel +> er et indrammet felt som hedder <guilabel +>Egenskaber</guilabel +>. Du skal sørge for en del almen information om projektet, så programguiden ved hvordan den oprindelige struktur skal bygges. </para> +<formalpara> +<title +>Programnavn</title> +<para +>Dit program behøver naturligvis et navn. Indtast det i det øverste felt under <guilabel +>Egenskaber</guilabel +>, som hedder <guilabel +>Programnavn</guilabel +>. Vi bruger <quote +>MyApp</quote +> som eksempel. </para> +</formalpara> +<para +>Når du gør det, mærker du at programguiden nægter at acceptere specialtegn af nogen slags. De eneste tegn som accepteres er: <itemizedlist> + <listitem +><para +>små og store bogstaver</para +></listitem> + <listitem +><para +>tal</para +></listitem> + <listitem +><para +>tegnet understregning</para +></listitem> +</itemizedlist> +</para> +<para +>En fremtrædende grund til begrænsningen er at programguiden vil bruge programnavnet som <emphasis +>basis for visse klassenavn</emphasis +> som den laver når den opbygger projektet fra begyndelsen. Altså skal projektets navn følge reglerne for programsproget som bruges. </para> +<formalpara> +<title +>Projektmappen</title> +<para +>Den anden udmærkede grund for begrænsningen ser du på nederste linje i området <guilabel +>Egenskaber</guilabel +>. Den hedder <guilabel +>Endeligt sted</guilabel +>, og viser mappen hvor programguiden laver programmet. </para> +</formalpara> +<para +>Når du indskriver programmets navn mærker du at programguiden gentager det du indskriver længst nede på linjen <guilabel +>Endeligt sted</guilabel +>, men kun med små bogstaver. </para> +<para +>Altså skal du vælge navnet på det nye program med forsigtighed. Hvis du ender med en mappe som allerede bruges, lader programguiden dig ikke fortsætte til næste skridt, ved at beholde knappen <guibutton +>Næste ></guibutton +> inaktiv (grå). Den <emphasis +>advarer</emphasis +> dig også ved at tilføje <quote +>(fil eller mappe findes allerede)</quote +> sidst på linjen <guilabel +>Endeligt sted</guilabel +>. </para> + +<formalpara> +<title +>Startsøgesti</title> +<para +>Der er to måder at vælge en anden søgesti til det nye program. En er at bruge et andet navn. Det er dog ikke altid muligt (⪚ laver du måske en ny udgave af et eksisterende program). Som et alternativ kan du vælge en anden søgesti til programmappen. </para> +</formalpara> +<para +>Det gøres i den anden linjes indtastningsfelt under <guilabel +>Egenskaber</guilabel +>, som hedder <guilabel +>Sted</guilabel +>. Det du skriver her er <emphasis +>startsøgestien</emphasis +> for det nye programs udviklingsmappe. Programguiden tilføjer programnavnet sidst i søgestien når det nye projekt laves. Resultatet vises på linjen <guilabel +>Endeligt sted</guilabel +> for at bedre vise hvad der sker. </para> +<para +>Programguiden kopierer en <emphasis +>startværdi</emphasis +> til feltet <guilabel +>Sted</guilabel +> fra begyndelsen. Det hentes fra det du har valgt under feltet <guilabel +>Standardprojektmappe</guilabel +> under de <link linkend="setup-general" +>generelle indstillinger</link +>. I vores tilfælde har vi &tdevelop; sat op til at bruge <filename class="directory" +>/home/devel/projects/</filename +> som oprindelig sti for nye projekter. </para> +<para +>Ændr indholdet i feltet <guilabel +>Sted</guilabel +>, så udviklingsmappen for programmet som vises på linjen <guilabel +>Endeligt sted</guilabel +> er entydig. </para> +<!--TODO add tab description Project Options --> +<note +><para +>Sørg for at søgestien du skriver ind i feltet <guilabel +>Sted</guilabel +> allerede findes. Ellers kommer du ikke til at kunne fortsætte til næste skridt. Programguiden <emphasis +>advarer</emphasis +> dig om søgestier som ikke findes, ved at tilføje <quote +>(ugyldig)</quote +> sidst på linjen <guilabel +>Endeligt sted</guilabel +>. </para +></note> + +<screenshot id="screenshot-createnewprojectoptions"> + <mediaobject> + <imageobject> + <imagedata fileref="createnewprojectoptions.png" format="PNG"/> + </imageobject> + <caption +><para +>Indstil et nyt projekt for CVS </para +></caption> + </mediaobject> +</screenshot> + +<formalpara> +<title +>Personlig information</title> +<para +>Felterne som følger er ikke så kritiske. Angiv blot dit navn (&ie; navnet på personen som er ansvarlig for programmet) i feltet <guilabel +>Forfatter</guilabel +>, og en gyldig e-mail-adresse i feltet <guilabel +>E-mail</guilabel +>, så brugere kan give dig tilbagemeldinger om programmet. </para> +</formalpara> + +<note> +<orderedlist> + <listitem +><para +>&appwizard; udfylder feltet med standardværdier, som tages fra e-mail-indstillingerne i KDE's kontrolcenter. Hvis standardværdierne i felterne <guilabel +>Forfatter</guilabel +> og <guilabel +>E-mail</guilabel +> under <guilabel +>Opret nyt projekt</guilabel +> ikke passer, bør du kontrollere e-mail-indstillingerne i KDE's kontrolcenter. </para +></listitem> + <listitem +><para +>Programguiden sammenstiller informationen til en startprogramskabelon hvis det er muligt. For &kde; C++ programmer, finder du den for eksempel i begyndelsen af kildekodefilen <filename +>main.cpp</filename +>. </para +></listitem> + <listitem +><para +>Feltet <guilabel +>E-mail</guilabel +> er det <emphasis +>valgfrie</emphasis +> blandt felterne, hvilket skyldes at ikke alle udviklere har adgang til internettet. Du kan lade feltet være tomt, og fortsætte alligevel. </para +></listitem> +</orderedlist> +</note> + +<formalpara> +<title +>Versions- og licensinformation</title> +<para +>Indskriv til sidst startversion for det nye program i feltet <guilabel +>Version</guilabel +>, og vælg licensen du vil skal gælde for dit program i dropned-feltet <guilabel +>Licens</guilabel +>. </para> +</formalpara> + +<para +>Hvis du vælger en programtype hvor programguiden sørger for fælles kildekodetekstskabeloner (⪚ C/C++), bør du kigge på licensinformationsteksten på tredje side i dialogen <guilabel +>Opret nyt projekt</guilabel +> (se kapitlet <link linkend="new-projects-start-templates" +>Angiv skabeloner for deklarationer og kildekode</link +> nedenfor). </para> +<para +>Hvis du valgte <quote +>Egen</quote +> i dropned-feltet <guilabel +>Licens</guilabel +> skal du selv sørge for en licenstekst. </para> + +<note +><para +>Både version og licensinformation vil også blive indsat i startskabelonerne i et passende format, som programtypen du vælger, tilbyder. </para +></note> + +<para +>Når du har skrevet al denne informationen korrekt ind, så tryk på knappen <guibutton +>Næste ></guibutton +>, for at fortsætte, som vist i de følgende kapitler. </para> +</sect3 +> <!-- new-projects-start-general --> + +</sect2 +> <!-- new-projects-start --> + +<sect2 id="new-projects-start-cvs"> +<title +>Angiv information om versionssystem</title> + +<indexterm zone="new-projects-start-cvs"> + <primary +>CVS</primary> + <secondary +>nyt projekt</secondary +></indexterm> +<indexterm zone="new-projects-start-cvs"> + <primary +>projekt</primary> + <secondary +>CVS</secondary +></indexterm> +<indexterm zone="new-projects-start-cvs"> + <primary +>database</primary> + <secondary +>CVS</secondary +></indexterm> +<indexterm zone="new-projects-start-cvs"> + <primary +>version</primary> + <secondary +>database</secondary +></indexterm> +<indexterm zone="new-projects-start-cvs"> + <primary +>version</primary> + <secondary +>CVS</secondary +></indexterm> + +<para +>I det andet skridt, leder programguiden dig til siden <guilabel +>Versionskontrolsystem</guilabel +>, hvor du kan bestemme hvilket versionskontrolsystem du vil bruge. </para> + +<note +><para +>Denne beskrivelse koncentreres kun om behovene for at oprette projekter. For mere information om &CVS;, se kapitlet <link linkend="cvs" +>Brug af &CVS;</link +> nedenfor. </para +></note> + +<formalpara> +<title +>Intet versionskontrolsystem ønskes</title> +<para +>Fra begyndelsen er <quote +>Intet</quote +> valgt i fanebladet <guilabel +>Versionskontrolsystem</guilabel +> og siden er i øvrigt tom. Hvis du ikke vil bruge et versionskontrolsystem, så klik blot på knappen <guibutton +>Næste </guibutton +> for at fortsætte. </para> +</formalpara> + +<formalpara> +<title +>Brug af &CVS;</title> +<para +>Ellers skal du vælge versionskontrolsystemet som du vil bruge i dropned-feltet <guilabel +>Versionskontrolsystem</guilabel +>. For øjeblikket er kun <quote +>&cvs;</quote +> tilgængeligt. Hvis du vælger det, viser programguiden siden igen, men nu indeholder den et antal felter som du skal udfylde. </para> +</formalpara> + +<screenshot id="screenshot-newproject-cvs"> + <mediaobject> + <imageobject> + <imagedata fileref="create-new-project-cvs.png" format="PNG"/> + </imageobject> + <caption +><para +>Indstil et nyt projekt for CVS </para +></caption> + </mediaobject> +</screenshot> + +<para +>Et versionskontrolsystem som &CVS; (hvilket betyder <quote +>Concurrent Versions System</quote +>) opbevarer kopier af udvalgte projektfiler i en slags database. Hvis du bruger &CVS;, kan du blandt andet overføre (<quote +>arkivere</quote +>) filerne eller tage dem ned til din projektmappe (<quote +>tjekke ud</quote +>, eller <quote +>opdatere</quote +>). Det særlige ved dette er at filerne i versionsdatabasen opbevares på en struktureret måde, hvilket gør at du altid kan gå tilbage til et tidligere udviklingstrin hvis du behøver det. &CVS; tillader også flere udviklere nemt at samarbejde i et stort projekt (såsom &tdevelop;), uden at forstyrre hinandens arbejde. </para> + +<indexterm zone="new-projects-start-cvs-root"> + <primary +>CVS</primary> + <secondary +>rod</secondary +></indexterm> +<indexterm zone="new-projects-start-cvs-root"> + <primary +>rod</primary> + <secondary +>CVS</secondary +></indexterm> +<indexterm zone="new-projects-start-cvs-root"> + <primary +>CVS</primary> + <secondary +>lokal</secondary +></indexterm> +<indexterm zone="new-projects-start-cvs-root"> + <primary +>CVS</primary> + <secondary +>ekstern</secondary +></indexterm> +<indexterm zone="new-projects-start-cvs-root"> + <primary +>lokal CVS</primary +></indexterm> +<indexterm zone="new-projects-start-cvs-root"> + <primary +>:local:</primary +></indexterm> +<indexterm zone="new-projects-start-cvs-root"> + <primary +>CVS</primary> + <secondary +>:local:</secondary +></indexterm> + +<formalpara id="new-projects-start-cvs-root"> +<title +>&CVS;-rod</title> +<para +>&CVS; skal <emphasis +>håndtere</emphasis +> versionsdatabasen som den har fra dine projektfiler. For at opnå dette har den en del speciel databaseinformation i en egen mappe, som kaldes <emphasis +>&CVS;-roden</emphasis +>. Det første skridt for at indstille &CVS; for det nye projekt, er altså at fortælle &tdevelop; hvor roden findes. </para> +</formalpara> + +<para +><emphasis +>Lokal &CVS;-rod.</emphasis +> Der er to grundlæggende muligheder. Enten vil du bruge en <emphasis +>lokal</emphasis +> &CVS;-database, eller du vil bruge en database som findes på en <emphasis +>fjernserver</emphasis +>. Hvis du udvikler på egen hånd, vil du måske bruge &CVS;-databasen som en slags sikkerhedskopieringssystem på din egen maskine. Oftest laves den i din hjemmemappe og gives navnet <filename +>cvsroot</filename +>. Det kan se ud på følgende måde: </para> +<para +><userinput +><filename class="directory" +>/home/udvikling/cvsroot</filename +></userinput +> (hvor <filename +>udvikling</filename +> simpelthen angiver brugeren <quote +>udvikling</quote +>, kun som et eksempel) </para> + +<note +><para +>I virkeligheden er dette en forkortet form. Mere fuldstændigt skal den lokale &CVS;-rod adresseres med præfikset <computeroutput +>:local:</computeroutput +>. Den forkortede form tillades kun i tilfælde hvor filnavnet begynder med en skråstreg (<computeroutput +>/</computeroutput +>). Det fuldstændige navn på vor lokale &CVS;-rod i eksemplet ville se nøjagtigt ud som: <filename class="directory" +>:local:/home/udvikling/cvsroot</filename +>. </para +></note> + +<para +>Indtast navnet på &CVS;-rodmappen som systemet har indstillet for feltet <guilabel +>CVS-rod</guilabel +>. I princippet kan du vælge et hvilket som helst navn, til og med bruge flere &CVS;-databaser, men det er passende at beholde &CVS;-roden når den først er indstillet. </para> +<para +><emphasis +>Initiér en ny &CVS;-rod</emphasis +>. Hvis der ikke er en &CVS;-root, endnu kan &tdevelop; indstille &CVS;-systemet til at oprette en for dig i den givne mappe. Markér blot afkrydsningsfeltet <guilabel +>Initiér rod</guilabel +> under feltet <guilabel +>CVS-rod</guilabel +>. </para> +<note +><para +>Som sagt, <emphasis +>beordrer</emphasis +> &tdevelop; kun &CVS;-systemet til at initiere en ny &CVS;-rod. Den gør ingenting selv med mappen. Heldigvis er &CVS; smart nok til at kontrollere om &CVS;-rodmappen allerede findes. Derfor gør det ingen skade hvis du skulle have markeret <guilabel +>Initiér rod</guilabel +> for en eksisterende &CVS;-rodmappe. </para +></note> + +<para +><emphasis +>Ekstern &CVS;-rod.</emphasis +> Der er tilfælde hvor &CVS;-databasen skal være på en fjernserver, især når flere udviklere arbejder med samme projekt. Så skal du indtaste &CVS;-rodens URL for serveren i feltet <guilabel +>&CVS;-rod</guilabel +>. Hvis du for eksempel vil have adgang til &kde;'s &CVS;-server: </para> +<para +><userinput +><filename class="directory" +>:pserver:<replaceable +>min_indlogning</replaceable +>@cvs.kde.org:/home/kde</filename +></userinput +> (hvor <replaceable +>min_indlogning</replaceable +> angiver indlogningsnavnet som er indstillet i din &kde; &CVS;-konto) </para> + +<indexterm zone="new-projects-start-cvs-remote"> + <primary +>ekstern CVS</primary +></indexterm> +<indexterm zone="new-projects-start-cvs-remote"> + <primary +>:pserver:</primary +></indexterm> +<indexterm zone="new-projects-start-cvs-remote"> + <primary +>:ext:</primary +></indexterm> +<indexterm zone="new-projects-start-cvs-remote"> + <primary +>CVS</primary> + <secondary +>:local:</secondary +></indexterm> +<indexterm zone="new-projects-start-cvs-remote"> + <primary +>CVS</primary> + <secondary +>:pserver:</secondary +></indexterm> +<indexterm zone="new-projects-start-cvs-remote"> + <primary +>CVS</primary> + <secondary +>:ext:</secondary +></indexterm> + +<formalpara id="new-projects-start-cvs-remote"> +<title +>Servertyper for fjern-&CVS;</title> +<para +>Det er i hovedsagen to fjernservertyper for &CVS; med udbredt brug: <emphasis +>pserver</emphasis +> som bruger en kodeordssikret ukrypteret protokol, og <emphasis +>ext</emphasis +>-serveren som bruger krypteret dataoverførsel via rsh eller ssh. De adskilles af &URL;-præfikset de bruger: </para> +</formalpara> +<para> +<filename +>:pserver:</filename> +</para> +<para +>for den ukrypterede <quote +>kodeordsbeskyttede server</quote +> type, og </para> +<para> +<filename +>:ext:</filename> +</para> +<para +>for en servertype krypteret med rsh eller ssh. For eksempel </para> +<para> +<userinput +><filename class="directory" +>:ext:<replaceable +>mitlogin</replaceable +>@cvs.cervisia.sourceforge.net:/cvsroot/cervisia</filename +></userinput> +</para> +<para +>får adgang til &CVS;-roden for det meget brugte &CVS;-håndteringsværktøj <application +>Cervisia</application +> på serveren SourceForge. </para> +<para +>Hvis du vil bruge en krypteret server via rsh eller ssh for adgang til &CVS;, skal du fortælle &tdevelop; hvilken krypteringsprotokol der skal bruges. Indskriv blot <userinput +>rsh</userinput +> eller <userinput +>ssh</userinput +> i feltet <guilabel +>CVS_RSH</guilabel +> på siden <guilabel +>Versionskontrolsystem</guilabel +> i <guilabel +>Opret nyt projekt</guilabel +>. </para> + +<note +><para +>Der er et problem hvis du bruger en krypteret server for &CVS; inde i &tdevelop;. Se kapitlet <link linkend="cvs" +>Brug af &CVS;</link +> for detaljeret information. </para +></note> + +<indexterm zone="new-projects-start-cvs-repository"> + <primary +>CVS</primary> + <secondary +>arkiv</secondary +></indexterm> +<indexterm zone="new-projects-start-cvs-repository"> + <primary +>arkiv</primary> + <secondary +>CVS</secondary +></indexterm> + +<formalpara id="new-projects-start-cvs-repository"> +<title +>&CVS;-arkivet</title> +<para +>Hidtil har du fortalt &tdevelop; hvor &CVS;-roden er, som håndterer versionsdatabasen og hvordan du har adgang til den. Nu skal du fortælle &tdevelop; hvilket navn du ønsker at &CVS; skal bruge for at gemme dine projektfiler i databasen. Et sådant sted hvor projektfilerne opbevares i &CVS;, kaldes et <emphasis +>arkiv</emphasis +>. </para> +</formalpara> +<para +>I princippet kan du bruge et hvilket som helst navn for projektfilernes &CVS;-arkiv, så længe det opfylder specifikationerne for at navngive en fil. Oftest bruger de fleste udviklere alligevel selve programmets navn. &CVS; bygger en mappe med navnet under &CVS;-roden, derfor er det nemmere hvis du beholder programnavnet for det. </para> +<para +>Indskriv blot arkivnavnet som du vil bruge i feltet <guilabel +>CVS-arkiv</guilabel +> på siden <guilabel +>Versionskontrolsystem</guilabel +> under <guilabel +>Opret nyt projekt</guilabel +>. I vort eksempel er det <userinput +>Mit_nye_program</userinput +>. </para> + +<warning +><para +><emphasis +>Sørg for ikke at bruge et arkiv som allerede findes!</emphasis +>. &CVS;-systemet advarer ikke om duplikerede filer, men smider alting ind som ikke producerer en formel konflikt. Du vil lave rod i alting! </para +></warning> + +<formalpara> +<title +>Tilbageværende felter</title> +<para +>Der er ikke meget arbejde tilbage. Programguiden har allerede indstillet de øvrige felter for dig. Mere detaljeret: </para> +</formalpara> +<para +>Feltet <guilabel +>Leverandør</guilabel +> bruges kun af kompatibilitetsgrunde. Du kan beholde standardværdien <quote +>leverandør</quote +> som programguiden har skrevet her. </para> +<para +>Feltet <guilabel +>Meddelelse</guilabel +> gør det muligt at indtaste en kommentar om indholdet i &CVS; fra begyndelsen. Brug hvilken som helst tekst du vil, eller behold blot standardværdien <guilabel +>nyt projekt</guilabel +> som programguiden har skrevet ind. </para> +<para +><guilabel +>Udgavemærke</guilabel +> indeholder navnet som bruges som mærke for den oprindelige tilstand af projektet. Et sådant <emphasis +>mærke</emphasis +> navngiver en vis tilstand i &CVS;-arkivet, som du senere kan bruge til at komme tilbage til den tilstand for udviklingen. (Se videre i kapitlet <link linkend="cvs" +>Brug af &CVS;</link +>.) </para> +<para +>Programguiden har indskrevet standardmærket <quote +>start</quote +> her, som er et værdigt forslag. Behold det blot. </para> + +<note> +<para +>Hvis noget i al denne information om versionskontrol er forkert, mærker &tdevelop; det oftest ikke før end projektet laves. Det er &CVS;-systemet som finder fejlen når det forsøger at lave arkivet. Derfor skal du holde øje med vinduet <guilabel +>Meddelelser</guilabel +> i &tdevelop; når projektet laves i det sidste indstillingsskridt. Hvis der var nogen fejl med &CVS;, ser du oftest en fejlmeddelelse som denne: </para> + +<screen +><computeroutput> +* cd '/home/udvikling/test' && cvs -d '/home/udvikling/min_cvsrod' \ + import -m 'nyt projekt' '' 'leverandør' 'start' &&\ + sh /opt/kde3/share/apps/kdevcvs/buildcvs.sh . '' \ + '/home/udvikling/min_cvsrod' +* cvs [import aborted]: /home/udvikling/min_cvsrod/CVSROOT: No such file or + directory +* *** Exited with status: 1 *** +</computeroutput +></screen> + +<para +>Hvis dette sker, skal du enten indstille &CVS; manuelt (det skal være lykkedes for &tdevelop; at initiere dine projektfiler på dette tidspunkt) eller fjerne projektmappen og begynde forfra igen med <guimenuitem +>Nyt projekt</guimenuitem +> i menuen <guimenu +>Projekt</guimenu +>. </para> +</note> + +<para +>Efter du har indtastet al information relateret til &CVS;, så klik på knappen <guibutton +>Næste ></guibutton +> for at fortsætte. </para> + +<note +><para +>Hvis du vil rette en fejl på foregående side i <guilabel +>Opret nyt projekt</guilabel +>, så tryk blot på knappen <guibutton +>< Tilbage</guibutton +>. Programguiden husker dine indstillinger på nuværende side, så du kan nemt fortsætte når du kommer tilbage. </para +></note> + +</sect2 +> <!-- new-projects-start-cvs --> + +<sect2 id="new-projects-start-templates"> +<title +>Angiv skabeloner for deklarationer og kildekode</title> + +<para +>Næste skridt tager dig til en serie sider, hvor du kan indstille almindelig information som du vil inkludere i dine kildekode- og deklarationsfiler, hvis opgaven det drejer sig om tillader det. </para> +<para +>Både deklarationsskabeloner og kildekodeskabeloner sørges der for for C og C++ programmer, hver og sin egen side. For andre sprog er der måske kun kildekodeskabeloner. I visse tilfælde ser du til og med at skabelonsiden er tom. </para> +<para +>Hvis siden bruges, udfylder programguiden nogle almindelige kommentarer i sidehovedet, som kan se sådan her ud for et C++ baseret program: </para> + +<screen +><computeroutput +><literal> +/*************************************************************************** + * Copyright (C) 2003 by Dit navn * + * [email protected] * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +</literal +></computeroutput +></screen> + +<para +>Andre skabeloner sørger for lignende information på et format ifølge definitionen af programmeringssproget du vil bruge. </para> +<para +>Som du måske har bemærket, har programhåndteringen allerede udfyldt noget information som du angav på den første side <guilabel +>Generelt</guilabel +> i dialogen <guilabel +>Opret nyt projekt</guilabel +>, nærmere bestemt indholdet i felterne <guilabel +>Forfatter</guilabel +> og <guilabel +>E-mail</guilabel +>. Rigtig licensinformation er også indsat, følgende dit valg i fanebladet <guilabel +>Licens</guilabel +>. </para> + +<sect3 id="new-projects-start-templates-edit"> +<title +>Hvordan skabelonerne kan redigeres</title> + +<indexterm zone="new-projects-start-templates-edit"> + <primary +>skabeloner</primary> + <secondary +>projekt</secondary> + <tertiary +>redigér</tertiary +></indexterm> +<indexterm zone="new-projects-start-templates-edit"> + <primary +>projekt</primary> + <secondary +>skabeloner</secondary> + <tertiary +>redigér</tertiary +></indexterm> + +<para +>Skabelonerne som du indstiller i dialogen <guilabel +>Opret nyt projekt</guilabel +> behandles hver gang du beder &tdevelop; om at oprette en ny kildekodefil og/eller deklarationsfil. Informationen som du angiver her, inkluderes længst oppe i et dokumentationshovede, inden koden begynder. </para> +<para +>Du er dog ikke begrænset til ren tekst. &tdevelop; kender til flere variabler, som lader dig inkludere rigtig information i filen. Programguiden bruger i virkeligheden blot nogle sådanne variabler for at inkludere information om <guilabel +>Forfatter</guilabel +>, <guilabel +>E-mail</guilabel +> og <guilabel +>Licens</guilabel +> i den oprindelige skabelonteksten. </para> + +<variablelist> +<varlistentry> +<term +>Indsæt filinformation fra &doxygen;</term> +<listitem> +<para +>Hvis du for eksempel ønsker at dokumentationen af programgrænsefladen som &doxygen; laver, skal vise yderligere information om filens indhold i listen med filnavne, kan du tilføje følgende linjer til kildekodefilens skabelon: </para> +<screen +><computeroutput> +/** + * \file $MODULE$.cpp + * \brief (skriv en kort beskrivelse her). + **/ +</computeroutput +></screen> +<para +>Så snart du laver en ny kildekodefil, erstatter &tdevelop; variablen <varname +>$MODULE$</varname +> med navnet på den nyoprettede fil. Hvis du for eksempel laver en ny C++ klasse som hedder <classname +>EnEnkelTest</classname +>, ser du følgende linjer i filen <filename +>enenkeltest.cpp</filename +>: </para> +<screen +><computeroutput> +/** + * \file enenkeltest.cpp + * \brief (skriv en kort beskrivelse her). + **/ +</computeroutput +></screen> +<para +>Du skal stadigvæk sørge for den korte beskrivelse efter nøgleordet <quote +>\brief</quote +>, men en del af jobbet er allerede gjort automatisk for dig. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Tekstfilen med licensen</term> +<listitem> +<para +>Som et andet eksempel kunne du inkludere en eksplicit reference til licensteksten som du vil bruge i skabelonen. Brug variablen <varname +>$LICENSEFILE$</varname +> til dette, og tilføj for eksempel følgende linje: </para> + +<screen +><computeroutput> +// Se $LICENSEFILE$ for den fuldstændige licenstekst. +</computeroutput +></screen> +<para +>Programguiden erstatter <varname +>$LICENSEFILE$</varname +> med navnet på filen hvor den fuldstændige licenstekst findes, nemlig: </para> +<screen +><computeroutput> +// Se COPYING for den fuldstændige licenstekst. +</computeroutput +></screen> +<para +>for <acronym +>GPL</acronym +>-licensen, eller </para> +<screen +><computeroutput> +// Se LICENSE.BSD for den fuldstændige licenstekst. +</computeroutput +></screen> +<para +>hvis du bestemmer dig for at bruge <acronym +>BSD</acronym +>-licensen for programmet. </para> +<para +>Der er naturligvis flere variabler som &tdevelop; kender til. Se afsnittet <link linkend="newfiles-edittemplates" +>Redigér skabelonerne</link +> i kapitlet <link linkend="editing" +>Redigeringsværktøjer</link +> for at finde ud af hvad der er muligt. </para> +</listitem> +</varlistentry> +</variablelist> + +<note +><para +>Skabelonerne som du definerer her får ingen virkning førend programguiden har lavet det nye projekt. Du finder informationen længst oppe i filerne som du selv laver under udviklingsprocessen. Når de oprindelige filer laves, bruger programguiden nogle fordefinerede standardskabeloner. Du skal indstille de oprindelige filer til dine behov manuelt. </para +></note> + +</sect3 +> <!-- new-projects-start-templates-edit --> +</sect2 +> <!-- new-projects-start-templates --> + +<sect2 id="new-projects-start-build"> +<title +>Byg de oprindelige projektfiler</title> + +<indexterm zone="new-projects-start-build"> + <primary +>projekt</primary> + <secondary +>ny</secondary> + <tertiary +>byg</tertiary +></indexterm> +<indexterm zone="new-projects-start-build"> + <primary +>projekt</primary> + <secondary +>oprindelig bygning</secondary +></indexterm> + +<para +>Nu er næsten alt klart. På den sidste side i skabelonen, er knappen <guibutton +>Næste ></guibutton +> ændret så den nu lyder <guibutton +>Afslut</guibutton +>. </para> +<para +><emphasis +>Tænk dig om inden du klikker på den!</emphasis +> Du har stadigvæk mulighed for at undersøge alting ved at bruge knappen <guibutton +>< Tilbage</guibutton +> gentagne gange. Eftersom programguiden husker al information du hidtil har indtastet, kan det være passende at tage dig tid at kigge tilbage en gang til. Hvis du bruger lokal &CVS;, så glem ikke at kontrollere navnet på <emphasis +>&CVS;-arkivet</emphasis +> igen (der må ikke allerede være nogen undermappe med dette navn i &CVS;-rodmappen. Hvis der er det, så forsøg med et andet arkivnavn). </para> +<para +>Hvis du nogensinde ikke ønsker at det nye projekt skal bygges, så afbryd dialogen <guilabel +>Opret nyt projekt</guilabel +> med knappen <guibutton +>Afbryd</guibutton +>. Klik ellers på <guibutton +>Afslut</guibutton +>, og se i vinduet <guilabel +>Meddelelser</guilabel +> hvordan programguiden laver projektet. </para> +<para +>Hvis du vil bruge et versionshåndteringssystem (&CVS;), sker det i virkeligheden i to kørsler. Programguiden bygger først projektmapperne og kalder siden &CVS;-programmet som starter vinduet <guilabel +>Meddelelser</guilabel +> med sit eget indhold. Hvis nogen fejl opstår i en af kørslerne, stopper processen og viser dig en tilsvarende fejlmeddelelse i vinduet. </para> + +<note +><para +>I mange tilfælde når dit nye projekt er blevet sat op på denne måde, vil &tdevelop; automatisk indlæse kildefiler for en eller flere af de basalt vigtige moduler så du kan begynde at arbejde med det samme. (Hvilke kildemoduler vil blive vist—hvis der er nogen—det afhænger imidlertid af den skabelon der blev valgt oprindeligt i programguiden.) </para +></note> + +<para +>Glem ikke at kontrollere hvad programguiden sørger for fra begyndelsen. Du vil måske for eksempel ændre den oprindelige information i filhovederne ifølge dine egne skabeloner. Oftest finder du dem i undermappen <filename class="directory" +>templates</filename +> i projektmappen. Nogle enkle kopieringshandlinger er oftest utilstrækkeligt. </para> +<para +>Derefter er det tilrådeligt at du <emphasis +>kompilerer det oprindelige projektet</emphasis +> inden du forsøger at ændre nogen kode. I de fleste tilfælde skulle denne første kompilering være mulig. På den måde kan du afgøre om projektet virkelig er blevet oprettet ifølge dine behov. Hvis det ikke er det, så fjern blot projektmappen (i den lokale &CVS;-rod også, hvis du bruger en) og begynde forfra. </para> + +<warning id="defaultbuild-warning" +> <!-- ### remove this when "default" works again --> + + <indexterm zone="defaultbuild-warning"> + <primary +>standard-byggeindstilling</primary> + <secondary +>advarsel</secondary +></indexterm> + <indexterm zone="defaultbuild-warning"> + <primary +>byggeindstillinger</primary> + <secondary +>advarsel om standard-byggeindstilling</secondary +></indexterm> + <indexterm zone="defaultbuild-warning"> + <primary +>advarsel</primary> + <secondary +>standard-byggeindstilling</secondary +></indexterm> + + <para +>Inden du kompilerer det nye projekt første gang, kig så på <menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Byggeindstilling</guimenuitem +></menuchoice +>. Hvis der er tre valgmuligheder som vises: <guimenuitem +>default</guimenuitem +>, <guimenuitem +>optimized</guimenuitem +> og <guimenuitem +>debug</guimenuitem +>, med <guimenuitem +>debug</guimenuitem +> markeret, så behold det endelig, eller brug <guimenuitem +>optimized</guimenuitem +> i stedet for. </para> + <para +>På grund af visse begrænsninger i den nuværende indstilling af autoconf og automake, skal du <emphasis +>under ingen omstændigheder</emphasis +> bygge med indstillingen <guimenuitem +>default</guimenuitem +>. Det forstyrrer visse interne mappeindstillinger, og gør at <command +>configure</command +> klager når du senere forsøger at bruge den med byggeindstillingerne <guimenuitem +>optimized</guimenuitem +> eller <guimenuitem +>debug</guimenuitem +>. </para> + <para +>(Dette gælder kun for disse flervalgsmuligheder. Hvis programtypen du valgte kun sørger for byggeindstillingen <guimenuitem +>default</guimenuitem +>, skal du naturligvis bruge den.) </para> +</warning> + +</sect2 +> <!-- new-projects-start-build --> + +</sect1 +> <!-- new-projects --> + +<sect1 id="projects-configure"> +<title +>Indstilling af projekt</title> + +<para +>(Endnu ikke skrevet ...)</para> + +</sect1> + +</chapter +> <!-- applicationwizard --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/class-browsers.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/class-browsers.docbook new file mode 100644 index 00000000000..7e92568b4f4 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/class-browsers.docbook @@ -0,0 +1,89 @@ +<chapter id="class-browsers"> +<title +>Klassesøgeren</title> +<indexterm zone="class-browsers" +><primary +>klassesøgeren</primary +></indexterm> + +<para +>Ved arbejde med et projekt i et objektorienteret sprog, lægges vægten ikke på kildekodefilerne og deres navne, men på klasserne og deres sammenhæng. For at hjælpe dig med at navigere blandt definerede klasser og symboler, indeholder &tdevelop; diverse klassesøgere som synliggør klassestrukturen på forskellige måder. </para> + +<sect1 id="classview"> +<title +>Klassevisning</title> + +<para +>Denne visning er til venstre i hovedvinduet og indeholder en lineær liste af alle klasser, variabler og funktioner i projektet. Den er konstrueret som en trævisning. Hvis du åbner en klasseknude ved at klikke på den, vises en liste med alle metoder og egenskaber som de respektive klasse har. </para> + +<figure id="screenshot-classview" float="1"> +<title +>Et skærmaftryk af klassesøgeren</title> +<mediaobject> +<imageobject +><imagedata fileref="classview.png"/></imageobject> +</mediaobject> +</figure> + +<para +>Klassevisningen arbejder i to forskellige tilstande. Normalt grupperes alle symboler i <quote +>Klasser</quote +>, <quote +>Strukturer</quote +>, <quote +>Funktioner</quote +>, <quote +>Variabler</quote +> og <quote +>Navnerum</quote +>. I den sammenhængsafhængige menu, kan du vælge <guimenuitem +>Liste ifølge navnerum</guimenuitem +>. I denne tilstand, vises navnerumshierarkier og symboler grupperes i de respektive navnerum hvor de defineres. Dette kan være mere nyttigt i projekter som bruger mange (hierarkiske) navnerum. Det er mindre nyttigt i projekter uden navnerum. </para> + +<para +>Du kan også ændre måden som klassenavne vises på. Normalt vises klassernes navne, uden navnerummene hvor de er defineret. Det betyder at du ikke umiddelbart kan adskille klasser med samme navn i forskellige navnerum. Hvis du holder musen stille et øjeblik over et navn, vises dog det fuldstændige navnet som et værktøjsvink. Du kan vælge altid at vise det fuldstændige klassenavn ved at vælge <guimenuitem +>Fuldstændig rækkevidde for identifikatorer</guimenuitem +> i den sammenhængsafhængige menu. </para> + +<para +>Ved at klikke på en klasse eller metode i en klassevisning kommer du til dens definition. Du kan også springe til en metodes deklaration ved at vælge <guimenuitem +>Gå til deklaration</guimenuitem +> i den sammenhængsafhængige menu. I den sammenhængsafhængige menu for klasser findes også valgmulighederne <guimenuitem +>Tilføj metode...</guimenuitem +> og <guimenuitem +>Tilføj egenskab...</guimenuitem +> De åbner dialoger hvor du kan oprette nye metoder og variabeldeklarationer for den relevante klasse, sammen med en tom implementering. </para> + +</sect1 +> <!-- classview --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="classtools"> +<title +>Klasseværktøjer</title> + +<para +>Klasseværktøjsdialogen aktiveres ved at højreklikke på en klasse i klassevisningen og vælge <guimenuitem +>Klasseværktøj...</guimenuitem +>. </para> + +</sect1 +> <!-- classtools --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="classhierarchy"> +<title +>Klassehierarki</title> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect1 +> <!-- classhierarchy --> + +</chapter +> <!-- class-browsers --> + +<!-- ====================================================================== --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/commands.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/commands.docbook new file mode 100644 index 00000000000..9d3dc64ea6e --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/commands.docbook @@ -0,0 +1,2999 @@ +<chapter id="commands"> + +<!-- TODO +- CAUTION: Check everything against actual KDevelp behaviour. Do not rely on tool tips etc. +- Summarize menu entries, like in getting-started. +- Complete descriptions, e.g. from What's This. +- Link to more detailed description, e.g. in plugin chapter. +--> + +<chapterinfo> + <authorgroup> + <author +><firstname +>Volker</firstname +> <surname +>Paul</surname +></author> + <othercredit role="translator" +><firstname +></firstname +><surname +></surname +><affiliation +><address +><email +>[email protected]</email +></address +></affiliation +><contrib +></contrib +></othercredit +> + </authorgroup> + + <date +>2005-04-03</date> +</chapterinfo> + +<title +>Kommandoreference</title> + +<note +><para +>Genvejstasterne som vises i dette kapitel er de standardmæssige. De kan ændres. </para +></note> + + + +<sect1 id="menubar"> +<title +>Menulinjen</title +> <para +>Bemærk at visse menupunkter kun vises når de passer ind. I særdeleshed er visse indgange knyttede til funktioner i <link linkend="plugin-tools" +>plugin</link +> som kun er tilgængelige når pluginnet er aktiveret.</para> + + + + + + +<!-- ======================= F I L E ============================= --> + +<sect2 id="menu-file"> +<title +><guimenu +>Fil</guimenu +>-menuen</title> + +<variablelist> +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>N</keycap +></keycombo +> </shortcut +> <guimenu +>Fil</guimenu +> <guimenuitem +>Ny</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Opret en ny fil. Brugeren bliver bedt om at vælge mappe (standarden er nuværende projekts kildekodemappe) og indtaste et filnavn. Filtypen kan vælges i en liste. Desuden kan brugeren vælge om filen skal tilføjes til projektet. Derefter spørger Håndtering af automake hvilket mål som den nye filen skal tilføjes i. </para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>O</keycap +></keycombo +> </shortcut +> <guimenu +>Fil</guimenu +> <guimenuitem +>Åbn</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Åbner en eksisterende fil med en enkel dialog.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>O</keycap +></keycombo +> </shortcut +> <guimenu +>Fil</guimenu +> <guimenuitem +>Åbn nyligste</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Viser en undermenu med filer som nyligst var åbne. At vælge en af dem gør at KDevelop åbner filen. </para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Alt;&Ctrl;<keycap +>O</keycap +></keycombo +> </shortcut +> <guimenu +>Fil</guimenu +> <guimenuitem +>Åbn hurtigt</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Viser en liste med filer i det nuværende projekts kildekodemappe. Brugeren kan vælge fra listen eller indtaste et filnavn. Filen åbnes derefter. </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>S</keycap +></keycombo +> </shortcut +> <guimenu +>Fil</guimenu +> <guimenuitem +>Gem</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Gemmer nuværende fil.</para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>S</keycap +></keycombo +> </shortcut +> <guimenu +>Fil</guimenu +> <guimenuitem +>Gem som...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Bruger dialogen <guilabel +>Gem som...</guilabel +> for at lade dig gemme en kopi med et andet navn.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Fil</guimenu +> <guimenuitem +>Gem alle</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Gemmer alle åbne filer.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><shortcut +><keycap +>F5</keycap +></shortcut +> <guimenu +>Fil</guimenu +> <guimenuitem +>Genindlæs</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Genindlæser nuværende fil for at vies ændringer gjort af andre programmer. (Bemærk at sådanne ændringer normalt detekteres automatisk og brugeren bliver spurgt om filen skal genindlæses.)</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Fil</guimenu +> <guimenuitem +>Nulstil alle</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Nulstiller alle ændringer i åbnede filer. Spørger om du vil gemme ændringer så at nulstillingen kan afbrydes for hver ændret fil. </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>P</keycap +></keycombo +> </shortcut +> <guimenu +>Fil</guimenu +> <guimenuitem +>Udskriv...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Udskriv.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Fil</guimenu +> <guimenuitem +>Eksportér</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Eksport </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>F4</keycap +></keycombo +> </shortcut +> <guimenu +>Fil</guimenu +> <guimenuitem +>Luk</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Lukker denne fil. </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fil</guimenu +> <guimenuitem +>Luk alle</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Lukker alle åbne filer. </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fil</guimenu +> <guimenuitem +>Luk alle andre</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Lukke alle filer undtagen den nuværende. Meget nyttigt hvis du åbnede mange filer og vil koncentrere dig om den nuværende. Uden dette ville du behøve at lukke alle og derefter åbne den nuværende igen. </para> +<para +>Bemærk at der er en lignende kommando i menuen Vindue. </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>Q</keycap +></keycombo +> </shortcut +> <guimenu +>Fil</guimenu +> <guimenuitem +>Afslut</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Luk KDevelop.</para +></listitem> +</varlistentry> + +</variablelist> + +</sect2> + + + +<!-- ======================= E D I T ============================= --> + + +<sect2 id="menu-edit"> +<title +><guimenu +>Redigér</guimenu +>-menuen</title> + + +<variablelist> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>Z</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Fortryd</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Fortryd </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;&Shift;<keycap +>Z</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Annullér fortryd</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Annullér fortryd </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>X</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Klip</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Klip </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>C</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Kopiér</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Kopiér </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>V</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Indsæt</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Indsæt </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>A</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Markér alt</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Markér alle </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;&Shift;<keycap +>A</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Afmarkér</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Afmarkér </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;&Shift;<keycap +>B</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Blokmarkeringstilstand</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Blokmarkeringstilstand </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +><keycap +>Insert</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Overskrivningstilstand</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Overskrivningstilstand </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>F</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Søg</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Find </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +><keycap +>F3</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Find næste</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Find næste </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Shift;<keycap +>F3</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Find forrige</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Find forrige </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>R</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Erstat</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Erstat </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>G</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Gå til linje</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Gå til linje </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Alt;&Ctrl;<keycap +>F</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Søg i filer</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Find i filer </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Shift;<keycap +>R</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Søg-markér-erstat</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Søg-markér-erstat </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Redigér</guimenu +> <guimenuitem +>Reformatér kildekode</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Reformatér kildekode </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>J</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Ekspandér tekst</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Udvid tekst </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>L</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Ekspandér forkortelser</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Udvid forkortelser </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>Mellemrum</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Komplettér tekst</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Fuldstændiggør tekst </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +><keycap +>F2</keycap +></keycombo +> </shortcut +> <guimenu +>Redigér</guimenu +> <guimenuitem +>Opret medlem</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Gør til medlem </para +></listitem> +</varlistentry> + + +</variablelist> + +</sect2> + + + +<!-- ======================= V I E W ============================= --> + + +<sect2 id="menu-view"> + +<title +><guimenu +>Vis</guimenu +>-menuen</title> + +<variablelist> +<varlistentry> +<term +><menuchoice +><guimenu +>Vis</guimenu +> <guimenuitem +>Tilbage</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Tilbage </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Vis</guimenu +> <guimenuitem +>Fremad</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Fremad </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>/</keycap +></keycombo +> </shortcut +> <guimenu +>Vis</guimenu +> <guimenuitem +>Skift til...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Skift til... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Alt;<keycap +>C</keycap +></keycombo +> </shortcut +> <guimenu +>Vis</guimenu +> <guimenuitem +>Hæv editor</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Hæv editor </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +><keycap +>F4</keycap +></keycombo +> </shortcut +> <guimenu +>Vis</guimenu +> <guimenuitem +>Næste fejl</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Næste fejl </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Shift;<keycap +>F4</keycap +></keycombo +> </shortcut +> <guimenu +>Vis</guimenu +> <guimenuitem +>Foregående fejl</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Forrige fejl </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Shift;<keycap +>F</keycap +></keycombo +> </shortcut +> <guimenu +>Vis</guimenu +> <guimenuitem +>Fuldskærmstilstand</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Fuldskærmstilstand </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>F12</keycap +></keycombo +> </shortcut +> <guimenu +>Vis</guimenu +> <guimenuitem +>Skift til deklaration/implementering</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Skifter mellem inkludering/implementering </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Vis</guimenu +> <guimenuitem +>Værktøjsvisninger</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Værktøjsvisninger </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Vis</guimenu +> <guimenuitem +>Dokning af værktøj</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Dokning af værktøj </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +><keycap +>F7</keycap +></keycombo +> </shortcut +> <guimenu +>Vis</guimenu +> <guimenuitem +>Skift til kommandolinje</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Skift til kommandolinje </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Vis</guimenu +> <guimenuitem +>Schema</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Farvesammensætning </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +><keycap +>F10</keycap +></keycombo +> </shortcut +> <guimenu +>Vis</guimenu +> <guimenuitem +>Dynamisk linjebrud</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Dynamiske linjebrud </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Vis</guimenu +> <guimenuitem +>Dynamiske linjebrudmarkører</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Dynamiske tekstombrydningsindikatorer </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Vis</guimenu +> <guimenuitem +>Vis/Skjul statisk linjebrudsmarkør</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Vis/Skjul statisk linjebrudsmarkør </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +><keycap +>F6</keycap +></keycombo +> </shortcut +> <guimenu +>Vis</guimenu +> <guimenuitem +>Vis/Skjul ikonkant</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Vis/Skjul ikonkant </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +><keycap +>F11</keycap +></keycombo +> </shortcut +> <guimenu +>Vis</guimenu +> <guimenuitem +>Vis/Skjul linjenummer</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Vis/Skjul linjenummer </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Vis</guimenu +> <guimenuitem +>Vis/Skjul rullelistemarkeringer</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Vis/Skjul rullelistemarkeringer </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +><keycap +>F9</keycap +></keycombo +> </shortcut +> <guimenu +>Vis</guimenu +> <guimenuitem +>Vis/Skjul foldemarkører</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Vis/Skjul foldemarkører </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Vis</guimenu +> <guimenuitem +>Kodefoldning</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Kodefoldning </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Vis</guimenu +> <guimenuitem +>Sæt tegnsæt</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Sæt tegnsæt </para +></listitem> +</varlistentry> + + + +</variablelist> + +</sect2> + + + + +<!-- ======================= P R O J E C T ============================= --> + + +<sect2 id="menu-project"> +<title +>Menuen <guimenu +>Projekt</guimenu +></title> + +<variablelist> + +<varlistentry> +<term +><menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Nyt projekt...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Nyt projekt... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Åbn projekt...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Åbn projekt... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Åbn nyligste projekt</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Åbn nyligt projekt </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Aktivt sprog</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Aktivt sprog </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Importér eksisterende projekt...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Importér eksisterende projekt... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Ny klasse...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Ny klasse... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Arvediagram for klasser</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Klasse arve-diagram </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Tilføj oversættelse...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Tilføj oversættelse... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Byggeindstilling</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Byggeindstilling </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Distribution og publicering</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Distribution og publicering </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Projektindstillinger...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Projektindstillinger... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Luk projekt</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Luk projekt </para +></listitem> +</varlistentry> + + + + +</variablelist> + +</sect2> + + +<!-- ======================= B U I L D ============================= --> + + +<sect2 id="menu-build"> +<title +>Menuen <guimenu +>Projekt</guimenu +></title> + +<variablelist> + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +><keycap +>F8</keycap +></keycombo +> </shortcut +> <guimenu +>Byg</guimenu +> <guimenuitem +>Byg projekt</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Byg projekt </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +><keycap +>F7</keycap +></keycombo +> </shortcut +> <guimenu +>Byg</guimenu +> <guimenuitem +>Byg aktivt mål</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Byg aktivt mål </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Kompilér fil</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Kompilér fil </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Kør configure</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Kør configure </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Kør automake og beslægtede programmer</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Kør automake og beslægtede programmer </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Installér</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Installér </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Installér (som systemadministrator)</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Installér (som brugeren root) </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Ryd projekt</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Rens projekt </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Distclean</guimenuitem +> </menuchoice +></term> +<listitem +><para +>DistClean </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Shift;<keycap +>F9</keycap +></keycombo +> </shortcut +> <guimenu +>Byg</guimenu +> <guimenuitem +>Byg meddelelser og indflet</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Byg meddelelser og flet ind </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Kør program</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Udfør programmet </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Byg dokumentation af programgrænseflade</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Byg API-dokumentation </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Ryd dokumentation af programgrænseflade</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Ren API-dokumentation </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +><keycap +>Escape</keycap +></keycombo +> </shortcut +> <guimenu +>Byg</guimenu +> <guimenuitem +>Stop</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Stop </para +></listitem> +</varlistentry> + + + + +</variablelist> + +</sect2> + + + +<!-- ======================= D E B U G ============================= --> + + +<sect2 id="menu-debug"> +<title +>Menuen <guimenu +>Projekt</guimenu +></title> + +<variablelist> + +<varlistentry> +<term +><menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>Start</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Start </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>Stop</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Stop </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>Afbryd</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Interrupt </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>Kør til markør</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Kør til markør </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>Træd hen forbi</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Træd over </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>Gå forbi instruktion</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Gå forbi instruktion </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>gå ind i</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Træd ind i </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>Gå ind i instruktion</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Gå ind i instruktion </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>Gå ud</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Træd ud af </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>Veksle stoppunkt</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Slå stoppunkt til/fra </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>Visere</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Fremvisere </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>Undersøg hukommelsesdump...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Undersøg core-fil... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>Knyt til process</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Kobl til proces </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>Valgrind kontrol af hukommelseslæk</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Valgrind kontrol af hukommelseslæk </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>Profilér med Kcachegrind</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Profil med KCachegrind </para +></listitem> +</varlistentry> + + + + +</variablelist> + +</sect2> + + + + + +<!-- ======================= B O O K M A R K S ============================= --> + + + +<sect2 id="menu-bookmarks"> +<title +><guimenu +>Bogmærker</guimenu +>-menuen</title> + +<variablelist> + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>B</keycap +></keycombo +> </shortcut +> <guimenu +>Bogmærker</guimenu +> <guimenuitem +>Tilføj bogmærke</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Tilføjer aktuelt valg til dine bogmærker.</para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Bogmærker</guimenu +> <guimenuitem +>Ryd alle bogmærker</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Ryd for alle bogmærken.</para +></listitem> +</varlistentry> +</variablelist> + +</sect2> + + + + +<!-- ======================= W I N D O W ============================= --> + + +<sect2 id="menu-window"> +<title +><guimenu +>Vindue</guimenu +> menuen</title> + +<variablelist> + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Alt;<keycap +>W</keycap +></keycombo +></shortcut +> <guimenu +>Vindue</guimenu +> <guimenuitem +>Luk markerede vinduer...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Luk markerede vinduer...</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>F4</keycap +></keycombo +></shortcut +> <guimenu +>Vindue</guimenu +> <guimenuitem +>Luk</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Luk</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +> Vindue</guimenu +><guimenuitem +> Luk alle</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Luk alle</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Vindue</guimenu +> <guimenuitem +>Luk alle andre</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Luk alle andre</para +></listitem> +</varlistentry> + + +</variablelist> + +</sect2> + + + + + + +<!-- ======================= T O O L S ============================= --> + + +<sect2 id="menu-tools"> +<title +><guimenu +>Værktøjs</guimenu +>menuen</title> + +<variablelist> +<varlistentry> +<term +><menuchoice +><guimenu +>Værktøjer</guimenu +> <guimenuitem +>Skrivebeskyttet tilstand</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Skrivebeskyttet tilstand </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Værktøj</guimenu +> <guimenuitem +>Filtype</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Filtype </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Værktøj</guimenu +> <guimenuitem +>Farvelægning</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Farvelægning </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Værktøjer</guimenu +> <guimenuitem +>Linjeslut</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Slut på linje </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Værktøjer</guimenu +> <guimenuitem +>Stavning</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Stavning </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>I</keycap +></keycombo +> </shortcut +> <guimenu +>Værktøjer</guimenu +> <guimenuitem +>Indryk</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Indryk </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;&Shift;<keycap +>I</keycap +></keycombo +> </shortcut +> <guimenu +>Værktøj</guimenu +> <guimenuitem +>Afindentér</guimenuitem +> </menuchoice +></term> +<listitem +><para +>unindent </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Værktøjer</guimenu +> <guimenuitem +>Ren indrykning</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Ryd indentering </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>Tab</keycap +></keycombo +> </shortcut +> <guimenu +>Værktøj</guimenu +> <guimenuitem +>Justér</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Justér </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>D</keycap +></keycombo +> </shortcut +> <guimenu +>Værktøjer</guimenu +> <guimenuitem +>Kommentar</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Kommentar </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;&Shift;<keycap +>D</keycap +></keycombo +> </shortcut +> <guimenu +>Værktøjer</guimenu +> <guimenuitem +>Fjern kommentar</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Afkommentér </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>U</keycap +></keycombo +> </shortcut +> <guimenu +>Værktøjer</guimenu +> <guimenuitem +>Store bogstaver</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Store bogstaver </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;&Shift;<keycap +>U</keycap +></keycombo +> </shortcut +> <guimenu +>Værktøjer</guimenu +> <guimenuitem +>Små bogstaver</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Små bogstaver </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Alt;&Ctrl;<keycap +>U</keycap +></keycombo +> </shortcut +> <guimenu +>Værktøj</guimenu +> <guimenuitem +>Indledende store bogstaver</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Lav om til store bogstaver </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>J</keycap +></keycombo +> </shortcut +> <guimenu +>Værktøjer</guimenu +> <guimenuitem +>Forbind linjer</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Forbind linjer </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Værktøjer</guimenu +> <guimenuitem +>Tekstombryd dokument</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Bryd linjer mellem ord i dokumentet </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>værktøj</guimenu +> <guimenuitem +>Visning af forskelle...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Visning af forskelle... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Værktøj</guimenu +> <guimenuitem +>Kør kommando...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Kør kommando... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Værktøj</guimenu +> <guimenuitem +>Filtrér markering gennem kommando...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Filtrerer markeringen gennem en ekstern kommando ved at bruge <link linkend="KDevFilter" +>filterpluginnet</link +>. </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Værktøj</guimenu +> <guimenuitem +>Fejlsøg regulært udtryk...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Fejlsøg regulært udtryk... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Værktøj</guimenu +> <guimenuitem +>Part-udforesker</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Part-udforsker </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Alt;&Ctrl;<keycap +>C</keycap +></keycombo +> </shortcut +> <guimenu +>Værktøj</guimenu +> <guimenuitem +>Hurtigåbning af klasse...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Hurtig-åbn klasse... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Alt;&Ctrl;<keycap +>M</keycap +></keycombo +> </shortcut +> <guimenu +>Værktøj</guimenu +> <guimenuitem +>Hurtigåbningsmetode...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Hurtig-åbn metode... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Alt;&Ctrl;<keycap +>P</keycap +></keycombo +> </shortcut +> <guimenu +>Værktøj</guimenu +> <guimenuitem +>Forhåndsvis uddata fra Doxygen</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Forhåndsvis Doxygen uddata </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;&Shift;<keycap +>S</keycap +></keycombo +> </shortcut +> <guimenu +>Værktøj</guimenu +> <guimenuitem +>Dokumentér nuværende funktion</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Dokumentér denne funktion </para +></listitem> +</varlistentry> + + + +</variablelist> + +</sect2> + + + + +<!-- ======================= S E T T I N G S ============================= --> + + +<sect2 id="menu-settings"> +<title +><guimenu +>Opsætnings</guimenu +>menuen</title> + + +<variablelist> + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Ctrl;<keycap +>M</keycap +></keycombo +></shortcut +> <guimenu +>Opsætning</guimenu +> <guimenuitem +>Vis/Skjul menulinje</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Vis/Skjul menulinjen.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Værktøjslinjer</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Åbner en undermenu hvor du kan vælge at vise eller skjule de forskellige værktøjslinjer.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Vis statuslinje</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Vis statuslinjen.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil genveje...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Indstil genveje... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil værktøjslinjer...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Indstil værktøjslinjer... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil bekendtgørelser</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Indstil bekendtgørelser... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil editoren...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Indstil editor... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil KDevelop...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Indstil KDevelop... </para +></listitem> +</varlistentry> + + + + +</variablelist> + +</sect2> + + +<!-- ======================= H E L P ============================= --> + + +<sect2 id="menu-help"> +<title +><guimenu +>Hjælpe</guimenu +>menuen</title> + +<variablelist> + +<varlistentry> +<term +><menuchoice +><guimenu +>Hjælp</guimenu +> <guimenuitem +>Håndbog for KDevelop</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Vis dette dokument.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Shift;<keycap +>F1</keycap +></keycombo +></shortcut +> <guimenu +>Hjælp</guimenu +> <guimenuitem +>Hvad er dette?</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Tegner et spørgsmålstegn (?) ved siden af musemarkøren. At klikke på et objekt i et vindue såsom knappen <guiicon +>Stop</guiicon +> viser nu en kortfattet forklaring. </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Hjælp</guimenu +> <guimenuitem +>Dagens vink</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Dagens tip </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Alt;&Ctrl;<keycap +>I</keycap +></keycombo +> </shortcut +> <guimenu +>Hjælp</guimenu +> <guimenuitem +>Kig i dokumentationsindeks...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Kig i dokumentationsindeks... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><shortcut +> <keycombo action="simul" +>&Alt;&Ctrl;<keycap +>S</keycap +></keycombo +> </shortcut +> <guimenu +>Hjælp</guimenu +> <guimenuitem +>Søg i dokumentationen...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Søg i dokumentationen... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Hjælp</guimenu +> <guimenuitem +>Manualside...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Manualside... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Hjælp</guimenu +> <guimenuitem +>Infoside...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Info-side... </para +></listitem> +</varlistentry> + + +<varlistentry> +<term +><menuchoice +><guimenu +>Hjælp</guimenu +> <guimenuitem +>Rapportér fejl...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Rapportér problem.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Hjælp</guimenu +> <guimenuitem +>Om KDevelop...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Vis en del kortfattet information om KDevelops versionsnummer, forfattere og licensaftale.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><menuchoice +><guimenu +>Hjælp</guimenu +> <guimenuitem +>Om KDE...</guimenuitem +> </menuchoice +></term> +<listitem +><para +>Vis noget information om den udgave af &kde; du kører.</para +></listitem> +</varlistentry> + +</variablelist> + +</sect2> + + + +</sect1> + + + + +</chapter> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/credits.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/credits.docbook new file mode 100644 index 00000000000..6c5bb3cb454 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/credits.docbook @@ -0,0 +1,40 @@ +<chapter id="credits"> +<title +>Medvirkende</title> + +<sect1 id="credits-contributions"> +<title +>Bidrag</title> + +<para> +<itemizedlist> + <listitem +><para +>Det oprindelige indhold af denne manual blev skrevet af Bernd Gehrmann <email +>[email protected]</email +> og Caleb Tennis <email +>[email protected]</email +>. </para +></listitem> + <listitem +><para +><link linkend="automake-manager-summary" +>Sammendraget af &automanag;</link +> og <link linkend="automake-manager-operation" +>Automake håndteringens operation</link +> kapitlerne blev skrevet af Ian Wadham, <email +>[email protected]</email +>). </para +></listitem> +</itemizedlist> +</para> + +</sect1 +> <!-- credits-contributions --> + +<!--CREDITS_FOR_TRANSLATORS--> + +</chapter +> <!-- credits --> + +<!-- ====================================================================== --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/cvs.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/cvs.docbook new file mode 100644 index 00000000000..9210ca2def3 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/cvs.docbook @@ -0,0 +1,133 @@ +<chapter id="cvs"> +<title +>Brug af &CVS;</title> +<indexterm zone="cvs" +><primary +>CVS</primary +></indexterm> +<indexterm zone="cvs" +><primary +>revisionskontrol</primary +></indexterm> + +<sect1 id="cvs-basics"> +<title +>&CVS; basalt</title> + +<para +>&CVS; er versionshåndteringssystemet som mange projekter med åben kildekode, inklusive &kde; — bruger. Det opbevarer al kildekode på et centralt sted, som kaldes <emphasis +>arkivet</emphasis +>. Udviklere henter en aktuel version af projektet eller versioner af det på vilkårlige tidspunkter, fra arkivet. I modsætning til visse andre versionshåndteringssystemer, er det ikke nødvendigt at <emphasis +>låse</emphasis +> filer som man skal arbejde med. Altså kan udvikling ske parallelt i stor udstrækning. </para> + +<para +>Så snart en udvikler er færdig med en opgave, <emphasis +>arkiverer</emphasis +> han sin kode (sammen med en logmeddelelse). &CVS; tager sig af arbejdet med at sammenflette ændringer som laves af flere udviklere. Det kan naturligvis ske at udviklere arbejder med samme kodeafsnit, hvilket giver anledning til ændringer med konflikter (i praksis indtræffer dette sjældent, og er ofte et tegn på bristende kommunikation). I dette tilfælde, forkaster &CVS; arkiveringen. En fil kan kun arkiveres efter alle konflikter er løst op. </para> + +<para +>Hidtil er de grundlæggende funktioner i &CVS;, som man oftest skal håndtere, beskrevet. Men &CVS; tilbyder meget mere: Man kan håndtere flere grene af et projekt (f.eks. var &kde; 1.1.2 og &kde; 2 grene i &kde;'s udviklingstræ), sammenflette ændringer fra en gren til en anden, spørge efter forskelle mellem versioner og filers versionshistorik, etc. </para> + +<para +>&CVS; implementeres som et klient-serversystem. Som bruger, sker al kommunikation med arkivet via kommandolinjeprogrammet &cvs;. Grænseflader på højere niveau er tilgængeligt via programmer såsom <application +>Cervisia</application +> (<ulink url="http://cervisia.sf.net" +> </ulink +>) eller <application +>TkCVS</application +> (<ulink url="http://tkcvs.sf.net" +></ulink +>). Kun en lille del af &cvs; funktioner, som er vigtige i det daglige arbejde, kan bruges direkte i &tdevelop;. </para> + +<para +>Grundlæggende kundskab om brug af &CVS; forudsættes. I særdeleshed bør du vide hvordan et givet projekt hentes fra arkivet. Vi anbefaler bogen <citetitle pubwork="book" +>Open Source Development With CVS</citetitle +> af Karl Fogel, som kan distribueres frit (undtagen de ikke-tekniske kapitler). Se <ulink url="http://cvsbook.red-bean.com/cvsbook.html" +></ulink +>. </para> + +</sect1 +> <!-- cvs-basics --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="cvs-commands"> +<title +>&CVS;-kommandoer i &tdevelop;</title> + +<para +>Følgende er tilgængeligt i filvisningernes sammenhængsafhængige menuer: </para> + +<variablelist> +<varlistentry> +<term +>Tilføj til arkivet</term> +<listitem> +<para +>Forbereder en fil for at tilføjes til arkivet. Filen overføres til arkivet når du arkiverer den (eller mappen som den findes i) næste gang. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Fjern fra arkivet</term> +<listitem> +<para +>Forbereder en fil for at fjernes fra arkivet. Dette tager også filen væk fra det lokale filsystem, så brug funktionen med forsigtighed! </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Opdatér</term> +<listitem> +<para +>Kører kommandoen <command +>cvs update</command +> for at sammenflette eventuelle ændringer fra andre brugere til din arbejdsmappe. Når du bruger menupunktet for en mappe, sker opdateringen normalt rekursivt, med mindre om du har lukket for det i indstillingsfilen <filename +>.cvsrc</filename +>. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Arkivér</term> +<listitem> +<para +>Kører <command +>cvs commit</command +> for at arkivere alle lokale ændringer i arkivet. Bemærk at du bør opdatere inden du gør dette. Hvis en anden bruger tidligere har arkiveret sine ændringer, kan &CVS; ellers give en fejlmeddelelse. </para> +</listitem> +</varlistentry> +</variablelist> + +<para +>Alle kommandoer startes som underprocesser af &tdevelop;, uden yderligere kommandolinjeflag eller miljøvariabler. Dette kan være et problem hvis forbindelsen til &CVS;-serveren går via en &ssh;-forbindelse, og kræver at du skriver et kodeord ind hver gang du arkiverer eller opdaterer. Dette er for eksempel nødvendigt hvis projektets vært er <filename +>sourceforge.net</filename +>. En måde at komme rundt om problemet beskrives i Ofte stiles spørgsmål om CVS/SSH, som du finder i SourceForge-dokumentationen. </para> + +</sect1 +> <!-- cvs-basics --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="cvs-behind"> +<title +>Bagved scenen</title> + +<sect2 id="cvs-behind-workdir"> +<title +>Hvad &CVS; gemmer i arbejdsmappen</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect2 +> <!-- cvs-behind-workdir --> + +</sect1 +> <!-- cvs-behind --> + +</chapter +> <!-- cvs --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/debugger.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/debugger.docbook new file mode 100644 index 00000000000..969a8ce3d41 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/debugger.docbook @@ -0,0 +1,337 @@ +<chapter id="debugger"> +<title +>Fejlsøgergrænsefladen</title> +<indexterm zone="debugger" +><primary +>fejlsøgere</primary +></indexterm> + +<para +>&tdevelop; indeholder en intern fejlsøger for C og C++, som er direkte integreret med editoren. Teknisk set er den implementeret som en grænseflade som bruger den flytbare &GNU;-fejlsøger <application +>gdb</application +> via en pipe. Fejlsøgeren kan startes på flere måder: </para> + +<itemizedlist> +<listitem> +<para +>Hovedprogrammet i projektet indlæses i fejlsøgeren med <menuchoice +><guimenu +>Fejlsøg</guimenu +><guimenuitem +>Start</guimenuitem +></menuchoice +>. </para> +</listitem> + +<listitem> +<para +>Ved at bruge <menuchoice +><guimenu +>Fejlsøg</guimenu +> <guimenuitem +>Start (andet)</guimenuitem +> <guimenuitem +>Undersøg hukommelsesdump</guimenuitem +></menuchoice +>, indlæser du et hukommelsesdump til hukommelsen, som blev lavet af operativsystemets kerne da programmet brød sammen. (At lave hukommelsesdump kan være slået fra på systemet, se <application +>ulimit(1)</application +>). Dette er nyttigt for en post-mortem analyse af et program. </para> +</listitem> + +<listitem> +<para +>Du starter fejlsøgeren for et program som allerede kører med <menuchoice +><guimenu +>Fejlsøg</guimenu +><guimenuitem +>Start (andet)</guimenuitem +> <guimenuitem +>Forbind til proces</guimenuitem +></menuchoice +>. En procesliste vises hvor du kan vælge processen som fejlsøgeren skal overtage. </para> +</listitem> + +<listitem> +<para +>Bemærk at fejlsøgning kun er mulig hvis projektet er kompileret med fejlsøgningsinformation aktiveret. Den kan aktiveres i dialogen <guibutton +>Oversætterindstillinger</guibutton +>. Når dette er aktiveret, laver oversætteren yderligere informationer som lader fejlsøgeren associere filnavne og linjenumre med adresser i det kørbare program. </para> +</listitem> +</itemizedlist> + +<para +>Grænsefladen til fejlsøgeren tilbyder flere visninger <quote +>ind i</quote +> processen: </para> + +<para +>Hvis du forsøger at fejlsøge et projekt uden fejlsøgningsinformation, får du meddelelsen <computeroutput +>Ingen kildekode...</computeroutput +> i statuslinjen. Hvis du forsøger at sætte stoppunkter, vises de som <computeroutput +>Hvilende (tilføj)</computeroutput +> i stoppunktsvinduet (se nedenfor). </para> + +<variablelist> +<varlistentry> +<term +>Variabler</term> +<listitem> +<indexterm zone="debugger" +><primary +>overvågningsvariabler</primary +></indexterm> +<para +>Dette vindue viser værdier for alle lokale variabler på det nuværende sted i programmet. Det dækker variablerne i oversætterens kaldstak, &ie; funktionen hvor processen blev afbrudt, funktionen som kaldte denne funktionen, og så videre hele vejen til funktionen <function +>main()</function +>. </para> + +<para +>En anden gren i variabelvinduet indeholder overvågningsvariabler. Du kan selv indstille hvilke variabler som ses her. Både lokale og globale variabler kan overvåges. Du kan enten tilføje en variabel ved at klikke på knappen <guibutton +>Tilføj</guibutton +> eller trykke på returtasten når punktet <keycap +>Overvåg</keycap +> er markeret. Variablerne kan fjernes igen med den sammenhængsafhængige menuen. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Rammestak</term> +<listitem> +<indexterm zone="debugger" +><primary +>rammestak</primary +></indexterm> +<para +>(... endnu ikke skrevet ...) </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Stoppunkter</term> +<listitem> +<indexterm zone="debugger" +><primary +>stoppunkter</primary +></indexterm> +<para +>Vinduet lader dig se og behandle stoppunkterne. Husk at &tdevelop; bruger <application +>GDB</application +>, så for at forstå &tdevelop;s fejlsøgningsfunktioner fuldstændigt, skal du vide en lille smule om <ulink url="http://www.gnu.org/software/gdb" +>GDB</ulink +>. </para> + +<para +>Hvis du vil kigge på kildekoden, defineres stoppunkter i <filename +>tdevelop/languages/cpp/debugger/breakpoint.h</filename +>. </para> + +<para +>I venstre kant har vinduet knapper for at:</para> + +<itemizedlist> +<listitem +><para +>Tilføj et tomt breakpoint</para +></listitem> +<listitem +><para +>Redigér det markerede stoppunkt</para +></listitem> + <listitem +><para +>Sletter det valgte breakpoint</para +></listitem> +<listitem +><para +>Fjern alle breakpoints</para +></listitem> +</itemizedlist> + +<para +>Hoveddelen af vinduet er en tabel med syv søjler. Hver linje i tabellen er et stoppunkt. Søjlerne er:</para> + +<orderedlist> +<listitem +><para +>Markeringsafkrydsningsfelt</para +></listitem> +<listitem +><para +>Type: en af: Ugyldig, Fil:Linje, Overvågningspunkt, Adresse, Funktion</para +></listitem> +<listitem +><para +>Status. Værdierne er:</para> +<itemizedlist> + <listitem +><para +>Aktiv</para +></listitem> + <listitem +><para +>Deaktiveret: Hvert stoppunkt kan <quote +>aktiveres</quote +> eller <quote +>deaktiveres</quote +>. Hvis det er deaktiveret har det ingen effekt på programmet indtil det aktiveres igen.</para +></listitem> + <listitem +><para +>Hvilende (tilføj): En stoppunkt er markeret sådan her hvis ingen fejlsøgningsinformation er tilgængelig. Fra GDB's informationsside: <blockquote +><para +>Hvis et specificeret stoppunktssted ikke kan findes, kan det skyldes det faktum at stedet er i et delt bibliotek som endnu ikke er indlæst. I et sådant tilfælde, kan du ville at GDB laver et specielt stoppunkt (kendt som et <quote +>hvilende stoppunkt</quote +>) som forsøger at løse sig selv op i fremtiden når et passende delt bibliotek indlæses.</para +></blockquote +> </para +></listitem> +</itemizedlist> +</listitem> +<listitem +><para +>Hvilende (rydning)</para +></listitem> +<listitem +><para +>Hvilende (ændring)</para +></listitem> +<listitem +><para +>Sted på formatet filnavn:linjenummer</para +></listitem> +<listitem +><para +>Betingelse</para +></listitem> +<listitem +><para +>Ignorér antal: Hvis det er et tal <varname +>ANTAL</varname +> større end nul, stoppes programmets kørsel ikke før følgende <varname +>ANTAL</varname +> gange som stoppunktet nås. Udover at mindske antallet at ignorere, udfører <application +>gdb</application +> ingen handling.</para +></listitem> +<listitem +><para +>Træffere: Regner ud hvor mange gange et stoppunkt er truffet.</para +></listitem> +</orderedlist> + + +</listitem> +</varlistentry> + +<varlistentry> +<term +>Vis assemblerkode</term> +<listitem> +<indexterm zone="debugger" +><primary +>vis assemblerkode</primary +></indexterm> +<para +>(... endnu ikke skrevet ...)</para> + +</listitem> +</varlistentry> +</variablelist> + + +<sect1 id="settingbreakpoints"> +<title +>Sæt stoppunkter</title> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect1 +> <!-- settingbreakpoints --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id ="debuggeroptions"> +<title +>Tilvalg</title> + +<variablelist> +<varlistentry> +<term +>Vis behandlede navne</term> +<listitem> +<indexterm zone="debugger" +><primary +>navnebehandling</primary +></indexterm> +<indexterm zone="debugger" +><primary +>behandling</primary +><secondary +>navn</secondary +></indexterm> + +<para +>Funktionsnavne i det kørbare program er <quote +>behandlede</quote +> for C++, &ie; funktionsnavnet indeholder information om argumenternes typer. Dette er nødvendigt for at støtte overbelastede funktioner. Behandlingsalgoritmen er ikke standardiseret, og adskiller sig til og med mellem forskellige udgaver af &GNU;'s C++ oversætter. </para> + +<para +>I assemblerkodevinduet vises normalt ubehandlede navne, så funktionssignaturer ligner udseendet i kildekoden, og er let læsbare. Alternativt, kan du vælge at se behandlede navne. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Forsøg at sætte stoppunkter når biblioteker indlæses</term> +<listitem> +<indexterm zone="debugger" +><primary +>dovne stoppunkter</primary +></indexterm> +<indexterm zone="debugger" +><primary +>stoppunkter</primary +><secondary +>doven</secondary +></indexterm> + +<para +>Fejlsøgerens baggrundsprogram <application +>gdb</application +> tillader ikke at stoppunkter sættes i kode som ikke for øjeblikket er indlæst. I et rigtigt modulært program, hvor kode ofte kun indlæses efter behov såsom plugin (med brug af C-bibliotekets funktion <function +>dlopen(3)</function +>), kan dette være besværligt. Derfor håndterer &tdevelop; selv støtte for stoppunkter i delte biblioteker. Hvis du aktiverer dette, kan du sætte stoppunkter i biblioteker som ikke er indlæst. Derefter, så snart <application +>gdb</application +> fortæller at et bibliotek er indlæst, forsøger &tdevelop; at sætte de hvilende stoppunkter. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Aktivér flydende værktøjslinje</term> +<listitem> +<indexterm zone="debugger" +><primary +>fejlsøgningsværktøjslinje</primary +></indexterm> +<indexterm zone="debugger" +><primary +>værktøjslinje</primary +><secondary +>fejlsøger</secondary +></indexterm> + +<para +>(... endnu ikke skrevet ...) </para> +</listitem> +</varlistentry> +</variablelist> + +</sect1 +> <!-- debuggeroptions --> + +</chapter +> <!-- debugger --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/documentation.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/documentation.docbook new file mode 100644 index 00000000000..a82e84059db --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/documentation.docbook @@ -0,0 +1,73 @@ +<chapter id="documentation"> +<title +>Dokumentation</title> + +<para +>Dokumentation hører desværre til de mere oversete ting i programmering. Alligevel så yder korrekt oprettet og vedligeholdt intern og ekstern dokumentation, yderst værdifuld hjælp. </para> + +<para +>Dokumentation har flere aspekter. Der er <itemizedlist> + <listitem +><para +><emphasis +>intern projektdokumentation</emphasis +>, som hovedsageligt består af <itemizedlist> + <listitem +><para +><emphasis +>kommentarer</emphasis +> i deklarationsfiler og kildekodefiler </para +></listitem> + <listitem +><para +><emphasis +>Intern dokumentation af programmeringsgrænsefladen</emphasis +> for projektet, som er lavet ud fra programfilerne af særlige værktøjer, f.eks. &doxygen; </para +></listitem> + </itemizedlist> + </para +></listitem> + <listitem +><para +><emphasis +>ekstern projektdokumentation</emphasis +>, som blandt andet består af <itemizedlist> + <listitem +><para +><emphasis +>ekstern dokumentation af programmeringsgrænseflade</emphasis +>, for eksempel for fælles systembiblioteker (&kde;, &Qt;, etc.) </para +></listitem> + <listitem +><para +>al øvrig dokumentation (manualer for programmeringssprog, almen systeminformation, vejledninger og lignende) </para +></listitem> + </itemizedlist> + </para +></listitem> +</itemizedlist> +</para> +<para +>Al denne dokumentation skal være enkel at vedligeholde og let tilgængelig så snart du behøver den. &tdevelop; har støtte for netop dette. </para> + +<!-- ### doc browser, notes on internal documentation, how to profit from Doxygen --> + +<sect1 id="docbrowser"> +<title +>Dokumentationssøgeren</title> + + +<figure id="screenshot-doctreeview" float="1"> +<title +>Et skærmaftryk af dokumentationstræet</title> +<mediaobject> +<imageobject +><imagedata fileref="doctreeview.png"/></imageobject> +</mediaobject> +</figure> + +</sect1 +> <!-- docbrowser --> + +</chapter +> <!-- documentation --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/editing.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/editing.docbook new file mode 100644 index 00000000000..95270a0ae30 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/editing.docbook @@ -0,0 +1,612 @@ +<chapter id="editing"> +<title +>Redigeringsværktøjer</title> + +<sect1 id="editing-snippets"> +<title +>Kodestumper</title> + +<itemizedlist> + <title +>Funktioner (foreløbigt overblik)</title> + <listitem +><para +>SnippetPart tilføjer en værktøjsvisning der som standard dokker til højre </para +></listitem> + <listitem +><para +>Tilføjelse, redigering og fjernelse af stumper er tilgængelig via en popop-menu </para +></listitem> + <listitem +><para +>Dobbeltklik på en kodestump fra listen indsætter den i den aktive visning ved markørens nuværende position </para +></listitem> + <listitem +><para +>Værktøjsvink viser indholdet af en kodestump </para +></listitem> + <listitem +><para +>Kodestumper opbevares i brugerens hjemmemappe, så hver bruger kan have sine egne kodestumper </para +></listitem> + <listitem +><para +>Kodestumper kan indeholde variabler på formen $<varname +>VARNAVN</varname +>$. Når kodestumpren bruges, spørges brugeren om erstatningsværdier for variablerne </para +></listitem> +</itemizedlist> +</sect1 +> <!-- editing-snippets --> + +<sect1 id="keyboardmapping"> +<title +>Tastebrug</title> +<indexterm zone="keyboardmapping" +><primary +>tastebindinger</primary +></indexterm> + +<para +>I det følgende giver vi en liste af normale tastebindninger for standardeditoren. Du kan indstille dem som du vil (hvordan det?). </para> + +<informaltable> +<tgroup cols="2"> +<tbody> + +<row +><entry +><para +><keycap +>Venstre </keycap +></para +></entry> +<entry +><para +>Flytter et tegn til venstre </para +></entry +></row> + +<row +><entry +><para +><keycap +>Højre </keycap +></para +></entry> +<entry +><para +>Flytter et tegn til højre </para +></entry +></row> + +<row +><entry +><para +><keycombo +>&Ctrl;<keycap +> Venstre </keycap +></keycombo +></para +></entry> +<entry +><para +>Flytter et ord til venstre </para +></entry +></row> + +<row +><entry +><para +><keycombo +>&Ctrl;<keycap +> Højre </keycap +></keycombo +></para +></entry> +<entry +><para +>Flytter et ord til højre </para +></entry +></row> + +<row +><entry +><para +><keycap +>Op </keycap +></para +></entry> +<entry +><para +>Flytter en linje op </para +></entry +></row> + +<row +><entry +><para +><keycap +>Ned </keycap +></para +></entry> +<entry +><para +>Flytter en linje ned </para +></entry +></row> + +<row +><entry +><para +><keycap +>Page Up </keycap +></para +></entry> +<entry +><para +>Flytter en side op </para +></entry +></row> + +<row +><entry +><para +><keycap +>Page Down </keycap +></para +></entry> +<entry +><para +>Flytter en side ned </para +></entry +></row> + +<row +><entry +><para +><keycombo +>&Ctrl;<keycap +> Page Up </keycap +></keycombo +></para +></entry> +<entry +><para +>Går til begyndelsen af filen </para +></entry +></row> + +<row +><entry +><para +><keycombo +>&Ctrl;<keycap +> Page Down </keycap +></keycombo +></para +></entry> +<entry +><para +>Går til slutningen af filen </para +></entry +></row> + +<row +><entry +><para +><keycap +>Hjem </keycap +></para +></entry> +<entry +><para +>Går til begyndelsen af linjen </para +></entry +></row> + +<row +><entry +><para +><keycap +>End </keycap +></para +></entry> +<entry +><para +>Går til slutningen af linjen </para +></entry +></row> + +</tbody> +</tgroup> +</informaltable> + +<para +>For alle tasterne ovenfor, kan shift-tasten desuden trykkes ned, for at markere tekst fra markørens nuværende position til den nye. </para> + +<informaltable> +<tgroup cols="2"> +<tbody> + +<row +><entry +><para +><keycap +>Backspace </keycap +></para +></entry> +<entry +><para +>Sletter et tegn til venstre </para +></entry +></row> + +<row +><entry +><para +><keycap +>Slet </keycap +></para +></entry> +<entry +><para +>Sletter tegnet under markøren </para +></entry +></row> + +<row +><entry +><para +><keycombo +>&Ctrl;<keycap +> C </keycap +></keycombo +></para +></entry> +<entry +><para +>Kopierer den valgte tekst til klippebordet </para +></entry +></row> + +<row +><entry +><para +><keycombo +>&Ctrl;<keycap +> V </keycap +></keycombo +></para +></entry> +<entry +><para +>Indsætter den markerede tekst fra klippebordet </para +></entry +></row> + +<row +><entry +><para +><keycombo +>&Ctrl;<keycap +> X </keycap +></keycombo +></para +></entry> +<entry +><para +>Sletter den markerede tekst og lægger den på klippebordet </para +></entry +></row> + +<row +><entry +><para +><keycombo +>&Ctrl;<keycap +> Z </keycap +></keycombo +></para +></entry> +<entry +><para +>Fortryd </para +></entry +></row> + +<row +><entry +><para +><keycombo +>&Shift;&Ctrl;<keycap +> Z </keycap +></keycombo +></para +></entry> +<entry +><para +>Annullér fortryd </para +></entry +></row> + +</tbody> +</tgroup> +</informaltable> + +</sect1 +> <!-- keyboardmapping --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="editing-reporter"> +<title +>Problemrapporter</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect1 +> <!-- editing-reporter --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="searchinggrepping"> +<title +>Søgning og flerfilssøgning</title> +<indexterm zone="searchinggrepping" +><primary +>søgning</primary +></indexterm> +<indexterm zone="searchinggrepping" +><primary +>find</primary +></indexterm> + +<sect2 id="searching"> +<title +>Søg efter tekst</title> + +<para +><keycombo +><keycap +>Ctrl</keycap +><keycap +>F</keycap +></keycombo +>- Søg, <keycombo +><keycap +>Ctrl</keycap +><keycap +>R</keycap +></keycombo +>- Erstat </para> + +</sect2 +> <!-- searching --> + + +<sect2 id="isearch"> +<title +>I-søgning</title> +<indexterm zone="isearch" +><primary +>i-søg</primary +></indexterm> +<indexterm zone="isearch" +><primary +>inkrementel søgning</primary +></indexterm> +<indexterm zone="isearch" +><primary +>søg</primary +><secondary +>inkrementel</secondary +></indexterm> + +<para +>Den almindelige søgning med <menuchoice +><guimenu +>Redigér</guimenu +><guimenuitem +>Søg</guimenuitem +></menuchoice +> kræver at du angiver hele søgebegrebet inden du starter. Oftest er det meget hurtigere at søge inkrementelt. Hvis du klikker på søgefeltet som hedder <guilabel +>I-søg</guilabel +> i værktøjslinjen, sker søgningen mens du skriver. Du vil mærke at det ønskede resultat allerede er der når du har skrevet 3 eller 4 tegn. </para> + +</sect2 +> <!-- isearch --> + + +<sect2 id="grep"> +<title +>Grep</title> +<indexterm zone="grep" +><primary +>søg</primary +><secondary +>i filer</secondary +></indexterm> + +<para +>Begge søgemekanismer som blev beskrevet ovenfor er begrænsede til søgning i én kildekodefil. Et yderligere værktøj som lader dig søge gennem et (muligvis stort) antal filer er tilgængeligt via punktet <guimenuitem +>Søg i filer...</guimenuitem +> i menuen <guimenu +>Redigér</guimenu +>. Det er blot en grænseflade til programmet &grep;(1). </para> + +<para +>I dialogen kan du angive hvilke filer der skal søges i. Der er et antal joker-mønstre tilgængelige i et kombinationsfelt. På denne måde kan du let begrænse søgemekanismen til inkluderingsfiler. Desuden angiver du en mappe hvor søgningen startes. Hvis du afkrydser feltet <guibutton +>Rekursiv</guibutton +>, går søgningen gennem alle mapper i hierarkiet under den angivne. </para> + +<para +>Søgebegrebet er generelt et regulært udtryk som følger POSIX-syntaksen. Du kan for eksempel bruge begrebet <literal +>"\<K.*"</literal +>, hvis du vil finde alle ord som begynder med bogstavet K. Følgende tegn tolkes på en særlig måde: </para> + +<informaltable> +<tgroup cols="2"> +<tbody> + +<row +><entry> + <literal +>.</literal> +</entry +><entry +>Matcher alle tegn </entry +></row> +<row +><entry> + <literal +>^</literal> +</entry +><entry +>Matcher begyndelsen af en linje </entry +></row> +<row +><entry> + <literal +>$</literal> +</entry +><entry +>Matcher slutningen af en linje </entry +></row> +<row +><entry> + <literal +>\<</literal> +</entry +><entry +>Matcher begyndelsen af et ord </entry +></row> +<row +><entry> + <literal +>\></literal> +</entry +><entry +>Matcher slutningen af et ord </entry +></row> +<row +><entry> + <literal +>?</literal> +</entry +><entry +>Matcher foregående punkt mindre end en gang </entry +></row> +<row +><entry> + <literal +>*</literal> +</entry +><entry +>Matcher det foregående punkt nul eller eller flere gange </entry +></row> +<row +><entry> + <literal +>+</literal> +</entry +><entry +>Matcher det foregående punkt en eller flere gange </entry +></row> +<row +><entry> + <literal +>{n}</literal> +</entry +><entry +>Matcher det foregående punkt nøjagtigt n gange </entry +></row> +<row +><entry> + <literal +>{n,}</literal> +</entry +><entry +>Matcher det foregående punkt n eller flere gange </entry +></row> +<row +><entry> + <literal +>{,n}</literal> +</entry +><entry +>Matcher foregående punkt mindre end n gange </entry +></row> +<row +><entry> + <literal +>{n,m}</literal> +</entry +><entry +>Matcher foregående punkt mindst <literal +>n</literal +> gange, men færre end <literal +>m</literal +> gange </entry +></row> + +</tbody> +</tgroup> +</informaltable> + +<para +>Tilbagereferencer til deludtryk indeni parenteser er også tilgængelige med notationen <literal +>\n</literal +>. </para> + +<para +>Som en særlig bonus for C++ programmører, er der nogle søgeskabeloner tilgængelige for typiske mønstre. De tillader dig for eksempel at søge efter alle kald af medlemsfunktioner for et vist objekt. </para> + +<para +>Når du har startet søgningen ved at klikke på knappen <guibutton +>Søg</guibutton +>, udføres den af en ydre, asynkron proces. Alle punkter som findes, ses i visningen som hedder <guilabel +>Grep</guilabel +>. Derefter kan du gå til de fundne punkter ved at klikke på dem. Bemærk at grep gennemsøger filerne som de er opbevarede i filsystemet. Hvis du har ændrede versioner af dem i editoren, kan du få forkerte linjenumre, eller visse ugyldige fundne punkter. Du kan undgå dette ved at gemme alle filer inden søgningen. </para> + +</sect2 +> <!-- grep --> + +</sect1 +> <!-- searchinggrepping --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="code-completion"> +<title +>Kodekomplettering</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect1 +> <!-- code-completion --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="newfiles"> +<title +>Opret nye filer og klasser</title> + +<para +>(... endnu ikke skrevet ...) </para> + +<sect2 id="newfiles-edittemplates"> +<title +>Redigér skabelonerne</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect2 +> <!-- newfiles-edittemplates --> + +</sect1 +> <!-- newfiles --> + +</chapter +> <!-- editing --> +<!-- ====================================================================== --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/file-browsers.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/file-browsers.docbook new file mode 100644 index 00000000000..0af82cf7fa0 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/file-browsers.docbook @@ -0,0 +1,67 @@ +<chapter id="file-browsers"> +<title +>Filsøgerne</title> + +<para +>På venstre side i hovedvinduet, kan &tdevelop; vise forskellige slags lister og træer til at vælge filer: </para> + +<variablelist> +<varlistentry> +<term +>Filtræ</term> +<listitem> +<para +>Dette viser en trævisning af filhierarkiet under projektmappen. Hvis du klikker på en fil, indlæses den i editoren. For filer som ikke indeholder tekst, starter KDevelop et program som kan håndtere den tilsvarende MIME-type. </para> + +<para +>Filtræet opdateres regelmæssigt så snart noget ændres i filsystemet. Hvis du for eksempel laver nye filer eller mapper (til og med udenfor &tdevelop;), ses det med det samme i fillisten. På Linux bruger denne funktionen FAM-biblioteket. På andre operativsystemer, eller via NFS, kontrolleres mapperne som vises med korte intervaller. </para> + +<para +>Filtræet skjuler filer som sædvanligvis ikke er interessante, såsom objektfiler. I <guimenuitem +>Projekttilvalg</guimenuitem +> under <guibutton +>Filvisninger</guibutton +>, kan du indstille hvilke mønstre som bruges til at bortfiltrere uinteressante filer (som en liste med jokertegn, adskilte med kommategn). </para> + +<para +>Du kan desuden vælge at begrænse filtræet så det kun viser filer som hører til projektet som for øjeblikket er indlæst. Dette kan ændres ved at klikke med højre museknap på træets rod. </para> + +<figure id="screenshot-filetree" float="1"> +<title +>Et skærmaftryk af filtræet</title> +<mediaobject> +<imageobject +><imagedata fileref="filetree.png"/></imageobject> +<textobject +><phrase +>Et skærmaftryk af filtræet</phrase +></textobject> +</mediaobject> +</figure> + +</listitem> +</varlistentry> +<varlistentry> +<term +>Filgrupper</term> +<listitem> +<para +>Dette viser filerne som tilhører projektet, grupperede ifølge filendelsen. Ligesom i filtræet, kan du redigere en fil ved at klikke på den med venstre museknap. </para> + +<para +>Grupperne som vises her kan indstilles under <guibutton +>Filvisninger</guibutton +> i dialogen <guimenuitem +>Projektindstillinger</guimenuitem +>. For at tilrette visningen efter dine behov, er det vigtigt at forstå hvordan filer fordeles til grupperne. For hver fil, går &tdevelop; gennem grupperne oppefra og ned. I hver gruppe kontrolleres om filnavnet matcher et af mønstrene. Ved en træffer, vises filen i gruppen og gentagelser afbrydes. Dette klargør at mere generelle mønstre skal placeres nedenunder mere specifikke. For eksempel skal en stjerne for gruppen <guilabel +>Øvrige</guilabel +> være det sidste mønster. </para> + +</listitem> +</varlistentry> +</variablelist> + +</chapter +> <!-- file-browsers --> + +<!-- ====================================================================== --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/getting-started.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/getting-started.docbook new file mode 100644 index 00000000000..83c0409c900 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/getting-started.docbook @@ -0,0 +1,4088 @@ + +<!-- +Please keep the formatting simple. +Do not indent XML constructs. +Keep lines at 80 characters length maximum. +--> + +<chapter id="getting-started"> + +<chapterinfo> +<authorgroup> +<author +><firstname +>Bernd</firstname +><surname +>Pol</surname +></author> +&erik.kjaer.pedersen.role; +</authorgroup> +</chapterinfo> + +<title +>Kom i gang med &tdevelop; — en guided tur</title> + +<para +>Nu da du har fået udviklingsmiljøet &tdevelop; hvordan skal du så bruge det? Eftersom dette er et temmelig komplekst program, er det ret let at løbe panden mod muren når man skal lære at bruge det, især hvis du ikke i forvejen har erfaringer med et integreret udviklingsmiljø.</para> + +<para +>Vi skal forsøge at gøre det hele lidt lettere ved at gennemgå trinene i processen at lave et simpelt KDE C++ program. På den måde får vi et hurtigt blik på:</para> + +<simplelist> +<member +><link linkend="gettingstarted-overview" +>Et første kig: Elementer i brugergrænsefladen for det integrerede udviklingsmiljø &tdevelop;.</link +></member> +<member +><link linkend="gettingstarted-configure" +>Udfør visse indledende indstillinger.</link +></member> +<member +><link linkend="gettingstarted-new" +>Hvordan man opretter et nyt projekt.</link> +</member> +<member +><link linkend="gettingstarted-edit" +>Nogle vink om hvordan man håndterer dokumenter.</link +></member> +<member +><link linkend="gettingstarted-compile" +>Hvordan man kompilerer programmet i dette projekt.</link +></member> +<member +><link linkend="gettingstarted-extend" +>Hvordan man tilføjer klasser og andre ting til projektet.</link +></member> +<member +><link linkend="gettingstarted-debug" +>Hvad man skal gøre for at fejlsøge programmet.</link +></member> +<member +><link linkend="gettingstarted-doc" +>Nogle grundlæggende værktøjer for at bygge program eller brugerdokumentation.</link +></member> +<member +><link linkend="gettingstarted-keys" +>Sidst men ikke mindst, genvejstaster</link +></member> +</simplelist> + +<para +>Inden vi begynder, skal et vigtigt begreb klargøres.</para> + +<formalpara> +<title +>Hvad kan man forvente sig?</title> +<para +>Som sagt er &tdevelop; et <emphasis +>integreret udviklingsmiljø</emphasis +>. Det betyder væsentligt at &tdevelop; ikke selv er et udviklingsværktøj, men snarere en grafisk grænseflade for nemt at få adgang til et omfattende antal udviklingsværktøjer, hvor mange i virkeligheden ville kræve komplicerede tastaturkommandoer hvis de blev kørt i en tekstterminal.</para> +</formalpara> + +<para +>Selvom &tdevelop; forenkler mange af disse programmeringsopgaver, forbliver meget af kompleksiteten i dette sæt værktøjer alligevel, hvilket betyder at for en fuldstændig forståelse af det integrerede udviklingsmiljø &tdevelop; skal du stadigvæk forstå de værktøjer som egentlig køres i baggrunden.</para> + +<para +>Derfor kan vi ikke lære dig hvordan man laver software, men snarere introducere nogle af de måder &tdevelop; blev designet til at forenkle denne proces. Hvis du vil lære dig mere om hvad et integreret udviklingsmiljø er beregnet til, kan du tage et kig på den historiske oversigt <link linkend="unixdev" +>Udvikling på &UNIX;</link +>, i særdeleshed kapitlet <link linkend="unixdev-ide" +>Integration af begreber og værktøjer</link +>.</para> + +<note> +<para +>Følgende beskrivelse gælder normaltilfældet, hvor &tdevelop; starter med <guilabel +>Forenklet IDEA-vinduestilstand</guilabel +>. Hvis du allerede er skiftet til en andet brugergrænseflade, findes visse punkter måske ikke ifølge beskrivelsen, eller opfører sig noget anderledes. Hvis du ikke er sikker på hvilken brugergrænseflade som &tdevelop; for øjeblikket bruger, så tjek det i dialogen <menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil KDevelop...</guimenuitem +> <guimenuitem +>Brugergrænseflade</guimenuitem +></menuchoice +>.</para> +</note> + +<sect1 id="gettingstarted-overview"> +<title +>Et første kig på &tdevelop;</title> + +<para +>Her handler det kun om det du ser når du først starter &tdevelop;. Du finder preliminær information om:</para> + +<simplelist> +<member +><link linkend="gettingstarted-overview-basic" +>Hvad er det som ses på fladen?</link +></member> +<member +><link linkend="gettingstarted-overview-help" +>Hvordan man får hjælp.</link +></member> +<member +><link linkend="gettingstarted-overview-menu" +>Hvad findes i menuerne?</link +></member> +<member +><link linkend="gettingstarted-overview-tools" +>Hvad er værktøjsvisningerne til for?</link +></member> +</simplelist> + +<sect2 id="gettingstarted-overview-basic"> +<title +>På overfladen</title> + +<para +>Når du starter &tdevelop; for første gang får du noget at se der ligner det her:</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="empty-ide.png" format="PNG"/> +</imageobject> +<caption> +<para +>&tdevelop;s udseende ved første opstart.</para> +<para +>(I virkeligheden er &tdevelop;s oprindelige vindue større, men elementerne du ser er de samme.)</para> +</caption> +</mediaobject> +</screenshot> + +<formalpara> +<title +>Arbejdsområde og værktøjsvisnings-faneblade.</title> +<para +>I denne førstegangstilstand bruger &tdevelop; den såkaldte <link linkend="uimodes-survey" +>IDEAl -brugergrænseflade</link +>. Et så stort arbejdsområde som muligt er omkrandset til venstre, nederst og til højre af en en række knapper der ligner faneblade i en fanebladsvisning. Klikker du på en af knapperne åbnes en <emphasis +>værktøjsvisning</emphasis +> i et vindue så du kan arbejde på en bestemt opgave.</para> +</formalpara> + +<formalpara> +<title +>Menuer og værktøjslinjer</title> +<para +>I toppen er der den sædvanlige menulinje, med selskab af flere rækker af værktøjslinjer, nogle af dem tomme til at begynde med. De fyldes op med knapper så snart der er et åbent projekt.</para> +</formalpara> + +<formalpara> +<title +>Statuslinje</title> +<para +>Til sidst er der en statuslinje i bunden af vinduet, der viser kort information om flere forskellige opgaver.</para> +</formalpara> +</sect2> + +<sect2 id="gettingstarted-overview-help"> +<title +>Sådan får du hjælp</title> + +<para +>Udover <guimenu +>Hjælpe</guimenu +>menuen der har svar på specifikke spørgsmål, sørger statuslinjen og to slags værktøjsvink for hurtig information.</para> + +<formalpara> +<title +>Hvad gør denne menuindgang?</title> +<para +>Når du placerer musemarkøren på et menupunkt, vises der som regel lidt kort information i statuslinjen. I de fleste tilfælde er det blot samme navn som menupunktet, mens der i andre tilfælde vises yderligere information om menupunktets formål.</para> +</formalpara> + +<formalpara> +<title +>Hvad hedder dette element.</title> +<para +>På mange elementer vises der et kort værktøjsvink når du placerer musemarkøren på det et par sekunder. Det er nyttigt når man hurtigt skal orientere sig i en værktøjslinje eller en værktøjsvisning i IDEAL-tilstanden når KDevelop er indstillet til kun at vise ikoner på disse knapper.</para> +</formalpara> + +<formalpara> +<title +>Hvad gør denne her?</title> +<para +>Man kan få mere information gennem udvidede værktøjsvink for mange elementer i udviklingsmiljøet. Vælg <menuchoice +><guimenu +>Hjælp</guimenu +> <guimenuitem +>Hvad er dette?</guimenuitem +></menuchoice +> eller tryk på <keycombo +><keycap +>&Shift;</keycap +><keycap +>F1</keycap +></keycombo +> og vælg så med spørgsmålstegnet det element du ønsker at vide mere om. Du kan også åbne en hvilken som helst menu på denne måde og klikke på et menupunkt (aktivt som inaktivt) for at få mere information.</para> +</formalpara> +</sect2> + +<sect2 id="gettingstarted-overview-menu"> +<title +>Hvad er der i menuerne?</title> + +<para +>Der er ti menuer som kan vælges i menulinjen. De fleste befolkes med alle tilvalg når et projekt er åbnet for egentligt arbejde, mens andre kræver at mindst et dokument er åbnet. I korthed tillader de følgende slags handlinger.</para> + +<note> +<para +>Dette er kun en oversigt. For en detaljeret beskrivelse af menuerne, se <link linkend="commands" +>Kommandoreferencen</link +>.</para> +</note> + +<variablelist> +<varlistentry> +<term +><guimenu +>Fil</guimenu +></term> +<listitem> +<formalpara> +<title +>Almindelige handlinger</title> +<para +>Dette er ret grundlæggende. Det lader dig oprette, åbne, gemme, udskrive og lukke dokumentfiler, såvel som afslutte &tdevelop;-programmet som normalt.</para> +</formalpara> + +<formalpara> +<title +>Nulstil alt</title> +<para +>Lader dig nulstille alle de seneste ændringer som endnu ikke er gemt, ved at indlæse filen igen fra disk. Dette fungerer for alle filer du redigerer, ikke kun dem som indgår i et projekt.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenu +>Redigér</guimenu +></term> +<listitem> +<para +>Denne menu er brugbar hvis kun et dokument er åbnet.</para> + +<formalpara> +<title +>Almindelige handlinger</title> +<para +>Det tilbyder den sædvanlige fortryd/annullér fortryd og klip, kopiér og indsæt-funktionalitet. Derforuden lader det dig vælge tekstblokke på forskellige vis.</para> +</formalpara> + +<formalpara> +<title +>Søg og erstat</title> +<para +>Der er to meget kraftfulde søgefunktioner tilgængelige, <menuchoice +><guimenu +>Redigér</guimenu +> <guimenuitem +>Søg i filer</guimenuitem +></menuchoice +> og <menuchoice +><guimenu +>Redigér</guimenu +> <guimenuitem +>Søg-vælg-erstat...</guimenuitem +></menuchoice +>. Foruden de sædvanlige søge- og erstatningsfunktioner begrænsede til det nuværende dokument, kan du desuden udføre globale søge- og erstatningshandlinger på en gang.</para> +</formalpara> + +<formalpara> +<title +>Avanceret tekstredigering</title> +<para +>Der er mulighed for at reformatere det aktuelle dokument og automatisk fuldstændiggøre delvist indtastet tekst på forskellige måder.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenu +>Vis</guimenu +></term> +<listitem> +<para +>Ligesom menuen <guimenu +>Redigér</guimenu +>, er denne menu kun nyttig hvis et projekt er åbent. I dette tilfælde er (bland andet) følgende tilvalg tilgængelige:</para> + +<formalpara> +<title +>Navigeringshistorik</title> +<para +>Skift mellem dokumenterne &etc; du har besøgt.</para> +</formalpara> + +<formalpara> +<title +>Fejlsporing</title> +<para +>Navigér til linjerne i kildekoden hvor fejlene i den seneste oversættelse skete.</para> +</formalpara> + +<formalpara> +<title +>Editor-relaterede handlinger</title> +<para +>Nogle indgane i <guimenu +>Vis</guimenu +>-menuen kontrollerer editorens udseende. Når der er tale om &kate;-parten (Embedded Advanced Text Editor) er følgende kontroller til rådighed:</para> +</formalpara> + +<itemizedlist> +<listitem> +<para +>Kontrollér opførsel af linjeombrydning i dokumentvinduet.</para> +</listitem> +<listitem> +<para +>Vis eller skjul forskellige visninger i kanten af dokumentvinduet. linjenumre, ikoner og desuden bogmærker i rullebjælken.</para> +</listitem> +<listitem> +<para +>Kontrollér visningen af foldede sektioner (midlertidigt skjult) i kildekode.</para> +</listitem> +</itemizedlist> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenu +>Projekt</guimenu +></term> +<listitem> +<para +>Al arbejde i &tdevelop; er baseret på <emphasis +>projekter</emphasis +> der egentlig bare samler kildekoder-filer, byggehåndterings-filer og andet information i en projektmappe. i denne menu kan du kontrollere hvilket projekt du vil bruge, hvilke egenskaber det har og her er også nogle håndteringshandlinger. Specielt:</para> + +<formalpara> +<title +>Åbn et projekt</title> +<para +>Tillader dig at oprette nye projekter, åbne eksisterende og importere projekter fra andre miljøer.</para> +</formalpara> + +<formalpara> +<title +>Projektindstillinger</title> +<para +>Tillader dig at definere en hel masse forskellige projektegenskaber.</para> +</formalpara> + +<formalpara> +<title +>Klassehåndtering</title> +<para +>Tilføj nye klasser til projektet og få overblik over klassers arv-sammenhæng.</para> +</formalpara> + +<formalpara> +<title +>Distribuér projekt</title> +<para +>Hjælper dig med at bygge distributionspakker af projektet.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenu +>Byg</guimenu +></term> +<listitem> +<para +>Denne menu drejer sig om at oversætte og dokumentere projektet. Derfor er den kun mulig at bruge når et projekt er åbnet. I dette tilfælde er følgende handlinger til rådighed:</para> + +<formalpara> +<title +>Oversæt, link, kør</title> +<para +>Lader dig oversætte og linke hele projektet eller dele af det, såvel som køre programmet i udviklingsmiljøet.</para> +</formalpara> + +<formalpara> +<title +>Forbered bygge-operationer</title> +<para +>Dette afhænger faktisk af make-systemet du benytter til dette projekt. Når der er talte om automake-projekter, kan du køre <filename +>Makefile.cvs</filename +> og <filename +>configure</filename +> for sig selv. Der er også mulighed for, i forskellig udstrækning, at fjerne oversatte filer fra projektet.</para> +</formalpara> + +<formalpara> +<title +>Installér programmet</title> +<para +>Lader dig installerere programmet i lokale kataloger, men også i system-kataloger hvortil kun root har adgang.</para> +</formalpara> + +<formalpara> +<title +>API-dokumentation</title> +<para +>Byg eller eller fjern doxygen-baseret API-dokumentation fra projektet som defineret i projektindstillingerne.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenu +>Fejlsøg</guimenu +></term> +<listitem> +<para +>Selvom denne menu fyldes med punkter så snart et projekt er aktivt, er den naturligvis kun brugbar hvis dette projekt i forvejen er oversat med fejlsøgningsinformation (dette sættes op i <menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Projektindstillinger...</guimenuitem +></menuchoice +>. Dermed er følgende handlinger til rådighed:</para> + +<formalpara> +<title +>Almindelige fejlsøgerhandlinger</title> +<para +>Første sektion i <guimenu +>Fejlsøg</guimenu +>-menuen sørger for en grafisk brugergrænseflade til GDB &GNU; symbolsk fejlsøger. Den lader dig starte og stoppe dit program i fejlsøgeren og trinvis gennemgå det på forskellige måder.</para> +</formalpara> + +<formalpara> +<title +>Stoppunkter</title> +<para +>&tdevelop; lader dig sætte stoppunkter i dit programs kildekode på flere måder. En af dem er at bruge <guimenuitem +>Slå stoppunkt til/fra</guimenuitem +>-menupunktet.</para> +</formalpara> + +<formalpara> +<title +>Avanceret fejlsøgning</title> +<para +>Andre <guimenu +>Fejlsøg</guimenu +>-menuindgange tillader mere sofistikeret programanalyse. Brug <keycombo +><keycap +>&Shift;</keycap +><keycap +>F1</keycap +></keycombo +> for at få mere information om deres formål.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenu +>Scripter</guimenu +></term> +<listitem> +<para +>Du kan kalde diverse scripter fra menuen for nemmere at opnå langtrækkende ændringer af teksten i editorvinduet som for øjeblikket bruges. Tilgængelige handlinger afhænger dog af scriptet som vælges. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenu +>Vindue</guimenu +></term> +<listitem> +<para +>Dette er ret almindeligt. Du kan vælge et hvilket som helst åbent dokumentvindue såvel som lukke et eller flere dokumentvinduer derinde. Du kan endda vælge en samling af vinduer der skal lukkes med en enkel handling.</para> + +<para +>Afhængig af editorpluginnet du bruger, kan der måske også findes andre menupunkter. Kate, standard-editorplugin, tillader eksempelvis også at editorvinduet opdeles vandret eller lodret.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenu +>Værktøjer</guimenu +></term> +<listitem> +<para +>&tdevelop; kan tilpasses på mange områder. Du kan vælge din favorit-editor til dine dokumenter såvel som udvide udviklingsmiljøets funktionalitet med eksterne værktøjer og plugin. Menuen <guimenu +>Værktøjer</guimenu +> afspejler det meste af disse mulige indstillinger.</para> + +<formalpara> +<title +>Avanceret redigering</title> +<para +>Den øvre del af <guimenu +>Værktøjer</guimenu +>-menuindgangene sørges der for af det valgte editor-plugin. Du kan vælge din favorit-editor gennem <menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil KDevelop...</guimenuitem +> <guilabel +>Editor</guilabel +></menuchoice +> Så snart et redigerbart dokumenter markeret, vil den øvre del af <guimenu +>Værktøjer</guimenu +>-menuen sørge for avancerede redigeringskommandoer, specifik for den aktuelle editor.</para> +</formalpara> + +<formalpara> +<title +>Webside-håndtering</title> +<para +>Hvis det aktive dokumentvindue indeholder en HTML-side, (⪚ vist fra udvalget i <guilabel +> Dokumentation</guilabel +>, vil <guimenu +>Værktøjer</guimenu +> vise ekstra menuindgange som giver diverse måder at håndtere websiden på.</para> +</formalpara> + +<formalpara> +<title +>Andre værktøjer</title> +<para +>Sædvanligvis er der en mængde andre indgange ifølge de værktøjer som for øjeblikket er tilgængelige. Brug <keycombo +><keycap +>&Shift;</keycap +> <keycap +>F1</keycap +></keycombo +> for at få mere information om deres formål.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenu +>Opsætning</guimenu +></term> +<listitem> +<para +>Denne menu lader dig vise og skjule menulinjen, værktøjslinjer og statuslinjen. Desuden kan du indstille genveje, værktøjslinjer, underretninger, editoren og &tdevelop;'s generelle opførsel.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenu +>Hjælp</guimenu +></term> +<listitem> +<para +>Her kan du vise KDevelops håndbog, slå begreber op i diverse dokumentationsfiler, vise manualsider (det traditionelle Unix manualformat) og infosider (GNU manualformatet). Desuden kan du rapportere fejl og få noget information om den nuværende version af KDevelop og dets forfattere.</para> +</listitem> +</varlistentry> +</variablelist> +</sect2> + +<sect2 id="gettingstarted-overview-tools"> +<title +>Hvad er de der værktøjsvisningerne til for?</title> + +<para +>Med brugergrænsefladen IDEA-vinduetilstand omgives arbejdsfladen af tre linjer med knapper, såkaldte <emphasis +>værktøjsvisningsfaneblade</emphasis +>. De gør at man kan få adgang til <emphasis +>værktøjsvisningsvinduer</emphasis +> som løser vigtige opgaver under programmeludviklingen. Hver af disse tre linjer værktøjsvisninger tjener forskellige hovedformål.</para> + +<itemizedlist> +<listitem> +<formalpara> +<title +>Venstre side</title> +<para +>Giver mulighed for adgang til værktøjer for navigering og udvalg.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Underkanten</title> +<para +>Disse visninger viser meddelelser som skabes af forskellige værktøjer.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Højre side</title> +<para +>Giver mulighed for adgang til dokumentation og værktøjer for kildekodehåndtering.</para> +</formalpara> +</listitem> +</itemizedlist> + +<para +>Antal værktøjsvisningsfaneblade som vises vil ændres når et projekt er åbnet til at arbejde med. Flere værktøjer for at arbejde med projektet kommer så til at være tilgængelige. Det egentlige antal værktøjsvisninger afhænger af de <link linkend="plugin-tools" +>plugin-værktøjer</link +> som for øjeblikket er tilgængelige i &tdevelop;. Du finder mere om dette emne i kapitlet <link linkend="setup" +>Indstil KDevelop</link +>.</para> + +<para +>For øjeblikket, når intet projekt er åbent, og standardantal plugin-værktøjer er indlæste, findes følgende værktøjsvisninger. Ved at klikke på et faneblad åbnes eller lukkes værktøjsvisningens vindue.</para> + +<variablelist> +<varlistentry> +<term +>Navigering og udvalg</term> +<listitem> +<formalpara> +<title +>Filvælger</title> +<para +>Sørger for et felt for at navigere i mappetræet og vælge filer at arbejde med præcis som du gør i &konqueror;. At klikke på en fil åbner den i et passende redigeringsvindue på arbejdsfladen. Et højreklik i filvælgerens område gør at en menu for navigering og filhåndtering vises.</para> +</formalpara> + +<formalpara> +<title +>Filliste</title> +<para +>Lister filer som for øjeblikket er åbne. At klikke på en fil vælger oftest dets redigeringsvindue på arbejdsfladen. Brug dette for hurtigt at navigere blandt et stort antal åbne filer. Desuden giver denne visning en måde at organisere åbne filer i forskellige <emphasis +>sessioner</emphasis +>. Dette er særligt nyttigt i meget store og komplekse projekter, for at hjælpe udvikleren med at koncentrere sig om forskellige opgaver. At højreklikke på en fil gør at en filhåndteringsmenu dukker op.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Visning af meddelelser</term> +<listitem> +<formalpara> +<title +>Program</title> +<para +>Viser uddata fra et program som startes indefra &tdevelop;.</para> +</formalpara> + +<formalpara> +<title +>Diff</title> +<para +>Bruges til at vise indholdet i filer med programrettelser. Viser uddata fra værktøjet for visning af forskelle, som startes fra menuen <menuchoice +><guimenu +>Værktøjer</guimenu +> <guimenuitem +>Visning af forskelle...</guimenuitem +></menuchoice +>.</para> +</formalpara> + +<formalpara> +<title +>Meddelelser</title> +<para +>Viser meddelelser som skabes af byggeværktøjerne som kaldes indefra &tdevelop;, oftest fra menuen <guimenu +>Byg</guimenu +>.</para> +</formalpara> + +<formalpara> +<title +>Søg i filer</title> +<para +>Viser listen med punkter som findes af den generelle søgefunktion som startes fra menuen <menuchoice +><guimenu +>Redigér</guimenu +> <guimenuitem +>Søg i filer...</guimenuitem +></menuchoice +>. Ved at klikke på en linje her, åbnes filen automatisk på angivet position i et redigeringsvindue.</para> +</formalpara> + +<formalpara> +<title +>Erstat</title> +<para +>Lister resultat af den generelle søge- og erstatningsfunktionen som startes fra menuen <menuchoice +><guimenu +>Redigér</guimenu +> <guimenuitem +>Søg-vælg-erstat...</guimenuitem +></menuchoice +>. I denne visning kan du for hvert fundet punkt bestemme dig for om du virkelig vil erstatte det eller ikke.</para> +</formalpara> +<note> +<para +>Den generelle søge- og erstatningsfunktion er i virkeligheden kun tilgængelig efter et projekt er indlæst i &tdevelop;. Ellers er værktøjet i menuen <menuchoice +><guimenu +>Redigér</guimenu +> <guimenuitem +>Søg-vælg-erstat</guimenuitem +></menuchoice +> ikke aktiveret.</para> +</note> + +<formalpara> +<title +>Konsol</title> +<para +>Åbner et terminalemuleringsvindue som ligner <application +>Konsole</application +> i &kde; hvor du kan bruge tastaturkommandoer med en traditionelt &UNIX; kommandoradsgrænseflade.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Dokumentation og kildekodehåndtering</term> +<listitem> +<formalpara> +<title +>Dokumentation</title> +<para +>&tdevelop; giver adgang til en mængde dokumentation via dette værktøj. Her kan du komme til dokumentfiler, oftest direkte fra en anden computer, på en struktureret måde. Der er flere måder direkte at komme til værdifuld information fra håndbøger om &kde; og &Qt;.</para> +</formalpara> + +<para +>Se kapitlerne <link linkend="documentation" +>Dokumentation</link +> og <link linkend="setup-docu" +>Indstil dokumentationen</link +> for mere information.</para> + +<formalpara> +<title +>Kodestumper</title> +<para +>Dette værktøj tillader dig at opbevare udvalgt tekst permanent for senere brug for andre redigeringsomgange. Det er et meget fleksibelt værktøj, eftersom alle tekststumper som opbevares her kan indeholde en sæt variabler, som får deres virkelige værdier når en sådan tekststump indsættes i en anden tekst.</para> +</formalpara> +<para +>Mere information om dette er tilgængelig i kapitlerne <link linkend="editing-snippets" +>Kodestumper</link +> og <link linkend="setup-snippets" +>Indstil værktøjet for kodestumper</link +>.</para> +</listitem> +</varlistentry> +</variablelist> +</sect2> +</sect1> + +<sect1 id="gettingstarted-configure"> +<title +>Nogle indstillinger</title> + +<para +>Inden vi påbegynder det første eksempelprojekt rigtigt, bør vi indstille &tdevelop;s opførsel efter vore behov. Selvom de fleste standardindstillinger allerede er passende, er der nogle steder som det ville være godt at ændre.</para> + +<note> +<para +>Hvis du vil vide mere om indstilling af &tdevelop;, så kig i kapitlet <link linkend="setup" +>Indstil KDevelop</link +>.</para> +</note> + +<sect2 id="gettingstarted-configure-general"> +<title +>Nogle generelle indstillinger</title> + +<para +>Klik på menuen <menuchoice +><guimenu +>Opsætning</guimenu +> </menuchoice +> for at indstille &tdevelop; og vælg <menuchoice +><guimenuitem +>Indstil KDevelop...</guimenuitem +></menuchoice +>. Dialogen <guilabel +>Indstil KDevelop</guilabel +> dukker op, og viser følgende indstillingsside, <guilabel +>Generelt</guilabel +>, til højre.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-general.png" format="PNG"/> +</imageobject> +<caption> +<para +>Den generelle indstillingsdialog i &tdevelop;</para> +</caption> +</mediaobject> +</screenshot> + +<para +>De fleste standardindstillinger er o.k., men to af indstillingerne vil du måske ændre.</para> + +<formalpara> +<title +>Standardprojektmappe</title> +<para +>Når &tdevelop; startes for første gang er den formodentlig forudindstillet til din hjemmemappe. De fleste foretrækker imidlertid særlig projektmappe for programmeludvikling. Ændr tekstfeltet til hovedmappen for udvikling som du foretrækker. Du kan vælge det i mappetræet hvis du klikker på knappen <guilabel +>Åbn fildialog</guilabel +> markeret med en mappeikon, til højre for tekstfeltet.</para> +</formalpara> + +<para +>I vort eksempel antager vi (i mangel på bedre) en brugere som kaldes <filename class="directory" +>udvikler</filename +>. Erstat derfor altid <quote +>udvikler</quote +> med dit brugernavn. Vor udvikler udnytter hovedmappen <filename class="directory" +>/home/udvikler/projekt</filename +> til selve udviklingen. Igen, erstat <filename class="directory" +>projekt</filename +> med navnet på din udviklingsmappe. </para> + +<para +>&tdevelop; laver normalt en egen undermappe under hovedmappen for hvert nyt projekt du laver. Alle filer i et projekt som for eksempel hedder <quote +>Hello</quote +> kommer i vort tilfælde til at blive placeret i mappen <filename class="directory" +>/home/udvikler/projekt/hello</filename +>.</para> + +<para +>Du kan naturligvis midlertidigt sætte disse mappeindstillinger ud af kraft hvis du behøver det. Se kapitlet <link linkend="applicationwizard" +>Programguide</link +> for mere information om dette.</para> + +<formalpara> +<title +>Oversætteruddata</title> +<para +>Så snart &tdevelop; kompilerer noget kildekode, vises meddelelser fra byggeværktøjerne, såsom <application +>make</application +>, i vinduet <guilabel +>Meddelelser</guilabel +> længst nede på arbejdsfladen. Oftest er meddelelserne overvældende ordrige. For at få et bedre overblik over hvad der sker, har &tdevelop; et antal indbyggede måder at forkorte meddelelserne.</para> +</formalpara> + +<para +>Afhængig af hvilken version af &tdevelop; du bruger, kan indstillingen <guilabel +>Oversætteruddata</guilabel +> være forudindstillet til <quote +>fuldstændig</quote +>, hvilket gør at alt indhold i meddelelser vises i sin helhed. Du vil nok ændre dette til den meget mere praktiske indstillingen <quote +>meget kort</quote +>. Vælg den blot i dropned-feltet.</para> + +<caution> +<para +>Vær klart over at kun <emphasis +>den mest grundlæggende</emphasis +> information vises i vinduet <guilabel +>Meddelelser</guilabel +> med denne indstilling. Hvis fejl skulle opstå når du bygger, behøver du formodentlig se mere af, om ikke hele, meddelelseteksten. Meddelelserne er imidlertid ikke gået tabt. Højreklik blot i vinduet <guilabel +>Meddelelser</guilabel +> og vælg f.eks. <quote +>Fuldstændig oversætteruddata</quote +> i den sammenhængsafhængige menuen.</para> +</caution> +</sect2> + +<sect2 id="gettingstarted-configure-search"> +<title +>Initiér søgeindeks for dokumentation</title> + +<para +>Der er en anden, ikke så åbenbar, indstilling som helst skal gøres inden selve udviklingsarbejdet påbegyndes. Dette skyldes at du regelmæssigt vil lave søgninger i dokumentationen under udviklingen. &tdevelop; kræver at et antal søgeindekser skabes inden en sådan søgehandling kan gennemføres. Lad os initiere dem inden vi udfører de første skridt i det egentlige arbejdet med &tdevelop;.</para> + +<para +>Åbn værktøjsvisningen <guilabel +>Dokumentation</guilabel +> i højre side i &tdevelop;s hovedvindue. Åbn dialogsiden <guilabel +>Søg</guilabel +>.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="documents-search.png" format="PNG"/> +</imageobject> +<caption +><para +>Hvor skal søgeindeks skabes.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Klik nu på knappen <guibutton +>Opdatér indstilling</guibutton +> for at sikre dig at de grundlæggende søgeværktøjer er rigtigt indstillede. En dialog skal dukke op, som siger <quote +>Configuration file updated</quote +>. Klik på <guibutton +>O.k.</guibutton +> for at lukke den.</para> + +<para +>Når dette er gjort, er &tdevelop; klar til at tolke kendt dokumentation og bygge nogle nyttige søgeindekser ud fra den. Klik på knappen <guibutton +>Opdatér indeks</guibutton +> til højre. Nu dukker dialogen <guilabel +>Opretter søgeindeks</guilabel +> op, og viser forløbet når indekset skabes.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-docu-indexgen.png" format="PNG"/> +</imageobject> +<caption +><para +>&tdevelop; laver søgeindeks for dokumentation.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Det tager en vis tid afhængig af dokumentationens størrelse og computerens ydelse. Men til sidst ændres knappen <guibutton +>Annullér</guibutton +> til <guibutton +>O.k</guibutton +>. Klik så på knappen for at fortsætte.</para> + +<note> +<itemizedlist> +<listitem> +<para +>Det bør normalt fungere direkte, men i visse tilfælde er programmet <application +>htdig</application +> som &tdevelop; bruger til at udføre fuldtekstsøgning måske ikke rigtigt indstillet. Kig i kapitlet <link linkend="setup-docu-textsearch" +>Indstilling af indeks for tekstsøgning</link +> for mere hjælp i dette tilfælde.</para> +</listitem> +<listitem> +<para +>For at kunne slå specifik information op om &kde;'s og &Qt;'s programmeringsgrænseflade, kræves at <emphasis +>KDELibs Apidocs</emphasis +> fandtes da &tdevelop; blev installeret. Hvis du har problemer med at oprette indeks eller udføre <link linkend="gettingstarted-edit-defs" +>eksemplerne med opslag af identifikator</link +> senere i kapitlet, så sørg for at dokumentationen findes og at &tdevelop; kan komme til den. Se <link linkend="tdevelop-install" +>Installér KDevelop</link +> for mere information.</para> +</listitem> +</itemizedlist> +</note> +</sect2> +</sect1> + + +<sect1 id="gettingstarted-new"> +<title +>Start et nyt projekt</title> + +<para +>Næsten alle programmer består af dusinvis, hundredevis eller til og med tusindevis af filer som skal holdes strukturerede og mulige at vedligeholde. For at opnå dette, organiserer &tdevelop; udvikling af programmel i <emphasis +>projekter</emphasis +>. Derfor er det første praktiske skridt for at udvikle programmel i &tdevelop; oftest at oprette et nyt projekt.</para> + +<para +>Heldigvis er det ganske let at opnå dette. &tdevelop; sørger for værktøjet Programguide for at gøre det. (Se kapitlet <link linkend="applicationwizard" +>Kom i gang: Programguiden</link +> for mere information.)</para> + +<para +>Nu laver vi et enkelt &kde;-programprojekt for at anskueliggøre hvor enkelt dette kan opnås, og hvilke filer og værktøjer som &tdevelop; sørger for. Derigennem tager vi et hurtigt kig på:</para> + +<simplelist> +<member +><link linkend="gettingstarted-new-setup" +>Hvordan man laver et nyt projekt ved hjælp af programguiden.</link +></member> +<member +><link linkend="gettingstarted-new-files" +>Hvilke filer som programguiden oprettede fra begyndelsen.</link +></member> +<member +><link linkend="gettingstarted-new-toolviews" +>Hvad som gælder for de yderligere værktøjsvisninger som vises sammen med projektet?</link +></member> +</simplelist> + +<sect2 id="gettingstarted-new-setup"> +<title +>Hvordan man laver et nyt projekt</title> + +<para +>Lad os oprette et ganske enkelt &kde;-projekt, <quote +>Hello World</quote +>. Udfør blot følgende skridt:</para> + +<procedure> +<step> +<para +>Klik på menupunktet <menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Nyt projekt...</guimenuitem +></menuchoice +> for at starte programguiden.</para> +</step> + +<step> +<para +>Dialogen <guilabel +>Opret nyt projekt</guilabel +> dukker op. I vinduet længst oppe til venstre, <guilabel +>Alle projekter</guilabel +>, findes et antal programsprog listede.</para> + +<substeps> +<step> +<para +>Vi vil bygge et sædvanligt &kde;-program i C++. Klik derfor på knappen <guilabel +>+</guilabel +> til venstre for <guilabel +>C++</guilabel +> for at vise indholdet.</para> +</step> + +<step> +<para +>Et sæt mulige programtyper vises. Vi skal bygge et &kde;-program, og viser derfor næste underniveau via knappen <guilabel +>+</guilabel +> ud for <guilabel +>KDE</guilabel +>.</para> +</step> + +<step> +<para +>Nu tilbydes du et antal mulige <emphasis +>projektskabeloner</emphasis +>. Gå til begyndelsen af listen og klik på <guilabel +>Simpelt KDE-program</guilabel +>.</para> + +<para +>En forhåndsvisning og kort beskrivelse af programmet som projektskabelonen vil oprette dukker op i de to vinduer til højre.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="tutorial-new-project.png" format="PNG"/> +</imageobject> +<caption> +<para +>Vælg projektskabelonen <quote +>Hello World</quote +></para> +</caption> +</mediaobject +></screenshot> +</step> + +<step> +<para +>Vort program behøver et navn. Find feltet <guilabel +>Egenskaber</guilabel +> længst nede i dialogen og skriv et passende navn i indtastningsfeltet <guilabel +>Programnavn</guilabel +>.</para> + +<para +>Vi bruger <quote +>Hello</quote +> i vort eksempel, men du kan bruge hvad du vil, under forudsætning af at navnet kun består af bogstaver, tal og understregningstegnet. Du vil bemærke at programguiden ikke accepterer andre tegn.</para> +</step> + +<step> +<para +>Sørg for at tekstfeltet <guilabel +>Sted</guilabel +> under indtastningsfeltet viser navnet på hovedmappen for projekter, som vi indstillede i kapitlet <link linkend="gettingstarted-configure" +>Nogle indstillinger</link +> ovenfor. Hvis den ikke gør det, skriv da et passende mappenavn eller vælg et i mappelisten som knappen med mappeikonen til højre sørger for.</para> + +<para +>Hvis alt gik godt, viser linjen <guilabel +>Endeligt sted</guilabel +> mappesøgestien som det nye projekt vil bruge. Hvis suffikset <quote +>(ugyldig)</quote +> er tillagt, så prøv med et andet navn på projektet og/eller sørg for at hovedmappen for projekter i tekstfeltet <guilabel +>Sted</guilabel +> virkelig findes og er skrivbar.</para> +</step> + +<step> +<para +>Når alting er rigtigt, aktiveres knappen <guibutton +>Næste</guibutton +> på linjen længst nede i dialogen. Klik på den for at fortsætte.</para> +</step> +</substeps> +</step> + +<step> +<para +>Dette fører dig til dialogsiden <guilabel +>Projektindstillinger</guilabel +>. Sørg for dig at tekstfelterne <guilabel +>Forfatter</guilabel +> og <guilabel +>E-mail</guilabel +> er rigtigt udfyldte. Oftest er de forudindstillede til de generelle brugerindstillinger i &kde; som angives i dialogen <guilabel +>Kodeord og brugerkonto</guilabel +> i &kde;'s kontrolcenter. Hvis de ikke er det, ændres de til værdier som du foretrækker for programmet.</para> + +<screenshot id="gettingstarted-new-setup-options"> +<mediaobject> +<imageobject> +<imagedata fileref="tutorial-hello-options.png" format="PNG"/> +</imageobject> +<caption> +<para +>Angiv dit navn og (valgfrit) e-mail-adresse.</para> +</caption> +</mediaobject> +</screenshot> + +<note> +<para +>Du skal i det mindste angive navn for <guilabel +>Forfatter</guilabel +>. Det kræves for indstilling af programmets filer.</para> +</note> + +<para +>Hvis alt er rigtigt, er knappen <guibutton +>Næste</guibutton +> aktiveret. Klik på den for at gå videre.</para> +</step> + +<step> +<para +>Følgende dialogsider, <guilabel +>Versionskontrolsystem</guilabel +>, <guilabel +>Skabelon for .h-filer</guilabel +> og <guilabel +>Skabelon for .cpp-filer</guilabel +>, er ikke interessante for øjeblikket. Spring over dem ved at klikke på knappen <guibutton +>Næste</guibutton +>, og til sidst knappen <guibutton +>Afslut</guibutton +>.</para> +</step> +</procedure> + +<para +>Det var alt! Programguiden tager over og laver et sæt oprindelige filer i mappen <guilabel +>Endeligt sted</guilabel +> du sørgede for i skridt 2c ovenfor.</para> + +<para +>Når fasen at oprette filer er færdig, åbner &tdevelop; et redigeringsvindue med implementeringsfilen for <emphasis +>programmets hovedvindue</emphasis +> (som er <filename +>hello.cpp</filename +> i vort eksempel), så du nemt kan gå videre.</para> +</sect2> + +<sect2 id="gettingstarted-new-files"> +<title +>Oprindelige projektfiler</title> + +<para +>Selvom vort eksempelprojekt Hello er ganske enkelt, oprettede programguiden en hel mængde kildekode og projekthåndteringsfiler. Den nemmeste måde at liste dem er at åbne værktøjsvisningen <guilabel +>Filtræ</guilabel +> længst nede til venstre. Dette åbner en filliste som ligner den nedenfor.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="tutorial-hello-new.png" format="PNG"/> +</imageobject> +<caption> +<para +>Oprindelige filer i projektet <quote +>Hello World</quote +></para> +</caption> +</mediaobject> +</screenshot> + +<para +>For at forevise de væsentligste filer som programguiden oprettede, viser vi de fleste mappegrene i værktøjsvisningen <guilabel +>Filtræ</guilabel +> til venstre. Klik blot på grenenes navn i træet for at se selv.</para> + +<para +>Desuden, kun for demonstrationsformål, viser vi også de fleste grene i værktøjsvisningen <guilabel +>Håndtering af automake</guilabel +> til højre, hvor nogle af projektets kildefiler også listes.</para> + +<sect3 id="gettingstarted-new-files-copyright"> +<title +>Anmærkninger om ophavsret</title> + +<para +>Alle programmer som opfylder kravene ifølge &GNU; skal have en ophavsret. Der er to niveauer hvor ophavsret kræves, <emphasis +>i individuelle kildekodefiler</emphasis +> og <emphasis +>ved programkørsel</emphasis +>. Programguiden har allerede tilføjet passende ophavsret- og licensinformation i projektfiler.</para> + +<formalpara> +<title +>Ophavsret på kildekodeniveau</title> +<para +>Husker du dialogsiden <link linkend="gettingstarted-new-setup-options" +> <guilabel +>Projektindstillinger</guilabel +></link +> da det nye projekt blev oprettet? Der var du tvunget til at angive dit (udviklerens) navn og en valgfri e-mail-adresse. Kig nu længst oppe i redigeringsvinduet <guilabel +>hello.cpp</guilabel +> som for øjeblikket vises på arbejdsfladen. Programguiden skrev denne tekst ind længst oppe i licenshovedet for hver kildekodefil som blev oprettet.</para> +</formalpara> + +<programlisting +>/*************************************************************************** + * Copyright (C) 2006 by Dit Navn * + * [email protected] * + * * + * This program is free software; you can redistribute it and/or modify * +</programlisting> + +<para +>Du finder nøjagtigt samme teksthovede i hver kildekodefil som skabes inde i &tdevelop; (under forudsætning af at du bruger passende indbyggede værktøjer til at oprette filer). &tdevelop; husker indstillingerne i nogle skabelonfiler som du finder i mappen <filename class="directory" +>templates</filename +>.</para> + +<formalpara> +<title +>Ophavsret når programmet køres</title> +<para +>Når &kde;-programmet kører, kan brugeren vise data <guilabel +>Om</guilabel +> programmet, oftest via menuen <guimenu +>Hjælp</guimenu +>. Programguiden sørgede også for dette. Hvis du tager et kig i filen <filename +>main.cpp</filename +> finder du en indgang som ligner den nedenfor.</para> +</formalpara> + +<programlisting +>int main(int argc, char **argv) +{ + KAboutData about("hello", I18N_NOOP("Hello"), version, description, + KAboutData::License_GPL, "(C) 2006 Dit Navn", 0, 0, + "[email protected]"); + about.addAuthor( "Dit Navn", 0, "[email protected]" ); +</programlisting> + +<para +>Dette tilføjer hovedudviklerens navn (<quote +>Dit Navn</quote +> i vort tilfælde) og din e-mail-adresse på ophavsretssiden <guilabel +>Om</guilabel +> når den vises, og desuden angives navn og adresse på siden <guilabel +>Forfattere</guilabel +>.</para> + +<important> +<para +>Så snart du laver betydelige ændringer i et eksisterende projekt, så sørg for at indtaste dit navn og din e-mail-adresse i ophavsretmeddelelsen for hver fil du ændrer, og selv i ophavsretmeddelelsen som vises når programmet køres. Vær ikke genert. Du hjælper samfundet for åben kildekode betydeligt hvis du gør dette.</para> +</important> +</sect3> + +<sect3 id="gettingstarted-new-files-source"> +<title +>Oprindelige kildekodefiler</title> + +<para +>Programguiden placerede kildekodefiler i undermappen <filename class="directory" +>src</filename +> i projektets mappe. Du finder filerne <filename +>main.cpp</filename +>, <filename +>hello.h</filename +> og <filename +>hello.cpp</filename +> der, som du måske forventede dig.</para> + +<para +>Der er yderligere nogle filer som du ofte finder i et typisk &kde;-program, nærmere bestemt:</para> + +<itemizedlist> +<listitem> +<para +><filename +>hello.desktop</filename +> indeholder en del metadata som &tdevelop; bruger til at håndtere og starte programmet.</para> +</listitem> + +<listitem> +<para +><filename +>hi16-app-hello.png</filename +> og <filename +>hi32-app-hello.png</filename +> indeholder nogle oprindelige standardikoner, som &tdevelop; bruger til at vise programmet.</para> +</listitem> + +<listitem> +<para +>Tilsidst, indeholder <filename +>helloui.rc</filename +> en beskrivelse af programmets brugergrænseflade, for øjeblikket menuerne som programmet sørger for.</para> +</listitem> +</itemizedlist> +</sect3> + +<sect3 id="gettingstarted-new-files-doc"> +<title +>Oprindelig programdokumentation</title> + +<para +>I projektets undermappe <filename class="directory" +>doc/en</filename +> finder du filen <filename +>index.docbook</filename +>. Det er en standardskabelon som kan være et udgangspunkt for at begynde skrive passende brugerdokumentation.</para> +</sect3> + +<sect3 id="gettingstarted-new-files-project"> +<title +>Projektfiler og andre filer</title> + +<para +>Du har sikkert bemærket at filerne vi hidtil har introduceret angives med fed type i værktøjsvisningen <guilabel +>Filtræ</guilabel +>, mens de fleste andre filer ikke gør det. Det illustrerer den væsentligt anderledes brug disse filer har. Indholdet i filer som angives med fed type påvirker programmet direkte. Kildekodefiler laver koden som skal køres, andre filer sørger for nødvendig data eller dokumentation. Filerne skal håndteres og behandles af projektet under byggeetaperne, og kaldes derfor <emphasis +>projektfiler</emphasis +>.</para> + +<para +>Hvis du tager et kig på det nederste vindue i <guilabel +>Håndtering af automake</guilabel +> til højre på arbejdsfladen ser du også alle projektfiler listede. Værktøjet Håndtering af automake bruger denne viden til at sørge for byggehåndtering, som vi vil se inden længe.</para> + +<para +>De andre filer uden fed type er mere af støttenatur. De tilhører flere særpræglede klasser, som følger:</para> + +<itemizedlist> +<listitem> +<formalpara> +<title +>Byggehåndtering af projekt</title> +<para +>Disse filer styrer processer for kompilering, installation, oprettelse af dokumentation, osv. Hvis projektet bruger &GNU; <application +>autotools</application +>, som vort eksempel, finder du filen <filename +>Makefile.am</filename +> i hver projektmappe. De er en slags grundlæggende kernefiler for at bygge projektet, som indeholder styrekommandoer, og som behandles sammen med diverse <filename +>configure</filename +>-filer under byggeetaperne. En sådan byggeproces laver endelig <filename +>Makefile</filename +> i hver mappe. Ud fra disse bygger værktøjet <application +>make</application +> endelig programmets binære filer.</para> +</formalpara> + +<para +><filename +>Makefile.am</filename +>-filerne skal vedligeholdes under hele udviklingsprocessen. Heldigvis befrier &tdevelop; dig fra det meste af denne byrde med værkøjet Håndtering af automake, som basalt set er et grafisk grænseflade til at underholde indeholdet i <filename +>Makefile.am</filename +>-filerne.</para> + +<para +>Andre filer som styrer projektets byggeproces som for øjeblikket listes er <filename +>configure.in.in</filename +> og <filename +>subdirs</filename +> i projektets rodmappe. De behandles af nogle af filerne i den &kde;-specifikke administrationsmappe <filename class="directory" +>admin</filename +> for at oprette flere filer af typen <filename +>configure</filename +> og <filename +>Makefile</filename +>, og endelig programmets binære filer.</para> +</listitem> + +<listitem> +<formalpara> +<title +>Administrationsfiler for &tdevelop;</title> +<para +>&tdevelop; behøver nogle egne håndterings- og administrationsdata. Disse er placeret i projektets rodmappe, i vort eksempel <filename +>hello.tdevelop</filename +>, <filename +>hello.tdevelop.pcs</filename +>, og <filename +>hello.kdevses</filename +>.</para> +</formalpara> + +<para +>Filen <filename +>xxx.tdevelop</filename +> (hvor <quote +>xxx</quote +> angiver projektnavnet) er særligt vigtig. Den er hoved-<emphasis +>projektfilen</emphasis +> i KDevelop 3, og behøves hvis du senere vil indlæse projektet i det integrerede udviklingsmiljø.</para> + +<warning> +<para +>Forsøg aldrig at ændre, omdøbe eller fjerne nogle af administrationsfilerne i &tdevelop; selv. Det integrerede udviklingsmiljø fungerer sandsynligvis ikke rigtigt for dit projekt bagefter.</para> +</warning> +</listitem> + +<listitem> +<formalpara> +<title +>Filer for projektbeskrivelse ifølge GNU</title> +<para +>Nogle filer i projektets rodmappe kræves for alle programmer som opfylder kravene ifølge &GNU;. De er <filename +>AUTHORS</filename +>, <filename +>ChangeLog</filename +>, <filename +>INSTALL</filename +>, <filename +>COPYING</filename +> (som indeholder GNU GENERAL PUBLIC LICENSE), <filename +>INSTALL</filename +>, <filename +>NEWS</filename +>, <filename +>README</filename +> og <filename +>TODO</filename +>.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Andre filer</title> +<para +>Nogle andre filer som endnu ikke nævnt er:</para> +</formalpara> + +<itemizedlist> +<listitem> +<para +><filename +>Doxyfile</filename +> styrer hvordan den projektspecifikke dokumentation af den interne programmeringsgrænseflade skabes.</para> +</listitem> + +<listitem> +<para +>Kataloget <filename class="directory" +>templates</filename +> indeholder filskabeloner som det integrerede udviklingsmiljø bruger som grundlag når nye kildekodefiler skabes. Du kan redigere skabelonerne når som helst. Det nye indehold ses i næste kildekodefil af tilsvarende type som du laver.</para> + +<para +>Du vil måske justere asteriskerne til højre på linjerne med ophavsret som programguiden indsatte i skabelonfilerne for <filename +>cpp</filename +> og <filename +>h</filename +>, sådan at kildekodefilerne som skabes med dem ser mindre mærkværdige ud.</para> +</listitem> + +<listitem> +<para +>Kataloget <filename class="directory" +>po</filename +> bruges i oversættelsesformål. Det er i det væsentlige en del af projektfilerne (indeholder <filename +>Makefile.am</filename +>), men kommer i hovedsagen til at blive brugt ved behandling af oversættelser. Det er imidlertid ikke så interessant for programudvikleren.</para> +</listitem> + +<listitem> +<para +>Tilsidst kræves mappen <filename class="directory" +>admin</filename +> særligt for &kde;-baserede programmer. Den sørger for en mængde filer som er nødvendige for at vedligeholde programmets kildekode og binære filer så de kan integreres på en rigtig måde i &kde;-miljøet.</para> +</listitem> +</itemizedlist> + +</listitem> +</itemizedlist> +</sect3> +</sect2> + +<sect2 id="gettingstarted-new-toolviews"> +<title +>Yderligere værktøjsvisninger</title> + +<para +>Som du vil have bemærket vistes flere yderligere værktøjsvisninger så snart programguiden var klar med det nye projekt. Disse giver kun mening under udvikling af projektet, og tilbyder i korthed følgende funktioner:</para> + +<note> +<para +>Hvilke værktøjsvisninger som virkelig ses afhænger af de plugin som for øjeblikket er indlæste i &tdevelop;. Der er måder at styre dette. Se kapitlet <link linkend="setup-plugins" +>Plugin-værktøj</link +> for instruktioner.</para> +</note> + +<sect3 id="gettingstarted-new-toolviews-left"> +<title +>Navigerings- og udvalgsværktøjer (venstre side)</title> + +<itemizedlist> +<listitem> +<formalpara> +<title +>Bogmærker</title> +<para +>Du kan markere en hvilken som helst linje i en tekstfil for hurtigt at komme tilbage til denne position fra hvor som helst. &tdevelop; husker alle sådanne <emphasis +>bogmærker</emphasis +>, også selvom du senere lukker redigeringsvinduet. Værktøjsvisningen <guilabel +>Bogmærker</guilabel +> lister alle bogmærker ifølge filnavn og linjenummer. Du behøver kun at klikke på en sådan indgang for at åbne det tilsvarende redigeringsvindue og placere markøren på en angiven linje.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Klasser</title> +<para +>Lister klasser, metoder, osv. kendte i projektet. At klikke på en indgang åbner en passende deklarationsfil eller kildekodefil i et redigeringsvindue og placerer markøren på den respektive deklaration eller definition.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Filgrupper</title> +<para +>Sorterer projektets filer i diverse grupper ifølge brugsområde, f.eks. Sources (kildekode), User Interface (brugergrænseflade), Icons (ikoner), Translations (oversættelser) og Others (øvrige).</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Variabler</title> +<para +>Bruges af fejlsøgningsværktøjet til at vise, evaluere og overvåge variabler når fejlsøgeren køres.</para> +</formalpara> +</listitem> +</itemizedlist> +</sect3> + +<sect3 id="gettingstarted-new-toolviews-bottom"> +<title +>Meddelelser (længst nede)</title> + +<itemizedlist> +<listitem> +<formalpara> +<title +>Valgrind</title> +<para +><application +>Valgrind</application +> er et analyseværktøj for programmer som køres. Værktøjsvisningen lister resultatet af en sådan analysekørsel. Det bruges for eksempel til at finde hukommelseslækker.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Sikkerhedsproblemer</title> +<para +>Der er et plugin-værktøj i &tdevelop; for <guilabel +>sikkerhedskontrol</guilabel +>. Det analyserar kildekodefilen som for øjeblikket redigeres, for at finde flere sædvanlige sikkerhedsproblemer som kan opstå i programmet og underretter brugeren om dem i værktøjsvisningens vindue.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Stoppunkter</title> +<para +>Værktøjsvisningen muliggør eksplicit at sætte, fjerne og håndtere stoppunkter for fejlsøgeren i programmets kildekodefiler. Den bruges i sammenhæng med fejlsøgning.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Ctags</title> +<para +>Gør det muligt at oprette databaser med indeks af identifikatorer med det populære program <application +>Ctags</application +>. Denne database med mærker kan derefter bruges fra værktøjsvisningens vindue til at slå alle identifikator op som behøves i projektets kildekode. Ved at klikke på en linje med et sådant fundet punkt, åbnes et redigeringsvindue og placerer markøren på den tilsvarende identifikator i vinduet.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Problemer</title> +<para +>&tdevelop; holder styr på sædvanlige programmeringsproblemer i kildekodefilen som for øjeblikket redigeres, og underretter brugeren om dem i værktøjsvisningens vindue.</para> +</formalpara> +</listitem> +</itemizedlist> +</sect3> + +<sect3 id="gettingstarted-new-toolviews-right"> +<title +>Kildekodehåndtering (højre side)</title> + +<itemizedlist> +<listitem> +<formalpara> +<title +>Håndtering af automake</title> +<para +>Værktøjet Håndtering af automake er basalt set en grafisk grænseflade for at håndtere indholdet i <filename +>Makefile.am</filename +>-filer i hver projektmappe. Værktøjsvisningen bruger to vinduer til at styre arbejdet. Det øverste vindue spejler en del af projektets undermapper, nærmere bestemt de som eksplicit indeholder <emphasis +>projektfiler</emphasis +>. Hver undermappe af denne type skal indeholde en <filename +>Makefile.am</filename +>-fil, og kaldes et <emphasis +>delprojekt</emphasis +> i sammenhæng med Håndtering af automake.</para> +</formalpara> + +<para +>Ved at klikke på et delprojekt åbnes en passende visning af delprojektets projektfiler i det nederste vindue. Filerne som listes her er grupperede ifølge deres funktion i <filename +>Makefile.am</filename +> for dette delprojekt.</para> + +<para +>Håndtering af automake er et meget kraftfuldt værktøj til at håndtere projektet og dets delprojekter, samt de roller projektfiler spiller når programmet bygges. Vi tager et hurtigt kig på nogle vigtigere dele <link linkend="gettingstarted-extend-automake" +>nedenfor</link +>. Se kapitlet <link linkend="project-management" +>Bygge- og projekthåndtering</link +> for en udførligere beskrivelse.</para> +</listitem> +</itemizedlist> +</sect3> +</sect2> +</sect1> + + +<sect1 id="gettingstarted-edit"> +<title +>Nogle vink om hvordan man håndterer dokumenter</title> + +<para +>I vort eksempelprojekt efterlod programguiden filen <filename +>hello.cpp</filename +> åben i et redigeringsvindue, så du med det samme kan begynde at arbejde med den. Vi forudsætter at du har god kunskab til hvordan man bruger en editor, så vi siger ikke så meget om dette. Der er imidlertid et antal praktiske funktioner i &tdevelop; for at håndtere redigeringsvinduer med faneblade og dokumenterne du arbejder med. Vi giver en kortfattet beskrivelse af nogle af disse, nærmere bestemt:</para> + +<simplelist> +<member +><link linkend="gettingstarted-edit-headers" +>Hvordan man enkelt skifter mellem deklarationsfiler og implementeringsfiler.</link +></member> +<member +><link linkend="gettingstarted-edit-defs" +>Hvordan man hurtigt kommer til deklarationer og definitioner.</link +></member> +<member +><link linkend="gettingstarted-edit-arrange" +>Hvordan man omarrangerer redigeringsvinduer efter nuværende behov.</link +></member> +<member +><link linkend="gettingstarted-edit-problems" +>Hvordan man holder et øje med sædvanlige problemer.</link +></member> +</simplelist> + +<sect2 id="gettingstarted-edit-headers"> +<title +>Skift mellem deklarationsfiler og implementeringsfiler</title> + +<para +>&tdevelop; sørger for en hurtig og enkel måde at skifte fra en given implementeringsfil (<filename +>.cpp</filename +>) til tilsvarende deklarationsfil (<filename +>.h</filename +>) og vice versa. Højreklik blot på redigeringsvinduet du vil skifte. En menu som ligner den følgende dukker op.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="editor-switch-header.png" format="PNG"/> +</imageobject> +<caption +><para +>Hvordan man skifter mellem implementeringsfiler og deklarationsfiler.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Find indgangen <guimenuitem +>Skift til deklaration/implementation</guimenuitem +> og vælg den. &tdevelop; slår tilsvarende deklarationsfil eller implementeringsfil op og åbner den i et andet redigeringsvindue. I vort eksempel, hvis du højreklikkede i kildekoden <filename +>hello.cpp</filename +>, vises filen <filename +>hello.h</filename +> og markøren placeres der.</para> + +<para +>Der er mere end som så. Hvis du højreklikker inde i en klasseimplementeringsteksten, placerer &tdevelop; markøren på tilsvarende deklarationslinje i deklarationsfilen. Det omvendte tilfælde, et højreklik på en deklarationslinje, tager dig til tilsvarende klasseimplementering.</para> + +<para +>Hvis redigeringsvinduet med filen at skifte til allerede findes, aktiverer &tdevelop; naturligvis det og placerer markøren i det hvis det behøves.</para> +</sect2> + +<sect2 id="gettingstarted-edit-defs"> +<title +>Hvordan man kommer til deklarationer og definitioner</title> + +<para +>Men ifald du arbejder med en kildekodefil og vil slå deklarationen eller definitionen af en identifikator op du netop fandt i den? Jo, dette kan opnås lige så let. Det eneste du egentlig skal gøre er at højreklikke på identifikatoren det drejer sig om.</para> + +<para +>Der er imidlertid to forskellige tilfælde at tage hensyn til, nemlig:</para> +<simplelist> +<member +><link linkend="gettingstarted-edit-defs-external" +>Få adgang til eksternt definerede identifikatorer</link +>, og</member> +<member +><link linkend="gettingstarted-edit-defs-project" +>håndtere projektinterne tekstpunkter</link +>.</member> +</simplelist> + +<sect3 id="gettingstarted-edit-defs-external"> +<title +>Eksterne deklarationer og definitioner</title> + +<para +>Det sædvanligste tilfælde er at du vil slå en identifikator op som er defineret udenfor projektet. I &kde;-projekter er sådanne identifikatorer formodentlig dokumenterede i forskellige &kde;- eller &Qt;-biblioteker. Hvis &kde; og &tdevelop; er rigtigt installerede, kan &tdevelop; få adgang til sådan såkaldt dokumentation af programmeringsgrænseflade, og kan søge efter identifikatorer af denne type.</para> + +<para +>Lad os kigge på et eksempel. Led efter følgende linjer i redigeringsvinduet <filename +>hello.cpp</filename +>.</para> + +<programlisting +>Hello::Hello() + : KMainWindow( 0, "Hello" ) +{ +</programlisting> + +<para +>Højreklik på <classname +>KMainWindow</classname +>. En menu dukker op. Vælg tilvalget <guimenuitem +>Søg i dokumentationen: KMainWindow</guimenuitem +> der og slip museknappen. Nu åbnes værktøjsvisningen <guilabel +>Dokumentation</guilabel +>, med værdien <classname +>KMainWindow</classname +> som søgebegreb på siden <guilabel +>Søg</guilabel +>. Derefter åbnes et andet redigeringsvindue på arbejdsfladen som viser KDE's referenceside i programmeringsgrænsefladen for klassen <classname +>KMainWindow</classname +>.</para> + +<para +>Alt dette ser ud som følger. (Vi åbnede med vilje allerede siden <guilabel +>Dokumentation</guilabel +> <guilabel +>Søg</guilabel +> for at anskueliggøre resultatet af menuvalget.)</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="editor-search-doc.png" format="PNG"/> +</imageobject> +<caption +><para +>Hvordan man slår en ekstern dokumenteret identifikator op.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Du kan ligesågodt vælge <guimenuitem +>Søg efter dokumentation: KMainWindow</guimenuitem +>. I dette tilfælde vises siden <guilabel +>Søgning</guilabel +> i værktøjsvisningen <guilabel +>Dokumentation</guilabel +>, som oftest sørger for et udvalg af sider som indeholder søgebegrebet. (I vort eksempel er det formodentlig klasserne <classname +>KMainWindow</classname +> og <classname +>KMainWindowInterface</classname +>.) Vælg den du er interesseret i så vises tilsvarende dokumentation i et redigeringsvindue.</para> + +<note> +<para +>Hvis dette ikke fungerede, er der formodentlig intet dokumentindeks endnu. Initierede du indekset ifølge <link linkend="gettingstarted-configure-search" +>oven</link +>? Hvis ikke, gør det først, og kom derefter tilbage hertil for et nyt forsøg.</para> +</note> +</sect3> + +<sect3 id="gettingstarted-edit-defs-project"> +<title +>Projektinterne deklarationer og definitioner</title> + +<para +>Sådanne søgefunktioner i ekstern dokumentation har imidlertid deres begrænsninger. Man kan naturligvis ikke slå en ekstern identifikator op hvis den kun defineres og bruges inde i det nuværende projekt. Men der er hjælp med det. &tdevelop; kan bruge indekser oprettede af programmet <application +>Ctags</application +> til at søge i projektets kildekode.</para> + +<para +>Inden vi kan bruge det i vort eget eksempelprojekt Hello, skal vi først oprette et passende indeks. Dette gøres i værktøjsvisningen <guilabel +>Ctags</guilabel +> længst nede i arbejdsfladen.</para> + +<para +>Når du klikker på fanebladet <guibutton +>Ctags</guibutton +> åbnes en dialog hvor du finder følgende tekst i nederste højre hjørne:</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="editor-ctags-regenerate.png" format="PNG"/> +</imageobject> +<caption +><para +>Byg et Ctags-indeks med knappen <guibutton +>Regenerr</guibutton +>.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Klik på knappen <guibutton +>Opret igen</guibutton +> og vent nogle sekunder. Så erstattes <guilabel +>Ingen Ctags-database fundet</guilabel +> med dagens dato. Nu er du parat til at slå en identifikator op i projektets kildekode.</para> + +<tip> +<para +>Datoen udfor knappen <guilabel +>Opret igen</guilabel +> findes der for at minde dig om indekser som muligvis kan være for gamle. Så snart du åbenbart ikke kan slå en identifikator i projektet op, så overvej at generere indekset igen. I store projekter kan det tage en anseelig tid, men du bør få for vane at genoprette indekset regelmæssigt efter større ændringer i kildekodefilerne.</para> +</tip> + +<para +>Der er flere muligheder at slå en identifikator op i projektets kildekode.</para> + +<itemizedlist> +<listitem> +<formalpara> +<title +>Brug værktøjsvisningen Ctags</title> +<para +>Dette er nemt. Begynde blot med at skrive navnet på identifikatoren som du er interesseret i i indtastningsfeltet <guilabel +>Opslag</guilabel +> længst nede til venstre. &tdevelop; forsøger at komplettere ordet du har skrevet så langt, og vise alle forekomster af identifikatorer som indledes med denne tegnfølge.</para> +</formalpara> + +<para +>Hvis du for eksempel vil vide om identifikatoren <quote +>Hello</quote +> bruges i vort eksempelprojekt, skrives "H" i indtastningsfeltet <guilabel +>Opslag</guilabel +>. &tdevelop; begynder med det samme at arbejde og viser et resultat af denne type:</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="editor-ctags-lookup.png" format="PNG"/> +</imageobject> +<caption +><para +>Hvordan en identifikator slås op i værktøjsvisningen <guilabel +>Ctags</guilabel +>.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Hvis du klikker på en af de listede indgange, åbner &tdevelop; et redigeringsvindue med filen og placerer markøren på et passende sted.</para> +</listitem> + +<listitem> +<formalpara> +<title +>Brug en sammenhængsafhængig menu i en kildekodefil</title> +<para +>Dette er bekvemt hvis du arbejder med en bestemt kildekodefil. Antag at du studerer filen <filename +>main.cpp</filename +> i vort eksempelprojekt Hello. Der finder du følgende linje:</para> +</formalpara> +<programlisting +>Hello *mainWin = 0; +</programlisting> +<para +>Du undrer dig måske over hvad <quote +>Hello</quote +> blev brugt til i programmet. For at finde ud af det, højreklikkes helt enkelt på identifikatoren Hello. En menu dukker op som svar på højreklikket, med følgende linjer nær slutningen.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="editor-ctags-menu.png" format="PNG"/> +</imageobject> +<caption +><para +>Hent <application +>Ctags</application +>-information om en af projektets interne identifikatorer.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Klik på det du er interesseret i, lad os sige <guilabel +>Ctags - Gå til definition: Hello</guilabel +>, så viser &tdevelop; med det samme redigeringsvinduet <filename +>hello.cpp</filename +> og placerer markøren præcis ud for klassedefinitionen:</para> +<programlisting +>Hello::Hello() + : KMainWindow( 0, "Hello" ) +{ +</programlisting> +</listitem> + +<listitem> +<formalpara> +<title +>Lav en global søgning</title> +<para +>Dette er særlig nyttigt hvis du vil slå vilkårlig tekst op i projektets kildekode. Der er to muligheder for at starte en global søgning inde i &tdevelop;.</para> +</formalpara> +<itemizedlist> +<listitem> +<para +>Start en global søgning med menupunktet <menuchoice +><guimenu +>Redigér</guimenu +> <guimenuitem +>Søg i filer...</guimenuitem +></menuchoice +>. Eller</para> +</listitem> +<listitem> +<para +>Brug den sammenhængsafhængige menu direkte med et højreklik af musen i redigeringsvinduet.</para> +</listitem> +</itemizedlist> + +<para +>Vi anskueliggør den anden mulighed i eksempelprojektet Hello. Slutresultatet af menukaldet er stort set det samme. Lad os antage at du studerer kildekodefilen <filename +>hello.cpp</filename +> og har placeret markøren på den første forekomsten af Hello i den. Nu undrer du dig over hvor ordet <quote +>Hello</quote +> anvendes i projektets kildekode, og hvor mange forekomster der er. Dette er et typisk tilfælde hvor &tdevelop;s generelle søgefunktion bør bruges.</para> + +<para +>Mens du nu stadigvæk holder markøren et sted over <quote +>Hello</quote +> i kildeteksten, klikkes med højre museknap. Den nu velkendte sammenhængsafhængige menu dukker op, hvor du skal vælge linjen <guilabel +>Flerfilsøgning: Hello</guilabel +>.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="editor-find-menu.png" format="PNG"/> +</imageobject> +<caption +><para +>Initiér en global søgning indefra et redigeringsvindue.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Dette gør at følgende dialog <guilabel +>Søg i filer</guilabel +> dukker op (nøjagtigt det samme som hvis du brugte menuen<menuchoice +><guimenu +>Redigér</guimenu +> <guimenuitem +>Søg i filer...</guimenuitem +></menuchoice +>).</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="find-in-files.png" format="PNG"/> +</imageobject> +<caption +><para +>En fleksibel grafisk grænseflade for at udføre generelle søgninger i projektet.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Som du bemærker er det et meget fleksibelt værktøj til at starte søgninger med <application +>find</application +> og <application +>grep</application +> i hele projektet. Vi går ikke ind på flere detaljer her, men du kan selv eksperimentere. For øjeblikket, skal <quote +>Hello</quote +> allerede være markeret i feltet <guilabel +>Mønster</guilabel +>. Hvis det ikke er det, så skriv det blot, og klik derefter på knappen <guibutton +>Søg</guibutton +> længst nede til højre.</para> + +<para +>Nu åbnes værktøjsvisningen <guilabel +>Søg i filer</guilabel +> længst nede, og viser filnavne og linjer for alle forekomster af <quote +>Hello</quote +> i vort eksempelprojekt. Som sædvanligt, hvis du klikker på en linje, går &tdevelop; til det nøjagtige sted i et redigeringsvindue i arbejdsfladen.</para> + +<para +>Der er to særligt interessante linjer i værktøjsvisningens vindue.</para> +<itemizedlist> +<listitem> +<para +>Længst oppe finder du kommandosekvenserne som &tdevelop; rent faktisk brugte til at udføre søgningen. Dette er nyttigt for mere nøjagtigt at styre søgningens resultat.</para> +</listitem> + +<listitem> +<para +>Længst nede angives antal forekomster som findes når en søgning udføres. I vort eksempel skal det være <quote +>*** 11 træffere fundet ***</quote +>.</para> +</listitem> +</itemizedlist> + +<para +>&tdevelop; husker søgeresultatet under hele sessionen som kører. Hvis du starter en ny global søgning, vises dens resultat med et andet fanebladsvindue i værktøjsvisningen <guilabel +>Søg i filer</guilabel +>.</para> +</listitem> +</itemizedlist> +</sect3> +</sect2> + +<sect2 id="gettingstarted-edit-arrange"> +<title +>Arrangér redigeringsvinduer</title> + +<para +>Når du arbejder med store komplekse projekter kommer du ofte ud for at have en hel mængde faneblade med redigeringsvinduer i fanebladslinjen. Dette gør det nødvendigt at have særlige funktioner til at rydde op, ordne og gruppere alle redigeringsfanebladene. &tdevelop; sørger for flere måder at gøre dette. Vi tager et hurtigt kig på nogen af dem.</para> +<simplelist> +<member +><link linkend="gettingstarted-edit-arrange-clean" +>Hvordan man fjerner faneblade som ikke behøves.</link +></member> +<member +><link linkend="gettingstarted-edit-arrange-tabs" +>Hvordan man omarrangerer fanebladene.</link +></member> +<member +><link linkend="gettingstarted-edit-arrange-split" +>Hvordan man viser flere filer samtidigt på arbejdsfladen.</link +></member> +<member +><link +linkend="gettingstarted-edit-arrange-sourceheader" +>Hvordan man redigerer C++ kildekodefiler og deklarationsfiler samtidigt</link +></member> +<member +><link linkend="gettingstarted-edit-arrange-group" +>Hvordan man grupperer kildekodefiler i udviklingssessioner.</link +></member> +</simplelist> + +<sect3 id="gettingstarted-edit-arrange-clean"> +<title +>Oprydning i fanebladslinjen</title> + +<para +>Hvis et enormt antal faneblade med redigeringsvinduer på en eller anden måde bliver dårligt arrangerede, vil man oftest lukke alle faneblade som ikke længere behøves. &tdevelop; sørger for flere funktioner til at gøre dette, den sædvanlige måde er totalt at lukke alle åbne redigeringsvinduer, og en mere specifik måde er hvor du udtrykkelig kan bestemme hvilke der skal lukkes og hvilke der skal beholdes åbne.</para> + +<formalpara> +<title +>Lukke flere faneblade på en gang</title> +<para +>Dette er en slags totalmetode for at lukke unødige åbne faneblade, som du også kan finde i andre &kde;-programmer. Du kan bruge menuen <guimenu +>Vindue</guimenu +> eller højreklikke på et faneblad, for enten at</para> +</formalpara> +<itemizedlist> +<listitem> +<para +>lukke redigeringsvinduet som for øjeblikket er valgt,</para> +</listitem> +<listitem> +<para +>lukke alle andre åbne redigeringsvinduer, eller</para> +</listitem> +<listitem> +<para +>lukke alle redigeringsvinduer på en gang (kun tilgængeligt i menuen <guimenu +>Vindue</guimenu +>).</para> +</listitem> +</itemizedlist> + +<formalpara> +<title +>Lukke markerede sæt faneblade</title> +<para +>Måden skridt for skridt at lukke enkelte faneblade med redigeringsvinduer kan blive besværlig hvis der er en stor mængde faneblade og du stadigvæk vil lade flere være åbne. I stedet for at efter de rigtige og lukke et faneblad af gangen, tilbyder &tdevelop; muligheden for at vælge kandidater i en liste og blot lukke dem, med et enkelt museklik.</para> +</formalpara> + +<para +>Lad os illustrere dette med et enkelt eksempel. Lad os antage at der er flere filer åbne for redigering i vort eksempelprojekt Hello: <filename +>hello.cpp</filename +>, <filename +>hello.h</filename +>, <filename +>helloui.rc</filename +>, <filename +>hello.desktop</filename +> og <filename +>main.cpp</filename +>. Du vil nu lukke alle undtagen <filename +>hello.cpp</filename +> og <filename +>hello.h</filename +>. Den nemmeste måde at gøre det er med værktøjsvisningen <filename +>Filliste</filename +>. Eftersom denne liste med åbne filer er alfabetisk ordnet, er det enklere at finde dem du vil lukke. Fortsæt som følger:</para> + +<procedure> +<step> +<para +>Åbn <guilabel +>Filliste</guilabel +>, hold tasten <keycap +>Ctrl</keycap +> nede, og klik på de filer du vil lukke i listen.</para> +</step> +<step> +<para +>Klik derefter med højre museknap, mens du holder musemarkøren på et filnavn i listen.</para> +</step> +<step> +<para +>Vælg <guimenuitem +>Luk markerete</guimenuitem +> fra den sammenhængsafhængige menu i <guimenu +>Fillisten</guimenu +>.</para> +</step> +</procedure> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="file-list-close-selected.png" format="PNG"/> +</imageobject> +<caption +><para +>Hvordan markerede redigeringsvinduer kan lukkes på en gang.</para +></caption> +</mediaobject> +</screenshot> +<para +>Det er det hele. &tdevelop; har lukket alle redigeringsvinduer som du ønskede, og du er klar til at fortsætte igen med en renset fanebladslinje.</para> +</sect3> + +<sect3 id="gettingstarted-edit-arrange-tabs"> +<title +>Hvordan redigeringsvinduets faneblade kan omarrangeres</title> + +<para +>Selvom du kun har de redigeringsvinduer som virkelig behøves åbne, vil du måske alligevel omarrangere fanebladene på en logisk måde. &tdevelop; tilbyder nogle fælles måder at gøre dette. I korthed:</para> + +<formalpara> +<title +>Grundlæggende indstilling: Hvor nye faneblade skal placeres</title> + +<para +>I standardtilfældet, når et nyt redigeringsvindue åbnes, indsættes fanebladet til højre for fanebladet for redigeringsvinduet som for øjeblikket bruges. Dette kan ændres så det nye faneblad åbnes længst til højre på fanebladslinjen.</para> +</formalpara> +<para +>Du skal ændre en grundlæggende indstilling i &tdevelop;s brugergrænseflade for at aktivere denne opførsel.</para> +<procedure> +<step> +<para +>Vælg <menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +> Indstil KDevelop...</guimenuitem +></menuchoice +></para> +</step> +<step> +<para +>Klik på ikonen <guilabel +>Brugergrænseflade</guilabel +> i ikonlinjen til venstre i dialogen. Dialogsiden <guilabel +>Brugergrænseflade</guilabel +> vises nu.</para> +</step> +<step> +<para +>Find feltet som hedder <guilabel +>Browse med faneblade</guilabel +>. Fjern markeringen af afkrydsningsfeltet på linjen <guilabel +>Åbn nyt faneblad efter nuværende faneblad</guilabel +>.</para> +</step> +<step> +<para +>Luk &tdevelop; og genstart det. Nu åbnes fanebladene for nye redigeringsvinduer længst borte til højre i nuværende fanebladslinje.</para> +</step> +</procedure> + +<para +>Desværre kan denne indstilling ikke ændres i farten under en udviklingssession. Du skal bestemme dig for hvilken opførsel du foretrækker i det lange løb, og derefter holde dig til det, i det mindste indtil næste gang &tdevelop; startes.</para> + +<formalpara> +<title +>Hvordan fanebladene kan omarrangeres</title> +<para +>Eftersom udviklingsopgaver varierer med tiden, kan behovet for at omarrangere fanebladene for redigeringsvinduer opstå af og til. Dette kan enkelt opnås i &tdevelop;.</para> +</formalpara> +<para +>Klik blot på fanebladet du vil flytte med musens midterste knap og flyt musen en lille smule. Markøren ændres til et mønster med krydsende pile. Nu kan du trække fanebladet, mens du holder den midterste knap nede, indtiltil det hopper på plads der hvor du vil have det.</para> +</sect3> + +<sect3 id="gettingstarted-edit-arrange-split"> +<title +>Vis flere filer samtidigt</title> + +<para +>Ved første syn er der aldrig mere end et enkelt redigeringsvindue åbent for at arbejde med en kildekodefil. Selvom du hurtigt kan skifte mellem faneblade, er der tider hvor du vil have flere filer åbne på en gang, f.eks. for referenceformål eller for at få bedre kontrol af komplekse opgaver. For at opnå dette, sørger &tdevelop; for en måde at dele arbejdsfladen i forskellige dele som ses samtidigt, og hvor og en kan indeholde en egen følge af faneblade.</para> + +<para +>Der er to opdelingskommandoer som du enten kan nå via menuen <guimenu +>Vindue</guimenu +>, eller ved at højreklikke i et vindue som hører til et faneblad eller på selve fanebladet. Vi beskriver også opdelingsopførslen udgående fra vort eksempelprojekt Hello.</para> + +<para +>Antag at der er to kildekodefiler åbne i fanebladslinjen: <filename +>hello.cpp</filename +> og <filename +>hello.h</filename +>. Mens du arbejder med kildekoden i <filename +>hello.cpp</filename +> behøver du ofte at kigge på deklarationerne i filen <filename +>hello.h</filename +>, så du vil have begge filer åbne samtidigt.</para> + +<para +>For at få det gjort, højreklikkes for eksempel på fanebladet for <filename +>hello.h</filename +>. Følgende menu dukker så op:</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="split-workspace.png" format="PNG"/> +</imageobject> +<caption +><para +>Hvordan den nuværende arbejdsflade kan deles op i to dele.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Vælg <guimenuitem +>Opdel vandret</guimenuitem +>. Dette deler arbejdsfladen på midten og flytter redigeringsvinduet som indeholder filen <filename +>hello.h</filename +> til den nederste del.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="split-windows.png"/> +</imageobject> +<caption +><para +>Arbejdsfladen er opdelt vandret.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Bemærk den stregede skillelinje mellem de to vinduer. Du kan tage tag i den med musen og justere redigeringsvinduernes højde efter dine behov.</para> + +<para +>Der er et antal ting at lægge mærke til.</para> +<itemizedlist> +<listitem> +<para +>De delte arbejdsflader fungerer helt og holdent på egen hånd. Det betyder at nye fanebladsvinduer åbnes i arbejdsfladen som indeholder redigeringsvinduet som for øjeblikket er aktivt. Du kan også opdele alle delområder igen som du ønsker, og på den måde have så mange vinduer åbne samtidigt som du behøver.</para> +</listitem> + +<listitem> +<para +>Hver deling flytter redigeringsvinduet som for øjeblikket er aktivt til den nye delarbejdsflade, enten nedad eller til højre. Øvrige fanebladsvinduer forbliver alle hvor de var. Du kan ikke direkte flytte fanebladsvinduer mellem delte områder, men i stedet skal du eksplicit lukke vinduet på en arbejdsflade og åbne det igen på en anden, for at gruppere om.</para> +</listitem> + +<listitem> +<para +>Der er heller ingen direkte måde at lukke et delt område igen. Det lukkes automatisk, når det sidste vindue med et faneblad i det lukkes.</para> +</listitem> +</itemizedlist> +</sect3> + +<sect3 id="gettingstarted-edit-arrange-sourceheader"> +<title +>Redigér C++ kildekode og deklarationsfiler samtidigt</title> + +<para +>Der er en smart brug af den ovennævnte funktion med delte arbejdsflader indbygget i &tdevelop;. Den lader dig automatisk have en kildekodefil, <filename +>.cpp</filename +>, og dens tilhørende deklarationsfil, <filename +>.h</filename +>, åbne side om side på arbejdsfladen. Desuden tillader den valgfrit at arbejde synkront med filerne, sådan at ved markering af en deklaration i deklarationsfilen går &tdevelop; til tilsvarende definition i kildekodefilen og omvendt.</para> + +<para +>Denne funktion er imidlertid ikke aktiveret som standard. Hvis du vil bruge den i projektet skal du aktivere den.</para> + +<para +>Vælg <menuchoice +><guibutton +>Projekt</guibutton +> <guimenuitem +>Projektindstillinger</guimenuitem +></menuchoice +>. Dialogen <guilabel +>Projektindstillinger</guilabel +> dukker op. Vælg <guiicon +>C++ støtte</guiicon +> i ikonlinjen til venstre, og derefter fanebladet <guilabel +>Navigering</guilabel +> på dialogsiden som vises til højre.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="split-source-header.png" format="PNG"/> +</imageobject> +<caption +><para +>Lad C++ kildekode og deklarationsfiler vises side om side.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Markér nu feltet <guilabel +>Aktivér deling af deklarationsfiler og kildekodefiler</guilabel +>. Dette aktiverer normalt <guilabel +>Automatisk synkronisering</guilabel +> og <guilabel +>Lodret</guilabel +>. Behold indstillingerne indtil videre og klik på <guibutton +>O.k</guibutton +>.</para> + +<para +>Luk nu begge redigeringsvinduer <filename +>hello.cpp</filename +> og <filename +>hello.h</filename +> i vort eksempelprojekt Hello, hvis det behøves. Vælg derefter <filename +>hello.cpp</filename +> igen i projektets undermappe <filename class="directory" +>src</filename +>. Redigeringsvinduet åbnes som sædvanligt, men hvis du nu åbner tilhørende <filename +>hello.h</filename +>, deler &tdevelop; automatisk arbejdsfladen og åbner deklarationsfilens redigeringsvindue lige under vinduet <filename +>hello.cpp</filename +>.</para> + +<para +>Der er endnu mere, som vi allerede har nævnt. Find for eksempel på definitionslinjen følgende konstruktor i vinduet <filename +>hello.cpp</filename +></para> +<programlisting +>Hello::Hello() +</programlisting> +<para +>og placér markøren der. Kig derefter i vinduet <filename +>hello.h</filename +> nedenfor og observér hvordan &tdevelop; gik til tilsvarende deklarationslinje for konstruktoren.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="split-source-header-navigate.png" format="PNG"/> +</imageobject> +<caption +><para +>&tdevelop; går automatisk til konstruktorens deklaration.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Det fungerer også omvendt. Så snart du placerer markøren et sted i en konstruktor i et redigeringsvindue, går &tdevelop; til tilsvarende konstruktor i det andet.</para> +</sect3> + +<sect3 id="gettingstarted-edit-arrange-group"> +<title +>Gruppér kildekodefiler i udviklingssessioner</title> + +<para +>Når projektet vokser sig større, og udviklingsopgaverne bliver mere og mere komplekse, tvinger det dig til ofte at skifte mellem forskellige, til og med distinkte, sæt filer. Nu er det tid til at organisere udviklingsarbejdet i adskilte sessioner. Værktøjsvisningen <guilabel +>Filliste</guilabel +> i &tdevelop; tillader dig at gøre præcis dette.</para> + +<para +>Længst oppe i vinduet for værktøjsvisningen <guilabel +>Filliste</guilabel +> findes en værktøjslinje hvor du kan oprette, gemme, vælge og fjerne sådanne sessioner. Brug alternativt undermenuen <menuchoice +><guimenu +>Vis</guimenu +> <guimenuitem +>Sessioner</guimenuitem +></menuchoice +>.</para> + +<para +>Vi beskriver også denne funktionen gående ud fra vort eksempelprojekt Hello. Antag at du altid vil åbne filerne <filename +>hello.cpp</filename +>, <filename +>hello.h</filename +> og <filename +>main.cpp</filename +> i et kridt, uafhængig af hvilken udviklingsopgave du neetop udførte i projektet. Du skal først oprette en ny udviklingssession, som eksempelvis kaldes <quote +>kildekode</quote +>, for at opnå dette.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="file-list-session-create.png" format="PNG"/> +</imageobject> +<caption +><para +>Brug udviklingssessioner for at huske filgrupper.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Dette er en procedure i flere skridt, som følger:</para> +<procedure> +<step> +<para +>Opret en ny session</para> +<substeps> +<step> +<para +>Klik på ikonen <guiicon +>Ny session</guiicon +> længst oppe til venstre i værktøjsvisningen <guilabel +>Filliste</guilabel +>.</para> +</step> +<step> +<para +>En dialog dukker op. Giv den nye session et navn i indtastningsfeltet <guilabel +>Indtast sessionens navn</guilabel +>, f.eks. <quote +>kildekode</quote +>.</para> +</step> +<step> +<para +>Luk dialogen med <guibutton +>O.k</guibutton +>. Den nye session angives nu i dropned-feltet i værktøjslinjen.</para> +</step> +</substeps> +</step> +<step> +<para +>Den nye session er tom fra begyndelsen. Du skal tilføje filerne du vil skal indgå i den.</para> +<substeps> +<step> +<para +>Åbn alle filer du vil skal grupperes i udviklingssessionen. I vort eksempel bestemte vi os for at beholde <filename +>hello.cpp</filename +>, <filename +>hello.h</filename +> og <filename +>main.cpp</filename +> som planlagt.</para> +</step> +<step> +<para +>Når fillisten er fuldstændig, klikkess på ikonen <guiicon +>Gem session</guiicon +> i værktøjslinjen. Spring ikke over dette stkridt Ellers glemmer &tdevelop; fillisten.</para> +</step> +</substeps> +</step> +</procedure> + +<para +>Det er alt. Så snart du vælger sessionen <guilabel +>kildekode</guilabel +> i dropned-felteet <guilabel +>Åbn session</guilabel +>, lukker &tdevelop; alle redigeringsvinduer som for øjeblikket er åbne, og åbner de huskede i stedet for (<filename +>hello.cpp</filename +>, <filename +>hello.h</filename +> og <filename +>main.cpp</filename +> i vort eksempel).</para> + +<para +>Du kan definere så mange sessioner som du vil i sammenhæng med projektet. Hvis du vil ændre sessionernes indhold, opdateres kun den huskede filliste med et klik på <guiicon +>Gem session</guiicon +>. Og hvis du vil slippe f med en session, vælges den i dropned-feltet, og derefter klikkes på ikonen <guiicon +>Fjern session</guiicon +> til højre i værktøjslinjen.</para> + +<para +>Du kan gøre endnu mere. Du kan tvinge &tdevelop; til at åbne en given standardsession når projektet indlæses. Vælg blot sessionen i dropned-feltet på indstillingssiden <menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Projektindstillinger</guimenuitem +><guimenuitem +>Filliste</guimenuitem +></menuchoice +> i projektindstillingerne.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="file-list-session-default.png" format="PNG"/> +</imageobject> +<caption +><para +>Lad &tdevelop; åbne en specifik session når projektet indlæses.</para +></caption> +</mediaobject> +</screenshot> +</sect3> +</sect2> + +<sect2 id="gettingstarted-edit-problems"> +<title +>Hold øjnene på almindelige problemer</title> + +<para +>Når et redigeringsvindue som indeholder en kildekodefil åbnes, tolker &tdevelop; dets indhold. Dette gør det muligt for den indbyggede <emphasis +>problemrapportør</emphasis +> at søge i kildekodeteksten efter sædvanlige fejl som den kender til. Den kan også informere brugeren om forskellige steder som er markeret for specialbehandling.</para> + +<para +>Lad os anskueliggøre denne funktion med vort eksempelprojekt Hello.</para> + +<itemizedlist> +<listitem> +<para +>Åbn et editorvindue med kildekodefilen <filename +>main.cpp</filename +>.</para> +</listitem> + +<listitem> +<para +>Sørg for at det stadigvæk indeholder følgende linje et sted nær slutningen:</para> +<programlisting +>/// @todo do something with the command line args here +</programlisting> +<para +>Dette blev indsat af programguiden da projektet Hello blev oprettet i kapitlet <link linkend="gettingstarted-new" +>Start et nyt projekt</link +> ovenfor.</para> +</listitem> + +<listitem> +<para +>Åbn nu værktøjsvisningen <guilabel +>Problemer</guilabel +> i linjen med faneblade længst nede. Hvis alt har fungeret, rapporterer den for øjeblikket følgende gøremål:</para> +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="problem-report-todo.png"/> +</imageobject> +<caption +><para +>&tdevelop; informerer om at en kildekodelinje indeholder markeringen todo.</para +></caption> +</mediaobject> +</screenshot> +</listitem> +</itemizedlist> + +<para +>Formatet for kommandoen <computeroutput +>/// @todo</computeroutput +> er til for særlig behandling af værktøjet for kodedokumentation, <application +>Doxygen</application +>, som vi tager et hurtigt kig på i afsnittet <link linkend="gettingstarted-doc" +>Dokumentation</link +> nedenfor. Det kræves ikke at du bruger dette format, de sædvanlige kommentarer <computeroutput +>TODO</computeroutput +> og <computeroutput +>FIXME</computeroutput +> genkendes også.</para> + +<para +>Hvis du for eksempel indsætter følgende kommentarlinjer med <computeroutput +>TODO</computeroutput +> og <computeroutput +>FIXME</computeroutput +> i vor eksempelfil <filename +>hello.cpp</filename +>:</para> +<programlisting +>Hello::Hello() + : KMainWindow( 0, "Hello" ) +{ + // set the shell's ui resource file + // TODO check the user interface + setXMLFile("helloui.rc"); + + // FIXME change to a better suited greeting + new QLabel( "Hello World", this, "hello label" ); +} +</programlisting> +<para +>ser du dem også angivne i værktøjsvisningen <guilabel +>Problemer</guilabel +>:</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="problem-report-marks.png" format="PNG"/> +</imageobject> +<caption +><para +>Problemrapporten som angiver linjer som kræver opmærksomhed i nuværende fil som redigeres.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Bemærk de øvrige faneblade i værktøjsvisningen <guilabel +>Problemer</guilabel +>, i særdeleshed <guilabel +>Ordn</guilabel +> og <guilabel +>Gøremål</guilabel +>. Hvis du åbner den ser du alle linjer markerede med <computeroutput +>FIXME</computeroutput +> og <computeroutput +>TODO</computeroutput +> som &tdevelop; hidtil har fundet i sessionen. Informationen om <computeroutput +>TODO</computeroutput +> set for øjeblikket ud på følgende måde:</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="problem-report-all-todos.png" format="PNG"/> +</imageobject> +<caption +><para +>Problemrapporten har samlet information om <computeroutput +>TODO</computeroutput +>.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Fanebladet <guilabel +>Fejl</guilabel +> lister imidlertid ikke hver kodningsfejl som du laver. Dette arbejde udføres af andre værktøjer under byggeprocessen. Her finder du information om nogle sædvanlige programmeringsfejl, som formodentlig ellers ville forblive ubemærkede og formodentlig med besvær blive fundet via komplicerede fejlsøgningssessioner.</para> + +<para +>Du vil bemærke at problemrapportfunktionen i &tdevelop; er et meget værdifuldt værktøj, så kontrollér værktøjsvisningen <guilabel +>Problemer</guilabel +> regelmæssigt under udviklingsprocessen.</para> +</sect2> +</sect1> + +<sect1 id="gettingstarted-compile"> +<title +>Hvordan man kompilerer et projekt</title> + +<para +>At kompilere et projekt i &tdevelop; kræver flere indstillingsskridt og derefter at programmet bygges. Alt dette er tilgængeligt via menuen <guimenu +>Byg</guimenu +>.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="build-menu.png" format="PNG"/> +</imageobject> +<caption +><para +>At bygge et projekt kræver flere skridt.</para +></caption> +</mediaobject> +</screenshot> + +<para +>For øjeblikket er vi kun interesserede i menuens øvre del. Indgangene der er sorterede efter hvor vigtige de er. Derfor er kommandoen som oftest behøves længst op, indgangen <guimenuitem +>Byg projekt</guimenuitem +> som gør at hele projektet initieres, kompileres og lænkes efter behov. Andre indgange findes for at kompilere valgte dele af projektet, eller kun en enkelt fil, for at udføre flere forskellige initieringssekvenser, eller for at installere det færdige programs binære filer.</para> + +<para +>Indtil videre koncentrerer vi os om flere funktioner som &tdevelop; sørger for for at indstille projektet, initiere, bygge og køre programmet. I almindelighed omfatter dette:</para> + +<simplelist> +<member +><link linkend="gettingstarted-compile-basic" +>Tag et hurtigt kig på den grundlæggende byggecykel.</link +></member> +<member +><link linkend="gettingstarted-compile-setup" +>Kig på nogle enkelte måder at indstille et projekt.</link +></member> +</simplelist> + +<sect2 id="gettingstarted-compile-basic"> +<title +>Den grundlæggende byggecykel</title> + +<para +>Når man har oprettet et nyt projekt, vil man oftest kontrollere om alt hidtil er gået godt. Dette omfatter at bygge projektet første gang og testkøre programmet, hvilket vi skal gøre nu. For at kompilere et projekt første gang er der flere skridt at udføre, som vi tager et hurtigt kig på:</para> +<simplelist> +<member +><link linkend="gettingstarted-compile-basic-init" +>Hvordan projektet initieres for at bygge det første gang.</link +></member> +<member +><link linkend="gettingstarted-compile-basic-config" +>Hvordan de oprindelige indstillinger gøres.</link +></member> +<member +><link linkend="gettingstarted-compile-basic-build" +>Hvordan man bygger projektet.</link +></member> +<member +><link linkend="gettingstarted-compile-basic-run" +>Hvordan programmet køres indefra &tdevelop;.</link +></member> +</simplelist> + +<note> +<para +>Denne beskrivelse forudsætter at projektet er baseret på &GNU; autotools, hvilket aktiverer Håndtering af automake i &tdevelop;, ligesom vort eksempelprojekt Hello. Hvis du laver en anden projekttype, f.eks. for &Qt;-baseret projekthåndtering med <application +>QMake</application +>, findes andre funktioner tilgængelige i menuerne, eller måske ikke nogen af dem. Du skal bruge de respektive leverandørers dokumentation om projekthåndtering og hvordan man bygger projekter i disse tilfælde.</para> +</note> + +<sect3 id="gettingstarted-compile-basic-init"> +<title +>Initiér projektet så det kan bygges</title> + +<para +>Da programguiden oprettede vort eksempelprojekt Hello, efterlod den det i en slags <quote +>uberørt</quote +> udgangstilstand. Værktøjskæden i &GNU; autotools kræver at flere initieringsskridt udføres inden programmet virkelig kan kompileres og linkes. Hvis du forsøger at bygge et projekt når det er i denne udgangstilstand, f.eks. ved at vælge <menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Byg projekt</guimenuitem +></menuchoice +> eller trykke på funktionstasten <keycap +>F8</keycap +>, får du følgende advarsel:</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="raw-project-warning.png" format="PNG"/> +</imageobject> +<caption +><para +>Forsøger at bygge et ubehandlet projekt baseret på automake.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Du kan klikke på knappen <guibutton +>Kør dem</guibutton +>, hvilket gør at &tdevelop; automatisk forsøger at køre alle indstillingsskridt som kræves inden programmet kompileres og linkes. Men vi skal kigge på de indledende skridt i rækkefølge, så afbryd dialogen ved at klikke på <guibutton +>Kør ikke</guibutton +>. </para> + +<para +>Som allerede nævnt udføres kompilering og linkning af programmet via menuen <guimenu +>Byg</guimenu +>. Vis den og vælg <guimenuitem +>Kør automake og beslægtede programmer</guimenuitem +>.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="build-menu-automake.png" format="PNG"/> +</imageobject> +<caption +><para +>Start en grundlæggende initieringskørsel.</para +></caption> +</mediaobject> +</screenshot> + +<para +>&tdevelop; åbner nu værktøjsvisningen <guilabel +>Meddelelser</guilabel +> længst nede og viser en følge af meddelelser som skabes af flere forskellige byggeværktøjer. Hvis alting gik godt, skal den sidste linjen lyde: <quote +><computeroutput +>*** Lykkedes ***</computeroutput +></quote +>.</para> + +<para +>Hvis du ruller tilbage længst oppe, finder du kommandolinjen som &tdevelop; udførte for at kalde værktøjerne i baggrunden:</para> + +<programlisting +>cd '/home/devel/projects/hello' && \ +WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake -f Makefile.cvs +</programlisting> + +<para +>Dette siger at &tdevelop; først skiftede til vort eksempelprojekts rodmappe. Derefter oprettedes et særligt miljø, som fortæller for byggesystemet hvilke versioner af <application +>autoconf</application +> og <application +>automake</application +> som bruges til initieringen. Tilsidst instrueredes byggeværktøjet (&GNU; <application +>gmake</application +> i dette tilfælde) til at behandle byggefilen <filename +>Makefile.cvs</filename +>.</para> + +<para +>Byggefilen oprettedes automatisk da projektet Hello blev oprettet.Den indeholder alle kommandoer som behøves for at initiere projektet rigtigt, så programmet som skabes kan køres i &kde;. I særdeleshed laver den scriptfilen <filename +>configure</filename +> som er nødvendig for at udføre næste indstillingsskridt.</para> +</sect3> + +<sect3 id="gettingstarted-compile-basic-config"> +<title +>Indledende konfiguration af Hello</title> + +<para +>At konfigurere betyder at indstille byggeprocessen til egenheder hos hardware og programmel i systemet. Dette er et grundkrav i byggeprocesser baserede på &GNU; autotools, som du formodentlig allerede ved.</para> + +<para +>Du kan først beordre en konfigureringssekvens når den grundlæggende initiering af automake er afsluttet med godt resultat, eftersom de nødvendige <filename +>configure</filename +>-filer ikke er tilgængelige før end fter den indledende kørsel. Når den er gjort, vælges menupunktet <menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Kør configure</guimenuitem +></menuchoice +> for at påbegynde konfigureringssekvensen.</para> + +<para +>&tdevelop; åbnede værktøjsvisningen <guilabel +>Meddelelser</guilabel +> igen hvis det behøvedes, og listede meddelelser fra kørslen af configure i den. Hvis alt gik godt, er de sidste meddelelser <quote +><computeroutput +>Good - your configure finished. Start make now</computeroutput +></quote +> (som udskrevet af configure) fulgt af meddelelsen <quote +><computeroutput +>*** Lykkedes ***</computeroutput +></quote +> fra &tdevelop;.</para> + +<para id="gettingstarted-compile-basic-config-cmd" +>Længst oppe i vinduet <guilabel +>Meddelelser</guilabel +> finder du igen kommandolinjen som &tdevelop; brugte til at starte konfigurationen:</para> + +<programlisting +>mkdir '/home/devel/projects/hello/debug' && \ +cd '/home/devel/projects/hello/debug' && \ +CXXFLAGS="-O0 -g3" "/home/devel/projects/hello/configure" --enable-debug=full +</programlisting> + +<para +>Du kan se flere interessante detaljer i kommandoerne.</para> + +<informaltable frame="none"> +<tgroup cols="2" +><tbody +><row> +<entry> +<mediaobject> +<imageobject> +<imagedata fileref="tutorial-debug-tree.png"/> +</imageobject> +</mediaobject> +</entry> +<entry> +<itemizedlist> +<listitem> +<para +>For det første bruger &tdevelop; en særlig undermappe i projektets mappetræ for byggeprocessen. Byggemappen <filename class="directory" +>debug</filename +> (som vises til venstre) spejler den grundlæggende projektstruktur og indeholder en mængde byggerelaterede filer, såsom flere <filename +>configure</filename +>-baserede filer og desuden en <filename +>Makefile</filename +> i hver undermappe.</para> +</listitem> +<listitem> +<para +>I det nærmest følgende afsnit <link linkend="gettingstarted-compile-setup" +>Indstil projektet</link +> giver vi en kortfattet beskrivelse af motiverne til at &tdevelop; bruger separate byggemapper i tilfælde som disse. For øjeblikket er det nok at vide at &tdevelop; oprettede mappen <filename class="directory" +>debug</filename +> (hvis det behøvedes) inden kaldet til configure, og at scriptet <filename +>configure</filename +> oprettede delstrukturen og alle <filename +>Makefile</filename +> i den.</para> +</listitem> +<listitem> +<para +>Derefter, kaldte &tdevelop; scriptet <filename +>configure</filename +> indefra byggemappen <filename class="directory" +>debug</filename +> i vort projekts rodmappe med et særligt miljø, hvor argumenterne <computeroutput +>CXXFLAGS="-O0 -g3"</computeroutput +> senere fortæller for &gcc;-oversætteren at den ikke skal optimere de binære filer som skabes, og at den skal inkludere fuldstændig fejlsøgningsinformation i dem.</para> +</listitem> +<listitem> +<para +>Tilsidst kaldtes scriptet <filename +>configure</filename +> med tilvalget <computeroutput +>--enable-debug=full</computeroutput +> som beder det om at oprette hver <filename +>Makefile</filename +> så efterfølgende kompilering og linkning får al nødvendig fejlsøgningsinformation indbygget og brugbart.</para> +</listitem> +</itemizedlist> +</entry> +</row +></tbody +></tgroup> +</informaltable> + +<para +>Alle disse indstillinger kan indstilles for hvert projekt. Du vil lære dig mere om dette i kapitlet <link linkend="project-management" +>Projekthåndtering</link +>.</para> +</sect3> + +<sect3 id="gettingstarted-compile-basic-build"> +<title +>Byg projektet</title> + +<para +>Når du er kommet så langt er du klar til virkelig at bygge, dvs. kompilere og linke programmet. Ved at kigge i menuen <guimenu +>Byg</guimenu +>, ser du at der er tre sådanne kompileringstilvalg at vælge blandt.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="build-commands.png" format="PNG"/> +</imageobject> +<caption +><para +>Kommandoen i &tdevelop; til at bygge binære filer.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Nedefra og opad, er der:</para> +<itemizedlist> +<listitem> +<para +><guimenuitem +>Kompilér fil</guimenuitem +>: Det kompilerer kildekodefilen i redigeringsvinduet som for øjeblikket er åbent. Bruges oftest til hurtig kontrol af fejl.</para> +</listitem> +<listitem> +<para +><guimenuitem +>Byg aktivt mål</guimenuitem +>: Dette bruges i hovedsagen i sammenhæng med <link linkend="gettingstarted-extend-automake" +>Håndtering af automake</link +>, som vi tager et hurtigt kig på nedenfor.</para> +</listitem> +<listitem> +<para +><guimenuitem +>Byg projekt</guimenuitem +>: Det er hvad vi nu er interesserede i. Det går gennem hele projektet, kompilerer og linker filer hvor det er nødvendigt.</para> +</listitem> +</itemizedlist> + +<para +>Det kan være interessant at se hvad der sker med mappen <filename class="directory" +>debug</filename +> som blev oprettet under foregående kørsel af <filename +>configure</filename +>. Derfor er det bedst at beholde den åben med alle undermapper synlige, som vises ovenfor. Vælg derefter <menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Byg projekt</guimenuitem +></menuchoice +> (eller tryk på tasten <keycap +>F8</keycap +>) for at påbegynde byggesekvensen. Som tidligere åbnes værktøjsvisningen <guilabel +>Meddelelser</guilabel +> længst nede og lister resultatet af byggekørslen. Desuden dukker nogle filer op i undermappetræet <filename class="directory" +>debug</filename +>.</para> + +<para id="gettingstarted-compile-basic-build-cmd" +>Der er ikke mange kildekodefiler i vort eksempelprojekt Hello, altså kommer vinduet <guilabel +>Meddelelser</guilabel +> kun til at indeholde nogle få linjer. For oven findes igen kommandolinjen som &tdevelop; sendte til skallen i baggrunden.</para> + +<programlisting +>cd '/home/devel/projects/hello/debug' && \ +WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake -k +</programlisting> + +<para +>&tdevelop; skiftede til <filename class="directory" +>debug</filename +>-deltræets rod, hvilket ikke burde være overraskende, for at køre filen <filename +>Makefile</filename +> som findes der. Et særligt delmiljø oprettedes igen, som tidligere i <link linkend="gettingstarted-compile-basic-init" +>initieringsskridtet</link +>, i hvilken værktøjet <application +>gmake</application +> blev kaldet.</para> + +<para +>Bemærk flaget <computeroutput +>-k</computeroutput +> i kaldet af <application +>gmake</application +>. Det tvinger byggeprocessen til at fortsætte til sin slutning, også selvom fejl skulle opstå. Det giver mening eftersom &tdevelop; vil liste alle fejlmeddelelser i vinduet <guilabel +>Meddelelser</guilabel +>. Hvis der er nogen, drage nytte af fordelene med det integrerede udviklingsmiljø: klik blot på fejlmeddelelsen i vinduet <guilabel +>Meddelelser</guilabel +> så går &tdevelop; til det nøjagtige sted hvor fejlen ospstod i kildekodefilen.</para> + +<para +>Og hvad skete inde i deltræet <filename class="directory" +>debug</filename +>? Ikke så meget. Nogle få filer dukkede op i grenene <filename class="directory" +>doc/en</filename +> og <filename class="directory" +>src</filename +>, i særdeleshed filen <filename +>hello</filename +> i <filename class="directory" +>/home/devel/projects/hello/debug/src/</filename +>. Den er, til sidst, programmets binære fil som vi søgte. Alt som er tilbage at gøre i vor indledende kontrol af projektet er at køre <filename +>hello</filename +>.</para> +</sect3> + +<sect3 id="gettingstarted-compile-basic-run"> +<title +>Kør programmet</title> + +<para +>Der er ikke nogen ekstra skridt indblandede for at køre det nye program hello. Vælg enten <menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Kør program</guimenuitem +></menuchoice +>, tryk på <keycombo +><keycap +>Shift</keycap +> <keycap +>F9</keycap +></keycombo +> eller brug knappen <guibutton +>Kør program</guibutton +> i <guilabel +>byggeværktøjslinjen</guilabel +> som vises nedenfor.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="run-button.png"/> +</imageobject> +<caption +><para +>Kør et program fra <guilabel +>Byggeværktøjslinjen</guilabel +>.</para> +</caption> +</mediaobject> +</screenshot> + +<para +>Det er alt. &tdevelop; starter nu det nye program i et særskilt terminalvindue som værktøjsvisningen <guilabel +>Program</guilabel +> længst nede. Der vises kommandoen som &tdevelop; udførte for at køre programmet på linjen længst oppe:</para> + +<programlisting +>./hello +</programlisting> + +<para +>som viser at det integrerede udviklingsmiljø har en mening om hvor programmet som skal køres findes. Denne mening kan indstilles på mange måder. Se mere om dette i kapitlet <link linkend="project-management" +>Projekthåndtering</link +>.</para> + +<para +>Linjen <computeroutput +>./hello</computeroutput +> følges formodentlig af en advarselsmeddelelse. Ignorér den indtil videre. Den forhindrer ikke at vort program <application +>hello</application +> kører.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="hello-world-app.png" format="PNG"/> +</imageobject> +<caption> +<para +>Vort oprindelige <application +>Hello</application +>-program.</para> +</caption> +</mediaobject> +</screenshot> + +<para +>Luk programvinduet <application +>Hello</application +> som sædvanligt. Hvis ingen fejl opstod rapporterer &tdevelop; det som <quote +><computeroutput +>*** Afsluttede normalt ***</computeroutput +></quote +> i værktøjsvisningen <guilabel +>Program</guilabel +>.</para> +</sect3> +</sect2> + +<sect2 id="gettingstarted-compile-setup"> +<title +>Indstil projektet</title> + +<para +>Der er adskillige måder at håndtere et projekt i &tdevelop;. Denne opførsel kan indstilles for hvert projekt, og er mest interessant for avancerede udviklere. Der er imidlertid nogle få projektspecifikke indstillinger som du bør kende il helt fra begyndelsen. </para> + +<simplelist> +<member +><link linkend="gettingstarted-compile-setup-build" +>Hvorfor er byggeindstillinger nyttige?</link +></member> + +<member +><link linkend="gettingstarted-compile-setup-config" +>Hvor skal opførslen af scriptet <filename +>configure</filename +> defineres.</link +></member> + +<member +><link linkend="gettingstarted-compile-setup-make" +>Nogle overvejelser om hvordan <application +>make</application +> skal køres.</link +></member> + +<member +><link linkend="gettingstarted-compile-setup-run" +>Hvor skal det kørbare programmet findes, og hvad skal det hedde?</link +></member> +</simplelist> + +<sect3 id="gettingstarted-compile-setup-build"> +<title +>Byggeindstillinger</title> + +<para +>Da vi kørte scriptet <filename +>configure</filename +> i afsnittet <link linkend="gettingstarted-compile-basic-config" +>Indledende konfiguration af Hello</link +> ovenfor, noterede vi at &tdevelop; havde oprettet den særlige undermappe <filename class="directory" +>debug</filename +> for dette formål. I dette afsnit behandler vi kortfattet nogle konsekvenser af denne funktion.</para> + +<para +>For det første bruger &tdevelop; ikke nødvendigtvis særlige byggemapper adskilte fra kildekoden. Forberedelser for automatisk at bruge særlige byggeindstillinger gøres via de skabeloner som programguiden bruger når et nyt projekt skabes.</para> + +<para +>For at få styr på hvilke byggeindstillinger som for øjeblikket er tilgængelige, tag et kig å menuen <menuchoice +><guimenu +>Projekt</guimenu +> <guisubmenu +>Byggeindstilling</guisubmenu +></menuchoice +>.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="build-configurations.png" format="PNG"/> +</imageobject> +<caption +><para +>Der er forskellige byggeindstillinger tilgængelige i projektet.</para +></caption> +</mediaobject> +</screenshot> + +<para +>I dette tilfælde, som i vort eksempelprojekt Hello, er der tre forskellige tilgængelige byggeindstillinger. I andre tilfælde findes måske kun findes en sådan byggeindstilling fra begyndelsen, nemlig <guimenuitem +>default</guimenuitem +>.</para> + +<para +>Byggeindstillingen som for øjeblikket bruges har et tjekmærke til venstre. Vælg helt enkelt dets menupunktet for at skifte til en anden byggeindstilling.</para> + +<para +>Lad os nu tage et hurtigt kig på hvad byggeindstillingerne sørger for.</para> + +<variablelist id="gettingstarted-compile-setup-build-configs"> +<varlistentry> +<term +><guimenuitem +>debug</guimenuitem +></term> +<listitem> +<para +>Du bør bruge byggeindstillingen som standard under udviklingsprocessen. Den bygges separat fra kildekodemapperne i den særlige undermappe <filename class="directory" +>debug</filename +>, dvs. alle objektfiler, ekstrafiler og kørbare filer placeres i dens undermapper i stedet for tilsvarende mapper i projektets rod. Scriptet <filename +>configure</filename +> får flaget <computeroutput +>--enable-debug=full</computeroutput +> og argumentet <computeroutput +>CXXFLAGS="-O0 -g3"</computeroutput +> fortæller for &gcc;-oversætteren koden ikke skal optimeres og at der skal indsættes omfattende fejlsøgningsinformation i de binære filer som skabes.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>optimeret</guimenuitem +></term> +<listitem> +<para +>Denne bruges til at bygge det endelige C++ programmet. Den bygges separat fra kildekodemapperne i den særlige undermappe <filename class="directory" +>optimized</filename +>. Scriptet <filename class="directory" +>configure</filename +> har ingen særlige forudindstillede flag, men <computeroutput +>CXXFLAGS="-O2 -g0"</computeroutput +> beder &gcc;-oversættern om at optimere koden og ikke indsætte fejlsøgningsinformation i de binære filer som skabes.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><guimenuitem +>default</guimenuitem +></term> +<listitem> +<para +>Betegnelsen <quote +>default</quote +> angiver standardindstillingen når et program bygges i en terminal med f.eks. &GNU; byggeværktøjet <application +>configure</application +> og <application +>make</application +>/<application +>gmake</application +> på kommandolinjen. I modsætning til <guimenuitem +>debug</guimenuitem +> eller <guimenuitem +>optimized</guimenuitem +> bruges ingen særlig byggemappe. Programmet bygges i stedet normalt i kildekodemapperne. Ingen særlige konfigurationsflag er fordefinerede. Når programmet bygges og køres bruges de underliggende værktøjers standardindstillinger (f.eks. &gcc;, osv.).</para> + +<warning> +<para +>Tænk efter ordentligt inden du bestemmer dig for at bruge byggeindstillingen <guimenuitem +>default</guimenuitem +>.</para> + +<para +>Den kan ikke bruges parallelt med de særlige indstillinger<guimenuitem +>debug</guimenuitem +> og <guimenuitem +>optimized</guimenuitem +>. <emphasis +>Alle byggehandlinger som bruger <guimenuitem +>default</guimenuitem +> gør at begge de andre byggeindstillinger bliver unyttige.</emphasis +> Dette skyldes nogle egenheder hos processen som laver <filename +>Makefile</filename +> med mekanismerne i <application +>automake</application +> og <application +>autoconf</application +>, som det ikke er enkelt at få bugt med.</para> +</warning> +</listitem> +</varlistentry> +</variablelist> + +<para +>Hvorfor vil man så bruge forskellige byggeindstillinger øverhovedet, når de til og med ikke synes at fungere sammen? Svaret er at det forenkler cykler med redigering, kompilering og fejlsøgning. De ekstra fejlsøgningsinstruktioner som indsættes i de binære filer samt alle de subtile strukturændringer som gøres af programkoden under optimering påvirker opførslen når det køres for programmet som skabes. Når den logiske strukturen for en bestemt rutine synes at være rigtig, bør du teste om den stadigvæk opfører sig rigtigt under mere realistiske forhold.</para> + +<para +>Det er der byggeindstillingerne i &tdevelop; gør nytte. Eftersom byggeobjekter og kørbare filer i hvert særlig byggemappe, og byggekommando, holdes adskilte fra hinanden behøver kun ændringer af kildekode håndteres når du skifter mellem byggeindstillingerne.</para> + +<para +>I stedet for at rydde op og kompilere alt om fra begyndelsen med andre indstillinger, behøver du altså kun skifte fra byggeindstillingen <guimenuitem +>debug</guimenuitem +> til <guimenuitem +>optimize</guimenuitem +>, kompilere ændringerne af kildekoden og derefter genstarte programmet under disse forhold. Hvis noget upassende viser sig, skift så helt enkelt tilbage til <guimenuitem +>debug</guimenuitem +>, og fortsæt med det samme arbejde der.</para> + +<para +>En sidste bemærkning: Mange byggeindstillinger kan indstilles. Du kan til og med definere dine egne byggeindstillinger hvsi udviklingsprocessen kræver det. Vi tager et hurtigt kig på disse muligheder i næste afsnit.</para> +</sect3> + +<sect3 id="gettingstarted-compile-setup-config"> +<title +>Konfigurationstilvalg for projektet</title> + +<para +>At konfigurere programmet rigtigt er livsvigtigt i byggekæden baseret på &GNU; autotools. Dette styres ofte af flagene for scriptet <filename +>configure</filename +> og/eller særlige argumentindstillinger i miljøet inden <filename +>configure</filename +> køres, som f.eks. <computeroutput +>CXXFLAGS</computeroutput +> i vor tidligere beskrivelse.</para> + +<para +>Du kan indstille de fleste konfigurationsvalgmulighederne for et givet projekt fra &tdevelop;s grafiske grænseflade. Vælg <menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Projektindstillinger</guimenuitem +></menuchoice +> og derefter ikonen <guiicon +>Indstilling af configure</guiicon +> på ikonlinjen til venstre i dialogen. Siden <guilabel +>Indstilling af configure</guilabel +> som indeholder flere fanebladsvinduer vises til højre.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-project-configure.png" format="PNG"/> +</imageobject> +<caption +><para +>De fleste indstillinger af configure kan angives her.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Som du bemærker, er der et ganske stort antal tilvalg som kan angives i denne dialog. Indtil videre kigger vi kortfattet på et fåtal af dem med hensyn til vort eksempelprojekt Hello. For detaljerede instruktioner, se kapitlet <link linkend="projects-configure" +>Konfigurere projekt</link +>. Hvis du vil vide mere om betydningen af forskellige argumenter som kan angives, slå <command +>info make</command +> op i en terminal (eller <command +>info:make</command +> inde i &konqueror;) og kigge i afsnittet <menuchoice +><guimenu +>Implicit Rules</guimenu +> <guimenuitem +>Implicit Variables</guimenuitem +></menuchoice +>.</para> + +<para +>Der er flere indstillingsvinduee med faneblade i dialogen, hvor det første, <guilabel +>Generelt</guilabel +>, viser ofte brugte indstillinger, mens de øvrige er ganske oversætterspecifikke. Under alle omstændighedder, styres imidlertid det egentlige indhold i dialogerne for den givne byggeindstilling.</para> + +<para +>Du vælger byggeindstillingen hvis indstillingstilvalg skal defineres i dropned-feltet <guilabel +>Indstilling</guilabel +> længst oppe i dialogen <guilabel +>Indstilling af configure</guilabel +>.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-project-buildconfig.png" format="PNG"/> +</imageobject> +<caption +><para +>Vælg byggeindstilling hvis indstillinger skal defineres.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Vælg nu en anden byggeindstilling i dette dropned-felt og observér hvordan indholdet i f.eks. tekstfelterne <guilabel +>Configure-argument</guilabel +> og <guilabel +>Byggemappe</guilabel +> ændres ifølge indstillingerne vi nævnte for <link linkend="gettingstarted-compile-setup-build-configs" +>byggeindstillingslisten</link +> ovenfor.</para> + +<sect4 id="gettingstarted-compile-setup-config-general"> +<title +>Generelle konfigurationsindstillinger</title> + +<para +>Følgende indstillingstilvalg kan defineres på siden <guilabel +>Generelt</guilabel +> i dialogen:</para> + +<itemizedlist> +<listitem> +<formalpara> +<title +>Configure-argument</title> +<para +>Dette er valgmulighederne som &tdevelop; tildeler til kaldet af scriptet <filename +>configure</filename +> i byggeprocessen. Se <link linkend="gettingstarted-compile-basic-config-cmd" +>exemplet</link +> i afsnittet <quote +>Indledende konfiguration af Hello</quote +> ovenfor.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Byggemappe</title> +<para +>Dette er undermappen i nuværende projektrod, hvor &tdevelop; placerer alle filer som skabes under byggeprocessen. Ideelt set burde det svare til navnet på byggeindstillingen som bruges, men du har mulighed for at bruge et hvilket som helst navn du vil, under forudsættning af at det er anderledes end alle andre byggemapper.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Øverste kildemappe</title> +<para +>Du behøver ikke denne ofte. Dens standardværdi er projektets rodmappe, og den behøver kun defineres om hvis projektets kildekode er placeret et andet sted.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>C/C++ preprocessorargument(CPPFLAGS)</title> +<para +>Indtast særlige instruktioner for præprocessoren her. &tdevelop; bruger dette til at oprette et midlertidigt miljø inden selve byggeværktøjet kaldes. Se igen <link linkend="gettingstarted-compile-basic-config-cmd" +>exemplet</link +> i afsnittet <quote +>Inledande konfiguration af Hello</quote +> ovenfor hvordan det gøres.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Linkargumenter (LDFLAGS)</title> +<para +>Dette er ekstra information for linkværktøjet <application +>ld</application +>, om hvor det skal lede efter yderligere biblioteker. Det bruges også til at oprette det midlertidige byggemiljø.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Miljøvariabler</title> +<para +>Her kan du definere yderligere variabler som skal indstilles i det midlertidige byggemiljø som &tdevelop; laver inden de respektive byggeværktøjer kaldes. Igen, skal du definere miljøvariablerne for hver byggeindstilling hvor de skal bruges.</para> +</formalpara> +</listitem> +</itemizedlist> +</sect4> + +<sect4 id="gettingstarted-compile-setup-config-spec"> +<title +>Oversætterspecifikke indstillinger</title> + +<para +>Øvrige faneblade på dialogsiden <guilabel +>Indstilling af configure</guilabel +> er til for oversætterspecifikke indstillinger. De er strukturerede på en lignende måde, så det er tilstrækkeligt hurtigt at kigge på siden <guilabel +>C++</guilabel +>.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-project-cpp.png" format="PNG"/> +</imageobject> +<caption +><para +>Vælg oversætter som &tdevelop; skal bruge og dens arbejdsmiljø her.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Her kan du indstille følgende:</para> + +<itemizedlist> +<listitem> +<formalpara> +<title +>C++ oversætter</title> +<para +>Vælg den C++ oversætter som &tdevelop; normalt skal bruge i dette dropned-felt. Det lister dog kun de oversættere som &tdevelop; allerede kender til.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Oversætterkommando (CXX)</title> +<para +>Kun for eksperter. Dette behøves kun hvis en anden C++ oversætter end standardoversætteren bruges. Indtast navnet som det kaldes med her.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Oversætterargumenter (CXXFLAGS)</title> +<para +>Her kan du indtaste eventuelle ekstra tilvalg som &tdevelop; skal sende til oversættern (via <filename +>Makefile</filename +>). Visse alternative værdier er forudindstillede ifølge byggeindstilling som blev valgt med dropned-feltet <guilabel +>Indstilling</guilabel +>.</para> +</formalpara> + +<para +>Bemærk at mange sædvanlige oversættertilvalg kan vælges i en dialog som dukker op når du klikker på knappen <guibutton +>...</guibutton +> til højre for tekstfeltet.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-project-cppoptions.png" format="PNG"/> +</imageobject> +<caption +><para +>Brug denne dialog til at definere opførslen af &GNU; C++ oversætteren.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Vi valgte med vilje fanebladet <guilabel +>Optimering</guilabel +> her. Bemærk at tilvalget <guilabel +>Ingen optimering</guilabel +> er standard (ifølge det forudindstillede tilvalg <guilabel +>-O0</guilabel +> i byggeindstillingen <computeroutput +>debug</computeroutput +>).</para> + +<para +>Desværre kan du for øjeblikket ikke vælge alle tilvalg fra dialogen Eksempelvis skal tilvalget <computeroutput +>-g3</computeroutput +> som bruges af byggeindstillingen <computeroutput +>debug</computeroutput +> ændres manuelt hvis det nogensinde behøves.</para> +</listitem> +</itemizedlist> +</sect4> +</sect3> + +<sect3 id="gettingstarted-compile-setup-make"> +<title +>Hvordan programmet skal bygges af make</title> + +<para +>Du kan desuden indstille måden som &tdevelop; kalder værktøjet <application +>make</application +> når projektet bygges. Vælg <menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Projektindstillinger</guimenuitem +></menuchoice +> og derefter ikonen <guiicon +>Byggeindstillinger</guiicon +> til venstre i dialogvinduet. Dialogsiden <guilabel +>Byggeindstillinger</guilabel +> vises så til højre.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-project-make.png" format="PNG"/> +</imageobject> +<caption +><para +>Definér hvordan &tdevelop; kalder værktøjet <application +>make</application +>.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Der er ikke så meget at gøre lige her nu. Den eneste interessante indstilling i de fleste tilfælde er tilvalget <guilabel +>Afbryd ved første fejl</guilabel +>. Du vil bemærke at den er deaktiveret i de fleste projekter. Den svarer til flaget <computeroutput +>-k</computeroutput +> i kaldet til <application +>gmake</application +> som vi fandt den første gang da eksempelprojektet Hello <link linkend="gettingstarted-compile-basic-build-cmd" +>blev byggeet</link +>.</para> + +<para +>Dette giver mening i et integreret udviklingsmiljø som &tdevelop;, hvor alle fejlmeddelelser under bygningen opbevares. Efter byggeprocessen kan du enkelt gå til en hvilket som helst fejlmeddelelse i værktøjsvinduet <guilabel +>Meddelelser</guilabel +>. Brug <menuchoice +><guimenu +>Vis</guimenu +> <guimenuitem +>Næste fejl</guimenuitem +></menuchoice +> og <menuchoice +><guimenu +>Vis</guimenu +> <guimenuitem +>Foregående fejl</guimenuitem +></menuchoice +> eller tasterne <keycap +>F4</keycap +> og <keycombo +><keycap +>Shift</keycap +> <keycap +>F4</keycap +></keycombo +> for at gøre det. &tdevelop; aktiverer automatisk redigeringsvinduet for kildekodefilen det drejer sig om og placerer markøren på den fejlagtige linje.</para> + +<para +>Hvis du på den anden side hellere ønsker at bygningen skal stoppes så snart en fejl opstår, markeres tilvalget <guilabel +>Afbryd ved første fejl</guilabel +> i dialogen. &tdevelop; kalder du <application +>gmake</application +> uden flaget <computeroutput +>-k</computeroutput +>.</para> +</sect3> + +<sect3 id="gettingstarted-compile-setup-run"> +<title +>Hvordan det kørbare program startes</title> + +<para +>Når bygningen er færdig, kan du enkelt køre programmet indefra &tdevelop;. Brug enten <menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Kør program</guimenuitem +></menuchoice +>, genvejstasten <keycombo +><keycap +>Shift</keycap +> <keycap +>F9</keycap +></keycombo +> eller knappen <guibutton +>Kør program</guibutton +> i &tdevelop;s <guilabel +>byggeværktøjslinje</guilabel +>.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="run-button.png" format="PNG"/> +</imageobject> +<caption +><para +>Kør programmet herfra.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Men hvor er det kørbare program som skal køres? Hvordan får man &tdevelop; til at tilføje flag til kaldet? Eller hvordan kan man få programmet til at køres i en egen terminal for at teste interaktiv opførsel i terminalen?</para> + +<para +>Alt det kan løses ved at indstille nogle projektorienterede køretilvalg i &tdevelop;. Vælg <menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Projektindstillinger</guimenuitem +></menuchoice +> og derefter ikonen <guiicon +>Køreindstillinger</guiicon +> i ikonlinjen til venstre i dialogvinduet. Dialogsiden <guilabel +>Køreindstillinger</guilabel +> vises til højre.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-project-run.png" format="PNG"/> +</imageobject> +<caption +><para +>Definér hvor og hvordan programmet skal køres.</para +></caption> +</mediaobject> +</screenshot> + +<para +>Der er en hel del som kan indstilles i denne dialog. Der er egentlig fire grupper af indstillingstilvalg.</para> + +<itemizedlist> +<listitem> +<formalpara> +<title +>Katalog</title> +<para +>Fortæller &tdevelop; hvad det skal forudsætte at det kørbare program kaldes. Der er tre muligheder at vælge blandt.</para> +</formalpara> + +<para +>Bemærk dok at kun rodmapper defineres her. &tdevelop; leder oftest efter det kørbare program i en undermappe som angives i følgende gruppe af indstillinger.</para> + +<itemizedlist> +<listitem> +<para +>Kør fra mappen hvor det kørbare program senest blev bygget. Dette er standardværdien. Du kan beholde dette indtil videre.</para> +</listitem> + +<listitem> +<para +>Kør fra byggemappen ifølge <link linkend="gettingstarted-compile-setup-build" +>byggeindstilling</link +> som for øjeblikket er valgt. Katalognavnet indstilles på dialogsiden <link linkend="gettingstarted-compile-setup-config-general" +>Generelt</link +>.</para> + +<para +>Dette er rodmappen hvor &tdevelop; skal finde det kørbare program. Den ændres automatisk ifølge det valg du gjorde i menuen <menuchoice +><guimenu +>Projekt</guimenu +> <guisubmenu +>Byggeindstillinger</guisubmenu +></menuchoice +>. Prøv det.</para> + +<para +>Foruden altid at køre det senest byggede kørbare program ifølge indstillingen ovenfor, lader det dig skifte program at køre ved helt enkelt at vælge en anden byggeindstilling i menuen <guimenu +>Projekt</guimenu +>.</para> +</listitem> + +<listitem> +<para +>Kør programmet som findes i en fast egen mappe. Igen er det kun rodmappen hvor selve den kørbare fil findes.</para> + +<para +>Brug dette hvis du f.eks. vil køre programmet som virkelig er installeret i stedet for versionen som findes i projektmappen.</para> +</listitem> +</itemizedlist> +</listitem> + +<listitem> +<formalpara> +<title +>Program</title> +<para +>Dette fortæller relativt sted og navn på programmet som virkelig skal kaldes for &tdevelop;. Det er relativt i forhold til rodmappen som defineres i indstillingsgruppen ovenfor. Desuden kan du definere alle argumenter som &tdevelop; skal sende til programmet når det virkelig kaldes.</para> +</formalpara> + +<note> +<para +>Hvis tekstfeltet <guilabel +>Hovedprogram</guilabel +> efterlades tomt, bruges indstillingen af <emphasis +>aktivt mål</emphasis +> i Håndtering af automake. Selvom dette er en ekspertindstilling, er en sædvanlig grund til problemer at dette indtastningsfelt er efterladt tomt. Kontrollér indstillingen hvis &tdevelop; ikke synes at kalde det kørbare program du ville.</para> +</note> +</listitem> + +<listitem> +<formalpara> +<title +>Miljøvariabler</title> +<para +>&tdevelop; laver et særligt skalmiljø at køre programmet i. Definér eventuelle ekstra miljøvariabler i denne gruppe af indstillinger.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Diverse</title> +<para +>Yderligere to afkrydsningsfelter findes længst nede på denne dialogside.</para> +</formalpara> + +<itemizedlist> +<listitem> +<para +><guilabel +>Kompilér automatisk inden kørsel</guilabel +> er oftest praktisk. &tdevelop; kontrollerer om projektet er ændret og udfører nødvendige konfigurerings- og byggeskridt for dig så snart du giver kommandoen at køre programmet.</para> + +<para +>Afmarkér det hvis du vil køre en programversion tidligere end den seneste ændring.</para> +</listitem> + +<listitem> +<para +><guilabel +>Start i ekstern terminal</guilabel +> er interessant hvis du vil prøve ind- og uddatasopførsel for programmer uden grafisk grænseflade i et terminalprogram. Dette er ikke markeret som standard, så &tdevelop; starter programmet i et eget vindue uden ind- og uddatamulighed via en terminal.</para> +</listitem> +</itemizedlist> +</listitem> +</itemizedlist> +</sect3> +</sect2 +> +</sect1> + +<sect1 id="gettingstarted-extend"> +<title +>Hvordan et projekt kan udvides: Håndtering af automake</title> + +<para +>(endnu ikke skrevet ...)</para> + +<sect2 id="gettingstarted-extend-automake"> +<title +>Et hurtigt kig på maskineriet i automake</title> + +<para +>(endnu ikke skrevet ...)</para> +</sect2 +> + +<sect2 id="gettingstarted-extend-pics"> +<title +>Hvordan man placerer ikoner i en separat mappe</title> + +<para +>(endnu ikke skrevet ...)</para> +</sect2 +> + +<sect2 id="gettingstarted-extend-class"> +<title +>Hvordan man tilføjer nye klasser</title> + +<para +>(endnu ikke skrevet ...)</para> + +<caution +><para +>Vær forsigtig når du vælger filnavne for klasser. Det er ekstremt svært at ændre dem senere.</para +></caution> +</sect2 +> + +<sect2 id="gettingstarted-extend-subproject"> +<title +>Hvad findes i et delprojekt?</title> + +<para +>(endnu ikke skrevet ...)</para> + +<sect3 id="gettingstarted-extend-subproject-active"> +<title +>Koncentrér dig om dit arbejde: Det aktive mål</title> + +<para +>(endnu ikke skrevet ...)</para> +</sect3 +> +</sect2 +> + +<sect2 id="gettingstarted-extend-restructure"> +<title +>Nogle skridt for at omstrukturere et projekt</title> + +<para +>(endnu ikke skrevet ...)</para> +</sect2 +> +</sect1> + + +<sect1 id="gettingstarted-debug"> +<title +>Hvordan man fejlsøger</title> + +<para +>(endnu ikke skrevet ...)</para> +</sect1 +> + + +<sect1 id="gettingstarted-doc"> +<title +>En anmærkning om projektdokumentationen</title> + +<para +>&kde;-projektet bruger <ulink url="http://www.docbook.org/tdg5/en/html/docbook.html" +>docbook</ulink +> til at oprette projektets håndbog (dvs. brugermanualen). Håndbogen er tilgængelig via programmets menulinje ved at vælge <menuchoice +><guimenu +>Hjælp</guimenu +> <guimenuitem +>Håndbog <replaceable +>programnavn</replaceable +></guimenuitem +></menuchoice +> når programmets grafiske grænseflade vises i &kde;. Efter at projektet er bygget, vises håndbogen i &kde;'s Hjælpecenter. Den skal forklare for brugeren hvordan programmet fungerer, hvilke hovedfunktioner der er og hvordan det indstilles. Den skal også forklare avancerede funktioner, hvis sådanne findes. </para> +<para +>Alle &kde;-baserede skabeloner i &tdevelop; har undermappen doc, som indeholder skabelonen <filename +>index.docbook</filename +> i mappen en, for at komme i gang med at skrive brugerhåndbogen. Du redigerer <filename +>index.docbook</filename +> i &tdevelop;, og begynder med at ændre personlig information såsom navn, e-mail, osv. Kig på kommentarerne i filen og forsøg at følge anvisningerne for at påbegynde programdokumentationen. Byg projektet om for at se ændringerne i Hjælpecenteret.</para> +<note +><para +>Du skal installere projektet med <menuchoice +><guimenu +>Byg</guimenu +> <guimenuitem +>Installér</guimenuitem +></menuchoice +> eller <guimenuitem +>Installér (som systemadministrator)</guimenuitem +> i &tdevelop; for at kunne se håndbogen i hjælpecenteret.</para +></note> +<para +>Du finder mere information om syntaksen for docbook på <ulink url="http://l10n.kde.org/docs/markup/index.html" +>&kde;'s hjemmeside for dokumentation</ulink +>.</para> +</sect1> + +<sect1 id="gettingstarted-keys"> +<title +>Sidst men ikke mindst, genvejstaster</title> + +<para +>(endnu ikke skrevet ...)</para> +</sect1> + +<sect1 id="gettingstarted-whereto"> +<title +>Hvordan går man videre</title> + +<para +>(endnu ikke skrevet ...)</para> + +<sect2 id="gettingstarted-whereto-faq"> +<title +>Problemer som man ofte støder på</title> + +<simplelist> +<member +>Kapitlet I korthed</member> +<member +>Sider med ofte stillede spørgsmål</member> +<member +>Forum</member> +<member +>E-mail-lister</member> +</simplelist> +</sect2> + +<sect2 id="gettingstarted-whereto-projects"> +<title +>Arbejd med projekter</title> + +<para +>(endnu ikke skrevet ...)</para> + +<sect3 id="gettingstarted-whereto-projects-open"> +<title +>Brug eksisterende &tdevelop;-projekter</title> + +<para +>(endnu ikke skrevet ...)</para> +</sect3> + +<sect3 id="gettingstarted-whereto-projects-import"> +<title +>Importér eksterne projekter</title> + +<para +>(endnu ikke skrevet ...)</para> +</sect3> +</sect2> +</sect1> + +</chapter> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/index.cache.bz2 b/tde-i18n-da/docs/tdevelop/tdevelop/index.cache.bz2 Binary files differnew file mode 100644 index 00000000000..ba10c2f1c6e --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/index.cache.bz2 diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/index.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/index.docbook new file mode 100644 index 00000000000..a7409f89a25 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/index.docbook @@ -0,0 +1,680 @@ +<?xml version="1.0" ?> +<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [ +<!-- <!ENTITY tdevelop "<application +>KDevelop</application +>" +> --> + <!ENTITY tdevelop "KDevelop"> + <!ENTITY kdevrelease "3.3.91"> + + <!-- abbreviations used in the body text --> + <!ENTITY apache "<application +>Apache</application +>"> + <!ENTITY API "<acronym +>API</acronym +>"> + <!ENTITY appwizard "Application Wizard"> + <!ENTITY autoconf "<command +>autoconf</command +>"> + <!ENTITY automake "<command +>automake</command +>"> + <!ENTITY automanag "Automake Manager"> + <!ENTITY ctags "<command +>ctags</command +>"> + <!ENTITY CVS "<application +>CVS</application +>"> + <!ENTITY cvs "CVS"> + <!ENTITY doxygen "<application +>Doxygen</application +>"> + <!ENTITY doxywizard "<application +>doxywizard</application +>"> + <!ENTITY egrep "<command +>egrep</command +>"> + <!ENTITY grep "<command +>grep</command +>"> + <!ENTITY HTML "<acronym +>HTML</acronym +>"> + <!ENTITY IDE "<acronym +>IDE</acronym +>"> + <!ENTITY libtool "<command +>libtool</command +>"> + <!ENTITY nfwizard "New File Wizard"> + <!ENTITY python "<application +>Python</application +>"> + <!ENTITY perl "<application +>Perl</application +>"> + <!ENTITY php "<application +>PHP</application +>"> + <!ENTITY promanag "Project Manager"> + <!ENTITY qte "<application +>Qt/embedded</application +>"> + <!ENTITY ssh "<application +>ssh</application +>"> + + <!-- chapters in separate docbook files --> + <!ENTITY survey-manual SYSTEM "survey-manual.docbook"> + <!ENTITY getting-started SYSTEM "getting-started.docbook"> + <!ENTITY tdevelop-survey SYSTEM "tdevelop-survey.docbook"> + <!ENTITY setup SYSTEM "setup.docbook"> + <!ENTITY applicationwizard SYSTEM "applicationwizard.docbook"> + <!ENTITY editing SYSTEM "editing.docbook"> + <!ENTITY file-browsers SYSTEM "file-browsers.docbook"> + <!ENTITY class-browsers SYSTEM "class-browsers.docbook"> + <!ENTITY documentation SYSTEM "documentation.docbook"> + <!ENTITY project-management SYSTEM "project-management.docbook"> + <!ENTITY adv-build-management SYSTEM "adv-build-management.docbook"> + <!ENTITY debugger SYSTEM "debugger.docbook"> + <!ENTITY cvs-chapter SYSTEM "cvs.docbook"> + <!ENTITY external-progs SYSTEM "external-progs.docbook"> + <!ENTITY scripts SYSTEM "scripts.docbook"> + <!ENTITY credits SYSTEM "credits.docbook"> + <!ENTITY tdevelop-scripting SYSTEM "tdevelop-scripting.docbook"> + + <!-- appendices in separate docbook files --> + <!ENTITY tdevelop-install SYSTEM "tdevelop-install.docbook"> + <!ENTITY nutshell SYSTEM "nutshell.docbook"> + <!ENTITY unixdev SYSTEM "unixdev.docbook"> + <!ENTITY app-menu SYSTEM "app-menu.docbook"> + <!ENTITY app-shortcuts SYSTEM "app-shortcuts.docbook"> + <!ENTITY app-files SYSTEM "app-files.docbook"> + <!ENTITY plugin-tools SYSTEM "plugin-tools.docbook"> + <!ENTITY app-uimodes-examples SYSTEM "app-uimodes-examples.docbook"> + <!ENTITY commands SYSTEM "commands.docbook"> + <!ENTITY app-misc-info SYSTEM "app-misc-info.docbook"> + <!ENTITY app-changelog SYSTEM "app-changelog.docbook"> + <!ENTITY app-bibliography SYSTEM "app-bibliography.docbook"> + + <!-- book related entities --> + <!ENTITY kappname "&tdevelop;"> + <!ENTITY % addindex "INCLUDE"> + <!ENTITY % Danish "INCLUDE" +> <!-- change language only here --> +]> + +<!-- +NOTE: +Entries which require special treatment are marked with comments starting with '###'. They should be visited on a regular basis. +--> + +<book lang="&language;"> + +<bookinfo> + <title +>&tdevelop;'s brugermanual </title> + + <date +>2006-06-19</date> + <releaseinfo +>&kdevrelease;</releaseinfo> + + <authorgroup> + <author +><firstname +>Bernd</firstname +> <surname +>Gehrmann</surname +> <affiliation +> <address +><email +>[email protected]</email +></address> + </affiliation> + </author> + + <author +><firstname +>Caleb</firstname +> <surname +>Tennis</surname +> <affiliation +> <address +><email +>[email protected]</email +></address> + </affiliation> + </author> + + <author +><firstname +>Bernd</firstname +> <surname +>Pol</surname +> <affiliation +> <address +><email +>[email protected]</email +></address> + </affiliation> + </author> + + <author +><firstname +>Volker</firstname +> <surname +>Paul</surname +> <affiliation +> <address +><email +>[email protected]</email +></address> + </affiliation> + </author> + </authorgroup> + + <copyright> + <year +>2002</year> + <holder +>Bernd Gehrmann</holder> + </copyright> + <copyright> + <year +>2002</year> + <holder +>Caleb Tennis</holder> + </copyright> + <copyright> + <year +>2004</year> + <holder +>Bernd Pol</holder> + </copyright> + <copyright> + <year +>2005</year> + <holder +>Volker Paul</holder> + </copyright> + + &erik.kjaer.pedersen.role; + + <legalnotice +>&FDLNotice;</legalnotice> + + <abstract> + <para +>&tdevelop; er et integreret udviklingsmiljø til brug for mange forskellige programmeringsopgaver.</para> + </abstract> + + <keywordset> + <keyword +>KDE</keyword> + <keyword +>KDevelop</keyword> + <keyword +>IDE</keyword> + <keyword +>udvikling</keyword> + <keyword +>programmering</keyword> + </keywordset> + +</bookinfo> + +<!-- ====================================================================== --> + +&survey-manual; +&getting-started; <!-- "Getting Started" --> +&tdevelop-survey; <!-- "Overview of &tdevelop; Features" --> +&setup; <!-- "Configuring &tdevelop;" --> +&applicationwizard; <!-- "Getting Started — the &appwizard;" --> +&editing; +&file-browsers; +&class-browsers; +&documentation; +&project-management; +&adv-build-management; +&debugger; +&cvs-chapter; +<!--&tdevelop-scripting;--> <!-- "Scripting &tdevelop;" --> +&credits; + +<!-- ====================================================================== --> +<!-- External Appendices --> + +&tdevelop-install; <!-- "Installing &tdevelop;" --> +&nutshell; +&unixdev; <!-- "Development on &UNIX;" --> +<!-- +&app-menu; +&app-shortcuts; +--> +&app-files; +&plugin-tools; +&app-uimodes-examples; +&commands; +&app-misc-info; +&app-changelog; + +<!-- ====================================================================== --> +<!-- ### Questionable, probably not IDE-specific enough. Check later again. +<chapter id="python"> +<title +>Python</title> + +<para +>... +</para> + +</chapter +> --> <!-- python --> + +<!-- ====================================================================== --> +<!-- ### Questionable, probably not IDE-specific enough. Check later again. +<chapter id="php"> +<title +>PHP</title> + +<para +>... +</para> +</chapter +> --> <!-- php --> + +<!-- ====================================================================== --> + +<!-- Note (bp, 2003-09-04): <bibliography +> should remain the last appendix --> +<!-- section because of a (meinproc???) bug which sends the Next selection --> +<!-- in circles back to it. --> +<!-- (LWatts: 2005-04-30) This is probably due to a missing id= somewhere, --> +<!-- so I've added a couple in hopes it goes away. --> + +<appendix id="app-bibliography"> +<title +>Bibliografi</title> + +<para +>(... endnu ikke skrevet ...)</para> + +<bibliography id="bibliography"> + +<biblioentry> +<title +><ulink url="info://make/Top" +>GNU Make-manual</ulink +></title> +<authorgroup> +<author +><firstname +>Richard M.</firstname +><surname +>Stallman</surname +></author> +<author +><firstname +>Roland</firstname +><surname +>McGrath</surname +></author> +</authorgroup> +</biblioentry> + +<biblioentry> +<title +><ulink url="info://automake/Top" +>GNU Automake</ulink +></title> +<authorgroup> +<author +><firstname +>David</firstname +><surname +>MacKenzie</surname +></author> +<author +><firstname +>Tom</firstname +><surname +>Tromey</surname +></author> +</authorgroup> +</biblioentry> + +<biblioentry> +<title +><ulink url="info://autoconf/Top" +>GNU Autoconf</ulink +></title> +<authorgroup> +<author +><firstname +>David</firstname +><surname +>MacKenzie</surname +></author> +<author +><firstname +>Ben</firstname +><surname +>Elliston</surname +></author> +</authorgroup> +</biblioentry> + +<biblioentry> +<title +><ulink url="info://gcc/Top" +>Brug af GNU's kompiler-samling</ulink +></title> +<author +><firstname +>Richard M.</firstname +><surname +>Stallman</surname +></author> +</biblioentry> + +<biblioentry> +<title +><ulink url="info://libtool/Top" +>GNU Libtool</ulink +></title> +<authorgroup> +<author +><firstname +>Gordon</firstname +><surname +>Matzigkeit</surname +></author> +<author +><firstname +>Alexandre</firstname +><surname +>Oliva</surname +></author> +<author +><firstname +>Thomas</firstname +><surname +>Tanner</surname +></author> +<author +><firstname +>Gary V.</firstname +><surname +>Vaughan</surname +></author> +</authorgroup> +</biblioentry> + +<biblioentry> +<title +>GNU Autoconf, Automake, og Libtool</title> +<edition +>1st edition</edition> +<pubdate +>October 2000</pubdate> +<authorgroup> +<author +><firstname +>Gary V.</firstname +><surname +>Vaughan</surname +></author> +<author +><firstname +>Ben</firstname +><surname +>Elliston</surname +></author> +<author +><firstname +>Tom</firstname +><surname +>Tromey</surname +></author> +<author +><firstname +>Ian Lance</firstname +><surname +>Taylor</surname +></author> +</authorgroup> +<publisher +><publishername +>New Riders Publishing</publishername +></publisher> +<isbn +>ISBN 1578701902</isbn> +</biblioentry> + + +<biblioentry> +<title +>Avanceret programmering i &UNIX;-miljø</title> +<edition +>1st edition</edition> +<pubdate +>June 1992</pubdate> +<author +><firstname +>W. Richard</firstname +><surname +>Stevens</surname +></author> +<publisher +><publishername +>Addison-Wesley Pub Co</publishername +></publisher> +<isbn +>ISBN 0201563177</isbn> +</biblioentry> + +<biblioentry> +<title +>Thinking in C++, Volume 1: Introduction to Standard C++</title> +<edition +>2nd Edition</edition> +<pubdate +>April 15, 2000</pubdate> +<author +><firstname +>Bruce</firstname +><surname +>Eckel</surname +></author> +<publisher +><publishername +>Prentice Hall</publishername +></publisher> +<isbn +>ISBN 0139798099</isbn> +</biblioentry> + +<biblioentry> +<title +>Åben kilde udvikling med CVS</title> +<edition +>2nd Edition</edition> +<pubdate +>October 12, 2001</pubdate> +<authorgroup> +<author +><firstname +>Karl</firstname +><surname +>Fogel</surname +></author> +<author +><firstname +>Moshe</firstname +><surname +>Bar</surname +></author> +</authorgroup> +<publisher +><publishername +>The Coriolis Group</publishername +></publisher> +<isbn +>ISBN 158880173X</isbn> +</biblioentry> + +<biblioentry> +<title +>Programmering i PHP</title> +<edition +>1st edition</edition> +<pubdate +>March 2002</pubdate> +<authorgroup> +<author +><firstname +>Rasmus</firstname +><surname +>Lerdorf</surname +></author> +<author +><firstname +>Kevin</firstname +><surname +>Tatroe</surname +></author> +</authorgroup> +<publisher +><publishername +>O'Reilly & Associates</publishername +></publisher> +<isbn +>ISBN 1565926102</isbn> +</biblioentry> + +<biblioentry> +<title +>Programmering i Python</title> +<edition +>2nd Edition</edition> +<pubdate +>March 2001</pubdate> +<author +><firstname +>Mark</firstname +><surname +>Lutz</surname +></author> +<publisher +><publishername +>O'Reilly & Associates</publishername +></publisher> +<isbn +>ISBN 0596000855</isbn> +</biblioentry> + +<biblioentry> +<title +>Gui Programmering med Python : Ved brug af Qt værktøjssamlingen</title> +<edition +>Bk&Cd-r edition</edition> +<pubdate +>January 2002</pubdate> +<author +><firstname +>Boudewijn</firstname +><surname +>Rempt</surname +></author> +<publisher +><publishername +>Opendocs Llc</publishername +></publisher> +<isbn +>ISBN 0970033044</isbn> +</biblioentry> + +<biblioentry> +<title +>Programmering i Perl</title> +<subtitle +>Kamelbogen</subtitle> +<edition +>3rd Edition</edition> +<pubdate +>July 2000</pubdate> +<authorgroup> +<author +><firstname +>Larry</firstname +><surname +>Wall</surname +></author> +<author +><firstname +>Tom</firstname +><surname +>Christiansen</surname +></author> +<author +><firstname +>Jon</firstname +><surname +>Orwant</surname +></author> +</authorgroup> +<publisher +><publishername +>O'Reilly & Associates</publishername +></publisher> +<isbn +>ISBN 0596000278</isbn> +</biblioentry> + +<biblioentry> +<title +>At lære Perl</title> +<subtitle +>Lama-bogen</subtitle> +<edition +>3rd Edition</edition> +<pubdate +>July 15, 2001</pubdate> +<authorgroup> +<author +><firstname +>Randal L.</firstname +><surname +>Schwartz</surname +></author> +<author +><firstname +>Tom</firstname +><surname +>Phoenix</surname +></author> +</authorgroup> +<publisher +><publishername +>O'Reilly & Associates</publishername +></publisher> +<isbn +>ISBN 0596001320</isbn> +</biblioentry> + +</bibliography> +<!-- --> + +</appendix +> <!-- app-bibliography --> + +<!-- ====================================================================== --> + +&documentation.index; + +</book> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/nutshell.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/nutshell.docbook new file mode 100644 index 00000000000..87283856406 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/nutshell.docbook @@ -0,0 +1,376 @@ +<appendix id="nutshell"> +<title +>I korthed — Vink og trick</title> + +<!-- Traditionally, most of this stuff will have been put into a FAQ section. It is more useful, however, to put it at the very start of a manual, as this is the place the (inexperienced) user first looks for. + +I disagree. What is useful for a quick start, should go in "Getting started". +Troubleshooting hints go in the appendix or a FAQ. Volker Paul. + +This chapter is meant to provide short hints and tips together with (mandatory) navigation links. +There should be an additional FAQ section near the end nevertheless which contains more general stuff not directly related to navigating the manual. --> + +<para +>Informationen i dette kapitel er beregnet som en hurtigreference for at komme hurtigt i gang hvis du (tilfældigt) glemte nogen grundlæggende begreber. Der er også en kort guide til at løse almindelige problemer når der arbejdes med &tdevelop;. </para> +<para +>Hvis du ønsker at vide mere om et emne, så følg blot linket i titlen der starter et råd. </para> +<para +>Information tilgængelig om disse emner: </para> +<simplelist> + <member +><link linkend="nutshellitem-look-and-feel" +>Udseende og fornemmelse</link +></member> + <member +><link linkend="nutshellitem-projects" +>Projekter</link +></member> + <member +><link linkend="nutshellitem-compilation" +>Kompilering</link +></member> + <member +><link linkend="nutshellitem-automake" +>&automanag;</link +></member> + <member +><link linkend="nutshellitem-compilemake" +>Problemer med at kompilere og bygge</link +></member> + <member +><link linkend="nutshellitem-others" +>Andre emner</link +></member> +</simplelist> + +<variablelist id="nutshellitem-look-and-feel"> +<title +>Udseende og fornemmelse</title> + +<varlistentry> +<term id="nutshell-ideal-tabs" +><link linkend="setup-ui-toolview" +>Påtving mindre værktøjsvisningfaneblade i IDEA-tilstand</link +></term> +<listitem> +<para +>Som standard starter &tdevelop; med tekstbaserede faneblade til værktøjsvink omkring arbejdsområdet. Du kan ændre dette udseende ⪚ for at spare plads i &tdevelop;'s indstillingsdialog (<menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil KDevelop...</guimenuitem +> <guimenuitem +>Brugergrænseflade</guimenuitem +></menuchoice +>).</para> +<para +>Hvis du bruger en ældre udgave af &tdevelop; 3, er denne indstillingsdialog måske ikke er tilgængelig. For at ændre udseende af værktøjsvisningernes fanebalde manuelt, tilføjes indgangen <computeroutput +>MDIStyle</computeroutput +> under mærket <computeroutput +>[UI]</computeroutput +> i indstillingsfilen <filename +>$KDEHOME/share/config/tdeveloprc</filename +> som følger:</para> + +<simplelist> +<member +><computeroutput +>MDIStyle=0</computeroutput +>: Kun ikoner</member> +<member +><computeroutput +>MDIStyle=1</computeroutput +>: kun tekst (standardværdi)</member> +<!--<member +><computeroutput +>MDIStyle=2</computeroutput +>: icons only on smaller tabs (not very useful)</member +>--> +<member +><computeroutput +>MDIStyle=3</computeroutput +>: ikoner og tekst</member> +</simplelist> +</listitem> +</varlistentry> + +<varlistentry +> <!-- ### remove this entry when the bug is repaired --> +<term id="nutshell-weird-style" +>Underligt farvede tegn og/eller skærmstil</term> +<listitem> +<para +>Hvis du bemærker tilfældigt farvede bogstaver overalt (&ie; på faneblade, på værktøjslinjer, osv.) og &tdevelop;-vinduet tilsyneladende bruger en forkert visningsstil, kan dette måske hjælpe:</para> + +<itemizedlist> +<listitem +><para +>Find linjen <quote +><computeroutput +>Style=Checked</computeroutput +></quote +> i indstillingsfilen <filename +>$KDEHOME/share/config/tdeveloprc</filename +> og fjern den. Genstart derefter &tdevelop;. </para> +</listitem> +</itemizedlist> +<para +>(Denne opførsel opstår sommetider efter du venstreklikkede på en .ui-fil i en af filnavigatørerne og &tdevelop; indlæste <application +>KUIViewer</application +> for at vise den &GUI; som blev lavet ud fra denne fil.)</para> +</listitem> +</varlistentry> + +<varlistentry> +<term id="nutshell-full-screen" +><link linkend="maximize-workspace" +>Fuldskærmstilstand</link +></term> +<listitem> +<para +>Vælg <menuchoice +><guimenu +>Vis</guimenu +> <guimenuitem +>Fuldskærmstilstand</guimenuitem +></menuchoice +> i menulinjen, eller tryk på <keycombo +><keycap +>Ctrl</keycap +> <keycap +>Shift</keycap +> <keycap +>F</keycap +></keycombo +>.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term id="nutshell-hide-menu" +><link linkend="maximize-workspace" +>Vis eller skjul menulinjen</link +></term> +<listitem> +<para +>For at skjule menulinjen, vælges <menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Vis menulinje</guimenuitem +></menuchoice +> i menulinjen, eller tryk på <keycombo +><keycap +>Ctrl</keycap +> <keycap +>M</keycap +></keycombo +>. For at vise menulinjen igen, er kun <keycombo +><keycap +>Ctrl</keycap +> <keycap +>M</keycap +></keycombo +> tilgængelig.</para> +</listitem> +</varlistentry> +</variablelist> + +<variablelist> +<title id="nutshellitem-projects" +>Projekter</title> +<varlistentry> +<term +><link linkend="new-projects" +>Opret nyt projekt</link +></term> +<listitem> +<para +><menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Nyt projekt...</guimenuitem +></menuchoice +> starter <link linkend="applicationwizard" +>programguiden</link +>.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term id="nutshell-new-custom-project" +>Opret et eget projekt</term> +<listitem> +<para +>Der er ingen direkte måde at oprette et tilpasset projekt (&ie; et projekt som bruger sine egne makefiler). Brug <menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Importér eksisterende projekt</guimenuitem +></menuchoice +> i stedet. Husk at sætte den passende <guilabel +>Projekttype</guilabel +>, med påskrift af en yderligere <quote +>(Egne Makefiler)</quote +>, i dialogen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term id="nutshell-project-options" +>Brug projekttilvalg tidligt</term> +<listitem> +<para +>Så snart du har oprettet et nyt projekt, så glem ikke at indstille <menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +> Projektindstillinger...</guimenuitem +></menuchoice +> efter dine behov.</para> +</listitem> +</varlistentry> +</variablelist> + +<variablelist id="nutshellitem-compilation"> +<title +>Kompilering</title> +<varlistentry> +<term id="nutshell-compilemsg-detail" +><link +linkend="setup-main-compile" +>Manglende detalje i kompileringsbeskeder</link +></term> +<listitem> +<para +>Hvis du bemærker at en del værdifuld information mangler i vinduet <guilabel +>Meddelelseuddata</guilabel +> ved kompilering, kan du have valgt et detaljeniveau for meddelelser som er for lavt. Højreklik på vinduet og vælg et andet detaljeniveau i menuen som dukker op. </para> +</listitem> +</varlistentry> +</variablelist> + +<variablelist id="nutshellitem-automake"> +<title +><link linkend="automake-manager" +>&automanag;</link +></title> + +<varlistentry> +<term +>Opret nye filer i et projekt</term> +<listitem> +<para +>Vælg delprojekt i øvre del af Håndtering af automake, og højreklik derefter i den nedre del på gruppeoverskriften hvor du vil tilføje filerne og vælg <guimenuitem +>Opret ny fil..</guimenuitem +>.</para> +</listitem> +</varlistentry> + +<varlistentry id="nutshell-add-project-file"> +<term +>Tilføj eksisterendee filer til et projekt</term> +<listitem> +<para +>Vælg delprojekt i øvre del af Håndtering af automake, og højreklik derefter i den nedre del på gruppeoverskriften hvor du vil tilføje filerne og vælg <guimenuitem +>Tilføj eksisterende filer...</guimenuitem +>.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Fjern en fil fra et projekt</term> +<listitem> +<para +>Vælg delprojekt i øvre del af Håndtering af automake, og højreklik derefter i den nedre del på gruppeoverskriften hvor du vil fjerne filerne og vælg <guimenuitem +>Fjern</guimenuitem +>.</para> +</listitem> +</varlistentry> +</variablelist> + +<variablelist id="nutshellitem-compilemake"> +<title +>Problemer med at kompilere og bygge</title> +<varlistentry> +<term id="nutshell-builddirproblems" +><link +linkend="defaultbuild-warning" +>Projektet bygger ikke igen efter at have skiftet til/fra standardmålet</link +></term> +<listitem> +<para +>Der er et problem med &automake;/&autoconf; maskineriet. Hvis <menuchoice +> <guimenu +>Projekt</guimenu +> <guimenuitem +>Byg Konfiguration</guimenuitem +></menuchoice +> sørger for at vælge fra tre bygge-mapper: <guimenuitem +>standard</guimenuitem +>, <guimenuitem +>optimeret</guimenuitem +>, og <guimenuitem +>fejlret</guimenuitem +>, så brug endelig <emphasis +>enten</emphasis +> standard <emphasis +>eller</emphasis +> fejlret/optimeret mål.</para> +<itemizedlist> +<listitem> +<para +>Så snart du har indstillet dit projekt med standard, bygges det ikke længere med fejlret eller optimeret.</para> +</listitem> +<listitem> +<para +>Så snart du har indstillet dit projekt med fejlret eller optimeret, bygges det ikke længere med standard.</para> +</listitem> +</itemizedlist> +</listitem> +</varlistentry> + +<varlistentry> +<term id="nutshell-autoconf-problem" +><quote +>Forkert<command +> version af </command +>autoconf</quote +>, &etc;.</term> +<listitem> +<para +>Der er flere fejlmeddelelser som drejer sig om gamle versioner af <application +>autoconf</application +>, &etc; som forhindrer at <command +>configure</command +> virker som den skal. Kør <command +>autoreconf</command +> i mappetræet hvor filerne <filename +>configure.in</filename +> det drejer sig om findes. Kommandoen forsøger at opdatere informationen i &GNU; byggesystemfilerne. Se <command +>man autoreconf</command +> for mere information.</para> +</listitem> +</varlistentry> +</variablelist> + +<variablelist id="nutshellitem-others"> +<title +>Andre emner</title> +<varlistentry> +<term id="nutshell-others-files" +><link linkend="app-files" +>Konfigurationsfiler brugt af &tdevelop;</link +></term> +<listitem> +<para +>Normalt kan du være ligeglad, men det er ret nyttigt at vide hvis noget i din opsætning går galt.</para> +</listitem +> +</varlistentry> +</variablelist> + +</appendix +> <!-- nutshell --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/plugin-tools.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/plugin-tools.docbook new file mode 100644 index 00000000000..049214fe893 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/plugin-tools.docbook @@ -0,0 +1,731 @@ +<appendix id="plugin-tools"> +<title +>Pluginværktøjer</title> + +<indexterm zone="plugin-tools"> + <primary +>plugin</primary +></indexterm> + +<para +>&tdevelop; indeholder et stort antal små værktøjer, som hjælper dig med at udføre visse opgaver. De fleste fungerer som plugin. Det betyder at hvis du ikke behøver et plugin kan du helt enkelt deaktivere det.</para> +<para +>Det betyder også at hvis du leder efter funktioner som skal findes, men ikke gør det, så er de måske implementerede i et plugin og dette plugin er deaktiveret. Der er for eksempel en funktion for hurtigåbning i menuen Fil, men kun hvis den er aktiveret i dialogen Projekt - Projektindstillinger. </para> + +<para +>Teknisk er plugin baserede på klassen KDevPlugin definered i lib/interfaces/kdevplugin.h. Det følgende kommer fra en kommentar der.</para> + +<para +>KDevPlugin er basisklassen for alle plugin i KDevelop. Et plugin er en komponent som indlæses i KDevelop-skallen ved start eller efter forespørgsel. Et plugin har en omfattelse som enten kan være: <itemizedlist> +<listitem +><simpara +>Kerne</simpara +></listitem> +<listitem +><simpara +>Global</simpara +></listitem> +<listitem +><simpara +>Projekt</simpara +></listitem> +</itemizedlist> +</para> + +<para +>Kerneplugin er globale plugin som tilbyder nogle vigtige funktioner for "kernen", og derfor ikke kan vælges af brugeren på indstillingssiderne for plugin.</para> + +<para +>Globale plugin er dem som kun kræver at skallen er indlæst og ikke benytter sig af grænsefladen KDevProject og/eller bruger information der berører hele projektet. For eksempel tillader pluginnet grafisk grænsefladetilstand udviklere at vælge hvilke brugergrænseflade de vil bruge. </para> + +<para +>Projektplugin kræver at et projekt er indlæst, og indlæses eller fjernes sammen med projektet. Hvis et plugin benytter sig af projektrelateret information er det et projektplugin. Håndtering af Automake behøver for eksempel kun være aktivt når et projekt baseret på Automake for øjeblikket er indlæst. </para> + +<para +>Som nævnt ovenfor kan kerneplugin ikke deaktiveres. Globale plugin kan aktiveres eller deaktiveres med <menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil KDevelop...</guimenuitem +></menuchoice +> under <guibutton +>plugin</guibutton +>. Projektplugin kan aktiveres eller deaktiveres med <menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Projektindstillinger...</guimenuitem +></menuchoice +> under <guibutton +>plugin</guibutton +>. Aktive plugin kan give mange effekter i KDevelop. Afhængig af deres funktion kan de tilføje ekstra menuer, ekstra menupunkter, ekstra knapper i værktøjslinjen, osv. </para> + +<para +>Plugin som er deaktiverede roder ikke menuerne til og indlæses ikke i hukommelsen. </para> + + +<para +>Følgende liste over plugin genereres af et lille script (listplugins.sh) skrevet af Volker Paul. Alle plugin har en .desktop-fil hvor information såsom navn og kommentarer skrives. Hvis kommentarerne i det følgende ikke er særligt nyttige, skyldes det på at pluginnets forfattere lavede dem på den måde.</para> +<para +>Pluginnerne er grupperede efter omfattelse (Kerne, Global, Projekt).</para> + +<para +>Omfattelse: Kerne</para> +<itemizedlist> +<listitem +><formalpara id="KDevAppWizard"> +<title +>Programguide</title> +<para +>Programguide</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevDiff"> +<title +>Visning af forskelle</title> +<para +>Visning af forskelle</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevFileCreate"> +<title +>Opret filer</title> +<para +>Opret filer</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevFullScreen"> +<title +>Fuldskærm</title> +<para +>Fuldskærm</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevTipOfDay"> +<title +>Dagens vink</title> +<para +>Dagens vink</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevUIChooser"> +<title +>Valg af brugergrænseflade</title> +<para +>Sørger for en dialog til valg af brugergrænsefladetilstand.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevVCSManager"> +<title +>Håndtering af versionskontrolsystem</title> +<para +>Håndtering af versionskontrolsystem </para +></formalpara +></listitem> +</itemizedlist> + +<para +>Omfattelse: Global</para> +<itemizedlist> +<listitem +><formalpara id="KDevAbbrev"> +<title +>Ekspansion af forkortelser</title> +<para +>Giver understøttelse for indstillelige forkortelser: korte ord som ekspanderes til almindeligt brugte kodestrukturer.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevDocumentation"> +<title +>Dokumentation</title> +<para +>Dokumentationspluginnet tilbyder at browse og søge i lokal dokumentation og dokumentation på nettet, med understøttelse for flere dokumentationssystemer.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevfilelist"> +<title +>Filliste</title> +<para +>Sørger for en liste af alle for øjeblikket åbne filer. (Praktisk når fanebladslinjen ikke er rigtig bred nok.)</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevFileSelector"> +<title +>Filvælger</title> +<para +>Kraftfuldt netværkstransparent filbrowserværktøj.</para +></formalpara +></listitem> +<listitem +><formalpara> +<title +>Skalfiltrering og indsætning</title> +<para +>Tilbyder en måde at behandle editortekst med kommandolinjeværktøj. Findes i værktøjsmenuen.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevGrepView"> +<title +>Grænseflade for grep</title> +<para +>Integrerer "find | grep" med KDevelop - tillader hurtig søgning i flere filer med mønster eller regulære udtryk.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevKonsoleView"> +<title +>Indlejret terminal</title> +<para +>Pluginnet giver KDevelop en indbygget terminal for hurtig og enkel adgang til kommandolinjen.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevOpenWith"> +<title +>Menutilføj "Åbn med"</title> +<para +>Pluginnet sørger for yderligere "åbn" alternativer i diverse sammenhængsafhængige menuer i KDevelop.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevPartExplorer"> +<title +>Part-udforskerværktøj</title> +<para +>Et grafisk værktøj til at udføre KTrader-lignende forespørgsler om registrerede tjenester.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevRegexpTest"> +<title +>Test af regulære udtryk</title> +<para +>Værktøj til at oprette og teste regulære udtryk mod almindelig syntaks for regulære udtryk.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevReplace"> +<title +>Erstatningspart</title> +<para +>Pluginnet er et interaktivt værktøj til at "søge og erstatte" i hele projektet. Søg med en streng eller et regulært udtryk, og vælg erstatningen som skal gøres ud fra en forhåndsvisning inden handlingen udføres. Når det er indlæst vises det i redigeringsmenuen.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevscripting"> +<title +>Scripter</title> +<para +>Skriptpluginnet tilbyder KScript-baseret styring af programmet KDevelop.</para +></formalpara +></listitem> +<listitem +><formalpara id="Code_Snippets"> +<title +>Kodestumper</title> +<para +>Dette plugin gør det muligt at opbevare kodestumper og tilføje dem til din kode</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevTextTools"> +<title +>Tekststruktur</title> +<para +>Sørger for en strukturoversigt og navigering for HTML- og TeX-filer</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevTools"> +<title +>Tilføjelse i værktøjsmenuen</title> +<para +>Pluginnet sørger for en nem måde at tilføje eksterne programmer i værktøjsmenuen og værktøjslinjen.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevvalgrind"> +<title +>Valgrind-grænseflade</title> +<para +>Valgrind er et værktøj som hjælper dig med at finde hukommelseshåndteringsproblemer i programmer. http://developer.kde.org/~sewardj/</para +></formalpara +></listitem> +</itemizedlist> + +<para +>Omfattelse: Projekt</para> +<itemizedlist> +<listitem +><formalpara id="KDevannotation"> +<title +>noteringsplugin</title> +<para +>Noteringsbeskrivelse</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevAStyle"> +<title +>Kildekodeformatering</title> +<para +>Et plugin til at formatere kildekode ifølge et givet sæt regler. Når det er indlæst findes det i værktøjsmenuen.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevBookmarks"> +<title +>Bogmærker</title> +<para +>Plugin som sørger for navigering og oversigt over aktive kildekodebogmærker og gør dem vedvarende mellem sessioner.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevClassView"> +<title +>Klassevisning</title> +<para +>Pluginnet viser et grafisk billede af alle klasser i et projekt, sammen med metoder og egenskaber, og giver mulighed for direkte navigering i kildekoden.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevcopyto"> +<title +>Kopiér til</title> +<para +>Enkelt plugin til overførsel af filer. Det udfører en filkopiering med alle protokoller som understøttes af KIO.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevCTags2"> +<title +>Ctags-grænseflade</title> +<para +>Ctags er et værktøj for kildekodenavigering med understøttelse for mange sprog. Når det er indlæst sørger det for en sammenhængsafhængig menu til at finde typedeklarationer eller definitioner, og desuden en spørgsmålsdialog. http://ctags.sourceforge.net/</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevdistpart"> +<title +>Støtte for endelig pakning</title> +<para +>Hjælper til med at bygge og publicere det færdige projekt. Kun RPM-pakkeformatet understøttes for øjeblikket.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevDoxygen"> +<title +>Doxygen-understøttelse</title> +<para +>Doxygen-pluginnet sørger for en måde at angive og styre hvordan dokumenter skabes for et projekt, baseret på kildekodens indhold. Du skal have installeret Doxygen for at kunne bruge det. For mere information besøg http://www.doxygen.org.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevQuickOpen"> +<title +>Hurtigåbn</title> +<para +>Tilbyder en effektiv måde at finde og åbne filer, klasser og metoder i et stort projekt. Findes i menuen Fil og Værktøjer når det er indlæst.</para +></formalpara +></listitem> +<listitem +><formalpara id="KDevSecurity"> +<title +>Sikkerhedskontrol</title> +<para +>Kodesikkerhedskontrol</para +></formalpara +></listitem> +</itemizedlist> +<para +>Indtil videre den genererede liste over plugin.</para> + + +<table id="table-project-parts"> +<title +>Plugin for projekthåndtering i &tdevelop;</title> +<tgroup cols="2" +><tbody> +<row> + <entry +>antproject</entry> + <entry +>ANT-projekthåndtering (&Java;-programmer)</entry> +</row> +<row> + <entry +>autoprojekt</entry> + <entry +>Automake projekthåndtering</entry> +</row> +<row> + <entry +>customproject</entry> + <entry +>Egen projekthåndtering</entry> +</row> +<row> + <entry +>trollproject</entry> + <entry +>Qmake-baseret projekthåndtering</entry> +</row> +</tbody +></tgroup> +</table> +<para +>Ovenstående plugin er for øjeblikket (maj 2005) tomme. Måske vil projekthåndteringsunderstøttelse blive implementeret som plugin i fremtiden.</para> + + +<table> +<title +>Plugin for sprogunderstøttelse i &tdevelop;</title> +<tgroup cols="2"> +<tbody> +<row +><entry +>cppsupport</entry +><entry +>Støtte for C/C++</entry +></row> +<row +><entry +>fortransupport</entry +><entry +>Støtte for Fortran</entry +></row> +<row +><entry +>javasupport</entry +><entry +>Støtte for &Java;</entry +></row> +<row +><entry +>perlsupport</entry +><entry +>Støtte for Perl</entry +></row> +<row +><entry +>phpsupport</entry +><entry +>Støtte for PHP</entry +></row> +<row +><entry +>pythonsupport</entry +><entry +>Støtte for Python</entry +></row> +</tbody +></tgroup> +</table> + + +<para +>Visse plugin beskrives i detalje i det følgende.</para> + +<itemizedlist> +<listitem> +<formalpara> +<title +>Pluginprogrammet <command +>abbrev</command +></title> +<indexterm zone="plugin-tools" +><primary +><command +>Forkortelser</command +></primary +></indexterm> + +<para +>Dette pluginprogram udfylder forkortelser af ofte brugte kodefragmenter. Det aktiveres ved at trykke på <keycombo +><keycap +>Ctrl</keycap +><keycap +>Mellemrum</keycap +></keycombo +>. Hvis du for eksempel skriver <literal +>"ife"</literal +> i C++ editoren, og trykker på <keycombo +><keycap +>Ctrl</keycap +><keycap +>Mellemrum</keycap +></keycombo +>, får du en <literal +>if-else</literal +> kodeskabelon og sparer nogle tastetryk. Opsætningen med forkortelser som understøttes afhænger af den redigerede fils programmeringssprog. For eksempel til PHP er du naturligvis interesseret i andre kodeskabeloner end for &Java;. </para> +</formalpara> + +<para +>Sættet af kodeskabeloner kan indstilles. Hvis pluginnet er aktiveret, kan du se hvilke der er tilgængelige med dialogen <menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil KDevelop...</guimenuitem +></menuchoice +> under <guibutton +>Forkortelseer</guibutton +>. </para> +</listitem> + +<listitem> +<formalpara id="KDevFilter"> +<title +>Pluginprogrammet <command +>filter</command +></title> +<indexterm zone="plugin-tools" +><primary +><command +>filter</command +></primary +></indexterm> + +<para +>Dette tilbyder to funktioner. Hvis du vælger <menuchoice +><guimenu +>Værktøjer</guimenu +><guimenuitem +>Kør kommando</guimenuitem +></menuchoice +> kan du indtaste en skalkommando. Udskriften fra kommandoen indsættes i editorens buffer når du trykker på knappen <guibutton +>Start</guibutton +>. </para> +</formalpara> + +<para +>En lignende funktion er tilgængelig med <menuchoice +><guimenu +>Værktøjer</guimenu +> <guimenuitem +>Filtrér markering ved kommando...</guimenuitem +></menuchoice +>. For at bruge den skal du markere et tekstområde i editoren. Hvis du nu skriver en skalkommando og klikker på knappen <guibutton +>Start</guibutton +>, startes kommandoen og markeringen bruges som standardindtastning til det. Standarduddata fra kommandoen indsættes derefter i editoren, og erstatter markeringen. </para> + +<para +>Hvis du for eksempel skriver dokumentation, behøver du ofte at henvise til menupunkter. For at gøre dette på den rette måde for f.eks. kopieringskommandoen i menuen Redigér, skal du skrive <programlisting +><menuchoice><guimenu>Redigér</guimenu><guimenuitem>Kopiér</guimenuitem></menuchoice></programlisting +> Det er omstændeligt, altså skriver du hellere kun "Redigér" - "Kopiér" og lader maskinen udføre mærkningen. Du kan gøre dette sådan her: Du skriver et lille skalscript som hedder mef, som du for eksempel placerer i undermappen bin i din hjemmemappe: <programlisting +>sed s/"^\(.*\) - \(.*\)\$"/"<menuchoice><guimenu>\1<\/guimenu><guimenuitem>\2<\/guimenuitem><\/menuchoice>"/</programlisting +> Glem ikke at gøre det kørbart. Det er alt. Nu skriver du "Redigér" - "Kopiér" i dokumentationens .dokbook-kildekode. Du markerer teksten du netop har indskrevet, vælger <menuchoice +><guimenu +>Værktøjer</guimenu +><guimenuitem +>Filtrér markering ved kommando...</guimenuitem +></menuchoice +> og kalder ~/bin/mef. Så erstattes med det samme "Redigér" - "Kopiér" med <programlisting +><menuchoice><guimenu>Redigér</guimenu><guimenuitem>Kopiér</guimenuitem></menuchoice></programlisting> +</para> + + +</listitem> + +<listitem> +<formalpara> +<title +>Pluginprogrammet &doxygen;</title> +<indexterm zone="plugin-tools" +><primary +>&doxygen;</primary +></indexterm> +<indexterm zone="plugin-tools" +><primary +>dokumentationsværktøj</primary +></indexterm> +<indexterm zone="plugin-tools" +><primary +>API-dokumentation</primary +></indexterm> + +<para +>Dette hjælper dig med at bruge API-dokumentationsværktøjet &doxygen; (<ulink url="http://www.doxygen.org" +></ulink +>). Du kan vælge <menuchoice +><guimenu +>Projekt</guimenu +><guimenuitem +>Kør Doxygen</guimenuitem +></menuchoice +> for at oprette API-dokumentation for det nuværende projekt baseret på konfigurationen som angives af filen <filename +>Doxyfile</filename +> i projektmappen. </para> +</formalpara> + +<para +>Desuden kan du indstille &doxygen; med dialogen <menuchoice +><guimenu +>Projekt</guimenu +><guimenuitem +>Projektindstillinger...</guimenuitem +></menuchoice +>. Dialogen er meget lig værktøjet &doxywizard;. </para> +</listitem> + +<listitem> +<formalpara> +<title +>Pluginprogrammet &ctags;</title> +<indexterm zone="plugin-tools" +><primary +>&ctags;</primary +></indexterm> + +<para +>Selv om klassesøgeren giver dig et udførligt overblik over symboler og klasser i projektet, kan du også ville bruge ctags-værktøjet. Det understøtter i særdelshed mange flere sprog end klassesøgeren. </para> +</formalpara> + +<para +>Du aktiverer pluginprogrammet under <menuchoice +><guimenu +>Værktøj</guimenu +><guimenuitem +>CTags...</guimenuitem +></menuchoice +>. Når du starter det for første gang, bliver du bedt om først at oprette en søgedatabase. Når du accepterer dette, startes &ctags;-programmet og laver en fil som hedder <filename +>tags</filename +> i projektmappen. Dette er en tekstfil som indeholder alle symboler i kildekodefilerne. </para> + +<para +>Du kan søge på to måder i symboldatabasen: når feltet <guilabel +>Matchning med regulært udtryk</guilabel +> er markeret, tolkes teksten som du skriver som et regulært udtryk (POSIX-varianten) og matches med eksisterende symboler. Teksten <literal +>.*Widget</literal +> søger for eksempel efter alle symboler som slutter med <literal +>Widget</literal +>. Hvis feltet ikke er markeret, er søgningen verbatim. </para> + +<para +>Under søgningen vises en liste med matchende symboler, sammen med linjenummeret hvor de defineres. Du springer til respektive steder ved at klikke i listen. </para> + +<para +>For visse sprog skelner &ctags; mellem forskellige typer af symboler. Python har for eksempel klasser og funktioner. Du kan søge kun efter klasser ved at afkrydse den tilsvarende type i dialogen. </para> + +<para +>Symboldatabasen opdateres normalt ikke når kildekoden ændres. På grund af dette kommer linjenumrene ikke til at være rigtige længe efter et stykke tid, og nytilføjede klasser og funktioner vil mangles. Derfor bør du opdatere filen <filename +>tags</filename +> med regelmæssige intervaller, ved at trykke på knappen <guibutton +>Genopret</guibutton +>. </para> +</listitem> + +<listitem> +<formalpara> +<title +>Pluginprogrammet <command +>astyle</command +></title> +<indexterm zone="plugin-tools" +><primary +><command +>a-stil</command +></primary +></indexterm> +<indexterm zone="plugin-tools" +><primary +><application +>Grafisk stil</application +></primary +></indexterm> +<indexterm zone="plugin-tools" +><primary +>indrykning</primary +></indexterm> + +<para +>A-stil er et plugin til at formatere kildekoden ifølge et specifikt sæt regler. </para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title +>Pluginprogrammet <command +>regexptest</command +></title> +<indexterm zone="plugin-tools" +><primary +><command +>regexptest</command +></primary +></indexterm> +<indexterm zone="plugin-tools" +><primary +>fejlsøgning</primary +><secondary +>regulære udtryk</secondary +></indexterm> +<indexterm zone="plugin-tools" +><primary +>regulære udtryk</primary +><secondary +>fejlsøgning</secondary +></indexterm> + +<para +>At konstruere regulære udtryk kan være et hårdt arbejde. Ofte matcher det første forsøg med et udtryk for mange strenge. I særdeleshed ved arbejde med et kompileret sprog kan cykeltiden ved fejlsøgning af et regulært udtryk være besværlig. Pluginprogrammet regexptest lader dig udforske ændringer i et regulært udtryk direkte. Det aktiveres ved at vælge <menuchoice +><guimenu +>Værktøj</guimenu +> <guimenuitem +>Fejlsøg regulært udtryk...</guimenuitem +></menuchoice +>. </para> +</formalpara> + +<para +>I variantdropned-feltet kan du vælge hvilken variant af regulære udtryk der skal bruges. For øjeblikket understøttes varianten som defineres af POSIX-standarden, som bruges af programmet &grep;, og den udvidede POSIX-syntaks som bruges af programmet &egrep;. </para> + +<para +>Når du indtaster et udtryk, får du umiddelbart tilbagemelding om eventuelle syntaksfejl i det. Ved at indtaste en tekst under <guilabel +>Teststreng</guilabel +>, kan du se om udtrykket matcher strengen. I særdeleshed om det regulære udtryk indeholder grupper, såsom <literal +>"([a-z])"</literal +>, vises indholdet af de matchede delgrupper i et listefelt. </para> +</listitem> + +<!-- +<listitem> +<formalpara> +<title +>The <command +>konsole</command +> Plugin</title> +<indexterm zone="plugin-tools" +><primary +><command +>konsole</command +></primary +></indexterm> +<indexterm zone="plugin-tools" +><primary +>terminal</primary +><secondary +>embedded</secondary +></indexterm> +<para +></para> +</formalpara> +</listitem> +--> + +</itemizedlist> + +</appendix +> <!-- plugin-tools --> + +<!-- ====================================================================== --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/project-advanced.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/project-advanced.docbook new file mode 100644 index 00000000000..4d2b5103bf3 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/project-advanced.docbook @@ -0,0 +1,111 @@ +<chapter id="projects-advanced"> + +<chapterinfo> + <authorgroup> + <author +><firstname +>Bernd</firstname +><surname +>Pol</surname +></author> + <!-- ROLES_OF_TRANSLATORS --> + </authorgroup> +</chapterinfo> + +<title +>Avanceret projekthåndtering</title> + +<sect1 id="oldprojects"> +<title +>Indlæser projekter</title> + +<sect2 id="loading-recent-project"> +<title +>Indlæser et nyligt projekt</title> + +<para +>(... endnu ikke skrevet ...) </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="open-recent-project.png" format="PNG"/> + </imageobject> + <caption +><para +>Sådan åbnes et nyligt projekt </para +></caption> + </mediaobject> +</screenshot> + + +</sect2 +> <!-- loading-recent-project --> + +<sect2 id="loading-project"> +<title +>Indlæser et nyligt projekt</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect2 +> <!-- loading-project --> + +<sect2 id="converting-projects"> +<title +>Konverterer gamle KDevelop projektfiler</title> + +<para +>&tdevelop; lader dig åbne gamle KDevelop 2.x projektfiler og konvertere dem til &tdevelop; filer. For at gøre dette, gå til <guimenuitem +>Åbn Projekt...</guimenuitem +> og vælg <guilabel +>KDevelop 2 projektfiler</guilabel +> i <guilabel +>Filteret:</guilabel +>. Vælg så projektfilendu vil åbne.Projektet bliver så konverteret til&tdevelop; og gemt som <guilabel +>&tdevelop; projektfil</guilabel +>. </para> + +</sect2 +> <!-- converting-projects --> + +<sect2 id="importing-projects"> +<title +>Importerer eksisterende projekt</title> + +<para +>For at importere et eksisterende katalog i &tdevelop; skal du vælge <guimenuitem +>Importér eksisterende katalog</guimenuitem +> fra <guimenu +>Projekt</guimenu +> menu. Du skulle kunne se importér katalog-guiden som vist herunder: </para> + +<figure id="screenshot-importdirectory" float="1"> +<title +>Importér katalog-dialogen</title> +<mediaobject> +<imageobject +><imagedata fileref="importdirectory.png"/></imageobject> +</mediaobject> +</figure> + +</sect2 +> <!-- importing-projects --> + +</sect1 +> <!-- oldprojects --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="project-options"> +<title +>Skræddersyr projektet — Indstillinger for projekt</title> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect1 +> <!-- project-options --> + +</chapter +> <!-- projects-advanced --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/project-management.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/project-management.docbook new file mode 100644 index 00000000000..902d5965ad9 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/project-management.docbook @@ -0,0 +1,1297 @@ +<chapter id="project-management"> + +<chapterinfo> + <authorgroup> + <author +><firstname +>Bernd</firstname +><surname +>Pol</surname +></author> + <author +><firstname +>Ian</firstname +><surname +>Wadham</surname +></author> + <!-- ROLES_OF_TRANSLATORS --> + </authorgroup> +</chapterinfo> + +<title +>Bygge og projekthåndtering</title> + +<para +>Dette kapitel behandler kun kompilerede projekter, såsom projekter med C++, &Java; eller Fortran. Projekter for scriptsprog såsom Python og PHP, virker meget anderledes. </para> + +<para +>Her finder du information om følgende emner:</para> +<itemizedlist> + <listitem +><para +><link linkend="automake-manager-summary" +>Sammendrag af Håndtering af automake</link +> indeholder en oversigt over Håndtering af automake, </para +></listitem> + <listitem +><para +><link linkend="automake-manager-operation" +>Anvendelse af Håndtering af automake</link +> beskriver det basale i hvordan man arbejder med Håndtering af automake. </para +></listitem> +</itemizedlist> + +<sect1 id="automake-manager-summary"> +<title +>Sammendrag af Håndtering af automake</title> + +<para +>I kapitlet <link linkend="unixdev-buildsystems" +>Byggesystemer</link +> har vi givet en grov oversigt over de byggesystem som almindeligvis bruges på &UNIX;-systemer. I følgende afsnit kigger vi på dette i mere detalje. </para> +<para +>Der er en vis forvirring angående hvordan sådanne ting skal navngives. &GNU; kalder dem <quote +>byggesystemer</quote +> når Automake, Autoconf og Libtool beskrives. Qmake kaldes <quote +>et værktøj til at skrive Makefiles for forskellige oversættere og platforme</quote +>. I &kde; bruges ofte udtrykket <quote +>projekthåndteringssystem</quote +>. Vi bruger dette udtryk i en bredere forstand til at beskrive de indbyggede miljøer i &tdevelop; som bruges til at organisere og bygge projekter. I dette afsnits sammenhæng, taler vi dog hovedsageligt om <quote +>automatiserede byggesystemer</quote +>. </para> + +<sect2 id="automake-manager-summary-buildsys"> +<title +>Behovet for et automatiseret byggesystem</title> + +<para +>Hvis du har et simpelt program som udskriver <quote +>Hej allesammen</quote +>, skrevet i C, kan du kompilere og linke det med &gcc; <parameter +>-o hej hej.c</parameter +> og køre det med <command +>./hej</command +>, så du behøver du ikke engang en <filename +>Makefile</filename +>. </para> +<para +>Hvis du har et C-program med flere moduler og deklarationsfiler og du kun skal køre det på din maskine (&ie; det er et lokalt program), behøver du kun en enkelt <filename +>Makefile</filename +>, som er ganske nem at skrive i hånden (brug <userinput +>info make</userinput +> for at lære dig mere). </para> +<para +>Komplikationerne begynder når: </para> +<itemizedlist> + <listitem +><para +>Din kildekode, dokumentation, grafik, lyd, oversættelser, datafiler &etc; findes i mere end en mappe, </para +></listitem> + <listitem +><para +>Du har et hierarki af mapper og undermapper, </para +></listitem> + <listitem +><para +>Du bruger biblioteker som ikke er en del af det traditionelle sæt på &UNIX;, såsom &Qt;-objektbiblioteket eller &kde;-desktopbiblioteker, </para +></listitem> + <listitem +><para +>Du bruger en præprocessor til at oprette en del af din kildekode, som Qt's MOC præoversætter, </para +></listitem> + <listitem +><para +>Du sigter mod at distribuere programmet i hele verden, til personer som ikke har samme &UNIX;- eller &Linux;-system, programmel og hardware som dig, </para +></listitem> + <listitem +><para +>Du kræver en automatisk funktion for installation og afinstallation, </para +></listitem> + <listitem +><para +>Du sigter mod at gøre dit program til en del af &kde;'s sæt af desktopprogrammer. </para +></listitem> +</itemizedlist> + +<para +>Hvis du befinder dig i en eller alle ovenstående situationer, behøver du formodentlig et <emphasis +>byggesystem</emphasis +>. I eksemplet ovenfor brugte vi kommandoen &gcc; til at kompilere og bygge programmet <quote +>Hej</quote +>, men alle C-oversættere hedder ikke <quote +>&gcc;</quote +>. Så hvis du distribuerer programmet til nogen som bruger en anden C-oversætter, skal din Makefile på en eller anden måde bruge navnet på denne persons oversætter, ellers mislykkes kompileringen af programmet—og dette er kun et af mange eksempler på hvad som kan gå galt. </para> +<para +>Et byggesystem udjævner forskellene for dig. </para> +<itemizedlist> + <listitem +><para +>Det kontrollerer at bibliotekerne som behøves er på hver maskine som tager imod programmet, </para +></listitem> + <listitem +><para +>afsøger automatisk alle programmapper efter filer at forbehandle, kompilere eller installere og </para +></listitem> + <listitem +><para +>installerer komponenterne som programmet består af i de rigtige mapper, og sikrer at </para +></listitem> + <listitem +><para +>mapperne på maskinen som tager imod programmet laves efter behov. </para +></listitem> +</itemizedlist> + +<para +>I korthed tilbyder et byggesystem sikre metoder til at kompilere og installere programmet på alle maskiner som tager imod programmet. Som vi har vist tidligere i oversigten <link linkend="makesystems" +>Projekthåndteringssystemer</link +>, tilbyder &tdevelop; tre automatiserede byggesystemer og mulighed at oprette din egen Makefile. I korthed (klik på projektnavnene for mere information): </para> +<itemizedlist> + <listitem +><para +><link linkend="automake-project" +>Automake-projekt</link +> som bruger de almindelige udviklingsværktøjer for &GNU;. </para +></listitem> + <listitem +><para +><link linkend="qmake-project" +>Qmake-projekt</link +> som bruger Trolltechs Qmake-projekthåndtering. </para +></listitem> + <listitem +><para +><link linkend="ant-project" +>ANT-projekt</link +> som bruger Apaches ANT-projekthåndtering for &Java;-udvikling. </para +></listitem> + <listitem +><para +><link linkend="custom-project" +>Eget projekt</link +> som kræver at du vedligeholder din egen <filename +>Makefile</filename +>. </para +></listitem> +</itemizedlist> + +<important> +<para +>En af de fire valgmuligheder skal vælges når du laver et projekt, og <emphasis +>valget er svært at ændre senere</emphasis +>, så du bør tænke dig om inden du begynder. </para> +</important> + +</sect2 +> <!-- automake-manager-summary-buildsys --> + +<sect2 id="automake-references"> +<title +>Vejledninger om Autoconf, Automake og Libtool</title> +<para +>Der er flere vejledninger tilgængelige om &GNU;'s byggesystem (<command +>Autoconf</command +>, <command +>Automake</command +> og <command +>Libtool</command +>) som Håndtering af automake bruger. </para> +<itemizedlist> + <listitem +><para +>En kort <ulink url="http://www.tdevelop.org/index.html?filename=tutorial_autoconf.html" +>vejledning om autoconf</ulink +>, skrevet af Christopher W. Curtis er tilgængelig på KDevelops hjemmeside. Den koncentrerer sig om nogle grundlæggende skridt til at ændre en <filename +>Makefile</filename +>. </para +></listitem> + <listitem +><para +>En mere detaljeret vejledning findes i et større sæt af øvelser på <ulink url="http://www.amath.washington.edu/~lf/tutorials/autoconf/toolsmanual_toc.html" +> <quote +>Udvikling af programmer med GNU</quote +></ulink +>. </para +></listitem> + <listitem +><para +>Den berømte <quote +>gedebog</quote +>, som hedder <quote +>Autoconf, Automake, and Libtool</quote +>, findes også på <ulink url="http://sources.redhat.com/autobook" +></ulink +>. Den er en letlæst, men alligevel kortfattet, introduktion til alle vigtige aspekter af &GNU;'s autoværktøjer. </para +></listitem> +</itemizedlist> + +</sect2 +> <!-- automake-references --> + +<sect2 id="automake-manager-basics"> +<title +>Hvad gør Håndtering af automake?</title> + +<para +><link linkend="applicationwizard" +>Programguiden</link +> har oprettet nogle oprindelige <filename +>Makefile.am</filename +> filer da du oprettede et <guilabel +>nyt projekt</guilabel +> af en type som bruger &GNU;'s byggesystem, såsom <menuchoice +><guimenuitem +>C++</guimenuitem +> <guimenuitem +>KDE</guimenuitem +> <guimenuitem +>Application framework</guimenuitem +></menuchoice +>. Under udviklingen laver Håndtering af automake alle yderligere <filename +>Makefile.am</filename +> filer for projekter som bruger &GNU;'s byggesystem, og vedligeholder alle, både de som blev lavet med programguiden og Håndtering af automake. </para> +<para +>Der er en <filename +>Makefile.am</filename +> i hver projektmappe som indeholder filer som skal kompileres eller installeres. Den indeholder dine specifikationer for at kompilere, bygge og installere filer og en reference til alle undermapper som også har en <filename +>Makefile.am</filename +> og muligvis nogle filer at kompilere, bygge og installere. </para> + +<note +><para +>Projektets mapper og kildekodefiler kan struktureres til hvilken som helst dybde, eller du foretrækker måske en flad projektstruktur med alle undermapper på topniveau. </para +></note> + +<para +>Formålet med &GNU;'s byggesystem er at oprette filstrukturer for kildekode som kan kompileres, bygges og installeres på et hvilket som helst &UNIX;- eller &Linux;-system med de simple kommandoer: </para> + +<screen +>./configure +make +make install # Sædvanligvis som systemadministrator. +</screen> + +<para +>og kan afinstalleres med kommandoen <command +>make uninstall</command +> (oftest som systemadministrator). </para> + +<para +>Hvordan virker det? Ja, <command +>configure</command +> er et script som: <itemizedlist> + <listitem +><para +>udarbejder detaljeret information om systemet som det køres på, såsom hvilken oversætter og hvilke biblioteker som skal bruges, hvor de kan findes, og derefter </para +></listitem> + <listitem +><para +>rekursivt laver filerne <filename +>Makefile</filename +> ved at udfylde det som skal erstattes i de tilsvarende <filename +>Makefile.in</filename +>. </para +></listitem> +</itemizedlist> +</para> +<para +>Filen <filename +>Makefile.am</filename +> er <quote +>inddata</quote +>—en skabelon som giver grundlæggende information for den <filename +>Makefile</filename +> som skal laves, ved at udfylde en vis systemafhængig information. Den laves af værktøjet <command +>Automake</command +> ud fra filen <filename +>Makefile.am</filename +>. </para> +<para +>Processen at komme fra en <filename +>Makefile.am</filename +> (hvor <filename +>.am</filename +> angiver skabelonfiler for <quote +>Automake</quote +>) til <filename +>Makefile</filename +> håndteres automatisk af Kdevelops Håndtering af automake med værktøjet <command +>Autoconf</command +>, <command +>M4</command +>-makroer og andre mysterier vi ikke behøver at gå ind på her. </para> +<para +>Så når <command +>make</command +> kører, henter det automatisk den rigtige information fra det nuværende miljø, såsom oversætter og biblioteker. På samme måde, placerer <command +>make install</command +> delene af programmet, som kørbare filer, dokumentation og datafiler på det rigtige stedet i dette miljø. </para> + +<para +>Hvis du distribuerer programmet som et <quote +>tar-arkiv</quote +> (en enkelt komprimeret fil som KDevelop kan oprette for dig), indeholder den filerne <filename +>Makefile.in</filename +> og scriptfilen <filename +>configure</filename +>, så modtageren kan kompilere, bygge og installere programmet uden at have <command +>Automake</command +>, <command +>Autoconf</command +> eller KDevelop på sin maskine. Filerne <filename +>Makefile.am</filename +> indgår også, ifald modtageren skal lave nogen ændringer i kildekoden. </para> +<note +><para +>Reglerne er væsentligt anderledes hvis du distribuerer via et netbaseret kildekodearkiv såsom KDE's CVS. </para +></note> + +</sect2 +> <!-- automake-manager-basics --> + +<sect2 id="automake-manager-basics-summary"> +<title +>Sammendrag af hvad Håndtering af automake gør</title> + +<itemizedlist> + <listitem +><para +>Opretter filerne <filename +>Makefile.am</filename +> i undermapperne som det kender til som <quote +>delprojekter</quote +>. </para +></listitem> + <listitem +><para +>Opdaterer filerne <filename +>Makefile.am</filename +> når projektstrukturen ændres. </para +></listitem> + <listitem +><para +>Opdaterer filerne <filename +>Makefile.am</filename +> når filer tilføjes eller fjernes fra projektet. </para +></listitem> + <listitem +><para +>Accepterer definitioner om hvordan de forskellige filer skal bygges eller installeres, og ændrer <filename +>Makefile.am</filename +> ifølge dem. </para +></listitem> + <listitem +><para +>Accepterer parametre som bruges ved bygning eller installation (⪚ biblioteksnavne), og sikrer at de bruges i de nødvendige kompilerings- og byggeskridt. </para +></listitem> +</itemizedlist> + +</sect2 +> <!-- automake-manager-basics-summary --> + +<sect2 id="automake-file-contents"> +<title +>Indhold i automake-filer</title> + +<para +>Filen <filename +>Makefile.am</filename +> har linjer som indeholder variabelnavne fulgt af et lighedstegn og en liste med filer eller parameterværdier. <quote +>Variabler</quote +> har todelte navne, såsom <varname +>bin_PROGRAMS</varname +>, <varname +>mitpgm_SOURCES</varname +> eller <varname +>kdelnk_DATA</varname +>. Den anden del kaldes <emphasis +>den primære</emphasis +> og repræsenterer noget som skal bygges eller installeres. Den første del kaldes <emphasis +>præfiks</emphasis +> og repræsenterer: </para> +<itemizedlist> + <listitem +><para +>En <emphasis +>mappe</emphasis +> hvor installationen skal gøres (⪚ <filename +>bin</filename +>), </para +></listitem> + <listitem +><para +>En <emphasis +>kvalifikation</emphasis +> for den primære del (⪚ <emphasis +>mitpgm</emphasis +> for <varname +>SOURCES</varname +>, som angiver at kildekodefiler som er på listen efter <varname +>mitpgm_SOURCES</varname +> indgår i at bygge <varname +>mitpgm</varname +>. </para +></listitem> + <listitem +><para +>Et særligt <emphasis +>præfiks</emphasis +> <varname +>noinst</varname +> (kort for <quote +>ingen installation</quote +>), som oftest bruges til en liste over programmets deklarationsfiler (<filename +>.h</filename +>), </para +></listitem> + <listitem +><para +>Eller det specielle præfiks <varname +>EXTRA</varname +>, for <emphasis +>indstillingsafhængige</emphasis +> ting. </para +></listitem> +</itemizedlist> + +<para +>For mere information om <command +>Automake</command +> og filerne <filename +>Makefile.am</filename +>, slå det op i <userinput +>info Automake</userinput +>. </para> +<para +>I hovedsagen laver og opdaterer Håndtering af automake variabelnavne og fillister eller parametre. Se følgende eksempel på en <filename +>Makefile.am</filename +> for et typisk program, som kaldes <filename +>mitpgm</filename +>. </para> + +<screen +>## Makefile.am for mitpgm + +# dette er programmet som installeres. Dets navn bruges for alle +# andre Makefile.am variabler +bin_PROGRAMS = mitpgm + +# indstil søgestien for deklarationsfiler til X, Qt og KDE +INCLUDES = $(all_includes) + +# bibliotekssøgestien. +mitpgm_LDFLAGS = $(KDE_RPATH) $(all_libraries) + +# bibliotekerne at linke med. +mitpgm_LDADD = $(LIB_KFILE) $(LIB_TDEPRINT) + +# hvilke kildekodefiler skal kompileres for mitpgm +mitpgm_SOURCES = main.cpp mitpgm.cpp mitpgmvy.cpp + +# dette er deklarationsfilerne for projektet +noinst_HEADERS = mitpgm.h mitpgmvy.h + +# lad automoc håndtere alle metakildefiler (moc) +METASOURCES = AUTO + +KDE_ICON = mitpgm + +# det er her kdelnk-filen havner +kdelnkdir = $(kde_appsdir)/Utilities +kdelnk_DATA = mitpgm.desktop + +# det er her XML-GUI ressourcefilen havner +rcdir = $(kde_datadir)/mitpgm +rc_DATA = mitpgm_ui.rc + +AM_CXXFLAGS = -DMY_C++_PREPROCESSOR_ALTERNATIV +</screen> + +<para +>Som du kan se er mange af objekterne på højresiden symboler på formen <varname +>$(xxxx)</varname +>. De er <emphasis +>miljøvariabler</emphasis +> som defineres i selve &kde;-miljøet og erstattes med rigtige værdier når <command +>./configure</command +> laver de endelige <filename +>Makefile</filename +>-filer på maskinen som tager imod programmet. </para> + +<para +>Det er også en god ide at køre kommandoen <command +>./configure --help</command +> en gang efter du er begyndt med KDevelop, hvilket viser dig de forskellige ting du kan ændre på bygge- og installationstidspunktet, såsom et testmiljø. I særdeleshed kommandoen: <screen> +./configure --prefix=/hvor/du/vil +</screen +> som flytter hele installationen til en mappestruktur som du vælger, ved at ændre den interne variabel <varname +>$(prefix)</varname +> til værdien <filename class="directory" +>/hvor/du/vil</filename +>. </para> + +</sect2 +> <!-- automake-file-contents --> + +</sect1 +> <!-- automake-manager-summary --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="automake-manager-operation"> +<title +>Brug af Håndtering af automake</title> + +<para +>I dette kapitel finder du en grundlæggende beskrivelse af elementerne i Håndtering af automake, og hvordan de bruges. Dette dækker: <itemizedlist> + <listitem +><para +><link linkend="automake-manager-operation-window" +>Vinduet Håndtering af automake</link +> beskriver den grundlæggende struktur i hovedvinduet i Håndtering af automake. </para +></listitem> + <listitem +><para +><link linkend="automake-manager-operation-survey-window" +>Oversigtsvinduet</link +> beskriver elementerne i det øverst delvindue. </para +></listitem> + <listitem +><para +><link linkend="automake-manager-operation-detail-window" +>Detaljevinduet</link +> beskriver elementerne i det nederste delvindue. </para +></listitem> + <listitem +><para +><link linkend="automake-manager-operation-navigate" +>Navigering i Håndtering af automake</link +> giver en liste af nogle grundlæggende handlinger du kan udføre i Håndtering af automake. </para +></listitem> + <listitem +><para +><link linkend="automake-manager-operation-popups" +>Sammenhængsafhængige menuer i Håndtering af automake</link +> beskriver menuerne som dukker op når du vælger en handling i Håndtering af automake. </para +></listitem> +</itemizedlist> +</para> + +<sect2 id="automake-manager-operation-window"> +<title +>Vinduet Håndtering af automake</title> + +<informaltable frame="none"> +<tgroup cols="2" +><tbody +><row> + <entry +><inlinemediaobject> + <imageobject> + <imagedata fileref="automakemanager.png" format="PNG"/> + </imageobject> + </inlinemediaobject +></entry> + <entry valign="top" +><itemizedlist> + <listitem +><para +>Håndtering af automake bruger et delt vindue. Den øverste del kaldes <emphasis +>Oversigtsvinduet</emphasis +> og den nederste del kaldes <emphasis +>Detaljevinduet</emphasis +>. Mellem dem er en smal linje som kan trækkes med musen for at justere vinduestørrelserne. I IDEA-vinduestilstand kan du også trække sidekanten på det delte vinduet for at ændre bredden. </para +></listitem> + <listitem +><para +>Ovenfor hvert vindue er der en <emphasis +>værktøjslinje</emphasis +>, hvor knapperne bliver aktive når et element i vinduet markeres. Dette tilbyder en måde at få adgang til handlingerne som der sørges for for dette element. Det andet sæt er sammenhængsafhængige menuer, som dukker op ved klik med højre museknap som beskrevet nedenfor. </para +></listitem> + <listitem +><para +>I IDEA-vinduetilstand er der yderligere to små knapper til venstre i navnelisten på vinduet Håndtering af automake—en trekantformet højrepil, og en knap med en prik. Pileknappen bruges til at <emphasis +>lukke for vinduet</emphasis +>. Prikknappen på den anden side, holder <emphasis +>vinduet åbent</emphasis +> også selvom om et andet vindue vælges i &tdevelop;. (Ellers lukkes vinduet Håndtering af automake automatisk så snart et andet vindue får indtastningsfokus.) </para +></listitem> + </itemizedlist +></entry> +</row +></tbody +></tgroup> +</informaltable> + +</sect2 +> <!-- automake-manager-operation-window --> + +<sect2 id="automake-manager-operation-survey-window"> +<title +>Oversigtsvinduet</title> + +<para +>Oversigtsvinduet indeholder en træliste med alle mapper i projektet som indeholder programfiler, dokumentation eller data. Hver sådan mappe indeholder en fil <filename +>Makefile.am</filename +> og er kendt som et <emphasis +>delprojekt</emphasis +> i Håndtering af automake. Der er tre typiske delprojekter i et &kde;-baseret projekt, som vises på billedet ovenfor: </para> + +<itemizedlist> + <listitem +><para +><filename +>src</filename +>: kildekodefiler for programmet, </para +></listitem> + <listitem +><para +><filename +>doc</filename +>: brugermanualen eller håndbogen, </para +></listitem> + <listitem +><para +><filename +>po</filename +>—uddrag af strenge i dine kildekodefiler som kræver oversættelse til andre menneskelige sprog (f.eks. vinduestitler, menunavne, navne på knapper, tekst i dialoger og meddelelser af forskellige slags). </para +></listitem> +</itemizedlist> + +<para +>Bemærk at delprojektet <filename +>doc</filename +> altid har et delprojekt som hedder <filename +>en</filename +>, som du kan se hvis du klikker på symbolet <symbol +>+</symbol +> før ordet <filename +>doc</filename +>. Dette skyldes at grundsproget for al dokumentation i KDE er amerikansk engelsk (en). Hvis programmet bliver en del af KDE, kan KDE's oversættelsesgrupper oversætte din dokumentation fra engelsk til andre sprog, og oversættelserne havner så i andre delprojekter, såsom <filename +>da</filename +> (dansk), <filename +>de</filename +> (tysk) eller <filename +>fr</filename +> (fransk). Strengene i delprojektet <filename +>po</filename +> kan også oversættes og opbevares i andre filer under <filename +>po</filename +>, for på den måde at lade programmet bruges af personer som ikke kan engelsk. </para> + +<note +><para +>Delprojekterne <filename +>doc</filename +> og <filename +>po</filename +> tjener forskellige formål. <filename +>doc</filename +> indeholder <emphasis +>dokumentation</emphasis +>, såsom en brugerhåndbog, mens <filename +>po</filename +> indeholder tekststrenge som kan oversættes fra <emphasis +>brugergrænsefladen</emphasis +> som indgår i programmets kildekode. </para +></note> + +<para +>Oversigtsvinduet virker—blandt andet—som et navigeringsværktøj. Hvis du vælger et delprojekt i oversigtsvinduet, vises tilsvarende detaljeret information i detaljevinduet. </para> + +</sect2 +> <!-- automake-manager-operation-survey-window --> + +<sect2 id="automake-manager-operation-detail-window"> +<title +>Detaljevinduet</title> + +<para +>Detaljevinduet indeholder en liste med alle filer i delprojektet som for øjeblikket er markeret i oversigtsvinduet, samt kompilerings-, bygge- og installationsreglerne for delprojektet. På den måde kan vinduerne tilsammen give dig mulighed for at komme til alle komponenter i programmet, og al information om hvordan det skal kompileres, bygges og installeres. </para> + +<sect3> +<title +>Mål</title> + +<para +>Trælisten i detaljevinduet har to niveauer. Det øverste niveau består af såkaldte <emphasis +>mål</emphasis +> i Håndtering af automake, og næste niveau indeholder lister med filer som bruges for at oprette hvert mål. </para> + +<para +>Dette begreb med et mål i Håndtering af automake, adskiller sig noget fra hvad et mål i en <filename +>Makefile</filename +> som oftest er. I korthed:</para> +<itemizedlist> + <listitem +><para +>Definitionen af hvordan et antal filer skal kompileres, bygges eller installeres er kendt som et <emphasis +>mål</emphasis +> i Håndtering af automake, men som en <emphasis +>variabel</emphasis +> i selve <command +>Automake</command +>. </para +></listitem> + <listitem +><para +>Et <emphasis +>mål</emphasis +> i <command +>make</command +> er ofte noget helt andet, eftersom det kan være en parameter til kommandoen <command +>make</command +> (⪚ <userinput +>make install</userinput +>, <userinput +>make clean</userinput +>). </para> + <para +>Visse af variablerne i <filename +>Makefile.am</filename +> repræsenterer dog et underliggende <emphasis +>delmål</emphasis +> for <command +>make</command +>. </para +></listitem> +</itemizedlist> + +</sect3> +</sect2 +> <!-- automake-manager-operation-detail-window --> + +<sect2 id="automake-manager-operation-navigate"> +<title +>Navigering i Håndtering af automake</title> + +<para +>Både i oversigtsvinduet og detaljevinduet kan du venstreklikke på <symbol +>+</symbol +> eller <symbol +>-</symbol +> foran et delprojekt eller målnavn for at udvide eller trække trævisningen sammen. Hvis du gør dette med et <emphasis +>delprojekt</emphasis +> i oversigtsvinduet, vises eller skjules delprojektets næste underliggende niveau (hvis der er et sådant). Hvis du gør dette med et <emphasis +>mål</emphasis +> i detaljevinduet, vises eller skjules listen med filer som indgår i målet. </para> + +<variablelist> +<varlistentry> +<term +>Åbn en fil til redigering</term> +<listitem> +<para +>Hvis du <emphasis +>venstreklikker</emphasis +> på et filnavn i detaljevinduet, åbnes den tilsvarende fil i KDevelops redigeringsvindue.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Aktivér værktøjslinjeknapperne i Håndtering af automake</term> +<listitem> +<para +>Hvis du <emphasis +>venstreklikker</emphasis +> på et delprojektnavn i oversigtsvinduet eller et mål i detaljevinduet, markeres navnet og visse knapper i værktøjslinjen bliver aktive længst oppe i vinduet.</para> + +<note> + <para +>Du anbefales at bruge <emphasis +>højre museknap og sammenhængsafhængige menuer</emphasis +>, i stedet for knapperne i værktøjslinjen, eftersom det så er meget nemmere at se og forstå hvad du gør. </para> + <para +>Handlinger for delprojekter og mål har langtvirkende effekter for struktur, kompilering, bygning og installation af programmet. </para> +</note> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Vælg handlinger og sammenhængsafhængige menuer</term> +<listitem> +<para +>Hvis du <emphasis +>højreklikker</emphasis +> på et delprojektnavn, mål eller fil, dukker en menu op og du kan derefter vælge handlinger at udføre for delprojektet, målet eller filen, såsom at tilføje et mål til delprojektet, tilføje en fil til målet eller logisk fjerne den markerede filen fra sit mål. </para> +</listitem> +</varlistentry> +</variablelist> + +</sect2 +> <!-- automake-manager-operation-navigate --> + +<sect2 id="automake-manager-operation-popups"> +<title +>Sammenhængsafhængige menuer i Håndtering af automake</title> + +<para +>Følgende afsnit forklarer kortfattet hvilke handlinger som menuerne gør tilgængelige, som dukker op ved klik med højre museknap i vinduet Håndtering af automake. Afsnittene er kun beregnet som en oversigt. Du finder detaljerede beskrivelser af de fleste handlinger i et senere kapitel. </para> +<!-- ### add a link to this chapter when ready --> + +<sect3 id="automake-manager-operation-popups-file"> +<title +>Sammenhængsafhængig menu for en fil</title> + +<para +>Når du højreklikker på et <emphasis +>filnavn</emphasis +> i detaljevinduet, dukker følgende menu op som lader dig vælge en af flere handlinger at udføre med filen. I billedet nedenfor, markeredes ikonfilen <filename +>hi-16app-myapp.png</filename +> i målet <guilabel +>Ikondata i kde_icon</guilabel +> fra delprojektet <guilabel +>myapp/src</guilabel +>. </para> + +<informaltable frame="none"> +<tgroup cols="2" +><tbody +><row> + <entry +><inlinemediaobject> + <imageobject> + <imagedata fileref="automake-file-popup.png" format="PNG"/> + </imageobject> + </inlinemediaobject +></entry> + <entry valign="bottom" +><itemizedlist> + <listitem +><para +>Hovedpunktet i den sammenhængsafhængige menu er at <guimenuitem +>Fjerne</guimenuitem +> filen fra målet (&ie; den kommer ikke længere at blive brugt til at kompilere, bygge eller installere dette mål). </para +></listitem> + <listitem +><para +>Punktet <guimenuitem +>CVS</guimenuitem +> tilbyder en hel del forskellige CVS-handlinger for filen. </para +></listitem> + <listitem +><para +>Punktet <guimenuitem +>Åbn med</guimenuitem +> lader dig åbne filen med et antal editorer eller med et hvilket som helst program (⪚ kan du åbne ikonfilen i vort eksempel med <application +>Kiconedit</application +>). </para +></listitem> + <listitem +><para +>Punktet <guimenuitem +>Perforce</guimenuitem +> bruges til lignende handlinger som i CVS, men med det kommercielle versionshåndteringssystem <quote +><application +>Perforce</application +></quote +>. </para +></listitem> + </itemizedlist +></entry> +</row +></tbody +></tgroup> +</informaltable> + +</sect3 +> <!-- automake-manager-operation-popups-file --> + +<sect3 id="automake-manager-operation-popups-target"> +<title +>Sammenhængsafhængig menu for et mål</title> + +<para +>Når du højreklikker på et <emphasis +>mål</emphasis +> i detaljevinduet, dukker følgende menu op som lader dig vælge en af flere handlinger at udføre med det. I billedetnedenfor, markeredes målet <guilabel +>myapp (Program i bin)</guilabel +> i delprojektet <guilabel +>myapp/src</guilabel +>. </para> + +<informaltable frame="none"> +<tgroup cols="2" +><tbody +><row> + <entry +><inlinemediaobject> + <imageobject> + <imagedata fileref="automake-target-popup.png" format="PNG"/> + </imageobject> + </inlinemediaobject +></entry> + <entry valign="bottom" +><itemizedlist> + <listitem +><para +>Punktet <guimenuitem +>Indstillinger</guimenuitem +> for et mål gælder kun kildekodefiler. I den tilsvarende dialog kan du angive linkerflag og søgestier hvor biblioteker kan findes, og du kan angive en liste med egentlige biblioteker som skal linkes med i programmet. </para +></listitem> + <listitem +><para +>Punktet <guimenuitem +>Opret ny fil</guimenuitem +> viser en dialog hvor du kan angive filnavnet og filtypen som skal laves (i et dropned-felt). </para +></listitem> + <listitem +><para +>Punktet <guimenuitem +>Tilføj eksisterende filer</guimenuitem +> viser en dialog hvor du kan tilføje en eksisterende fil til målet. </para +></listitem> + <listitem +><para +>Punktet <guimenuitem +>Fjern</guimenuitem +> for et mål lader dig logisk fjerne målet og alle dets filer fra projektstrukturen. </para +></listitem> + <listitem +><para +>Punktet <guimenuitem +>Gør mål aktivt</guimenuitem +> gælder kun for mål som indeholder kildekodefiler. Nye filer tilføjes altid til et sådant aktivt mål. </para +></listitem> + <listitem +><para +>Punktet <guimenuitem +>Byg mål</guimenuitem +> kalder alle nødvendige kompilerings- og byggehandlinger for at bygge koden kun for dette mål. </para +></listitem> + </itemizedlist +></entry> +</row +></tbody +></tgroup> +</informaltable> + +</sect3 +> <!-- automake-manager-operation-popups-target --> + +<sect3 id="automake-manager-operation-popups-subproject"> +<title +>Sammenhængsafhængig menu for et delprojekt</title> + +<para +>Når du højreklikker på et <emphasis +>delprojekt</emphasis +> i oversigtsvinduet, dukker følgende menu op som lader dig gøre udføre ændringer i projektets struktur og måden det kompileres, bygges og installeres. Du kan bruge den til at udvide eller ændre den grundlæggende projektstruktur som programguiden har oprettet. </para> + + +<informaltable frame="none"> +<tgroup cols="2" +><tbody +><row> + <entry +><inlinemediaobject> + <imageobject> + <imagedata fileref="automake-subproject-popup.png" format="PNG"/> + </imageobject> + </inlinemediaobject +></entry> + <entry valign="bottom" +><itemizedlist> + <listitem +><para +>Punktet <guimenuitem +>Indstillinger</guimenuitem +> for et delprojekt styrer måden som delprojektet kompileres, bygges og installeres. Dialogen som dukker op har faneblade for Oversætter, Deklarationsfiler, Præfiks og Byggerækkefølge. </para +></listitem> + <listitem +><para +>Punktet <guimenuitem +>Tilføj delprojekt</guimenuitem +> laver en ny mappe og Makefile.am skeletfil. </para +></listitem> + <listitem +><para +>Punktet <guimenuitem +>Tilføj mål</guimenuitem +> viser en dialog, hvor du kan indstille regler for kompilering, bygning eller installation for en filgruppe inde i delprojektet. </para +></listitem> + <listitem +><para +><guimenuitem +>Tilføj tjeneste</guimenuitem +> (... endnu ikke skrevet ...) </para +></listitem> + <listitem +><para +><guimenuitem +>Tilføj program</guimenuitem +> (... endnu ikke skrevet ...) </para +></listitem> + <listitem +><para +><guimenuitem +>Tilføj eksisterende delprojekt</guimenuitem +> (... endnu ikke skrevet ...) </para +></listitem> + <listitem +><para +>Punktet <guimenuitem +>Fjern delprojekt</guimenuitem +> i den sammenhængsafhængige menu for et delprojekt er den rigtige måde at fjerne et delprojekt. Det justerer filerne <filename +>Makefile.am</filename +> på tilsvarende måde. Du tilbydes også mulighed at fjerne alle filer (eller link) i de tilsvarende undermappe. Det er klart at funktionen skal bruges med forsigtighed. </para +></listitem> + <listitem +><para +>Punktet <guimenuitem +>Byg</guimenuitem +> kalder alle nødvendige kompilerings- og byggehandlinger for at bygge koden kun for dette delprojekt. </para +></listitem> + <listitem +><para +><guimenuitem +>Påtving omredigering</guimenuitem +> (... endnu ikke skrevet ...) </para +></listitem> + <listitem +><para +><guimenuitem +>Ryd</guimenuitem +> (... endnu ikke skrevet ...) </para +></listitem> + <listitem +><para +><guimenuitem +>Installér</guimenuitem +> (... endnu ikke skrevet ...) </para +></listitem> + <listitem +><para +><guimenuitem +>Installér (som systemadministrator)</guimenuitem +> (... endnu ikke skrevet ...) </para +></listitem> + </itemizedlist +></entry> +</row +></tbody +></tgroup> +</informaltable> + +</sect3 +> <!-- automake-manager-operation-popups-subproject --> + +</sect2 +> <!-- automake-manager-operation-popups --> + +</sect1 +> <!-- automake-manager-operation --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="autoproject"> +<title +>Automake-projekt</title> +<indexterm zone="autoproject" +><primary +><command +>autoprojekt</command +></primary +></indexterm> +<indexterm zone="autoproject" +><primary +>&automake;</primary +></indexterm> +<indexterm zone="autoproject" +><primary +>&autoconf;</primary +></indexterm> +<indexterm zone="autoproject" +><primary +>&libtool;</primary +></indexterm> + +<para +>(... endnu ikke skrevet ...) </para> + + +<sect2 id="autoconf"> +<title +>Autoconf</title> +<indexterm zone="autoconf" +><primary +><filename +>configure</filename +>-scriptet</primary +></indexterm> +<indexterm zone="autoconf" +><primary +><filename +>config.status</filename +>-scriptet</primary +></indexterm> +<indexterm zone="autoconf" +><primary +><filename +>Makefile.in</filename +></primary +></indexterm> +<indexterm zone="autoconf" +><primary +><filename +>config.h.in</filename +></primary +></indexterm> + +<para +><filename +>Makefile.in</filename +> til <filename +>Makefile</filename +> </para> + +<programlisting +>prefix = @prefix@ +INSTALL = @INSTALL@ +build_triplet = @build@ +CXX = @CXX@ +</programlisting> + +<programlisting +>prefix = /home/bernd/kde3 +INSTALL = /usr/bin/ginstall -c -p +build_triplet = i686-pc-linux-gnu +CXX = g++ +</programlisting> + +<para +><filename +>config.h.in</filename +> til <filename +>config.h</filename +> </para> + +<programlisting +>/* Define if you have libz */ +#undef HAVE_LIBZ +/* The size of a `int', as computed by sizeof. */ +#undef SIZEOF_INT +</programlisting> + +<programlisting +>/* Define if you have libz */ +#define HAVE_LIBZ 1 +/* The size of a `int', as computed by sizeof. */ +#define SIZEOF_INT 4 +</programlisting> + +</sect2 +> <!-- autoconf --> + + +<sect2 id="automake"> +<title +>Automake</title> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect2 +> <!--automake --> + + +<sect2 id="automake-manager"> +<title +>KDevelops Håndtering af automake</title> + +<figure id="screenshot-automake-manager" float="1"> +<title +>Et skærmaftryk af Håndtering af automake</title> +<mediaobject> +<imageobject +><imagedata fileref="automake-manager.png"/></imageobject> +</mediaobject> +</figure> + +</sect2 +> <!-- automake-manager --> + + +<sect2 id="automakelibrary"> +<title +>Bygning og installering af biblioteker</title> + +<para> +<itemizedlist> +<listitem +><para +>-rpath </para +></listitem> +<listitem +><para +>PIC </para +></listitem> +<listitem +><para +>static </para +></listitem> +<listitem +><para +>plugins: no-undefined </para +></listitem> +</itemizedlist> +</para> + +</sect2 +> <!-- automakelibrary --> + +</sect1 +> <!-- autoproject --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="customproject"> +<title +>Egne byggefiler og byggescripter</title> +<indexterm zone="customproject" +><primary +><filename +>Makefile</filename +></primary +></indexterm> +<indexterm zone="customproject" +><primary +><filename +>build.xml</filename +></primary +></indexterm> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect1 +> <!-- customproject --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="compileroptions"> +<title +>Oversætterindstillinger</title> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect1 +> <!-- compileroptions --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="makeoptions"> +<title +>Byggetilvalg</title> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect1 +> <!-- makeoptions --> + +</chapter +> <!-- project-management --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/setup.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/setup.docbook new file mode 100644 index 00000000000..fae6cf12755 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/setup.docbook @@ -0,0 +1,3013 @@ +<chapter id="setup"> + +<chapterinfo> + <authorgroup> + <author +><firstname +>Bernd</firstname +><surname +>Pol</surname +></author> + <!-- ROLES_OF_TRANSLATORS --> + </authorgroup> +</chapterinfo> + +<title +>Indstilling af &tdevelop;</title> + +<para +>&tdevelop; er en meget kraftig og fleksibel IDE som kan skræddersys på mange måder til dine behov. For at indstille KDevelop, vælges <menuchoice +><guimenu +>Opsætning</guimenu +><guimenuitem +>Indstil &tdevelop;...</guimenuitem +></menuchoice +>. Dette bringer indstillingsdialogen frem. Den består af et markeringsvindue i venstre side og indstillingsdialogen i højre side. Indholdet varierer afhængigt af det indstillingspunkt du valgte. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="configure-select.png" format="PNG"/> + </imageobject> +<textobject> +<phrase +>Vælg er indstillingspunkt</phrase> +</textobject> + <caption +><para +>Vælg er indstillingspunkt </para +></caption> + </mediaobject> +</screenshot> + +<para +>Vi vil diskutere disse indstillinger i en anden rækkefølge, opdelt i hovedemnerne <link linkend="setup-general" +>Generel indstilling</link +>, <link linkend="setup-docu" +>Indstilling af dokumentation</link +> og <link linkend="setup-advanced" +>Avanceret indstilling</link +> hvilket giver en mere intuitiv læsning. </para> +<para +>Hvis du ønsker at slå et bestemt indstillingspunkt op, så brug et af følgende link. </para> + +<simplelist> + <member +><link linkend="setup-main" +>Generelt</link +></member> + <member +><link linkend="setup-ui" +>Brugergrænseflade</link +></member> + <member +><link linkend="setup-templates" +>Filskabeloner</link +></member> +<member +><link linkend="setup-editor" +>Editor</link +></member> + <member +><link linkend="setup-abbrev" +>Forkortelser</link +></member> + <member +><link linkend="setup-scripting" +>Scripter</link +></member> + <member +><link linkend="setup-menu-standard" +>Værktøjer-menu</link +></member> + <member +><link linkend="setup-menu-external" +>Eksterne værktøjer</link +></member> + <member +><link linkend="setup-docu" +>Dokumentation</link +></member> + <member +><link linkend="setup-snippets" +>Kodestumper</link +></member> + <member +><link linkend="setup-file-list" +>Filliste</link +></member> + <member +><link linkend="setup-file-selector" +>Filvælger</link +></member> + <member +><link linkend="setup-cpp-generator" +>Opret ny klasse i C++</link +></member> + <member +><link linkend="setup-format" +>Formatering</link +></member> + <member +><link linkend="setup-cpp-parsing" +>Tolkning af C++</link +></member> +</simplelist> + +<sect1 id="setup-general"> +<title +>Generelle indstillinger</title> + +<para +>Generel indstilling drejer sig om de mere almindelige opgaver af at skræddersy &tdevelop; som følger: </para> +<itemizedlist> + <listitem +><para> + <link linkend="setup-main" +>Generel opsætning</link> + </para +></listitem> + <listitem +><para> + <link linkend="setup-ui" +>Valg af brugergrænsefladen</link> + </para +></listitem> + <listitem> + <itemizedlist> +<title +>Kilderedigeringsopgaver</title> + <listitem +><para> + <link linkend="setup-editor" +>Valg ef editor</link> + </para +></listitem> + <listitem +><para> + <link linkend="setup-format" +>Valg af kildeformateringsstil</link> + </para +></listitem> + <listitem +><para> + <link linkend="setup-snippets" +>Opsætning af værktøj for kodestumper</link> + </para +></listitem> + </itemizedlist> + </listitem> + <listitem +><para> + <link linkend="setup-file-selector" +>Indstilling af filvælgeren</link> + </para +></listitem> +</itemizedlist> + +<sect2 id="setup-main"> +<title +>Generel opsætning</title> + +<para +>Den <guilabel +>Generelle</guilabel +> indstillingsdialog tillader dig at definere nogen basal &tdevelop;-opførsel som sjældent ændres i dagligt arbejde. Dette drejer sig om: </para> + +<variablelist> +<varlistentry> +<term +>Generelle projekttilvalg såsom</term> +<listitem> + <itemizedlist> + <listitem +><para +>at definere en <link linkend="setup-main-projects" +>standard overmappe</link +> &tdevelop; skal bruge til nye projekter. </para +></listitem> + <listitem +><para +>at afgøre om du ønsker at &tdevelop; skal <link linkend="setup-main-preload" +>automatisk indlæse</link +> projektet du sidst arbejdede på. </para +></listitem> + </itemizedlist> + </listitem> +</varlistentry> + +<varlistentry> +<term +>Valg af en skrifttype for de mest almindeligt brugte vinduer til uddatavisning, nemlig:</term> +<listitem> + +<itemizedlist> +<listitem> +<para +><link linkend="setup-main-messages-font" +>Besked uddatavisningen</link +> &tdevelop; bruger til at kommunikere ⪚ kompileringsfremskridt, og</para> +</listitem> +<listitem> +<para +>Programuddata, som viser fejl- og tilstandsinformation angående et program som kører.</para> +</listitem> +</itemizedlist> + +</listitem> +</varlistentry> + +<varlistentry> +<term +>Nogen almindelig opførsel angående de viste linjer i <guilabel +>Besked uddatavisningens</guilabel +> vindue, nemlig:</term> +<listitem> + <itemizedlist> +<listitem> +<para +>Om lange linjer skal <link linkend="setup-main-wrap" +>ombrydes</link +>, og </para> +</listitem> +<listitem> +<para +>om <link linkend="setup-main-navigation" +>mappeindgangs og udgangsbeskeder</link +> udstedt af <command +>make</command +> skal vises.</para> +</listitem> +</itemizedlist> + +<para +><link linkend="setup-main-compile" +>detaljeniveauet</link +> af beskeder angående kompileringsprocessen vist i <guilabel +>Besked uddatavisningens</guilabel +> vindue.</para> +</listitem> +</varlistentry> +</variablelist> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="configure-general.png" format="PNG"/> + </imageobject> + <caption +><para +>Den generelle indstillingsdialog </para +></caption> + </mediaobject> +</screenshot> + +<variablelist> +<varlistentry> +<term id="setup-main-preload" +><guilabel +>Indlæs sidste projekt ved opstart</guilabel +></term> +<listitem> +<para +>Markér dette hvis du ønsker at fortsætte med at arbejde på dit sidste projekt. Dette vil få &tdevelop; til automatisk at indlæse dette projekt når der startes. Det vil sædvanligvis blive vist i den tilstand du efterlod det da du sidst arbejdede på det så du kan gå i gang med det samme. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term id="setup-main-projects"> +<guilabel +>Standard-projektmappe:</guilabel +></term> +<listitem> +<para +>Som standard bruger &tdevelop; en fælles overmappe for alle nye projekter. Indtast den absolutte sti for denne fælles mappe i feltet eller vælg den ud fra din mappestruktur. &tdevelop; vil placere de nye projekter her som en undermappe.</para> +<note +><para +>Du kan naturligvis ændre mappestien for et nyt projekt på det tidspunkt du sætter det op med <link linkend="applicationwizard" +>Programguiden</link +>. </para +></note> +</listitem> +</varlistentry> + +<varlistentry> +<term id="setup-main-messages-font" +><guilabel +>Vindueskrifttype:</guilabel +></term> +<listitem> +<para +><guilabel +>Program uddatavisningens</guilabel +> vindue bruges til at vise fejl- og tilstandsinformation for programmer der køres inde fra &tdevelop;. Disse er informationer som programmerne sædvanligvis sender til konsollen når de køres normalt. På denne måde behøver du ikke at forlade IDE når du tester det program du er ved at arbejde på. </para> +<para +>For at vælge en passende skrifttype for <guilabel +>beskeduddatavisningens</guilabel +> vindue klikkes på <guilabel +>Vinduesskrifttype</guilabel +>-knappen der viser den for øjeblikket valgte skrifttype (den siger <quote +>Luxi Sans</quote +> i illustrationen ovenfor). &kde;'s standard <guilabel +>Vælg skrifttype</guilabel +> dialog vil komme frem og herfra kan du vælge den skrifttype du ønsker skal bruges. </para> +<note +><para +>Ved første opstart initialiserer &tdevelop; denne skrifttypeindstilling til at være den standardskrifttype der er blevet indstillet for din &kde;-bruger. <emphasis +>Denne indstilling er fast</emphasis +>, så hvis du ændrer <menuchoice +><guimenuitem +>Indstillinger</guimenuitem +><guimenuitem +>Udseende & Temaer</guimenuitem +><guimenuitem +>Skrifttyper</guimenuitem +></menuchoice +> i <guilabel +>kontrolcenteret</guilabel +>, vil dette ikke påvirke denne &tdevelop; indstilling. Du vil eksplicit skulle vælge skrifttype igen for at ændre <guilabel +>Besked uddatavisnings</guilabel +> skrifttype. </para +></note> +</listitem> +</varlistentry> + +<varlistentry> +<term id="setup-main-compile" +><guilabel +>Oversætteruddata</guilabel +></term> +<listitem> +<para +>&tdevelop; forbehandler beskederne som <guilabel +>Besked uddatavisningens</guilabel +> vindue modtager under byggeprocesser for at filtrere overflødig information bort. Du kan kontrollere detaljeniveauet &tdevelop; vil vise ved at bruge dette dropned-felt. </para> +<variablelist> +<varlistentry> +<term +><guilabel +>Meget kort</guilabel +></term> +<listitem +><para +>Viser kun advarsler, fejl og filnavnene som bliver kompileret. </para +></listitem> +</varlistentry> +<varlistentry> +<term +><guilabel +>Kort</guilabel +></term> +<listitem +><para +>Undertrykker alle kompiler-flag og formaterer uddata til at være mere læseligt. </para +></listitem> +</varlistentry> +<varlistentry> +<term +><guilabel +>Fuld</guilabel +></term> +<listitem +><para +>Viser alle uddatabeskeder uændret. </para +></listitem> +</varlistentry> +</variablelist> + +<tip +><para +>Der er en anden måde at ændre detaljeniveauet for uddata fra kompileren. Højreklik blot i <guilabel +>Besked uddatavisningens</guilabel +> vindue og vælg et passende detaljeniveau fra menuen der kommer frem. </para +></tip> +</listitem> +</varlistentry> + +<varlistentry> +<term id="setup-main-wrap" +><guilabel +>Tekstombrydning</guilabel +></term> +<listitem> +<para +>Som standard vil &tdevelop; bryde lange linjer i <guilabel +>Besked uddatavisningens</guilabel +> vindue, så værdifuld information ikke nemt bliver overdet. I visse tilfælde vil dette føre til rod med lange beskedlister. Fjern afkrydsningfeltets mærke hvis du ikke ønsker at lange linjer skal brydes. </para> +<tip +><para +>Der er en anden måde at ændre linjebrydning. Klik blot i <guilabel +>Besked uddatavisningens</guilabel +> vindue og markér/afmarkér <guimenuitem +>Tekstombrydning</guimenuitem +>-indgangen i menuen som vil komme frem. </para +></tip> +</listitem> +</varlistentry> + +<varlistentry> +<term id="setup-main-navigation" +><guilabel +>Mappenavigeringsbeskeder</guilabel +></term> +<listitem> +<para +><command +>make</command +>-værktøjet vil sædvanligvis vise beskeder såsom <quote +>Entering directory</quote +>, eller <quote +>Leaving directory</quote +> når det skifter mellem de mapper det arbejder i for øjeblikket. Da dette roder i beskedlisten i <guilabel +>Besked uddatavisningens</guilabel +> vindue, undertrykker &tdevelop; disse beskeder som standard. Markér afkrydsningsfeltet hvis du ønsker at protokollere hvilke mapper <command +>make</command +> arbejdede i. </para> +<note +><para +>Ændringer i denne indstilling vil kun påvirke behandlingen af nye beskeder. Gamle mappenavigationsbeskeder vil blive holdt synlige når du slår denne funktion fra. </para +></note> +</listitem> +</varlistentry> + +<varlistentry> +<term id="ui-designer-integration" +><guilabel +>Integrering med Designer for grafisk grænseflade</guilabel +></term> +<listitem> +<para +>Dette lader dig vælge hvordan du ønsker at <filename +>.ui</filename +>-filer skal vises i &tdevelop;. &tdevelop; levereres med sin egen Designer for grafiske grænseflade som hedder KDevDesigner. Den kan enten indlejres eller køres som et separat program. Qt Designer kan også bruges til at redigere <filename +>.ui</filename +>-filer. </para> +<itemizedlist> + <listitem +><para +>Brug &tdevelop;s indlejrede Designer </para +><para +>Dette bruger &tdevelop;s egen Designer indlejret i &tdevelop;.</para +></listitem> + <listitem +><para +>Kører &tdevelop; Designer som et separat program </para +><para +>Programmet KDevDesigner køres separat i et eget vindue.</para> +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="kdevdesigner.png" format="PNG"/> + </imageobject> + <caption +><para +>KDevDesigner i eget vindue </para +></caption> + </mediaobject> +</screenshot> +</listitem> + <listitem +><para +>Kør Qt Designer </para +><para +>Qt-Designer fra installationen af Qt vil blive startet eksternt, når du klikker på en <filename +>.ui</filename +>-fil i &tdevelop;.</para +></listitem> +</itemizedlist> +</listitem> +</varlistentry> + +<varlistentry> +<term id="terminal-emulation" +><guilabel +>Terminalemulering</guilabel +></term> +<listitem> +<para +>Her vælger du hvilken terminal du vil skal integreres i KDevelop. </para> +<itemizedlist> + <listitem +><para +>Brug &kde;-indstilling </para +><para +>Bruger &kde;'s indstilling som angives i Kontrolcentret under fanebladet <guilabel +>&kde;-komponenter</guilabel +><guilabel +>Komponentvælger</guilabel +>, som angiver hvilket terminalprogram som bruges af alle &kde;-programmer som behøver en terminal.</para +></listitem> + <listitem +><para +>Anden </para +><para +>Vælg en anden terminal som er forskellig sig fra standard.</para> +</listitem> +</itemizedlist> +</listitem> +</varlistentry> + +</variablelist> + +</sect2 +> <!-- setup-main --> + +<sect2 id="setup-ui"> +<title +>Valg af brugergrænsefladen</title> + +<indexterm zone="setup-ui"> + <primary +>brugergrænseflade</primary> + <secondary +>skifte tilstand</secondary +></indexterm> +<indexterm zone="setup-ui"> + <primary +>skifte grænsefladetilstand</primary +></indexterm> + +<para +>Som allerede sagt i kapitlet <link linkend="uimodes-survey" +>Tilgængelige brugergrænseflade-tilstande</link +> er der fem forskellige måder &tdevelop;'s arbejdsområde kan sættes op, nemlig: </para> +<itemizedlist> + <listitem +><para> + <link linkend="ideal-desc" +>Forenklet IDEA-vinduestilstand</link> + </para +><para +>Dette er en forenklet version af IDEA-brugergrænsefladen. Den er designet til at være enkel og ren. Den bruger ikke heller dokkede værktøjsvisninger.</para +></listitem> + <listitem +><para> + <link linkend="ideal-desc" +>IDEA-vinduestilstand</link> + </para +><para +>Dette er en klon af IDEA-brugergrænsefladen som ligner fanebladssidetilstand, og er standardtilstanden.</para +></listitem> + <listitem +><para> + <link linkend="mdi-desc" +>Underrammetilstand</link> + </para +><para +>Alle værktøjsvisninger er dokkede i hovedrammen fra begyndelsen. Editoren og browser-visningerne eksisterer som topniveauvinduer inde i hovedrammens visningsmråde. Et typisk eksempel på denne brugergrænseflade er MS Visual Studio 6.0.</para +></listitem> + <listitem +><para> + <link linkend="tabbed-desc" +>Fanebladssidetilstand</link> + </para +><para +>Alle værktøjsvisninger er dokkedede i hovedrammen fra begyndelsen. Editoren og browser-visninger lægges ovenpå hinanden i et fanebladsvindue. Et typisk eksempel på denne brugergrænseflade er KDEStudio, en anden C++ integreret udviklingsmiljø i KDE-verdenen.</para +></listitem> + <listitem +><para> + <link linkend="toplevel-desc" +>Topniveauvinduetilstand</link> + </para +><para +>Alle editorvisninger, browser-visninger og værktøjsvisninger er topniveauvinduer (direkte på desktoppen). Hovedkomponenten indeholder kun menuen, værktøjslinjer og statuslinjen. Et typisk eksempel på denne brugergrænseflade er Borland Delphi 6.0.</para +></listitem> +</itemizedlist> + +<para +>For at skifte tilstand for brugergrænsefladen, vælges <menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil &tdevelop;...</guimenuitem +></menuchoice +> i menulinjen. Dialogen <guilabel +>Indstil &tdevelop;</guilabel +> dukker op, hvor du skal vælge <guilabel +>Brugergrænseflade</guilabel +> i træet til venstre. Dette bringer dig til indstillingssiden som vises til højre.</para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="select-user-interface-0.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>Vælg en brugergrænsefladetilstand</phrase +></textobject> + <caption +><para +>Vælg en brugergrænsefladetilstand </para +></caption> + </mediaobject> +</screenshot> + +<para +>Vælg radioknappen for grænsefladestilstanden du vil skifte til, og klik derefter på <guibutton +>O.k</guibutton +>. </para> + +<note +><para +>Glem ikke at genstarte &tdevelop; for at lade nogen af disse ændringer få virkning. </para +></note> + +<para +>Når du vælger enten<guilabel +>Simplificeret IDEAl vinduestilstand</guilabel +> eller <guilabel +>IDEAl vinduestilstand</guilabel +> eller <guilabel +>Fanebladssider tilstanden</guilabel +> vil to indstillingsafsnit mere blive tilgængelige: <link linkend="setup-ui-tabs" +>Brug faneblade</link +> og <link linkend="setup-ui-hover" +>Brug luk ved svævning</link +>. Disse tillader at indstille under hvilke omstændigheder faneblade vil blive vist over dokumentvinduerne og om du kan lukke dokumentet ved at klikke på fanebladsikonen. </para> + +<para +>I <guilabel +>Simplificeret IDEAl vinduestilstand</guilabel +> og i <guilabel +>IDEAl vinduestilstand</guilabel +> er der kun et til indstillingsafsnit, <link linkend="setup-ui-toolview" +>Værktøjsvisningens faneblads-layout</link +> som effektivt tillader at vælge mellem forskellige størrelser af værktøjsvisningens faneblade, som omgiver hovedarbejdsområdet i denne tilstand. </para> + +<variablelist> +<varlistentry> +<term id="setup-ui-tabs" +>Indstilling af dokumentationens visning af fanebladslinje</term> +<listitem> +<para +>I IDEAl og fanebladssider-tislandene vil der være navngivne faneblade for oven i dokumentvinduerne som standard, så du kan nemt vælge forskellige dokumenter med et klik med &LMB;. Hvis du foretrækker at sørge for mere plads for dokumentets vinduer i &tdevelop;'s hovedarbejdsområde, kan du ændre en anden opførsel i indstillingsafsnittet <guilabel +>Brug faneblade</guilabel +>. </para> + +<variablelist> +<varlistentry> + <term +><guilabel +>Altid</guilabel +></term> + <listitem +><para +>Dette er standarden — vis et faneblad der består af en ikon og dokumentets navn for oven i ethvert dokumentvindue i &tdevelop;'s hovedområde. </para +></listitem> +</varlistentry> +<varlistentry> + <term +><guilabel +>Når der er mere end én</guilabel +></term> + <listitem +><para +>Vis ikke et faneblad når der kun vises et dokument. Hvis der er mere end et dokument, vil &tdevelop; imidlertid vise en tilsvarende fanebladslinje som i afsnittet<guilabel +>Altid</guilabel +> ovenfor. Du vil måske ønske at vælge denne tilstand hvis du arbejder på et enkelt dokument for det meste af tiden, da dette giver mere lodret plads. </para +></listitem> +</varlistentry> +<varlistentry> + <term +><guilabel +>Aldrig</guilabel +></term> + <listitem +><para +>Vis aldrig noget dokuments faneblad. Du vil måske foretrække denne tilstand hvis du sjældent bruger musen til at skifte mellem dokumenter. Det giver mere lodret plads for alle dokumentvinduer. For at vælge et andet dokumentvindue eller for at lukke et, bruges &tdevelop;'s <guimenu +>Vindue</guimenu +>-menu. </para +></listitem> +</varlistentry> +</variablelist> +</listitem> +</varlistentry> + +<varlistentry> +<term id="setup-ui-hover" +>Opsætning af at lukke et dokument ved at klikke på dets faneblad</term> +<listitem> +<para +>Hvis du indstillede &tdevelop; til at vise dokumentfanebladslinjen, enten altid eller når mere end et dokument vises i hovedarbejdsområdet, kan du give tilføje funktionalitet til fanebladene udover deres evne til dokumentvalg. Brug indstillingsafsnittet <guilabel +>Brug luk ved svævning</guilabel +> til dette. </para> + +<variablelist> +<varlistentry> + <term +><guilabel +>Nej</guilabel +></term> + <listitem +><para +>Dette er standardopførslen. Ingen ekstra funktionalitet er tilføjet fanebladene. De kan kun bruges til at vælge dokumentvinduer ved klik med &LMB;. </para +></listitem> +</varlistentry> +<varlistentry> + <term +><guilabel +>Ja</guilabel +></term> + <listitem +><para +>Hvis du valgte denne radioknap, vil &tdevelop; tillade dig at lukke et dokumentvindue ved et klik med &LMB;. Brug musen til at pege på den lille ikon på den venstre kant af fanebladet. Den vil så ændres til et lukkesymbol. Klik så med &LMB; på dette ændrede symbol, så vil &tdevelop; lukke det tilsvarende dokumentvindue. </para +></listitem> +</varlistentry> +<varlistentry> + <term +><guilabel +>Ja, forsinket</guilabel +></term> + <listitem +><para +>Hvis denne radioknap er valgt, vil &tdevelop; tillade at lukke et dokumentvindue som vist i <guilabel +>Ja</guilabel +>-tilfældet ovenfor. Ikonen vil imidlertid ikke blive ændret med det samme, men der vil være en kort forsinkelse før lukkeikonen dukker op. </para +></listitem> +</varlistentry> +</variablelist> +</listitem> +</varlistentry> + +<varlistentry> +<term id="setup-ui-toolview" +>Indstilling af værktøjslinjens faneblads-layout</term> +<listitem> +<para +>Indstillingsafsnittet <guilabel +>Værktøjsvisningen faneblads-layout</guilabel +> vil kun være tilgængeligt i IDEAl tilstand. Brug disse radioknapper til opsætning af udseendet af værktøjsvisningens faneblade som omgiver hovedarbejdsområdet i denne tilstand. </para> + +<variablelist> +<varlistentry> + <term +><guilabel +>Ikoner</guilabel +></term> + <listitem> + <para +>Hvert faneblaf vil kun vise en ikon. Hvis den tilknyttede værktøjsvisning vises, vil fanebladet blive åbnet og en beskrivende tekst for denne værktøjsvisning vil blive vist. Du vil måske ønske at bruge denne tilstand hvis du arbejder med en skærm med begrænset opløsning. </para> + <para +>Ikonerne er imidlertid ikke særligt beskrivende. Hvis du ønsker at finde ud af hvilken værktøjsvisning der er knyttet til hvilket faneblad, så peg på det med musen og vent et sekund. Et kort værktøjsvink vil så dukke op med værktøjsvisningen navn. </para> + </listitem> +</varlistentry> +<varlistentry> + <term +><guilabel +>Tekst</guilabel +></term> + <listitem +><para +>Dette er standardværktøjsvisningens fanebladsvisningstilstand. Hvert faneblad viser navnet på sin tilknyttede værktøjsvisning. </para +></listitem> +</varlistentry> +<varlistentry> + <term +><guilabel +>Tekst og ikoner</guilabel +></term> + <listitem +><para +>Hvis standardteksten i værktøjsvisningen ser for flad ud og du arbejder på en skærm med høj opløsning, vil du muligvis ønske at vælge denne radioknap. Det vil få navnet på den tilknyttede værktøjsvisning til at blive vist på hvert faneblad plus en ikon til venstre for den, hvilket gør det nemmere at skelne mellem fanebladene. Se illustrationen <link linkend="folded-toolview-tabs" +>Foldede værktøjsvisnings-faneblade</link +> nedenfor for et eksempel. </para +></listitem> +</varlistentry> +</variablelist> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Foldede værktøjsvisningfaneblade</term> +<listitem> +<para +>Hvis du valgte IDEAl-tilstandens værktøjsvisningsfaneblade til at vise tekster (med eller uden tilhørtende ikoner) behøver du ikke at bekymre dig om at bliver skjult bagved et eller andet værktøjsvisningsvindue. Hvis et af de nederste vinduer optager mere plads end der er til at vise alle (lodrette) faneblade, vil de blive foldet rundt som denne illustration viser: </para> + +<screenshot> + <mediaobject id="folded-toolview-tabs"> + <imageobject> + <imagedata fileref="folded-tabs.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>Værktøjsvisningens faneblade foldet til ikke at blive skjult bag et andet vindue</phrase +></textobject> + <caption +><para +>Værktøjsvisningens faneblade foldet til ikke at blive skjult bag et andet vindue </para +></caption> + </mediaobject> +</screenshot> + +<note +><para +>Det aktive værktøjsvisningsvindue skal vises fast (ikke-overlappende tilstand), og dele arbejdsområdet med de andre vinduer, for at påtvinge sådan fanebladsfoldning. Tryk på den lille firkant i vinduets kant for at opnå dette som vist i eksemplet. </para +></note> +</listitem> +</varlistentry> +</variablelist> + +</sect2 +> <!-- setup-ui --> + +<sect2 id="setup-templates"> +<title +>Filskabeloner</title> +<!--TODO fill--><para +></para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="configure-file-templates.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>Indstil filskabeloner</phrase +></textobject> + <caption +><para +>Indstil filskabeloner </para +></caption> + </mediaobject> +</screenshot> +</sect2 +> <!-- setup-templates --> + +<sect2 id="setup-editor"> +<title +>Valg af editor</title> + +<para +>&tdevelop; tillader dig at vælge din foretrukne teksteditor. Markér <guilabel +>Editor</guilabel +>-indgangen i venstre side af markeringstræet i <guilabel +>Indstil KDevelop</guilabel +>-vinduet. Følgende dialog vil så blive vist i højre side. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="configure-editor.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>Valg en editor</phrase +></textobject> + <caption +><para +>Vælg en editor </para +></caption> + </mediaobject> +</screenshot> + +<para +>For at vælge en ny editor, klikkes på pilen i listefeltet der dropper ned. Afhængig af de editor-partgrænseflader din udgave af &kde; har kompileret, vil du blive givet en liste af editorer du kan vælge fra (se <link linkend="setup-editor-kparts" +>Vigtigt</link +> noten nedefor om dette). Klik på den editor du foretrækker og klik på <guilabel +>O.k</guilabel +>. For øjeblikket er der to muligheder: </para> + +<variablelist> + <varlistentry> + <term +><guilabel +>Indlejret avanceret teksteditor</guilabel +></term> + <listitem +><para +>Dette er &kde;'s standard <application +>Kate</application +> editor-part. </para +></listitem> + </varlistentry> + + <varlistentry> + <term +><guilabel +>Qt Designer baseret teksteditor</guilabel +></term> + <listitem +><para +>Dette er den editor &Qt; sørger for i sin <application +>Designer</application +> komponent. </para +></listitem> + </varlistentry> +</variablelist> + +<para +>Disse editor-grænseflader er fuldt integreret &tdevelop;' IDE-begreb. Specielt muligheden for at springe hen til den kildekodelinje der giver problemer ved blot at klikke på en fejlbesked i <guilabel +>Besked uddatavisningens</guilabel +> vindue, er der sørget for. </para> + +<note +><para +>Ændring af editor vil ikke påvirke allerede åbne filer. Der er to måder at gå videre på. Enten luk alle åbne tekstvinduer og åbn dem igen en ad gangen. Eller luk hele projektet og åbn det igen. Vinduerne vil så automatisk åbne i den nye teksteditors grænseflade. </para +></note> + +<important id="setup-editor-kparts" +><para +>KDevelop lader dig bruge editorgrænseflader som er registreret af &kde; og som sørger for en KatePart-grænseflade. Hvis du mangler et af valgene vist ovenfor, så kontrollér din &kde;-installation for om den tilsvarende KPart er korrekt installeret. </para +></important> + +<para +>Hvad der skal gøres hvis filen er ændret eksternt:</para> +<variablelist> + <varlistentry> + <term +><guilabel +>Gør ingenting</guilabel +></term> + <listitem +><para +>Filen markeres som ændret eksternt, og brugeren bliver bedt om at bekræfte alle forsøg på at overskrive den. </para +></listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Underret brugeren</guilabel +></term> + <listitem +><para +>En dialog underretter brugeren at filen er ændret, og tilbyder brugeren at opdatere filen. </para +></listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Genindlæs filen automatisk hvis det er sikkert, underret ellers brugeren</guilabel +></term> + <listitem +><para +>Alle filer som ikke er ændrede i hukommelsen, opdateres og en advarsel vises ved eventuelle konflikter. </para +></listitem> + </varlistentry> +</variablelist> +</sect2 +> <!-- setup-editor --> + +<sect2 id="setup-abbrev"> +<title +>Forkortelser til ordkomplettering</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect2 +> <!-- setup-abbrev --> + +<sect2 id="setup-scripting"> +<title +>Scripter</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect2 +> <!-- setup-scripting --> + +<sect2 id="setup-menu-standard"> +<title +>Tilføjelse af &kde;'s standardprogrammer til værktøjsmenuen</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect2 +> <!-- setup-menu-standard Tools Menu--> + +<sect2 id="setup-menu-external"> +<title +>Tilføjelse af eksterne programmer til menuerne</title> + +<para +>(... endnu ikke skrevet ...) </para> + +<sect3 id="setup-menu-external-tools"> +<title +>Tilføjer til værktøjsmenuen</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect3 +> <!-- setup-menu-external-tools --> + +<sect3 id="setup-menu-external-filecontext"> +<title +>Tilføjelse til Fil-sammenhængsmenu</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect3 +> <!-- setup-menu-external-filecontext --> + +<sect3 id="setup-menu-external-dircontext"> +<title +>Tilføjelse til mappesammenhængsmenu</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect3 +> <!-- setup-menu-external-dircontext --> + +</sect2 +> <!-- setup-menu-external --> + +<sect2 id="setup-format"> +<title +>Valg af kildeformateringsstil</title> + +<para +>&tdevelop; formaterer automatisk en kildetekst i en prædefineret stil. Denne stil er meget indstillelig. </para> + +<note +><para +>Funktionen til reformatering af kilden er for øjeblikket kun tilgængelig for C, C++, og &Java;. Specielt kan du ikke bruge den til script-sprog som ⪚ PHP. Det er fordi &tdevelop; bruger <ulink url="http://astyle.sourceforge.net/" +>astyle</ulink +>-programmet til at implementere denne funktion. </para +></note> + +<para +>For at indstille en specifik formateringsstil, vælges <menuchoice +> <guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil &tdevelop;...</guimenuitem +> </menuchoice +> fra menulinjen. <guilabel +>Brugerindstil &tdevelop;</guilabel +> dialogen vil komme frem, hvor du skal vælge <guilabel +>Kildeformatering</guilabel +> i træet til venstre. Dette vil vise en serie af tre indstillingsdialogfaneblade til højre, nemlig en <link linkend="setup-format-general" +>Generel formatering opsætning</link +>, a <link linkend="setup-format-indent" +>Indrykningsstil opsætning</link +>, og en <link linkend="setup-format-other" +>Anden formatering opsætning</link +>. </para> + +<tip +><para +>Enhver ændring af stil anvendes kun på ny tekst. Hvis du ønsker at ændre formateringsstil for en allerede eksisterende kildetekst må du eksplicit bruge <menuchoice +><guimenu +>Redigér</guimenu +><guimenuitem +>Omformatér kilde</guimenuitem +></menuchoice +>-kommandoen. </para +></tip> + +<note +><para +>Det nøjagtige resultat af disse stilformateringsdefinitioner afhænger af den <link linkend="setup-editor" +>editor</link +> du bruger. For øjeblikket er de fleste indstillinger skræddersyet til Kate editor-parten (den <quote +>Indlejrede Avancerede Tekst Editor</quote +>). Visse andre editorer (⪚ Qt-editoren) afhænger måske af deres egen opsætning. Du vil skulle eksperimentere i dette tilfælde for at finde ud af den nøjagtige virkning af den stil-opsætning der sørges for her. </para +></note> + +<warning +><para +>Der kan være inkompatibiliteter mellem indstillingsstilens opsætning der sørges for her og den editor du bruger. I ekstreme tilfælde kunne det endda ødelægge dine filer. Sørg for at du har en sikkerhedskopi af dine kildefiler før du prøver denne opsætning med en editor der ikke er standard for KDE. </para +></warning> + +<sect3 id="setup-format-general"> +<title +>Generel formateringsopsætning</title> + +<para +><guilabel +>Generelt</guilabel +>-fanebladet i <guilabel +>Kildeformaterings</guilabel +>-dialog lader dig vælge en ud af fem prædefinerede kildeformat-stiler. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="SF-general.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>Generel opsætning af kildeformat-stil</phrase +></textobject> + <caption +><para +>Generel opsætning af kildeformat-stil </para +></caption> + </mediaobject> +</screenshot> + +<para +>Et formateret eksempel på kilde vil blive vist i feltet til højre. Hvis ingen af de prædefinerede stiler passer dig, kan du klikke på radioknappen <guilabel +>Brugerdefineret</guilabel +> for oven, og definere din egen kildeformateringstil i de andre to faneblade der så vil blive tilgængelige. </para> + +<note +><para +>For øjeblikket er det kun de prædefinerede kildeformateringsstiler der vil blive demonstreret ved en eksempeltekst. Hvis du beslutter dig for at definere din egen stil, vil ingen eksempelvisning være tilgængelig. Du vil skulle eksperimenter på en egentlig kildetekst for at skræddersy opsætningen efter din smag. </para +></note> + +</sect3 +> <!-- setup-format-general --> + +<sect3 id="setup-format-indent"> +<title +>Opsætning af indrykningsstil</title> + +<para +>Korrekt indrykning er en af hovedmetoderne til at øge læseligheden af en kildetekst. Hvis du vælger <guilabel +>Indryknings</guilabel +>fanebladet i <guilabel +>Formatering af kildekode</guilabel +>dialogen, vil du blive præsenteret for en serie af valg for indrykningsformatering, grupperet i tre felter som følger. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="SF-indent.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>Opsætning af indrykningsstil</phrase +></textobject> + <caption +><para +>Opsætning af indrykningsstil </para +></caption> + </mediaobject> +</screenshot> + +<variablelist> +<varlistentry> +<term +>Standard-opsætning</term> +<listitem> +<para +>Det forudindstillede valg vil få kildeteksten til at ligne ANSI formateringsstil:</para> + +<screen +>namespace foospace +{ + int Foo() + { + if (isBar) + { + bar(); + return 1; + } + else + return 0; + } +} +</screen> +</listitem> +</varlistentry> + +<varlistentry> +<term id="setup-format-indent-filling" +>Definition af indrykningsbredde og tegn</term> +<listitem> +<para +>Radioknapperne grupperet i <guilabel +>Udfyldnings</guilabel +>gruppen definerer hvordan indrykninger i kildeteksten vil blive tegnet.</para> + +<variablelist> + <varlistentry> + <term +><guilabel +>Brug tabulatorer</guilabel +></term> + <listitem> + <para +>Dette vil få editoren til at indsætte tab-tegn for hvert indrykningsniveau. Tab-bredden er prædefineret i opsætningen af editoren (8 eller 4 tegnsøjler sædvanligvis). Brug <menuchoice +><guimenu +>Opsætning</guimenu +><guimenuitem +>Indstil editor...</guimenuitem +></menuchoice +> til at omdefinere det. </para> + <note +><para +>Den egentlige procedure for defintion af tab-bredde afhænger af den editor du valgte i <link linkend="setup-editor" +>Valg ef editor</link +> indstillingstrinnet. Du vil skulle slå op i den tilsvarende editors hjælp for at find ud af det. </para +></note> + </listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Brug mellemrum</guilabel +></term> + <listitem +><para +>Hvis du vælger denne radioknap, vil editoren indtaste et antal mellemrum for hvert indrykningsniveau. Ændr antallet fra standarden på 2 til den indrykningsbredde du foretrækker. </para +></listitem> + </varlistentry> +</variablelist> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Indrykkede entiteter</term> +<listitem> +<para +>Dette definerer hvilke af (C/C++) entiteterne der vil blive formateret med en ekstra indrykning udover det nuværende indrykningsniveau.</para> + +<para +>Som standard er det kun <guilabel +>navnerum</guilabel +> og <guilabel +>etiketter</guilabel +> der bliver ekstra indrykket. Du vil måske ønske at eksperimentere med forskellige indstillinger for at skræddersy disse ekstra indrykninger efter din smag.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Fortsættelse</term> +<listitem> +<para +>Indstillingerne grupperet her anvendes på de tilfælde hvor kildeformateringen automatisk ombryder lange kildelinjer. Der er to specialtilfælde der tages hensyn til, nemlig at i dybe indrykninger skal der være nok plads til at kilde og betingelser kan få et ekstra indrykningsniveau så de fortsætter med at stå tydeligt frem. </para> + +<note +><para +>Dette gælder kun <emphasis +>statisk tekstombrydningstilfalde</emphasis +> hvor en fast maksimal linjebredde bruges i kildeteksten. Hvis du sætter din editor op til dynamisk kun at ombryde lange linjer i visningen (hvilket er muligt i &kate; editor-parten) vil virkningerne af disse indstillinger sædvanligvis ikke ses. </para +></note> + +<variablelist> + <varlistentry> + <term +><guilabel +>Maksimum i udsagn</guilabel +></term> + <listitem> + <para +>Denne indstilling begrænser den maksimalt mulige indrykning for fortsættelsen af linjer, så der er nok plads tilbage til at teksten er læsbar. Ingen fortsættelse af linjer vil nogensinde blive indrykket udover antallet af søjler du vælger i dette felt. </para> + <para +>Som standard er det sat til 40 tegn (det halve af en standardside på 80 tegn). Du vil måske ønske at øge denne værdi på grund af bredere papir (f.eks. hvis du bruger landskabsudskrift for dine kilder). Eller mindske værdien fordi du ønsker at have en større margin for din udskrift. </para> + </listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Minimum i betinget</guilabel +></term> + <listitem> + <para +>Betingede eller kilde der ⪚ følger en tilknytningsoperator skal sædvanligvis have en ekstra indrykning på fortsættelseslinjer for at teksten skal være læsbar. Mængden af denne ekstra indrykning defineres her. </para> + <para +>Standarden er sat til <quote +>To gange det nuværende</quote +> hvilket betyder at fortsatte betingede vil få et ekstra indrykningsniveau på den standard indrykningsstørrelse du valgte i <link linkend="setup-format-indent-filling" +>Udfyldning</link +>-gruppen. Du kan ændre denne ekstra indrykning til en anden fast bredde (inklusive nul) ved brug af pilene eller ved at indtaste værdien direkte. </para> + </listitem> + </varlistentry> +</variablelist> +</listitem> +</varlistentry> +</variablelist> + +</sect3 +> <!-- setup-format-indent --> + +<sect3 id="setup-format-other"> +<title +>Anden opsætning af formatering</title> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="SF-other.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>Anden opsætning af kildeformateringsstil</phrase +></textobject> + <caption +><para +>Anden opsætning af kildeformateringsstil </para +></caption> + </mediaobject> +</screenshot> + +<variablelist> +<varlistentry> +<term +>Kontrol af placering af parenteser</term> +<listitem> +<para +>Radioknapperne (noget misvisende) <guilabel +>Parentes</guilabel +>-grupper kontrollerer positionen af blokafgrænsningsparenteser i en (C/C++) kildetekst. Der er tre muligheder ud fra hvilke du kan vælge.</para> + +<variablelist> + <varlistentry> + <term +><guilabel +>Brud</guilabel +></term> + <listitem> + <para +>Dette indsætter et linjebrud før hver åbningsparentes. Begge afgrænsende parenteser for en vilkårlig blok vil blive puttet på samme indrykningsniveau som blokkens hovedudsagn.</para> + +<screen +>namespace foospace +{ + int Foo() + { + if (isBar) + { + bar(); + return 1; + } + else + return 0; + } +} +</screen> + </listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Tilknyt</guilabel +></term> + <listitem> + <para +>Dette vil holde åbningsparentesen for en blok på linje med blokhovedets udsagn. Afsluttende parenteser vil være på samme indrykningsniveau som blokkens hovedudsagn. <token +>else</token +> for et <token +>if</token +> udsagn vil blive holdt på linje med de afsluttende parenteser for den foregående blok. </para> +<screen +>namespace foospace { + int Foo() { + if (isBar) { + bar(); + return 1; + } else + return 0; + } +} +</screen> + </listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Linux-stil</guilabel +></term> + <listitem> + <para +>Dette er et kompromis mellem stilerne på listen ovenfor. Funktionelle blokafgrænsningsparenteser vil blive puttet på ekstra linjer. Parenteser der åbner en blok i et betingelses- eller løkke-udsagn vil blive holdt i linje. </para> +<screen +>namespace foospace +{ + int Foo() + { + if (isBar) { + bar(); + return 1; + } else + return 0; + } +} +</screen> + </listitem> + </varlistentry> +</variablelist> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Kontrol af ekstra mellemrum</term> +<listitem> +<para +>Som standard minimerer &tdevelop; brugen af mellemrum i kildetekster. </para> + + +<screen +>if (isBar(fooArg)==barValue) +</screen> + +<para +>Du vil måske øge læsbarheden hvis du tvinger kildeformateringen til at indsætte ekstra mellemrum på specielle steder.</para> + +<variablelist> + <varlistentry> + <term +><guilabel +>Tilføj mellemrum rundt om parenteser</guilabel +></term> + <listitem> + <para +>Det der rent faktisk menes er at tilføje mellemrum omkring den tekst der puttes ind i parenteserne. Dette øger læsbarheden af funktionsargumenter og betingede.</para> +<screen +>if ( isBar( fooArg )==barValue ) +</screen> + </listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Tilføj mellemrum omkring operatorer</guilabel +></term> + <listitem> + <para +>Dette vil putte mellemrum omkring tilknytnings- og sammenligningsoperatorer for at øge læsbarheden.</para> +<screen +>if (isBar(fooArg) == barValue) +</screen> + </listitem> + </varlistentry> +</variablelist> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Kontrol af formateringen af en-linjes konstruktor</term> +<listitem> +<para +>Der er nogle få tilfælde hvor du ikke ønsker at kildeformateringen skal opdel en lang linje. For C/C++ kode kan dette kontrolleres her.</para> + +<variablelist> + <varlistentry> + <term +><guilabel +>Behold en-linjes udsagn</guilabel +></term> + <listitem +><para +>Dette holder en-linjes udsagn sammen i visse situationer, selv om de går udover en fast maksimal linjelængde. </para +></listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Behold en-linje blokke</guilabel +></term> + <listitem +><para +>Dette holder en-linjes blokke sammen i visse situationer, selv om de går udover en fast maksimal linjelængde. </para +></listitem> + </varlistentry> +</variablelist> +</listitem> +</varlistentry> +</variablelist> + + +</sect3 +> <!-- setup-format-other --> + +</sect2 +> <!-- setup-format --> + +<sect2 id="setup-snippets"> +<title +>Opsætning af værktøjet for kodestumper</title> + +<para +>Når der redigeres i &tdevelop; kan du ofte opbevare brugte dele af kode som <link linkend="editing-snippets" +>Kodestumper</link +>. For at indstille mulighederne med kodestumper vælges <menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil &tdevelop;...</guimenuitem +></menuchoice +> i menulinjen. Dialogen <guilabel +>Indstil &tdevelop;</guilabel +> dukker op, hvor du skal vælge <guilabel +>Kodestumper</guilabel +> i feltet til venstre. Dette bringer dig til følgende indstillingsdialog som vises til højre: </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="configure-snippets.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>Indstilling af værktøjet for kodestumper</phrase +></textobject> + <caption +><para +>Indstilling af værktøjet for kodestumper </para +></caption> + </mediaobject> +</screenshot> + +<variablelist> +<varlistentry> +<term +>Aktivér forhåndsvisning af kodestump</term> +<listitem> +<para +>Markér <guilabel +>Vis kodestumpens tekst som værktøjsvink</guilabel +> hvis du ønsker at vie den opbevarede tekst som et værktøjsvink, når du holder musemarkøren titlen på kodestumpen.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Arbejde med kodestumpsvariabler</term> +<listitem> +<para +><guilabel +>Kodestumper</guilabel +>-værktøjet tillader en variabel tekst på prædefinerede steder nårsomhelst du indsætter en kodestump i en fil. For at opnå dette har <guilabel +>Kodestumper</guilabel +> sin egen variabel mekanisme. Du kan indstille dens opførsel i <guilabel +>Variabler</guilabel +>-gruppen.</para> + +<variablelist> + <varlistentry> + <term +><guilabel +>Afgrænser</guilabel +></term> + <listitem +><para +><guilabel +>Kodestumper</guilabel +>-værktøjet adskiller variabler i teksten ved at omgive variabelnavnet med specielle afgrænsersymboler. For at bruge dine egne afgrænsningssymboler, kan det prædefinerede <guilabel +>$</guilabel +>-tegn ændres i <guilabel +>Afgrænser</guilabel +>-feltet. </para +></listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Inputmetode for variabler</guilabel +></term> + <listitem +><itemizedlist> + <listitem +><para +><guilabel +>Enkelt dialog for hver variabel indenfor en kodestump</guilabel +> – vil få en adskilt dialog frem for hver variabel som værktøjet finder når den valgte kodestump indsættes. </para +></listitem> + <listitem +><para +><guilabel +>En dialog for alle variabler indefor en kodestump</guilabel +> – vil få en fælles dialog frem hvor brugeren skal udfylde værdierne for alle variabler før kodestumpen vil blive indsat </para +></listitem> + </itemizedlist +></listitem> + </varlistentry> +</variablelist> +</listitem> +</varlistentry> +</variablelist> + +</sect2 +> <!-- setup-snippets --> + +<sect2 id="setup-file-list"> +<title +>Filliste</title> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect2 +> <!-- setup-file-list--> + +<sect2 id="setup-file-selector"> +<title +>Indstilling af filvælger</title> + +<para +>&tdevelop; sørger for en <guilabel +>Filvælger</guilabel +>-plugin som, når den bliver indlæst ved opstart, tillader at navigere til en vilkårlig fil eller mappe på systemer. </para> + +<screenshot id="setup-fileselector-image"> + <mediaobject> + <imageobject> + <imagedata fileref="file-selector.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>Filvælgeren IDEAl-tilstand</phrase +></textobject> + <caption +><para +>Filvælgeren (IDEAl-tilstand) </para +></caption> + </mediaobject> +</screenshot> + +<para +><guilabel +>Filvælgerens</guilabel +> opførsel kan indstilles.Vælg <menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil &tdevelop;...</guimenuitem +></menuchoice +> i menulinjen. Dialogen <guilabel +>Indstil &tdevelop;</guilabel +> dukker op, hvor du skal vælge <guilabel +>Filvælger</guilabel +> i feltet til venstre. Dette bringer dig til følgende dialog som vises i højre side:</para> + + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="configure-file-selector.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>Indstilling af filvælger</phrase +></textobject> + <caption +><para +>Indstilling af filvælger </para +></caption> + </mediaobject> +</screenshot> + +<variablelist> +<varlistentry> +<term +>Indstilling af værktøjslinje</term> +<listitem> +<para +>Der er en værktøjslinje foroven i <guilabel +>Filvælgeren</guilabel +> som kan indstilles som sædvanligt i <guilabel +>Værktøjslinje</guilabel +>-gruppen.</para> + +<procedure id="setup-fileselector-add-action"> + <title +>Tilføj en handling til værktøjslinjen</title> + <step> + <para +>Vælg et punkt i listen til højre <guilabel +>Valgte handlinger</guilabel +> hvorefter de nye handlinger skullevære indsat. </para> + </step> + <step> + <para +>Vælg den handling der skal indsættes i listen til venstre <guilabel +>Tilgængelige handlinger</guilabel +>. </para> + </step> + <step> + <para +>Klik på den øverste (højre) pil mellem de to lister. </para> + <para +>Handlingen vil blive fjernet fra listen af<guilabel +>Tilgængelige handlinger</guilabel +> og indsat i listen af <guilabel +>Valgte handlinger</guilabel +> under det valgte punkt. </para> + </step> +</procedure> + +<procedure> + <title +>Fjern en handling fra værktøjslinjen</title> + <step> + <para +>Vælg punktet der skal fjernes i listen i højre side <guilabel +>Valgte handlinger</guilabel +>. </para> + </step> + <step> + <para +>Klik på den nederste (venstre) pil mellem de to lister. </para> + <para +>Det valgte punkt vil blive fjernet fra listen af <guilabel +>Valgte handlinger</guilabel +> og puttet tilbage i listen af <guilabel +>Tilgængelige handlinger</guilabel +>. </para> + </step> +</procedure> + +<procedure> + <title +>Omarrangér handlingerne på værktøjslinjen</title> + <step> + <para +>Vælg handlingen der skal flyttes i listen til højre <guilabel +>Valgte handlinger</guilabel +>. </para> + </step> + <step> + <para +>Klik på op- eller ned-pilen til højre for denne liste. </para> + <para +>Det valgte punkt vil blive flyttet op eller ned på listen af <guilabel +>Valgte handlinger</guilabel +>. </para> + </step> +</procedure> +</listitem> +</varlistentry> + +<varlistentry> +<term id="setup-fileselector-autosync" +>Definition af hvornår indhold skal ændres</term> +<listitem> +<para +>Opdatering af indholdet i <guilabel +>Filvælger</guilabel +>-vinduet tager tid og ressourcer, især når der skiftes til en anden mappe. Derfor er <guilabel +>Filvælgeren</guilabel +> som standard sat op på en sådan måde at dens indhold kun ændres når der bedes om det, &ie; når du vælger en anden mappe eller når du eksplicit ønsker at opdatere dens indhold. </para> + +<note +><para +>Klik på <guilabel +>Genindlæs</guilabel +>-knappen i værktøjslinjen for at opdatere indholdet af <guilabel +>Filvælgeren</guilabel +>. Denne værktøjslinjeknap er imidlertid ikke til stede som standard. Du skal først <link linkend="setup-fileselector-add-action" +>indsætte den der</link +>. </para +></note> + +<para +>Du kan indstille <guilabel +>Filvælgeren</guilabel +> til at reflektere visse ændringer i dit arbejde med det samme. Indstillingerne i <guilabel +>Auto-synkronisering</guilabel +>-gruppen af indstillingsdialoge er ansvarlige for dette. </para> + +<variablelist> + <varlistentry> + <term +><guilabel +>Når et dokument bliver aktivt</guilabel +></term> + <listitem +><para +>Hvis du afkrydser dette felt, vil indholdet i <guilabel +>Filvælger</guilabel +>-vinduet blive opdateret hver gang du går til et andet allerede åbent dokument, ⪚ når du klikker på det tilsvarende redigeringsvindue i IDEAl-tilstand. Om nødvendigt vil <guilabel +>Filbælgeren</guilabel +> skifte til mappen som filen tilhører og opdatere visningen til at vise det egentlige indhold der. </para +></listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Når et dokument åbnes</guilabel +></term> + <listitem +><para +>Hvis du afkrydser dette felt, vil indholdet i <guilabel +>Filvælger</guilabel +>-vinduet blive opdateret hver gang et dokument bliver åbnet, ⪚ med <menuchoice +><guimenu +>Fil</guimenu +><guimenuitem +>Åbn</guimenuitem +></menuchoice +>-menuen. Om nødvendigt vil <guilabel +>Filbælgeren</guilabel +> skifte til mappen som filen tilhører og opdatere visningen til at vise det egentlige indhold der. </para +></listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Når en filvælger bliver synlig</guilabel +></term> + <listitem +><para +>Hvis du afkrydser dette felt, vil indholdet i <guilabel +>Filvælger</guilabel +>-vinduet blive opdateret når den bliver synlig igen. Om nødvendigt vil <guilabel +>Filbælgeren</guilabel +> skifte til mappen som filen tilhører og opdatere visningen til at vise det egentlige indhold der. </para +></listitem> + </varlistentry> +</variablelist> + +<para +>Du kan frit kombinere disse indstillinger for at skræddersy aktualiseringsopførslen af <guilabel +>Filvælgeren</guilabel +> efter din smag. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Kontrol af historikken for kombinationsfelterne</term> +<listitem> +<para +>Der er to kombinationsfelter foroven og forneden i <guilabel +>Filvælgerens</guilabel +> indholdsvindue som kontrollerer amppen der skal vises (øverste kombinationsfelt) og filtrene der skal anvendes på filvisningen (nederste kombinationsfelt). En historik af de mest nylige indstillinger beholdes i indtastningsfeltet for hvert kombinationsfelt. Du kan indstille antallet af historik-indgange som følger.</para> + +<variablelist> + <varlistentry> + <term +><guilabel +>Husk steder</guilabel +></term> + <listitem +><para +>Indtast det maksimale antal mappevalg det øverste kombinationsfelt skal huske. </para +></listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Husk filtre</guilabel +></term> + <listitem +><para +>Indtast det maksimale antal filterdefinitioner det nederste kombinationsfelt skal huske. </para +></listitem> + </varlistentry> + +<varlistentry> +<term +>Kontrol af hvad der skal huskes mellem sessioner</term> +<listitem> +<para +>Som standard er <guilabel +>Filvælgeren</guilabel +> sat op så den viser den sidste session igen ved næste opstart af &tdevelop;. Du kan ændre denne opførsel i <guilabel +>Session</guilabel +>-indstillingsgruppen. </para> + +<note +><para +>Hvis &tdevelop; blev automatisk genstartet af &kde;'s sessionhåndtering vil ændringer af disse indstillinger ingen virkning have. I dette tilfælde vil sted- og filterindstillinger fra den sidste &kde;-session altid blive genoprettet. </para +></note> +</listitem> +</varlistentry> + + <varlistentry> + <term +><guilabel +>Genopret sted</guilabel +></term> + <listitem> + <para +>Fjern mærket fra afkrydsningsfeltet hvis du ikke ønsker at det viste sted skal huskes mellem sessioner. </para> + <note +><para +>Hvis du valgte en af <link linkend="setup-fileselector-autosync" +>opdatér automatisk</link +> indstillingerne vil det viste sted muligvis blive ændret automatisk uanset hvad der er blevet husket fra nylige sessioner. </para +></note> + </listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Genopret filtre</guilabel +></term> + <listitem> + <para +>Fjern mærket fra afkrydsningsfeltet hvis du ikke ønsker at de anvendte filtre skal huskes mellem sessioner. </para> + </listitem> + </varlistentry> +</variablelist> +</listitem> +</varlistentry> +</variablelist> + +</sect2 +> <!-- setup-file-selector --> + +<sect2 id="setup-cpp-generator"> +<title +>Opret ny klasse i C++</title> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect2 +> <!-- setup-c++-generator--> + +<sect2 id="setup-formatting"> +<title +>Formatering</title> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect2 +> <!-- setup-formatting--> + +<sect2 id="setup-cpp-parsing"> +<title +>Tolkning af C++</title> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect2 +> <!-- setup-c++-parsing--> + +</sect1 +> <!-- setup-general --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="setup-docu"> +<title +>Indstilling af dokumentationen</title> + +<para +>&tdevelop; indeholder en meget kraftig dokumentationsfacilitet som sørger for adgang til adskillig slags ekstensiv dokumentation. ⪚ i IDEAl-tilstand finder du et <guilabel +>Dokumentations</guilabel +>faneblad i højre kant af arbejdsområdet. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="documents-contents.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>&tdevelop;'s dokumentationsvinduet i IDEAl-tilstand</phrase +></textobject> + <caption +><para +>&tdevelop;'s dokumentationsvinduet (IDEAl-tilstand) </para +></caption> + </mediaobject> +</screenshot> + +<note +><para +>&tdevelop; skal have indlæst <guilabel +>Dokumentation</guilabel +>-plugin for at kunne vise dokumentationsvinduet. Se afsnittet <link linkend="setup-plugins" +>Plugin-værktøjer</link +> for mere info. </para +></note> + +<para +>Du kan indstille indholdet af dette dokumentationstræ hvis du vælger <menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil &tdevelop;...</guimenuitem +></menuchoice +> i menulinjen. Dialogen <guilabel +>Indstil &tdevelop;</guilabel +> dukker op, hvor du skal vælge <guilabel +>Dokumentation</guilabel +> i feltet til venstre. </para> + +<para +>Den viste <link linkend="configure-docu-general" +>indstillingsside</link +> viser en serie af indstillingsdialoger som fanebladsider, nemlig: </para> + +<simplelist> + <member +><link linkend="setup-docu-general" +>Dokumentationssamlinger</link +></member> + <member +><link linkend="setup-docu-textsearch" +>Fuld tekstsøgning</link +></member> + <member +><link linkend="setup-docu-other" +>Andet</link +></member> +</simplelist> + +<sect2 id="setup-docu-general"> +<title +>Opsætning af dokumentationssamlinger</title> + +<para +>Opsætningen af dokumentationsindstillingerne er opdelt i en række af dokumentationssamlinger, der hver især giver adgang til dokumentationsfilerne i et eller andet unikt format og indholdstype. Disse opsætninger kontrollerer hvilke dokumentationsindgange der vil stå på listen i <guilabel +>Indhold</guilabel +>-siden i &tdevelop;<guilabel +>Dokumentation</guilabel +> funktionen og hvordan brugeren får adgang til dokumentationsdetaljer gennem indekserede og fuldtekstsøgninger. </para> +<para +>Fanebladet <guilabel +>Dokumentation</guilabel +> giver en række indstillingssider som er ordnet lodret som en stak af indekskort. En side ad gangen åbner efter et klik på dens indekskorttitel. </para> +<simplelist> + <member +><link linkend="setup-docu-general-qt" +>&Qt; dokumentationssamling</link +></member> + <member +><link linkend="setup-docu-general-chm" +>CHM dokumentationssamling</link +></member> + <member +><link linkend="setup-docu-general-dox" +>Doxygen dokumentationssamling</link +></member> + <member +><link linkend="setup-docu-general-toc" +>&tdevelop; TOC dokumentationsamling</link +></member> + <member +><link linkend="setup-docu-general-devhelp" +>Devhelp dokumentationssamling</link +></member> + <member +><link linkend="setup-docu-general-custom" +>Brugerdefineret dokumentationssamling</link +></member> +</simplelist> + +<para id="configure-docu-general"> +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="configure-docu-general.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>Indstilling af dokumentationssamlinger</phrase +></textobject> + <caption +><para +>Indstilling af dokumentationssamlinger </para +></caption> + </mediaobject> +</screenshot> +</para> + +<sect3 id="setup-docu-general-common"> +<title +>Almindelig opsætning af dokumentationen</title> + +<para +>Alle indstillingssiderne på <guilabel +>Dokumentation</guilabel +> fanebladet bruger et almindelig layout. Du finder den tilgængelige dokumentationsliste på den åbne side til venstre og et sæt knapper til højre. </para> + +<variablelist> +<varlistentry> +<term id="setup-docu-buttons" +>Knapper til ændring af dokumentationsliste</term> +<listitem> +<para +>Der er tre knapper til rådighed til at vedligeholde indholdet af dokumentationsopsætningssiderne: </para> + +<variablelist> + <varlistentry> + <term +><guibutton +>Tilføj</guibutton +></term> + <listitem> + <para +>Åbner en <guilabel +>Dokumentationssamlingsegenskaber</guilabel +>-dialog, som vist herunder, hvor du kan ændre kildeplaceringen af dokumentationen der skal tilføjes og hvor du også kan navngive den.</para> + </listitem> + </varlistentry> + <varlistentry> + <term +><guibutton +>Redigér</guibutton +></term> + <listitem> + <para +>Åbner en <guilabel +>Dokumentationssamlingsegenskaber</guilabel +> dialog, som vist herunder, hvor du kan ændre kildeplaceringen af dokumentationen allerede valgt på listen og omdøbe den.</para> + </listitem> + </varlistentry> + <varlistentry> + <term +><guibutton +>Fjern</guibutton +></term> + <listitem> + <para +>Fjerner den valgte dokumentationsindgang fra listen.</para> + <note +><para +>Indgangen bliver fjernet kun fra listen. Den egentlige dokumentationskilde bevares. Du skal bruge en anden metode for at fjerne den eksplicit. </para +></note> + </listitem> + </varlistentry> +</variablelist> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="configure-docu-edit.png" format="PNG"/> + </imageobject> + <caption +><para +>Tilføjelse eller ændring af en indgang til dokumentationen. </para +></caption> + </mediaobject> +</screenshot> + +<para +>Knappen til højre for <guilabel +>Sted</guilabel +> feltet, åbner en mappedialog, hvis indgange normalt bliver filtreret i henhold til den valgte indstilingssides filtype. </para> +<para +><guilabel +>Titel</guilabel +>feltet er ikke altid tilgængeligt. Det afhænger af dokumentationstypen. </para> +</listitem> +</varlistentry> +<varlistentry> +<term id="setup-docu-columns" +>Dokumentationstræstruktur</term> +<listitem> +<para +>Hver dokumentationsindstillingsside viser dokumentationsindgangene i en tabel med fire søjler. </para> + +<variablelist> + <varlistentry> + <term +><guilabel +>TOC</guilabel +></term> + <listitem> + <para +>Hvis dette felt er afkrydset vises dokumentationsindgangen i <guilabel +>Indhold</guilabel +>sfortegnelsen i &tdevelop;s <guilabel +>Dokumentation</guilabel +>funktion. </para> + <note +><para +>Ved at fjerne afkrydsningen i <guilabel +>TOC</guilabel +> afkrydsningsfeltet, fjerner skiftevis afkrydsningerne i <guilabel +>Indeks</guilabel +> og <guilabel +>Søg</guilabel +>, se herunder. Derfor kan du ikke have dokumentationssamlingsindgange indekseret men ikke vist i indholdsfortegnelsen. </para +></note> + </listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Indeks</guilabel +></term> + <listitem> + <para +>Hvis dette afkrydsningsfelt er afkrydset, bygges der et internt indeks af denne dokumentationsindgang. Dette medfører hurtig adgang til dokumentationen vha. <guilabel +>Indeks</guilabel +> og (valgfrit) <guilabel +>Finder</guilabel +> siderne i &tdevelop; <guilabel +>Dokumentation</guilabel +>sfunktionen. </para> + <note> + <para +>Det interne indeks bygges første gang brugeren vælger <guilabel +>Indeks</guilabel +>siden. Dette gør første tilgang til indekset temmelig langsom fordi indekset skal læses fra disken og derefter lægges i cache. </para> + <para +>Alle følgende indekssøgninger derimod, vil benytte denne cache og derfor virke markant hurtigere. </para> + </note> + </listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Søg</guilabel +></term> + <listitem> + <para +>Hvis dette afkrydsningsfelt er markeret, bliver indholdet af denne dokumentationsindgang inkluderet i fuldtekstsøgestien i <guilabel +>Søg</guilabel +>esiden i &tdevelop;s <guilabel +>Dokumentation</guilabel +>funktion. </para> + <note> + <para +>&tdevelop; benytter htdig-programsamlingen til at udføre fuldtekstsøgninger. Denne søgning udføres i et internt indeks som htdig-maskineriet er nødt til at bygge for det kan bruges. </para> + <para +>En ændring i <guilabel +>Søg</guilabel +>-afkrydsningsfeltet har dermed først effekt på søgninger efter du har bygget indekset på ny, i &tdevelop;s <guilabel +>Dokumentation</guilabel +>funktion. </para> + </note> + </listitem> + </varlistentry> + <varlistentry> + <term +><guilabel +>Titel</guilabel +></term> + <listitem +><para +>Dette er navnet på dokumentationsindgangen som den vil blive vist i <guilabel +>Indhold</guilabel +>-sfortegnelsen i &tdevelop;s <guilabel +>Dokumentation</guilabel +>funktion. </para +></listitem> + </varlistentry> +</variablelist> + +<note +><para +>I tidligere udgaver af &tdevelop; var det tilladt at vælge at dokumentationsindgange kunne vises forskelligt for hvert enkelt projekt. Dette er ikke længere muligt. </para +></note> +</listitem> +</varlistentry> +</variablelist> + +</sect3 +> <!-- setup-docu-general-common --> + +<sect3 id="setup-docu-general-qt"> +<title +>&Qt;-dokumentationssamlinger</title> + +<para +>På denne indstillingsside indstilles al &Qt;-dokumentation. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="configure-docu-general.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>Opsætning af &Qt;-dokumentationssamlinger</phrase +></textobject> + <caption +><para +>Opsætning af &Qt;-dokumentationssamlinger </para +></caption> + </mediaobject> +</screenshot> + +<para +>Normalt vil &tdevelop; udfylde denne ved sin første opstart. Den leder efter standarddokumentationsfiler, <filename +>*.xml</filename +>, eller <filename +>*.dcf</filename +>, i &Qt;'s installationskatalog. Tabellen til venstre giver en liste af de filer &tdevelop; fandt, med deres standardtitler. </para> + +<para +>Hvis du har en ikke-standardinstallation, vil der enten ingen information være overhovedet eller indgangene vil muligvis pege på forkerte steder (⪚ til en anden &Qt;-installation på dit system). Du kan justere indgangene ved brug af <link linkend="setup-docu-buttons" +>knapperne</link +> til højre for listefeltet. </para> + +<note +><para +>&tdevelop; bruger titlerne fra &Qt;-dokumentationen. Derfor er <guilabel +>Titel</guilabel +>feltet i <guilabel +>Dokumentationssamlinger</guilabel +>dialogen ikke tilgængelig. </para +></note> + +<para +>Som standard vises ikke al &Qt;-dokumentation i <guilabel +>Indhold</guilabel +>sfortegnelsen i &tdevelop;s <guilabel +>Dokumentation</guilabel +>funktion. Brug <guilabel +>TOC</guilabel +>-afkrydsningsfeltet i <link linkend="setup-docu-columns" +>tabelindstilling</link +> for at vælge dokumentationen der skal vises. </para> + +<para +>Hvis du vil have noget specifikt &Qt;-dokumentation inkluderet i søgeindekset eller fuldtekstsøgning, så brug <guilabel +>Indeks</guilabel +> og <guilabel +>Søg</guilabel +>-afkrydsningsfeltet i <link linkend="setup-docu-columns" +>tabelindstilling</link +>. </para> + +</sect3 +> <!-- setup-docu-general-qt --> + +<sect3 id="setup-docu-general-chm"> +<title +>Opsætning af CHM-dokumentationssamlinger</title> + +<para +>På denne indstillingsside kan du samle dokumentation der følger &Microsoft;s CHM hjælpefilstandard. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="configure-docu-chm.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>Opsætning af &Microsoft;s CHM dokumentationsfiler.</phrase +></textobject> + <caption +><para +>Opsætning af &Microsoft;s CHM dokumentationsfiler. </para +></caption> + </mediaobject> +</screenshot> + +<para +>Som standard er denne indstillingsside, som vist ovenfor, tom. Du kan tilføje nye indgange ved at bruge <link linkend="setup-docu-buttons" +>knapperne</link +> til højre for listen. &tdevelop; filtrerer <filename +>*.chm</filename +>-filer i mappedialogerne der hører til <guibutton +>Tilføj</guibutton +> og <guibutton +>Redigér</guibutton +>-knapperne. </para> + +<para +>For mere information om &Microsoft;s <filename +>*.chm</filename +>-filformat, se ⪚ PHP: Dokumentation - Udvidet CHM format på <ulink url="http://de2.php.net/docs-echm.php" +>http://de2.php.net/docs-echm.php</ulink +>. </para> + +</sect3 +> <!-- setup-docu-general-chm --> + +<sect3 id="setup-docu-general-dox"> +<title +>Dokumentation genereret af doxygen</title> + +<para +>På denne indstillingsside opsættes al &API;-dokumentation genereret af &doxygen;. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="configure-docu-dox.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>Opsætning af Doxygen-genereret &API;-dokumentation</phrase +></textobject> + <caption +><para +>Opsætning af Doxygen-genereret &API;-dokumentation </para +></caption> + </mediaobject> +</screenshot> + +<para +>Kort sagt dokumenterer en &API;-grænsefladen til visse biblioteksfunktioner. &API;-dokumentation på denne side skal laves af det eksterne <ulink url="http://www.doxygen.org" +>&doxygen;</ulink +>-værktøj. </para> +<para +>&doxygen;-generet &API;-dokumentation, består af en samling <filename +>html</filename +>-filer, der starter med <filename +>index.html</filename +>. Derudover kan der eksistere <filename +>tag</filename +>-filer som indeholder information om hvordan der linkes til eksisterende &API;-dokumentation. Derfor leder &tdevelop; efter <filename +>index.html</filename +> og <filename +>*.tag</filename +>-filer når der søges efter &doxygen;-genereret &API;-dokumentation. </para> +<para +>Der antages nogle strukturelle begrænsninger når der søges efter &doxygen;-genereret &API;-dokumentation. Kataloget hvori <filename +>index.html</filename +>-filen ligger, skal indeholde underkataloger med adskilte dokumentationssamlinger. Hver af disse underkataloger antages at indeholde en <filename +>.tag</filename +>-fil og et <filename class="directory" +>html/</filename +> underkatalog. </para> +<para +>Du kan tage et kig i <filename class="directory" +>$<envar +>KDEDIR</envar +>/share/doc/HTML/en/tdelibs-apidocs</filename +> hvor der findes et eksempel på et sådant layout for dokumentation af programmeringsgrænseflade med &doxygen;. </para> + +<note +><para +>Det ældre &kde; <ulink url="http://sirtaj.net/projects/kdoc/" +>KDoc</ulink +> genererede &API;-format er ikke længere direkte understøttet. Hvis du stadig vil bruge den slags dokumentation, kan du tilføje det på <link linkend="setup-docu-general-custom" +>Brugerdefineret documentationsamlingl</link +>ssiden. </para +></note> + +<para +>&tdevelop; vil have indsat et link til de nuværende &kde;-bibliotekers &API;, hvis de ellers blev fundet på installationstidspunktet. Der er flere måder for &tdevelop; at finde ud af det: </para> + +<itemizedlist> + <listitem +><para +>Enten gav du <command +>configure</command +> kommandoen <option +>--with-tdelibsdoxy-dir</option +> flaget da du kompilerede &tdevelop; (se <link linkend="make-api" +>Hvordan man får fat på en &tdevelop; &API; dokumentation</link +>-kapitlet). </para +></listitem> + <listitem +><para +>Eller <command +>configure</command +> kommandoen fandt automatisk en &doxygen; genereret &kde;-biblioteker &API; på et af de adskillige standardsteder den kender til. </para +></listitem> + <listitem +><para +>Eller som sen sidste udvej <filename class="directory" +>$<envar +>KDEDIR</envar +>/share/doc/HTML/en/tdelibs-apidocs/</filename +> blev fundet ved første opstart af &tdevelop;. </para +></listitem> +</itemizedlist> + +<para +>Hvis &tdevelop; ikke fandt en gyldig &doxygen; genereret &kde;-&API; ved sin første opstart, vil listen med <guilabel +>Doxygendokumentationssamlingen</guilabel +> være tom. </para> + +<para +>Du kan tilføje dine egne &API;-dokumentationsindgange (⪚ fra dine aktuelle projekter) ved at bruge <link linkend="setup-docu-buttons" +>knapperne</link +> til højre. Hvis du vil inkludere dem i den indekserede og eller fuldtekstsøgning, så afkryds <guilabel +>Indeks</guilabel +> eller<guilabel +>Søg</guilabel +> afkrydsningsfeltet i <link linkend="setup-docu-columns" +>tabelindstilling</link +>. </para> + +<note +><para +>&tdevelop; bruger titelinformationen fra <filename +>index.html</filename +>. Derfor er <guilabel +>Titel</guilabel +>feltet i <guilabel +>Dokumentationsamling</guilabel +>sdialogen ikke tilgængelig. </para +></note> + +<tip> + <para +>&kde;-systemet sørger for mere &API;-dokumentation end kun &kde;-bibliotekernes &API;. Du vil få brug for yderligere grænsefladeinformation hvis du ønsker ⪚ at inkludere &kate;-parten i dine programmer. For denne &kate;-part-&API; for eksempel, vil du skulle kompilere og installere &kde;'s basisbibliotekernes &API; fra <ulink url="http://developer.kde.org/source/index.html" +>kilderne</ulink +> (ved brug af <command +>make apidox</command +> og <command +>make install</command +> kommandoerne i <filename class="directory" +>tdebase</filename +>s kilder) og så tilføje en indgang til <guilabel +>Doxygen dokumentationssamling</guilabel +>slisten sådan her: </para> + <screenshot +><mediaobject> + <imageobject> + <imagedata fileref="configure-adddialog-baselibs.png" format="PNG"/> + </imageobject> +<textobject +><phrase +>Tilføjelse af &kde;'s basis-&API; til listen</phrase +></textobject> + <caption +><para +>Tilføjelse af &kde;'s basis-&API; til listen </para +></caption> + </mediaobject +></screenshot> + <para +>(Du skal naturligvis erstatte <filename class="directory" +>/home/dev/mitkde-system/</filename +>-kataloget i <guilabel +>Sted</guilabel +>feltet, med stien til din egen &kde;-installation.) </para> +</tip> + +<note +><para +>Du er nødt til også at lægge dit nuværende projekts &API; ind i <guilabel +>Doxygendokumentationssamling</guilabel +>. I tidligere &tdevelop;udgaver lagde det ind i dokumentationen for hvert enkelt projekt. Dette er ikke længere understøttet. </para +></note> + +</sect3 +> <!-- setup-docu-general-dox --> + +<sect3 id="setup-docu-general-toc"> +<title +>Håndtering af struktureret dokumentation (KDevelopTOC-filer)</title> + +<para +>Hoveddelen af &tdevelop;'s dokumentationstræ sørger for umiddelbar adgang til struktureret dokumentation, lokal så vel som ekstern. Du kan indstille dette i <guilabel +>KDevelopTOC dokumentationssamling</guilabel +>-fanebladet i <guilabel +>Dokumentationsamlinger</guilabel +>-indstillingssiden. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="configure-docu-toc.png" format="PNG"/> + </imageobject> + <caption +><para +>Sørger for KDevelopTOC-struktureret dokumentationsadgang </para +></caption> + </mediaobject> +</screenshot> + +<para +>&tdevelop; kommer med en mængde foruddefinerede KDevelopTOC-filer som automatisk tilføjes i tabellen på installationstidspunktet. For at holde visningen overskuelig, er det kun de oftest brugte der makeres til visning. Hvis du vil kunne se andet dokumentation så afkryds <guilabel +>TOC</guilabel +> afkrydsningsfeltet i <link linkend="setup-docu-columns" +>tabelindstilling</link +>. </para> + +<para +>KDevelopTOC-filer kan ikke indekseres så der kan udføres fuldtekstsøgning, fordi de normalt peger på en ekstern placering. På den anden side kan en <filename +>.toc</filename +>-fil få et manuelt defineret indeks, ved at bruge <computeroutput +><index></computeroutput +> mærket. Derfor vil <guilabel +>Indeks</guilabel +> afkrydsningsfeltet kun være aktiveret når &tdevelop; finder et <computeroutput +><index></computeroutput +> mærke i <filename +>.toc</filename +> -filen. (For mere information, se beskrivelsen herunder i <link linkend="setup-docu-general-toc-files" +>&tdevelop; TOC Filer</link +> sektionen.) </para> +<para +><guilabel +>Søg</guilabel +> afkrydsningsfeltet i <link linkend="setup-docu-columns" +>tabelindstilling</link +> vil altid være deaktiveret. </para> + +<para +>Du kan tilføje nye indgange ved at bruge <link linkend="setup-docu-buttons" +>knapperne</link +> til højre for listen. &tdevelop; vil filtrere <filename +>*.toc</filename +>-filer i mappedialogerne der hører til <guibutton +>Tilføj</guibutton +> og <guibutton +>Redigér</guibutton +>-knapperne. </para> + +<note +><para +>Kun i ældre udgaver af &tdevelop; vil <guibutton +>Fjern</guibutton +>-knappen ikke ændre <filename +>*.toc</filename +>-filer på disken, så fjern-funktionen er sikker nu. </para +></note> + +</sect3 +> <!-- setup-docu-general-toc --> + +<sect3 id="setup-docu-general-toc-files"> +<title +>&tdevelop; Indholdsfortegnelsesfiler (TOC-filer)</title> + +<para +>Der er en særlig funktion knyttet til dette. For at illustrere det, følg disse skridt: I dokumentationstræet findes en indgang lige under &Qt;/&kde;-dokumentationen (⪚ <quote +>KDE2 Udviklingsbog (kde.org)</quote +>). Klik på plus-tegnet ved siden af den. Et træ vil blive åbnet hvor du hurtigt kan navigere til de følgende kapitler adskillige lag dybt, altsammen offline. Men hvis du vælger et af kapitlerne, vil &tdevelop; i mange tilfælde prøve at få adgang til en <emphasis +>ekstern</emphasis +> dokumentationsfil. </para> + +<para +>Rationalet bag dette er ikke kun at navigere ekstern dokumentation lokalt uden at spilde ressourcer på adgang til nettet, men også at give udvikleren nem og struktureret adgang til den ønskede dokumentation. Med de værktøjer der er til rådighed her, kan man få adgang til næsten al lokal eller ekstern dokumentation på en struktureret måde, selvom originalen er lagt fladt ud eller struktureret på en anden måde. Det eneste der behøves, er adgang til filer og/eller dele af filer, som kan vises med Konqueror. </para> + +<para +>Sådan struktureret adgang er gjort mulig ved brug af specielle <quote +>indholdsfortegnelses</quote +>filers, som er betegnet med <filename +>.toc</filename +> filnavneendelser. Enhver sådan af &tdevelop;'s TOC-filer indeholder en &XML;-struktureret beskrivelse af dokumentet der skal bruges. </para> + +<variablelist> +<varlistentry> +<term +>Standardmappe for &tdevelop;'s TOC-filer</term> +<listitem> +<para +>Da &tdevelop; blev installeret blev der normalt lagt en række prædefinerede <filename +>.toc</filename +>-filer ind i mappen <filename class="directory" +>$KDEDIR/share/apps/kdevdoctreeview/tocs</filename +>. Disse er temmelig simple, strukturerede tekstfiler. Du kan studere dem med en teksteditor eller anden tekstvisningsfacilitet. </para> +</listitem> +</varlistentry +></variablelist> + +<!-- FIXME: Lauri Watts (2005-05-03) This could be marked up a whole lot --> +<!-- more clearly with the sgmltags stuff. Making a note to do that once --> +<!-- this first revision is done. --> + +<variablelist id="toc-file-structure"> + <title +>Basal struktur af &tdevelop;'s TOC-filer</title> + <varlistentry> + <term +>header</term> + <listitem> + <simplelist> + <member> + <computeroutput +><!DOCTYPE tdeveloptoc></computeroutput> + </member> + <member> + <computeroutput +><tdeveloptoc></computeroutput> + </member> + <member> + <emphasis +>(titel)</emphasis> + </member> + <member> + <emphasis +>(basisadresse)</emphasis> + </member> + <member> + <emphasis +>(indholdsstruktur)</emphasis> + </member> + <member> + <emphasis +>(indeksstruktur)</emphasis> + </member> + <member> + <computeroutput +></tdeveloptoc></computeroutput> + </member> + </simplelist> + <para +>Denne &XML;-struktur vil blive tolket af &tdevelop;'s <guilabel +>Dokumentation</guilabel +>-plugin for at indstille dokumentationstræets indhold og hjælpe brugeren med at navigere dokumentationen. Den indeholder al den nødvendige information til at vise titlet og få adgang til dokumentationsfilernes indhold. </para> + </listitem> + </varlistentry> + <varlistentry> + <term +>titel</term> + <listitem> + <simplelist> + <member +><computeroutput +><title></computeroutput +> <emphasis +>(en titelstreng)</emphasis +> <computeroutput +></title></computeroutput +> </member> + </simplelist> + <para +>Dette er den titel som &tdevelop; vil vise på de basale niveauer i dokumentationstræet. </para> + <note +><para +>Denne viste titel kan for øjeblikket ikke ændres af brugeren. Hvis du ønsker at en anden tekst skal vises, må ændre <computeroutput +><title></computeroutput +>-indgangen i <filename +>.toc</filename +>-filen manuelt. </para +></note> + </listitem> + </varlistentry> + <varlistentry> + <term +>basisadresse</term> + <listitem> + <simplelist> + <member +><computeroutput +><base href="</computeroutput +> <emphasis +>(basisdokument &URL;)</emphasis +> <computeroutput +>"/></computeroutput +> </member> + </simplelist> + <para +>Denne &URL; peger på stedet hvor alle filerne i denne dokumentation er. Den vil blive sat forud for hvert afsnits-&URL; i følgende indholdsstrukturliste. Så, hvis du ⪚ hentede en dokumentation fra en ekstern server, er alt du behøver for at vise filerne fra dette nye sted at ændre dets <computeroutput +><basis></computeroutput +>-&URL;. </para> + </listitem> + </varlistentry> + <varlistentry> + <term +>indholdsstruktur</term> + <listitem> + <simplelist> + <member +><computeroutput +><tocsect1 name="</computeroutput +> <emphasis +>(afsnittets titel)</emphasis +> <computeroutput +>" url="</computeroutput +> <emphasis +>(afsnittets &URL;)</emphasis +> <computeroutput +>"></computeroutput +> </member> + <member +>...</member> + <member +><computeroutput +><tocsectn name="</computeroutput +> <emphasis +>(afsnittets titel)</emphasis +> <computeroutput +>" url="</computeroutput +> <emphasis +>(afsnittets &URL;)</emphasis +> <computeroutput +>"/></computeroutput +> </member> + <member +>...</member> + <member> + <computeroutput +></tocsect1></computeroutput> + </member> + </simplelist> + <para +>Al øvrig navigations og adgangsinformation er opbevaret i en række indlejrede <computeroutput +><tocsecti></computeroutput +> ... <computeroutput +></tocsecti></computeroutput +> par. Hvert <emphasis +>i</emphasis +> betegner det følgende indlejringsniveau ned til nummer <emphasis +>n</emphasis +> som vil svare til det endeligt viste dokumentationsafsnit. </para> + <para +>Enhver <computeroutput +><tocsecti></computeroutput +>-indgang skal have en <computeroutput +>name="xxx"</computeroutput +>-attribut tilknyttet (hvor "xxx" betegner den faktiske titelstreng). Dette vil blive vist som niveautitlen i dokumentationstræet. Det skal svare til et egentligt dokumentationsafsnit. </para> + <para +>Der kan være en <computeroutput +>url=""</computeroutput +>-attribut knyttet til ethvert <emphasis +>i</emphasis +> indlejringsniveau. Når brugeren klikker på et afsnit titel i dokumentationstræet vil &tdevelop; forsøge at få adgang til filen på det sted der peges på af den kombinerede basis- og afsnits-&URL;. </para> + <para +><computeroutput +><tocsectn/></computeroutput +>-indgangen skal have en <computeroutput +>url=""</computeroutput +>-attribut under alle omstændigheder. Den endelige indlejrede <computeroutput +><tocsectn/></computeroutput +> kommer ikke i par men vil umiddelbart blive lukket af en <computeroutput +>/</computeroutput +> før <computeroutput +>></computeroutput +>-parentesen. </para> + <note +><para +>Enhver adresse kombineret af basis- og afsnits-&URL; skal pege på en tekstfil der kan fremvises. Sædvanligvis vil dette være en HTML-struktureret fil. Det er muligt at linke til ankermærker indenfor sådan en HTML-fil ved brug af standard # notation i formatet: <filename +>/base-url/section-url#anker-mærke</filename +>. </para +></note> + </listitem> + </varlistentry> + <varlistentry> + <term +>indeksstruktur</term> + <listitem> + <simplelist> + <member> + <computeroutput +><index></computeroutput> + </member> + <member +><computeroutput +><entry name="</computeroutput +> <emphasis +>(afsnittets titel)</emphasis +> <computeroutput +>" url="</computeroutput +> <emphasis +>(afsnittets &URL;)</emphasis +> <computeroutput +>"/></computeroutput +> </member> + <member> + <computeroutput +></index></computeroutput> + </member> + </simplelist> + <para +>Indeks er en enkel liste med indeksindgange, par af titler og &URL;'er. Et indeks er ikke obligatorisk. </para> + </listitem> + </varlistentry> +</variablelist> +<!-- FIXME: End --> + +</sect3 +> <!-- setup-docu-general-toc-files --> + +<sect3 id="setup-docu-general-devhelp"> +<title +>DevHelp-dokumentation</title> + +<para +>DevHelp dokumentation er en anden måde for struktureret dokumentationsadgang. Den bruger strukturerede tabeller af indholdsfiler betegnet med en <filename +>.devhelp</filename +>-endelse ligesom <link linkend="setup-docu-general-toc-files" +>&tdevelop;'s TOC-filer</link +> for at få adgang til dokumentationen for GNOME 2 desktoppen. </para> +<para +>Du kan kontrollere hvilke DevHelp-filer der skal være adgang til, på <guilabel +>DevHelp dokumentationssamling</guilabel +>indstillingssiden. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="configure-docu-devhelp.png" format="PNG"/> + </imageobject> + <caption +><para +>Sørger for DevHelp dokumentation </para +></caption> + </mediaobject> +</screenshot> + +<para +>DevHelp-filerne kunne oprindeligt nås på hjemmesiden <ulink url="http://lidn.sourceforge.net/" +>LiDN</ulink +>, men det synes ikke længere at være vedligeholdt et stykke tid nu. Mere nylig DevHelp-dokumentation er tilgængelig på hjemmesiden <ulink url="http://htmlhelp.berlios.de/books/devhelp.php" +>Download af DevHelp-bøger</ulink +>. </para> + +<para +>Når &tdevelop; installeres, vil det forsøge at finde alle <filename +>.devhelp</filename +>-filer i nogle standardplaceringer i systemet, ⪚ i underkatalogerne af <filename class="directory" +>/opt/gnome/share/</filename +>. Til at begynde med markeres disse filer ikke til visning. Hvis du vil se anden dokumentation skal du afkrydse <guilabel +>TOC</guilabel +>-afkrydsningsfeltet i <link linkend="setup-docu-columns" +>tabelindstilling</link +>. </para> + +<para +>Du kan tilføje nye indgange ved at bruge <link linkend="setup-docu-buttons" +>knapperne</link +> til højre for listen. &tdevelop; vil filtrere <filename +>*.toc</filename +>-filer i mappedialogerne der hører til <guibutton +>Tilføj</guibutton +> og <guibutton +>Redigér</guibutton +>-knapperne. </para> + +</sect3 +> <!-- setup-docu-general-devhelp --> + +<sect3 id="setup-docu-general-custom"> +<title +>Opsætning af brugerdefinerede dokumentationssamlinger</title> + +<para +>Dette er til eget brug. Du kan tilføje stort set alle dokumentationsfiler her, forudsat at de kan vises med en &konqueror;-plugin. </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="configure-docu-custom.png" format="PNG"/> + </imageobject> + <caption +><para +>Sørger for brugerdefineret dokumentation </para +></caption> + </mediaobject> +</screenshot> + +<para +>Normalt er denne liste tom ved &tdevelop;s første opstart. Vi har lagt en indgang ind for at vise indgangsstrukturen. </para> +<para +>Håndteringen er ligeud ad landevejen her. Brug <link linkend="setup-docu-buttons" +>knapperne</link +> til højre for listen for at tilføje, redigere eller fjerne dokumentationsindgangene. &tdevelop; vil ikke filtrere noget som helst i mappedialogen der hører til <guibutton +>Tilføj</guibutton +> og <guibutton +>Redigér</guibutton +>-knapperne. </para> + +<para +>Du skal eksplicit tilføje indgangene der skal vises i &tdevelop;s dokumentationsfunktion. Afkryds indgangens <guilabel +>TOC</guilabel +> afkrydsningsfeltet i <link linkend="setup-docu-columns" +>tabelindstilling</link +>. </para> + +<note +><para +>Brugerdefineret dokumentation kan hverken indekseres eller søges i. Derfor er <guilabel +>Indeksx</guilabel +> og <guilabel +>Søg</guilabel +> afkrydsningsfelterne ingen effekt, som vist herover. </para +></note> + +</sect3 +> <!--- setup-docu-general-custom --> + +</sect2 +> <!-- setup-docu-general --> + +<sect2 id="setup-docu-textsearch"> +<title +>Opsætning af tekstsøgningsindekser</title> + +<para +>(... endnu ikke skrevet ...) </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="configure-doctree-textsearch.png" format="PNG"/> + </imageobject> + <caption +><para +>Opsætning af tekstsøgningsindekser </para +></caption> + </mediaobject> +</screenshot> + +</sect2 +> <!-- setup-docu-textsearch --> + +<sect2 id="setup-docu-other"> +<title +>Andre dokumentationindstillinger</title> + +<para +>(... endnu ikke skrevet ...) </para> + +</sect2 +> <!-- setup-docu-other --> + +</sect1 +> <!-- setup-docu --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="setup-advanced"> +<title +>Avancerede indstillinger</title> + +<para +>(... endnu ikke skrevet ...) </para> + +<sect2 id="setup-plugins"> +<title +>Pluginværktøjer</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect2 +> <!-- setup-plugins --> + +</sect1 +> <!-- setup-advanced --> + +</chapter +> <!-- setup --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/survey-manual.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/survey-manual.docbook new file mode 100644 index 00000000000..2d4710ecf53 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/survey-manual.docbook @@ -0,0 +1,329 @@ +<chapter id="survey-manual"> +<title +>Indholdet af denne manual</title> + +<para +>Denne brugermanual er beregnet til at beskrive indholdet og brugen af det integrerede udviklingsmiljø (IDE) &tdevelop; &kdevrelease; fra brugerens perspektiv. Det er ikke en programmeringsmanual, og beskriver heller ikke udviklingsprocessen i detalje. Det eneste formål er at hjælpe dig med håndteringen af det integrerede udviklingsmiljø. </para> +<para +>Her finder du information om følgende emner: </para> +<variablelist> +<varlistentry> +<term +><link linkend="getting-started" +>Kom i gang med &tdevelop; — en guided tur</link +> </term> +<listitem> +<para +>Giver dig en hurtig gennemgang af hvordan den grafiske grænseflade bruges, med en introduktion af de grundlæggende skridt for at arbejde med et projekt.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><link linkend="tdevelop-survey" +>Oversigt over funktionerne i &tdevelop;</link +></term> +<listitem> +<para +>Udvider den guidede tur i foregående kapitel, giver en oversigt af hvad der er indbygget i &tdevelop; og gør dig bekendt med udseende og fornemmelse i dette integrerede udviklingsmiljø.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><link linkend="setup" +>Indstilling af &tdevelop;</link +></term> +<listitem> +<para +>Viser hvordan du kan skræddersy det integrerede udviklingsmiljø til at passe til dine behov.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><link linkend="applicationwizard" +>Kom i gang: Programguiden</link +></term> +<listitem> +<para +>Beskriver det grundlæggende i hvordan et nyt projekt indstilles i &tdevelop; med den indbyggede programguide.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><link linkend="editing" +>Redigeringsværktøjer</link +></term> +<listitem> +<para +>Alt du behøver for at skrive kildekoden. Fra hvordan editoren bruges, hvordan tekstsøgning både lokalt og i hele projektet gøres, til hvordan nye filer og klasser integreres i projektet.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><link linkend="file-browsers" +>Filsøgerne</link +></term> +<listitem> +<para +>Demonstrerer diverse værktøjer til at kigge på projektets struktur og hvordan du får adgang til filerne du vil arbejde med.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><link linkend="class-browsers" +>Klassesøgeren</link +></term> +<listitem> +<para +>Beskriver et af de mest kraftfulde værktøjer i &tdevelop;, som lader dig navigere i klasseafhængigheder og lader dig nemt oprette og få adgang til de klasser og metoder du behøver. </para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><link linkend="documentation" +>Dokumentation</link +></term> +<listitem> +<para +>Viser hvordan man får adgang til den omfattande indbyggede dokumentation som &tdevelop; sørger for, og fortæller hvordan du laver dokumentation af projektet, en koncis og kraftfuld dokumentation af programmeringsgrænsefladen, som giver dig en oversigt over al kildekode i projektet samt en docbook-baseret brugerdokumentation.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><link linkend="project-management" +>Bygge og projekthåndtering</link +></term> +<listitem> +<para +>Handler om at oprette og håndtere dit projekt, beskriver det grundlæggende i brug af autoconf og automake, samt hvordan egne byggefiler laves og hvordan oversætter- og byggeindstillinger bruges til at skræddersy programmet til at passe til dine behov.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><link linkend="adv-build-management" +>Avanceret byggehåndtering</link +></term> +<listitem> +<para +>Kigger på måder at holde flere byggeindstillinger, for at krydskompilere til forskellige platforme, eller oprette et indlejret system med biblioteket <application +>Qt/embedded</application +>.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><link linkend="debugger" +>Fejlsøgergrænsefladen</link +></term> +<listitem> +<para +>Beskriver hvordan den integrerede fejlsøgergrænseflade til fejlsøgeren <application +>gdb</application +> bruges, så du kan jage efter fejl uden at forlade &tdevelop;.</para> +</listitem> +</varlistentry> + +<!-- ### Currently disabled. Probably too specialized programming stuff. Check later again. + <listitem +><para> + <link linkend="python" +>Python</link +> — an overview of how to create Python-based applications in &tdevelop;. + </para +></listitem> + <listitem +><para> + <link linkend="php" +>PHP</link +> — an overview of how to create PHP-based HTML applications in &tdevelop;. + </para +></listitem +>//--> + +<varlistentry> +<term +><link linkend="cvs" +>Brug af CVS</link +></term> +<listitem> +<para +>Fortæller dig hvordan du kan vedligeholde projektet med CVS-versionshåndteringssystem, en nødvendighed især hvis mange udviklere arbejder med samme projekt.</para> +</listitem> +</varlistentry> +</variablelist> + +<!-- + <listitem +><para> + <link linkend="tdevelop-scripting" +>Scripting &tdevelop;</link +> — describes how to add scripts to automate &tdevelop;. + </para +></listitem> + + + <listitem +><para> + Some commonly used information has been put into the <emphasis +>appendix</emphasis +>. Amongst others this consists of: +--> +<para +>Noget ofte brugt information er puttet ind i <emphasis +>appendiks</emphasis +>. Det er bl.a. : </para> + +<variablelist> +<varlistentry> +<term +><link linkend="tdevelop-install" +>Installering af &tdevelop;</link +></term> +<listitem> +<para +>Fortæller hvor man får fat i &tdevelop;, og hvordan man får det at køre.</para> +</listitem> +</varlistentry> +</variablelist> + +<variablelist> +<varlistentry> +<term +><link linkend="nutshell" +>I korthed — Vink og trick</link +></term> +<listitem> +<para +>En hurtigreference til de oftest bruge kommandoer og handlinger, og en kort guide for at løse almindelige problemer ved arbejdet med &tdevelop;.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><link linkend="unixdev" +>Udvikling på Unix</link +></term> +<listitem> +<para +>En historisk oversigt over programudvikling i &UNIX;, de vigtigste værktøjer som behøves og hvorfor man behøver et integreret udviklingsmiljø.</para> +</listitem> +</varlistentry> + +<!-- + <listitem +><para> + <link linkend="app-menus" +>Menus and Toolbars Overview</link +> — provides you with a short overall view of the menu and toolbar selections available. + </para +></listitem> + + <listitem +><para> + <link linkend="app-shortcuts" +>Shortcut Keys</link +> — the keys you can use to work with &tdevelop; without resorting to the mouse. + </para +></listitem> +--> + +<varlistentry> +<term +><link linkend="app-files" +>Konfigurationsfiler brugt af &tdevelop;</link +></term> +<listitem +><para +>Lister filerne som &tdevelop; bruger til at gemme sin interne information. Dette er især nyttigt hvis noget er blevet forkert i dine indstillinger.</para> +</listitem> +</varlistentry> + +<varlistentry +><term> +<link linkend="plugin-tools" +>Pluginværktøjer</link> +</term +><listitem +><para +>Lister plugin-værktøjer du kan bruge til at skræddersy &tdevelop;s muligheder efter dine behov. </para +></listitem +></varlistentry> + +<!-- + <listitem +><para> + <link linkend="plugin-tools" +>Plugin tools</link +> — provides you with an overview of the parts which make up &tdevelop; and how you can tailor it to suit your needs by only loading the parts that are necessary, both IDE and project-wide. + </para +></listitem> +--> +<varlistentry +><term +> +<link linkend="app-uimodes-examples" +>Eksempler på tilstande i brugergrænsefladen for &tdevelop; </link> +</term +><listitem +><para +>Viser tilstanden for brugergrænsefladen. </para +></listitem +></varlistentry> + +<varlistentry +><term> +<link linkend="app-misc-info" +>Yderligere information </link +> </term +><listitem +><para +>Hent information, rapportér fejl, osv. </para +></listitem +></varlistentry> + +<varlistentry +><term> +<link linkend="app-changelog" +>Ændringslog </link> +</term +><listitem +><para +>Viser dokumentets historik. </para +></listitem +></varlistentry> + +<varlistentry +><term> +<link linkend="app-bibliography" +>Bibliografi </link +> +</term +><listitem +><para +>Bibliografi </para +></listitem +></varlistentry> + +</variablelist +> + <!-- + <listitem +><para> + <link linkend="documentation-index" +>Index </link +> — + </para +></listitem> +--> + + +</chapter> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/tdevelop-install.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/tdevelop-install.docbook new file mode 100644 index 00000000000..f6016543d54 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/tdevelop-install.docbook @@ -0,0 +1,1292 @@ +<appendix id="tdevelop-install"> + +<appendixinfo> + <authorgroup> + <author +><firstname +>Bernd</firstname +><surname +>Pol</surname +></author> + <author +><firstname +>Anne-Marie</firstname +><surname +>Mahfouf</surname +></author> + <!-- ROLES_OF_TRANSLATORS --> + </authorgroup> +</appendixinfo> + +<title +>Installering af &tdevelop;</title> + +<indexterm zone="tdevelop-install"> + <primary +>Installation</primary +></indexterm> + +<para +>Her finder du alle skridt som behøves for at kompilere og installere det integrerede udviklingsmiljø &tdevelop;: <itemizedlist> + <listitem +><para +><link linkend="tdevelop-install-howto" +>Hvordan man får fat på &tdevelop;</link +> koncentrerer sig om hvordan man henter den seneste kildekode for &tdevelop; fra svn. </para +></listitem> + <listitem +><para +><link linkend="requirements" +>Krav for &tdevelop;</link +> giver en liste af programmer og biblioteker som du skal have installerede for at det skal lykkes at kompilere det integrerede udviklingsmiljø. </para +></listitem> + <listitem +><para +><link linkend="compile-and-install" +>Kompilering og installation af &tdevelop;</link +> leder dig gennem alle skridt for kompilering og installation af programmet. </para +></listitem> + <listitem +><para +><link linkend="make-api" +>Hvordan man får fat på dokumentation af programmeringsgrænsefladen for &tdevelop;</link +> fortæller hvad en programmeringsgrænseflade er og hvordan du får fat på et så nyttigt værktøj for navigering i kildekoden for &tdevelop;. </para +></listitem> +</itemizedlist> +</para> + +<sect1 id="tdevelop-install-howto"> +<title +>Hvordan man får fat på &tdevelop;</title> + +<indexterm zone="tdevelop-install-howto"> + <primary +>få fat på &tdevelop;</primary +></indexterm> +<indexterm zone="tdevelop-install-howto"> + <primary +>&tdevelop;</primary> + <secondary +>få fat på</secondary +></indexterm> + +<para +>&tdevelop; er tilgængelig i binær form fra mange forskellige &Linux;-distributioner såsom SuSE, RedHat med flere. De binære filer er pakkede på en bekvem måde, oftest RPM, for nemt at kunne installeres. Følg standardinstruktionerne som gives i distributionen for at installere. </para> +<para +>Du kan også få fat på kildekoden for &tdevelop;, kompilere og installere den selv. Kildekoden findes via projektets hjemmeside på <ulink url="http://www.tdevelop.org" +>http://www.tdevelop.org</ulink +> eller via <ulink url="http://download.kde.org" +>&kde;'s FTP-sted</ulink +>. </para> + +<sect2 id="howto-svn"> +<title +>Hente dagsfriske udgaver af &tdevelop; fra svn</title> + +<indexterm zone="howto-svn"> + <primary +>svn</primary +></indexterm> + +<para +>Hvis du vil tage del i nuværende udvikling, er versioner fra det anonyme SVN-arkiv tilgængelige.</para> +<para +>Modulnavnet er <emphasis +>tdevelop</emphasis +> med <filename class="directory" +>svn co svn://anonsvn.kde.org/home/kde/branches/KDE/3.5/tdevelop</filename +>. </para> + +<sect3 id="howto-svn-co"> +<title +>Oprindelig udtjekning fra svn</title> + +<indexterm zone="howto-svn-co"> + <primary +>udtjekning</primary +></indexterm> +<indexterm zone="howto-svn-co"> + <primary +>&tdevelop;</primary> + <secondary +>svn</secondary> + <tertiary +>udtjekning</tertiary +></indexterm> + +<para +>For at få en oprindelig udgave af &tdevelop; skal du hente den fra anonym svn. For denne såkaldte <emphasis +>udtjekningshandling</emphasis +> følges skridtene nedenfor. </para> + +<note +><para +>Vi antager vi at du ønsker at placere din kopi af &tdevelop; i mappen <filename class="directory" +>/kde3src/tdevelop</filename +> undermappen af din hjemmemappe(<filename class="directory" +>~</filename +>). </para +></note> + +<informalexample +><simplelist> + <member +># Opret målmappen om nødvendigt: </member> + <member +><prompt +>~> </prompt +> <userinput +>mkdir kde3src</userinput +> </member> + <member +><prompt +>~> </prompt +> <userinput +>cd kde3src</userinput +> </member> + <member +><prompt +>~/kde3src> </prompt +> <userinput +>svn co svn://anonsvn.kde.org/home/kde/branches/KDE/3.5/tdevelop</userinput +> </member> + <member +><prompt +>~/kde3src> </prompt +> <userinput +>cd tdevelop</userinput +> </member> +</simplelist +></informalexample> + +<note +><para +>Når du er lykkedes at tjekke din version af &tdevelop; ud, kan du følge med i ændringerne ved at bruge opdateringsproceduren som vises i næste afsnit. </para +></note> + +<important +><para +>Hold serverbelastningen lav. <emphasis +>Vær venlig ikke at tjekke ud hver gang du vil have en ny version af &tdevelop;</emphasis +> Brug svn update til dette formål. </para +></important> + +<para +>Nu kan du kompilere din version af &tdevelop; som vist i kapitlet <link linkend="compile-and-install" +>Kompilering og installation af &tdevelop;</link +>. </para> + +</sect3 +> <!-- howto-svn-co --> + +<sect3 id="howto-svn-up"> +<title +>Hold din kopi af svn opdateret</title> + +<indexterm zone="howto-svn-up"> + <primary +>opdatér</primary +></indexterm> +<indexterm zone="howto-svn-up"> + <primary +>&tdevelop;</primary> + <secondary +>svn</secondary> + <tertiary +>opdatér</tertiary +></indexterm> + +<para +>Efter du har tjekket &tdevelop; ud fra svn som vist ovenfor (og det er lykkedes at kompilere den), vil du holde den aktuel for at få alle programrettelser med. Følg så skridtene nedenfor. (Vi antager igen at du har placeret din kopi af &tdevelop; i mappen <filename class="directory" +>kde3src</filename +>.) </para> +<para +>Bemærk kommandoen <command +>up</command +> (= <emphasis +>update</emphasis +>) i stedet for <command +>co</command +> (hvilket betyder <emphasis +>checkout</emphasis +>). </para> + +<informalexample +><simplelist> + <member +><prompt +>~> </prompt +> <userinput +>cd kde3src</userinput +> </member> + <member +><prompt +>~/kde3src> </prompt +> <userinput +>cd tdevelop</userinput +> </member> + <member +><prompt +>~/kde3src> </prompt +> <userinput +>svn up</userinput +> </member> +</simplelist +></informalexample> + +<note +><para +>Hold øje med meddelelserne som svn viser under opdateringssekvensen. De nøjagtige skridt i kompileringssekvensen afhænger af dem. </para +></note> + +<para +>Nu kan du kompilere en ny version af &tdevelop; som vist i kapitlet <link linkend="compile-and-install-make-svn" +>Særlige hensyn ved kompilering fra svn</link +>. </para> +</sect3 +> <!-- howto-svn-up --> + +</sect2 +> <!-- howto-svn --> + +</sect1 +> <!-- howto --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="requirements"> +<title +>Krav for &tdevelop;</title> + +<indexterm zone="requirements"> + <primary +>krav</primary +></indexterm> +<indexterm zone="requirements"> + <primary +>&tdevelop;</primary> + <secondary +>krav</secondary +></indexterm> +<indexterm zone="requirements"> + <primary +>GNU</primary> + <secondary +>krav</secondary +></indexterm> + +<para +>For at det skal lykkes at kompilere og bruge &tdevelop;, behøver du følgende programmer og biblioteker. De er tilgængelige på de fleste platforme som distributionspakke, og kan derved let installeres. </para> + +<itemizedlist> +<title +>Krævet</title> + <listitem> + <para +><application +>gcc/g++</application +> ≥ 2.95.3 (eller tilsvarende) <indexterm> + <primary +>gcc</primary> + <secondary +>krav</secondary +></indexterm> + <indexterm> + <primary +>g++</primary> + <secondary +>krav</secondary +></indexterm> + </para> + <para +>Tilgængelig fra <ulink url="gcc.gnu.org" +>gcc.gnu.org</ulink +> </para> + </listitem> + <listitem> + <para +><application +>&GNU; make</application +> (eller tilsvarende) <indexterm> + <primary +>make</primary> + <secondary +>krav</secondary +></indexterm> + </para> + <para +>Tilgængelig fra <ulink url="www.gnu.org/software/make" +>www.gnu.org/software/make</ulink +> </para> + </listitem> + <listitem> + <para +>&perl; 5.004 (eller nyere) <indexterm> + <primary +>Perl</primary> + <secondary +>krav</secondary +></indexterm> + </para> + <para +>Tilgængelig fra <ulink url="www.perl.com" +>www.perl.com</ulink +> </para> + </listitem> + <listitem> + <para +><application +>autoconf</application +> ≥ 2.52 (eller nyere) <indexterm> + <primary +>autoconf</primary> + <secondary +>krav</secondary +></indexterm> + </para> + <para +>Tilgængelig fra <ulink url="www.gnu.org/software/autoconf" +>www.gnu.org/software/autoconf</ulink +> </para> + </listitem> + <listitem> + <para +><application +>automake</application +> ≥ 1.6 (eller nyerer) <indexterm> + <primary +>automake</primary> + <secondary +>krav</secondary +></indexterm> + </para> + <para +>Tilgængelig fra <ulink url="www.gnu.org/software/automake" +>www.gnu.org/software/automake</ulink +> </para> + </listitem> + <listitem> + <para +><application +>flex</application +> 2.5.4 (eller nyere) <indexterm> + <primary +>flex</primary> + <secondary +>krav</secondary +></indexterm> + </para> + <para +>Tilgængelig fra <ulink url="www.gnu.org/software/flex" +>www.gnu.org/software/flex</ulink +> </para> + </listitem> + <listitem> + <para +>&Qt; ≥ 3.3.0 (eller nyere) <indexterm> + <primary +>Qt</primary> + <secondary +>krav</secondary +></indexterm> + </para> + <para +>Tilgængelig fra <ulink url="www.trolltech.com/products/qt" +>www.trolltech.com/products/qt</ulink +> </para> + </listitem> + <listitem> + <para +><application +>KDE</application +> ≥ 3.4.0 (eller nyere) <indexterm> + <primary +>KDE</primary> + <secondary +>krav</secondary +></indexterm> + </para> + <para +>Tilgængelig fra <ulink url="www.kde.org" +>www.kde.org</ulink +> </para> + </listitem> +</itemizedlist> + +<itemizedlist> +<title +>Valgfrit:</title> + <listitem +><para +>Værktøjet <emphasis +><application +>ctags</application +></emphasis +> til kildekodenavigering, fra <ulink url="http://ctags.sourceforge.net" +>http://ctags.sourceforge.net</ulink +>, som giver dig hurtig adgang til deklarationer og definitioner med nogle få enkle klik på et navn i editoren. <indexterm +><primary +>ctags</primary +></indexterm> + </para +></listitem> + <listitem +><para +>Oversætteren <emphasis +><application +>dot</application +></emphasis +> for grafiksprog, fra <ulink url="http://www.graphviz.org" +>http:/www.graphviz.org</ulink +>. Værktøjet behøves sammen med &doxygen; nedenfor, hvis du vil vise klasseforholdene grafisk (hvilket stærkt anbefales). <indexterm +><primary +>dot</primary +></indexterm> + </para +></listitem> + <listitem +><para +>Dokumentationsværktøjet <emphasis +>&doxygen;</emphasis +>, fra <ulink url="http://www.doxygen.org" +>http://www.doxygen.org</ulink +>, hvis du vil lave koncis og kraftfuld dokumentation af programmeringsgrænsefladen for dine projekter. <indexterm +><primary +>doxygen</primary +></indexterm> + </para +></listitem> + <listitem +><para +><emphasis +><application +>Valgrind</application +></emphasis +> fra <ulink url="http://developer.kde.org/~sewardj/" +>http://developer.kde.org/~sewardj/</ulink +> hjælper dig med at finde hukommelseshåndteringsproblemer i dine programmer. <indexterm +><primary +>valgrind</primary +></indexterm> + </para +></listitem> + <listitem +><para +><emphasis +><application +>SVN</application +></emphasis +> fra <ulink url="http://subversion.tigris.org/" +>http://subversion.tigris.org/</ulink +>, hvis du vil bruge versionshåndteringssystemet SVN. <indexterm> + <primary +>svn</primary> + <secondary +>krav</secondary +></indexterm> + </para +></listitem> + <listitem +><para +>Eventuelt andre oversættere og/eller værktøjer hvis du vil udvikle for et andet sprog eller platform end C++/&kde;, eller bruge en anden specialfunktion. </para +></listitem> +</itemizedlist> + +<note> +<orderedlist> + <listitem> + <para +>Du kan i et vist omfang omgå behovet for &autoconf; ≥ 2.52 og &automake; ≥ 1.6. Fjern blot mappen <filename class="directory" +>admin</filename +> i installationsmappen for &tdevelop;, og skriv: <indexterm> + <primary +>autoconf</primary> + <secondary +>omgå versionsbehov</secondary +></indexterm> + <indexterm> + <primary +>automake</primary> + <secondary +>omgå versionsbehov</secondary +></indexterm> + <indexterm> + <primary +>versionsbehov</primary> + <secondary +>omgå behov for autoconf og automake</secondary +></indexterm> + </para> + <informalexample +><simplelist> + <member +><prompt +>(din tdevelop-mappe)> </prompt +> <userinput +>ln -s $KDEDIR/share/apps/tdelibs/admin admin</userinput +></member> + </simplelist +></informalexample> + <para +>i terminalen. Det gør at &tdevelop; bruger standardindstillingerne i &kde;'s <filename class="directory" +>admin</filename +>-mappe i stedet. </para> + </listitem> + <listitem> + <para +>Vær forsigtig så du <emphasis +>ikke blander forskellige versioner af &Qt;</emphasis +>. Link altid &tdevelop; med samme version af &Qt; som &kde;-biblioteket kompileredes med. Ellers vil du formodentlig komme ud for <emphasis +>meget mærkelig</emphasis +> opførsel. </para> + </listitem> +</orderedlist> +</note> + +</sect1 +> <!-- requirements --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="compile-and-install"> +<title +>Kompilering og installation af &tdevelop;</title> + +<indexterm zone="compile-and-install"> + <primary +>&tdevelop;</primary> + <secondary +>kompilering</secondary +></indexterm> +<indexterm zone="compile-and-install"> + <primary +>&tdevelop;</primary> + <secondary +>installation</secondary +></indexterm> + +<para +>Når alle krav er mødt, er du parat til at kompilere og installere &tdevelop;. Dette appendiks vil diskutere de nødvendige skridt til at gøre dette. </para> +<itemizedlist> + <listitem +><para +><link linkend="compile-and-install-preliminaries" +>Forberedende skridt</link +> fortæller dig om opsætning af rigtigt miljø. </para +></listitem> + <listitem +><para +><link linkend="compile-and-install-make" +>Kompilér &tdevelop;</link +> drejer sig om at få fat på &tdevelop; kilder fra svn, hvordan de skal forberedes for installationsprocessen, og viser endelig skridtene der er nødvendige for at kompilere og installere &tdevelop;. </para +></listitem> + <listitem +><para +><link linkend="compile-and-install-options" +>Nogle bemærkninger om configure tilvalg</link +> fortæller dig hvordan du kører &tdevelop; hvis det er blevet installeret på et andet sted end &kde;-mappen. </para +></listitem> +</itemizedlist> + +<sect2 id="compile-and-install-preliminaries"> +<title +>Forberedende skridt</title> + +<indexterm zone="compile-and-install-preliminaries"> + <primary +>preliminært</primary> + <secondary +>Installation af &tdevelop;</secondary +></indexterm> +<indexterm zone="compile-and-install-preliminaries"> + <primary +>KDEDIR</primary +></indexterm> +<indexterm zone="compile-and-install-preliminaries"> + <primary +>QTDIR</primary +></indexterm> +<indexterm zone="compile-and-install-preliminaries"> + <primary +>LD_LIBRARY_PATH</primary +></indexterm> +<indexterm zone="compile-and-install-preliminaries"> + <primary +>LIBRARY_PATH</primary +></indexterm> +<indexterm zone="compile-and-install-preliminaries"> + <primary +>PATH</primary +></indexterm> + +<para +>Inden du påbegynder kompileringssekvensen, skal du sikre dig at alle biblioteker og værktøj er tilgængelige for byggesystemet. For at opnå dette, skal visse miljøvariabler indstilles rigtigt. Skridtene som skal udføres afhænger af hvilken skal du bruger i terminalen. </para> + +<note +><para +>For at undgå at indtaste alle sætningerne som indstiller de nødvendige miljøvariabler hver gang du vil kompilere, kan du placere dem i filen <filename +>.bashrc</filename +> eller <filename +>.cshrc</filename +>. På den måde indstilles miljøvariablerne rigtigt hver gang du starter skallen. </para +></note> + +<sect3 id="compile-and-install-preliminaries-bash"> +<title +>Opsætning af miljøet for bash-skallen</title> + +<para +>Hvis du bruger bash-skallen, tilføjes følgende linjer: </para> + +<informalexample +><simplelist> + <member +><userinput +>export KDEDIR=</userinput +>(sti til din KDE-installation)</member> + <member +><userinput +>export QTDIR=</userinput +>(sti til dit Qt-bibliotek)</member> + <member +><userinput +>export LD_LIBRARY_PATH=$QTDIR/lib:$KDEDIR/lib:$LD_LIBRARY_PATH</userinput +></member> + <member +><userinput +>export LIBRARY_PATH=$QTDIR/lib:$KDEDIR/lib:$LIBRARY_PATH</userinput +></member> + <member +><userinput +>export PATH=$QTDIR/bin:$KDEDIR/bin:$PATH</userinput +></member> +</simplelist +></informalexample> +<para +></para> + +</sect3 +> <!-- compile-and-install-preliminaries-bash --> + +<sect3 id="compile-and-install-preliminaries-tcsh"> +<title +>Opsætning af miljøet for tcsh-skallen</title> + +<para +>Hvis du bruger tcsh-skallen, tilføjes følgende linjer: </para> +<para> +<informalexample +><simplelist> + <member +><userinput +>setenv KDEDIR </userinput +>(sti til din KDE-installation)</member> + <member +><userinput +>setenv QTDIR </userinput +>(sti til dit Qt-bibliotek)</member> + <member +><userinput +>setenv LD_LIBRARY_PATH=$QTDIR/lib:$KDEDIR/lib:$LD_LIBRARY_PATH</userinput +></member> + <member +><userinput +>setenv LIBRARY_PATH $QTDIR/lib:$KDEDIR/lib:$LIBRARY_PATH</userinput +></member> + <member +><userinput +>setenv PATH $QTDIR/bin:$KDEDIR/bin:$PATH</userinput +></member> +</simplelist +></informalexample> +</para> + +</sect3 +> <!-- compile-and-install-preliminaries-tcs --> + +</sect2 +> <!-- compile-and-install-preliminaries --> + +<sect2 id="compile-and-install-make"> +<title +>Kompilér &tdevelop;</title> + +<indexterm zone="compile-and-install-make"> + <primary +>make</primary> + <secondary +>Installation af &tdevelop;</secondary +></indexterm> +<indexterm zone="compile-and-install-make"> + <primary +>kompilering</primary> + <secondary +>&tdevelop;</secondary +></indexterm> + +<note +><para +>I følgende beskrivelse antager vi at du har placeret kildekoden for &tdevelop; i mappen <filename class="directory" +>~/kde3src/tdevelop</filename +>. </para +></note> + +<sect3 id="compile-and-install-make-svn"> +<title +>Særlige hensyn ved kompilering fra svn</title> + +<para +>Hvis du bruger en aktuel version af &tdevelop; fra svn, afhænger de første kompileringsskridt af om du netop har gjort en fuldstændig udtjekning, eller kun opdateret kildekoden. </para> + +<variablelist> +<varlistentry> +<term id="compile-and-install-make-svn-co" +>Efter en udtjekning fra svn</term> +<listitem> +<para +>Du skal <emphasis +>initiere byggesystemet</emphasis +> efter en ny udtjekning. Det samme gælder hver gang du skal starte igen fra begyndelsen. Skriv: </para> + +<informalexample +><simplelist +><member +><prompt +>~/kde3src/tdevelop> </prompt +> <userinput +>make -f admin/Makefile.common svn-clean</userinput +> </member +></simplelist +></informalexample> +<para +>og derefter <emphasis +>alle følgende skridt</emphasis +>. </para> +<note +><para +>Du har måske brug for adgang til svn-arkivet for oprydningen hvis nogen korrupte eller manglende filer skal genkonstrueres. </para +></note> +<important +><para +><command +>svn-clean</command +>-kommandoen vil <emphasis +>fjerne hver fil</emphasis +> der ikke er i svn fra mappen! Sørg for at sikkerhedskopiere al værdifuld information før du udsteder denne oprydningskommando. </para +></important> +</listitem> +</varlistentry> + +<varlistentry> +<term id="compile-and-install-make-svn-up" +>Efter en opdatering fra svn</term> +<listitem> +<para +>Næste skridt afhænger af udskriften fra svn-opdateringssekvensen. Hvis du fik noget som ligner følgende (der kan være en U eller P markering i søjlen til venstre, begge betyder at filen er blevet ændret): </para> + +<screen +>U /en_mappe_sti/Makefile.am +</screen> +<para +>eller hvis du netop har lavet en fuldstændig udtjekning, skal du skrive: </para> +<informalexample +><simplelist +><member +><prompt +>~/kde3src/tdevelop> </prompt +> <userinput +>make -f Makefile.svn</userinput +> </member +></simplelist +></informalexample> +<para +>inden du fortsætter med <emphasis +>alle følgende skridt</emphasis +>. </para> +</listitem> +</varlistentry> +</variablelist> +</sect3 +> <!-- compile-and-install-make-svn --> + +<sect3 id="compile-and-install-make-basic"> +<title +>Grundlæggende kommandosekvens med <command +>make</command +></title> + +<para +>Når det grundlæggende byggesystem er indstillet på denne måde, skal du bestemme dig for hvilken slags &tdevelop;-system du vil bruge. Det gøres med følgende indstillingsskridt, som bygger den virkelige fil med navnet <filename +>Makefile</filename +>, som <command +>make</command +> kommandoen vil bruge. </para> + +<note +><para +>Du kan udelade flaget <option +>--prefix</option +> i følgende kommandolinjer med <command +>configure</command +>, hvis du ønsker at &tdevelop; skal installeres i &kde;'s standardmappe. Se kapitlet <link linkend="compile-and-install-options" +>Nogle bemærkninger om flag til <command +>configure</command +></link +> om dette. </para +></note> + +<variablelist> +<varlistentry> +<term +>En version kompileret til fejlsøgning</term> +<listitem> +<para +>Hvis du vil holde styr på hvad programmet &tdevelop; gør når det kører, kan du bygge en version kompileret med fejlsøgning. Bed blot din <command +>configure</command +> om at gøre det: </para> + +<informalexample +><simplelist +><member +><prompt +>~/kde3src/tdevelop> </prompt +> <userinput +>./configure --enable-debug=full --prefix=</userinput +>(hvor-din-kde3-er) </member +></simplelist +></informalexample> +</listitem> +</varlistentry> + +<varlistentry> +<term +>En version kompileret til distribution</term> +<listitem> +<para +>Hvis du kun vil bruge &tdevelop; som det er (mindre og hurtigere), er det nok med en version kompileret for distribution. Det er standarden i <command +>configure</command +>.</para> + +<informalexample +><simplelist +><member +><prompt +>~/kde3src/tdevelop> </prompt +> <userinput +>./configure --prefix=</userinput +>(hvor-din-kde3-er) </member +></simplelist +></informalexample> + +<note> +<para +>Hvis du vil lave din egen <link linkend="make-api" +>dokumentation for programmeringsgrænsefladen</link +> for &tdevelop;, skal du tage yderligere et flag med i kommandoen <command +>configure</command +>: </para> +<informalexample +><simplelist> + <member +><prompt +>~/kde3src/tdevelop> </prompt +> <userinput +>./configure --</userinput +>(tilvalg-som-ovenfor) <userinput +>\</userinput +></member +> <member +><userinput +>--with-tdelibsdoxy-dir=$KDEDIR/share/doc/HTML/en/tdelibs-apidocs</userinput +></member> +</simplelist +></informalexample> +</note> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Byg og installér &tdevelop;</term> +<listitem> +<para +>Kommandoen <command +>configure</command +> kontrollerer systemet og bygger en <filename +>Makefile</filename +> ifølge hvad den finder. Kommandoen <command +>make</command +> bruger normalt denne <filename +>Makefile</filename +>. Altså er </para> + +<informalexample +><simplelist +><member +><prompt +>~/kde3src/tdevelop> </prompt +> <userinput +>make</userinput +> </member +></simplelist +></informalexample> +<para +>tilstrækkeligt. Om nødvendigt, så skaf rettigheder som systemadministrator </para> +<informalexample +><simplelist +><member +><prompt +>~/kde3src/tdevelop> </prompt +> <userinput +>su</userinput +> </member +></simplelist +></informalexample> +<para +>og angive systemadministratorens kodeord. Installér derefter programmet: </para> +<informalexample +><simplelist +><member +><prompt +>~/kde3src/tdevelop> </prompt +> <userinput +>make install</userinput +> </member +></simplelist +></informalexample> +<para +>Det er alt. Hvis du installerede &tdevelop; i &kde;'s standardmappe, kan du nu køre det integrerede udviklingsmiljø. Ellers er nogle yderligere skridt nødvendige, som vises i afsnittet <link linkend="compile-and-install-options-dir" +>Anden installationsmappe end standard</link +> nedenfor. </para> + +<note> + <para +>Faktisk er der normalt tre &tdevelop;-programmer installeret: </para> + <itemizedlist> + <listitem +><para +>&tdevelop; integreret udviklingsmiljø — det er her du normalt kommer til at arbejde.</para +></listitem> + <listitem +><para +>Den fritstående &tdevelop; Assistent dokumentationsbrowser — isolerer alle de stærke dokumentationsfunktioner fra det integrerede &tdevelop; udviklingsmiljø i et separat værktøj. Dette er specielt nyttigt når du vil slå noget programmeringsdokumentation op, men ikke vil starte hele udviklingsmiljøet.</para +></listitem> + <listitem +><para +>&tdevelop; Designer — forbedrer &Qt;-User Interface Designer med &kde; specifikke kontroller og integrerer sig fint i &tdevelop; udviklingsmiljøet.</para +></listitem> + </itemizedlist> +</note> +</listitem> +</varlistentry> +</variablelist> + + +</sect3 +> <!-- compile-and-install-make-basic --> +</sect2 +> <!-- compile-and-install-make --> + + +<sect2 id="compile-and-install-options"> +<title +>Nogle bemærkninger om flag til <command +>configure</command +></title> + +<sect3 id="compile-and-install-options-dir"> +<title +>Anden installationsmappe end standard</title> + +<indexterm zone="compile-and-install-options-dir"> + <primary +>&tdevelop;</primary> + <secondary +>installation</secondary> + <tertiary +>ikke standardmappe</tertiary +></indexterm> +<indexterm zone="compile-and-install-options-dir"> + <primary +>ikke standardmappe</primary +></indexterm> +<indexterm zone="compile-and-install-options-dir"> + <primary +>KDEDIRS</primary +></indexterm> +<indexterm zone="compile-and-install-options-dir"> + <primary +>kbuildsycoca</primary +></indexterm> + +<para +>Normalt forbereder <command +>configure</command +> til at installere det grafiske udviklingsmiljø i &kde;'s standardmappe. Det er nødvendigt, eftersom &tdevelop; antager at der er direkte adgang til visse værktøjer og delprogrammer som findes der. Hvis du vil bruge din egen installationsmappe, skal du fortælle det til <command +>configure</command +> med flaget <option +>--prefix</option +>: </para> +<informalexample +><simplelist +><member +><prompt +>~/kde3src/tdevelop> </prompt +> <userinput +>./configure --prefix=</userinput +>(hvor-din-kde3-er) </member +></simplelist +></informalexample> +<para +>Der er et problem hvis du gør det. Du skal give mulighed for at &tdevelop; har adgang til nødvendige værktøjer og delprogrammer i &kde;'s mappe. (Du kan stadigvæk bruge det integrerede udviklingsmiljø uden at gøre det, men med meget begrænsede funktioner.) </para> +<para +> Du skal bruge en skal, og følgende kommando skal køres inden du kan starte &tdevelop; fra skallen. </para> + +<note +><para +><emphasis +>Husk at bruge flertal:</emphasis +> Det er <quote +><envar +>KDEDIRS</envar +></quote +>, ikke blot <quote +><envar +>KDEDIR</envar +></quote +>) </para +></note> + +<informalexample +><simplelist> + <member +><prompt +>~> </prompt +> <userinput +>export KDEDIRS=/usr/local/kde:/opt/kde3</userinput +> </member> + <member +><prompt +>~> </prompt +> <userinput +>kbuildsycoca</userinput +> </member> + <member +>(Start nu &tdevelop;:) </member> + <member +><prompt +>~> </prompt +> <userinput +>tdevelop</userinput +> </member> +</simplelist +></informalexample> + +<note +><simplelist> + <member +><envar +>KDEDIRS</envar +> miljøvariablen skal sættes til <emphasis +>listen af aktive &kde; mapper</emphasis +> på dit system. Vi bruger</member> + <member +><filename class="directory" +>/usr/local/kde</filename +>:<filename class="directory" +>/opt/kde3</filename +></member> + <member +>blot som et eksempel.</member> + <member +>Mappen <filename class="directory" +>/usr/local/kde</filename +> kan for eksempel indeholde en ufuldstændig udgave af &kde; som du kompilerede til fejlretningsformål og mappen <filename class="directory" +>/opt/kde3</filename +> kunne derudover indeholder standardudgaven af &kde; fra din distribution der bruges til hverdagsarbejde.</member> +</simplelist +></note> + +<para +>I en tcsh-skal skal du indstille miljøvariablerne ved at bruge: </para> +<informalexample +><simplelist +><member +><prompt +>~> </prompt +> <userinput +>setenv KDEDIRS /usr/local/kde:/opt/kde3</userinput +> </member +></simplelist +></informalexample> +<para +>Kommandoen <command +>kbuildsycoca</command +> (<quote +>byg systemkontrolcache</quote +>) søger efter biblioteker og gemmer deres sted og version i en cache, så &tdevelop; kan finde dem. Problemet er at det tager mærkbart med tid—og skal køres hver gang du bruger skallen til at starte &tdevelop; med en anden installationsmappe end standardmappen. Du vil kunne indtaste ovenstående kommando i et skalscript for at reducere anstrengelserne med at indtaste det. </para> +<para +>(Du vil også kunne indtaste linjerne i filen <filename +>.bashrc</filename +> eller <filename +>.cshrc</filename +>, men det er ikke ønskværdigt fordi så køres <command +>kbuildsycoca</command +> hver gang du bruger skallen.) </para> + +<note +><para +>Kommandoen <command +>kbuildsycoca</command +> kører ikke for systemadministratoren. Du skal kalde den som en anden bruger. (Men det er <emphasis +>ikke en særlig god idé</emphasis +> at udvikle som systemadministrator!) </para +></note> +</sect3 +> <!-- compile-and-install-options-dir --> + +<!-- ### put a sect3 with other configuration options here --> + +</sect2 +> <!-- compile-and-install-options --> + +</sect1 +> <!-- compile-and-install --> + +<sect1 id="make-api"> +<title +>Hvordan man får fat i programmeringsgrænsefladen for &tdevelop;</title> + +<indexterm zone="make-api"> + <primary +>API</primary> + <secondary +>&tdevelop;</secondary +></indexterm> +<indexterm zone="make-api"> + <primary +>&tdevelop;</primary> + <secondary +>API</secondary +></indexterm> +<indexterm zone="make-api"> + <primary +>kompilering</primary> + <secondary +>&tdevelop;</secondary> + <tertiary +>API</tertiary +></indexterm> +<indexterm zone="make-api"> + <primary +>configure</primary> + <secondary +>&tdevelop; API</secondary +></indexterm> + +<para +>Programmeringsgrænsefladen, <quote +>Application Program Interface</quote +> på engelsk, ofte forkortet til API, er i virkeligheden en følge af beskrivelser (&ie; kaldmodeller) som et program bruger for at få adgang til operativsystem og andre tjenester. I vort tilfælde er en mere omfattende definition dog blevet anvendt. Programmeringsgrænsefladen for et &kde;- eller &Qt;-program er en abstraktion af klasser og metodegrænseflader, en oversigt som kan bruges som opslagsbog for navigation i kildekoden. </para> +<para +>Der er en version af den seneste programmeringsgrænseflade på <ulink url="http://www.tdevelop.org/HEAD/doc/api/html/index.html" +>KDevelops hjemmeside</ulink +>. Den opdateres automatisk hvert døgn så at du kan følge med. </para> +<para +>Desværre bruges denne version bedst kun til at læse via internettet. Du kan ligesågodt bygge din egen dokumentation af programmeringsgrænsefladen fra kildekoden for &tdevelop;. For at gøre det, skal du fortælle automake systemet hvor KDELIBS API findes på dit. Dette opnås med det særlige flag <option +>--with-tdelibsdoxy-dir</option +> til <command +>configure</command +>-kommandoen når du forbereder at kompilere &tdevelop;'s kildekode: </para> + +<informalexample +><simplelist> + <member +><prompt +>~/kde3src/tdevelop> </prompt +> <userinput +>./configure --</userinput +>(flag-som-sædvanligt)<userinput +> \</userinput +> </member> + <member> + <userinput +>--with-tdelibsdoxy-dir=$KDEDIR/share/doc/HTML/en/tdelibs-apidocs</userinput> + </member> +</simplelist +></informalexample> + +<para +>(<command +>make</command +> erstatter den globale <varname +>$KDEDIR</varname +> med den egentlige &kde;-mappe). Udfør derefter kommandoen <command +>make</command +> <link linkend="compile-and-install-make-basic" +>som sædvanligt</link +>. Efter at det integrerede udviklingsmiljø &tdevelop; er bygget, har du mulighed for også at bygge programmeringsgrænsefladen. For at gøre det skal du skrive: </para> +<informalexample +><simplelist +><member +><prompt +>~/kde3src/tdevelop> </prompt +> <userinput +>make apidocs</userinput +> </member +></simplelist +></informalexample> + +<para +>Dette bygger en <filename +>Doxyfile</filename +> i basismappen for &tdevelop;, som derefter behandles af programmet <application +>doxygen</application +> for at oprette en hel del <filename +>.html</filename +>-filer for programmeringsgrænsefladen. Når den ganske lange byggeproces for programmeringsgrænsefladen til sidst er klar, skal du installere programmeringsgrænsefladen præcis som du skal installere selve det integrerede udviklingsmiljø &tdevelop;. Få rettigheder som systemadministrator om nødvendigt med: </para> + +<informalexample +><simplelist +><member +><prompt +>~/kde3src/tdevelop> </prompt +> <userinput +>su</userinput +> </member +></simplelist +></informalexample> + +<para +>og angive systemadministratorens kodeord. Installér derefter dokumentationsfilerne: </para> + +<informalexample +><simplelist +><member +><prompt +>~/kde3src/tdevelop> </prompt +> <userinput +>make install-apidox</userinput +> </member +></simplelist +></informalexample> + +<para +>Når dette er gjort, informerer <command +>make</command +> dig om mappen hvor du til sidst kan kigge på indholdet i dokumentationen for programmeringsgrænsefladen. Bemærk adressen, eftersom du kan bruge den fra &konqueror; samt inde i &tdevelop;, hvis du har indstillet den egne kildekode for &tdevelop; som projektet at arbejde med. </para> + +<note +><para +>Du vil mest sandsynligt se en masse advarsler og/eller fejlmeddelelser under API byggekørslen for <application +>Doxygen</application +>. Bedst at ignorere dem, de er kun af interesse for &tdevelop;-udviklerne. Hvis API-generingen nogensinde bliver færdig, så vil <filename +>.html</filename +> API-filerne kunne bruges. </para +></note> + +</sect1 +> <!-- make-api --> + +</appendix +> <!-- tdevelop-install --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/tdevelop-scripting.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/tdevelop-scripting.docbook new file mode 100644 index 00000000000..4ac245cbc19 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/tdevelop-scripting.docbook @@ -0,0 +1,74 @@ +<chapter id="tdevelop-scripting"> + +<chapterinfo> + <authorgroup> + <author +><firstname +>Ian</firstname +><surname +>Geiser</surname +></author> + <!-- ROLES_OF_TRANSLATORS --> + </authorgroup> +</chapterinfo> + +<title +>Brug af scripter i KDevelop</title> + +<sect1 id="running-scripts"> +<title +>At køre scripter</title> +<para +>For at tilgå et script der er til rådighed for &tdevelop;, skal du bruge menuen <menuchoice +><guimenu +>Værktøjer</guimenu +><guimenuitem +>Scripter</guimenuitem +></menuchoice +>. Hvis ikke der findes en sådan menu, er der ingen scripter installeret som KDevelop kan bruge. </para> +</sect1> + +<sect1 id="adding-scripts"> +<title +>Tilføjelse af scripter</title> +<para +>Så snart du har tilføjet KScript-understøttelse til dit værtsprogram, er det let at tilføje scripter. Scriptene består af to dele, en desktop-fil der indeholder meta-dat om scriptet og så scriptet selv. Denne fremgangsmåde blev valgt pga. sikkerhed og simplicitet. Desktop-filen sørger for meta-information til menuer og script-typen. Det betyder at værtsprogrammet ikke behøver at tolke hvert script ved indlæsning. Herunder ses et eksempel: </para> +<para +>Ovenstående eksempel demonstrerer de primære elementer KScript vil søge efter. Det første element, "Name" er det navn der vil optræde for brugeren i værtsprogrammet og "Comment" bruges normalt som et værktøjsvink. "Type" er det vigtigste. Det bruges til at vælge den rigtige scriptfortolker der skal køre scriptet. Aktuelt er de tilrådighed værende for KDE, "ShellScript/bash" og "JavaScript/kjs". Næste trin er at oprette det faktiske script. Til eksemplet herover er Type "ShellScript/bash". Scriptets scriptfortolker tilbyder udvikleren forskellige ting. For det første er det værtsprogrammets DCOP ID. Dette videregives til scriptet som det første argument. Det betyder at fra et hvilket som helst sted i scriptet, vil værdien af "$1" returnere værtsprogrammets DCOP ID. Et script-eksempel er vist herunder: </para> + +<para +>Dette script er ret simpelt og kører blot en kommando og sætter teksten i det første dokument til uddata fra "ls- s"</para> + +<para +>Et af de mest brugbare værktøjer til at udvikle scripter for programmer er KDCOP-programmet.</para> +<figure id="screenshot-kdcop" float="1"> + <title +>KDCOP søger i DCOP grænseflader i&tdevelop;</title> + <mediaobject> + <imageobject +><imagedata fileref="kdcop_browsing.png"/></imageobject> + </mediaobject> +</figure> + +<para +>KDCOP værktøjet gør det muligt for script-udviklere at søge efter og fejlrette aktuelle grænseflader i værtsprogrammet. KDCOP sørger og for en smart funktion der tillader brugere at vælge en metode og trække den aktuelle kode til en teksteditor. Dette simplificerer brugen for dem der ikke er fortrolige med DCOP-metoder i værtssproget. For tiden understøtter KDCOP KJSEmbed, Python og UNIX shell-metoder til at tilgå DCOP.</para> + +<para +>Så snart scriptet er fuldført er det klar til at blive installeret. Program-udviklere bør dokumentere stedet der skannes for scripter. I det ovenstående eksempel for Kate, er scriptene placeret i "$KDEDIRS/share/apps/kate/scripts".</para> + +<figure id="screenshot-scripts" float="1"> + <title +>&tdevelop; Scripter på filsystemet</title> + <mediaobject> + <imageobject +><imagedata fileref="script_location.png"/></imageobject> + </mediaobject> +</figure> + +<para +>Scriptets desktop-fil og dets tilhørende script, bør placeres i samme katalog. For scriptudviklere anbefales det desuden at alle andre script-ressourcer, som f.eks. UI-filer eller data-filer bør være i script-kataloget. I ovenstående eksempel vil scriptet kunne findes i menuen Værktøjer->KDE scripter. En vigtig ting at huske for script-udviklere er at undgå at bruge funktioner der kan blokere i længere tid eller befinde sig i en event-løkke. Det skyldes at den aktuelle udgave af script-grænsefladen er beregnet til automatiserede opgaver der kører indtil de er udført. Dette ændres i KDE 4. </para> + +</sect1> + + +</chapter> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/tdevelop-survey.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/tdevelop-survey.docbook new file mode 100644 index 00000000000..6f0fc439a78 --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/tdevelop-survey.docbook @@ -0,0 +1,776 @@ +<chapter id="tdevelop-survey"> + +<chapterinfo> + <authorgroup> + <author +><firstname +>Bernd</firstname +><surname +>Pol</surname +></author> + <!-- ROLES_OF_TRANSLATORS --> + </authorgroup> +</chapterinfo> + +<title +>Oversigt over &tdevelop;'s funktioner</title> + +<indexterm zone="tdevelop-survey"> + <primary +>&tdevelop;</primary> + <secondary +>overblik</secondary +></indexterm> +<indexterm zone="tdevelop-survey"> + <primary +>Oversigt</primary +></indexterm> +<indexterm zone="tdevelop-survey"> + <primary +>overblik</primary +></indexterm> + +<para +>&tdevelop; integrerer mange værktøjer, scripter og skabeloner med en fælles brugergrænseflade. De grundlæggende dele er <itemizedlist> + <listitem +><para +>flere <link linkend="uimodes-survey" +>tilstande for brugergrænseflader</link +> som du kan bruge til at vælge arbejdsområdets udseende og fornemmelse, </para +></listitem> + <listitem +><para +>en <link linkend="applicationwizard" +>programguide</link +>, som hjælper dig med at indstille et nyt projekt, </para +></listitem> + <listitem +><para +>flere <link linkend="makesystems" +>systemer til projekthåndtering</link +>, som hjælper med at bygge og håndtere dit projekt, </para +></listitem> + <listitem +><para +>nogle <link linkend="editing" +>redigeringsværktøjer</link +> for nemt at kunne arbejde med programteksten, </para +></listitem> + <listitem +><para +>diverse <link linkend="file-browsers" +>filsøgere</link +>, som giver dig forskellige visninger af filsystemet, </para +></listitem> + <listitem +><para +>diverse <link linkend="class-browsers" +>klassesøgere</link +> for at hjælpe dig med at vedligeholder klasser og deres forhold i et objektorienteret programmeringsprojekt, </para +></listitem> + <listitem +><para +>en <link linkend="debugger" +>fejlsøgningsgrænseflade</link +> til at finde og fjerne programfejl indefra &tdevelop;, og </para +></listitem> + <listitem +><para +>flere <link linkend="plugin-tools" +>plugin-værktøjer</link +>, udvidelige moduler, eller delprogrammer, som indlæses når programmet kører og efter behov. Det gør det muligt for dig kun at aktivere de funktioner som du virkelig behøver. </para +></listitem> + <listitem +><para +>et sæt andre diagnose-, dokumentations- og optimeringsværktøjer. </para +></listitem> +</itemizedlist> +</para> + +<note> + <para +>Faktisk er der tre &tdevelop;-baserede programmer: </para> + <itemizedlist> + <listitem +><para +>&tdevelop; integreret udviklingsmiljø — det er her du normalt kommer til at arbejde.</para +></listitem> + <listitem +><para +>Den fritstående &tdevelop; Assistent dokumentationsbrowser — isolerer alle de stærke dokumentationsfunktioner fra det integrerede &tdevelop; udviklingsmiljø i et separat værktøj. Dette er specielt nyttigt når du vil slå noget programmeringsdokumentation op, men ikke vil starte hele udviklingsmiljøet.</para +></listitem> + <listitem +><para +>&tdevelop; Designer — forbedrer &Qt;-User Interface Designer med &kde; specifikke kontroller og integrerer sig fint i &tdevelop; udviklingsmiljøet.</para +></listitem> + </itemizedlist> +</note> + + +<sect1 id="uimodes-survey"> +<title +>Tilgængelige tilstande for brugergrænseflader</title> + +<indexterm zone="uimodes-survey"> + <primary +>&tdevelop;</primary> + <secondary +>tilstande for brugergrænseflader</secondary +></indexterm> +<indexterm zone="uimodes-survey"> + <primary +>brugergrænseflade</primary> + <secondary +>Tilstande i &tdevelop;</secondary +></indexterm> +<indexterm zone="uimodes-survey"> + <primary +>Grænsefladestilstande</primary +></indexterm> +<indexterm zone="uimodes-survey"> + <primary +>Underrammevinduer</primary +></indexterm> +<indexterm zone="uimodes-survey"> + <primary +>Fanebladssider</primary +></indexterm> +<indexterm zone="uimodes-survey"> + <primary +>Topniveauvinduer</primary +></indexterm> +<indexterm zone="uimodes-survey"> + <primary +>IDEA-vinduer</primary +></indexterm> + +<para +>&tdevelop; tilbyder fire forskellige grænsefladestilstande (klik på tilstandsnavnet for at se et eksempel): <itemizedlist> + <listitem +><para +><link linkend="ideal-desc" +>IDEA-vindue</link +></para> + <para +>Dette er en ny slags brugergrænseflade som både optimerer arbejdspladsen og giver en intuitiv brug af værktøjerne. </para> + <itemizedlist> + <listitem +><para +>Alle værktøjsvinduer er dokkede som en fanebladslinje omkring hovedrammens område. De er grupperede til venstre, længst nede og til højre ifølge de tjenester de tilbyder. </para +></listitem> + <listitem +><para +>Editor- og browservisninger opbevares i et stort vindue med faneblade midt i hovedrammens område. </para +></listitem> + </itemizedlist> + </listitem> + + <listitem> + <para +><link linkend="mdi-desc" +>Underrammevinduer</link +></para> + <itemizedlist> + <listitem +><para +>Alle værktøjsvisninger er fra begyndelsen dokkede i hovedrammen.</para +></listitem> + <listitem +><para +>Editor- og søgervinduer eksisterer som topniveauvinduer inde i et visningsområde i hovedrammen.</para +></listitem> + </itemizedlist> + </listitem> + + <listitem> + <para +><link linkend="tabbed-desc" +>Fanebladssider</link +></para> + <itemizedlist> + <listitem +><para +>Alle værktøjsvisninger er fra begyndelsen dokkede i hovedrammen. </para +></listitem> + <listitem +><para +>Editor- og søgervinduer opbevares i et vindue med faneblade. </para +></listitem> + </itemizedlist> + </listitem> + + <listitem> + <para +><link linkend="toplevel-desc" +>Topniveauvinduer</link +></para> + <itemizedlist> + <listitem +><para +>Alle editor-, søger- og værktøjsvinduer er topniveauvinduer direkte på desktoppen. </para +></listitem> + <listitem +><para +>Hovedkontrollen indeholder kun menulinjen, værktøjslinjer og statuslinjen. </para +></listitem> + </itemizedlist> + </listitem> + +</itemizedlist> +</para> + +<sect2 id="uimodes-switch"> +<title +>Hvordan man skifter tilstand for brugergrænseflader</title> + +<indexterm zone="uimodes-switch"> + <primary +>brugergrænseflade</primary> + <secondary +>skifte tilstand</secondary +></indexterm> +<indexterm zone="uimodes-switch"> + <primary +>skifte grænsefladetilstand</primary +></indexterm> + +<para +>For at skifte tilstand for brugergrænsefladen, vælges <menuchoice +><guimenu +>Opsætning</guimenu +> <guimenuitem +>Indstil KDevelop...</guimenuitem +></menuchoice +> i menulinjen. Dialogen <guilabel +>Indstil KDevelop</guilabel +> dukker op, hvor du skal vælge <guilabel +>Brugergrænseflade</guilabel +> i feltet til venstre. Dette bringer dig til indstillingssiden som vises nedenfor: </para> + +<screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="select-user-interface.png" format="PNG"/> + </imageobject> + <caption +><para +>Vælg en brugergrænsefladetilstand </para +></caption> + </mediaobject> +</screenshot> + +<para +>(Ældre udgaver af &tdevelop; har kun toptilstand markeringsafsnittet.) </para> + +<para +>I afsnittet <guilabel +>Hoved-brugergrænseflade-tilstand</guilabel +> vælger radioknappen den brugergrænseflade-tilstand du ønsker at arbejde i. </para> +<para +>Afhængig af den brugergrænsefladetilstand du valgte, vil andre indstillingsafsnit være tilstede hvor du kan skræddersy flere detaljer angående udseendet som du har lyst. Se kapitlet <link linkend="setup-ui" +>Valg af brugergrænseflade</link +> for flere detaljer. </para> + +<note +><para +>Glem ikke at genstarte &tdevelop; for at dine valg skal få virkning. </para +></note> + +</sect2 +> <!-- uimodes-switch --> + +<sect2 id="maximize-workspace"> +<title +>Hvordan man maksimerer arbejdsområdet</title> + +<indexterm zone="maximize-workspace"> + <primary +>&tdevelop;</primary> + <secondary +>arbejdsområde</secondary +></indexterm> +<indexterm zone="maximize-workspace"> + <primary +>&tdevelop;</primary> + <secondary +>maksimér arbejdsområde</secondary +></indexterm> +<indexterm zone="maximize-workspace"> + <primary +>brugergrænseflade</primary> + <secondary +>arbejdsområde</secondary +></indexterm> +<indexterm zone="maximize-workspace"> + <primary +>brugergrænseflade</primary> + <secondary +>menulinje</secondary +></indexterm> +<indexterm zone="maximize-workspace"> + <primary +>brugergrænseflade</primary> + <secondary +>fuldskærmstilstand</secondary +></indexterm> +<indexterm zone="maximize-workspace"> + <primary +>fuldskærmstilstand</primary +></indexterm> +<indexterm zone="maximize-workspace"> + <primary +>menulinje</primary> + <secondary +>skjul/vis</secondary +></indexterm> +<indexterm zone="maximize-workspace"> + <primary +>skjul menulinje</primary +></indexterm> +<indexterm zone="maximize-workspace"> + <primary +>vis menulinje</primary +></indexterm> + +<para +>Der er en fuldskærmstilstand tilgængelig for at maksimere pladsen, som ekspanderer hovedrammens område til skærmkanterne. Yderligere plads kan overtages ved at skjule menulinjen. Du kan naturligvis også skjule alle værktøjslinjer, som sædvanligt i <application +>KDE</application +>-programmer. </para> + +<variablelist> +<varlistentry> +<term +>Fuldskærmstilstand</term> +<listitem> +<para +>For at skifte fra eller til fuldskærmstilstand, vælges <menuchoice +><guimenu +>Vis</guimenu +> <guimenuitem +>Fuldskærmstilstand</guimenuitem +></menuchoice +> i menulinjen, eller tryk på <keycombo +>&Ctrl;&Shift;<keycap +>F</keycap +> </keycombo +>. Der er også en ikon for <guiicon +>Fuldskærmstilstand</guiicon +> i <guilabel +>Søgeværktøjslinjen</guilabel +>.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +>Vis eller skjul menulinjen</term> +<listitem> +<para +>For at <emphasis +>skjule</emphasis +> menulinjen, vælges <menuchoice +><guimenu +>Indstillinger</guimenu +> <guimenuitem +>Vis menulinje</guimenuitem +></menuchoice +> i menulinjen, eller tryk på <keycombo +>&Ctrl;<keycap +>M</keycap +> </keycombo +>. Du kan også tilføje en ikon for <guiicon +>Vis menulinje</guiicon +> i en passende værktøjslinje, ⪚<guilabel +> Søgeværktøjslinjen</guilabel +>, for slutmålet. For at <emphasis +>vise</emphasis +> menulinjen, skal du trykke på <keycombo +> &Ctrl;<keycap +>M</keycap +> </keycombo +> eller bruge ikonen <guiicon +>Vis menulinje</guiicon +> hvis den er tilgængelig. </para> +</listitem> +</varlistentry> +</variablelist> + +</sect2 +> <!-- maximize-workspace --> + +</sect1 +> <!-- uimodes-survey --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="ui-elements"> +<title +>Elementer i brugergrænsefladen</title> + +<para +>(... endnu ikke skrevet ...) </para> + +<sect2 id="ui-elements-workarea"> +<title +>Arbejdsområdet</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect2 +> <!-- ui-elements-workarea --> + +<sect2 id="ui-elements-titlebar"> +<title +>&tdevelop;'s titellinje</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect2 +> <!-- ui-elements-titlebar --> + +<sect2 id="ui-elements-statusbar"> +<title +>&tdevelop;'s statuslinje</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect2 +> <!-- ui-elements-statusbar --> + +<sect2 id="ui-elements-menubar"> +<title +>Menulinjen</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect2 +> <!-- ui-elements-menubar --> + +<sect2 id="ui-elements-toolbars"> +<title +>Værktøjslinjerne</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect2 +> <!-- ui-elements-toolbars --> + +<sect2 id="ui-elements-treetoolviews"> +<title +>Træværktøjsvisningerne</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect2 +> <!-- ui-elements-treetoolviews --> + +<sect2 id="ui-elements-outputtoolviews"> +<title +>Uddataværktøjsvisningerne</title> + +<para +>(... endnu ikke skrevet ...) </para> +</sect2 +> <!-- ui-elements-outputtoolviews --> + +</sect1 +> <!-- ui-elements --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="makesystems"> +<title +>Projekthåndteringssystem</title> + +<indexterm zone="makesystems"> + <primary +>projekthåndtering</primary +></indexterm> + +<para +>Alt i alt afhænger et projekt af en form af et projekthåndteringssystem. &tdevelop; tilbyder fire <emphasis +>projekthåndteringssystemer</emphasis +> som programmøren kan vælge mellem når et nyt projekt laves. <itemizedlist> + <listitem +><para +><link linkend="automake-project" +>Automake-projekt</link +> bruger de almindelige udviklingsværktøjer for &GNU;. </para +></listitem> + <listitem +><para +><link linkend="qmake-project" +>Qmake-projekt</link +> bruger Trolltechs Qmake-projekthåndtering. </para +></listitem> + <listitem +><para +><link linkend="ant-project" +>ANT-projekt</link +> bruger Apaches ANT-projekthåndtering for &Java;-udvikling. </para +></listitem> + <listitem +><para +><link linkend="custom-project" +>Eget projekt</link +> kræver at du vedligeholder din egen <filename +>Makefile</filename +>. </para +></listitem> +</itemizedlist> +</para> + +<sect2 id="automake-project"> +<title +>Automake-projekt</title> + +<indexterm zone="automake-project"> + <primary +>projekt</primary> + <secondary +>automake</secondary +></indexterm> +<indexterm zone="automake-project"> + <primary +>automake</primary> + <secondary +>projekt</secondary +></indexterm> + +<para +>Projekter som er lavet med Håndtering af automake i &tdevelop; gør det meget let for udviklere at bruge de almindelige &GNU; udviklingsværktøjer. De sørger for <itemizedlist> + <listitem +><para +>en bedre måde at oprette en <filename +>Makefile</filename +> og </para +></listitem> + <listitem +><para +>en god og sikkert måde for hurtig indstilling til forskellige systemer med <filename +>configure</filename +>-script oprettede af autoconf. </para +></listitem> +</itemizedlist> +</para> +</sect2 +> <!-- automake-project --> + +<sect2 id="qmake-project"> +<title +>Qmake-projekter</title> + +<indexterm zone="qmake-project"> + <primary +>projekt</primary> + <secondary +>qmake</secondary +></indexterm> +<indexterm zone="qmake-project"> + <primary +>qmake</primary> + <secondary +>projekt</secondary +></indexterm> + +<para +>For udviklere som glæder sig over fleksibiliteten og fornemmelsen i &Qt;'s qmake-system, tilbyder &tdevelop; muligheden for at håndtere qmake-baserede projekter (.pro-filer) inde i den grafiske grænseflade. </para> +<para +>For mere information om Qmake-projekthåndtering se <citetitle +>Qmake User Guide</citetitle +>, som skal være med i distributionen, eller kig på hjemmesiden <ulink url="http://doc.trolltech.com/" +>Trolltech Documentation</ulink +> hvor du finder Qmake-dokumentationen under <quote +>Qt C++ GUI Application Development Toolkit</quote +>. </para> +</sect2 +> <!-- qmake-project --> + +<sect2 id="cmake-project"> +<title +>CMake-projekter</title> + +<indexterm zone="cmake-project"> + <primary +>projekt</primary> + <secondary +>cmake</secondary +></indexterm> +<indexterm zone="cmake-project"> + <primary +>cmake</primary> + <secondary +>projekt</secondary +></indexterm> + +<para +>CMake vil være &kde;'s byggesystem for &kde; 4 og &tdevelop; sørger allerede for nogle skabeloner baserede på CMake for C og C++. Du behøver kun programmet cmake i $<envar +>PATH</envar +> for at bygge dem. </para> +<para +>For at indstille et nyt C eller C++ projekt i &tdevelop; vælg <menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Nyt projekt...</guimenuitem +> <guimenuitem +>C eller C++</guimenuitem +> <guimenuitem +>CMake-baserede projekter</guimenuitem +> <guimenuitem +>En skabelon for delt bibliotek eller Hello world program</guimenuitem +> </menuchoice +>. </para> +</sect2 +> <!-- cmake-project --> + +<sect2 id="ant-project"> +<title +>ANT-projekthåndtering (&Java;-programmer)</title> + +<indexterm zone="ant-project"> + <primary +>projekt</primary> + <secondary +>ant</secondary +></indexterm> +<indexterm zone="ant-project"> + <primary +>ant</primary> + <secondary +>projekt</secondary +></indexterm> +<indexterm zone="ant-project"> + <primary +>projekt</primary> + <secondary +>Java</secondary +></indexterm> +<indexterm zone="ant-project"> + <primary +>Java</primary> + <secondary +>projekt</secondary +></indexterm> +<indexterm zone="ant-project"> + <primary +>udvikling</primary> + <secondary +>Java</secondary +></indexterm> + +<para +>&Java;-udviklere vil måske bruge Apaches ANT-projekthåndtering til deres projekter. For at oprette et nyt ANT-projekt i &tdevelop;, vælges <menuchoice +><guimenu +>Projekt</guimenu +> <guimenuitem +>Nyt projekt...</guimenuitem +> <guimenuitem +>Java</guimenuitem +> <guimenuitem +>Ant projekt</guimenuitem +> <guimenuitem +>Program</guimenuitem +></menuchoice +>. </para> +<para +>For mere information se <ulink url="http://ant.apache.org/" +>Ant-projektets hjemmeside</ulink +>. </para> +</sect2 +> <!-- ant-project --> + +<sect2 id="custom-project"> +<title +>Egne projekter</title> + +<indexterm zone="custom-project"> + <primary +>projekt</primary> + <secondary +>egen</secondary +></indexterm> +<indexterm zone="custom-project"> + <primary +>eget projekt</primary +></indexterm> +<indexterm zone="custom-project"> + <primary +>Makefile</primary> + <secondary +>eget projekt</secondary +></indexterm> + +<para +>Hvis du foretrækker at vedligeholde din egen <filename +>Makefile</filename +> for projektet, kan du bruge valgmuligheden med et eget projekt i &tdevelop;. Det kan være passende i projekter med usædvanlig struktur, eller hvis du vil have fuldstændig kontrol over byggeprocessen. </para> +<para +>Hvis du alligevel ikke <emphasis +>virkelig behøver</emphasis +> den egne projekthåndterings ekstra fleksibilitet og kontrol, bør du overveje &automanag; eller en anden projekthåndtering, eftersom de forenkler bygge- og distributionsprocessen for programmer væsentligt. </para> +</sect2 +> <!-- custom-project --> + +<sect2 id="makesystems-distribution"> +<title +>Hvordan du kan distribuere dit program</title> + +<indexterm zone="makesystems-distribution"> + <primary +>distribution</primary +></indexterm> +<indexterm zone="makesystems-distribution"> + <primary +>program</primary> + <secondary +>distribution</secondary +></indexterm> +<indexterm zone="makesystems-distribution"> + <primary +>binær pakke</primary +></indexterm> + +<para +>Distributionen af dit program kræver ikke at slutbrugeren har installeret noget yderligere andet end <itemizedlist> + <listitem +><para +>en passende oversætter,</para +></listitem> + <listitem +><para +>en linker, og</para +></listitem> + <listitem +><para +>passende udviklingsbiblioteker,</para +></listitem> +</itemizedlist> +</para> +<para +>hvilket i det mindste for C++ programmer oftest er tilfældet. Men du kan ligesågodt distribuere <emphasis +>binære pakker</emphasis +> af programmet. Under alle omstændigheder behøver slutbrugeren af produktet ikke at installere &tdevelop;. </para> +<para +>Hvis du giver din kildekode bort, råder vi dig at også tage <emphasis +>projektfilen</emphasis +> med for &tdevelop;. Det gør det meget enkelt for andre udviklere, hvis de bruger &tdevelop;—til at arbejde med kildekoden. </para> +<para +>For projekter hvor <emphasis +>flere udviklere</emphasis +>, som måske arbejder på forskellige steder, er indblandede, bør dette alligevel være tilfældet. Du kan sikre dig om overensstemmelse for alle <filename +>Makefile</filename +>, for at ikke løbe ind i problemer. </para> +<para +>Især for programmer med flere sprog, arbejder <emphasis +>oversættere</emphasis +> ikke direkte med kildekoden, undtagen i tilfælde som kræver rettelser for at gøre det muligt med oversættelsesunderstøttelse. </para> + +</sect2 +> <!-- makesystems-distribution --> + +</sect1 +> <!-- makesystems --> + +</chapter +> <!-- tdevelop-survey --> diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/unixdev.docbook b/tde-i18n-da/docs/tdevelop/tdevelop/unixdev.docbook new file mode 100644 index 00000000000..0fe481c9f0f --- /dev/null +++ b/tde-i18n-da/docs/tdevelop/tdevelop/unixdev.docbook @@ -0,0 +1,639 @@ +<appendix id="unixdev"> + +<appendixinfo> + <authorgroup> + <author +><firstname +>Bernd</firstname +><surname +>Pol</surname +></author> + <!-- ROLES_OF_TRANSLATORS --> + </authorgroup> +</appendixinfo> + +<title +>Udvikling på Unix</title> + +<indexterm zone="unixdev" +><primary +>udvikling</primary +></indexterm> +<indexterm zone="unixdev"> + <primary +>UNIX</primary> + <secondary +>udvikling</secondary +></indexterm> + +<sect1 id="history"> +<title +>Nogle historiske bemærkninger</title> + +<indexterm zone="history" +><primary +>historie</primary +></indexterm> +<indexterm zone="history" +><primary +>scriptsprog</primary +></indexterm> +<indexterm zone="history"> + <primary +>UNIX</primary> + <secondary +>historie</secondary +></indexterm> +<indexterm zone="history"> + <primary +>UNIX</primary> + <secondary +>pipe</secondary +></indexterm> +<indexterm zone="history"> + <primary +>UNIX</primary> + <secondary +>skal</secondary +></indexterm> +<indexterm zone="history"> + <primary +>skal</primary> + <secondary +>UNIX</secondary +></indexterm> + +<para +>Fra begyndelsen har Unix opretholdt to meget forskellige udviklingsmodeller. Den ene er sfæren af programmeringssprog for <emphasis +>systemer og programmeringssprog</emphasis +>, hvor en kildekode oversættes til maskinkode med en <emphasis +>oversætter</emphasis +> eller <emphasis +>tolk</emphasis +>. Programmeringssproget C er et eksempel på dette. Unix var den første operativsystemkerne som blev skrevet i et højniveausprog i stedet for den maskinnære assembler, som var almindeligt tidligere. (I virkeligheden blev sproget C til og med opfundet for at skrive Unix-kernen, og tilhørende programmer, på en DEC PDP-11 maskine.) </para> +<para +>Den anden model er sfæren med <emphasis +>scriptsprog</emphasis +>, som startede med opfindelsen af Unix-skallen, som samtidigt var operativsystemets brugergrænseflade — og et programsprog på meget højt niveau. Et skalscript bygges op af en mængde små værktøjer som f.eks. <command +>grep</command +>, <command +>sed</command +> og <command +>find</command +>. Hvert sådant værktøj er konstrueret til en afgrænset opgave. Tricket er at alle sådanne værktøjer kan forbindes med hinanden via en enkel overføringsmekanisme, der hedder <emphasis +>pipe</emphasis +>, som sender udskriften fra det foregående værktøj til indtastningen for den næste. Det giver grundlaget for en meget kraftfuld og fleksibel programmeringsmetode. </para> +<para +>Med tiden er begge sfærerne udviklet. Mens C stadigvæk i hovedsagen bruges som et systemprogrammeringssprog, har C++, som en variant af C beriget med objektorienterede og generiske udvidelser, fundet sin plads i udvikling af komplekse programmer i 1990'erne. Der er mange andre programmeringssprog, til og med ældre beholder deres plads — FORTRAN77 og Ada har f.eks. stadigvæk deres tilhængere specielt i numeriske programmer. </para> +</sect1 +> <!-- history --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="unixdev-scripting-languages"> +<title +>Moderne scriptsprog</title> +<para +>På scriptområdet er der sket et skift væk fra skallen, som lider af flytbarhedsproblemer, til sprog som samler alle almindelige funktioner i standardbiblioteker, mens de stadigvæk kan have grænseflader mod omverden via pipes når det behøves. </para> +<para +>Alle scriptsprog har det tilfælles at de ofte er flytbare mellem mange Unix-varianter, &Microsoft; &Windows;, &MacOS; eller til og med VMS. Desuden har de alle implementeringer som kan distribueres frit. </para> + +<sect2 id="unixdev-SL-Perl"> +<title +>&perl;</title> + +<indexterm zone="unixdev-SL-Perl" +><primary +>Perl</primary +></indexterm> +<indexterm zone="unixdev-SL-Perl"> + <primary +>scriptsprog</primary> + <secondary +>Perl</secondary +></indexterm> + +<para +>&perl; er blevet populært som tekstbehandlings- og systemadministrationssprog. Fra starten af internettet anvendtes CGI-scripter skrevet i &perl; som en udbredt måde at lave dynamiske netsider fra databaser. I dag er denne metode ofte erstattet med pluginnet <command +>mod_perl</command +> for net-serveren &apache;. Blandt &perl;s styrker er dets indbyggede støtte for avancerede regulære udtryk, og rige arkiver med frit distribuerede moduler. </para> +<para +>For mere information se hjemmesiden <ulink url="http://cpan.org" +>Comprehensive Perl Archive Network (<acronym +>CPAN</acronym +>)</ulink +>. </para> +</sect2 +> <!-- unixdev-SL-Perl --> + +<sect2 id="unixdev-SL-Python"> +<title +>Python</title> + +<indexterm zone="unixdev-SL-Python" +><primary +>Python</primary +></indexterm> +<indexterm zone="unixdev-SL-Python"> + <primary +>scriptsprog</primary> + <secondary +>Python</secondary +></indexterm> + +<para +><ulink url="http://www.python.org" +>&python;</ulink +> skinner med elegancen i sit klassesystem og enkelheden og fleksibiliteten som ydre biblioteker kan pakkes ind i, på en sådan måde at de ser ud til at være standardklasser og -funktioner i &python;. I modsætning til &perl;, har &python; en klar og koncis indlejringsgrænseflade, som gør den til det bedste valg for at muliggøre scripter for C og C++ programmer. </para> +</sect2 +> <!-- unixdev-SL-Python --> + +<sect2 id="unixdev-SL-PHP"> +<title +>PHP</title> + +<indexterm zone="unixdev-SL-PHP" +><primary +>PHP</primary +></indexterm> +<indexterm zone="unixdev-SL-PHP"> + <primary +>scriptsprog</primary> + <secondary +>PHP</secondary +></indexterm> + +<para +><ulink url="http://www.php.net" +>&php;</ulink +> blev opfundet som et sprog til direkte indlejring på &HTML;-sider, og har af den grund hovedbrugen at leverere dynamisk indhold for nettet. </para> +</sect2 +> <!-- unixdev-SL-PHP --> +</sect1 +> <!-- unixdev-scripting-languages --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> +<sect1 id="unixdev-hl-script"> +<title +>Højere-niveau scripter</title> + +<para +>Højere-niveau UNIX-programmer mangler sædvanligvis den hastighed og fleksibilitet som de traditionelle tegn-orientede skal-script mekanismer har. Dette er især sandt i verdenen af grafiske brugergrænseflader (GUI) som f.eks. &kde;. </para> +<para +>Der har været forsøg på at sørge for lignende mekanismer som vil virke på et højere programniveau, især <link linkend="unixdev-corba" +>CORBA</link +> og, i &kde;-miljøet, <link linkend="unixdev-dcop" +>&DCOP;</link +>. </para> + +<sect2 id="unixdev-corba"> +<title +>CORBA-Protokollen</title> + +<indexterm zone="unixdev-corba" +><primary +>CORBA</primary +></indexterm> +<indexterm zone="unixdev-corba"> + <primary +>scriptsprog</primary> + <secondary +>CORBA</secondary +></indexterm> +<indexterm zone="unixdev-corba"> + <primary +>kommunikation</primary> + <secondary +>CORBA</secondary +></indexterm> + +<para +><ulink url="http://www.omg.org/gettingstarted/corbafaq.htm" +>CORBA</ulink +> (<emphasis +>Common Object Request Broker Architecture</emphasis +>) er et forsøg på at lade computerens programmer arbejde sammen henover netværk. Det blev lavet af den private, leverandøruafhængige <ulink url="http://www.omg.org" +>OMG</ulink +> (Object Management Group) standardkomite. </para> +<para +>CORBA-baserede programmer bruger IIOP standardprotokollen til at kommunikere. Implementationer baseret på IIOP er tilgængelige på et vidt område af operativsystemer, programmeringssprog og netværk og er således ekstremt flytbart. </para> +<para +>Hovedbagdelen ved CORBA er dens temmelig langsomme hastighed. Mens dette kan tolereres i netværk, er det en ægte hindring for interprogram kommunikationer i et miljø uden netværk såsom &kde; kørende på en enkelt computer. </para> + +</sect2 +> <!-- unixdev-corba --> + +<sect2 id="unixdev-dcop"> +<title +>&DCOP;-grænsefladen</title> + +<indexterm zone="unixdev-dcop" +><primary +>DCOP</primary +></indexterm> +<indexterm zone="unixdev-dcop"> + <primary +>scriptsprog</primary> + <secondary +>DCOP</secondary +></indexterm> +<indexterm zone="unixdev-dcop"> + <primary +>kommunikation</primary> + <secondary +>DCOP</secondary +></indexterm> + +<para +>En anden udvikling af UNIX-lignende scripter er <ulink url="http://developer.kde.org/documentation/library/kdeqt/dcop.html" +><emphasis +>DCOP</emphasis +></ulink +>-protokollen som blev lavet til kommunikation mellem &kde; programmer for at komme ud over CORBA's begrænsninger. </para> +<para +>&DCOP; betyder <emphasis +>Desktop COmmunikation Protocol</emphasis +> (protokollen for desktopkommunikation), og er implementeret som en enkel IPC/RPC-mekanisme bygget til at virke via udtag. Sluteffekten er at tilbyde funktioner som ligner den traditionelle pipe-mekanisme i Unix. </para> +<para +>Traditionelle skalscripter er baserede på ganske små programværktøjer, som blev konstrueret til at virke baseret på ren tekst. &DCOP; tillader at avancerede grafiske programmer kommunikerer med hinanden på en tilsvarende måde. Det gør det for eksempel muligt for et &kde;-program at sende meddelelser til et andet &kde;-program, eller tage imod data fra det til sine egne formål. </para> +<para +>Der er dog bagdele. For at bruge &DCOP;, skal programmet være konstrueret med en speciel &DCOP;-grænseflade. Desuden går &DCOP;-kommunikationsprocessen noget langsomt (selvom den går hurtigere end CORBA). Alligevel så giver det meget af styrken og fleksibiliteten i Unix-scripter til højniveauprogrammer som er baserede på en grafisk brugergrænseflade. </para> +<para +>For yderligere information, se <ulink url="http://developer.kde.org/documentation/library/kdeqt/dcop.html" +>DCOP Desktop COmmunication Protocol library</ulink +> artiklen eller <ulink url="developer.kde.org/documentation/library/cvs-api/dcop/html/index.html" +>The &DCOP; Desktop Communication Protocol library</ulink +>, dokumentation af brugergrænsefladen for &kde;'s DCOP-bibliotek. </para> +</sect2 +> <!-- unixdev-dcop --> + +</sect1 +> <!-- unixdev-hl-script --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="unixdev-buildsystems"> +<title +>Byggesystemer</title> + +<para +>Undtagen i meget enkle tilfælde, vil programmeringsprojekter bestå af mange byggeblokke med kildekode, hvert af dem placeret i en enkelt fil for enklere vedligeholdelse. For at få alt til at køre, skal du effektivt kunne oversætte alt dette til nogen få maskinkodeenheder med passende format, som gør at operativsystemet kan indlæse og køre programmet. </para> +<para +>For at opnå dette, er de grundlæggende værktøjer du behøver <itemizedlist> + <listitem +><para +>en <emphasis +>teksteditor</emphasis +> til at skrive kildekodefilerne, </para +></listitem> + <listitem +><para +>et oversættelsesprogram, oftest en <emphasis +>oversætter</emphasis +> til at lave kildekoden om til objektfiler, </para +></listitem> + <listitem +><para +>et <emphasis +>biblioteksprogram</emphasis +> som samler objektfiler i biblioteker, som nemt kan genbruges uden at behøve at kompileres igen, </para +></listitem> + <listitem +><para +>en <emphasis +>linker</emphasis +>, som binder flere objektfiler og biblioteker sammen til et kørbart program, </para +></listitem> + <listitem +><para +>et <emphasis +>byggesystem</emphasis +>, som tilbyder nogle måder at håndtere alt dette, og ikke at forglemme, </para +></listitem> + <listitem +><para +>en <emphasis +>fejlsøger</emphasis +> til (forhåbentlig) at finde alle fejl i programmet, og muligvis yderligere diagnoseværktøjer for at få alt til at køre smidigt. </para +></listitem> +</itemizedlist> +</para> + +<para +>Når man har et stort projekt, som kan bestå af op til hundredvis af kildekodefiler, kan kompileringsprocessen blive rigtigt arbejdsintensiv. Man vil ikke kompilere alle filer om hver gang en af dem er ændret. I stedet vil man kun kompilere de filer om som er påvirket af ændringen. I almindelighed er det ikke klart hvilke det er. Når en funktionsprototype i en deklarationsfil er ændret, skal alle filer som afhænger af deklarationsfilen kompileres om. </para> +<para +>Når du f.eks. ændrer en funktionsprototype i en deklarationsfil, skal du kompilere hver fil som inkluderer denne deklarationsfil. Hvis dit projekt indeholder mange sådanne filer, kan du nemt glemme en eller to af dem hvis du skal gøre det manuelt. Således er automatiseringsmetoder en nødvendighed. </para> + +<sect2 id="unixdev-buildsystems-make"> +<title +>Make-processen</title> + +<indexterm zone="unixdev-buildsystems-make"> + <primary +>make</primary +></indexterm> +<indexterm zone="unixdev-buildsystems-make"> + <primary +>Makefile</primary +></indexterm> +<indexterm zone="unixdev-buildsystems-make"> + <primary +>regel</primary +></indexterm> +<indexterm zone="unixdev-buildsystems-make"> + <primary +>genkompileringer</primary +></indexterm> +<indexterm zone="unixdev-buildsystems-make"> + <primary +>mål</primary +></indexterm> +<indexterm zone="unixdev-buildsystems-make"> + <primary +>afhængigheder</primary +></indexterm> +<indexterm zone="unixdev-buildsystems-make"> + <primary +>kommandoer</primary +></indexterm> + +<para +>Et værktøj som tager sig af omkompileringer er <command +>make</command +>. Det holder styr på alt arbejde med et sæt <emphasis +>regler</emphasis +>, som beskriver hvad der skal gøres hvis en vis information (oftest en kildekode- eller objektkodefil) er ændret. Alle regler som hører til et vist projekt opbevares i en såkaldt <filename +>Makefile</filename +>, som behandles af <command +>make</command +> så snart du vil opdatere dit arbejde. </para> +<para +>Hver regel består af flere byggeblokke, nærmere bestemt <itemizedlist> + <listitem +><para +>et <emphasis +>mål</emphasis +>, &ie; filen som skal bygges </para +></listitem> + <listitem +><para +>et sæt <emphasis +>afhængigheder</emphasis +>, egentlig navnene på de filer som målet afhænger af (⪚ navnet på en kildekodefil, når målet er navnet på objektfilen som skal bygges) og </para +></listitem> + <listitem +><para +>de <emphasis +>kommandoer</emphasis +> som skal køres for at <quote +>make</quote +> målet (dvs. for at kompilere det eller linke det sammen med andre objektfiler for at lave en kørbar programfil). </para +></listitem> +</itemizedlist> +</para> +<para +>Enkelt udtrykt, læser kommandoen <command +>make</command +> reglerne en af gangen, kontrollerer hver fil i afhængighedslisten for et givet mål, og bygger målet igen hvis nogen af filerne er ændrede, med de kommandoer som er på listen i den regel. </para> +<para +>Der er adskillige yderligere muligheder for at styre en sådan byggeproces, og en <filename +>Makefile</filename +> kan således vokse og blive meget kompleks. Vi kan ikke gå ind på detaljer her. Under alle omstændigheder, anbefaler vi at du gør dig bekendt med syntaksen for <command +>make</command +>. Selv om du ikke normalt bruger det direkte, kan en forståelse for det fundamentale i byggesystemet være nyttigt. Se <ulink url="info://make/Top" +><quote +>GNU make manualen</quote +></ulink +> for mere information. </para> +<para +>For mere detaljeret information specifik for &tdevelop;, se <link linkend="project-management" +>Bygge og projekthåndtering</link +> i denne håndbog. </para> +<para +>Der er flere vejledninger tilgængelige, se <link linkend="automake-references" +>referencer</link +> i kapitlet Bygge og projekthåndtering. </para> +</sect2 +> <!-- unixdev-buildsystems-make --> + +</sect1 +> <!-- unixdev-buildsystems --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="unixdev-guidevelopment"> +<title +>Udvikling af grafisk grænseflade</title> + +<indexterm zone="unixdev-guidevelopment"> + <primary +>GUI</primary +></indexterm> +<indexterm zone="unixdev-guidevelopment"> + <primary +>grafisk brugergrænseflade</primary +></indexterm> +<indexterm zone="unixdev-guidevelopment"> + <primary +>brugergrænseflade</primary> + <secondary +>GUI</secondary +></indexterm> + +<para +>Programudviklere bliver endnu mere belastede ved at de ikke kun skal lave programbibliotekerne og logikken, men også sørge for let anvendelige egenbyggede brugergrænseflader som både er nemme at forstå og funktionelle. De fleste programmører får lidt eller ingen uddannelse i udvikling af grafiske grænseflader, og som et resultat er brugergrænseflader ofte dårligt konstruerede. </para> +<para +>Gennem mange år er nogle fælles designprincipper blevet udviklet. Du anbefales stærkt at holde dig til dem. På den måde beholder din brugergrænseflade fælles udseende og fornemmelse, hvilket brugere af programmet vil sætte pris på. </para> +<para +>For udvikling af grafiske grænseflader for &kde; er der en stilguide tilgængelig. Den findes som <ulink url="http://developer.kde.org/documentation/standards/kde/style/basics/index.html" +>&kde;'s guide for brugergrænseflade</ulink +> på siden &kde;'s udviklingshjørne. </para> +<para +>En kort introduktion til almindelige GUI design-principper kan findes <ulink url="http://axp16.iie.org.mx/Monitor/v01n03/ar_ihc2.htm" +>her</ulink +>. </para> + +</sect1 +> <!-- unixdev-guidevelopment --> + +<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> + +<sect1 id="unixdev-ide"> +<title +>Integration af begreber og værktøjer: det integrerede udviklingsmiljø</title> + +<indexterm zone="unixdev-ide"> + <primary +>IDE</primary +></indexterm> +<indexterm zone="unixdev-ide"> + <primary +>integreret udviklingsmiljø</primary +></indexterm> +<indexterm zone="unixdev-ide"> + <primary +>udvikling</primary> + <secondary +>IDE</secondary +></indexterm> +<indexterm zone="unixdev-ide"> + <primary +>miljø</primary> + <secondary +>IDE</secondary +></indexterm> + +<para +>Der er separate værktøjer tilgængelige for næsten hvert skridt i programmeringsprocessen — planlægning, redigering, processen for at håndtere filer og kompilering, fejlsøgning, dokumentation med mere. Men når projekterne vokser, bliver programmeringsprocessen sandsynligvis ganske omstændelig. </para> +<para +>Meget gentagent arbejde skal gøres ved konstruktion, kompilering og fejlsøgning af et program. En hel del arbejde kan gemmes ved at bruge skabeloner og scripter. Yderligere arbejde kan gemmes ved at have værktøjer let tilgængelige, og med mulighed for at kommunikere med hinanden i en fælles grafisk grænseflade. </para> +<para +>For eksempel — ville det ikke være bekvemt hvis en fejlsøger kunne åbne kildekoden det drejer sig om i en editor, og placere markøren direkte på stedet for fejlen som netop blev fundet. </para> +<para +>For nemmere at opnå et sådant system kom <emphasis +>integrerede udviklingsmiljøer</emphasis +> (IDE) frem. Et sådant miljø integrerer alle skabeloner, værktøjer og scripter som behøves i udviklingsprocessen i en enkelt omgivelse. </para> +<para +>&tdevelop; er et sådant integreret udviklingsmiljø for &kde;-platformen. Den tilbyder et bredt spektrum af værktøjer som letter programudvikling og vedligeholdelse, til og med for forskellige programsprog og forskellige platforme. </para> + +<sect2 id="unixdev-ide-tdevelop"> +<title +>Grundlæggende funktioner i &tdevelop; &kdevrelease;</title> + +<indexterm zone="unixdev-ide-tdevelop"> + <primary +>&tdevelop;</primary> + <secondary +>funktioner</secondary +></indexterm> +<indexterm zone="unixdev-ide-tdevelop"> + <primary +>funktioner</primary +></indexterm> + +<!-- ### copied from web page, needs to be updated --> + +<itemizedlist> + <listitem> + <para +>Håndterer alle <emphasis +>udviklingsværktøjer</emphasis +> som behøves for C++ programmering, såsom oversætteren, linkeren, fejlsøgeren og byggesystemet</para> + </listitem> + <listitem> + <para +>Sørger for en <emphasis +>programguide</emphasis +> som laver fuldstændige, køreklare eksempelprogrammer</para> + </listitem> + <listitem> + <para +>Tillader brugeren at vælge en <emphasis +>integreret editor</emphasis +> baseret på &kde;'s programmeringseditoren &kwrite;, Trolltec's <application +>QEditor</application +>, eller andre.</para> + </listitem> + <listitem> + <para +>En <emphasis +>klassegenerator</emphasis +> til at oprette nye klasser og integrere dem i det nuværende projekt</para> + </listitem> + <listitem> + <para +><emphasis +>Filhåndtering</emphasis +> for kildekode, deklarationer, dokumentation, osv. som skal indgå i projektet</para> + </listitem> + <listitem> + <para +>Hjælp med at <emphasis +>lave en brugerhåndbog for programmet</emphasis +> skrevet med &kde;-værktøjer.</para> + </listitem> + <listitem> + <para +>Automatisk &HTML;-baseret <emphasis +>dokumentation af programmeringsgrænseflade</emphasis +> for projektets klasser med krydsreference til de brugte biblioteker</para> + </listitem> + <listitem> + <para +><emphasis +>Oversættelsesunderstøttelse</emphasis +> som gør det muligt for oversættere enkelt at tilføje deres modersmål til projektet, inklusive understøttelse for &kbabel;.</para> + </listitem> + <listitem> + <para +>Støtte for at håndtere et projekt via et af adskillige <emphasis +>versionssystemer</emphasis +> (f.eks. &CVS;), ved at sørge for en letanvendelig grænseflade til funktionerne som oftest behøves</para> + </listitem> + <listitem> + <para +>En integreret <emphasis +>fejlsøger</emphasis +> forende.</para> + </listitem> + <listitem> + <para +>En integreret <emphasis +>skal-konsol</emphasis +> emulator.</para> + </listitem> + <listitem> + <para +><emphasis +>kommentarer</emphasis +> i deklarationsfiler og kildekodefiler.</para> + </listitem> + <listitem> + <para +><emphasis +>Automatisk kodekomplettering</emphasis +> for klassevariabler, klassemetoder, funktionsargumenter med mere</para> + </listitem> + <listitem> + <para +><emphasis +>Skabeloner til at oprette diverse projekter</emphasis +> (moduler i kontrolcentret, miniprogrammer i panelet &kicker;, I/O-slaver, plugin til &konqueror; og desktopstiler)</para> + </listitem> + <listitem> + <para +>Fire <emphasis +>navigationstrævisninger</emphasis +> for nemt at kunne skifte mellem kildekodefiler, deklarationsfiler, klasser og dokumentation, hvilket gør det unødvendigt med en ekstern filhåndtering</para> + </listitem> + <listitem> + <para +><emphasis +>Støtte for krydskompilering</emphasis +>, med mulighed for at angive forskellige oversættere, oversætterflag, målarkitektur osv.</para> + </listitem> + <listitem> + <para +>Støtte for <emphasis +>projekter med Qt/Embedded</emphasis +> (som Zaurus og IPAQ)</para> + </listitem> + <listitem> + <para +>Mulighed for <emphasis +>inklusion af et hvilket som helst andet program</emphasis +> du behøver til udvikling ved at tilføje det i menuen <guimenuitem +>Værktøjer</guimenuitem +>, ifølge dine individuelle behov</para> + </listitem> +</itemizedlist> + +</sect2 +> <!-- unixdev-ide-tdevelop --> + +</sect1 +> <!-- unixdev-ide --> + +</appendix +> <!-- unixdev --> + |