From f7e7a923aca8be643f9ae6f7252f9fb27b3d2c3b Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sat, 3 Dec 2011 11:05:10 -0600 Subject: Second part of prior commit --- tde-i18n-da/docs/tdevelop/Makefile.am | 4 + tde-i18n-da/docs/tdevelop/Makefile.in | 587 +++ .../docs/tdevelop/kde_app_devel/Makefile.am | 4 + .../docs/tdevelop/kde_app_devel/Makefile.in | 635 +++ .../docs/tdevelop/kde_app_devel/index.cache.bz2 | Bin 0 -> 22505 bytes .../docs/tdevelop/kde_app_devel/index.docbook | 1870 +++++++++ tde-i18n-da/docs/tdevelop/kdearch/Makefile.am | 4 + tde-i18n-da/docs/tdevelop/kdearch/Makefile.in | 635 +++ tde-i18n-da/docs/tdevelop/kdearch/index.cache.bz2 | Bin 0 -> 29494 bytes tde-i18n-da/docs/tdevelop/kdearch/index.docbook | 3680 ++++++++++++++++++ tde-i18n-da/docs/tdevelop/tdevelop/Makefile.am | 4 + tde-i18n-da/docs/tdevelop/tdevelop/Makefile.in | 635 +++ .../tdevelop/tdevelop/adv-build-management.docbook | 172 + .../docs/tdevelop/tdevelop/app-changelog.docbook | 89 + .../docs/tdevelop/tdevelop/app-files.docbook | 1686 ++++++++ .../docs/tdevelop/tdevelop/app-menu.docbook | 72 + .../docs/tdevelop/tdevelop/app-misc-info.docbook | 28 + .../tdevelop/tdevelop/app-uimodes-examples.docbook | 174 + .../tdevelop/tdevelop/applicationwizard.docbook | 1382 +++++++ .../docs/tdevelop/tdevelop/class-browsers.docbook | 89 + .../docs/tdevelop/tdevelop/commands.docbook | 2999 ++++++++++++++ tde-i18n-da/docs/tdevelop/tdevelop/credits.docbook | 40 + tde-i18n-da/docs/tdevelop/tdevelop/cvs.docbook | 133 + .../docs/tdevelop/tdevelop/debugger.docbook | 337 ++ .../docs/tdevelop/tdevelop/documentation.docbook | 73 + tde-i18n-da/docs/tdevelop/tdevelop/editing.docbook | 612 +++ .../docs/tdevelop/tdevelop/file-browsers.docbook | 67 + .../docs/tdevelop/tdevelop/getting-started.docbook | 4088 ++++++++++++++++++++ tde-i18n-da/docs/tdevelop/tdevelop/index.cache.bz2 | Bin 0 -> 105154 bytes tde-i18n-da/docs/tdevelop/tdevelop/index.docbook | 680 ++++ .../docs/tdevelop/tdevelop/nutshell.docbook | 376 ++ .../docs/tdevelop/tdevelop/plugin-tools.docbook | 731 ++++ .../tdevelop/tdevelop/project-advanced.docbook | 111 + .../tdevelop/tdevelop/project-management.docbook | 1297 +++++++ tde-i18n-da/docs/tdevelop/tdevelop/setup.docbook | 3013 +++++++++++++++ .../docs/tdevelop/tdevelop/survey-manual.docbook | 329 ++ .../tdevelop/tdevelop/tdevelop-install.docbook | 1292 +++++++ .../tdevelop/tdevelop/tdevelop-scripting.docbook | 74 + .../docs/tdevelop/tdevelop/tdevelop-survey.docbook | 776 ++++ tde-i18n-da/docs/tdevelop/tdevelop/unixdev.docbook | 639 +++ 40 files changed, 29417 insertions(+) create mode 100644 tde-i18n-da/docs/tdevelop/Makefile.am create mode 100644 tde-i18n-da/docs/tdevelop/Makefile.in create mode 100644 tde-i18n-da/docs/tdevelop/kde_app_devel/Makefile.am create mode 100644 tde-i18n-da/docs/tdevelop/kde_app_devel/Makefile.in create mode 100644 tde-i18n-da/docs/tdevelop/kde_app_devel/index.cache.bz2 create mode 100644 tde-i18n-da/docs/tdevelop/kde_app_devel/index.docbook create mode 100644 tde-i18n-da/docs/tdevelop/kdearch/Makefile.am create mode 100644 tde-i18n-da/docs/tdevelop/kdearch/Makefile.in create mode 100644 tde-i18n-da/docs/tdevelop/kdearch/index.cache.bz2 create mode 100644 tde-i18n-da/docs/tdevelop/kdearch/index.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/Makefile.am create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/Makefile.in create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/adv-build-management.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/app-changelog.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/app-files.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/app-menu.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/app-misc-info.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/app-uimodes-examples.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/applicationwizard.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/class-browsers.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/commands.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/credits.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/cvs.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/debugger.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/documentation.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/editing.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/file-browsers.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/getting-started.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/index.cache.bz2 create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/index.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/nutshell.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/plugin-tools.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/project-advanced.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/project-management.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/setup.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/survey-manual.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/tdevelop-install.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/tdevelop-scripting.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/tdevelop-survey.docbook create mode 100644 tde-i18n-da/docs/tdevelop/tdevelop/unixdev.docbook (limited to 'tde-i18n-da/docs/tdevelop') 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 new file mode 100644 index 00000000000..f066d9032fb Binary files /dev/null and b/tde-i18n-da/docs/tdevelop/kde_app_devel/index.cache.bz2 differ 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 @@ + +KDevelop"> + + + +]> + + + + +&tdevelop; programmeringshåndbog + +2002-12-05 +2.0 + + +Ralf Nolden
Ralf.Nolden@post.rwth-aachen.de
+
+Caleb Tennis
caleb@aei-tech.com
+
+
+ + +1999 +Ralf Nolden + + +2002 +Caleb Tennis + + + + +&FDLNotice; + + +Brugerguide til C++ programudvikling for K-desktopmiljøet (KDE) med det integrerede udviklingsmiljø &tdevelop; + + + +KDE +KDevelop +IDE +udvikling +programmering + + +
+ + +Indledning +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. + + +Hvad du allerede bør vide +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. + + + +Om denne håndbog +Denne håndbog er skrevet for at give udviklere en introduktion til udvikling af KDE-programmer ved at bruge det integrerede udviklingsmiljø KDevelop. +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. +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. +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. + +I det næste kapitel +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. + + + +I de følgende kapitler +Vil du lære hvordan: +et program oprettes med programguiden +Hvad projektskelettet allerede sørger for +Hvad koden som allerede er lavet betyder +Hvordan man laver egne visninger +Hvordan programmets funktion kan udvides med dialoger, menulinjer og værktøjslinjer +Hvordan programmet kan gøres brugervenligt ved at sørge for hjælpefunktioner +Hvordan man skriver dokumentation til netbrug + + + + + + + +Yderligere information +Yderligere information om QT- og KDE-programmering er tilgængelig fra forskellige kilder: +Programming with Qt af Matthias Kalle Dalheimer +KDevelop's brugermanual, som kommer med udviklingsmiljøet KDevelop +Online-referencen til QT-biblioteket +KDE's hjemmeside for udviklere + + +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++. +For at få hjælp til det integrerede udviklingsmiljøet KDevelop, kan du sende spørgsmål til vores e-mail-liste på tdevelop@tdevelop.org. 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. + + + + + +KDE- og QT-bibliotekerne +Det norske foretagende TrollTech (http://www.trolltech.com) 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. +KDE-gruppen (http://www.kde.org) 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. +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. + + +QT-værktøjskassen for grafiske brugergrænseflader +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: +Et komplet sæt af klasser og metoder klare til at bruge til og med for programmering som ikke berører grafik +En god løsning på brugerkommunikationen med virtuelle metoder og mekanismen med signaler og slot +Et sæt fordefinerede grafiske grænsefladeselementer, som kaldes "grafiske kontroller" som kan bruges til at oprette synlige elementer +Desuden fuldstændige fordefinerede dialoger som ofte bruges i programmer såsom fremgang- og fildialoger + + +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. + + +Det første QT-program +Som sædvanligt skal programmer i C++ indeholde funktionen main(), 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: #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(); +} + + +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 QApplication, som repræsenteres af variablen a. +Derefter laver programmet en udgave af klassen QPushButton 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. +Derefter kaldes metoden resize() for knappen hello. Den ændrer komponenternes normalstørrelse (som i dette tilfælde er QPushButton) 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 a.exec(), 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. + + + +Referencedokumentation for Qt +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å, QApplication og QPushButton, vælg "Alphabetical Class List" og led efter tilsvarende navne. Følg en af dem for at tage en kig på klassedokumentationen. +Alternativt kan du bruge net-dokumentationen fra TrollTechs QT-dokumentation. +Du vil se konstruktoren og alle andre metoder som klassen QApplication 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. + +Tolkning af eksemplet +Begyndende fra QApplication, finder du alle metoder som bruges i vort første eksempel: +konstruktoren QApplication() +metoden setMainWidget() +metoden exec() + + +Tolkningen af hvorfor vi bruger disse metoder er meget enkel: +Opret en instans af klassen QApplication med konstruktoren, så vi kan bruge elementer for den grafiske grænsefladen som QT sørger for +Opret en grafisk komponent som bliver indholdet i vort programvindue +Sæt kontrollen som hovedkontrol for en +Kør en instans af QApplication + + +Det andet objekt i vort program er trykknappen, en instans af klassen QPushButton. 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 resize() 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. +Men hvad gælder for metoden show()? Nu mærker du, at som de fleste andre grafiske komponenter, er QPushButton baseret på enkelt arv. Dokumentationen siger, Arver QButton. Følg linket til klassen QButton. Det viser mange andre kontroller som arves af QPushButton, som vi senere bruger til at forklare signal/slot-mekanismen. Under alle omstændigheder er metoden show() ikke på listen, og derfor skal den være en metode som også sørges for via arv. Klassen som QButton arver er QWidget. Følg kun linket igen, så ser du en hel mængde metoder som klassen QWidget sørger for, inklusive metoden show(). Nu forstår vi hvad der blev gjort i eksemplet med knappen: +Lav en instans af QPushButton, og brug den anden konstruktor til at angive knappens tekst +Ændr størrelsen på kontrollen til dens indhold +Sæt kontrollen som hovedkontrol instansen af QApplication +Fortæl den grafiske kontrol at den skal vises på skærmen ved at kalde show(), en metode som blev arvet fra QWidget + + +Efter at have kaldet metoden exec(), 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. +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. + + + + + + +Brugerkommandoer +Efter at have læst foregående afsnit, bør du allerede vide: +Hvad QT-biblioteket sørger for for programmer med grafiske grænseflader, +Hvordan et program som bruger QT laves, og +Hvor og hvordan du finder information om klasser som du vil bruge med dokumentationssøgeren. + + +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. +Vinduesystemet sender derfor alle kommunikationsbegivenheder til det tilsvarende program. QApplication sender dem derefter til det aktive vindue som en QEvent, og kontrollerne selv skal bestemme hvad som skal udføres med dem. En kontrol tager imod begivenheden og behandler QWidget::event(QEvent*), som afgør hvilken begivenhed der er sket og hvordan reaktionen skal være. Metoden event() udfører derfor håndteringen af hovedbegivenheden. Derefter sender metoden event() 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: +Tastaturbegivenheder: Tabulator og Shift+Tabulator: + +virtual void focusInEvent(QFocusEvent *) +virtual void focusOutEvent(QFocusEvent *) + + + +Al øvrig tastaturindtastning: + +virtual void keyPressEvent(QKeyEvent *) +virtual void keyReleaseEvent(QKeyEvent *) + + + +Museflytning: + +virtual void mouseMoveEvent(QMouseEvent *) +virtual void enterEvent(QEvent *) +virtual void leaveEvent(QEvent *) + + + +Handlinger med museknapperne + +virtual void mousePressEvent(QMouseEvent *) +virtual void mouseReleaseEvent(QMouseEvent *) +virtual void mouseDoubleClickEvent(QMouseEvent *) + + + +Vinduesbegivenheder som indeholder den grafiske kontrol + +virtual void moveEvent(QMoveEvent *) +virtual void resizeEvent(QResizeEvent *) +virtual void closeEvent(QCloseEvent *) + + + + + +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. QWidget indeholder også nogle andre virtuelle metoder som kan være nyttige i dine programmer. Under alle omstændigheder er det nødvendigt at kende QWidget godt. + + +Interaktion mellem objekt med signaler og slots +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: +klassedeklarationen af en klasse som bruger signaler og slots skal indeholde makroen Q_OBJECT i begyndelsen (uden et semikolon), og skal afledes fra klassen QObject +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 + +alle signaler som bruges af klasser som ikke arves skal tilføjes i klassedeklarationen i en signalsektion +alle metoder som kan forbindes med et signal deklareres i sektioner med det yderligere nøgleord slot, f.eks. public slots: inde i klassedeklarationen +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. + + +En anden måde at bruge signaler uden at aflede fra QObject er at bruge klassen QSignal. Se referencedokumentationen for mere information og eksempel på brug. Vi antager at du afleder fra QObject i det følgende. +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. +For nu at forbinde et signal til en slot, skal du bruge metoderne connect() som varetages af QObject eller, hvis tilgængelige, specielle metoder som objekter sørger for for at angive forbindelsen for et vist signal. + + +Eksempel på brug +For at forklare hvordan objektinteraktion håndteres, tager vi vort første eksempel igen og udvider det med en enkel forbindelse: #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(); +} + + +Du mærker at alt du skal tilføje for at give knappen mere kommunikation er metoden connect(): connect (&hello, SIGNAL( clicked() ), &a, SLOT( quit() ));. Hvad er betydningen nu? Klassedeklarationen af QObject siger følgende om metoden connect(): +bool connect ( const QObject * afsender, const char * signal, const QObject * modtager, const char * medlem ) +Dette betyder at du skal angive en QObject-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. +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 KDE's biblioteksreferenceguide og QT's reference på nettet. + + + + + +Hvad KDE sørger for + +KDE 3.x bibliotekerne +KDE's hovedbibliotek som bruges til at lave KDE-programmer er: +biblioteket tdecore, som indeholder alle klasser som er usynlige elementer til at sørge for programfunktioner +biblioteket tdeui, som indeholder elementer i brugergrænsefladen såsom menulinjer, værktøjslinjer, osv. +biblioteket kfile, som indeholder filvalgsdialoger + + +Desuden tilbyder KDE følgende biblioteker til specialløsninger: +biblioteket tdefx, som indeholder pixmaps, billedeffekter og KStyle-udvidelsen af QStyle +biblioteket khtml, som indeholder KDE's HTML-komponent +biblioteket kjs, som indeholder KDE's understøttelse for Javascript +biblioteket kio, som indeholder adgang til netværksfiler på lavt niveau +biblioteket kparts, med understøttelse for programmer som kan genbruges, indlejres og udvides + + +Derefter tager vi et kig på hvad der behøves for at forvandle vort første QT-program til et KDE-program. + + +Eksempel på et KDE-program +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: #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(); +} + + +Du ser at vi først har ændret fra QApplication til KApplication. Desuden var vi tvunget til at ændre den tidligere brugte metode setMainWidget() til setTopWidget som KApplication 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. +Eftersom du nu i det mindste ved hvad funktionen main() 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. +Hvad du yderligere bør have kigget på hidtil er QT-referencedokumentationen, især klasserne QApplication, QWidget og QObject og tdecore-biblioteksdokumentationen for klassen KApplication. KDE's biblioteksreferenceguide har også en fuldstændig beskrivelse af hvordan konstruktorerne i QApplication og KApplication kaldes, inklusive behandling af kommandolinjeflag. + + + + + + +Lav nye programmer + + +Programguiden +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: +KDE Application Framework: Indeholder kildekode for en fuldstændig rammestruktur til et almindeligt KDE-program +QMake project: Laver et programskelet baseret på TrollTechs qmake konfigurationssystem +Simple Hello world program: Opretter et C++ terminalbaseret program uden støtte for grafisk grænseflade +En mængde andre programskeletter + + +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. + + + +Start af programguiden og oprettelse af projekt + +Start af programguiden og første side +Å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. +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. + +Programguiden + + + + +Versionskontrolinformation +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. + + +Deklarations- og kildekodeskabeloner +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. + + +Afslutning +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. + + + + +Byg første gang +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. +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. +Håndtering af automake viser projektfilerne som følger: + +Filer i vores projekt + + +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. 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 *** + + +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. +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;. +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. + + + +Kildekodeskelettet +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. + + +Funktionen main() +Eftersom programmet begynder at køre ved at gå ind i funktionen main(), er det der vi begynder at kigge på koden. Funktionen main() i KScribble er implementeret i filen main.cpp, og kan også findes ved at bruge klassesøgeren og vælge mappen "Globale funktioner". 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, "du@du.se"); +5 about.addAuthor( "Dit Navn", 0, "du@du.se" ); +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 } + + +Det der først sker nu, er at objektet KApplication laves som almindeligt, men vi har tilføjet nogle KDE-metoder som angiver information om programmet og forfatteren af programmet. + + +Start af brugerprogrammet + +... (endnu ikke skrevet) + + + +Konstruktoren +Lad os kigge lidt på konstruktoren og se hvordan instansen kaldes 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 } + + +Bemærk at KScribble arver klassen KMainWindow, en ofte brugt basisklasse for KDE-programmer. Vi initierer en klasse som hedder KScribbleView som central grafikkomponent, laver en KStatusBar via metoden statusBar() (på linje 16), og forbinder nogle signaler og slots. + + + + + + +Konstruktion af programvisning + +Indledning +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. +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: +Menulinjen: sørger for komplekse handlinger samt at åbne, gemme og lukke filer eller afslutte programmet. +Værktøjslinjen: tilbyder ikoner som giver hurtigere adgang til de oftest brugte funktioner, +Statuslinjen viser status for markørpositionen med nuværende linje og søjle, +Visningen i vinduets midte, som viser et dokument og tilbyder en markør forbundet til tastaturet og musen for at håndtere data. + + +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. +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: +har et godt grafisk udseende +tilbyder mange funktioner +er nemt at håndtere +er hurtigt at lære at bruge + + +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. +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. +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. + + +Brug af biblioteksvisninger +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: +Fjern den nye visningsklasse og opret en instans af en bibliotekskontrol, og sæt den så som visningen, +Ændr arv for den visningsklasse der sørges for, til klassen for bibliotekskontrollen som skal bruges. + + +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. +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". + +Visninger i Qt +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. +Her er nogle vink om hvilken Qt-komponent der kan bruges til hvilket slutmål: +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 QScrollView for dette, som tilbyder et underliggende område med panoreringsmulighed. Som tidligere forklaret, kan du lade dine egne grafiske kontroller arve QScrollView, eller bruge en instans for at håndtere dit dokuments visningskomponent. +For at oprette en egen ScrollView, lad komponenten View arve fra QWidget og tilføj lodrette og vandrette rullebjælker med QScrollBars. (Dette udføres af KDE's kontrol KHTMLView.) +Til tekstbehandling, bruges QTextEdit. 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. +Brug QTable til at vise data som er arrangeret i en tabel. Eftersom QTable også håndteres af rullebjælker, tilbyder den en god løsning for programmer med tabelberegninger. +For at vise to forskellige grafiske kontroller eller to instanser af samme kontrol samtidigt, bruges QSplitter. 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. +QListView 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. + + +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. + + +Visninger i KDE +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: +KListView: en mere kraftfuld version af QListView +KIconView: en grafisk viser af ikonfiler + + +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. + + + +Lav egne visninger +Ikke skrevet endnu + + + + +Indstil menulinjer og værktøjslinjer + +Indledning +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. +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. + + +Hvordan virker det? +Vort program arver klassen KMainWindow som automatisk håndterer at oprette en menulinje og værktøjslinjer for os. I metoden KScribble::setupActions() er der et kald til KMainWindow::createGUI(). 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: 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 +> + + +Forklaring ... +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 menuBar() returnerer for eksempel kontrollen KMenuBar som er menulinjen i vort program. Kigger du i dokumentationen for KMenuBar og klassen den arver QMenuBar, finder du et stort antal metoder der hedder insertItem(), som lader dig tilføje punkter til menulinjen. +KMainWindows metoder statusBar() og toolBar() giver dig også passende grafiske kontroller. + + +Indstilling af genvejstaster +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 KAction til dette, som sørger for genvejstaster og adgang til globalt indstillede standardgenveje. +Normalt bruger kun rammeprogrammer oprettet af &tdevelop; almindelige genvejstaster såsom F1 for at komme til nethjælp, Ctrl+N for Ny fil, osv. +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 KKeyChooser til at bruge i fanebladsdialoger, mens KKeyDialog sørger for en indstillingsdialog for genvejstaster som er parat til brug. + + + + + + +Hjælpefunktioner + +Indledning +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: + +Værktøjsvink +Hjælp i statuslinjen +Hvad er dette...? knapper + +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 KMainWindow, også selvom du som forfatter skal sørge for indholdet. +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. +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. + + + +Værktøjsvink +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 KToolBar, som findes i tdeui-biblioteket. +Som et eksempel kigger vi på knappen "Ny fil" i et generelt program: +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. +Værktøjsvink kan også tilføjes i hvilken som helst egen grafisk kontrol ved at bruge QToolTip som QT sørger for. Et eksempel på det ville kunne være: + + +Udvidelse af statuslinjen +Eftersom programmer som arver KMainWindow 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. + + +Knappen <guibutton +>Hvad er dette?</guibutton +> +Knappen Hvad er dette...? 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 Hvad er dette...? inde i &tdevelop;. +For at tilføje "Hvad er dette...?" hjælp til en af dine grafiske kontroller, bruges den statiske metode QWhatsThis::add(QWidget *widget, const QString &text) + + + + +Dokumentation + +Indledning +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. + + +Brugerdokumentation +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å KDE's netside for dokumentation. + + +Programdokumentation +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. + + + + +Internationalisering + +Indledning +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. + + + + + +Medvirkende + +(... endnu ikke skrevet ...) + + + + + + +Bibliografi + + + +<ulink url="info://make/Top" +>GNU Make-manual</ulink +> + +Richard M.Stallman +RolandMcGrath + + + + +<ulink url="info://automake/Top" +>GNU Automake</ulink +> + +DavidMacKenzie +TomTromey + + + + +<ulink url="info://autoconf/Top" +>GNU Autoconf</ulink +> + +DavidMacKenzie +BenElliston + + + + +<ulink url="info://gcc/Top" +>Brug af GNU's kompiler-samling</ulink +> +Richard M.Stallman + + + +<ulink url="info://libtool/Top" +>GNU Libtool</ulink +> + +GordonMatzigkeit +AlexandreOliva +ThomasTanner +Gary V.Vaughan + + + + +GNU Autoconf, Automake, og Libtool +1st edition +October 2000 + +Gary V.Vaughan +BenElliston +TomTromey +Ian LanceTaylor + +New Riders Publishing +ISBN 1578701902 + + + + +Advanced Programming in the UNIX(R) Environment +1st edition +June 1992 +W. RichardStevens +Addison-Wesley Pub Co +ISBN 0201563177 + + + +Thinking in C++, Volume 1: Introduction to Standard C++ +2nd Edition +April 15, 2000 +BruceEckel +Prentice Hall +ISBN 0139798099 + + + +Åben kilde udvikling med CVS +2nd Edition +October 12, 2001 + +KarlFogel +MosheBar + +The Coriolis Group +ISBN 158880173X + + + +Programmering i PHP +1st edition +March 2002 + +RasmusLerdorf +KevinTatroe + +O'Reilly & Associates +ISBN 1565926102 + + + +Programmering i Python +2nd Edition +March 2001 +MarkLutz +O'Reilly & Associates +ISBN 0596000855 + + + +Gui Programmering med Python : Ved brug af Qt værktøjssamlingen +Bk&Cd-r edition +January 2002 +BoudewijnRempt +Opendocs Llc +ISBN 0970033044 + + + +Programmering i Perl +Kamelbogen +3rd Edition +July 2000 + +LarryWall +TomChristiansen +JonOrwant + +O'Reilly & Associates +ISBN 0596000278 + + + +At lære Perl +Lama-bogen +3rd Edition +July 15, 2001 + +Randal L.Schwartz +TomPhoenix + +O'Reilly & Associates +ISBN 0596001320 + + + + +&underFDL; + + + + +
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 new file mode 100644 index 00000000000..e12fad32dfa Binary files /dev/null and b/tde-i18n-da/docs/tdevelop/kdearch/index.cache.bz2 differ 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 @@ + + + +]> + + + + +Oversigt over KDE's arkitektur + + + + + +Bernd Gehrmann
bernd@tdevelop.org
+
+
+ + +2001 +2002 +Bernd Gehrmann + + +&FDLNotice; + + +Denne dokumentation giver en oversigt over KDE-udviklingsmiljøet. + + + +KDE +arkitektur +udvikling +programmering + + +
+ + +Biblioteksstruktur + + +Bibliotek ordnede efter navn + + + + +tdecore +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. + + + +tdeui +Biblioteket tdeui 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. + + + +kio +Biblioteket kio 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. + + + +kjs +Biblioteket kjs sørger for en implementering af Javascript. + + + +khtml +Biblioteket khtml indeholder KHTML-delen, en HTML-søgekomponent, DOM-grænseflade og tolk, inklusive grænseflade til Java og Javascript. + + + + + + + + +Grupperede klasser + +Centralt programskelet: klasser som næsten alle programmer har brug for. + + + + +<ulink url="kdeapi:tdecore/KApplication" +>KApplication</ulink +> +Initierer og styrer et KDE-program. + + + +<ulink url="kdeapi:tdecore/KUniqueApplication" +>KUniqueApplication</ulink +> +Sørger for at kun en instans af et program kan køre samtidigt. + + +<ulink url="kdeapi:tdecore/KAboutData" +>KAboutData</ulink +> +Indeholder information for dialogen Om. + + +<ulink url="kdeapi:tdecore/KCmdLineArgs" +>KCmdLineArgs</ulink +> +Behandling af kommandolinjeflag. + + + + +Konfigurationsindstillinger: adgang til KDE's hierarkiske konfigurationsdatabase, globale indstillinger og programressourcer. + + + +<ulink url="kdeapi:tdecore/KConfig" +>KConfig</ulink +> +Giver adgang til KDE's konfigurationsdatabase. + + +<ulink url="kdeapi:tdecore/KSimpleConfig" +>KSimpleConfig</ulink +> +Adgang til enkle, ikke-hierarkiske konfigurationsfiler. + + +<ulink url="kdeapi:tdecore/KDesktopFile" +>KDesktopFile</ulink +> +Adgang til .desktop-filer. + + +<ulink url="kdeapi:tdecore/KGlobalSettings" +>KGlobalSettings</ulink +> +Bekvem adgang til indstillinger som ikke er programspecifikke. + + + + +Fil- og URL-håndtering: afkodning af URL'er, midlertidige filer, osv. + + + +<ulink url="kdeapi:tdecore/KURL" +>KURL</ulink +> +Repræsenterer og tolker URL'er. + + +<ulink url="kdeapi:tdecore/KTempFile" +>KTempFile</ulink +> +Opretter entydige filer for midlertidig data. + + +<ulink url="kdeapi:tdecore/KSaveFile" +>KSaveFile</ulink +> +Tillader at filer gemmes atomisk. + + + + +Interproceskommunikation: DCOP-hjælpeklasser og start af underprocesser. + + + +<ulink url="kdeapi:tdecore/KProcess" +>KProcess</ulink +> +Starter og styrer underprocesser. + + +<ulink url="kdeapi:tdecore/KShellProcess" +>KShellProcess</ulink +> +Starter underprocesser via en skal. + + +<ulink url="kdeapi:tdesu/PtyProcess" +>PtyProcess</ulink +> +Kommunikation med underprocesser via en pseudoterminal. + + +<ulink url="kdeapi:tdecore/KIPC" +>KIPC</ulink +> +Enkel IPC-mekanisme som bruger X11-klientmeddelelser. + + +<ulink url="kdeapi:dcop/DCOPClient" +>DCOPClient</ulink +> +DCOP-meddelelser. + + +<ulink url="kdeapi:tdecore/KDCOPPropertyProxy" +>KDCOPPropertyProxy</ulink +> +En proxyklasse som offentliggør Qt-egenskaber via DCOP. + + +<ulink url="kdeapi:tdeui/KDCOPActionProxy" +>KDCOPActionProxy</ulink +> +En proxyklasse som offentliggør en DCOP-grænseflade for handlinger. + + + + +Værktøjsklasser: hukommelseshåndtering, regulære udtryk, strenghåndtering, tilfældige tal. + + + +<ulink url="kdeapi:tdecore/KRegExp" +>KRegExp</ulink +> +Matchning af POSIX regulære udtryk. + + +<ulink url="kdeapi:tdecore/KStringHandler" +>KStringHandler</ulink +> +En overdådig grænseflade for strenghåndtering. + + +<ulink url="kdeapi:tdecore/KZoneAllocator" +>KZoneAllocator</ulink +> +Effektiv hukommelsestildeling for store grupper af små objekter. + + +<ulink url="kdeapi:tdecore/KRandomSequence" +>KRandomSequence</ulink +> +Opret pseudotilfældige tal. + + + + +Genvejstaster: klasser som hjælper med at oprette overensstemmende tastebindninger over hele desktoppen. + + + +<ulink url="kdeapi:tdecore/KAccel" +>KAccel</ulink +> +Samling af genvejstaster. + + +<ulink url="kdeapi:tdecore/KStdAccel" +>KStdAccel</ulink +> +Let adgang til de almindelige genvejstaster. + + +<ulink url="kdeapi:tdecore/KGlobalAccel" +></ulink +> +Samling af genvejstaster som gælder for hele systemet. + + + + +Billedbehandling: ikonindlæsning og -håndtering. + + + +<ulink url="kdeapi:tdecore/KIconLoader" +>KIconLoader</ulink +> +Indlæser ikoner som passer med temaet. + + +<ulink url="kdeapi:tdecore/KIconTheme" +>KIconTheme</ulink +> +Hjælpeklasser for KIconLoader. + + +<ulink url="kdeapi:tdecore/KPixmap" +>KPixmap</ulink +> +En pixmap-klasse med udvidede gittermuligheder. + + +<ulink url="kdeapi:tdeui/KPixmapEffect" +>KPixmapEffect</ulink +> +Pixmapeffekter såsom toning og mønster. + + +<ulink url="kdeapi:tdeui/KPixmapIO" +>KPixmapIO</ulink +> +Hurtig konvertering mellem QImage og QPixmap. + + + + +Træk og slip: træk objekter for farver og URL'er. + + + +<ulink url="kdeapi:tdecore/KURLDrag" +>KURLDrag</ulink +> +Trækobjekt for URL'er. + + +<ulink url="kdeapi:tdeui/KColorDrag" +>KColorDrag</ulink +> +Trækobjekt for farver. + + +<ulink url="kdeapi:tdecore/KMultipleDrag" +>KMultipleDrag</ulink +> +Tillader at trækobjekter laves ud fra flere andre. + + + + +Automatisk komplettering + + + +<ulink url="kdeapi:tdecore/KCompletion" +>KCompletion</ulink +> +Generel automatisk komplettering af strenge. + + +<ulink url="kdeapi:kio/KURLCompletion" +>KURLCompletion</ulink +> +Automatisk komplettering af URL'er. + + +<ulink url="kdeapi:kio/KShellCompletion" +>KShellCompletion</ulink +> +Automatisk komplettering for kørbare programmer. + + + + +Grafiske kontroller: klasser for listevisninger, linealer, farvevalg, osv. + + + +<ulink url="kdeapi:tdeui/KListView" +>KListView</ulink +> +En version af QListView som følger KDE's systemindstillinger. + + +<ulink url="kdeapi:tdeui/KListView" +>KListBox</ulink +> +En version af QListBox som følger KDE's systemindstillinger. + + +<ulink url="kdeapi:tdeui/KListView" +>KIconView</ulink +> +En version af QIconView som følger KDE's systemindstillinger. + + +<ulink url="kdeapi:tdeui/KListView" +>KLineEdit</ulink +> +En version af QLineEdit med understøttelse for komplettering. + + +<ulink url="kdeapi:tdeui/KComboBox" +>KComboBox</ulink +> +En version af QComboBox med understøttelse for komplettering. + + +<ulink url="kdeapi:tdeui/KFontCombo" +>KFontCombo</ulink +> +Et dropned-felt for at vælge skrifttyper. + + +<ulink url="kdeapi:tdeui/KColorCombo" +>KColorCombo</ulink +> +Et dropned-felt til at vælge farver. + + +<ulink url="kdeapi:tdeui/KColorButton" +>KColorButton</ulink +> +En knap til at vælge farver. + + +<ulink url="kdeapi:tdeui/KURLCombo" +>KURLCombo</ulink +> +Et dropned-felt til at vælge filnavne og URL'er. + + +<ulink url="kdeapi:kfile/KURLRequester" +>KURLRequester</ulink +> +En linjeeditor til at vælge filnavne og URL'er. + + +<ulink url="kdeapi:tdeui/KRuler" +>KRuler</ulink +> +En linealkontrol. + + +<ulink +url="kdeapi:tdeui/KAnimWidget" +>KAnimWidget</ulink +> +Animeringer. + + +<ulink url="kdeapi:tdeui/KNumInput" +>KNumInput</ulink +> +En kontrol til at indtaste tal. + + +<ulink url="kdeapi:tdeui/KPasswordEdit" +>KPasswordEdit</ulink +> +En kontrol til at indtaste kodeord. + + + + +Dialoger: dialoger med fuldstændig funktion for valg af filer, farver og skrifttyper. + + + +<ulink url="kdeapi:kfile/KFileDialog" +>KFileDialog</ulink +> +En dialog til valg af filer. + + +<ulink url="kdeapi:tdeui/KColorDialog" +>KColorDialog</ulink +> +En dialog til valg af farver. + + +<ulink url="kdeapi:tdeui/KFontDialog" +>KFontDialog</ulink +> +En dialog til valg af skrifttype. + + +<ulink url="kdeapi:kfile/KIconDialog" +>KIconDialog</ulink +> +En dialog til valg af ikoner. + + +<ulink url="kdeapi:tdeui/KKeyDialog" +>KKeyDialog</ulink +> +En dialog til at redigere tastaturbindinger. + + +<ulink url="kdeapi:tdeui/KEditToolBar" +>KEditToolBar</ulink +> +En dialog til at redigere værktøjslinjer. + + +<ulink url="kdeapi:tdeui/KTipDialog" +>KTipDialog</ulink +> +En dialog med dagens vink. + + +<ulink url="kdeapi:tdeui/KAboutDialog" +>KAboutDialog</ulink +> +En Om-dialog. + + +<ulink url="kdeapi:tdeui/KLineEditDlg" +>KLineEditDlg</ulink +> +En enkel dialog til at indtaste tekst. + + +<ulink url="kdeapi:kfile/KURLRequesterDlg" +>KURLRequesterDlg</ulink +> +En enkel dialog til at indtaste URL'er. + + +<ulink url="kdeapi:tdeui/KMessageBox" +>KMessageBox</ulink +> +En dialog til at meddele fejl og advarsler. + + +<ulink url="kdeapi:tdeui/KPasswordDialog" +>KPasswordDialog</ulink +> +En dialog til at indtaste kodeord. + + + + +Handlinger og grafisk XML-grænseflade + + + +<ulink url="kdeapi:tdeui/KAction" +>KAction</ulink +> +En abstraktion af en handling som kan forbindes til menulinjer og værktøjslinjer. + + +<ulink url="kdeapi:tdeui/KActionCollection" +>KActionCollection</ulink +> +En samling handlinger. + + +<ulink url="kdeapi:tdeui/KXMLGUIClient" +>KXMLGUIClient</ulink +> +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. + + +<ulink url="kdeapi:kparts/KPartManager" +>KPartManager</ulink +> +Håndterer aktivering af klienter til den grafiske XML-grænseflade. + + + + +Plugin og komponenter + + + +<ulink url="kdeapi:tdecore/KLibrary" +>KLibrary</ulink +> +Repræsenterer et dynamisk indlæst bibliotek. + + +<ulink url="kdeapi:tdecore/KLibrary" +>KLibLoader</ulink +> +Indlæsning af delte biblioteker. + + +<ulink url="kdeapi:tdecore/KLibFactory" +>KLibFactory</ulink +> +Tilvirkning af objekter for plugin. + + +<ulink url="kdeapi:kio/KServiceType" +>KServiceType</ulink +> +Repræsenterer en tjenestetype. + + +<ulink url="kdeapi:kio/KService" +>KService</ulink +> +Repræsenterer en tjeneste. + + +<ulink url="kdeapi:kio/KMimeType" +>KMimeType</ulink +> +Repræsenterer en Mime-type. + + +<ulink url="kdeapi:kio/KServiceTypeProfile" +>KServiceTypeProfile</ulink +> +Brugerindstillinger for tildelinger af Mime-typer. + + +<ulink url="kdeapi:kio/KServiceTypeProfile" +>KTrader</ulink +> +Forespørgsler om tjenester. + + + + + + + + + + + +Grafik + + +Lavniveaugrafik med QPainter. + + +Optegning med QPainter + +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. + +Den centrale grafiske klasse til at tegne todimensionalt med Qt er QPainter. Den kan tegne på en QPaintDevice. Der er tre mulige tegneenheder implementerede: En er QWidget, som repræsenterer en grafisk kontrol på skærmen. Den anden er QPrinter, som repræsenterer en printer, og producerer Postscript-udskrift. Den tredje er klassen QPicture, som indspiller tegnekommandoer og kan gemme dem til disk, og derefter afspille dem. Et muligt lagringsformat for tegnekommandoer er W3C-standarden SVG. + +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. + +void MinKomponent::paintEvent() +{ + QPainter p(this); + // Indstil + // Brug +} + + +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 enhedsmetrikker for at beregne koordinater. + + + + + +Transformationer + +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: + + + + + +QPainter::setWorldMatrix() kan bruges til at angive denne 3x3 matrix i ligningen, som har typen QWMatrix. 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: + + + + +Translationer +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: + + + + + + + + + +Skalering +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: + + + + + + +Ved at give en af parametrene en negativ værdi, kan man opnå spejling af koordinatsystemet. + + + + +Forskydning +En forvrængning af koordinatsystemet med to parametre. En forskydningstransformation kan udføres ved at kalde m.shear(sh, sv), hvilket svarer til matricen: + + + + + + + + + +Rotation +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: + + + + + + +Bemærk at rotation er ækvivalent med en kombination af skalering og forskydning. + + + + + +Her er nogle billeder som viser effekten af de grundlæggende transformationer for vores maskot: + + + + + + + + + + + + + + + + + + + +a) Normal +b) Roteret 30 grader +c) Forskudt med 0,4 +d) Spejlet + + + + + +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. + + + + + +Angiv stregegenskaber + +Fremvisning af linjer, kurver og polygonkanter kan ændres ved at angive en særlig pen med QPainter::setPen(). Argumentet til denne funktion er et QPen-objekt. Egenskaberne som opbevares i det er en stil, en farve, en sammenføjningsstil og en slutstil. + +Pennestilen er et medlem af nummereringstypen Qt::PenStyle. og kan have en af følgende værdier: + + + + + +Sammenføjningsstilen er et medlem af nummereringstypen Qt::PenJoinStyle. Den angiver hvordan forbindelsen mellem flere linjer som sættes sammen tegnes. Den kan have en af følgende værdier: + + + + + + + + + + + + + + + + +a) MiterJoin +c) BevelJoin +b) RoundJoin + + + + + +Slutstilen er et medlem af nummereringstypen Qt::PenCapStyle og angiver hvordan linjernes endepunkter tegnes. Den antager en værdi fra følgende tabel: + + + + + + + + + + + + + + + + +a) FlatCap +b) SquareCap +c) RoundCap + + + + + + + + + +Angiv udfyldningsegenskaber + +Udfyldningsstilen for polygoner, cirkler eller rektangler kan ændres ved at angive en særlig pensel med QPainter::setBrush(). Denne funktions argument er et QBrush-objekt. Pensler kan laves på fire forskellige måder: + + + +QBrush::QBrush(): dette laver en pensel som ikke udfylder former. + + +QBrush::QBrush(BrushStyle): dette laver en sort pensel, med et af de fordefinerede mønstre som vises nedenfor. + + +QBrush::QBrush(const QColor &, BrushStyle): dette laver en farvet pensel, med et af de fordefinerede mønstre som vises nedenfor. + + +QBrush::QBrush(const QColor &, const QPixmap): dette laver en farvet pensel, med det egne mønster som angives som anden parameter. + + + +En standardpenselstil fra nummereringstypen Qt::BrushStyle. Her er et billede af alle fordefinerede mønstre: + + + + + +Yderligere en måde at indstille en pensels opførsel er at bruge funktionen QPainter::setBrushOrigin(). + + + + + +Farve + +Farver har betydning både når kurvor tegnes, og når former udfyldes. Farver repræsenteres af klassen QColor 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. + +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. + + + + + +Øvrige indstillinger + +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 RasterOp. + +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". + + + + + +Tegn grafiske primitiver + +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 QRect som argument, eller et sæt med fire heltal. + + + +Tegn et enkelt punkt: drawPoint(). + + +Tegn linjer: drawLine(), drawLineSegments() og drawPolyLine(). + + +Tegn og udfyld rektangler: drawRect(), drawRoundRect(), fillRect() og eraseRect(). + + +Tegn og udfyld i cirkler, ellipser og dele af dem: drawEllipse(), drawArc(), drawPie og drawChord(). + + +Tegn og udfyld generelle polygoner: drawPolygon(). + + +Tegn Bezierkurvor: drawQuadBezier() [drawCubicBezier i Qt 3.0]. + + + + + + + +Tegn pixmaps og billeder + +Qt sørger for to meget forskellige klasser til at repræsentere billeder. + +QPixmap 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 meget 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 bitBlt til at overføre det til kontrollen. For komplekse gentegninger, hjælper dette med at undgå flimmer. + +I modsætning til dette, er der QImage-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. + + + + + +Tegn tekst + +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 Qt::AlignmentFlags og Qt::TextFlags. + +Begyndende i version 3.0, håndterer Qt fuldstændig tekstlayout også for sprog som skrives fra højre til venstre. + +En mere avanceret måde at vise opmarkeret tekst, er klassen QSimpleRichText. 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 QStyleSheet (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(). + + + + + + + +Struktureret grafik med QCanvas + +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. + +Som et alternativ indeholder Qt klassen QCanvas, hvor man tilføjer grafiske objekter, såsom polygoner, tekst eller pixmaps. Man kan også oprette yderligere objekter ved at oprette en delklasse af QCanvasItem eller en af dens mere specialiserede delklasser. En dug kan vises på skærmen ved en eller flere kontroller fra klassen QCanvasView, 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. + +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: + + + + + +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. + +En vejledning om hvordan QCanvas bruges til at skrive spil baserede på småfigurer findes her. + + + + + +3D-grafik med OpenGL + + +Lavniveaugrænseflade + +De-facto standarden for at optegne 3D-grafik nu for tiden er OpenGL. 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 GL-sammenhæng, og har ingen interaktion med værktøjskassen eller miljøet. + +Qt tilbyder den grafiske komponent QGLWidget, som indkapsler et vindue med tilhørende GL-sammenhæng. Egentlig bruges det ved at oprette en delklasse af det og omimplementere nogle metoder. + + + +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. + +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. + +I stedet for at omimplementere resizeEvent(), overskrider man resizeGL(). Dette kan bruges til at indstille visningsområdet på en passende måde. + +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. + + + +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. + + + + + +Qt indeholder nogle eksempler på brug af QGLWidget i demo-eksemplerne. En samling vejledninger findes her, og mere information samt en OpenGL-reference findes på OpenGL's hjemmeside. + + + + + +Højniveau-grænseflade + +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, Coin, som komplementeres af en værktøjsbinding til Qt, som hedder SoQt. + +Det grundlæggende begreb i Open Inventor er en scene. En scene kan indlæses fra disken, og gemmes i et særligt format, nært beslægtet med VRML. En scene består af en samling objekter som kaldes knuder. 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. + +En introduktion til Inventor findes her (du kan generelt erstatte alle SoXt som nævnes i artiklen med SoQt). + + + + + + + + + + +Brugergrænseflade + + +Handlingsmønstret + + + + + + + +Definition af menuer og værktøjslinjer i XML + + +Indledning + +Mens handlingsmønstret 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. + +Dette problem løses med en samling klasser som kaldes grafisk XML-grænseflade. 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 Fil Åbn eller Hjælp Om) 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. + +KDE's klasse for topniveauvindue, KMainWindow, arver KXMLGUIClient, og understøtter derfor grafiske XML-grænseflader fra begyndelsen. Alle handlinger som laves inde i det skal have klientens actionCollection() som forælder. Et kald til createGUI() bygger siden hele sættet af menuer og værktøjslinjer som defineres af programmets XML-fil (almindeligvis med endelsen ui.rc). + + + + + +Et eksempel: Menuen i Kview + +I det følgende bruger vi KDE's billedfremviser Kview som eksempel. Den har en ui.rc-fil som hedder kviewui.rc, som installeres med et fragment fra Makefile.am + +rcdir = $(kde_datadir)/kview +rc_DATA = kviewui.rc + + +Her er et uddrag fra filen kviewui.rc. For enkelhedens skyld, viser vi kun definitionen for menuen View. + +<!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> + + +Den tilsvarende del til at oprette dette i C++ er: + +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" ); + + +Menuen View som laves af denne definition af den grafiske grænseflade ser ud som det vises på dette skærmaftryk: + + + + + +XML-filen begynder med en dokumenttypedeklaration. DTD'en for kpartgui findes i tdelibs-kildekoden i tdeui/kpartgui.dtd. 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 ui.rc, sørger KDE for at alle indstillede versioner af filen kasseres og at den nye fil bruges i stedet. + +Næste linje, <MenuBar>, indeholder en deklaration af en menulinje. Du kan også indsætte så mange <ToolBar>-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. Kview har for eksempel en undermenu med titlen "Image", som deklareres som følger: + +<Menu name="image" > + <text>&amp;Image</text> + ... +</Menu> + + +I KDE's automatiske byggeskelet, plukkes sådanne titler automatisk ud og placeres i programmets .po-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;". + +Lad os vende tilbage til eksemplet. Kview's menu Vis indeholder et antal egne handlinger zoom50, zoom100, zoom200, zoomMaxpect og fullscreen, deklarerede med elementet <Action>. Skillelinjen i skærmaftrykkene svarer til elementet <Separator>. + +Du bemærker at visse menupunkter ikke har et tilsvarende element i XML-filen. De er standardhandlinger. Standardhandlinger laves af klassen KStdAction. 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 tdeui/ui_standards.rc i tdelibs-kildekoden. + + + + + +Et eksempel: Værktøjslinjer i Konqueror + +For beskrivelsen af værktøjslinjer, skifter vi til Konquerors definition af grafisk grænseflade. Dette uddrag definerer stedlinjen, som indeholder indtastningsfeltet for URL'er. + +<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> + + +Det første vi bemærker er at der er mange flere egenskaber end for menulinjer. De omfatter: + + + +fullWidth: 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. + +newline: 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. + +noEdit: Normalt kan værktøjslinjer indstilles af brugeren, f.eks. med Indstillinger Indstil værktøjslinjer i Konqueror. 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. Konqueror's bogmærkeværktøjslinje. + +iconText: 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). + + +hidden: Hvis dette er "true", så vises værktøjslinjen ikke fra begyndelsen, og skal aktiveres af et menupunkt. + + +position: 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). + + + + + + + +Dynamiske menuer + +XML kan naturligvis kun indeholde en statisk beskrivelse af en brugergrænseflade. Ofte er der menuer som ændres under kørsel. Konqueror's menu Sted indeholder for eksempel et sæt punkter Åbn med ..., 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 handlingslister. 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 Konqueror's XML-fil: + +<Menu name="file"> + <text>&amp;Location</text> + ... + <ActionList name="openwith"> + ... +</Menu> + + +Funktionen KXMLGUIClient::plugActionList() bruges derefter for at tilføje handlinger som skal vises, mens funktionen KXMLGuiClient::unplugActionList() fjerner alle forbundne handlinger. Rutinen som er ansvarlig for at udføre opdateringerne ser ud som følger: + +void MainWindow::updateOpenWithActions() +{ + unplugActionList("openwith"); + openWithActions.clear(); + for ( /* Løkke for relevante tjenester */ ) { + KAction *action = new KAction( ...); + openWithActions.append(action); + } + plugActionList("openwith", openWithActions); +} + + +Bemærk at i modsætning til statiske handlinger, så laves disse ikke 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 openWithActions.setAutoDelete(true) i eksemplet ovenfor. + + + + + +Sammenhængsafhængige menuer + +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 createGUI() (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: + +void MainWindow::popupRequested() +{ + QWidget *w = factory()->container("context_popup", this); + QPopupMenu *popup = static_cast<QPopupMenu *>(w); + popup->exec(QCursor::pos()); +} + + +Metoden KXMLGUIFactory::container() 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: + +... +<Menu name="context_popup"> + <Action name="file_add"/> + <Action name="file_remove"/> +</Menu> +... + + + + + + + + +Sørg for indbygget hjælp + +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: + + + +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. + +"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å Shift F1, 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. + +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. + +Fordelen med "Hvad er dette?" hjælpevinduer som de tilbydes af Qt og KDE, er at de kan indeholde formateret tekst, dvs. de kan indeholde forskellige skrifttyper, tekst i fed type og kursiv stil, og til og med billeder og tabeller. + +Et eksempel på "Hvad er dette?" hjælp: + + + + + + + +Endelig skal alle programmer have en håndbog. En håndbog vises normalt i Hjælpecentralen ved at bruge menuen Hjælp. 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 DocBook-opmarkeringssproget. + + + +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 QToolTip. + +QToolTip::add(w, i18n("This widget does something.")) + + +Hvis menulinjerne og værktøjslinjerne laves som handlingsmønstre, hentes strengen som bruges som værktøjsvink fra det første argument i konstruktoren KAction. + +action = new KAction(i18n("&Delete"), "editdelete", + SHIFT+Key_Delete, actionCollection(), "del") + + +Her er det også muligt at tildele en tekst som vises i statuslinjen når det tilsvarende menupunkt markeres: + +action->setStatusText(i18n("Deletes the marked file")) + + +Programmeringsgrænsefladen for "Hvad er dette?" er meget lignende. Brug følgende kode i dialoger: + +QWhatsThis::add(w, i18n("<qt>This demonstrates <b>Qt</b>'s" + " rich text engine.<ul>" + "<li>Foo</li>" + "<li>Bar</li>" + "</ul></qt>")) + + +For menupunkter, brug + +action->setWhatsThis(i18n("Deletes the marked file")) + + +Starten af Hjælpecentralen er indkapslet i klassen KApplication. For at vise håndbogen for programmet, bruges blot + +kapp->invokeHelp() + + +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 invokeHelp(), som afgør ankeret som søgeren hopper til. + + + + + + + + +Komponenter og tjenester + + +KDE-tjenester + + +Hvad er KDE-tjenester? + +Begrebet tjeneste 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 DCOP. Ved at påstå at være af en vis tjenestetype, 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. + +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. + +Nogle eksempler: + + + +HTML-fremvisningskomponenten som bruges i Konqueror er en indlejret komponent som implementerer tjenestetypen KParts/ReadOnlyPart og Browser/View. +I de seneste versioner af KDevelop, er størstedelen af funktionerne pakkede i plugin med tjenestetypen KDevelop/Part. Ved opstart, indlæses alle tjenester af denne type, så du kan udvide det integrerede udviklingsmiljø på en meget smidig måde. +Konqueror 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 ThumbCreator. + + + +Naturligvis karakteriseres en tjeneste ikke kun af tjenestetypen som den implementerer, men også af nogle egenskaber. For eksempel så gør en ThumbCreator ikke kun krav på at den implementerer C++ klassen med typen ThumbCreator, 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 handler, med et komplekst forespørgselssprog, til dette formål. + + + + + +Definition af tjenestetyper + +Nye tjenestetyper tilføjes ved at installere en beskrivelse af dem i mappen KDEDIR/share/servicetypes. I det automatiske byggeskelet, kan det gøres med dette fragment fra Makefile.am: + +kde_servicetypesdir_DATA = tdeveloppart.desktop +EXTRA_DIST = $(kde_servicetypesdir_DATA) + + +Definitionen tdeveloppart.desktop for en part til KDevelop ser ud som følger: + +[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 + + +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 [PropertyDef::name] i konfigurationsfilen. I gruppen, angiver indgangen Type egenskabens type. Mulige typer er alt som kan opbevares i en QVariant. + + + + + +Definition af delte bibliotekstjenester + +Tjenestedefinitioner opbevares i mappen KDEDIR/share/services: + +kde_servicesdir_DATA = kdevdoxygen.desktop +EXTRA_DIST = $(kde_servicesdir_DATA) + + +Indholdet i følgende eksempelfil, kdevdoxygen.desktop, angiver pluginnet KDevDoxygen med tjenestetypen KDevelop/Part: + +[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 + + +Foruden de almindelige deklarationer, er en vigtig indgang X-KDE-Library. Den indeholder navnet på libtool-biblioteket (uden filendelsen .la). Det fastlægger også navnet på det eksporterede symbol i biblioteket som returnerer objekttilvirkeren (med det indledende præfiks init_). I ovenstående eksempel, skal biblioteket indeholde følgende funktion: + +extern "C" { + void *init_libkdevdoxygen() + { + return new DoxygenFactory; + } +}; + + +Typen for tilvirkningsklassen DoxygenFactory afhænger af den specifikke tjenestetype som tjenesten implementerer. I vort eksempel med et KDevelop-plugin, skal tilvirkeren være en KDevFactory (som arver KLibFactory). Et mere almindeligt eksempel er KParts::Factory som antages at oprette objekterne KParts::ReadOnlyPart eller i de fleste tilfælde den generiske KLibFactory. + + + + + +Brug af delte bibliotekstjenester + +For at kunne bruge en delt bibliotekstjeneste i et program, skal du skaffe et KService-objekt som repræsenterer den. Dette beskrives i afsnittet om Mime-typer (og i et afsnit om handleren som endnu ikke er skrevet :-) + +Med objektet KService tilgængeligt, kan du meget let indlæse biblioteket og få en peger til dets tilvirkningsobjekt. + +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); +} + + +Fra dette øjeblik, afhænger fortsættelsen igen af tjenestetypen. For generelle plugin, laver man objekter med metoden KLibFactory::create(). Med KParts, skal tilvirkningspegeren konverteres til det mere specifikke KParts::Factory, og dets metode create() skal bruges: + +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; +} + + + + + + +Definition af DCOP-tjenester + +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 kio_uiserver, 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. + +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: + +X-DCOP-ServiceType angiver hvordan tjenesten startes. Værdien Unique (unik) angiver at tjenesten ikke må startes mere end én gang. Det betyder at hvis du forsøger at starte tjenesten (f.eks. via KApplication::startServiceByName(), 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 KUniqueApplication. + +Værdien Multi for X-DCOP-ServiceType 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 None (ingen) bruges. I dette tilfælde, venter starten af tjenesten ikke på at den er registreret i DCOP. + +X-KDE-StartupNotify skal normalt angives som "false". Ellers viser aktivitetsfeltet en startbekræftelse, eller, afhængig af brugerindstillingerne, så ændres markøren. + +Her er definitionen af kio_uiserver: + +[Desktop Entry] +Type=Service +Name=kio_uiserver +Exec=kio_uiserver +X-DCOP-ServiceType=Unique +X-KDE-StartupNotify=false + + + + + + +Brug af DCOP-tjenester + +En DCOP-tjeneste startes med en af flere metoder i klassen KApplication: + +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; +... + + +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. + +I eksemplet som gives her, startes tjenesten "med navn", dvs. første argument til KApplication::startServiceByName() er navnet, som det angives på linjen Name i desktop-filen. Et alternativ er at bruge KApplication::startServiceByDesktopName(), som bruger navnet på desktop-filen som argument, dvs. i dette tilfælde "kio_uiserver.desktop". + +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 QString. Hvis starten af tjenesten mislykkes, tildeles dette argument til en oversat fejlmeddelelse. + + + + + + + +Mime-typer + + +Hvad er Mime-typer? + +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: + + + +I Konqueror's ikonvisning, repræsenteres filer af ikoner. Hver Mime-type har en vis ikon som den hører sammen med, som vises her. + +Når man klikker på en filikon eller et filnavn i Konqueror, så vises filen enten i en indlejret visning, eller også startes et program som hører sammen med filtypen. + +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. + +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. + + + +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. + +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 foo.jpg 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 KDEDIR/share/mimelnk/magic, 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 .desktop-fil, og den bliver effektivt og bekvemt tilgængelig via KDE-bibliotekerne. + + + + + +Definition af Mime-typer + +Lad os definere typen "application/x-foo", for vort nye program foobar. For at gøre det, skal filen foo.desktop skrives, og installeres i KDEDIR/share/mimelnk/application. (Det er det sædvanlige sted, som kan variere mellem distributioner). Dette kan gøres ved at tilføje følgende til Makefile.am: + +mimedir = $(kde_mimedir)/application +mime_DATA = foo.desktop +EXTRA_DIST = $(mime_DATA) + + +Filen foo.desktop skal se ud som følger: + +[Desktop Entry] +Type=MimeType +MimeType=application/x-foo +Icon=fooicon +Patterns=*.foo; +DefaultApp=foobar +Comment=Foo Data File +Comment[sv]=Foo-datafil + + +Indgangen "Comment" er beregnet til at oversættes. Eftersom .desktop-filen angiver en ikon, bør du også installere en ikon fooicon.png, som repræsenterer filen, f.eks. i Konqueror. + +I KDE-bibliotekerne svarer en sådan typedefinition til en instans af klassen KMimeType. Brug dette som i følgende eksempel: + +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; + + + + + + +Afgøre Mime-type for data + +Den hurtige måde at afgøre filtypen er KMimeType::findByURL(). 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 .pl, som ville angive typen "text/x-perl". Alligevel er filen som levereres af serveren udskrift fra scriptet, som normalt er HTML. I sådanne tilfælde, returnerer KMimeType::findByURL() Mime-typen "application/octet-stream" (tilgængelig via KMimeType::defaultMimeType()), som angiver at det mislykkedes at finde ud af typen. + +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; + + +(denne metode har nogle flere argumenter, men disse er ikke dokumenterede, så glem dem hellere helt.) + +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 KMimeMagic, som har en anderledes fejlhåndtering: + +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; + + +Med en variant af denne funktion, kan du også afgøre typen for en hukommelsesstump. Det bruges for eksempel af Kate til at regne fremhævningstilstand ud: + +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; + + +Naturligvis kan selv KMimeMagic kun afgøre filtypen ud fra indholdet i en lokal fil. For fjernfiler, er der yderligere en mulighed: + +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; + + +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 KMimeType::findByURL() returnerede "application/octet-stream". + +På den anden side, hvis du ikke vil blokere programmet, kan du også udtrykkelig starte KIO-jobbet og forbinde til et af dets signaler: + +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; +} + + + + + + +Tildel en Mime-type til et program eller tjeneste + +Når et program installeres, installerer det en .desktop-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 .desktop-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 KServiceTypeProfile: + +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; +} + + +Returværdien fra funktionen er en liste med tjenesteudbydere. Et KServiceOffer-objekt pakker en KService::Ptr, sammen med et rangrækkefølgenummer. Listen som returneres af KServiceTypeProfile::offers() er ordnet efter hvad brugeren foretrækker. Brugeren kan ændre dette ved at kalde "keditfiletype text/html" eller vælge Redigér filtype i Konqueror's sammenhængsafhængige menu for en HTML-fil. + +I eksemplet ovenfor, blev der bedt om en liste med tilbydere af programmer som understøtter text/html. Det omfatter, blandt andet, HTML-editorer såsom Quanta Plus. Du kan også erstatte det andet argument "Application" med "KParts::ReadOnlyPart". I det tilfælde, får du en liste med indlejrbare komponenter til at præsentere HTML-indhold, for eksempel KHTML. + +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: + +KService::Ptr offer = KServiceTypeProfile::preferredService("text/html", "Application"); +if (offer) + cout << "Navn: " << service->name() << endl; +else + cout << "Ingen passende tjeneste fundet" << endl; + + +For endnu mere komplicerede forespørgsler, er der en fuldstændig CORBA-lignende handler. + +For at køre en programtjeneste med nogle URL'er, bruges KRun: + +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); + + + + + + +Diverse + +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. + +Hent en ikon for en URL. Dette kigger efter URL'ens type, og returnerer en tilsvarende ikon. + +KURL url("ftp://ftp.kde.org/pub/incoming/wibble.c"); +QString icon = KMimeType::iconForURL(url); + + +Kør en URL. Dette kigger efter URL'ens type, og starter et tilhørende program til typen som brugeren foretrækker. + +KURL url("http://dot.kde.org"); +new KRun(url); + + + + + + + + +Netværkstransparens + + +Indledning + +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 netværkstransparens. + +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 asynkronisme 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. + +I KDE-bibliotekerne implementeres netværkstransparens med KIO-programmeringsgrænsefladen. Det centrale begreb i arkitekturen er et I/O-job. 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. + +Baggrundsoperationer opnås ved at starte I/O-slaver 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. + +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: + +http://www-com.physik.hu-berlin.de/~bernd/article.tgz#tar:/paper.tex + + + + + + +Brug af KIO + +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 result(KIO::Job*). Efter signalet er sendets, fjerner jobbet sig selv. Derfor ser et typisk brugertilfælde sådan her ud: + +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; +} + + +Afhængig af jobtypen, kan du også forbinde til andre signaler. + +Her er en oversigt over de mulige funktioner: + + + +KIO::mkdir(const KURL &url, int permission) +Opretter en mappe, valgfrit med visse rettigheder. + + +KIO::rmdir(const KURL &url) +Fjerner en mappe. + + +KIO::chmod(const KURL &url, int permissions) +Ændrer rettigheder for en fil. + + +KIO::rename(const KURL &src, const KURL &dest, bool overwrite) +Omdøber en fil. + + +KIO::symlink(const QString &target, const KURL &dest, bool overwrite, bool showProgressInfo) +Opretter et symbolsk link. + + +KIO::stat(const KURL &url, bool showProgressInfo) +Finder nogen information om filen, såsom størrelse, ændringstid og rettigheder. Informationen kan hentes fra KIO::StatJob::statResult() efter jobbet er afsluttet. + + +KIO::get(const KURL &url, bool reload, bool showProgressInfo) +Overfører data fra en URL. + + +KIO::put(const KURL &url, int permissions, bool overwrite, bool resume, bool showProgressInfo) +Overfører data til en URL. + + +KIO::http_post(const KURL &url, const QByteArray &data, bool showProgressInfo) +Sender data. Især for HTTP. + + +KIO::mimetype(const KURL &url, bool showProgressInfo) +Forsøger at finde URL'ens Mime-type. Typen kan hentes fra KIO::MimetypeJob::mimetype() efter jobbet er afsluttet. + + +KIO::file_copy(const KURL &src, const KURL &dest, int permissions, bool overwrite, bool resume, bool showProgressInfo) +Kopierer en enkelt fil. + + +KIO::file_move(const KURL &src, const KURL &dest, int permissions, bool overwrite, bool resume, bool showProgressInfo) +Omdøber eller flytter en enkelt fil. + + +KIO::file_delete(const KURL &url, bool showProgressInfo) +Sletter en enkelt fil + + +KIO::listDir(const KURL &url, bool showProgressInfo) +Laver en liste med indholdet i en mappe. Hver gang nogle nye indgange bliver kendte, sendes signalet KIO::ListJob::entries(). + + +KIO::listRecursive(const KURL &url, bool showProgressInfo) +Ligner funktionen listDir(), men denne er rekursiv. + + +KIO::copy(const KURL &src, const KURL &dest, bool showProgressInfo) +Kopierer en fil eller mappe. Mapper kopieres rekursivt. + + +KIO::move(const KURL &src, const KURL &dest, bool showProgressInfo) +Flytter eller omdøber en fil eller mappe. + + +KIO::del(const KURL &src, bool shred, bool showProgressInfo) +Sletter en fil eller mappe. + + + + + + + + +Mappeindgange + +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. + +Følgende typer er for øjeblikket definerede: + + + +UDS_SIZE (heltal) - Filens størrelse. + +UDS_USER (streng) - Brugeren som ejer filen. + +UDS_GROUP (streng): Gruppen som ejer filen. + +UDS_NAME (streng): Filnavnet. + +UDS_ACCESS (heltal) - Filens rettigheder, som f.eks. opbevares af C-biblioteksfunktionen stat() i feltet st_mode. + +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. + +UDS_LINK_DEST (streng): I tilfældet med et symbolsk link, navnet på filen som udpeges. + +UDS_MODIFICATION_TIME (heltal) - Tiden (med typen time_t) da filen sidst ændredes, som f.eks. opbevares af stat() i feltet st_mtime. + +UDS_ACCESS_TIME (heltal) - Tiden da filen sidst blev brugt, som f.eks. opbevares af stat() i feltet st_atime. + +UDS_CREATION_TIME (heltal) - Tiden da filen oprettedes, som f.eks. opbevares af stat() i feltet st_ctime. + +UDS_URL (streng) - Sørger for en fils URL, hvis den ikke blot er sammensætningen af mappens URL og filnavnet. + +UDS_MIME_TYPE (streng): Filens Mime-type + +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. + + + +Selv om måden at opbevare information om filer i en UDSEntry 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 m_uds er UDS_MIME_TYPE. Heldigvis, er der en programmeringsgrænseflade som er meget nemmere at bruge: klassen KFileItem. + + + + + +Synkron brug + +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: + +KURL source, target; +source = ...; +target = ... +KIO::NetAccess::copy(source, target); + + +Funktionen returnerer efter hele kopieringsprocessen er afsluttet. Alligevel så sørger denne metode for en fremgangsdialog, og den sikrer at programmet behandler omtegningsbegivenheder. + +En særlig interessant kombination af funktioner er download() sammen med removeTempFile(). 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. Hvis URL'en er lokal, hentes filen ikke, men i stedet sættes det andet argument til det lokale filnavn. Funktionen removeTempFile() 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: + +KURL url; +url = ...; +QString tempFile; +if (KIO::NetAccess::download(url, tempFile) { + // indlæse filen med navnet tempFile + KIO::NetAccess::removeTempFile(tempFile); +} + + + + + + +Metadata + +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: + +void FooClass::reloadPage() +{ + KURL url("http://www.tdevelop.org/index.html"); + KIO::TransferJob *job = KIO::get(url, true, false); + job->addMetaData("cache", "reload"); + ... +} + + +Samme teknik bruges i den anden retning, dvs. til kommunikation fra slaven til programmet. Metoden Job::queryMetaData() spørger efter værdien af en vis nøgle som levereres af slaven. For HTTP-slaven, er et sådant eksempel nøglen "modified" (æ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: + +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; +} + + + + + + +Skemalægning + +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. + +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. + +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 direkte. 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. + +Så der er en anden måde. Man kan skemalægge 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: + +KURL url("http://developer.kde.org/documentation/kde2arch/index.html"); +KIO::TransferJob *job = KIO::get(url, true, false); +KIO::Scheduler::scheduleJob(job); + + +En tredje mulighed er forbindelsesorienteret. 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: + +KURL baseUrl("imap://bernd@albert.physik.hu-berlin.de"); +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); + + +Du kan kun afbryde slaven efter alle job som blev tildelt den er garanteret at være afsluttet. + + + + + +Definition af en I/O-slave + +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: + +protocoldir = $(kde_servicesdir) +protocol_DATA = ftp.protocol +EXTRA_DIST = $(mime_DATA) + + +Indholdet i filen ftp.protocol er følgende: + +[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 + + +Indgangen "protocol" angiver hvilken protokol som slaven har ansvar for. "exec" 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 "tdeinit", 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. + +Linjerne "input" og "output" bruges ikke for øjeblikket. + +De tilbageværende linjer i filen .protocol 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 FTP-protokollen), kan KIO læse kildefilen og derefter skrive data til målfilen. For at dette skal virke, skal .protocol annoncere handlingerne som slaven understøtter. + +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 kdemain(). 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: + +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; +} + + + + + + +Implementering af en I/O-slave + +Slaver implementeres som delklasser til KIO::SlaveBase (FtpSlave i eksemplet ovenfor). På den måde svarer handlingerne i .protocol til visse virtuelle funktioner i KIO::SlaveBase som implementeringen af slaven skal omimplementere. Her er en liste med mulige handlinger og tilsvarende virtuelle funktioner: + + + +læse: Læser data fra en URL +void get(const KURL &url) + +skrive: Skriver data til en URL og opretter filen hvis den ikke findes endnu. +void put(const KURL &url, int permissions, bool overwrite, bool resume) + +flytte: Omdøber filen. +void rename(const KURL &src, const KURL &dest, bool overwrite) + +slette: Fjerner en fil eller mappe. +void del(const KURL &url, bool isFile) + +liste: Giver en liste med indholdet i en mappe. +void listDir(const KURL &url) + +oprette mappe: Opretter en mappe. +void mkdir(const KURL &url, int permissions) + + + +Desuden er der funktioner som kan omimplementeres, og ikke er på listen i filen .protocol. For disse handlinger, afgør KIO automatisk om de understøttes eller ej (dvs. standardimplementationen returnerer en fejl). + + + +Leverer information om en fil, ligner C-funktionen stat(). +void stat(const KURL &url) + +Ændrer adgangsrettigheder for en fil. +void chmod(const KURL &url, int permissions) + +Afgør Mime-type for en fil. +void mimetype(const KURL &url) + +Kopierer en fil. +copy(const KURL &url, const KURL &dest, int permissions, bool overwrite) + +Opretter et symbolsk link. +void symlink(const QString &target, const KURL &dest, bool overwrite) + + + +Alle disse implementationer skal slutte af med et af to kald: Hvis handlingen lykkedes, skal de kalde finished(). Hvis en fejl opstod, skal de kalde error() med en fejlkode som første argument og en streng som andet. Mulige fejlkoder er på listen som nummereringstypen KIO::Error. Det andet argument er oftest URL'en det drejer sig om. Den bruges f.eks. i KIO::Job::showErrorDialog() for at parametrisere fejlmeddelelsen som er læsbart af brugeren. + +For slaver som svarer til netværksprotokoller, kan det være interessant at omimplementere metoden SlaveBase::setHost(). 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 SlaveBase::metaData(). Du kan kontrollere om metadata med en vis nøgle findes med SlaveBase::hasMetaData(). + + + + + +Kommunikation tilbage til programmet + +Diverse handlinger som implementeres i en slave, behøver en måde at sende data tilbage til programmet som bruger slaveprocessen. + + + +get() sender datablokke. Det gøres med data(), som bruger argumentet QByteArray. Du behøver naturligvis ikke sende al data på en gang. Hvis du sender en stor fil, så kald data() med mindre datablokke, så programmet kan behandle dem. Kald finished() når overførslen er klar. + +listDir() rapporterer information om indgangene i en mappe. Kald listEntries() med en KIO::UDSEntryList som argument, for dette formål. På tilsvarende måde som data(), kan du kalde den flere gange. Når du er klar, så kald listEntry() med det andet argument sat til true. Du kan også kalde totalSize() for at rapportere det totale antal mappeindgange, hvis det er kendt. + +stat() rapporterer information om en fil, såsom størrelse, Mime-type, etc. Sådan information pakkes i en KIO::UDSEntry, som beskrives nedenfor. Brug statEntry() for at sende et sådant objekt til programmet. + +mimetype() kalder mimeType() med et strengargument. + +get() og copy() vil måske sørge for fremgangsinformation. Dette gøres med metoderne totalSize(), processedSize() og speed(). Den totale størrelse og den behandlede størrelse rapporteres som byte, og hastigheden som byte pr sekund. + +Du kan sende vilkårlige nøgle/værdipar af metadata med setMetaData(). + + + + + + + +Kommunikation med brugeren + +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. + + + +infoMessage(): 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 KIO::Job::infoMessage(). + +warning(): Viser en advarsel i et meddelelsesfelt med KMessageBox::information(). Hvis et meddelelsesfelt stadigvæk vises fra et tidligere kald af warning() fra samme underproces, sker der ingenting. + +messageBox(): Denne er endnu udførligere end den tidligere metode. Den tillader at et meddelelsesfelt med tekst og titel og nogle knapper vises. Se nummereringstypen SlaveBase::MessageBoxType som reference. + +openPassDlg(): Viser en dialog til at indtaste brugernavn og kodeord. + + + + + + + + + + + + +Licenser + +&underFDL; +&underGPL; + + + +
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 @@ + +Avanceret byggehåndtering +&automake; + + +Flere byggeindstillinger +byggeindstillingerflere + +(... endnu ikke skrevet ...) + + + + + + +Krydskompilering +krydskompilering +kompileringkryds + + +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 GCC infosiderne for mere information. Visse Linux-distributioner sørger også for binære pakker. + +En automake-baseret pakke kan let krydskompileres ved at angive flaget til configure-scriptet og indstille miljøvariablerne CC og CXX 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 . Når du har oprettet en ny byggekonfiguration for krydskompilering i dialogen Projekt Projekttilvalg..., tilføj så flaget + +platform + +til configure-flagene. Værdien platform er en kombination af formen + +cpu-forhandler-operativsystem +eller +cpu-forhandler-kerne-operativsystem + +For mange kombinationer kan du bruge en kortform, for eksempel i386-linux eller arm-elf. + + + + + + +Qt/Embedded +indlejretQt +Qt/Embedded +Qtopia +rammebuffer + +&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. + +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 til configure-scriptet. Du kan indstille det i dialogen Projekt Projektindstillinger... under Indstilling af configure. Med flaget , indstiller du mappen hvor &qte; er installeret. + +Efter at have konfigureret og kompileret programmet med disse flag, linkes det med biblioteket libqpe.so. 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 qvfb (Qt's virtuelle rammebuffer). Det gøres ved at starte qvfb og derefter starte programmet med + + +program + + +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. + +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 QPEApplication og det skal linkes med biblioteket libqpe.so. Hvis du udvikler programmet med projekthåndteringen autoprojekt, skal du tilføje til konfigurationsflagene. + + + + 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 @@ + +Ændringer + +Ændringer i dokumentet + + + + 2003-01-03 Bernd Gehrmann, Caleb Tennis + + oprindelig layout af håndbogen + + + disposition for indholdet i mange kapitler + + + + + + + + 2004-08-01 Bernd Pol, Ian Wadham + + håndbogen lettere reorganiseret + + + nogle manglende kapitler skrevet + + + + + + + 2005-05-02 Volker Paul — Mange ændringer, inklusive: + + opdelt i en fil per kapitel og appendiks + + + tilføjelse af kommandoreference sorteret ifølge menu (beskrivelser endnu ikke fuldstændige) + + + vejledning for programguiden i getting-started.docbook + + + reorganisering af kapitler, inspireret af Konquerors håndbog + + + flyttede Installation, Udvikling på Unix, I korthed til appendiks + + + omskrev appendiks om plugin, inklusive generering af pluginliste med listplugins.sh + + + + Stadig langt fra komplet, men et lille skridt fremad. + + + + 2006-05-20 Bernd Pol — Udfyldte nogle flere huller med endnu ikke skrevet: + + + + + + + + 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 @@ + + + + + + + + BerndPol + + + + +Konfigurationsfiler brugt af &tdevelop; + +&tdevelop; bruger en række konfigurationsfiler som er fordelt blandt flere kataloger. Der skelnes mellem to hovedgrupper af konfigurationsfiler: + + &tdevelop; Standardkonfigurations — filer der blev indstillet da &tdevelop; blev installeret. + Brugerorienteret konfiguration — filer som indeholder brugerens ændringer af standardindstillingerne lavet af &tdevelop; selv og dens plugin. + + + +&tdevelop; Standardkonfiguration. + +Ved installation lægger &tdevelop; nogle standardfiler med information til opsætnings- og konfigurationsformål, i underkatalogerne i $KDEDIR installationskataloget (normalt noget lignende /opt/kde, /usr/local/kde, eller et andet brugerdefineret installationskatalog. Se Installering af &tdevelop;). + + +Standardopsætning af &tdevelop; + +Der er kun en &tdevelop;-specifik standardkonfigurationsfil i kataloget$KDEDIR/share/config/: + + + tdeveloprc + Denne fil indeholder de basale indstillinger &tdevelop; skal bruge for at kunne starte. Den kopieres til brugernes $KDEDIR/share/config katalog når &tdevelop; ikke finder en tdeveloprc fil der ved opstart af programmet. + + + + + + +Programspecifikke standarder + +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 Plugin-værktøjer appendikset). Hver KPart-program har sit eget sæt af konfigurationsfiler hvis standarder lagres i flere underkataloger $KDEDIR/share/apps/ i installationskataloget. + +Der er temmelig mange underkataloger med standardkonfigurationsfiler i $KDEDIR/share/apps/, hvis navne alle starter med et kdev stavelse. De fleste er kun til intern brug i &tdevelop;. De kan være grupperet for overskuelighedens skyld og læsbarhed således: + Selvstændigt program + Opgavespecifikke parter + Projektoprettelsesparter + Sprogspecifikke parter + + + + + + Selvstændige programmer + + tdevelop/ — indeholder til til indstilling af det integrerede &tdevelop; udviklingsmiljø: + + licenser/ — indeholder forskellige licenstekster. + pics/: Indeholder billedfilerne som bruges af startskærmene i &tdevelop;, &tdevelop; assistent og &tdevelop; designer. + profiler/ — indeholder standard plugin-profilindstillinger. (Aktuelt findes der kun en lillebitte profil, som definerer et minimalt sæt af aktive &tdevelop; plugin.) + eventsrc — indeholder en masse Proces successfuld lokaliseringsstrenge. + tdevelopui.rc — sørger for de basale menu- og værktøjslinjeindgange &tdevelop; bruger. + kdevhtml_partui.rc — søger for Udskriv...-indgangen i Fil-menuen, en Kopiér indgang i Redigér-menuen og Tilbage og Fremad-pile i Browser-værktøjslinjen hvis der ses på en &HTML;-fil fra Dokumentations-plugin. + + + kdevassistant/ — sørger for menuen og værktøjslinjer i provides the menu and tool bars of the selvstændige &tdevelop; Assistant dokumentations-browser. + kdevdesigner/ og kdevdesignerpart/ — sørger for menu- og værktøjslinjer i den selvstændige &tdevelop; Designer. + + + + Opgavespecifikke dele + + kdevabbrev/ — indeholder filer der bruges af Forkortelses-plugin: + + sources/ — indeholder definitioner af nøgleord, der bruges af Udvid tekst-kommandoen. + templates/ — indeholder skabelondefinitionsfiler der bruges af Udvid forkortelse-kommandoen. + kdevabbrev.rc — sørger for Udvid tekst og Udvid forkortelse indgangene i Redigér-menuen. + + + + kdevappwizard/ — indeholder filer der bruges af &appwizard; part: + + importfiles/ — indeholder.tdevelop projektfiler som kontrollerer initialiseringen af et nyt projekt. + imports/ — indeholder skabeloner til opsætning af projektspecifikke .desktop-filer. + template-common/ — indeholder forskellige filerder ofte bruges i projektkildekatalogerne. + templates/ — indeholder konfigurationsfiler som beskriver informationen der skal inkluderes i et givet projektkatalog. + *.png — forhåndsvisningsbilleder af projekter, der bruges af &appwizard;. + *.tar.gz — tar-arkiver der indeholder kildekodefiler der skal inkluderes i et nyligt oprettet projektkatalog. + + + kdevastyle/ — sørger for Formatér kildekode igen-indgangen i Redigér-menuen. + kdevautoproject/ — sørger for de fleste indgange i Byg-menuen og Byg værktøjslinje (&tdevelop;) -værktøjslinjen. + + kdevclassview/ — indeholder filer der bruges af Klassevisning-plugin: + + pics/ — indeholder ikoner der bruges i Klasser-klassevisningstræet. + kdevclassview.tc — sørger for Klasse arve-diagram-indgangen i Projekter-menuen, såvel som kombinationsfeltet til klassenavigering i Browser-værktøjslinjen. + + + kdevcloser/ —sørger for Vindue-menuens lukke-indgange. + kdevctags/ — sørger for CTags-indgangen i Værktøjer-menuen, til CTags forende-projekt-plugin. + kdevcvsservice/ — sørger for ikonen der bruges af CvsService-fanebladet og et kort skal-script til at føje nye indgange til &cvs;-lageret, begge bruges af CVS Integration projekt-plugin. + kdevdebugger/ — sørger for Fejlsøg-menuindgangene til Fejlsøger forende-projekt-plugin. + kdevdiff/ — sørger for Diff-fremviser-indgangen i Værktøjer-menuen. + kdevdistpart/ — sørger for Distribution & publicering-indgangen i Projekt-menuen til Endelig pakning project plugin. + + kdevdokumentation — indeholder filer der bruges af Dokumentations-plugin: + + en/ og pics/ — indeholder filer der bruges af htdig søgeværktøjet. + indholdsfortegnelse/ — indeholder standard &tdevelop;-dokumentationens beskrivelsesfiler (se beskrivelse i Basal struktur af &tdevelop; indholdsfortegnelse Filer. + kdevpart_dokumentation.rc — sørger for de søgningsrelaterede indgange i menuen Hjælp. + + + kdevdoxygen/ — sørger for menuindgangene til Doxygen-understøttelse projekt plugin. + + kdevfilecreate/ — indeholder filer brugt af guiden Ny fil. + filskabeloner/ — sørger for tekstskelettet der lægges i nye kildekodefiler af en given type. + kdevpart_filecreate.rc — sørger for indgangen Ny i menuen Fil. + skabelon-info.xml — indeholder beskrivelser af de til rådighed værende filtyper der skal vises i værktøjsvisningen Ny fil. + + + kdevfilter/ — sørger for menuindgangene Kør kommando... og Filtrér markering gennem kommando... i menuen Værktøjer der bruges af Skalfiltrering og indsætning-plugin. + kdevfullscreen/ — sørger for menuindgangen Fuldskærmstilstand i Vis-menuen og som ikon på værktøjslinjen. + kdevgrepview/ — sørger for indgangen Find i filer... i menuen Redigér som bruges af Grep-grænseflade-plugin. + kdevhistory/ — sørger for indgangene Tilbage og Fremad i Vis-menuen. + kdevjavadebugger/ — sørger for en Java-fejlsøgningsmenu til at fejlsøge i et &Java;-program. + kdevoutputviews/ — sørger for indgangene Næste fejl og Forrige fejl i menuen Vis. + kdevpartexplorer/ — sørger for ingangen Partudforsker i menuen Værktøjer der bruges af Partværktøj-plugin. + kdevquickopen/ — sørger for menuindgangen Åbn fil i menuen Fil og Åbn klasse og Åbn metode i menuen Værktøjer der bruges af Hurtig-åbn-plugin. + kdevregexptest/ — sørger for menuindgangen Fejlsøg regulært udtryk i menuen iVærktøjer der bruges af Regulært udtryk-tester-plugin. + kdevreplace/ — sørger for menuindgangen i Find-vælg-erstat i menuen Redigér der bruges af Erstat-part-plugin. + kdevtipofday/ — sørger for indgangen Dagens vink i menuen Hjælp såvel som en HTML med de tilgængelige vink. + kdevtools/ — kontrollerer diverse menuindgange der oprettes af menuen Værktøjer og menuen Eksterne værktøjer der kommer fra Tilføjelse af værktøjer-plugin. + kdevvalgrind/ — sørger for indgangene Valgrind kontrol af hukommelseslækker og Profil med KCachegrind i menuen Fejlsøg der bruges af Valgrind grænseflade-plugin. + + + + Projektoprettelses-part + kdevadaproject/ — sørger for indgangene i menuen Byg og tilhørende værktøjslinjeikoner der bruges til at bygge et Ada-program. + kdevantproject— sørger for indgangene i menuen Byg når Ant-projektoprettelsen bruges. + kdevautoproject/— sørger for indgangene til menuen Byg 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 Tilføj oversættelse og Byg indstillinger til Projekt-menuen. + kdevcustomproject/ — sørger for indgangene til menuen Byg og de tilhørende værktøjslinjeikoner når projektet baseres på Makefiler. + kdevgenericproject/ — indeholder menudefinitioner til en eksperimentel generisk projektoprettelse. Aktuelt (version 3.1.0) ubrugt. + kdevhaskellproject/ — sørger for indgangene i menuen Byg og de tilhørende værktøjslinjeikoner der bruges til at bygge et Haskell-program. + kdevpascalproject/ — sørger for indgange til menuen Byg og de tilhørende værktøjslinjeikoner der bruges til at bygge et Pascal-program. + kdevtrollproject/ — sørger for indgange til menuen Byg og de tilhørende værktøjslinjeikoner der bruges til at bygge et program med &Qt; QMake-projekthåndtering. + + + + Sprogspecifikke parter + kdevadasupport — sørger for indgange til menuen Værktøjer og de tilhørende værktøjslinjeikoner der bruges til at udvikle Ada-programmer. + kdevbashsupport/ — sørger for indgange til menuen Byg og de tilhørende værktøjslinjeikoner der behøves for at udviklet bash-scripter. + + kdevcppsupport — indeholder filer der bruges af &appwizard; til at bygge C++-programmer. + + newclass/ — indeholder sidehoved og kildekode-skabeloner fra hvilke &appwizard; bygger de tilhørende kildekodefiler. + underklasser/ — indeholder skabeloner som &appwizard; bruger til at lave skelettet til klasse-erklæringer- og definitioner i kildekodefilerne. + skabeloner — indeholder skabeloner fra hvilke &appwizard; indstiller standard hvoed og kildekodeskabelonfiler, der bruges af &nfwizard;. + indstillinger — skabelon-attrap til at tilføje makroer. + kdevcppsupport.rc — sørger for indgangene Fuldstændiggør tekst og Gør til medlem til menuen Redigér, indgangene Skift mellem inkludering/implementering til menuen Vis og Ny klasse i menuen Projekt og ikonen Opret en ny klasse i Browserværktøjslinjen. + + + kdevfortransupport/ — sørger for indgangene i menuen Byg der bruges til at udvikle Fortranprogrammer. + kdevhaskellsupport/ — sørger for indgange i menuen Byg og de tilhørende værktøjslinjeikoner der skal bruges til udvikling af Haskell-programmer. + kdevjavasupport/ — indeholder brugerfladedefinitionen der bruges ved udvikling af &Java;-programmer. + kdevpascalsupport/ — indeholder brugerfladedefinitionen der skal bruges ved udvikling af Pascalprogrammer. + kdevperlsupport/ — sørger for menuindgangene Projekt og Hjælp der bruges ved udvikling af Perl-programmer. + kdevphpsupport/ — indeholder brugerflade og PHP-funktionsdefinitionsfiler der skal bruges ved udvikling af PHP-scripter. + kdevpythonsupport/ — sørger for menuindgangene Byg og Hjælp og de tilhørende værktøjslinjeikoner der bruges ved udvikling af Python-scripter. + kdevrubysupport/ — sørger for Byg-menuen og tilhørende værktøjslinjeikoner der bruges ved udvikling af Ruby-scripter. + kdevscriptproject/ — sørger for brugergrænseflade-definitioner der er nødvendige for at kunne udvikle brugertilpassede projekter. Aktuelt (version 3.1.0) ubrugt. + kdevsqlsupport/ — sørger for brugergrænseflade-definitioner der er nødvendige for at kunne udvikle SQL-projekter. Aktuelt (version 3.1.0) ubrugt. + + + + + + + + + + + +Brugerorienterede indstillinger + +Al information om brugerdefinerede indstillinger, gemmes i to undermapper i $KDEHOME, : + Programspecifikke indstillinger i $KDEHOME/share/apps/-mappen og + Ressourceindstillingsfil i $KDEHOME/share/config-mappen. + + + + +Programspecifikke indstillinger + +Alle ændringer foretaget af brugeren &tdevelop; Standardindstillinger så vel som brugerspecifikke indstillinger der ikke opbevares i nogen af Ressource-indstillingsfilerne findes i kdev... undermapperne i $KDEHOME/share/apps/-mappen. +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. +I tilfælde af at indeholdet af disse mapper afspejler dem i Standardindstillingerne, vil &tdevelop; have kopieret dem fra $KDEDIR/apps/ ind i $KDEHOME/apps/-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. + + + + kdevabbrev/ — indeholder filer der bruges af Forkortelses-plugin: + + sources/ — tom lige nu. &tdevelop; bruger standardnøgleord filer til Udvid tekst-kommandoer. + templates/ — indeholder de af brugeren ændrede skabelondefinitionsfiler der bruges af Udvid forkortelse-kommandoen. + kdevabbrev.rc — sørger for Udvid tekst og Udvid forkortelse indgangene i Redigér-menuen. + + + + kdevappwizard/ — sørger kun for indgangene Nyt projekt og Importér projekt i menuen Projekter. &appwizard; bruger standardindstillingerne for egentligt arbejde. + + + kdevastyle/ — sørger for indgangen Formatér kilde igeni menuen Redigér. + + + kdevautoproject/ — sørger for indgangene i menuen Byg og de tilhørende værktøjslinjeikoner i Byg menu ogVærktøjslinjen til bygning. + + + kdevclassview/ — sørger for indgangen Klasse-arvediagram i menuen Projekt og klassebrowser kombinationsfeltet i Browserværktøjslinjen fra Klassevisning projekt-plugin. + + + kdevcloser/ — sørger for indgangen Luk markerede vinduer... i menuen Vindue-menuen. + + + kdevcppsupport/— indeholder de faktiske indstillinger der bruges af &appwizard; til at bygge C++-programmer. &appwizard; bruger do hovedparten af informationen om indstillinger direkte fra standardindstillingsmappen. Se her for detaljer. + + + newclass/ — indeholder sidehoved- og kildekodeskabeloner ud fra hvilke &appwizard; bygger de tilhørende kildekodefiler. + + + pcs/ — indeholder databasefiler som &tdevelop; bruger til at bygge overlevende kodeopbevaringsfiler .pcs til et &kde;-C++-projekt + + + kdevcppsupport.rc — sørger for indgangene Fuldstændiggør tekst og Gør til medlem til menuen Redigér, indgangene Skift mellem inkludering/implementering til menuen Vis og Ny klasse i menuen Projekt og ikonen Opret en ny klasse i Browserværktøjslinjen. + + + + + kdevctags/ — sørger for CTags-indgangen i Værktøjer-menuen, til CTags forende-projekt-plugin. + + + kdevdebugger/ — sørger for Fejlsøg-menuindgangene til Fejlsøger forende-projekt-plugin. + + + kdevdiff/ — sørger for Diff-fremviser-indgangen i Værktøjer-menuen. + + + kdevdocumentation/ — indeholder filer der bruges af Dokumentation-plugin foruden standardindstillingsfilerne. Se her for detaljer. + Mapperne i kdevdocumentation/ indeholder for det meste bogholderi-information. De indstillede dokumentationsfiler opbevares i doc...pluginrc-filer i $KDEHOME/share/config/-mappen. + + + bookmarks/ — vedligeholder indgangene i fanebladet Bogmærker i &tdevelop;s Dokumentation-plugin. + + + index/ — indeholder diverser cache-filer som &tdevelop; bruger til at til øge hastigheden på indekseret dokumentationssøgninger i fanebladet Indeks i Dokumentation-plugin. + + + search/ — indeholder filer der bruges af søgeværktøjet htdig der fungerer varetager søgekald fra Søg-fanebladet i Dokumentation-plugin. + + + kdevpart_dokumentation.rc — sørger for de søgningsrelaterede indgange i menuen Hjælp. + + + + + kdevdoxygen/ — sørger for menuindgangene til Doxygen-understøttelse projekt plugin. + + + tdevelop/ — indeholder indstillinger som &tdevelop; bruger til sin basisopsætning: + + profiles/ — sørger for plugin-profilindstillinger. (Til at begynde med er der kun en Fuldstændigt udviklingsmiljø-profil der definerer en hel samling af aktive &tdevelop; plugin, første gang programmet startes. + tdevelopui.rc — sørger for de basale menu- og værktøjslinjeindgange &tdevelop; bruger. + + + + kdevfilecreate/ — indeholder filer brugt af guiden Ny fil. + + file-templates/ — sørger for tekstindholdet puttes i den nye kildekodefil af en given type. Flere filskabeloner kan findes i mappen standardindstillingsfiler. + kdevpart_filecreate.rc — sørger for indgangen Ny i menuen Fil. + skabelon-info.xml — indeholder beskrivelser af de til rådighed værende filtyper der skal vises i værktøjsvisningen Ny fil. + + + + kdevfilter/ — sørger for menuindgangene Kør kommando... og Filtrér markering gennem kommando... i menuen Værktøjer der bruges af Skalfiltrering og indsætning-plugin. + + + kdevfullscreen/ — sørger for menuindgangen Fuldskærmstilstand i Vis-menuen og som ikon på værktøjslinjen. + + + kdevgrepview/ — sørger for indgangen Find i filer... i menuen Redigér som bruges af Grep-grænseflade-plugin. + + + kdevoutputviews/ — sørger for indgangene Næste fejl og Forrige fejl i menuen Vis. + + + kdevpartexplorer/ — sørger for ingangen Partudforsker i menuen Værktøjer der bruges af Partværktøj-plugin. + + + kdevquickopen/ — sørger for menuindgangen Åbn fil i menuen Fil og Åbn klasse og Åbn metode i menuen Værktøjer der bruges af Hurtig-åbn-plugin. + + + kdevregexptest/ — sørger for menuindgangen Fejlsøg regulært udtryk i menuen iVærktøjer der bruges af Regulært udtryk-tester-plugin. + + + kdevreplace/ — sørger for menuindgangen i Find-vælg-erstat i menuen Redigér der bruges af Erstat-part-plugin. + + + kdevtipofday/— sørger for indgangen Dagens vink i menuen Hjælp. HTML-filen der indeholder de tilgængelige vink findes kun som en standardindstillingsfil. + + + kdevtools/ — kontrollerer diverse menuindgange der oprettes af menuen Værktøjer og menuen Eksterne værktøjer der kommer fra Tilføjelse af værktøjer-plugin. + + + kdevvalgrind/ — sørger for indgangene Valgrind kontrol af hukommelseslækker og Profil med KCachegrind i menuen Fejlsøg der bruges af Valgrind grænseflade-plugin. + + + + + + +Ressourceindstillingsfiler + +Der er to grupper af &tdevelop; indstillingsfiler i mappen $KDEHOME/share/config/ der kan skelnes imellem vha. de omkringliggende tegnsekvenser: + doc...pluginrc betegner filer der bruges af dokumentationsplugin. + kdev...rc betegner indstillingsfiler der bruges af &tdevelop; og dens tilgængelige plugin. + + + + +Konfigurationsfiler brugt af &tdevelop; + + kdevabbrevrc — indeholder Forkortelsernes aktuelle indstillingstilstand der sørges for af Forkortelsesudvidelse-plugin. + Dette registrerer blot om forkortelser benyttes eller ej. De faktiske definitioner af nye forkortelser bliver lagt i $KDEHOME/share/apps/kdevabbrev/templates/templates-filen. + + + kdevassistantrc — indeholder nogle indstillings-tilstande, specifikke for den alenestående &tdevelop; Assistent dokumentationsbrowser. + De fleste fælles indstillinger deles med &tdevelop;-udviklingsmiljøets tdeveloprc-fil. + + kdevassistantuimode4rc — indeholder den aktuelle MDI-indstillingstilstand (dokplaceringer &etc;) for den alenestående &tdevelop; Assistent dokumentationsbrowser. + + kdevclassviewrc — indeholder indstillingerne for Vis tilstand i klassebrowserens faneblad Klasser der sørges for af Klassevisning projekt-plugin. + Dette er en global indstilling, selvom Klassevisning-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. + + kdevcppsupportrc — indeholder nogle indstililnger der bruges til opsætning af CPP kildekodefiler. Specifikt vil du kunne finde indstillinger der laves i indstillingsdialogen C++- klasseoprettelse herinde. + kdevdocumentationrc — indeholder opsætningen for Dokumentations-plugin. + tdeveloprc — indeholder den globale opsætning som &tdevelop; udviklingsmiljøet og &tdevelop; Assistent dokumentationsbrowseren bruger. + tdevelopuimode4rc — indeholder &tdevelop;s aktuelle MDI-tilstandsindstillinger (dokplaceringer &etc;). + kdevfileselectorrc — indeholder opsætningen til Filvælger-plugin. + kdevfileviewrc — indeholder opsætningen for farven på filnavne som bruges til fremvisning i CVS-integration (Cervisia) projekt-plugin. + kdevfilterrc — indeholder opsætningen for Skalfiltrering og indsætning-plugin. + kdevgrepviewrc — indeholder opsætningen der bruges af Grep-grænseflade-plugin. + kdevsnippetrc — indeholder opsætningen som bruges af Kodestumper-plugin. + kdevtoolsrc — indeholder opsætningen som bruges af Menutilføjelse af værktøjer-plugin. + + + +Indstillingsfiler der bruges at Dokumentations-plugin + docchmpluginrc — indeholder information om &Microsoft; CHM-hjælpefiler som defineret på indstillingssiden Dokumentationssamling. + doccustompluginrc — indeholder information om en hvilken som helst dokumentationsfil der er defineret på indstillingssiden Tilpas dokumentationssamling. + docdevhelppluginrc — indeholder information om GNOME2 DevHelp-dokumentationsfiler som defineret på indstillingssiden Dokumentationssamling. + docdoxygenpluginrc — indeholder information Doxygen-genereret API-dokumentation som defineret på indstillingssiden Doxygen-dokumentationssamling. + dockdevtocpluginrc — indeholder information om KDevelopIndholdsfortegnelsens strukturerede dokumentation filer som defineret på indstillingssiden Dokumentationssamling. + docqtpluginrc — indeholder information om Qt-dokumentationsfiler der er inkluderet på Qt indstillingssiden i Dokumentationssamling. + + + + + + + + + +Projektafhængige indstillinger + +Det fleste projektafhængige indstillinger opbevares i <projektnavn> tdevelop og <projektnavn> kdevses &tdevelop; projektindstillingsfiler frem for i separate filer, som de andre mere globale indstillinger. Kort sagt filerne er beregnet til: + + <projektnavn> tdevelop — globale projektindstillingsinformation. + <projektnavn> kdevses — indstillingsinformation der bruges til at genoprette den kørende sessions opførsel. + +Begge er &XML;-kodede filer. De kan vises og (varsomt) ændres med en hvilken som helst teksteditor. + + +Overlevende kodeopbevaringsfiler + +Der er en tredje projektafhængig konfigurationsfil, <projektnavn> tdevelop.pcs 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 Kodefuldstændiggørelse i denne fil. + +Der kan være yderligere overlevende kodeopbevaringsfiler i fanebladet Kodefuldstændiggørelse i den C++-specifikke projektindstillingsside. Information om disse yderligere .pcs opbevares i $KDEHOME/share/apps/kdevcppsupport/pcs/-mappen. + + + + + 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 @@ + + + + + BerndPol + + + + +Menu- og værktøjslinjeoversigt + +(... endnu ikke skrevet ...) + + +Menuer + +(... endnu ikke skrevet ...) + + +Almindeligt tilgængelige menuer + +(... endnu ikke skrevet ...) + + + + +Projektspecifikke menuer + +(... endnu ikke skrevet ...) + + + + +Plugin-værktøjsmenuer + +(... endnu ikke skrevet ...) + + + + + + +Værktøjslinjer + +(... endnu ikke skrevet ...) + + + + 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 @@ + +Yderligere information + +Hent information +(... endnu ikke skrevet ...) + + + +Rapportér programfejl +(... endnu ikke skrevet ...) + + + +Licenser +&underFDL; &underGPL; + + + 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 @@ + +Eksempel på tilstande i brugergrænsefladen for &tdevelop; + + +IDEA-vinduetilstand + +Klik her for at gå tilbage til oversigten over tilstande. + + + + + + + Skærmaftryk + &tdevelop; IDEA-vinduetilstand + + + +Klik her for at gå tilbage til oversigten over tilstande. + + + + + + + Skærmaftryk + &tdevelop; IDEA-tilstand, lukkede faneblade + + + +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. +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 Automake Manager værktøjsvinket vist som et eksempel. Det beskriver det nederste faneblad i fanebladslinjen til højre. + +Klik her for at gå tilbage til oversigten over tilstande. + + + + + + +Underrammevinduetilstand + +Klik her for at gå tilbage til oversigten over tilstande. + + + + + + + Skærmaftryk + &tdevelop; underrammetilstand + + + +Klik her for at gå tilbage til oversigten over tilstande. + + + + + + +Fanebladssidetilstand + +Klik her for at gå tilbage til oversigten over tilstande. + + + + + + + Skærmaftryk + &tdevelop; faneblads-sidetilstand + + + +Klik her for at gå tilbage til oversigten over tilstande. + + + + + + +Topniveauvinduetilstand + +Klik her for at gå tilbage til oversigten over tilstande. + + + + + + + Skærmaftryk + &tdevelop; topniveautilstand + + + +Klik her for at gå tilbage til oversigten over tilstande. + + + + + + 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 @@ + + + + + BerndPol + + + + +Kom i gang — med &appwizard; + + + + + + Programguiden + +Arbejdet med at udvikle programmel i &tdevelop; organiseres i projekter. 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. +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. + + +Nye projekter + + + + + + projekt + ny + +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; +&tdevelop; sørger for en nem måde at starte et nyt programmeringsprojekt—programguiden. Du finder programguiden via menupunktet Projekt Nyt projekt. +Det er kun et fåtal af skridt der er nødvendige for at oprette et nyt programmeringsprojekt med programguiden: + + Vælg programmeringssproget du vil bruge, og type af program som du vil oprette ud fra et sæt fordefinerede skabeloner. + Sørg for en del generel information såsom programnavn, mappe hvor programmet skal bygges, &etc; + Bestem om du vil bruge et versionskontrolsystem, som ⪚ CVS, og sørg for nødvendig information som behøves. + Indstil nogle skabeloner for oprindelig deklarationsfil og kildekodefil (om nødvendigt). + Bed til sidst programguiden om at oprette alle nye ting, mappestruktur, startskabeloner for deklarationsfiler og kildekodefiler, og håndteringsværktøj såsom ⪚ et startskelet til at bygge programmet, &etc; + +Voilà—det er alt. Programguiden har nu givet dig et første fungerende sæt programfiler, hvor du enkelt kan begynde at arbejde. +Lad os nu tage et mere detaljeret kig på alt dette... + + +Indledende skridt + + + dialog + opret nyt projekt + + projekt + opret nyt projekt + dialog + + projekt + skabeloner + + skabeloner + projekt + +For at oprette et nyt projekt i &tdevelop;, vælges Nyt projekt i menuen Projekt. Du vil nu se guiden for at oprette nyt projekt, som vises nedenfor: + + + + + + + Indledende dialog for at oprette et nyt projekt + + + +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. + + +Vælg programmeringssprog og programtype + + + projekt + programtype + + projekt + programmeringssprog + + projekt + sprog + + sprog + + programmeringssprog + + program + type + +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: + + + Ada + Ada + nyt projekt + + C + C + nyt projekt + + C++ + C++ + nyt projekt + + Database (SQL-projekter) + SQL + nyt projekt + + Database + nyt projekt + + Fortran + Fortran + nyt projekt + + Haskell + Haskell + nyt projekt + + Java + Java + nyt projekt + + PHP + PHP + nyt projekt + + Pascal + Pascal + nyt projekt + + Perl + Perl + nyt projekt + + Python + Python + nyt projekt + + Ruby + Ruby + nyt projekt + + Skal (scripter for Bash skallen) + Bash + nyt projekt + + skal + nyt projekt + + + +For at være præcis, indeholder mapperne i virkeligheden ikke rigtige programmeringsværktøjer. De fører til fordefinerede skabeloner 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. +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 kort beskrivelse 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 skærmaftryk af hovedvinduet som programmet viser. +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. + + +Vælg et projekthåndteringssystem +Hver skabelon er bundet til et bestemt Projekt håndteringssystem. 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. + + + + + +Angiv almen information + + + projekt + egenskaber + + egenskaber + + program + navn + + navn + program + + projekt + mappe + + mappe + projekt + + søgesti + nyt projekt + + projekt + forfatter + + projekt + e-mail + + forfatter + + e-mail + + projekt + main.cpp + + main.cpp + + projekt + licens + + licens + +Den nederste del af siden Generelt i dialogen Opret nyt projekt er et indrammet felt som hedder Egenskaber. Du skal sørge for en del almen information om projektet, så programguiden ved hvordan den oprindelige struktur skal bygges. + +Programnavn +Dit program behøver naturligvis et navn. Indtast det i det øverste felt under Egenskaber, som hedder Programnavn. Vi bruger MyApp som eksempel. + +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: + små og store bogstaver + tal + tegnet understregning + + +En fremtrædende grund til begrænsningen er at programguiden vil bruge programnavnet som basis for visse klassenavn som den laver når den opbygger projektet fra begyndelsen. Altså skal projektets navn følge reglerne for programsproget som bruges. + +Projektmappen +Den anden udmærkede grund for begrænsningen ser du på nederste linje i området Egenskaber. Den hedder Endeligt sted, og viser mappen hvor programguiden laver programmet. + +Når du indskriver programmets navn mærker du at programguiden gentager det du indskriver længst nede på linjen Endeligt sted, men kun med små bogstaver. +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 Næste > inaktiv (grå). Den advarer dig også ved at tilføje (fil eller mappe findes allerede) sidst på linjen Endeligt sted. + + +Startsøgesti +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. + +Det gøres i den anden linjes indtastningsfelt under Egenskaber, som hedder Sted. Det du skriver her er startsøgestien for det nye programs udviklingsmappe. Programguiden tilføjer programnavnet sidst i søgestien når det nye projekt laves. Resultatet vises på linjen Endeligt sted for at bedre vise hvad der sker. +Programguiden kopierer en startværdi til feltet Sted fra begyndelsen. Det hentes fra det du har valgt under feltet Standardprojektmappe under de generelle indstillinger. I vores tilfælde har vi &tdevelop; sat op til at bruge /home/devel/projects/ som oprindelig sti for nye projekter. +Ændr indholdet i feltet Sted, så udviklingsmappen for programmet som vises på linjen Endeligt sted er entydig. + +Sørg for at søgestien du skriver ind i feltet Sted allerede findes. Ellers kommer du ikke til at kunne fortsætte til næste skridt. Programguiden advarer dig om søgestier som ikke findes, ved at tilføje (ugyldig) sidst på linjen Endeligt sted. + + + + + + + Indstil et nyt projekt for CVS + + + + +Personlig information +Felterne som følger er ikke så kritiske. Angiv blot dit navn (&ie; navnet på personen som er ansvarlig for programmet) i feltet Forfatter, og en gyldig e-mail-adresse i feltet E-mail, så brugere kan give dig tilbagemeldinger om programmet. + + + + + &appwizard; udfylder feltet med standardværdier, som tages fra e-mail-indstillingerne i KDE's kontrolcenter. Hvis standardværdierne i felterne Forfatter og E-mail under Opret nyt projekt ikke passer, bør du kontrollere e-mail-indstillingerne i KDE's kontrolcenter. + Programguiden sammenstiller informationen til en startprogramskabelon hvis det er muligt. For &kde; C++ programmer, finder du den for eksempel i begyndelsen af kildekodefilen main.cpp. + Feltet E-mail er det valgfrie blandt felterne, hvilket skyldes at ikke alle udviklere har adgang til internettet. Du kan lade feltet være tomt, og fortsætte alligevel. + + + + +Versions- og licensinformation +Indskriv til sidst startversion for det nye program i feltet Version, og vælg licensen du vil skal gælde for dit program i dropned-feltet Licens. + + +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 Opret nyt projekt (se kapitlet Angiv skabeloner for deklarationer og kildekode nedenfor). +Hvis du valgte Egen i dropned-feltet Licens skal du selv sørge for en licenstekst. + +Både version og licensinformation vil også blive indsat i startskabelonerne i et passende format, som programtypen du vælger, tilbyder. + +Når du har skrevet al denne informationen korrekt ind, så tryk på knappen Næste >, for at fortsætte, som vist i de følgende kapitler. + + + + + +Angiv information om versionssystem + + + CVS + nyt projekt + + projekt + CVS + + database + CVS + + version + database + + version + CVS + +I det andet skridt, leder programguiden dig til siden Versionskontrolsystem, hvor du kan bestemme hvilket versionskontrolsystem du vil bruge. + +Denne beskrivelse koncentreres kun om behovene for at oprette projekter. For mere information om &CVS;, se kapitlet Brug af &CVS; nedenfor. + + +Intet versionskontrolsystem ønskes +Fra begyndelsen er Intet valgt i fanebladet Versionskontrolsystem og siden er i øvrigt tom. Hvis du ikke vil bruge et versionskontrolsystem, så klik blot på knappen Næste for at fortsætte. + + + +Brug af &CVS; +Ellers skal du vælge versionskontrolsystemet som du vil bruge i dropned-feltet Versionskontrolsystem. For øjeblikket er kun &cvs; tilgængeligt. Hvis du vælger det, viser programguiden siden igen, men nu indeholder den et antal felter som du skal udfylde. + + + + + + + + Indstil et nyt projekt for CVS + + + +Et versionskontrolsystem som &CVS; (hvilket betyder Concurrent Versions System) opbevarer kopier af udvalgte projektfiler i en slags database. Hvis du bruger &CVS;, kan du blandt andet overføre (arkivere) filerne eller tage dem ned til din projektmappe (tjekke ud, eller opdatere). 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. + + + CVS + rod + + rod + CVS + + CVS + lokal + + CVS + ekstern + + lokal CVS + + :local: + + CVS + :local: + + +&CVS;-rod +&CVS; skal håndtere versionsdatabasen som den har fra dine projektfiler. For at opnå dette har den en del speciel databaseinformation i en egen mappe, som kaldes &CVS;-roden. Det første skridt for at indstille &CVS; for det nye projekt, er altså at fortælle &tdevelop; hvor roden findes. + + +Lokal &CVS;-rod. Der er to grundlæggende muligheder. Enten vil du bruge en lokal &CVS;-database, eller du vil bruge en database som findes på en fjernserver. 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 cvsroot. Det kan se ud på følgende måde: +/home/udvikling/cvsroot (hvor udvikling simpelthen angiver brugeren udvikling, kun som et eksempel) + +I virkeligheden er dette en forkortet form. Mere fuldstændigt skal den lokale &CVS;-rod adresseres med præfikset :local:. Den forkortede form tillades kun i tilfælde hvor filnavnet begynder med en skråstreg (/). Det fuldstændige navn på vor lokale &CVS;-rod i eksemplet ville se nøjagtigt ud som: :local:/home/udvikling/cvsroot. + +Indtast navnet på &CVS;-rodmappen som systemet har indstillet for feltet CVS-rod. 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. +Initiér en ny &CVS;-rod. 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 Initiér rod under feltet CVS-rod. +Som sagt, beordrer &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 Initiér rod for en eksisterende &CVS;-rodmappe. + +Ekstern &CVS;-rod. 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 &CVS;-rod. Hvis du for eksempel vil have adgang til &kde;'s &CVS;-server: +:pserver:min_indlogning@cvs.kde.org:/home/kde (hvor min_indlogning angiver indlogningsnavnet som er indstillet i din &kde; &CVS;-konto) + + + ekstern CVS + + :pserver: + + :ext: + + CVS + :local: + + CVS + :pserver: + + CVS + :ext: + + +Servertyper for fjern-&CVS; +Det er i hovedsagen to fjernservertyper for &CVS; med udbredt brug: pserver som bruger en kodeordssikret ukrypteret protokol, og ext-serveren som bruger krypteret dataoverførsel via rsh eller ssh. De adskilles af &URL;-præfikset de bruger: + + +:pserver: + +for den ukrypterede kodeordsbeskyttede server type, og + +:ext: + +for en servertype krypteret med rsh eller ssh. For eksempel + +:ext:mitlogin@cvs.cervisia.sourceforge.net:/cvsroot/cervisia + +får adgang til &CVS;-roden for det meget brugte &CVS;-håndteringsværktøj Cervisia på serveren SourceForge. +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 rsh eller ssh i feltet CVS_RSH på siden Versionskontrolsystem i Opret nyt projekt. + +Der er et problem hvis du bruger en krypteret server for &CVS; inde i &tdevelop;. Se kapitlet Brug af &CVS; for detaljeret information. + + + CVS + arkiv + + arkiv + CVS + + +&CVS;-arkivet +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 arkiv. + +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. +Indskriv blot arkivnavnet som du vil bruge i feltet CVS-arkiv på siden Versionskontrolsystem under Opret nyt projekt. I vort eksempel er det Mit_nye_program. + +Sørg for ikke at bruge et arkiv som allerede findes!. &CVS;-systemet advarer ikke om duplikerede filer, men smider alting ind som ikke producerer en formel konflikt. Du vil lave rod i alting! + + +Tilbageværende felter +Der er ikke meget arbejde tilbage. Programguiden har allerede indstillet de øvrige felter for dig. Mere detaljeret: + +Feltet Leverandør bruges kun af kompatibilitetsgrunde. Du kan beholde standardværdien leverandør som programguiden har skrevet her. +Feltet Meddelelse 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 nyt projekt som programguiden har skrevet ind. +Udgavemærke indeholder navnet som bruges som mærke for den oprindelige tilstand af projektet. Et sådant mærke 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 Brug af &CVS;.) +Programguiden har indskrevet standardmærket start her, som er et værdigt forslag. Behold det blot. + + +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 Meddelelser i &tdevelop; når projektet laves i det sidste indstillingsskridt. Hvis der var nogen fejl med &CVS;, ser du oftest en fejlmeddelelse som denne: + + +* 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 *** + + +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 Nyt projekt i menuen Projekt. + + +Efter du har indtastet al information relateret til &CVS;, så klik på knappen Næste > for at fortsætte. + +Hvis du vil rette en fejl på foregående side i Opret nyt projekt, så tryk blot på knappen < Tilbage. Programguiden husker dine indstillinger på nuværende side, så du kan nemt fortsætte når du kommer tilbage. + + + + +Angiv skabeloner for deklarationer og kildekode + +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. +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. +Hvis siden bruges, udfylder programguiden nogle almindelige kommentarer i sidehovedet, som kan se sådan her ud for et C++ baseret program: + + +/*************************************************************************** + * Copyright (C) 2003 by Dit navn * + * dig@dig.dk * + * * + * 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. * + ***************************************************************************/ + + +Andre skabeloner sørger for lignende information på et format ifølge definitionen af programmeringssproget du vil bruge. +Som du måske har bemærket, har programhåndteringen allerede udfyldt noget information som du angav på den første side Generelt i dialogen Opret nyt projekt, nærmere bestemt indholdet i felterne Forfatter og E-mail. Rigtig licensinformation er også indsat, følgende dit valg i fanebladet Licens. + + +Hvordan skabelonerne kan redigeres + + + skabeloner + projekt + redigér + + projekt + skabeloner + redigér + +Skabelonerne som du indstiller i dialogen Opret nyt projekt 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. +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 Forfatter, E-mail og Licens i den oprindelige skabelonteksten. + + + +Indsæt filinformation fra &doxygen; + +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: + +/** + * \file $MODULE$.cpp + * \brief (skriv en kort beskrivelse her). + **/ + +Så snart du laver en ny kildekodefil, erstatter &tdevelop; variablen $MODULE$ med navnet på den nyoprettede fil. Hvis du for eksempel laver en ny C++ klasse som hedder EnEnkelTest, ser du følgende linjer i filen enenkeltest.cpp: + +/** + * \file enenkeltest.cpp + * \brief (skriv en kort beskrivelse her). + **/ + +Du skal stadigvæk sørge for den korte beskrivelse efter nøgleordet \brief, men en del af jobbet er allerede gjort automatisk for dig. + + + + +Tekstfilen med licensen + +Som et andet eksempel kunne du inkludere en eksplicit reference til licensteksten som du vil bruge i skabelonen. Brug variablen $LICENSEFILE$ til dette, og tilføj for eksempel følgende linje: + + +// Se $LICENSEFILE$ for den fuldstændige licenstekst. + +Programguiden erstatter $LICENSEFILE$ med navnet på filen hvor den fuldstændige licenstekst findes, nemlig: + +// Se COPYING for den fuldstændige licenstekst. + +for GPL-licensen, eller + +// Se LICENSE.BSD for den fuldstændige licenstekst. + +hvis du bestemmer dig for at bruge BSD-licensen for programmet. +Der er naturligvis flere variabler som &tdevelop; kender til. Se afsnittet Redigér skabelonerne i kapitlet Redigeringsværktøjer for at finde ud af hvad der er muligt. + + + + +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. + + + + + +Byg de oprindelige projektfiler + + + projekt + ny + byg + + projekt + oprindelig bygning + +Nu er næsten alt klart. På den sidste side i skabelonen, er knappen Næste > ændret så den nu lyder Afslut. +Tænk dig om inden du klikker på den! Du har stadigvæk mulighed for at undersøge alting ved at bruge knappen < Tilbage 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å &CVS;-arkivet 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). +Hvis du nogensinde ikke ønsker at det nye projekt skal bygges, så afbryd dialogen Opret nyt projekt med knappen Afbryd. Klik ellers på Afslut, og se i vinduet Meddelelser hvordan programguiden laver projektet. +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 Meddelelser med sit eget indhold. Hvis nogen fejl opstår i en af kørslerne, stopper processen og viser dig en tilsvarende fejlmeddelelse i vinduet. + +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.) + +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 templates i projektmappen. Nogle enkle kopieringshandlinger er oftest utilstrækkeligt. +Derefter er det tilrådeligt at du kompilerer det oprindelige projektet 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. + + + + + standard-byggeindstilling + advarsel + + byggeindstillinger + advarsel om standard-byggeindstilling + + advarsel + standard-byggeindstilling + + Inden du kompilerer det nye projekt første gang, kig så på Projekt Byggeindstilling. Hvis der er tre valgmuligheder som vises: default, optimized og debug, med debug markeret, så behold det endelig, eller brug optimized i stedet for. + På grund af visse begrænsninger i den nuværende indstilling af autoconf og automake, skal du under ingen omstændigheder bygge med indstillingen default. Det forstyrrer visse interne mappeindstillinger, og gør at configure klager når du senere forsøger at bruge den med byggeindstillingerne optimized eller debug. + (Dette gælder kun for disse flervalgsmuligheder. Hvis programtypen du valgte kun sørger for byggeindstillingen default, skal du naturligvis bruge den.) + + + + + + + +Indstilling af projekt + +(Endnu ikke skrevet ...) + + + + 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 @@ + +Klassesøgeren +klassesøgeren + +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. + + +Klassevisning + +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. + +
+Et skærmaftryk af klassesøgeren + + + +
+ +Klassevisningen arbejder i to forskellige tilstande. Normalt grupperes alle symboler i Klasser, Strukturer, Funktioner, Variabler og Navnerum. I den sammenhængsafhængige menu, kan du vælge Liste ifølge navnerum. 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. + +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 Fuldstændig rækkevidde for identifikatorer i den sammenhængsafhængige menu. + +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 Gå til deklaration i den sammenhængsafhængige menu. I den sammenhængsafhængige menu for klasser findes også valgmulighederne Tilføj metode... og Tilføj egenskab... De åbner dialoger hvor du kan oprette nye metoder og variabeldeklarationer for den relevante klasse, sammen med en tom implementering. + +
+ + + + +Klasseværktøjer + +Klasseværktøjsdialogen aktiveres ved at højreklikke på en klasse i klassevisningen og vælge Klasseværktøj.... + + + + + + +Klassehierarki + +(... endnu ikke skrevet ...) + + + +
+ + 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 @@ + + + + + + + Volker Paul +
erik@binghamton.edu
+
+ + 2005-04-03 +
+ +Kommandoreference + +Genvejstasterne som vises i dette kapitel er de standardmæssige. De kan ændres. + + + + +Menulinjen Bemærk at visse menupunkter kun vises når de passer ind. I særdeleshed er visse indgange knyttede til funktioner i plugin som kun er tilgængelige når pluginnet er aktiveret. + + + + + + + + + +<guimenu +>Fil</guimenu +>-menuen + + + + &Ctrl;N Fil Ny +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. + + + + &Ctrl;O Fil Åbn +Åbner en eksisterende fil med en enkel dialog. + + + + &Ctrl;O Fil Åbn nyligste +Viser en undermenu med filer som nyligst var åbne. At vælge en af dem gør at KDevelop åbner filen. + + + + &Alt;&Ctrl;O Fil Åbn hurtigt +Viser en liste med filer i det nuværende projekts kildekodemappe. Brugeren kan vælge fra listen eller indtaste et filnavn. Filen åbnes derefter. + + + + + &Ctrl;S Fil Gem +Gemmer nuværende fil. + + + + + &Ctrl;S Fil Gem som... +Bruger dialogen Gem som... for at lade dig gemme en kopi med et andet navn. + + + +Fil Gem alle +Gemmer alle åbne filer. + + + +F5 Fil Genindlæs +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.) + + + +Fil Nulstil alle +Nulstiller alle ændringer i åbnede filer. Spørger om du vil gemme ændringer så at nulstillingen kan afbrydes for hver ændret fil. + + + + + &Ctrl;P Fil Udskriv... +Udskriv. + + + +Fil Eksportér +Eksport + + + + + &Ctrl;F4 Fil Luk +Lukker denne fil. + + + + +Fil Luk alle +Lukker alle åbne filer. + + + + +Fil Luk alle andre +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. +Bemærk at der er en lignende kommando i menuen Vindue. + + + + + &Ctrl;Q Fil Afslut +Luk KDevelop. + + + + + + + + + + + + +<guimenu +>Redigér</guimenu +>-menuen + + + + + + + &Ctrl;Z Redigér Fortryd +Fortryd + + + + + &Ctrl;&Shift;Z Redigér Annullér fortryd +Annullér fortryd + + + + + &Ctrl;X Redigér Klip +Klip + + + + + &Ctrl;C Redigér Kopiér +Kopiér + + + + + &Ctrl;V Redigér Indsæt +Indsæt + + + + + &Ctrl;A Redigér Markér alt +Markér alle + + + + + &Ctrl;&Shift;A Redigér Afmarkér +Afmarkér + + + + + &Ctrl;&Shift;B Redigér Blokmarkeringstilstand +Blokmarkeringstilstand + + + + + Insert Redigér Overskrivningstilstand +Overskrivningstilstand + + + + + &Ctrl;F Redigér Søg +Find + + + + + F3 Redigér Find næste +Find næste + + + + + &Shift;F3 Redigér Find forrige +Find forrige + + + + + &Ctrl;R Redigér Erstat +Erstat + + + + + &Ctrl;G Redigér Gå til linje +Gå til linje + + + + + &Alt;&Ctrl;F Redigér Søg i filer +Find i filer + + + + + &Shift;R Redigér Søg-markér-erstat +Søg-markér-erstat + + + + +Redigér Reformatér kildekode +Reformatér kildekode + + + + + &Ctrl;J Redigér Ekspandér tekst +Udvid tekst + + + + + &Ctrl;L Redigér Ekspandér forkortelser +Udvid forkortelser + + + + + &Ctrl;Mellemrum Redigér Komplettér tekst +Fuldstændiggør tekst + + + + + F2 Redigér Opret medlem +Gør til medlem + + + + + + + + + + + + + + +<guimenu +>Vis</guimenu +>-menuen + + + +Vis Tilbage +Tilbage + + + + +Vis Fremad +Fremad + + + + + &Ctrl;/ Vis Skift til... +Skift til... + + + + + &Alt;C Vis Hæv editor +Hæv editor + + + + + F4 Vis Næste fejl +Næste fejl + + + + + &Shift;F4 Vis Foregående fejl +Forrige fejl + + + + + &Shift;F Vis Fuldskærmstilstand +Fuldskærmstilstand + + + + + &Ctrl;F12 Vis Skift til deklaration/implementering +Skifter mellem inkludering/implementering + + + + +Vis Værktøjsvisninger +Værktøjsvisninger + + + + +Vis Dokning af værktøj +Dokning af værktøj + + + + + F7 Vis Skift til kommandolinje +Skift til kommandolinje + + + + +Vis Schema +Farvesammensætning + + + + + F10 Vis Dynamisk linjebrud +Dynamiske linjebrud + + + + +Vis Dynamiske linjebrudmarkører +Dynamiske tekstombrydningsindikatorer + + + + +Vis Vis/Skjul statisk linjebrudsmarkør +Vis/Skjul statisk linjebrudsmarkør + + + + + F6 Vis Vis/Skjul ikonkant +Vis/Skjul ikonkant + + + + + F11 Vis Vis/Skjul linjenummer +Vis/Skjul linjenummer + + + + +Vis Vis/Skjul rullelistemarkeringer +Vis/Skjul rullelistemarkeringer + + + + + F9 Vis Vis/Skjul foldemarkører +Vis/Skjul foldemarkører + + + + +Vis Kodefoldning +Kodefoldning + + + + +Vis Sæt tegnsæt +Sæt tegnsæt + + + + + + + + + + + + + + + +Menuen <guimenu +>Projekt</guimenu +> + + + + +Projekt Nyt projekt... +Nyt projekt... + + + + +Projekt Åbn projekt... +Åbn projekt... + + + + +Projekt Åbn nyligste projekt +Åbn nyligt projekt + + + + +Projekt Aktivt sprog +Aktivt sprog + + + + +Projekt Importér eksisterende projekt... +Importér eksisterende projekt... + + + + +Projekt Ny klasse... +Ny klasse... + + + + +Projekt Arvediagram for klasser +Klasse arve-diagram + + + + +Projekt Tilføj oversættelse... +Tilføj oversættelse... + + + + +Projekt Byggeindstilling +Byggeindstilling + + + + +Projekt Distribution og publicering +Distribution og publicering + + + + +Projekt Projektindstillinger... +Projektindstillinger... + + + + +Projekt Luk projekt +Luk projekt + + + + + + + + + + + + + + +Menuen <guimenu +>Projekt</guimenu +> + + + + + F8 Byg Byg projekt +Byg projekt + + + + + F7 Byg Byg aktivt mål +Byg aktivt mål + + + + +Byg Kompilér fil +Kompilér fil + + + + +Byg Kør configure +Kør configure + + + + +Byg Kør automake og beslægtede programmer +Kør automake og beslægtede programmer + + + + +Byg Installér +Installér + + + + +Byg Installér (som systemadministrator) +Installér (som brugeren root) + + + + +Byg Ryd projekt +Rens projekt + + + + +Byg Distclean +DistClean + + + + + &Shift;F9 Byg Byg meddelelser og indflet +Byg meddelelser og flet ind + + + + +Byg Kør program +Udfør programmet + + + + +Byg Byg dokumentation af programgrænseflade +Byg API-dokumentation + + + + +Byg Ryd dokumentation af programgrænseflade +Ren API-dokumentation + + + + + Escape Byg Stop +Stop + + + + + + + + + + + + + + + +Menuen <guimenu +>Projekt</guimenu +> + + + + +Fejlsøg Start +Start + + + + +Fejlsøg Stop +Stop + + + + +Fejlsøg Afbryd +Interrupt + + + + +Fejlsøg Kør til markør +Kør til markør + + + + +Fejlsøg Træd hen forbi +Træd over + + + + +Fejlsøg Gå forbi instruktion +Gå forbi instruktion + + + + +Fejlsøg gå ind i +Træd ind i + + + + +Fejlsøg Gå ind i instruktion +Gå ind i instruktion + + + + +Fejlsøg Gå ud +Træd ud af + + + + +Fejlsøg Veksle stoppunkt +Slå stoppunkt til/fra + + + + +Fejlsøg Visere +Fremvisere + + + + +Fejlsøg Undersøg hukommelsesdump... +Undersøg core-fil... + + + + +Fejlsøg Knyt til process +Kobl til proces + + + + +Fejlsøg Valgrind kontrol af hukommelseslæk +Valgrind kontrol af hukommelseslæk + + + + +Fejlsøg Profilér med Kcachegrind +Profil med KCachegrind + + + + + + + + + + + + + + + + + + +<guimenu +>Bogmærker</guimenu +>-menuen + + + + + &Ctrl;B Bogmærker Tilføj bogmærke +Tilføjer aktuelt valg til dine bogmærker. + + + + +Bogmærker Ryd alle bogmærker +Ryd for alle bogmærken. + + + + + + + + + + + + +<guimenu +>Vindue</guimenu +> menuen + + + + + &Alt;W Vindue Luk markerede vinduer... +Luk markerede vinduer... + + + + &Ctrl;F4 Vindue Luk +Luk + + + + Vindue Luk alle +Luk alle + + + +Vindue Luk alle andre +Luk alle andre + + + + + + + + + + + + + + + + +<guimenu +>Værktøjs</guimenu +>menuen + + + +Værktøjer Skrivebeskyttet tilstand +Skrivebeskyttet tilstand + + + + +Værktøj Filtype +Filtype + + + + +Værktøj Farvelægning +Farvelægning + + + + +Værktøjer Linjeslut +Slut på linje + + + + +Værktøjer Stavning +Stavning + + + + + &Ctrl;I Værktøjer Indryk +Indryk + + + + + &Ctrl;&Shift;I Værktøj Afindentér +unindent + + + + +Værktøjer Ren indrykning +Ryd indentering + + + + + &Ctrl;Tab Værktøj Justér +Justér + + + + + &Ctrl;D Værktøjer Kommentar +Kommentar + + + + + &Ctrl;&Shift;D Værktøjer Fjern kommentar +Afkommentér + + + + + &Ctrl;U Værktøjer Store bogstaver +Store bogstaver + + + + + &Ctrl;&Shift;U Værktøjer Små bogstaver +Små bogstaver + + + + + &Alt;&Ctrl;U Værktøj Indledende store bogstaver +Lav om til store bogstaver + + + + + &Ctrl;J Værktøjer Forbind linjer +Forbind linjer + + + + +Værktøjer Tekstombryd dokument +Bryd linjer mellem ord i dokumentet + + + + +værktøj Visning af forskelle... +Visning af forskelle... + + + + +Værktøj Kør kommando... +Kør kommando... + + + + +Værktøj Filtrér markering gennem kommando... +Filtrerer markeringen gennem en ekstern kommando ved at bruge filterpluginnet. + + + + +Værktøj Fejlsøg regulært udtryk... +Fejlsøg regulært udtryk... + + + + +Værktøj Part-udforesker +Part-udforsker + + + + + &Alt;&Ctrl;C Værktøj Hurtigåbning af klasse... +Hurtig-åbn klasse... + + + + + &Alt;&Ctrl;M Værktøj Hurtigåbningsmetode... +Hurtig-åbn metode... + + + + + &Alt;&Ctrl;P Værktøj Forhåndsvis uddata fra Doxygen +Forhåndsvis Doxygen uddata + + + + + &Ctrl;&Shift;S Værktøj Dokumentér nuværende funktion +Dokumentér denne funktion + + + + + + + + + + + + + + + +<guimenu +>Opsætnings</guimenu +>menuen + + + + + + &Ctrl;M Opsætning Vis/Skjul menulinje +Vis/Skjul menulinjen. + + + +Opsætning Værktøjslinjer +Åbner en undermenu hvor du kan vælge at vise eller skjule de forskellige værktøjslinjer. + + + +Opsætning Vis statuslinje +Vis statuslinjen. + + + +Opsætning Indstil genveje... +Indstil genveje... + + + + +Opsætning Indstil værktøjslinjer... +Indstil værktøjslinjer... + + + + +Opsætning Indstil bekendtgørelser +Indstil bekendtgørelser... + + + + +Opsætning Indstil editoren... +Indstil editor... + + + + +Opsætning Indstil KDevelop... +Indstil KDevelop... + + + + + + + + + + + + + + +<guimenu +>Hjælpe</guimenu +>menuen + + + + +Hjælp Håndbog for KDevelop +Vis dette dokument. + + + + &Shift;F1 Hjælp Hvad er dette? +Tegner et spørgsmålstegn (?) ved siden af musemarkøren. At klikke på et objekt i et vindue såsom knappen Stop viser nu en kortfattet forklaring. + + + + +Hjælp Dagens vink +Dagens tip + + + + + &Alt;&Ctrl;I Hjælp Kig i dokumentationsindeks... +Kig i dokumentationsindeks... + + + + + &Alt;&Ctrl;S Hjælp Søg i dokumentationen... +Søg i dokumentationen... + + + + +Hjælp Manualside... +Manualside... + + + + +Hjælp Infoside... +Info-side... + + + + +Hjælp Rapportér fejl... +Rapportér problem. + + + +Hjælp Om KDevelop... +Vis en del kortfattet information om KDevelops versionsnummer, forfattere og licensaftale. + + + +Hjælp Om KDE... +Vis noget information om den udgave af &kde; du kører. + + + + + + + + + + + + + +
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 @@ + +Medvirkende + + +Bidrag + + + + Det oprindelige indhold af denne manual blev skrevet af Bernd Gehrmann bernd@tdevelop.org og Caleb Tennis caleb@aei-tech.com. + Sammendraget af &automanag; og Automake håndteringens operation kapitlerne blev skrevet af Ian Wadham, ianw@netspace.net.au). + + + + + + + + + + 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 @@ + +Brug af &CVS; +CVS +revisionskontrol + + +&CVS; basalt + +&CVS; er versionshåndteringssystemet som mange projekter med åben kildekode, inklusive &kde; — bruger. Det opbevarer al kildekode på et centralt sted, som kaldes arkivet. 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 låse filer som man skal arbejde med. Altså kan udvikling ske parallelt i stor udstrækning. + +Så snart en udvikler er færdig med en opgave, arkiverer 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. + +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. + +&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 Cervisia ( ) eller TkCVS (). Kun en lille del af &cvs; funktioner, som er vigtige i det daglige arbejde, kan bruges direkte i &tdevelop;. + +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 Open Source Development With CVS af Karl Fogel, som kan distribueres frit (undtagen de ikke-tekniske kapitler). Se . + + + + + + +&CVS;-kommandoer i &tdevelop; + +Følgende er tilgængeligt i filvisningernes sammenhængsafhængige menuer: + + + +Tilføj til arkivet + +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. + + + + +Fjern fra arkivet + +Forbereder en fil for at fjernes fra arkivet. Dette tager også filen væk fra det lokale filsystem, så brug funktionen med forsigtighed! + + + + +Opdatér + +Kører kommandoen cvs update 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 .cvsrc. + + + + +Arkivér + +Kører cvs commit 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. + + + + +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 sourceforge.net. En måde at komme rundt om problemet beskrives i Ofte stiles spørgsmål om CVS/SSH, som du finder i SourceForge-dokumentationen. + + + + + + +Bagved scenen + + +Hvad &CVS; gemmer i arbejdsmappen + +(... endnu ikke skrevet ...) + + + + + 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 @@ + +Fejlsøgergrænsefladen +fejlsøgere + +&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 gdb via en pipe. Fejlsøgeren kan startes på flere måder: + + + +Hovedprogrammet i projektet indlæses i fejlsøgeren med FejlsøgStart. + + + +Ved at bruge Fejlsøg Start (andet) Undersøg hukommelsesdump, 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 ulimit(1)). Dette er nyttigt for en post-mortem analyse af et program. + + + +Du starter fejlsøgeren for et program som allerede kører med FejlsøgStart (andet) Forbind til proces. En procesliste vises hvor du kan vælge processen som fejlsøgeren skal overtage. + + + +Bemærk at fejlsøgning kun er mulig hvis projektet er kompileret med fejlsøgningsinformation aktiveret. Den kan aktiveres i dialogen Oversætterindstillinger. 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. + + + +Grænsefladen til fejlsøgeren tilbyder flere visninger ind i processen: + +Hvis du forsøger at fejlsøge et projekt uden fejlsøgningsinformation, får du meddelelsen Ingen kildekode... i statuslinjen. Hvis du forsøger at sætte stoppunkter, vises de som Hvilende (tilføj) i stoppunktsvinduet (se nedenfor). + + + +Variabler + +overvågningsvariabler +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 main(). + +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 Tilføj eller trykke på returtasten når punktet Overvåg er markeret. Variablerne kan fjernes igen med den sammenhængsafhængige menuen. + + + + +Rammestak + +rammestak +(... endnu ikke skrevet ...) + + + + +Stoppunkter + +stoppunkter +Vinduet lader dig se og behandle stoppunkterne. Husk at &tdevelop; bruger GDB, så for at forstå &tdevelop;s fejlsøgningsfunktioner fuldstændigt, skal du vide en lille smule om GDB. + +Hvis du vil kigge på kildekoden, defineres stoppunkter i tdevelop/languages/cpp/debugger/breakpoint.h. + +I venstre kant har vinduet knapper for at: + + +Tilføj et tomt breakpoint +Redigér det markerede stoppunkt + Sletter det valgte breakpoint +Fjern alle breakpoints + + +Hoveddelen af vinduet er en tabel med syv søjler. Hver linje i tabellen er et stoppunkt. Søjlerne er: + + +Markeringsafkrydsningsfelt +Type: en af: Ugyldig, Fil:Linje, Overvågningspunkt, Adresse, Funktion +Status. Værdierne er: + + Aktiv + Deaktiveret: Hvert stoppunkt kan aktiveres eller deaktiveres. Hvis det er deaktiveret har det ingen effekt på programmet indtil det aktiveres igen. + Hvilende (tilføj): En stoppunkt er markeret sådan her hvis ingen fejlsøgningsinformation er tilgængelig. Fra GDB's informationsside:
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 hvilende stoppunkt) som forsøger at løse sig selv op i fremtiden når et passende delt bibliotek indlæses.
+
+
+Hvilende (rydning) +Hvilende (ændring) +Sted på formatet filnavn:linjenummer +Betingelse +Ignorér antal: Hvis det er et tal ANTAL større end nul, stoppes programmets kørsel ikke før følgende ANTAL gange som stoppunktet nås. Udover at mindske antallet at ignorere, udfører gdb ingen handling. +Træffere: Regner ud hvor mange gange et stoppunkt er truffet. +
+ + +
+
+ + +Vis assemblerkode + +vis assemblerkode +(... endnu ikke skrevet ...) + + + +
+ + + +Sæt stoppunkter + +(... endnu ikke skrevet ...) + + + + + + +Tilvalg + + + +Vis behandlede navne + +navnebehandling +behandlingnavn + +Funktionsnavne i det kørbare program er behandlede 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. + +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. + + + + +Forsøg at sætte stoppunkter når biblioteker indlæses + +dovne stoppunkter +stoppunkterdoven + +Fejlsøgerens baggrundsprogram gdb 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 dlopen(3)), 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 gdb fortæller at et bibliotek er indlæst, forsøger &tdevelop; at sætte de hvilende stoppunkter. + + + + +Aktivér flydende værktøjslinje + +fejlsøgningsværktøjslinje +værktøjslinjefejlsøger + +(... endnu ikke skrevet ...) + + + + + + +
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 @@ + +Dokumentation + +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. + +Dokumentation har flere aspekter. Der er + intern projektdokumentation, som hovedsageligt består af + kommentarer i deklarationsfiler og kildekodefiler + Intern dokumentation af programmeringsgrænsefladen for projektet, som er lavet ud fra programfilerne af særlige værktøjer, f.eks. &doxygen; + + + ekstern projektdokumentation, som blandt andet består af + ekstern dokumentation af programmeringsgrænseflade, for eksempel for fælles systembiblioteker (&kde;, &Qt;, etc.) + al øvrig dokumentation (manualer for programmeringssprog, almen systeminformation, vejledninger og lignende) + + + + +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. + + + + +Dokumentationssøgeren + + +
+Et skærmaftryk af dokumentationstræet + + + +
+ +
+ +
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 @@ + +Redigeringsværktøjer + + +Kodestumper + + + Funktioner (foreløbigt overblik) + SnippetPart tilføjer en værktøjsvisning der som standard dokker til højre + Tilføjelse, redigering og fjernelse af stumper er tilgængelig via en popop-menu + Dobbeltklik på en kodestump fra listen indsætter den i den aktive visning ved markørens nuværende position + Værktøjsvink viser indholdet af en kodestump + Kodestumper opbevares i brugerens hjemmemappe, så hver bruger kan have sine egne kodestumper + Kodestumper kan indeholde variabler på formen $VARNAVN$. Når kodestumpren bruges, spørges brugeren om erstatningsværdier for variablerne + + + + +Tastebrug +tastebindinger + +I det følgende giver vi en liste af normale tastebindninger for standardeditoren. Du kan indstille dem som du vil (hvordan det?). + + + + + +Venstre +Flytter et tegn til venstre + +Højre +Flytter et tegn til højre + +&Ctrl; Venstre +Flytter et ord til venstre + +&Ctrl; Højre +Flytter et ord til højre + +Op +Flytter en linje op + +Ned +Flytter en linje ned + +Page Up +Flytter en side op + +Page Down +Flytter en side ned + +&Ctrl; Page Up +Går til begyndelsen af filen + +&Ctrl; Page Down +Går til slutningen af filen + +Hjem +Går til begyndelsen af linjen + +End +Går til slutningen af linjen + + + + + +For alle tasterne ovenfor, kan shift-tasten desuden trykkes ned, for at markere tekst fra markørens nuværende position til den nye. + + + + + +Backspace +Sletter et tegn til venstre + +Slet +Sletter tegnet under markøren + +&Ctrl; C +Kopierer den valgte tekst til klippebordet + +&Ctrl; V +Indsætter den markerede tekst fra klippebordet + +&Ctrl; X +Sletter den markerede tekst og lægger den på klippebordet + +&Ctrl; Z +Fortryd + +&Shift;&Ctrl; Z +Annullér fortryd + + + + + + + + + + +Problemrapporter + +(... endnu ikke skrevet ...) + + + + + +Søgning og flerfilssøgning +søgning +find + + +Søg efter tekst + +CtrlF- Søg, CtrlR- Erstat + + + + + +I-søgning +i-søg +inkrementel søgning +søginkrementel + +Den almindelige søgning med RedigérSøg 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 I-søg 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. + + + + + +Grep +søgi filer + +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 Søg i filer... i menuen Redigér. Det er blot en grænseflade til programmet &grep;(1). + +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 Rekursiv, går søgningen gennem alle mapper i hierarkiet under den angivne. + +Søgebegrebet er generelt et regulært udtryk som følger POSIX-syntaksen. Du kan for eksempel bruge begrebet "\<K.*", hvis du vil finde alle ord som begynder med bogstavet K. Følgende tegn tolkes på en særlig måde: + + + + + + + . +Matcher alle tegn + + ^ +Matcher begyndelsen af en linje + + $ +Matcher slutningen af en linje + + \< +Matcher begyndelsen af et ord + + \> +Matcher slutningen af et ord + + ? +Matcher foregående punkt mindre end en gang + + * +Matcher det foregående punkt nul eller eller flere gange + + + +Matcher det foregående punkt en eller flere gange + + {n} +Matcher det foregående punkt nøjagtigt n gange + + {n,} +Matcher det foregående punkt n eller flere gange + + {,n} +Matcher foregående punkt mindre end n gange + + {n,m} +Matcher foregående punkt mindst n gange, men færre end m gange + + + + + +Tilbagereferencer til deludtryk indeni parenteser er også tilgængelige med notationen \n. + +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. + +Når du har startet søgningen ved at klikke på knappen Søg, udføres den af en ydre, asynkron proces. Alle punkter som findes, ses i visningen som hedder Grep. 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. + + + + + + + + +Kodekomplettering + +(... endnu ikke skrevet ...) + + + + + +Opret nye filer og klasser + +(... endnu ikke skrevet ...) + + +Redigér skabelonerne + +(... endnu ikke skrevet ...) + + + + + + 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 @@ + +Filsøgerne + +På venstre side i hovedvinduet, kan &tdevelop; vise forskellige slags lister og træer til at vælge filer: + + + +Filtræ + +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. + +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. + +Filtræet skjuler filer som sædvanligvis ikke er interessante, såsom objektfiler. I Projekttilvalg under Filvisninger, kan du indstille hvilke mønstre som bruges til at bortfiltrere uinteressante filer (som en liste med jokertegn, adskilte med kommategn). + +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. + +
+Et skærmaftryk af filtræet + + +Et skærmaftryk af filtræet + +
+ +
+
+ +Filgrupper + +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. + +Grupperne som vises her kan indstilles under Filvisninger i dialogen Projektindstillinger. 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 Øvrige være det sidste mønster. + + + +
+ +
+ + 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 @@ + + + + + + + +BerndPol +&erik.kjaer.pedersen.role; + + + +Kom i gang med &tdevelop; — en guided tur + +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ø. + +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å: + + +Et første kig: Elementer i brugergrænsefladen for det integrerede udviklingsmiljø &tdevelop;. +Udfør visse indledende indstillinger. +Hvordan man opretter et nyt projekt. + +Nogle vink om hvordan man håndterer dokumenter. +Hvordan man kompilerer programmet i dette projekt. +Hvordan man tilføjer klasser og andre ting til projektet. +Hvad man skal gøre for at fejlsøge programmet. +Nogle grundlæggende værktøjer for at bygge program eller brugerdokumentation. +Sidst men ikke mindst, genvejstaster + + +Inden vi begynder, skal et vigtigt begreb klargøres. + + +Hvad kan man forvente sig? +Som sagt er &tdevelop; et integreret udviklingsmiljø. 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. + + +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. + +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 Udvikling på &UNIX;, i særdeleshed kapitlet Integration af begreber og værktøjer. + + +Følgende beskrivelse gælder normaltilfældet, hvor &tdevelop; starter med Forenklet IDEA-vinduestilstand. 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 Opsætning Indstil KDevelop... Brugergrænseflade. + + + +Et første kig på &tdevelop; + +Her handler det kun om det du ser når du først starter &tdevelop;. Du finder preliminær information om: + + +Hvad er det som ses på fladen? +Hvordan man får hjælp. +Hvad findes i menuerne? +Hvad er værktøjsvisningerne til for? + + + +På overfladen + +Når du starter &tdevelop; for første gang får du noget at se der ligner det her: + + + + + + + +&tdevelop;s udseende ved første opstart. +(I virkeligheden er &tdevelop;s oprindelige vindue større, men elementerne du ser er de samme.) + + + + + +Arbejdsområde og værktøjsvisnings-faneblade. +I denne førstegangstilstand bruger &tdevelop; den såkaldte IDEAl -brugergrænseflade. 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 værktøjsvisning i et vindue så du kan arbejde på en bestemt opgave. + + + +Menuer og værktøjslinjer +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. + + + +Statuslinje +Til sidst er der en statuslinje i bunden af vinduet, der viser kort information om flere forskellige opgaver. + + + + +Sådan får du hjælp + +Udover Hjælpemenuen der har svar på specifikke spørgsmål, sørger statuslinjen og to slags værktøjsvink for hurtig information. + + +Hvad gør denne menuindgang? +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. + + + +Hvad hedder dette element. +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. + + + +Hvad gør denne her? +Man kan få mere information gennem udvidede værktøjsvink for mange elementer i udviklingsmiljøet. Vælg Hjælp Hvad er dette? eller tryk på &Shift;F1 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. + + + + +Hvad er der i menuerne? + +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. + + +Dette er kun en oversigt. For en detaljeret beskrivelse af menuerne, se Kommandoreferencen. + + + + +Fil + + +Almindelige handlinger +Dette er ret grundlæggende. Det lader dig oprette, åbne, gemme, udskrive og lukke dokumentfiler, såvel som afslutte &tdevelop;-programmet som normalt. + + + +Nulstil alt +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. + + + + + +Redigér + +Denne menu er brugbar hvis kun et dokument er åbnet. + + +Almindelige handlinger +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. + + + +Søg og erstat +Der er to meget kraftfulde søgefunktioner tilgængelige, Redigér Søg i filer og Redigér Søg-vælg-erstat.... 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. + + + +Avanceret tekstredigering +Der er mulighed for at reformatere det aktuelle dokument og automatisk fuldstændiggøre delvist indtastet tekst på forskellige måder. + + + + + +Vis + +Ligesom menuen Redigér, er denne menu kun nyttig hvis et projekt er åbent. I dette tilfælde er (bland andet) følgende tilvalg tilgængelige: + + +Navigeringshistorik +Skift mellem dokumenterne &etc; du har besøgt. + + + +Fejlsporing +Navigér til linjerne i kildekoden hvor fejlene i den seneste oversættelse skete. + + + +Editor-relaterede handlinger +Nogle indgane i Vis-menuen kontrollerer editorens udseende. Når der er tale om &kate;-parten (Embedded Advanced Text Editor) er følgende kontroller til rådighed: + + + + +Kontrollér opførsel af linjeombrydning i dokumentvinduet. + + +Vis eller skjul forskellige visninger i kanten af dokumentvinduet. linjenumre, ikoner og desuden bogmærker i rullebjælken. + + +Kontrollér visningen af foldede sektioner (midlertidigt skjult) i kildekode. + + + + + + +Projekt + +Al arbejde i &tdevelop; er baseret på projekter 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: + + +Åbn et projekt +Tillader dig at oprette nye projekter, åbne eksisterende og importere projekter fra andre miljøer. + + + +Projektindstillinger +Tillader dig at definere en hel masse forskellige projektegenskaber. + + + +Klassehåndtering +Tilføj nye klasser til projektet og få overblik over klassers arv-sammenhæng. + + + +Distribuér projekt +Hjælper dig med at bygge distributionspakker af projektet. + + + + + +Byg + +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: + + +Oversæt, link, kør +Lader dig oversætte og linke hele projektet eller dele af det, såvel som køre programmet i udviklingsmiljøet. + + + +Forbered bygge-operationer +Dette afhænger faktisk af make-systemet du benytter til dette projekt. Når der er talte om automake-projekter, kan du køre Makefile.cvs og configure for sig selv. Der er også mulighed for, i forskellig udstrækning, at fjerne oversatte filer fra projektet. + + + +Installér programmet +Lader dig installerere programmet i lokale kataloger, men også i system-kataloger hvortil kun root har adgang. + + + +API-dokumentation +Byg eller eller fjern doxygen-baseret API-dokumentation fra projektet som defineret i projektindstillingerne. + + + + + +Fejlsøg + +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 Projekt Projektindstillinger.... Dermed er følgende handlinger til rådighed: + + +Almindelige fejlsøgerhandlinger +Første sektion i Fejlsøg-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. + + + +Stoppunkter +&tdevelop; lader dig sætte stoppunkter i dit programs kildekode på flere måder. En af dem er at bruge Slå stoppunkt til/fra-menupunktet. + + + +Avanceret fejlsøgning +Andre Fejlsøg-menuindgange tillader mere sofistikeret programanalyse. Brug &Shift;F1 for at få mere information om deres formål. + + + + + +Scripter + +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. + + + + +Vindue + +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. + +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. + + + + +Værktøjer + +&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 Værktøjer afspejler det meste af disse mulige indstillinger. + + +Avanceret redigering +Den øvre del af Værktøjer-menuindgangene sørges der for af det valgte editor-plugin. Du kan vælge din favorit-editor gennem Opsætning Indstil KDevelop... Editor Så snart et redigerbart dokumenter markeret, vil den øvre del af Værktøjer-menuen sørge for avancerede redigeringskommandoer, specifik for den aktuelle editor. + + + +Webside-håndtering +Hvis det aktive dokumentvindue indeholder en HTML-side, (⪚ vist fra udvalget i Dokumentation, vil Værktøjer vise ekstra menuindgange som giver diverse måder at håndtere websiden på. + + + +Andre værktøjer +Sædvanligvis er der en mængde andre indgange ifølge de værktøjer som for øjeblikket er tilgængelige. Brug &Shift; F1 for at få mere information om deres formål. + + + + + +Opsætning + +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. + + + + +Hjælp + +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. + + + + + + +Hvad er de der værktøjsvisningerne til for? + +Med brugergrænsefladen IDEA-vinduetilstand omgives arbejdsfladen af tre linjer med knapper, såkaldte værktøjsvisningsfaneblade. De gør at man kan få adgang til værktøjsvisningsvinduer som løser vigtige opgaver under programmeludviklingen. Hver af disse tre linjer værktøjsvisninger tjener forskellige hovedformål. + + + + +Venstre side +Giver mulighed for adgang til værktøjer for navigering og udvalg. + + + + + +Underkanten +Disse visninger viser meddelelser som skabes af forskellige værktøjer. + + + + + +Højre side +Giver mulighed for adgang til dokumentation og værktøjer for kildekodehåndtering. + + + + +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 plugin-værktøjer som for øjeblikket er tilgængelige i &tdevelop;. Du finder mere om dette emne i kapitlet Indstil KDevelop. + +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. + + + +Navigering og udvalg + + +Filvælger +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. + + + +Filliste +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 sessioner. 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. + + + + + +Visning af meddelelser + + +Program +Viser uddata fra et program som startes indefra &tdevelop;. + + + +Diff +Bruges til at vise indholdet i filer med programrettelser. Viser uddata fra værktøjet for visning af forskelle, som startes fra menuen Værktøjer Visning af forskelle.... + + + +Meddelelser +Viser meddelelser som skabes af byggeværktøjerne som kaldes indefra &tdevelop;, oftest fra menuen Byg. + + + +Søg i filer +Viser listen med punkter som findes af den generelle søgefunktion som startes fra menuen Redigér Søg i filer.... Ved at klikke på en linje her, åbnes filen automatisk på angivet position i et redigeringsvindue. + + + +Erstat +Lister resultat af den generelle søge- og erstatningsfunktionen som startes fra menuen Redigér Søg-vælg-erstat.... I denne visning kan du for hvert fundet punkt bestemme dig for om du virkelig vil erstatte det eller ikke. + + +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 Redigér Søg-vælg-erstat ikke aktiveret. + + + +Konsol +Åbner et terminalemuleringsvindue som ligner Konsole i &kde; hvor du kan bruge tastaturkommandoer med en traditionelt &UNIX; kommandoradsgrænseflade. + + + + + +Dokumentation og kildekodehåndtering + + +Dokumentation +&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;. + + +Se kapitlerne Dokumentation og Indstil dokumentationen for mere information. + + +Kodestumper +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. + +Mere information om dette er tilgængelig i kapitlerne Kodestumper og Indstil værktøjet for kodestumper. + + + + + + + +Nogle indstillinger + +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. + + +Hvis du vil vide mere om indstilling af &tdevelop;, så kig i kapitlet Indstil KDevelop. + + + +Nogle generelle indstillinger + +Klik på menuen Opsætning for at indstille &tdevelop; og vælg Indstil KDevelop.... Dialogen Indstil KDevelop dukker op, og viser følgende indstillingsside, Generelt, til højre. + + + + + + + +Den generelle indstillingsdialog i &tdevelop; + + + + +De fleste standardindstillinger er o.k., men to af indstillingerne vil du måske ændre. + + +Standardprojektmappe +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 Åbn fildialog markeret med en mappeikon, til højre for tekstfeltet. + + +I vort eksempel antager vi (i mangel på bedre) en brugere som kaldes udvikler. Erstat derfor altid udvikler med dit brugernavn. Vor udvikler udnytter hovedmappen /home/udvikler/projekt til selve udviklingen. Igen, erstat projekt med navnet på din udviklingsmappe. + +&tdevelop; laver normalt en egen undermappe under hovedmappen for hvert nyt projekt du laver. Alle filer i et projekt som for eksempel hedder Hello kommer i vort tilfælde til at blive placeret i mappen /home/udvikler/projekt/hello. + +Du kan naturligvis midlertidigt sætte disse mappeindstillinger ud af kraft hvis du behøver det. Se kapitlet Programguide for mere information om dette. + + +Oversætteruddata +Så snart &tdevelop; kompilerer noget kildekode, vises meddelelser fra byggeværktøjerne, såsom make, i vinduet Meddelelser 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. + + +Afhængig af hvilken version af &tdevelop; du bruger, kan indstillingen Oversætteruddata være forudindstillet til fuldstændig, hvilket gør at alt indhold i meddelelser vises i sin helhed. Du vil nok ændre dette til den meget mere praktiske indstillingen meget kort. Vælg den blot i dropned-feltet. + + +Vær klart over at kun den mest grundlæggende information vises i vinduet Meddelelser 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 Meddelelser og vælg f.eks. Fuldstændig oversætteruddata i den sammenhængsafhængige menuen. + + + + +Initiér søgeindeks for dokumentation + +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;. + +Åbn værktøjsvisningen Dokumentation i højre side i &tdevelop;s hovedvindue. Åbn dialogsiden Søg. + + + + + + +Hvor skal søgeindeks skabes. + + + +Klik nu på knappen Opdatér indstilling for at sikre dig at de grundlæggende søgeværktøjer er rigtigt indstillede. En dialog skal dukke op, som siger Configuration file updated. Klik på O.k. for at lukke den. + +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 Opdatér indeks til højre. Nu dukker dialogen Opretter søgeindeks op, og viser forløbet når indekset skabes. + + + + + + +&tdevelop; laver søgeindeks for dokumentation. + + + +Det tager en vis tid afhængig af dokumentationens størrelse og computerens ydelse. Men til sidst ændres knappen Annullér til O.k. Klik så på knappen for at fortsætte. + + + + +Det bør normalt fungere direkte, men i visse tilfælde er programmet htdig som &tdevelop; bruger til at udføre fuldtekstsøgning måske ikke rigtigt indstillet. Kig i kapitlet Indstilling af indeks for tekstsøgning for mere hjælp i dette tilfælde. + + +For at kunne slå specifik information op om &kde;'s og &Qt;'s programmeringsgrænseflade, kræves at KDELibs Apidocs fandtes da &tdevelop; blev installeret. Hvis du har problemer med at oprette indeks eller udføre eksemplerne med opslag af identifikator senere i kapitlet, så sørg for at dokumentationen findes og at &tdevelop; kan komme til den. Se Installér KDevelop for mere information. + + + + + + + + +Start et nyt projekt + +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 projekter. Derfor er det første praktiske skridt for at udvikle programmel i &tdevelop; oftest at oprette et nyt projekt. + +Heldigvis er det ganske let at opnå dette. &tdevelop; sørger for værktøjet Programguide for at gøre det. (Se kapitlet Kom i gang: Programguiden for mere information.) + +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å: + + +Hvordan man laver et nyt projekt ved hjælp af programguiden. +Hvilke filer som programguiden oprettede fra begyndelsen. +Hvad som gælder for de yderligere værktøjsvisninger som vises sammen med projektet? + + + +Hvordan man laver et nyt projekt + +Lad os oprette et ganske enkelt &kde;-projekt, Hello World. Udfør blot følgende skridt: + + + +Klik på menupunktet Projekt Nyt projekt... for at starte programguiden. + + + +Dialogen Opret nyt projekt dukker op. I vinduet længst oppe til venstre, Alle projekter, findes et antal programsprog listede. + + + +Vi vil bygge et sædvanligt &kde;-program i C++. Klik derfor på knappen + til venstre for C++ for at vise indholdet. + + + +Et sæt mulige programtyper vises. Vi skal bygge et &kde;-program, og viser derfor næste underniveau via knappen + ud for KDE. + + + +Nu tilbydes du et antal mulige projektskabeloner. Gå til begyndelsen af listen og klik på Simpelt KDE-program. + +En forhåndsvisning og kort beskrivelse af programmet som projektskabelonen vil oprette dukker op i de to vinduer til højre. + + + + + + + +Vælg projektskabelonen Hello World + + + + + +Vort program behøver et navn. Find feltet Egenskaber længst nede i dialogen og skriv et passende navn i indtastningsfeltet Programnavn. + +Vi bruger Hello 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. + + + +Sørg for at tekstfeltet Sted under indtastningsfeltet viser navnet på hovedmappen for projekter, som vi indstillede i kapitlet Nogle indstillinger 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. + +Hvis alt gik godt, viser linjen Endeligt sted mappesøgestien som det nye projekt vil bruge. Hvis suffikset (ugyldig) er tillagt, så prøv med et andet navn på projektet og/eller sørg for at hovedmappen for projekter i tekstfeltet Sted virkelig findes og er skrivbar. + + + +Når alting er rigtigt, aktiveres knappen Næste på linjen længst nede i dialogen. Klik på den for at fortsætte. + + + + + +Dette fører dig til dialogsiden Projektindstillinger. Sørg for dig at tekstfelterne Forfatter og E-mail er rigtigt udfyldte. Oftest er de forudindstillede til de generelle brugerindstillinger i &kde; som angives i dialogen Kodeord og brugerkonto i &kde;'s kontrolcenter. Hvis de ikke er det, ændres de til værdier som du foretrækker for programmet. + + + + + + + +Angiv dit navn og (valgfrit) e-mail-adresse. + + + + + +Du skal i det mindste angive navn for Forfatter. Det kræves for indstilling af programmets filer. + + +Hvis alt er rigtigt, er knappen Næste aktiveret. Klik på den for at gå videre. + + + +Følgende dialogsider, Versionskontrolsystem, Skabelon for .h-filer og Skabelon for .cpp-filer, er ikke interessante for øjeblikket. Spring over dem ved at klikke på knappen Næste, og til sidst knappen Afslut. + + + +Det var alt! Programguiden tager over og laver et sæt oprindelige filer i mappen Endeligt sted du sørgede for i skridt 2c ovenfor. + +Når fasen at oprette filer er færdig, åbner &tdevelop; et redigeringsvindue med implementeringsfilen for programmets hovedvindue (som er hello.cpp i vort eksempel), så du nemt kan gå videre. + + + +Oprindelige projektfiler + +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 Filtræ længst nede til venstre. Dette åbner en filliste som ligner den nedenfor. + + + + + + + +Oprindelige filer i projektet Hello World + + + + +For at forevise de væsentligste filer som programguiden oprettede, viser vi de fleste mappegrene i værktøjsvisningen Filtræ til venstre. Klik blot på grenenes navn i træet for at se selv. + +Desuden, kun for demonstrationsformål, viser vi også de fleste grene i værktøjsvisningen Håndtering af automake til højre, hvor nogle af projektets kildefiler også listes. + + +Anmærkninger om ophavsret + +Alle programmer som opfylder kravene ifølge &GNU; skal have en ophavsret. Der er to niveauer hvor ophavsret kræves, i individuelle kildekodefiler og ved programkørsel. Programguiden har allerede tilføjet passende ophavsret- og licensinformation i projektfiler. + + +Ophavsret på kildekodeniveau +Husker du dialogsiden Projektindstillinger 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 hello.cpp som for øjeblikket vises på arbejdsfladen. Programguiden skrev denne tekst ind længst oppe i licenshovedet for hver kildekodefil som blev oprettet. + + +/*************************************************************************** + * Copyright (C) 2006 by Dit Navn * + * dit.navn@adresse.se * + * * + * This program is free software; you can redistribute it and/or modify * + + +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 templates. + + +Ophavsret når programmet køres +Når &kde;-programmet kører, kan brugeren vise data Om programmet, oftest via menuen Hjælp. Programguiden sørgede også for dette. Hvis du tager et kig i filen main.cpp finder du en indgang som ligner den nedenfor. + + +int main(int argc, char **argv) +{ + KAboutData about("hello", I18N_NOOP("Hello"), version, description, + KAboutData::License_GPL, "(C) 2006 Dit Navn", 0, 0, + "dit.navn@adresse.dk"); + about.addAuthor( "Dit Navn", 0, "dit.navn@adresse.dk" ); + + +Dette tilføjer hovedudviklerens navn (Dit Navn i vort tilfælde) og din e-mail-adresse på ophavsretssiden Om når den vises, og desuden angives navn og adresse på siden Forfattere. + + +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. + + + + +Oprindelige kildekodefiler + +Programguiden placerede kildekodefiler i undermappen src i projektets mappe. Du finder filerne main.cpp, hello.h og hello.cpp der, som du måske forventede dig. + +Der er yderligere nogle filer som du ofte finder i et typisk &kde;-program, nærmere bestemt: + + + +hello.desktop indeholder en del metadata som &tdevelop; bruger til at håndtere og starte programmet. + + + +hi16-app-hello.png og hi32-app-hello.png indeholder nogle oprindelige standardikoner, som &tdevelop; bruger til at vise programmet. + + + +Tilsidst, indeholder helloui.rc en beskrivelse af programmets brugergrænseflade, for øjeblikket menuerne som programmet sørger for. + + + + + +Oprindelig programdokumentation + +I projektets undermappe doc/en finder du filen index.docbook. Det er en standardskabelon som kan være et udgangspunkt for at begynde skrive passende brugerdokumentation. + + + +Projektfiler og andre filer + +Du har sikkert bemærket at filerne vi hidtil har introduceret angives med fed type i værktøjsvisningen Filtræ, 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 projektfiler. + +Hvis du tager et kig på det nederste vindue i Håndtering af automake 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. + +De andre filer uden fed type er mere af støttenatur. De tilhører flere særpræglede klasser, som følger: + + + + +Byggehåndtering af projekt +Disse filer styrer processer for kompilering, installation, oprettelse af dokumentation, osv. Hvis projektet bruger &GNU; autotools, som vort eksempel, finder du filen Makefile.am i hver projektmappe. De er en slags grundlæggende kernefiler for at bygge projektet, som indeholder styrekommandoer, og som behandles sammen med diverse configure-filer under byggeetaperne. En sådan byggeproces laver endelig Makefile i hver mappe. Ud fra disse bygger værktøjet make endelig programmets binære filer. + + +Makefile.am-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 Makefile.am-filerne. + +Andre filer som styrer projektets byggeproces som for øjeblikket listes er configure.in.in og subdirs i projektets rodmappe. De behandles af nogle af filerne i den &kde;-specifikke administrationsmappe admin for at oprette flere filer af typen configure og Makefile, og endelig programmets binære filer. + + + + +Administrationsfiler for &tdevelop; +&tdevelop; behøver nogle egne håndterings- og administrationsdata. Disse er placeret i projektets rodmappe, i vort eksempel hello.tdevelop, hello.tdevelop.pcs, og hello.kdevses. + + +Filen xxx.tdevelop (hvor xxx angiver projektnavnet) er særligt vigtig. Den er hoved-projektfilen i KDevelop 3, og behøves hvis du senere vil indlæse projektet i det integrerede udviklingsmiljø. + + +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. + + + + + +Filer for projektbeskrivelse ifølge GNU +Nogle filer i projektets rodmappe kræves for alle programmer som opfylder kravene ifølge &GNU;. De er AUTHORS, ChangeLog, INSTALL, COPYING (som indeholder GNU GENERAL PUBLIC LICENSE), INSTALL, NEWS, README og TODO. + + + + + +Andre filer +Nogle andre filer som endnu ikke nævnt er: + + + + +Doxyfile styrer hvordan den projektspecifikke dokumentation af den interne programmeringsgrænseflade skabes. + + + +Kataloget templates 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. + +Du vil måske justere asteriskerne til højre på linjerne med ophavsret som programguiden indsatte i skabelonfilerne for cpp og h, sådan at kildekodefilerne som skabes med dem ser mindre mærkværdige ud. + + + +Kataloget po bruges i oversættelsesformål. Det er i det væsentlige en del af projektfilerne (indeholder Makefile.am), men kommer i hovedsagen til at blive brugt ved behandling af oversættelser. Det er imidlertid ikke så interessant for programudvikleren. + + + +Tilsidst kræves mappen admin 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. + + + + + + + + + +Yderligere værktøjsvisninger + +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: + + +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 Plugin-værktøj for instruktioner. + + + +Navigerings- og udvalgsværktøjer (venstre side) + + + + +Bogmærker +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 bogmærker, også selvom du senere lukker redigeringsvinduet. Værktøjsvisningen Bogmærker 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. + + + + + +Klasser +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. + + + + + +Filgrupper +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). + + + + + +Variabler +Bruges af fejlsøgningsværktøjet til at vise, evaluere og overvåge variabler når fejlsøgeren køres. + + + + + + +Meddelelser (længst nede) + + + + +Valgrind +Valgrind 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. + + + + + +Sikkerhedsproblemer +Der er et plugin-værktøj i &tdevelop; for sikkerhedskontrol. 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. + + + + + +Stoppunkter +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. + + + + + +Ctags +Gør det muligt at oprette databaser med indeks af identifikatorer med det populære program Ctags. 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. + + + + + +Problemer +&tdevelop; holder styr på sædvanlige programmeringsproblemer i kildekodefilen som for øjeblikket redigeres, og underretter brugeren om dem i værktøjsvisningens vindue. + + + + + + +Kildekodehåndtering (højre side) + + + + +Håndtering af automake +Værktøjet Håndtering af automake er basalt set en grafisk grænseflade for at håndtere indholdet i Makefile.am-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 projektfiler. Hver undermappe af denne type skal indeholde en Makefile.am-fil, og kaldes et delprojekt i sammenhæng med Håndtering af automake. + + +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 Makefile.am for dette delprojekt. + +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 nedenfor. Se kapitlet Bygge- og projekthåndtering for en udførligere beskrivelse. + + + + + + + + +Nogle vink om hvordan man håndterer dokumenter + +I vort eksempelprojekt efterlod programguiden filen hello.cpp å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: + + +Hvordan man enkelt skifter mellem deklarationsfiler og implementeringsfiler. +Hvordan man hurtigt kommer til deklarationer og definitioner. +Hvordan man omarrangerer redigeringsvinduer efter nuværende behov. +Hvordan man holder et øje med sædvanlige problemer. + + + +Skift mellem deklarationsfiler og implementeringsfiler + +&tdevelop; sørger for en hurtig og enkel måde at skifte fra en given implementeringsfil (.cpp) til tilsvarende deklarationsfil (.h) og vice versa. Højreklik blot på redigeringsvinduet du vil skifte. En menu som ligner den følgende dukker op. + + + + + + +Hvordan man skifter mellem implementeringsfiler og deklarationsfiler. + + + +Find indgangen Skift til deklaration/implementation 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 hello.cpp, vises filen hello.h og markøren placeres der. + +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. + +Hvis redigeringsvinduet med filen at skifte til allerede findes, aktiverer &tdevelop; naturligvis det og placerer markøren i det hvis det behøves. + + + +Hvordan man kommer til deklarationer og definitioner + +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. + +Der er imidlertid to forskellige tilfælde at tage hensyn til, nemlig: + +Få adgang til eksternt definerede identifikatorer, og +håndtere projektinterne tekstpunkter. + + + +Eksterne deklarationer og definitioner + +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. + +Lad os kigge på et eksempel. Led efter følgende linjer i redigeringsvinduet hello.cpp. + +Hello::Hello() + : KMainWindow( 0, "Hello" ) +{ + + +Højreklik på KMainWindow. En menu dukker op. Vælg tilvalget Søg i dokumentationen: KMainWindow der og slip museknappen. Nu åbnes værktøjsvisningen Dokumentation, med værdien KMainWindow som søgebegreb på siden Søg. Derefter åbnes et andet redigeringsvindue på arbejdsfladen som viser KDE's referenceside i programmeringsgrænsefladen for klassen KMainWindow. + +Alt dette ser ud som følger. (Vi åbnede med vilje allerede siden Dokumentation Søg for at anskueliggøre resultatet af menuvalget.) + + + + + + +Hvordan man slår en ekstern dokumenteret identifikator op. + + + +Du kan ligesågodt vælge Søg efter dokumentation: KMainWindow. I dette tilfælde vises siden Søgning i værktøjsvisningen Dokumentation, som oftest sørger for et udvalg af sider som indeholder søgebegrebet. (I vort eksempel er det formodentlig klasserne KMainWindow og KMainWindowInterface.) Vælg den du er interesseret i så vises tilsvarende dokumentation i et redigeringsvindue. + + +Hvis dette ikke fungerede, er der formodentlig intet dokumentindeks endnu. Initierede du indekset ifølge oven? Hvis ikke, gør det først, og kom derefter tilbage hertil for et nyt forsøg. + + + + +Projektinterne deklarationer og definitioner + +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 Ctags til at søge i projektets kildekode. + +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 Ctags længst nede i arbejdsfladen. + +Når du klikker på fanebladet Ctags åbnes en dialog hvor du finder følgende tekst i nederste højre hjørne: + + + + + + +Byg et Ctags-indeks med knappen Regenerr. + + + +Klik på knappen Opret igen og vent nogle sekunder. Så erstattes Ingen Ctags-database fundet med dagens dato. Nu er du parat til at slå en identifikator op i projektets kildekode. + + +Datoen udfor knappen Opret igen 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. + + +Der er flere muligheder at slå en identifikator op i projektets kildekode. + + + + +Brug værktøjsvisningen Ctags +Dette er nemt. Begynde blot med at skrive navnet på identifikatoren som du er interesseret i i indtastningsfeltet Opslag 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. + + +Hvis du for eksempel vil vide om identifikatoren Hello bruges i vort eksempelprojekt, skrives "H" i indtastningsfeltet Opslag. &tdevelop; begynder med det samme at arbejde og viser et resultat af denne type: + + + + + + +Hvordan en identifikator slås op i værktøjsvisningen Ctags. + + + +Hvis du klikker på en af de listede indgange, åbner &tdevelop; et redigeringsvindue med filen og placerer markøren på et passende sted. + + + + +Brug en sammenhængsafhængig menu i en kildekodefil +Dette er bekvemt hvis du arbejder med en bestemt kildekodefil. Antag at du studerer filen main.cpp i vort eksempelprojekt Hello. Der finder du følgende linje: + +Hello *mainWin = 0; + +Du undrer dig måske over hvad Hello 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. + + + + + + +Hent Ctags-information om en af projektets interne identifikatorer. + + + +Klik på det du er interesseret i, lad os sige Ctags - Gå til definition: Hello, så viser &tdevelop; med det samme redigeringsvinduet hello.cpp og placerer markøren præcis ud for klassedefinitionen: +Hello::Hello() + : KMainWindow( 0, "Hello" ) +{ + + + + + +Lav en global søgning +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;. + + + +Start en global søgning med menupunktet Redigér Søg i filer.... Eller + + +Brug den sammenhængsafhængige menu direkte med et højreklik af musen i redigeringsvinduet. + + + +Vi anskueliggør den anden mulighed i eksempelprojektet Hello. Slutresultatet af menukaldet er stort set det samme. Lad os antage at du studerer kildekodefilen hello.cpp og har placeret markøren på den første forekomsten af Hello i den. Nu undrer du dig over hvor ordet Hello 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. + +Mens du nu stadigvæk holder markøren et sted over Hello i kildeteksten, klikkes med højre museknap. Den nu velkendte sammenhængsafhængige menu dukker op, hvor du skal vælge linjen Flerfilsøgning: Hello. + + + + + + +Initiér en global søgning indefra et redigeringsvindue. + + + +Dette gør at følgende dialog Søg i filer dukker op (nøjagtigt det samme som hvis du brugte menuenRedigér Søg i filer...). + + + + + + +En fleksibel grafisk grænseflade for at udføre generelle søgninger i projektet. + + + +Som du bemærker er det et meget fleksibelt værktøj til at starte søgninger med find og grep i hele projektet. Vi går ikke ind på flere detaljer her, men du kan selv eksperimentere. For øjeblikket, skal Hello allerede være markeret i feltet Mønster. Hvis det ikke er det, så skriv det blot, og klik derefter på knappen Søg længst nede til højre. + +Nu åbnes værktøjsvisningen Søg i filer længst nede, og viser filnavne og linjer for alle forekomster af Hello 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. + +Der er to særligt interessante linjer i værktøjsvisningens vindue. + + +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. + + + +Længst nede angives antal forekomster som findes når en søgning udføres. I vort eksempel skal det være *** 11 træffere fundet ***. + + + +&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 Søg i filer. + + + + + + +Arrangér redigeringsvinduer + +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. + +Hvordan man fjerner faneblade som ikke behøves. +Hvordan man omarrangerer fanebladene. +Hvordan man viser flere filer samtidigt på arbejdsfladen. +Hvordan man redigerer C++ kildekodefiler og deklarationsfiler samtidigt +Hvordan man grupperer kildekodefiler i udviklingssessioner. + + + +Oprydning i fanebladslinjen + +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. + + +Lukke flere faneblade på en gang +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 Vindue eller højreklikke på et faneblad, for enten at + + + +lukke redigeringsvinduet som for øjeblikket er valgt, + + +lukke alle andre åbne redigeringsvinduer, eller + + +lukke alle redigeringsvinduer på en gang (kun tilgængeligt i menuen Vindue). + + + + +Lukke markerede sæt faneblade +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. + + +Lad os illustrere dette med et enkelt eksempel. Lad os antage at der er flere filer åbne for redigering i vort eksempelprojekt Hello: hello.cpp, hello.h, helloui.rc, hello.desktop og main.cpp. Du vil nu lukke alle undtagen hello.cpp og hello.h. Den nemmeste måde at gøre det er med værktøjsvisningen Filliste. Eftersom denne liste med åbne filer er alfabetisk ordnet, er det enklere at finde dem du vil lukke. Fortsæt som følger: + + + +Åbn Filliste, hold tasten Ctrl nede, og klik på de filer du vil lukke i listen. + + +Klik derefter med højre museknap, mens du holder musemarkøren på et filnavn i listen. + + +Vælg Luk markerete fra den sammenhængsafhængige menu i Fillisten. + + + + + + + + +Hvordan markerede redigeringsvinduer kan lukkes på en gang. + + +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. + + + +Hvordan redigeringsvinduets faneblade kan omarrangeres + +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: + + +Grundlæggende indstilling: Hvor nye faneblade skal placeres + +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. + +Du skal ændre en grundlæggende indstilling i &tdevelop;s brugergrænseflade for at aktivere denne opførsel. + + +Vælg Opsætning Indstil KDevelop... + + +Klik på ikonen Brugergrænseflade i ikonlinjen til venstre i dialogen. Dialogsiden Brugergrænseflade vises nu. + + +Find feltet som hedder Browse med faneblade. Fjern markeringen af afkrydsningsfeltet på linjen Åbn nyt faneblad efter nuværende faneblad. + + +Luk &tdevelop; og genstart det. Nu åbnes fanebladene for nye redigeringsvinduer længst borte til højre i nuværende fanebladslinje. + + + +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. + + +Hvordan fanebladene kan omarrangeres +Eftersom udviklingsopgaver varierer med tiden, kan behovet for at omarrangere fanebladene for redigeringsvinduer opstå af og til. Dette kan enkelt opnås i &tdevelop;. + +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. + + + +Vis flere filer samtidigt + +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. + +Der er to opdelingskommandoer som du enten kan nå via menuen Vindue, 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. + +Antag at der er to kildekodefiler åbne i fanebladslinjen: hello.cpp og hello.h. Mens du arbejder med kildekoden i hello.cpp behøver du ofte at kigge på deklarationerne i filen hello.h, så du vil have begge filer åbne samtidigt. + +For at få det gjort, højreklikkes for eksempel på fanebladet for hello.h. Følgende menu dukker så op: + + + + + + +Hvordan den nuværende arbejdsflade kan deles op i to dele. + + + +Vælg Opdel vandret. Dette deler arbejdsfladen på midten og flytter redigeringsvinduet som indeholder filen hello.h til den nederste del. + + + + + + +Arbejdsfladen er opdelt vandret. + + + +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. + +Der er et antal ting at lægge mærke til. + + +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. + + + +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. + + + +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. + + + + + +Redigér C++ kildekode og deklarationsfiler samtidigt + +Der er en smart brug af den ovennævnte funktion med delte arbejdsflader indbygget i &tdevelop;. Den lader dig automatisk have en kildekodefil, .cpp, og dens tilhørende deklarationsfil, .h, å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. + +Denne funktion er imidlertid ikke aktiveret som standard. Hvis du vil bruge den i projektet skal du aktivere den. + +Vælg Projekt Projektindstillinger. Dialogen Projektindstillinger dukker op. Vælg C++ støtte i ikonlinjen til venstre, og derefter fanebladet Navigering på dialogsiden som vises til højre. + + + + + + +Lad C++ kildekode og deklarationsfiler vises side om side. + + + +Markér nu feltet Aktivér deling af deklarationsfiler og kildekodefiler. Dette aktiverer normalt Automatisk synkronisering og Lodret. Behold indstillingerne indtil videre og klik på O.k. + +Luk nu begge redigeringsvinduer hello.cpp og hello.h i vort eksempelprojekt Hello, hvis det behøves. Vælg derefter hello.cpp igen i projektets undermappe src. Redigeringsvinduet åbnes som sædvanligt, men hvis du nu åbner tilhørende hello.h, deler &tdevelop; automatisk arbejdsfladen og åbner deklarationsfilens redigeringsvindue lige under vinduet hello.cpp. + +Der er endnu mere, som vi allerede har nævnt. Find for eksempel på definitionslinjen følgende konstruktor i vinduet hello.cpp +Hello::Hello() + +og placér markøren der. Kig derefter i vinduet hello.h nedenfor og observér hvordan &tdevelop; gik til tilsvarende deklarationslinje for konstruktoren. + + + + + + +&tdevelop; går automatisk til konstruktorens deklaration. + + + +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. + + + +Gruppér kildekodefiler i udviklingssessioner + +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 Filliste i &tdevelop; tillader dig at gøre præcis dette. + +Længst oppe i vinduet for værktøjsvisningen Filliste findes en værktøjslinje hvor du kan oprette, gemme, vælge og fjerne sådanne sessioner. Brug alternativt undermenuen Vis Sessioner. + +Vi beskriver også denne funktionen gående ud fra vort eksempelprojekt Hello. Antag at du altid vil åbne filerne hello.cpp, hello.h og main.cpp 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 kildekode, for at opnå dette. + + + + + + +Brug udviklingssessioner for at huske filgrupper. + + + +Dette er en procedure i flere skridt, som følger: + + +Opret en ny session + + +Klik på ikonen Ny session længst oppe til venstre i værktøjsvisningen Filliste. + + +En dialog dukker op. Giv den nye session et navn i indtastningsfeltet Indtast sessionens navn, f.eks. kildekode. + + +Luk dialogen med O.k. Den nye session angives nu i dropned-feltet i værktøjslinjen. + + + + +Den nye session er tom fra begyndelsen. Du skal tilføje filerne du vil skal indgå i den. + + +Åbn alle filer du vil skal grupperes i udviklingssessionen. I vort eksempel bestemte vi os for at beholde hello.cpp, hello.h og main.cpp som planlagt. + + +Når fillisten er fuldstændig, klikkess på ikonen Gem session i værktøjslinjen. Spring ikke over dette stkridt Ellers glemmer &tdevelop; fillisten. + + + + + +Det er alt. Så snart du vælger sessionen kildekode i dropned-felteet Åbn session, lukker &tdevelop; alle redigeringsvinduer som for øjeblikket er åbne, og åbner de huskede i stedet for (hello.cpp, hello.h og main.cpp i vort eksempel). + +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å Gem session. Og hvis du vil slippe f med en session, vælges den i dropned-feltet, og derefter klikkes på ikonen Fjern session til højre i værktøjslinjen. + +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 Projekt ProjektindstillingerFilliste i projektindstillingerne. + + + + + + +Lad &tdevelop; åbne en specifik session når projektet indlæses. + + + + + + +Hold øjnene på almindelige problemer + +Når et redigeringsvindue som indeholder en kildekodefil åbnes, tolker &tdevelop; dets indhold. Dette gør det muligt for den indbyggede problemrapportør 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. + +Lad os anskueliggøre denne funktion med vort eksempelprojekt Hello. + + + +Åbn et editorvindue med kildekodefilen main.cpp. + + + +Sørg for at det stadigvæk indeholder følgende linje et sted nær slutningen: +/// @todo do something with the command line args here + +Dette blev indsat af programguiden da projektet Hello blev oprettet i kapitlet Start et nyt projekt ovenfor. + + + +Åbn nu værktøjsvisningen Problemer i linjen med faneblade længst nede. Hvis alt har fungeret, rapporterer den for øjeblikket følgende gøremål: + + + + + +&tdevelop; informerer om at en kildekodelinje indeholder markeringen todo. + + + + + +Formatet for kommandoen /// @todo er til for særlig behandling af værktøjet for kodedokumentation, Doxygen, som vi tager et hurtigt kig på i afsnittet Dokumentation nedenfor. Det kræves ikke at du bruger dette format, de sædvanlige kommentarer TODO og FIXME genkendes også. + +Hvis du for eksempel indsætter følgende kommentarlinjer med TODO og FIXME i vor eksempelfil hello.cpp: +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" ); +} + +ser du dem også angivne i værktøjsvisningen Problemer: + + + + + + +Problemrapporten som angiver linjer som kræver opmærksomhed i nuværende fil som redigeres. + + + +Bemærk de øvrige faneblade i værktøjsvisningen Problemer, i særdeleshed Ordn og Gøremål. Hvis du åbner den ser du alle linjer markerede med FIXME og TODO som &tdevelop; hidtil har fundet i sessionen. Informationen om TODO set for øjeblikket ud på følgende måde: + + + + + + +Problemrapporten har samlet information om TODO. + + + +Fanebladet Fejl 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. + +Du vil bemærke at problemrapportfunktionen i &tdevelop; er et meget værdifuldt værktøj, så kontrollér værktøjsvisningen Problemer regelmæssigt under udviklingsprocessen. + + + + +Hvordan man kompilerer et projekt + +At kompilere et projekt i &tdevelop; kræver flere indstillingsskridt og derefter at programmet bygges. Alt dette er tilgængeligt via menuen Byg. + + + + + + +At bygge et projekt kræver flere skridt. + + + +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 Byg projekt 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. + +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: + + +Tag et hurtigt kig på den grundlæggende byggecykel. +Kig på nogle enkelte måder at indstille et projekt. + + + +Den grundlæggende byggecykel + +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å: + +Hvordan projektet initieres for at bygge det første gang. +Hvordan de oprindelige indstillinger gøres. +Hvordan man bygger projektet. +Hvordan programmet køres indefra &tdevelop;. + + + +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 QMake, 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. + + + +Initiér projektet så det kan bygges + +Da programguiden oprettede vort eksempelprojekt Hello, efterlod den det i en slags uberørt 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 Byg Byg projekt eller trykke på funktionstasten F8, får du følgende advarsel: + + + + + + +Forsøger at bygge et ubehandlet projekt baseret på automake. + + + +Du kan klikke på knappen Kør dem, 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å Kør ikke. + +Som allerede nævnt udføres kompilering og linkning af programmet via menuen Byg. Vis den og vælg Kør automake og beslægtede programmer. + + + + + + +Start en grundlæggende initieringskørsel. + + + +&tdevelop; åbner nu værktøjsvisningen Meddelelser 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: *** Lykkedes ***. + +Hvis du ruller tilbage længst oppe, finder du kommandolinjen som &tdevelop; udførte for at kalde værktøjerne i baggrunden: + +cd '/home/devel/projects/hello' && \ +WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake -f Makefile.cvs + + +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 autoconf og automake som bruges til initieringen. Tilsidst instrueredes byggeværktøjet (&GNU; gmake i dette tilfælde) til at behandle byggefilen Makefile.cvs. + +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 configure som er nødvendig for at udføre næste indstillingsskridt. + + + +Indledende konfiguration af Hello + +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. + +Du kan først beordre en konfigureringssekvens når den grundlæggende initiering af automake er afsluttet med godt resultat, eftersom de nødvendige configure-filer ikke er tilgængelige før end fter den indledende kørsel. Når den er gjort, vælges menupunktet Byg Kør configure for at påbegynde konfigureringssekvensen. + +&tdevelop; åbnede værktøjsvisningen Meddelelser igen hvis det behøvedes, og listede meddelelser fra kørslen af configure i den. Hvis alt gik godt, er de sidste meddelelser Good - your configure finished. Start make now (som udskrevet af configure) fulgt af meddelelsen *** Lykkedes *** fra &tdevelop;. + +Længst oppe i vinduet Meddelelser finder du igen kommandolinjen som &tdevelop; brugte til at starte konfigurationen: + +mkdir '/home/devel/projects/hello/debug' && \ +cd '/home/devel/projects/hello/debug' && \ +CXXFLAGS="-O0 -g3" "/home/devel/projects/hello/configure" --enable-debug=full + + +Du kan se flere interessante detaljer i kommandoerne. + + + + + + + + + + + + + +For det første bruger &tdevelop; en særlig undermappe i projektets mappetræ for byggeprocessen. Byggemappen debug (som vises til venstre) spejler den grundlæggende projektstruktur og indeholder en mængde byggerelaterede filer, såsom flere configure-baserede filer og desuden en Makefile i hver undermappe. + + +I det nærmest følgende afsnit Indstil projektet 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 debug (hvis det behøvedes) inden kaldet til configure, og at scriptet configure oprettede delstrukturen og alle Makefile i den. + + +Derefter, kaldte &tdevelop; scriptet configure indefra byggemappen debug i vort projekts rodmappe med et særligt miljø, hvor argumenterne CXXFLAGS="-O0 -g3" 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. + + +Tilsidst kaldtes scriptet configure med tilvalget --enable-debug=full som beder det om at oprette hver Makefile så efterfølgende kompilering og linkning får al nødvendig fejlsøgningsinformation indbygget og brugbart. + + + + + + +Alle disse indstillinger kan indstilles for hvert projekt. Du vil lære dig mere om dette i kapitlet Projekthåndtering. + + + +Byg projektet + +Når du er kommet så langt er du klar til virkelig at bygge, dvs. kompilere og linke programmet. Ved at kigge i menuen Byg, ser du at der er tre sådanne kompileringstilvalg at vælge blandt. + + + + + + +Kommandoen i &tdevelop; til at bygge binære filer. + + + +Nedefra og opad, er der: + + +Kompilér fil: Det kompilerer kildekodefilen i redigeringsvinduet som for øjeblikket er åbent. Bruges oftest til hurtig kontrol af fejl. + + +Byg aktivt mål: Dette bruges i hovedsagen i sammenhæng med Håndtering af automake, som vi tager et hurtigt kig på nedenfor. + + +Byg projekt: Det er hvad vi nu er interesserede i. Det går gennem hele projektet, kompilerer og linker filer hvor det er nødvendigt. + + + +Det kan være interessant at se hvad der sker med mappen debug som blev oprettet under foregående kørsel af configure. Derfor er det bedst at beholde den åben med alle undermapper synlige, som vises ovenfor. Vælg derefter Byg Byg projekt (eller tryk på tasten F8) for at påbegynde byggesekvensen. Som tidligere åbnes værktøjsvisningen Meddelelser længst nede og lister resultatet af byggekørslen. Desuden dukker nogle filer op i undermappetræet debug. + +Der er ikke mange kildekodefiler i vort eksempelprojekt Hello, altså kommer vinduet Meddelelser kun til at indeholde nogle få linjer. For oven findes igen kommandolinjen som &tdevelop; sendte til skallen i baggrunden. + +cd '/home/devel/projects/hello/debug' && \ +WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake -k + + +&tdevelop; skiftede til debug-deltræets rod, hvilket ikke burde være overraskende, for at køre filen Makefile som findes der. Et særligt delmiljø oprettedes igen, som tidligere i initieringsskridtet, i hvilken værktøjet gmake blev kaldet. + +Bemærk flaget -k i kaldet af gmake. 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 Meddelelser. Hvis der er nogen, drage nytte af fordelene med det integrerede udviklingsmiljø: klik blot på fejlmeddelelsen i vinduet Meddelelser så går &tdevelop; til det nøjagtige sted hvor fejlen ospstod i kildekodefilen. + +Og hvad skete inde i deltræet debug? Ikke så meget. Nogle få filer dukkede op i grenene doc/en og src, i særdeleshed filen hello i /home/devel/projects/hello/debug/src/. 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 hello. + + + +Kør programmet + +Der er ikke nogen ekstra skridt indblandede for at køre det nye program hello. Vælg enten Byg Kør program, tryk på Shift F9 eller brug knappen Kør program i byggeværktøjslinjen som vises nedenfor. + + + + + + +Kør et program fra Byggeværktøjslinjen. + + + + +Det er alt. &tdevelop; starter nu det nye program i et særskilt terminalvindue som værktøjsvisningen Program længst nede. Der vises kommandoen som &tdevelop; udførte for at køre programmet på linjen længst oppe: + +./hello + + +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 Projekthåndtering. + +Linjen ./hello følges formodentlig af en advarselsmeddelelse. Ignorér den indtil videre. Den forhindrer ikke at vort program hello kører. + + + + + + + +Vort oprindelige Hello-program. + + + + +Luk programvinduet Hello som sædvanligt. Hvis ingen fejl opstod rapporterer &tdevelop; det som *** Afsluttede normalt *** i værktøjsvisningen Program. + + + + +Indstil projektet + +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. + + +Hvorfor er byggeindstillinger nyttige? + +Hvor skal opførslen af scriptet configure defineres. + +Nogle overvejelser om hvordan make skal køres. + +Hvor skal det kørbare programmet findes, og hvad skal det hedde? + + + +Byggeindstillinger + +Da vi kørte scriptet configure i afsnittet Indledende konfiguration af Hello ovenfor, noterede vi at &tdevelop; havde oprettet den særlige undermappe debug for dette formål. I dette afsnit behandler vi kortfattet nogle konsekvenser af denne funktion. + +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. + +For at få styr på hvilke byggeindstillinger som for øjeblikket er tilgængelige, tag et kig å menuen Projekt Byggeindstilling. + + + + + + +Der er forskellige byggeindstillinger tilgængelige i projektet. + + + +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 default. + +Byggeindstillingen som for øjeblikket bruges har et tjekmærke til venstre. Vælg helt enkelt dets menupunktet for at skifte til en anden byggeindstilling. + +Lad os nu tage et hurtigt kig på hvad byggeindstillingerne sørger for. + + + +debug + +Du bør bruge byggeindstillingen som standard under udviklingsprocessen. Den bygges separat fra kildekodemapperne i den særlige undermappe debug, dvs. alle objektfiler, ekstrafiler og kørbare filer placeres i dens undermapper i stedet for tilsvarende mapper i projektets rod. Scriptet configure får flaget --enable-debug=full og argumentet CXXFLAGS="-O0 -g3" 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. + + + + +optimeret + +Denne bruges til at bygge det endelige C++ programmet. Den bygges separat fra kildekodemapperne i den særlige undermappe optimized. Scriptet configure har ingen særlige forudindstillede flag, men CXXFLAGS="-O2 -g0" beder &gcc;-oversættern om at optimere koden og ikke indsætte fejlsøgningsinformation i de binære filer som skabes. + + + + +default + +Betegnelsen default angiver standardindstillingen når et program bygges i en terminal med f.eks. &GNU; byggeværktøjet configure og make/gmake på kommandolinjen. I modsætning til debug eller optimized 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.). + + +Tænk efter ordentligt inden du bestemmer dig for at bruge byggeindstillingen default. + +Den kan ikke bruges parallelt med de særlige indstillingerdebug og optimized. Alle byggehandlinger som bruger default gør at begge de andre byggeindstillinger bliver unyttige. Dette skyldes nogle egenheder hos processen som laver Makefile med mekanismerne i automake og autoconf, som det ikke er enkelt at få bugt med. + + + + + +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. + +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. + +I stedet for at rydde op og kompilere alt om fra begyndelsen med andre indstillinger, behøver du altså kun skifte fra byggeindstillingen debug til optimize, kompilere ændringerne af kildekoden og derefter genstarte programmet under disse forhold. Hvis noget upassende viser sig, skift så helt enkelt tilbage til debug, og fortsæt med det samme arbejde der. + +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. + + + +Konfigurationstilvalg for projektet + +At konfigurere programmet rigtigt er livsvigtigt i byggekæden baseret på &GNU; autotools. Dette styres ofte af flagene for scriptet configure og/eller særlige argumentindstillinger i miljøet inden configure køres, som f.eks. CXXFLAGS i vor tidligere beskrivelse. + +Du kan indstille de fleste konfigurationsvalgmulighederne for et givet projekt fra &tdevelop;s grafiske grænseflade. Vælg Projekt Projektindstillinger og derefter ikonen Indstilling af configure på ikonlinjen til venstre i dialogen. Siden Indstilling af configure som indeholder flere fanebladsvinduer vises til højre. + + + + + + +De fleste indstillinger af configure kan angives her. + + + +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 Konfigurere projekt. Hvis du vil vide mere om betydningen af forskellige argumenter som kan angives, slå info make op i en terminal (eller info:make inde i &konqueror;) og kigge i afsnittet Implicit Rules Implicit Variables. + +Der er flere indstillingsvinduee med faneblade i dialogen, hvor det første, Generelt, 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. + +Du vælger byggeindstillingen hvis indstillingstilvalg skal defineres i dropned-feltet Indstilling længst oppe i dialogen Indstilling af configure. + + + + + + +Vælg byggeindstilling hvis indstillinger skal defineres. + + + +Vælg nu en anden byggeindstilling i dette dropned-felt og observér hvordan indholdet i f.eks. tekstfelterne Configure-argument og Byggemappe ændres ifølge indstillingerne vi nævnte for byggeindstillingslisten ovenfor. + + +Generelle konfigurationsindstillinger + +Følgende indstillingstilvalg kan defineres på siden Generelt i dialogen: + + + + +Configure-argument +Dette er valgmulighederne som &tdevelop; tildeler til kaldet af scriptet configure i byggeprocessen. Se exemplet i afsnittet Indledende konfiguration af Hello ovenfor. + + + + + +Byggemappe +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. + + + + + +Øverste kildemappe +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. + + + + + +C/C++ preprocessorargument(CPPFLAGS) +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 exemplet i afsnittet Inledande konfiguration af Hello ovenfor hvordan det gøres. + + + + + +Linkargumenter (LDFLAGS) +Dette er ekstra information for linkværktøjet ld, om hvor det skal lede efter yderligere biblioteker. Det bruges også til at oprette det midlertidige byggemiljø. + + + + + +Miljøvariabler +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. + + + + + + +Oversætterspecifikke indstillinger + +Øvrige faneblade på dialogsiden Indstilling af configure er til for oversætterspecifikke indstillinger. De er strukturerede på en lignende måde, så det er tilstrækkeligt hurtigt at kigge på siden C++. + + + + + + +Vælg oversætter som &tdevelop; skal bruge og dens arbejdsmiljø her. + + + +Her kan du indstille følgende: + + + + +C++ oversætter +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. + + + + + +Oversætterkommando (CXX) +Kun for eksperter. Dette behøves kun hvis en anden C++ oversætter end standardoversætteren bruges. Indtast navnet som det kaldes med her. + + + + + +Oversætterargumenter (CXXFLAGS) +Her kan du indtaste eventuelle ekstra tilvalg som &tdevelop; skal sende til oversættern (via Makefile). Visse alternative værdier er forudindstillede ifølge byggeindstilling som blev valgt med dropned-feltet Indstilling. + + +Bemærk at mange sædvanlige oversættertilvalg kan vælges i en dialog som dukker op når du klikker på knappen ... til højre for tekstfeltet. + + + + + + +Brug denne dialog til at definere opførslen af &GNU; C++ oversætteren. + + + +Vi valgte med vilje fanebladet Optimering her. Bemærk at tilvalget Ingen optimering er standard (ifølge det forudindstillede tilvalg -O0 i byggeindstillingen debug). + +Desværre kan du for øjeblikket ikke vælge alle tilvalg fra dialogen Eksempelvis skal tilvalget -g3 som bruges af byggeindstillingen debug ændres manuelt hvis det nogensinde behøves. + + + + + + +Hvordan programmet skal bygges af make + +Du kan desuden indstille måden som &tdevelop; kalder værktøjet make når projektet bygges. Vælg Projekt Projektindstillinger og derefter ikonen Byggeindstillinger til venstre i dialogvinduet. Dialogsiden Byggeindstillinger vises så til højre. + + + + + + +Definér hvordan &tdevelop; kalder værktøjet make. + + + +Der er ikke så meget at gøre lige her nu. Den eneste interessante indstilling i de fleste tilfælde er tilvalget Afbryd ved første fejl. Du vil bemærke at den er deaktiveret i de fleste projekter. Den svarer til flaget -k i kaldet til gmake som vi fandt den første gang da eksempelprojektet Hello blev byggeet. + +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 Meddelelser. Brug Vis Næste fejl og Vis Foregående fejl eller tasterne F4 og Shift F4 for at gøre det. &tdevelop; aktiverer automatisk redigeringsvinduet for kildekodefilen det drejer sig om og placerer markøren på den fejlagtige linje. + +Hvis du på den anden side hellere ønsker at bygningen skal stoppes så snart en fejl opstår, markeres tilvalget Afbryd ved første fejl i dialogen. &tdevelop; kalder du gmake uden flaget -k. + + + +Hvordan det kørbare program startes + +Når bygningen er færdig, kan du enkelt køre programmet indefra &tdevelop;. Brug enten Byg Kør program, genvejstasten Shift F9 eller knappen Kør program i &tdevelop;s byggeværktøjslinje. + + + + + + +Kør programmet herfra. + + + +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? + +Alt det kan løses ved at indstille nogle projektorienterede køretilvalg i &tdevelop;. Vælg Projekt Projektindstillinger og derefter ikonen Køreindstillinger i ikonlinjen til venstre i dialogvinduet. Dialogsiden Køreindstillinger vises til højre. + + + + + + +Definér hvor og hvordan programmet skal køres. + + + +Der er en hel del som kan indstilles i denne dialog. Der er egentlig fire grupper af indstillingstilvalg. + + + + +Katalog +Fortæller &tdevelop; hvad det skal forudsætte at det kørbare program kaldes. Der er tre muligheder at vælge blandt. + + +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. + + + +Kør fra mappen hvor det kørbare program senest blev bygget. Dette er standardværdien. Du kan beholde dette indtil videre. + + + +Kør fra byggemappen ifølge byggeindstilling som for øjeblikket er valgt. Katalognavnet indstilles på dialogsiden Generelt. + +Dette er rodmappen hvor &tdevelop; skal finde det kørbare program. Den ændres automatisk ifølge det valg du gjorde i menuen Projekt Byggeindstillinger. Prøv det. + +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 Projekt. + + + +Kør programmet som findes i en fast egen mappe. Igen er det kun rodmappen hvor selve den kørbare fil findes. + +Brug dette hvis du f.eks. vil køre programmet som virkelig er installeret i stedet for versionen som findes i projektmappen. + + + + + + +Program +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. + + + +Hvis tekstfeltet Hovedprogram efterlades tomt, bruges indstillingen af aktivt mål 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. + + + + + +Miljøvariabler +&tdevelop; laver et særligt skalmiljø at køre programmet i. Definér eventuelle ekstra miljøvariabler i denne gruppe af indstillinger. + + + + + +Diverse +Yderligere to afkrydsningsfelter findes længst nede på denne dialogside. + + + + +Kompilér automatisk inden kørsel 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. + +Afmarkér det hvis du vil køre en programversion tidligere end den seneste ændring. + + + +Start i ekstern terminal 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. + + + + + + + + + +Hvordan et projekt kan udvides: Håndtering af automake + +(endnu ikke skrevet ...) + + +Et hurtigt kig på maskineriet i automake + +(endnu ikke skrevet ...) + + + +Hvordan man placerer ikoner i en separat mappe + +(endnu ikke skrevet ...) + + + +Hvordan man tilføjer nye klasser + +(endnu ikke skrevet ...) + +Vær forsigtig når du vælger filnavne for klasser. Det er ekstremt svært at ændre dem senere. + + + +Hvad findes i et delprojekt? + +(endnu ikke skrevet ...) + + +Koncentrér dig om dit arbejde: Det aktive mål + +(endnu ikke skrevet ...) + + + + +Nogle skridt for at omstrukturere et projekt + +(endnu ikke skrevet ...) + + + + + +Hvordan man fejlsøger + +(endnu ikke skrevet ...) + + + + +En anmærkning om projektdokumentationen + +&kde;-projektet bruger docbook til at oprette projektets håndbog (dvs. brugermanualen). Håndbogen er tilgængelig via programmets menulinje ved at vælge Hjælp Håndbog programnavn 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. +Alle &kde;-baserede skabeloner i &tdevelop; har undermappen doc, som indeholder skabelonen index.docbook i mappen en, for at komme i gang med at skrive brugerhåndbogen. Du redigerer index.docbook 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. +Du skal installere projektet med Byg Installér eller Installér (som systemadministrator) i &tdevelop; for at kunne se håndbogen i hjælpecenteret. +Du finder mere information om syntaksen for docbook på &kde;'s hjemmeside for dokumentation. + + + +Sidst men ikke mindst, genvejstaster + +(endnu ikke skrevet ...) + + + +Hvordan går man videre + +(endnu ikke skrevet ...) + + +Problemer som man ofte støder på + + +Kapitlet I korthed +Sider med ofte stillede spørgsmål +Forum +E-mail-lister + + + + +Arbejd med projekter + +(endnu ikke skrevet ...) + + +Brug eksisterende &tdevelop;-projekter + +(endnu ikke skrevet ...) + + + +Importér eksterne projekter + +(endnu ikke skrevet ...) + + + + + diff --git a/tde-i18n-da/docs/tdevelop/tdevelop/index.cache.bz2 b/tde-i18n-da/docs/tdevelop/tdevelop/index.cache.bz2 new file mode 100644 index 00000000000..ba10c2f1c6e Binary files /dev/null and b/tde-i18n-da/docs/tdevelop/tdevelop/index.cache.bz2 differ 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 @@ + +KDevelop" +> --> + + + + + Apache"> + API"> + + autoconf"> + automake"> + + ctags"> + CVS"> + + Doxygen"> + doxywizard"> + egrep"> + grep"> + HTML"> + IDE"> + libtool"> + + Python"> + Perl"> + PHP"> + + Qt/embedded"> + ssh"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + + + + + &tdevelop;'s brugermanual + + 2006-06-19 + &kdevrelease; + + + Bernd Gehrmann
bernd@tdevelop.org
+
+
+ + Caleb Tennis
caleb@aei-tech.com
+
+
+ + Bernd Pol
bernd.pol@online.de
+
+
+ + Volker Paul
volker.paul@tiscali.de
+
+
+
+ + + 2002 + Bernd Gehrmann + + + 2002 + Caleb Tennis + + + 2004 + Bernd Pol + + + 2005 + Volker Paul + + + &erik.kjaer.pedersen.role; + + &FDLNotice; + + + &tdevelop; er et integreret udviklingsmiljø til brug for mange forskellige programmeringsopgaver. + + + + KDE + KDevelop + IDE + udvikling + programmering + + +
+ + + +&survey-manual; +&getting-started; +&tdevelop-survey; +&setup; +&applicationwizard; +&editing; +&file-browsers; +&class-browsers; +&documentation; +&project-management; +&adv-build-management; +&debugger; +&cvs-chapter; + +&credits; + + + + +&tdevelop-install; +&nutshell; +&unixdev; + +&app-files; +&plugin-tools; +&app-uimodes-examples; +&commands; +&app-misc-info; +&app-changelog; + + + + + + + + + + + + + + + + +Bibliografi + +(... endnu ikke skrevet ...) + + + + +<ulink url="info://make/Top" +>GNU Make-manual</ulink +> + +Richard M.Stallman +RolandMcGrath + + + + +<ulink url="info://automake/Top" +>GNU Automake</ulink +> + +DavidMacKenzie +TomTromey + + + + +<ulink url="info://autoconf/Top" +>GNU Autoconf</ulink +> + +DavidMacKenzie +BenElliston + + + + +<ulink url="info://gcc/Top" +>Brug af GNU's kompiler-samling</ulink +> +Richard M.Stallman + + + +<ulink url="info://libtool/Top" +>GNU Libtool</ulink +> + +GordonMatzigkeit +AlexandreOliva +ThomasTanner +Gary V.Vaughan + + + + +GNU Autoconf, Automake, og Libtool +1st edition +October 2000 + +Gary V.Vaughan +BenElliston +TomTromey +Ian LanceTaylor + +New Riders Publishing +ISBN 1578701902 + + + + +Avanceret programmering i &UNIX;-miljø +1st edition +June 1992 +W. RichardStevens +Addison-Wesley Pub Co +ISBN 0201563177 + + + +Thinking in C++, Volume 1: Introduction to Standard C++ +2nd Edition +April 15, 2000 +BruceEckel +Prentice Hall +ISBN 0139798099 + + + +Åben kilde udvikling med CVS +2nd Edition +October 12, 2001 + +KarlFogel +MosheBar + +The Coriolis Group +ISBN 158880173X + + + +Programmering i PHP +1st edition +March 2002 + +RasmusLerdorf +KevinTatroe + +O'Reilly & Associates +ISBN 1565926102 + + + +Programmering i Python +2nd Edition +March 2001 +MarkLutz +O'Reilly & Associates +ISBN 0596000855 + + + +Gui Programmering med Python : Ved brug af Qt værktøjssamlingen +Bk&Cd-r edition +January 2002 +BoudewijnRempt +Opendocs Llc +ISBN 0970033044 + + + +Programmering i Perl +Kamelbogen +3rd Edition +July 2000 + +LarryWall +TomChristiansen +JonOrwant + +O'Reilly & Associates +ISBN 0596000278 + + + +At lære Perl +Lama-bogen +3rd Edition +July 15, 2001 + +Randal L.Schwartz +TomPhoenix + +O'Reilly & Associates +ISBN 0596001320 + + + + + + + + + +&documentation.index; + +
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 @@ + +I korthed — Vink og trick + + + +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;. +Hvis du ønsker at vide mere om et emne, så følg blot linket i titlen der starter et råd. +Information tilgængelig om disse emner: + + Udseende og fornemmelse + Projekter + Kompilering + &automanag; + Problemer med at kompilere og bygge + Andre emner + + + +Udseende og fornemmelse + + +Påtving mindre værktøjsvisningfaneblade i IDEA-tilstand + +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 (Opsætning Indstil KDevelop... Brugergrænseflade). +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 MDIStyle under mærket [UI] i indstillingsfilen $KDEHOME/share/config/tdeveloprc som følger: + + +MDIStyle=0: Kun ikoner +MDIStyle=1: kun tekst (standardværdi) + +MDIStyle=3: ikoner og tekst + + + + + +Underligt farvede tegn og/eller skærmstil + +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: + + +Find linjen Style=Checked i indstillingsfilen $KDEHOME/share/config/tdeveloprc og fjern den. Genstart derefter &tdevelop;. + + +(Denne opførsel opstår sommetider efter du venstreklikkede på en .ui-fil i en af filnavigatørerne og &tdevelop; indlæste KUIViewer for at vise den &GUI; som blev lavet ud fra denne fil.) + + + + +Fuldskærmstilstand + +Vælg Vis Fuldskærmstilstand i menulinjen, eller tryk på Ctrl Shift F. + + + + +Vis eller skjul menulinjen + +For at skjule menulinjen, vælges Opsætning Vis menulinje i menulinjen, eller tryk på Ctrl M. For at vise menulinjen igen, er kun Ctrl M tilgængelig. + + + + + +Projekter + +Opret nyt projekt + +Projekt Nyt projekt... starter programguiden. + + + + +Opret et eget projekt + +Der er ingen direkte måde at oprette et tilpasset projekt (&ie; et projekt som bruger sine egne makefiler). Brug Projekt Importér eksisterende projekt i stedet. Husk at sætte den passende Projekttype, med påskrift af en yderligere (Egne Makefiler), i dialogen. + + + + +Brug projekttilvalg tidligt + +Så snart du har oprettet et nyt projekt, så glem ikke at indstille Projekt Projektindstillinger... efter dine behov. + + + + + +Kompilering + +Manglende detalje i kompileringsbeskeder + +Hvis du bemærker at en del værdifuld information mangler i vinduet Meddelelseuddata 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. + + + + + +<link linkend="automake-manager" +>&automanag;</link +> + + +Opret nye filer i et projekt + +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 Opret ny fil... + + + + +Tilføj eksisterendee filer til et projekt + +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 Tilføj eksisterende filer.... + + + + +Fjern en fil fra et projekt + +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 Fjern. + + + + + +Problemer med at kompilere og bygge + +Projektet bygger ikke igen efter at have skiftet til/fra standardmålet + +Der er et problem med &automake;/&autoconf; maskineriet. Hvis Projekt Byg Konfiguration sørger for at vælge fra tre bygge-mapper: standard, optimeret, og fejlret, så brug endelig enten standard eller fejlret/optimeret mål. + + +Så snart du har indstillet dit projekt med standard, bygges det ikke længere med fejlret eller optimeret. + + +Så snart du har indstillet dit projekt med fejlret eller optimeret, bygges det ikke længere med standard. + + + + + + +Forkert version af autoconf, &etc;. + +Der er flere fejlmeddelelser som drejer sig om gamle versioner af autoconf, &etc; som forhindrer at configure virker som den skal. Kør autoreconf i mappetræet hvor filerne configure.in det drejer sig om findes. Kommandoen forsøger at opdatere informationen i &GNU; byggesystemfilerne. Se man autoreconf for mere information. + + + + + +Andre emner + +Konfigurationsfiler brugt af &tdevelop; + +Normalt kan du være ligeglad, men det er ret nyttigt at vide hvis noget i din opsætning går galt. + + + + + 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 @@ + +Pluginværktøjer + + + plugin + +&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. +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. + +Teknisk er plugin baserede på klassen KDevPlugin definered i lib/interfaces/kdevplugin.h. Det følgende kommer fra en kommentar der. + +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: +Kerne +Global +Projekt + + + +Kerneplugin er globale plugin som tilbyder nogle vigtige funktioner for "kernen", og derfor ikke kan vælges af brugeren på indstillingssiderne for plugin. + +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. + +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. + +Som nævnt ovenfor kan kerneplugin ikke deaktiveres. Globale plugin kan aktiveres eller deaktiveres med Opsætning Indstil KDevelop... under plugin. Projektplugin kan aktiveres eller deaktiveres med Projekt Projektindstillinger... under plugin. 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. + +Plugin som er deaktiverede roder ikke menuerne til og indlæses ikke i hukommelsen. + + +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. +Pluginnerne er grupperede efter omfattelse (Kerne, Global, Projekt). + +Omfattelse: Kerne + + +Programguide +Programguide + +Visning af forskelle +Visning af forskelle + +Opret filer +Opret filer + +Fuldskærm +Fuldskærm + +Dagens vink +Dagens vink + +Valg af brugergrænseflade +Sørger for en dialog til valg af brugergrænsefladetilstand. + +Håndtering af versionskontrolsystem +Håndtering af versionskontrolsystem + + +Omfattelse: Global + + +Ekspansion af forkortelser +Giver understøttelse for indstillelige forkortelser: korte ord som ekspanderes til almindeligt brugte kodestrukturer. + +Dokumentation +Dokumentationspluginnet tilbyder at browse og søge i lokal dokumentation og dokumentation på nettet, med understøttelse for flere dokumentationssystemer. + +Filliste +Sørger for en liste af alle for øjeblikket åbne filer. (Praktisk når fanebladslinjen ikke er rigtig bred nok.) + +Filvælger +Kraftfuldt netværkstransparent filbrowserværktøj. + +Skalfiltrering og indsætning +Tilbyder en måde at behandle editortekst med kommandolinjeværktøj. Findes i værktøjsmenuen. + +Grænseflade for grep +Integrerer "find | grep" med KDevelop - tillader hurtig søgning i flere filer med mønster eller regulære udtryk. + +Indlejret terminal +Pluginnet giver KDevelop en indbygget terminal for hurtig og enkel adgang til kommandolinjen. + +Menutilføj "Åbn med" +Pluginnet sørger for yderligere "åbn" alternativer i diverse sammenhængsafhængige menuer i KDevelop. + +Part-udforskerværktøj +Et grafisk værktøj til at udføre KTrader-lignende forespørgsler om registrerede tjenester. + +Test af regulære udtryk +Værktøj til at oprette og teste regulære udtryk mod almindelig syntaks for regulære udtryk. + +Erstatningspart +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. + +Scripter +Skriptpluginnet tilbyder KScript-baseret styring af programmet KDevelop. + +Kodestumper +Dette plugin gør det muligt at opbevare kodestumper og tilføje dem til din kode + +Tekststruktur +Sørger for en strukturoversigt og navigering for HTML- og TeX-filer + +Tilføjelse i værktøjsmenuen +Pluginnet sørger for en nem måde at tilføje eksterne programmer i værktøjsmenuen og værktøjslinjen. + +Valgrind-grænseflade +Valgrind er et værktøj som hjælper dig med at finde hukommelseshåndteringsproblemer i programmer. http://developer.kde.org/~sewardj/ + + +Omfattelse: Projekt + + +noteringsplugin +Noteringsbeskrivelse + +Kildekodeformatering +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. + +Bogmærker +Plugin som sørger for navigering og oversigt over aktive kildekodebogmærker og gør dem vedvarende mellem sessioner. + +Klassevisning +Pluginnet viser et grafisk billede af alle klasser i et projekt, sammen med metoder og egenskaber, og giver mulighed for direkte navigering i kildekoden. + +Kopiér til +Enkelt plugin til overførsel af filer. Det udfører en filkopiering med alle protokoller som understøttes af KIO. + +Ctags-grænseflade +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/ + +Støtte for endelig pakning +Hjælper til med at bygge og publicere det færdige projekt. Kun RPM-pakkeformatet understøttes for øjeblikket. + +Doxygen-understøttelse +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. + +Hurtigåbn +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. + +Sikkerhedskontrol +Kodesikkerhedskontrol + +Indtil videre den genererede liste over plugin. + + + +Plugin for projekthåndtering i &tdevelop; + + + antproject + ANT-projekthåndtering (&Java;-programmer) + + + autoprojekt + Automake projekthåndtering + + + customproject + Egen projekthåndtering + + + trollproject + Qmake-baseret projekthåndtering + + +
+Ovenstående plugin er for øjeblikket (maj 2005) tomme. Måske vil projekthåndteringsunderstøttelse blive implementeret som plugin i fremtiden. + + + +Plugin for sprogunderstøttelse i &tdevelop; + + +cppsupportStøtte for C/C++ +fortransupportStøtte for Fortran +javasupportStøtte for &Java; +perlsupportStøtte for Perl +phpsupportStøtte for PHP +pythonsupportStøtte for Python + +
+ + +Visse plugin beskrives i detalje i det følgende. + + + + +Pluginprogrammet <command +>abbrev</command +> +Forkortelser + +Dette pluginprogram udfylder forkortelser af ofte brugte kodefragmenter. Det aktiveres ved at trykke på CtrlMellemrum. Hvis du for eksempel skriver "ife" i C++ editoren, og trykker på CtrlMellemrum, får du en if-else 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;. + + +Sættet af kodeskabeloner kan indstilles. Hvis pluginnet er aktiveret, kan du se hvilke der er tilgængelige med dialogen Opsætning Indstil KDevelop... under Forkortelseer. + + + + +Pluginprogrammet <command +>filter</command +> +filter + +Dette tilbyder to funktioner. Hvis du vælger VærktøjerKør kommando kan du indtaste en skalkommando. Udskriften fra kommandoen indsættes i editorens buffer når du trykker på knappen Start. + + +En lignende funktion er tilgængelig med Værktøjer Filtrér markering ved kommando.... For at bruge den skal du markere et tekstområde i editoren. Hvis du nu skriver en skalkommando og klikker på knappen Start, startes kommandoen og markeringen bruges som standardindtastning til det. Standarduddata fra kommandoen indsættes derefter i editoren, og erstatter markeringen. + +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 <menuchoice><guimenu>Redigér</guimenu><guimenuitem>Kopiér</guimenuitem></menuchoice> 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: sed s/"^\(.*\) - \(.*\)\$"/"<menuchoice><guimenu>\1<\/guimenu><guimenuitem>\2<\/guimenuitem><\/menuchoice>"/ 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 VærktøjerFiltrér markering ved kommando... og kalder ~/bin/mef. Så erstattes med det samme "Redigér" - "Kopiér" med <menuchoice><guimenu>Redigér</guimenu><guimenuitem>Kopiér</guimenuitem></menuchoice> + + + + + + + +Pluginprogrammet &doxygen; +&doxygen; +dokumentationsværktøj +API-dokumentation + +Dette hjælper dig med at bruge API-dokumentationsværktøjet &doxygen; (). Du kan vælge ProjektKør Doxygen for at oprette API-dokumentation for det nuværende projekt baseret på konfigurationen som angives af filen Doxyfile i projektmappen. + + +Desuden kan du indstille &doxygen; med dialogen ProjektProjektindstillinger.... Dialogen er meget lig værktøjet &doxywizard;. + + + + +Pluginprogrammet &ctags; +&ctags; + +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. + + +Du aktiverer pluginprogrammet under VærktøjCTags.... 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 tags i projektmappen. Dette er en tekstfil som indeholder alle symboler i kildekodefilerne. + +Du kan søge på to måder i symboldatabasen: når feltet Matchning med regulært udtryk er markeret, tolkes teksten som du skriver som et regulært udtryk (POSIX-varianten) og matches med eksisterende symboler. Teksten .*Widget søger for eksempel efter alle symboler som slutter med Widget. Hvis feltet ikke er markeret, er søgningen verbatim. + +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. + +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. + +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 tags med regelmæssige intervaller, ved at trykke på knappen Genopret. + + + + +Pluginprogrammet <command +>astyle</command +> +a-stil +Grafisk stil +indrykning + +A-stil er et plugin til at formatere kildekoden ifølge et specifikt sæt regler. + + + + + +Pluginprogrammet <command +>regexptest</command +> +regexptest +fejlsøgningregulære udtryk +regulære udtrykfejlsøgning + +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 Værktøj Fejlsøg regulært udtryk.... + + +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;. + +Når du indtaster et udtryk, får du umiddelbart tilbagemelding om eventuelle syntaksfejl i det. Ved at indtaste en tekst under Teststreng, kan du se om udtrykket matcher strengen. I særdeleshed om det regulære udtryk indeholder grupper, såsom "([a-z])", vises indholdet af de matchede delgrupper i et listefelt. + + + + + + +
+ + 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 @@ + + + + + BerndPol + + + + +Avanceret projekthåndtering + + +Indlæser projekter + + +Indlæser et nyligt projekt + +(... endnu ikke skrevet ...) + + + + + + + Sådan åbnes et nyligt projekt + + + + + + + +Indlæser et nyligt projekt + +(... endnu ikke skrevet ...) + + + +Konverterer gamle KDevelop projektfiler + +&tdevelop; lader dig åbne gamle KDevelop 2.x projektfiler og konvertere dem til &tdevelop; filer. For at gøre dette, gå til Åbn Projekt... og vælg KDevelop 2 projektfiler i Filteret:. Vælg så projektfilendu vil åbne.Projektet bliver så konverteret til&tdevelop; og gemt som &tdevelop; projektfil. + + + + +Importerer eksisterende projekt + +For at importere et eksisterende katalog i &tdevelop; skal du vælge Importér eksisterende katalog fra Projekt menu. Du skulle kunne se importér katalog-guiden som vist herunder: + +
+Importér katalog-dialogen + + + +
+ +
+ +
+ + + + +Skræddersyr projektet — Indstillinger for projekt + +(... endnu ikke skrevet ...) + + + +
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 @@ + + + + + BerndPol + IanWadham + + + + +Bygge og projekthåndtering + +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. + +Her finder du information om følgende emner: + + Sammendrag af Håndtering af automake indeholder en oversigt over Håndtering af automake, + Anvendelse af Håndtering af automake beskriver det basale i hvordan man arbejder med Håndtering af automake. + + + +Sammendrag af Håndtering af automake + +I kapitlet Byggesystemer 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. +Der er en vis forvirring angående hvordan sådanne ting skal navngives. &GNU; kalder dem byggesystemer når Automake, Autoconf og Libtool beskrives. Qmake kaldes et værktøj til at skrive Makefiles for forskellige oversættere og platforme. I &kde; bruges ofte udtrykket projekthåndteringssystem. 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 automatiserede byggesystemer. + + +Behovet for et automatiseret byggesystem + +Hvis du har et simpelt program som udskriver Hej allesammen, skrevet i C, kan du kompilere og linke det med &gcc; -o hej hej.c og køre det med ./hej, så du behøver du ikke engang en Makefile. +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 Makefile, som er ganske nem at skrive i hånden (brug info make for at lære dig mere). +Komplikationerne begynder når: + + Din kildekode, dokumentation, grafik, lyd, oversættelser, datafiler &etc; findes i mere end en mappe, + Du har et hierarki af mapper og undermapper, + Du bruger biblioteker som ikke er en del af det traditionelle sæt på &UNIX;, såsom &Qt;-objektbiblioteket eller &kde;-desktopbiblioteker, + Du bruger en præprocessor til at oprette en del af din kildekode, som Qt's MOC præoversætter, + Du sigter mod at distribuere programmet i hele verden, til personer som ikke har samme &UNIX;- eller &Linux;-system, programmel og hardware som dig, + Du kræver en automatisk funktion for installation og afinstallation, + Du sigter mod at gøre dit program til en del af &kde;'s sæt af desktopprogrammer. + + +Hvis du befinder dig i en eller alle ovenstående situationer, behøver du formodentlig et byggesystem. I eksemplet ovenfor brugte vi kommandoen &gcc; til at kompilere og bygge programmet Hej, men alle C-oversættere hedder ikke &gcc;. 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. +Et byggesystem udjævner forskellene for dig. + + Det kontrollerer at bibliotekerne som behøves er på hver maskine som tager imod programmet, + afsøger automatisk alle programmapper efter filer at forbehandle, kompilere eller installere og + installerer komponenterne som programmet består af i de rigtige mapper, og sikrer at + mapperne på maskinen som tager imod programmet laves efter behov. + + +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 Projekthåndteringssystemer, tilbyder &tdevelop; tre automatiserede byggesystemer og mulighed at oprette din egen Makefile. I korthed (klik på projektnavnene for mere information): + + Automake-projekt som bruger de almindelige udviklingsværktøjer for &GNU;. + Qmake-projekt som bruger Trolltechs Qmake-projekthåndtering. + ANT-projekt som bruger Apaches ANT-projekthåndtering for &Java;-udvikling. + Eget projekt som kræver at du vedligeholder din egen Makefile. + + + +En af de fire valgmuligheder skal vælges når du laver et projekt, og valget er svært at ændre senere, så du bør tænke dig om inden du begynder. + + + + + +Vejledninger om Autoconf, Automake og Libtool +Der er flere vejledninger tilgængelige om &GNU;'s byggesystem (Autoconf, Automake og Libtool) som Håndtering af automake bruger. + + En kort vejledning om autoconf, skrevet af Christopher W. Curtis er tilgængelig på KDevelops hjemmeside. Den koncentrerer sig om nogle grundlæggende skridt til at ændre en Makefile. + En mere detaljeret vejledning findes i et større sæt af øvelser på Udvikling af programmer med GNU. + Den berømte gedebog, som hedder Autoconf, Automake, and Libtool, findes også på . Den er en letlæst, men alligevel kortfattet, introduktion til alle vigtige aspekter af &GNU;'s autoværktøjer. + + + + + +Hvad gør Håndtering af automake? + +Programguiden har oprettet nogle oprindelige Makefile.am filer da du oprettede et nyt projekt af en type som bruger &GNU;'s byggesystem, såsom C++ KDE Application framework. Under udviklingen laver Håndtering af automake alle yderligere Makefile.am filer for projekter som bruger &GNU;'s byggesystem, og vedligeholder alle, både de som blev lavet med programguiden og Håndtering af automake. +Der er en Makefile.am 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 Makefile.am og muligvis nogle filer at kompilere, bygge og installere. + +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. + +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: + +./configure +make +make install # Sædvanligvis som systemadministrator. + + +og kan afinstalleres med kommandoen make uninstall (oftest som systemadministrator). + +Hvordan virker det? Ja, configure er et script som: + 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 + rekursivt laver filerne Makefile ved at udfylde det som skal erstattes i de tilsvarende Makefile.in. + + +Filen Makefile.am er inddata—en skabelon som giver grundlæggende information for den Makefile som skal laves, ved at udfylde en vis systemafhængig information. Den laves af værktøjet Automake ud fra filen Makefile.am. +Processen at komme fra en Makefile.am (hvor .am angiver skabelonfiler for Automake) til Makefile håndteres automatisk af Kdevelops Håndtering af automake med værktøjet Autoconf, M4-makroer og andre mysterier vi ikke behøver at gå ind på her. +Så når make kører, henter det automatisk den rigtige information fra det nuværende miljø, såsom oversætter og biblioteker. På samme måde, placerer make install delene af programmet, som kørbare filer, dokumentation og datafiler på det rigtige stedet i dette miljø. + +Hvis du distribuerer programmet som et tar-arkiv (en enkelt komprimeret fil som KDevelop kan oprette for dig), indeholder den filerne Makefile.in og scriptfilen configure, så modtageren kan kompilere, bygge og installere programmet uden at have Automake, Autoconf eller KDevelop på sin maskine. Filerne Makefile.am indgår også, ifald modtageren skal lave nogen ændringer i kildekoden. +Reglerne er væsentligt anderledes hvis du distribuerer via et netbaseret kildekodearkiv såsom KDE's CVS. + + + + +Sammendrag af hvad Håndtering af automake gør + + + Opretter filerne Makefile.am i undermapperne som det kender til som delprojekter. + Opdaterer filerne Makefile.am når projektstrukturen ændres. + Opdaterer filerne Makefile.am når filer tilføjes eller fjernes fra projektet. + Accepterer definitioner om hvordan de forskellige filer skal bygges eller installeres, og ændrer Makefile.am ifølge dem. + Accepterer parametre som bruges ved bygning eller installation (⪚ biblioteksnavne), og sikrer at de bruges i de nødvendige kompilerings- og byggeskridt. + + + + + +Indhold i automake-filer + +Filen Makefile.am har linjer som indeholder variabelnavne fulgt af et lighedstegn og en liste med filer eller parameterværdier. Variabler har todelte navne, såsom bin_PROGRAMS, mitpgm_SOURCES eller kdelnk_DATA. Den anden del kaldes den primære og repræsenterer noget som skal bygges eller installeres. Den første del kaldes præfiks og repræsenterer: + + En mappe hvor installationen skal gøres (⪚ bin), + En kvalifikation for den primære del (⪚ mitpgm for SOURCES, som angiver at kildekodefiler som er på listen efter mitpgm_SOURCES indgår i at bygge mitpgm. + Et særligt præfiks noinst (kort for ingen installation), som oftest bruges til en liste over programmets deklarationsfiler (.h), + Eller det specielle præfiks EXTRA, for indstillingsafhængige ting. + + +For mere information om Automake og filerne Makefile.am, slå det op i info Automake. +I hovedsagen laver og opdaterer Håndtering af automake variabelnavne og fillister eller parametre. Se følgende eksempel på en Makefile.am for et typisk program, som kaldes mitpgm. + +## 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 + + +Som du kan se er mange af objekterne på højresiden symboler på formen $(xxxx). De er miljøvariabler som defineres i selve &kde;-miljøet og erstattes med rigtige værdier når ./configure laver de endelige Makefile-filer på maskinen som tager imod programmet. + +Det er også en god ide at køre kommandoen ./configure --help 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: +./configure --prefix=/hvor/du/vil + som flytter hele installationen til en mappestruktur som du vælger, ved at ændre den interne variabel $(prefix) til værdien /hvor/du/vil. + + + + + + + + +Brug af Håndtering af automake + +I dette kapitel finder du en grundlæggende beskrivelse af elementerne i Håndtering af automake, og hvordan de bruges. Dette dækker: + Vinduet Håndtering af automake beskriver den grundlæggende struktur i hovedvinduet i Håndtering af automake. + Oversigtsvinduet beskriver elementerne i det øverst delvindue. + Detaljevinduet beskriver elementerne i det nederste delvindue. + Navigering i Håndtering af automake giver en liste af nogle grundlæggende handlinger du kan udføre i Håndtering af automake. + Sammenhængsafhængige menuer i Håndtering af automake beskriver menuerne som dukker op når du vælger en handling i Håndtering af automake. + + + + +Vinduet Håndtering af automake + + + + + + + + + + Håndtering af automake bruger et delt vindue. Den øverste del kaldes Oversigtsvinduet og den nederste del kaldes Detaljevinduet. 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. + Ovenfor hvert vindue er der en værktøjslinje, 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. + 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 lukke for vinduet. Prikknappen på den anden side, holder vinduet åbent 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.) + + + + + + + +Oversigtsvinduet + +Oversigtsvinduet indeholder en træliste med alle mapper i projektet som indeholder programfiler, dokumentation eller data. Hver sådan mappe indeholder en fil Makefile.am og er kendt som et delprojekt i Håndtering af automake. Der er tre typiske delprojekter i et &kde;-baseret projekt, som vises på billedet ovenfor: + + + src: kildekodefiler for programmet, + doc: brugermanualen eller håndbogen, + po—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). + + +Bemærk at delprojektet doc altid har et delprojekt som hedder en, som du kan se hvis du klikker på symbolet + før ordet doc. 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 da (dansk), de (tysk) eller fr (fransk). Strengene i delprojektet po kan også oversættes og opbevares i andre filer under po, for på den måde at lade programmet bruges af personer som ikke kan engelsk. + +Delprojekterne doc og po tjener forskellige formål. doc indeholder dokumentation, såsom en brugerhåndbog, mens po indeholder tekststrenge som kan oversættes fra brugergrænsefladen som indgår i programmets kildekode. + +Oversigtsvinduet virker—blandt andet—som et navigeringsværktøj. Hvis du vælger et delprojekt i oversigtsvinduet, vises tilsvarende detaljeret information i detaljevinduet. + + + + +Detaljevinduet + +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. + + +Mål + +Trælisten i detaljevinduet har to niveauer. Det øverste niveau består af såkaldte mål i Håndtering af automake, og næste niveau indeholder lister med filer som bruges for at oprette hvert mål. + +Dette begreb med et mål i Håndtering af automake, adskiller sig noget fra hvad et mål i en Makefile som oftest er. I korthed: + + Definitionen af hvordan et antal filer skal kompileres, bygges eller installeres er kendt som et mål i Håndtering af automake, men som en variabel i selve Automake. + Et mål i make er ofte noget helt andet, eftersom det kan være en parameter til kommandoen make (⪚ make install, make clean). + Visse af variablerne i Makefile.am repræsenterer dog et underliggende delmål for make. + + + + + + +Navigering i Håndtering af automake + +Både i oversigtsvinduet og detaljevinduet kan du venstreklikke på + eller - foran et delprojekt eller målnavn for at udvide eller trække trævisningen sammen. Hvis du gør dette med et delprojekt i oversigtsvinduet, vises eller skjules delprojektets næste underliggende niveau (hvis der er et sådant). Hvis du gør dette med et mål i detaljevinduet, vises eller skjules listen med filer som indgår i målet. + + + +Åbn en fil til redigering + +Hvis du venstreklikker på et filnavn i detaljevinduet, åbnes den tilsvarende fil i KDevelops redigeringsvindue. + + + + +Aktivér værktøjslinjeknapperne i Håndtering af automake + +Hvis du venstreklikker 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. + + + Du anbefales at bruge højre museknap og sammenhængsafhængige menuer, i stedet for knapperne i værktøjslinjen, eftersom det så er meget nemmere at se og forstå hvad du gør. + Handlinger for delprojekter og mål har langtvirkende effekter for struktur, kompilering, bygning og installation af programmet. + + + + + +Vælg handlinger og sammenhængsafhængige menuer + +Hvis du højreklikker 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. + + + + + + + +Sammenhængsafhængige menuer i Håndtering af automake + +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. + + + +Sammenhængsafhængig menu for en fil + +Når du højreklikker på et filnavn 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 hi-16app-myapp.png i målet Ikondata i kde_icon fra delprojektet myapp/src. + + + + + + + + + + Hovedpunktet i den sammenhængsafhængige menu er at Fjerne filen fra målet (&ie; den kommer ikke længere at blive brugt til at kompilere, bygge eller installere dette mål). + Punktet CVS tilbyder en hel del forskellige CVS-handlinger for filen. + Punktet Åbn med lader dig åbne filen med et antal editorer eller med et hvilket som helst program (⪚ kan du åbne ikonfilen i vort eksempel med Kiconedit). + Punktet Perforce bruges til lignende handlinger som i CVS, men med det kommercielle versionshåndteringssystem Perforce. + + + + + + + +Sammenhængsafhængig menu for et mål + +Når du højreklikker på et mål 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 myapp (Program i bin) i delprojektet myapp/src. + + + + + + + + + + Punktet Indstillinger 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. + Punktet Opret ny fil viser en dialog hvor du kan angive filnavnet og filtypen som skal laves (i et dropned-felt). + Punktet Tilføj eksisterende filer viser en dialog hvor du kan tilføje en eksisterende fil til målet. + Punktet Fjern for et mål lader dig logisk fjerne målet og alle dets filer fra projektstrukturen. + Punktet Gør mål aktivt gælder kun for mål som indeholder kildekodefiler. Nye filer tilføjes altid til et sådant aktivt mål. + Punktet Byg mål kalder alle nødvendige kompilerings- og byggehandlinger for at bygge koden kun for dette mål. + + + + + + + +Sammenhængsafhængig menu for et delprojekt + +Når du højreklikker på et delprojekt 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. + + + + + + + + + + + Punktet Indstillinger 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. + Punktet Tilføj delprojekt laver en ny mappe og Makefile.am skeletfil. + Punktet Tilføj mål viser en dialog, hvor du kan indstille regler for kompilering, bygning eller installation for en filgruppe inde i delprojektet. + Tilføj tjeneste (... endnu ikke skrevet ...) + Tilføj program (... endnu ikke skrevet ...) + Tilføj eksisterende delprojekt (... endnu ikke skrevet ...) + Punktet Fjern delprojekt i den sammenhængsafhængige menu for et delprojekt er den rigtige måde at fjerne et delprojekt. Det justerer filerne Makefile.am 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. + Punktet Byg kalder alle nødvendige kompilerings- og byggehandlinger for at bygge koden kun for dette delprojekt. + Påtving omredigering (... endnu ikke skrevet ...) + Ryd (... endnu ikke skrevet ...) + Installér (... endnu ikke skrevet ...) + Installér (som systemadministrator) (... endnu ikke skrevet ...) + + + + + + + + + + + + + +Automake-projekt +autoprojekt +&automake; +&autoconf; +&libtool; + +(... endnu ikke skrevet ...) + + + +Autoconf +configure-scriptet +config.status-scriptet +Makefile.in +config.h.in + +Makefile.in til Makefile + +prefix = @prefix@ +INSTALL = @INSTALL@ +build_triplet = @build@ +CXX = @CXX@ + + +prefix = /home/bernd/kde3 +INSTALL = /usr/bin/ginstall -c -p +build_triplet = i686-pc-linux-gnu +CXX = g++ + + +config.h.in til config.h + +/* Define if you have libz */ +#undef HAVE_LIBZ +/* The size of a `int', as computed by sizeof. */ +#undef SIZEOF_INT + + +/* Define if you have libz */ +#define HAVE_LIBZ 1 +/* The size of a `int', as computed by sizeof. */ +#define SIZEOF_INT 4 + + + + + + +Automake + +(... endnu ikke skrevet ...) + + + + + +KDevelops Håndtering af automake + +
+Et skærmaftryk af Håndtering af automake + + + +
+ +
+ + + +Bygning og installering af biblioteker + + + +-rpath +PIC +static +plugins: no-undefined + + + + + +
+ + + + +Egne byggefiler og byggescripter +Makefile +build.xml + +(... endnu ikke skrevet ...) + + + + + + +Oversætterindstillinger + +(... endnu ikke skrevet ...) + + + + + + +Byggetilvalg + +(... endnu ikke skrevet ...) + + + +
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 @@ + + + + + BerndPol + + + + +Indstilling af &tdevelop; + +&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 OpsætningIndstil &tdevelop;.... 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. + + + + + + + +Vælg er indstillingspunkt + + Vælg er indstillingspunkt + + + +Vi vil diskutere disse indstillinger i en anden rækkefølge, opdelt i hovedemnerne Generel indstilling, Indstilling af dokumentation og Avanceret indstilling hvilket giver en mere intuitiv læsning. +Hvis du ønsker at slå et bestemt indstillingspunkt op, så brug et af følgende link. + + + Generelt + Brugergrænseflade + Filskabeloner +Editor + Forkortelser + Scripter + Værktøjer-menu + Eksterne værktøjer + Dokumentation + Kodestumper + Filliste + Filvælger + Opret ny klasse i C++ + Formatering + Tolkning af C++ + + + +Generelle indstillinger + +Generel indstilling drejer sig om de mere almindelige opgaver af at skræddersy &tdevelop; som følger: + + + Generel opsætning + + + Valg af brugergrænsefladen + + + +Kilderedigeringsopgaver + + Valg ef editor + + + Valg af kildeformateringsstil + + + Opsætning af værktøj for kodestumper + + + + + Indstilling af filvælgeren + + + + +Generel opsætning + +Den Generelle indstillingsdialog tillader dig at definere nogen basal &tdevelop;-opførsel som sjældent ændres i dagligt arbejde. Dette drejer sig om: + + + +Generelle projekttilvalg såsom + + + at definere en standard overmappe &tdevelop; skal bruge til nye projekter. + at afgøre om du ønsker at &tdevelop; skal automatisk indlæse projektet du sidst arbejdede på. + + + + + +Valg af en skrifttype for de mest almindeligt brugte vinduer til uddatavisning, nemlig: + + + + +Besked uddatavisningen &tdevelop; bruger til at kommunikere ⪚ kompileringsfremskridt, og + + +Programuddata, som viser fejl- og tilstandsinformation angående et program som kører. + + + + + + + +Nogen almindelig opførsel angående de viste linjer i Besked uddatavisningens vindue, nemlig: + + + +Om lange linjer skal ombrydes, og + + +om mappeindgangs og udgangsbeskeder udstedt af make skal vises. + + + +detaljeniveauet af beskeder angående kompileringsprocessen vist i Besked uddatavisningens vindue. + + + + + + + + + + Den generelle indstillingsdialog + + + + + +Indlæs sidste projekt ved opstart + +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. + + + + + +Standard-projektmappe: + +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. +Du kan naturligvis ændre mappestien for et nyt projekt på det tidspunkt du sætter det op med Programguiden. + + + + +Vindueskrifttype: + +Program uddatavisningens 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å. +For at vælge en passende skrifttype for beskeduddatavisningens vindue klikkes på Vinduesskrifttype-knappen der viser den for øjeblikket valgte skrifttype (den siger Luxi Sans i illustrationen ovenfor). &kde;'s standard Vælg skrifttype dialog vil komme frem og herfra kan du vælge den skrifttype du ønsker skal bruges. +Ved første opstart initialiserer &tdevelop; denne skrifttypeindstilling til at være den standardskrifttype der er blevet indstillet for din &kde;-bruger. Denne indstilling er fast, så hvis du ændrer IndstillingerUdseende & TemaerSkrifttyper i kontrolcenteret, vil dette ikke påvirke denne &tdevelop; indstilling. Du vil eksplicit skulle vælge skrifttype igen for at ændre Besked uddatavisnings skrifttype. + + + + +Oversætteruddata + +&tdevelop; forbehandler beskederne som Besked uddatavisningens vindue modtager under byggeprocesser for at filtrere overflødig information bort. Du kan kontrollere detaljeniveauet &tdevelop; vil vise ved at bruge dette dropned-felt. + + +Meget kort +Viser kun advarsler, fejl og filnavnene som bliver kompileret. + + +Kort +Undertrykker alle kompiler-flag og formaterer uddata til at være mere læseligt. + + +Fuld +Viser alle uddatabeskeder uændret. + + + +Der er en anden måde at ændre detaljeniveauet for uddata fra kompileren. Højreklik blot i Besked uddatavisningens vindue og vælg et passende detaljeniveau fra menuen der kommer frem. + + + + +Tekstombrydning + +Som standard vil &tdevelop; bryde lange linjer i Besked uddatavisningens 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. +Der er en anden måde at ændre linjebrydning. Klik blot i Besked uddatavisningens vindue og markér/afmarkér Tekstombrydning-indgangen i menuen som vil komme frem. + + + + +Mappenavigeringsbeskeder + +make-værktøjet vil sædvanligvis vise beskeder såsom Entering directory, eller Leaving directory når det skifter mellem de mapper det arbejder i for øjeblikket. Da dette roder i beskedlisten i Besked uddatavisningens vindue, undertrykker &tdevelop; disse beskeder som standard. Markér afkrydsningsfeltet hvis du ønsker at protokollere hvilke mapper make arbejdede i. +Æ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. + + + + +Integrering med Designer for grafisk grænseflade + +Dette lader dig vælge hvordan du ønsker at .ui-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 .ui-filer. + + Brug &tdevelop;s indlejrede Designer Dette bruger &tdevelop;s egen Designer indlejret i &tdevelop;. + Kører &tdevelop; Designer som et separat program Programmet KDevDesigner køres separat i et eget vindue. + + + + + + KDevDesigner i eget vindue + + + + Kør Qt Designer Qt-Designer fra installationen af Qt vil blive startet eksternt, når du klikker på en .ui-fil i &tdevelop;. + + + + + +Terminalemulering + +Her vælger du hvilken terminal du vil skal integreres i KDevelop. + + Brug &kde;-indstilling Bruger &kde;'s indstilling som angives i Kontrolcentret under fanebladet &kde;-komponenterKomponentvælger, som angiver hvilket terminalprogram som bruges af alle &kde;-programmer som behøver en terminal. + Anden Vælg en anden terminal som er forskellig sig fra standard. + + + + + + + + + + +Valg af brugergrænsefladen + + + brugergrænseflade + skifte tilstand + + skifte grænsefladetilstand + +Som allerede sagt i kapitlet Tilgængelige brugergrænseflade-tilstande er der fem forskellige måder &tdevelop;'s arbejdsområde kan sættes op, nemlig: + + + Forenklet IDEA-vinduestilstand + 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. + + IDEA-vinduestilstand + Dette er en klon af IDEA-brugergrænsefladen som ligner fanebladssidetilstand, og er standardtilstanden. + + Underrammetilstand + 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. + + Fanebladssidetilstand + 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. + + Topniveauvinduetilstand + 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. + + +For at skifte tilstand for brugergrænsefladen, vælges Opsætning Indstil &tdevelop;... i menulinjen. Dialogen Indstil &tdevelop; dukker op, hvor du skal vælge Brugergrænseflade i træet til venstre. Dette bringer dig til indstillingssiden som vises til højre. + + + + + + +Vælg en brugergrænsefladetilstand + Vælg en brugergrænsefladetilstand + + + +Vælg radioknappen for grænsefladestilstanden du vil skifte til, og klik derefter på O.k. + +Glem ikke at genstarte &tdevelop; for at lade nogen af disse ændringer få virkning. + +Når du vælger entenSimplificeret IDEAl vinduestilstand eller IDEAl vinduestilstand eller Fanebladssider tilstanden vil to indstillingsafsnit mere blive tilgængelige: Brug faneblade og Brug luk ved svævning. 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. + +I Simplificeret IDEAl vinduestilstand og i IDEAl vinduestilstand er der kun et til indstillingsafsnit, Værktøjsvisningens faneblads-layout som effektivt tillader at vælge mellem forskellige størrelser af værktøjsvisningens faneblade, som omgiver hovedarbejdsområdet i denne tilstand. + + + +Indstilling af dokumentationens visning af fanebladslinje + +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 Brug faneblade. + + + + Altid + 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. + + + Når der er mere end én + 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 afsnittetAltid 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. + + + Aldrig + 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 Vindue-menu. + + + + + + +Opsætning af at lukke et dokument ved at klikke på dets faneblad + +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 Brug luk ved svævning til dette. + + + + Nej + Dette er standardopførslen. Ingen ekstra funktionalitet er tilføjet fanebladene. De kan kun bruges til at vælge dokumentvinduer ved klik med &LMB;. + + + Ja + 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. + + + Ja, forsinket + Hvis denne radioknap er valgt, vil &tdevelop; tillade at lukke et dokumentvindue som vist i Ja-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. + + + + + + +Indstilling af værktøjslinjens faneblads-layout + +Indstillingsafsnittet Værktøjsvisningen faneblads-layout 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. + + + + Ikoner + + 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. + 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. + + + + Tekst + Dette er standardværktøjsvisningens fanebladsvisningstilstand. Hvert faneblad viser navnet på sin tilknyttede værktøjsvisning. + + + Tekst og ikoner + 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 Foldede værktøjsvisnings-faneblade nedenfor for et eksempel. + + + + + + +Foldede værktøjsvisningfaneblade + +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: + + + + + + +Værktøjsvisningens faneblade foldet til ikke at blive skjult bag et andet vindue + Værktøjsvisningens faneblade foldet til ikke at blive skjult bag et andet vindue + + + +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. + + + + + + + +Filskabeloner + + + + + + + +Indstil filskabeloner + Indstil filskabeloner + + + + + +Valg af editor + +&tdevelop; tillader dig at vælge din foretrukne teksteditor. Markér Editor-indgangen i venstre side af markeringstræet i Indstil KDevelop-vinduet. Følgende dialog vil så blive vist i højre side. + + + + + + +Valg en editor + Vælg en editor + + + +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 Vigtigt noten nedefor om dette). Klik på den editor du foretrækker og klik på O.k. For øjeblikket er der to muligheder: + + + + Indlejret avanceret teksteditor + Dette er &kde;'s standard Kate editor-part. + + + + Qt Designer baseret teksteditor + Dette er den editor &Qt; sørger for i sin Designer komponent. + + + +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 Besked uddatavisningens vindue, er der sørget for. + +Æ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. + +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. + +Hvad der skal gøres hvis filen er ændret eksternt: + + + Gør ingenting + Filen markeres som ændret eksternt, og brugeren bliver bedt om at bekræfte alle forsøg på at overskrive den. + + + Underret brugeren + En dialog underretter brugeren at filen er ændret, og tilbyder brugeren at opdatere filen. + + + Genindlæs filen automatisk hvis det er sikkert, underret ellers brugeren + Alle filer som ikke er ændrede i hukommelsen, opdateres og en advarsel vises ved eventuelle konflikter. + + + + + +Forkortelser til ordkomplettering + +(... endnu ikke skrevet ...) + + + +Scripter + +(... endnu ikke skrevet ...) + + + +Tilføjelse af &kde;'s standardprogrammer til værktøjsmenuen + +(... endnu ikke skrevet ...) + + + +Tilføjelse af eksterne programmer til menuerne + +(... endnu ikke skrevet ...) + + +Tilføjer til værktøjsmenuen + +(... endnu ikke skrevet ...) + + + +Tilføjelse til Fil-sammenhængsmenu + +(... endnu ikke skrevet ...) + + + +Tilføjelse til mappesammenhængsmenu + +(... endnu ikke skrevet ...) + + + + + +Valg af kildeformateringsstil + +&tdevelop; formaterer automatisk en kildetekst i en prædefineret stil. Denne stil er meget indstillelig. + +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 astyle-programmet til at implementere denne funktion. + +For at indstille en specifik formateringsstil, vælges Opsætning Indstil &tdevelop;... fra menulinjen. Brugerindstil &tdevelop; dialogen vil komme frem, hvor du skal vælge Kildeformatering i træet til venstre. Dette vil vise en serie af tre indstillingsdialogfaneblade til højre, nemlig en Generel formatering opsætning, a Indrykningsstil opsætning, og en Anden formatering opsætning. + +Enhver ændring af stil anvendes kun på ny tekst. Hvis du ønsker at ændre formateringsstil for en allerede eksisterende kildetekst må du eksplicit bruge RedigérOmformatér kilde-kommandoen. + +Det nøjagtige resultat af disse stilformateringsdefinitioner afhænger af den editor du bruger. For øjeblikket er de fleste indstillinger skræddersyet til Kate editor-parten (den Indlejrede Avancerede Tekst Editor). 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. + +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. + + +Generel formateringsopsætning + +Generelt-fanebladet i Kildeformaterings-dialog lader dig vælge en ud af fem prædefinerede kildeformat-stiler. + + + + + + +Generel opsætning af kildeformat-stil + Generel opsætning af kildeformat-stil + + + +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 Brugerdefineret for oven, og definere din egen kildeformateringstil i de andre to faneblade der så vil blive tilgængelige. + +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. + + + + +Opsætning af indrykningsstil + +Korrekt indrykning er en af hovedmetoderne til at øge læseligheden af en kildetekst. Hvis du vælger Indrykningsfanebladet i Formatering af kildekodedialogen, vil du blive præsenteret for en serie af valg for indrykningsformatering, grupperet i tre felter som følger. + + + + + + +Opsætning af indrykningsstil + Opsætning af indrykningsstil + + + + + +Standard-opsætning + +Det forudindstillede valg vil få kildeteksten til at ligne ANSI formateringsstil: + +namespace foospace +{ + int Foo() + { + if (isBar) + { + bar(); + return 1; + } + else + return 0; + } +} + + + + + +Definition af indrykningsbredde og tegn + +Radioknapperne grupperet i Udfyldningsgruppen definerer hvordan indrykninger i kildeteksten vil blive tegnet. + + + + Brug tabulatorer + + 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 OpsætningIndstil editor... til at omdefinere det. + Den egentlige procedure for defintion af tab-bredde afhænger af den editor du valgte i Valg ef editor indstillingstrinnet. Du vil skulle slå op i den tilsvarende editors hjælp for at find ud af det. + + + + Brug mellemrum + 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. + + + + + + +Indrykkede entiteter + +Dette definerer hvilke af (C/C++) entiteterne der vil blive formateret med en ekstra indrykning udover det nuværende indrykningsniveau. + +Som standard er det kun navnerum og etiketter der bliver ekstra indrykket. Du vil måske ønske at eksperimentere med forskellige indstillinger for at skræddersy disse ekstra indrykninger efter din smag. + + + + +Fortsættelse + +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. + +Dette gælder kun statisk tekstombrydningstilfalde 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. + + + + Maksimum i udsagn + + 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. + 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. + + + + Minimum i betinget + + 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. + Standarden er sat til To gange det nuværende hvilket betyder at fortsatte betingede vil få et ekstra indrykningsniveau på den standard indrykningsstørrelse du valgte i Udfyldning-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. + + + + + + + + + + +Anden opsætning af formatering + + + + + + +Anden opsætning af kildeformateringsstil + Anden opsætning af kildeformateringsstil + + + + + +Kontrol af placering af parenteser + +Radioknapperne (noget misvisende) Parentes-grupper kontrollerer positionen af blokafgrænsningsparenteser i en (C/C++) kildetekst. Der er tre muligheder ud fra hvilke du kan vælge. + + + + Brud + + 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. + +namespace foospace +{ + int Foo() + { + if (isBar) + { + bar(); + return 1; + } + else + return 0; + } +} + + + + + Tilknyt + + Dette vil holde åbningsparentesen for en blok på linje med blokhovedets udsagn. Afsluttende parenteser vil være på samme indrykningsniveau som blokkens hovedudsagn. else for et if udsagn vil blive holdt på linje med de afsluttende parenteser for den foregående blok. +namespace foospace { + int Foo() { + if (isBar) { + bar(); + return 1; + } else + return 0; + } +} + + + + + Linux-stil + + 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. +namespace foospace +{ + int Foo() + { + if (isBar) { + bar(); + return 1; + } else + return 0; + } +} + + + + + + + + +Kontrol af ekstra mellemrum + +Som standard minimerer &tdevelop; brugen af mellemrum i kildetekster. + + +if (isBar(fooArg)==barValue) + + +Du vil måske øge læsbarheden hvis du tvinger kildeformateringen til at indsætte ekstra mellemrum på specielle steder. + + + + Tilføj mellemrum rundt om parenteser + + 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. +if ( isBar( fooArg )==barValue ) + + + + + Tilføj mellemrum omkring operatorer + + Dette vil putte mellemrum omkring tilknytnings- og sammenligningsoperatorer for at øge læsbarheden. +if (isBar(fooArg) == barValue) + + + + + + + + +Kontrol af formateringen af en-linjes konstruktor + +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. + + + + Behold en-linjes udsagn + Dette holder en-linjes udsagn sammen i visse situationer, selv om de går udover en fast maksimal linjelængde. + + + Behold en-linje blokke + Dette holder en-linjes blokke sammen i visse situationer, selv om de går udover en fast maksimal linjelængde. + + + + + + + + + + + + +Opsætning af værktøjet for kodestumper + +Når der redigeres i &tdevelop; kan du ofte opbevare brugte dele af kode som Kodestumper. For at indstille mulighederne med kodestumper vælges Opsætning Indstil &tdevelop;... i menulinjen. Dialogen Indstil &tdevelop; dukker op, hvor du skal vælge Kodestumper i feltet til venstre. Dette bringer dig til følgende indstillingsdialog som vises til højre: + + + + + + +Indstilling af værktøjet for kodestumper + Indstilling af værktøjet for kodestumper + + + + + +Aktivér forhåndsvisning af kodestump + +Markér Vis kodestumpens tekst som værktøjsvink hvis du ønsker at vie den opbevarede tekst som et værktøjsvink, når du holder musemarkøren titlen på kodestumpen. + + + + +Arbejde med kodestumpsvariabler + +Kodestumper-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 Kodestumper sin egen variabel mekanisme. Du kan indstille dens opførsel i Variabler-gruppen. + + + + Afgrænser + Kodestumper-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 $-tegn ændres i Afgrænser-feltet. + + + Inputmetode for variabler + + Enkelt dialog for hver variabel indenfor en kodestump – vil få en adskilt dialog frem for hver variabel som værktøjet finder når den valgte kodestump indsættes. + En dialog for alle variabler indefor en kodestump – vil få en fælles dialog frem hvor brugeren skal udfylde værdierne for alle variabler før kodestumpen vil blive indsat + + + + + + + + + + +Filliste + +(... endnu ikke skrevet ...) + + + + +Indstilling af filvælger + +&tdevelop; sørger for en Filvælger-plugin som, når den bliver indlæst ved opstart, tillader at navigere til en vilkårlig fil eller mappe på systemer. + + + + + + +Filvælgeren IDEAl-tilstand + Filvælgeren (IDEAl-tilstand) + + + +Filvælgerens opførsel kan indstilles.Vælg Opsætning Indstil &tdevelop;... i menulinjen. Dialogen Indstil &tdevelop; dukker op, hvor du skal vælge Filvælger i feltet til venstre. Dette bringer dig til følgende dialog som vises i højre side: + + + + + + + +Indstilling af filvælger + Indstilling af filvælger + + + + + +Indstilling af værktøjslinje + +Der er en værktøjslinje foroven i Filvælgeren som kan indstilles som sædvanligt i Værktøjslinje-gruppen. + + + Tilføj en handling til værktøjslinjen + + Vælg et punkt i listen til højre Valgte handlinger hvorefter de nye handlinger skullevære indsat. + + + Vælg den handling der skal indsættes i listen til venstre Tilgængelige handlinger. + + + Klik på den øverste (højre) pil mellem de to lister. + Handlingen vil blive fjernet fra listen afTilgængelige handlinger og indsat i listen af Valgte handlinger under det valgte punkt. + + + + + Fjern en handling fra værktøjslinjen + + Vælg punktet der skal fjernes i listen i højre side Valgte handlinger. + + + Klik på den nederste (venstre) pil mellem de to lister. + Det valgte punkt vil blive fjernet fra listen af Valgte handlinger og puttet tilbage i listen af Tilgængelige handlinger. + + + + + Omarrangér handlingerne på værktøjslinjen + + Vælg handlingen der skal flyttes i listen til højre Valgte handlinger. + + + Klik på op- eller ned-pilen til højre for denne liste. + Det valgte punkt vil blive flyttet op eller ned på listen af Valgte handlinger. + + + + + + +Definition af hvornår indhold skal ændres + +Opdatering af indholdet i Filvælger-vinduet tager tid og ressourcer, især når der skiftes til en anden mappe. Derfor er Filvælgeren 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. + +Klik på Genindlæs-knappen i værktøjslinjen for at opdatere indholdet af Filvælgeren. Denne værktøjslinjeknap er imidlertid ikke til stede som standard. Du skal først indsætte den der. + +Du kan indstille Filvælgeren til at reflektere visse ændringer i dit arbejde med det samme. Indstillingerne i Auto-synkronisering-gruppen af indstillingsdialoge er ansvarlige for dette. + + + + Når et dokument bliver aktivt + Hvis du afkrydser dette felt, vil indholdet i Filvælger-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 Filbælgeren skifte til mappen som filen tilhører og opdatere visningen til at vise det egentlige indhold der. + + + Når et dokument åbnes + Hvis du afkrydser dette felt, vil indholdet i Filvælger-vinduet blive opdateret hver gang et dokument bliver åbnet, ⪚ med FilÅbn-menuen. Om nødvendigt vil Filbælgeren skifte til mappen som filen tilhører og opdatere visningen til at vise det egentlige indhold der. + + + Når en filvælger bliver synlig + Hvis du afkrydser dette felt, vil indholdet i Filvælger-vinduet blive opdateret når den bliver synlig igen. Om nødvendigt vil Filbælgeren skifte til mappen som filen tilhører og opdatere visningen til at vise det egentlige indhold der. + + + +Du kan frit kombinere disse indstillinger for at skræddersy aktualiseringsopførslen af Filvælgeren efter din smag. + + + + +Kontrol af historikken for kombinationsfelterne + +Der er to kombinationsfelter foroven og forneden i Filvælgerens 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. + + + + Husk steder + Indtast det maksimale antal mappevalg det øverste kombinationsfelt skal huske. + + + Husk filtre + Indtast det maksimale antal filterdefinitioner det nederste kombinationsfelt skal huske. + + + +Kontrol af hvad der skal huskes mellem sessioner + +Som standard er Filvælgeren sat op så den viser den sidste session igen ved næste opstart af &tdevelop;. Du kan ændre denne opførsel i Session-indstillingsgruppen. + +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. + + + + + Genopret sted + + Fjern mærket fra afkrydsningsfeltet hvis du ikke ønsker at det viste sted skal huskes mellem sessioner. + Hvis du valgte en af opdatér automatisk indstillingerne vil det viste sted muligvis blive ændret automatisk uanset hvad der er blevet husket fra nylige sessioner. + + + + Genopret filtre + + Fjern mærket fra afkrydsningsfeltet hvis du ikke ønsker at de anvendte filtre skal huskes mellem sessioner. + + + + + + + + + + +Opret ny klasse i C++ + +(... endnu ikke skrevet ...) + + + + +Formatering + +(... endnu ikke skrevet ...) + + + + +Tolkning af C++ + +(... endnu ikke skrevet ...) + + + + + + + + +Indstilling af dokumentationen + +&tdevelop; indeholder en meget kraftig dokumentationsfacilitet som sørger for adgang til adskillig slags ekstensiv dokumentation. ⪚ i IDEAl-tilstand finder du et Dokumentationsfaneblad i højre kant af arbejdsområdet. + + + + + + +&tdevelop;'s dokumentationsvinduet i IDEAl-tilstand + &tdevelop;'s dokumentationsvinduet (IDEAl-tilstand) + + + +&tdevelop; skal have indlæst Dokumentation-plugin for at kunne vise dokumentationsvinduet. Se afsnittet Plugin-værktøjer for mere info. + +Du kan indstille indholdet af dette dokumentationstræ hvis du vælger Opsætning Indstil &tdevelop;... i menulinjen. Dialogen Indstil &tdevelop; dukker op, hvor du skal vælge Dokumentation i feltet til venstre. + +Den viste indstillingsside viser en serie af indstillingsdialoger som fanebladsider, nemlig: + + + Dokumentationssamlinger + Fuld tekstsøgning + Andet + + + +Opsætning af dokumentationssamlinger + +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 Indhold-siden i &tdevelop;Dokumentation funktionen og hvordan brugeren får adgang til dokumentationsdetaljer gennem indekserede og fuldtekstsøgninger. +Fanebladet Dokumentation 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. + + &Qt; dokumentationssamling + CHM dokumentationssamling + Doxygen dokumentationssamling + &tdevelop; TOC dokumentationsamling + Devhelp dokumentationssamling + Brugerdefineret dokumentationssamling + + + + + + + + +Indstilling af dokumentationssamlinger + Indstilling af dokumentationssamlinger + + + + + +Almindelig opsætning af dokumentationen + +Alle indstillingssiderne på Dokumentation 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. + + + +Knapper til ændring af dokumentationsliste + +Der er tre knapper til rådighed til at vedligeholde indholdet af dokumentationsopsætningssiderne: + + + + Tilføj + + Åbner en Dokumentationssamlingsegenskaber-dialog, som vist herunder, hvor du kan ændre kildeplaceringen af dokumentationen der skal tilføjes og hvor du også kan navngive den. + + + + Redigér + + Åbner en Dokumentationssamlingsegenskaber dialog, som vist herunder, hvor du kan ændre kildeplaceringen af dokumentationen allerede valgt på listen og omdøbe den. + + + + Fjern + + Fjerner den valgte dokumentationsindgang fra listen. + Indgangen bliver fjernet kun fra listen. Den egentlige dokumentationskilde bevares. Du skal bruge en anden metode for at fjerne den eksplicit. + + + + + + + + + + Tilføjelse eller ændring af en indgang til dokumentationen. + + + +Knappen til højre for Sted feltet, åbner en mappedialog, hvis indgange normalt bliver filtreret i henhold til den valgte indstilingssides filtype. +Titelfeltet er ikke altid tilgængeligt. Det afhænger af dokumentationstypen. + + + +Dokumentationstræstruktur + +Hver dokumentationsindstillingsside viser dokumentationsindgangene i en tabel med fire søjler. + + + + TOC + + Hvis dette felt er afkrydset vises dokumentationsindgangen i Indholdsfortegnelsen i &tdevelop;s Dokumentationfunktion. + Ved at fjerne afkrydsningen i TOC afkrydsningsfeltet, fjerner skiftevis afkrydsningerne i Indeks og Søg, se herunder. Derfor kan du ikke have dokumentationssamlingsindgange indekseret men ikke vist i indholdsfortegnelsen. + + + + Indeks + + Hvis dette afkrydsningsfelt er afkrydset, bygges der et internt indeks af denne dokumentationsindgang. Dette medfører hurtig adgang til dokumentationen vha. Indeks og (valgfrit) Finder siderne i &tdevelop; Dokumentationsfunktionen. + + Det interne indeks bygges første gang brugeren vælger Indekssiden. Dette gør første tilgang til indekset temmelig langsom fordi indekset skal læses fra disken og derefter lægges i cache. + Alle følgende indekssøgninger derimod, vil benytte denne cache og derfor virke markant hurtigere. + + + + + Søg + + Hvis dette afkrydsningsfelt er markeret, bliver indholdet af denne dokumentationsindgang inkluderet i fuldtekstsøgestien i Søgesiden i &tdevelop;s Dokumentationfunktion. + + &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. + En ændring i Søg-afkrydsningsfeltet har dermed først effekt på søgninger efter du har bygget indekset på ny, i &tdevelop;s Dokumentationfunktion. + + + + + Titel + Dette er navnet på dokumentationsindgangen som den vil blive vist i Indhold-sfortegnelsen i &tdevelop;s Dokumentationfunktion. + + + +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. + + + + + + + +&Qt;-dokumentationssamlinger + +På denne indstillingsside indstilles al &Qt;-dokumentation. + + + + + + +Opsætning af &Qt;-dokumentationssamlinger + Opsætning af &Qt;-dokumentationssamlinger + + + +Normalt vil &tdevelop; udfylde denne ved sin første opstart. Den leder efter standarddokumentationsfiler, *.xml, eller *.dcf, i &Qt;'s installationskatalog. Tabellen til venstre giver en liste af de filer &tdevelop; fandt, med deres standardtitler. + +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 knapperne til højre for listefeltet. + +&tdevelop; bruger titlerne fra &Qt;-dokumentationen. Derfor er Titelfeltet i Dokumentationssamlingerdialogen ikke tilgængelig. + +Som standard vises ikke al &Qt;-dokumentation i Indholdsfortegnelsen i &tdevelop;s Dokumentationfunktion. Brug TOC-afkrydsningsfeltet i tabelindstilling for at vælge dokumentationen der skal vises. + +Hvis du vil have noget specifikt &Qt;-dokumentation inkluderet i søgeindekset eller fuldtekstsøgning, så brug Indeks og Søg-afkrydsningsfeltet i tabelindstilling. + + + + +Opsætning af CHM-dokumentationssamlinger + +På denne indstillingsside kan du samle dokumentation der følger &Microsoft;s CHM hjælpefilstandard. + + + + + + +Opsætning af &Microsoft;s CHM dokumentationsfiler. + Opsætning af &Microsoft;s CHM dokumentationsfiler. + + + +Som standard er denne indstillingsside, som vist ovenfor, tom. Du kan tilføje nye indgange ved at bruge knapperne til højre for listen. &tdevelop; filtrerer *.chm-filer i mappedialogerne der hører til Tilføj og Redigér-knapperne. + +For mere information om &Microsoft;s *.chm-filformat, se ⪚ PHP: Dokumentation - Udvidet CHM format på http://de2.php.net/docs-echm.php. + + + + +Dokumentation genereret af doxygen + +På denne indstillingsside opsættes al &API;-dokumentation genereret af &doxygen;. + + + + + + +Opsætning af Doxygen-genereret &API;-dokumentation + Opsætning af Doxygen-genereret &API;-dokumentation + + + +Kort sagt dokumenterer en &API;-grænsefladen til visse biblioteksfunktioner. &API;-dokumentation på denne side skal laves af det eksterne &doxygen;-værktøj. +&doxygen;-generet &API;-dokumentation, består af en samling html-filer, der starter med index.html. Derudover kan der eksistere tag-filer som indeholder information om hvordan der linkes til eksisterende &API;-dokumentation. Derfor leder &tdevelop; efter index.html og *.tag-filer når der søges efter &doxygen;-genereret &API;-dokumentation. +Der antages nogle strukturelle begrænsninger når der søges efter &doxygen;-genereret &API;-dokumentation. Kataloget hvori index.html-filen ligger, skal indeholde underkataloger med adskilte dokumentationssamlinger. Hver af disse underkataloger antages at indeholde en .tag-fil og et html/ underkatalog. +Du kan tage et kig i $KDEDIR/share/doc/HTML/en/tdelibs-apidocs hvor der findes et eksempel på et sådant layout for dokumentation af programmeringsgrænseflade med &doxygen;. + +Det ældre &kde; KDoc genererede &API;-format er ikke længere direkte understøttet. Hvis du stadig vil bruge den slags dokumentation, kan du tilføje det på Brugerdefineret documentationsamlinglssiden. + +&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: + + + Enten gav du configure kommandoen flaget da du kompilerede &tdevelop; (se Hvordan man får fat på en &tdevelop; &API; dokumentation-kapitlet). + Eller configure kommandoen fandt automatisk en &doxygen; genereret &kde;-biblioteker &API; på et af de adskillige standardsteder den kender til. + Eller som sen sidste udvej $KDEDIR/share/doc/HTML/en/tdelibs-apidocs/ blev fundet ved første opstart af &tdevelop;. + + +Hvis &tdevelop; ikke fandt en gyldig &doxygen; genereret &kde;-&API; ved sin første opstart, vil listen med Doxygendokumentationssamlingen være tom. + +Du kan tilføje dine egne &API;-dokumentationsindgange (⪚ fra dine aktuelle projekter) ved at bruge knapperne til højre. Hvis du vil inkludere dem i den indekserede og eller fuldtekstsøgning, så afkryds Indeks ellerSøg afkrydsningsfeltet i tabelindstilling. + +&tdevelop; bruger titelinformationen fra index.html. Derfor er Titelfeltet i Dokumentationsamlingsdialogen ikke tilgængelig. + + + &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 kilderne (ved brug af make apidox og make install kommandoerne i tdebases kilder) og så tilføje en indgang til Doxygen dokumentationssamlingslisten sådan her: + + + + +Tilføjelse af &kde;'s basis-&API; til listen + Tilføjelse af &kde;'s basis-&API; til listen + + (Du skal naturligvis erstatte /home/dev/mitkde-system/-kataloget i Stedfeltet, med stien til din egen &kde;-installation.) + + +Du er nødt til også at lægge dit nuværende projekts &API; ind i Doxygendokumentationssamling. I tidligere &tdevelop;udgaver lagde det ind i dokumentationen for hvert enkelt projekt. Dette er ikke længere understøttet. + + + + +Håndtering af struktureret dokumentation (KDevelopTOC-filer) + +Hoveddelen af &tdevelop;'s dokumentationstræ sørger for umiddelbar adgang til struktureret dokumentation, lokal så vel som ekstern. Du kan indstille dette i KDevelopTOC dokumentationssamling-fanebladet i Dokumentationsamlinger-indstillingssiden. + + + + + + + Sørger for KDevelopTOC-struktureret dokumentationsadgang + + + +&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 TOC afkrydsningsfeltet i tabelindstilling. + +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 .toc-fil få et manuelt defineret indeks, ved at bruge <index> mærket. Derfor vil Indeks afkrydsningsfeltet kun være aktiveret når &tdevelop; finder et <index> mærke i .toc -filen. (For mere information, se beskrivelsen herunder i &tdevelop; TOC Filer sektionen.) +Søg afkrydsningsfeltet i tabelindstilling vil altid være deaktiveret. + +Du kan tilføje nye indgange ved at bruge knapperne til højre for listen. &tdevelop; vil filtrere *.toc-filer i mappedialogerne der hører til Tilføj og Redigér-knapperne. + +Kun i ældre udgaver af &tdevelop; vil Fjern-knappen ikke ændre *.toc-filer på disken, så fjern-funktionen er sikker nu. + + + + +&tdevelop; Indholdsfortegnelsesfiler (TOC-filer) + +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 (⪚ KDE2 Udviklingsbog (kde.org)). 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 ekstern dokumentationsfil. + +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. + +Sådan struktureret adgang er gjort mulig ved brug af specielle indholdsfortegnelsesfilers, som er betegnet med .toc filnavneendelser. Enhver sådan af &tdevelop;'s TOC-filer indeholder en &XML;-struktureret beskrivelse af dokumentet der skal bruges. + + + +Standardmappe for &tdevelop;'s TOC-filer + +Da &tdevelop; blev installeret blev der normalt lagt en række prædefinerede .toc-filer ind i mappen $KDEDIR/share/apps/kdevdoctreeview/tocs. Disse er temmelig simple, strukturerede tekstfiler. Du kan studere dem med en teksteditor eller anden tekstvisningsfacilitet. + + + + + + + + + Basal struktur af &tdevelop;'s TOC-filer + + header + + + + <!DOCTYPE tdeveloptoc> + + + <tdeveloptoc> + + + (titel) + + + (basisadresse) + + + (indholdsstruktur) + + + (indeksstruktur) + + + </tdeveloptoc> + + + Denne &XML;-struktur vil blive tolket af &tdevelop;'s Dokumentation-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. + + + + titel + + + <title> (en titelstreng) </title> + + Dette er den titel som &tdevelop; vil vise på de basale niveauer i dokumentationstræet. + Denne viste titel kan for øjeblikket ikke ændres af brugeren. Hvis du ønsker at en anden tekst skal vises, må ændre <title>-indgangen i .toc-filen manuelt. + + + + basisadresse + + + <base href=" (basisdokument &URL;) "/> + + 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 <basis>-&URL;. + + + + indholdsstruktur + + + <tocsect1 name=" (afsnittets titel) " url=" (afsnittets &URL;) "> + ... + <tocsectn name=" (afsnittets titel) " url=" (afsnittets &URL;) "/> + ... + + </tocsect1> + + + Al øvrig navigations og adgangsinformation er opbevaret i en række indlejrede <tocsecti> ... </tocsecti> par. Hvert i betegner det følgende indlejringsniveau ned til nummer n som vil svare til det endeligt viste dokumentationsafsnit. + Enhver <tocsecti>-indgang skal have en name="xxx"-attribut tilknyttet (hvor "xxx" betegner den faktiske titelstreng). Dette vil blive vist som niveautitlen i dokumentationstræet. Det skal svare til et egentligt dokumentationsafsnit. + Der kan være en url=""-attribut knyttet til ethvert i 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;. + <tocsectn/>-indgangen skal have en url=""-attribut under alle omstændigheder. Den endelige indlejrede <tocsectn/> kommer ikke i par men vil umiddelbart blive lukket af en / før >-parentesen. + 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: /base-url/section-url#anker-mærke. + + + + indeksstruktur + + + + <index> + + <entry name=" (afsnittets titel) " url=" (afsnittets &URL;) "/> + + </index> + + + Indeks er en enkel liste med indeksindgange, par af titler og &URL;'er. Et indeks er ikke obligatorisk. + + + + + + + + +DevHelp-dokumentation + +DevHelp dokumentation er en anden måde for struktureret dokumentationsadgang. Den bruger strukturerede tabeller af indholdsfiler betegnet med en .devhelp-endelse ligesom &tdevelop;'s TOC-filer for at få adgang til dokumentationen for GNOME 2 desktoppen. +Du kan kontrollere hvilke DevHelp-filer der skal være adgang til, på DevHelp dokumentationssamlingindstillingssiden. + + + + + + + Sørger for DevHelp dokumentation + + + +DevHelp-filerne kunne oprindeligt nås på hjemmesiden LiDN, men det synes ikke længere at være vedligeholdt et stykke tid nu. Mere nylig DevHelp-dokumentation er tilgængelig på hjemmesiden Download af DevHelp-bøger. + +Når &tdevelop; installeres, vil det forsøge at finde alle .devhelp-filer i nogle standardplaceringer i systemet, ⪚ i underkatalogerne af /opt/gnome/share/. Til at begynde med markeres disse filer ikke til visning. Hvis du vil se anden dokumentation skal du afkrydse TOC-afkrydsningsfeltet i tabelindstilling. + +Du kan tilføje nye indgange ved at bruge knapperne til højre for listen. &tdevelop; vil filtrere *.toc-filer i mappedialogerne der hører til Tilføj og Redigér-knapperne. + + + + +Opsætning af brugerdefinerede dokumentationssamlinger + +Dette er til eget brug. Du kan tilføje stort set alle dokumentationsfiler her, forudsat at de kan vises med en &konqueror;-plugin. + + + + + + + Sørger for brugerdefineret dokumentation + + + +Normalt er denne liste tom ved &tdevelop;s første opstart. Vi har lagt en indgang ind for at vise indgangsstrukturen. +Håndteringen er ligeud ad landevejen her. Brug knapperne 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 Tilføj og Redigér-knapperne. + +Du skal eksplicit tilføje indgangene der skal vises i &tdevelop;s dokumentationsfunktion. Afkryds indgangens TOC afkrydsningsfeltet i tabelindstilling. + +Brugerdefineret dokumentation kan hverken indekseres eller søges i. Derfor er Indeksx og Søg afkrydsningsfelterne ingen effekt, som vist herover. + + + + + + +Opsætning af tekstsøgningsindekser + +(... endnu ikke skrevet ...) + + + + + + + Opsætning af tekstsøgningsindekser + + + + + + +Andre dokumentationindstillinger + +(... endnu ikke skrevet ...) + + + + + + + + +Avancerede indstillinger + +(... endnu ikke skrevet ...) + + +Pluginværktøjer + +(... endnu ikke skrevet ...) + + + + + 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 @@ + +Indholdet af denne manual + +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ø. +Her finder du information om følgende emner: + + +Kom i gang med &tdevelop; — en guided tur + +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. + + + +Oversigt over funktionerne i &tdevelop; + +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ø. + + + + +Indstilling af &tdevelop; + +Viser hvordan du kan skræddersy det integrerede udviklingsmiljø til at passe til dine behov. + + + + +Kom i gang: Programguiden + +Beskriver det grundlæggende i hvordan et nyt projekt indstilles i &tdevelop; med den indbyggede programguide. + + + + +Redigeringsværktøjer + +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. + + + + +Filsøgerne + +Demonstrerer diverse værktøjer til at kigge på projektets struktur og hvordan du får adgang til filerne du vil arbejde med. + + + + +Klassesøgeren + +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. + + + + +Dokumentation + +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. + + + + +Bygge og projekthåndtering + +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. + + + + +Avanceret byggehåndtering + +Kigger på måder at holde flere byggeindstillinger, for at krydskompilere til forskellige platforme, eller oprette et indlejret system med biblioteket Qt/embedded. + + + + +Fejlsøgergrænsefladen + +Beskriver hvordan den integrerede fejlsøgergrænseflade til fejlsøgeren gdb bruges, så du kan jage efter fejl uden at forlade &tdevelop;. + + + + + + +Brug af CVS + +Fortæller dig hvordan du kan vedligeholde projektet med CVS-versionshåndteringssystem, en nødvendighed især hvis mange udviklere arbejder med samme projekt. + + + + + +Noget ofte brugt information er puttet ind i appendiks. Det er bl.a. : + + + +Installering af &tdevelop; + +Fortæller hvor man får fat i &tdevelop;, og hvordan man får det at køre. + + + + + + +I korthed — Vink og trick + +En hurtigreference til de oftest bruge kommandoer og handlinger, og en kort guide for at løse almindelige problemer ved arbejdet med &tdevelop;. + + + + +Udvikling på Unix + +En historisk oversigt over programudvikling i &UNIX;, de vigtigste værktøjer som behøves og hvorfor man behøver et integreret udviklingsmiljø. + + + + + + +Konfigurationsfiler brugt af &tdevelop; +Lister filerne som &tdevelop; bruger til at gemme sin interne information. Dette er især nyttigt hvis noget er blevet forkert i dine indstillinger. + + + + +Pluginværktøjer +Lister plugin-værktøjer du kan bruge til at skræddersy &tdevelop;s muligheder efter dine behov. + + + +Eksempler på tilstande i brugergrænsefladen for &tdevelop; +Viser tilstanden for brugergrænsefladen. + + +Yderligere information Hent information, rapportér fejl, osv. + + +Ændringslog +Viser dokumentets historik. + + +Bibliografi +Bibliografi + + + + + + 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 @@ + + + + + BerndPol + Anne-MarieMahfouf + + + + +Installering af &tdevelop; + + + Installation + +Her finder du alle skridt som behøves for at kompilere og installere det integrerede udviklingsmiljø &tdevelop;: + Hvordan man får fat på &tdevelop; koncentrerer sig om hvordan man henter den seneste kildekode for &tdevelop; fra svn. + Krav for &tdevelop; giver en liste af programmer og biblioteker som du skal have installerede for at det skal lykkes at kompilere det integrerede udviklingsmiljø. + Kompilering og installation af &tdevelop; leder dig gennem alle skridt for kompilering og installation af programmet. + Hvordan man får fat på dokumentation af programmeringsgrænsefladen for &tdevelop; 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;. + + + + +Hvordan man får fat på &tdevelop; + + + få fat på &tdevelop; + + &tdevelop; + få fat på + +&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. +Du kan også få fat på kildekoden for &tdevelop;, kompilere og installere den selv. Kildekoden findes via projektets hjemmeside på http://www.tdevelop.org eller via &kde;'s FTP-sted. + + +Hente dagsfriske udgaver af &tdevelop; fra svn + + + svn + +Hvis du vil tage del i nuværende udvikling, er versioner fra det anonyme SVN-arkiv tilgængelige. +Modulnavnet er tdevelop med svn co svn://anonsvn.kde.org/home/kde/branches/KDE/3.5/tdevelop. + + +Oprindelig udtjekning fra svn + + + udtjekning + + &tdevelop; + svn + udtjekning + +For at få en oprindelig udgave af &tdevelop; skal du hente den fra anonym svn. For denne såkaldte udtjekningshandling følges skridtene nedenfor. + +Vi antager vi at du ønsker at placere din kopi af &tdevelop; i mappen /kde3src/tdevelop undermappen af din hjemmemappe(~). + + + # Opret målmappen om nødvendigt: + ~> mkdir kde3src + ~> cd kde3src + ~/kde3src> svn co svn://anonsvn.kde.org/home/kde/branches/KDE/3.5/tdevelop + ~/kde3src> cd tdevelop + + +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. + +Hold serverbelastningen lav. Vær venlig ikke at tjekke ud hver gang du vil have en ny version af &tdevelop; Brug svn update til dette formål. + +Nu kan du kompilere din version af &tdevelop; som vist i kapitlet Kompilering og installation af &tdevelop;. + + + + +Hold din kopi af svn opdateret + + + opdatér + + &tdevelop; + svn + opdatér + +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 kde3src.) +Bemærk kommandoen up (= update) i stedet for co (hvilket betyder checkout). + + + ~> cd kde3src + ~/kde3src> cd tdevelop + ~/kde3src> svn up + + +Hold øje med meddelelserne som svn viser under opdateringssekvensen. De nøjagtige skridt i kompileringssekvensen afhænger af dem. + +Nu kan du kompilere en ny version af &tdevelop; som vist i kapitlet Særlige hensyn ved kompilering fra svn. + + + + + + + + + +Krav for &tdevelop; + + + krav + + &tdevelop; + krav + + GNU + krav + +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. + + +Krævet + + gcc/g++ ≥ 2.95.3 (eller tilsvarende) + gcc + krav + + g++ + krav + + Tilgængelig fra gcc.gnu.org + + + &GNU; make (eller tilsvarende) + make + krav + + Tilgængelig fra www.gnu.org/software/make + + + &perl; 5.004 (eller nyere) + Perl + krav + + Tilgængelig fra www.perl.com + + + autoconf ≥ 2.52 (eller nyere) + autoconf + krav + + Tilgængelig fra www.gnu.org/software/autoconf + + + automake ≥ 1.6 (eller nyerer) + automake + krav + + Tilgængelig fra www.gnu.org/software/automake + + + flex 2.5.4 (eller nyere) + flex + krav + + Tilgængelig fra www.gnu.org/software/flex + + + &Qt; ≥ 3.3.0 (eller nyere) + Qt + krav + + Tilgængelig fra www.trolltech.com/products/qt + + + KDE ≥ 3.4.0 (eller nyere) + KDE + krav + + Tilgængelig fra www.kde.org + + + + +Valgfrit: + Værktøjet ctags til kildekodenavigering, fra http://ctags.sourceforge.net, som giver dig hurtig adgang til deklarationer og definitioner med nogle få enkle klik på et navn i editoren. ctags + + Oversætteren dot for grafiksprog, fra http:/www.graphviz.org. Værktøjet behøves sammen med &doxygen; nedenfor, hvis du vil vise klasseforholdene grafisk (hvilket stærkt anbefales). dot + + Dokumentationsværktøjet &doxygen;, fra http://www.doxygen.org, hvis du vil lave koncis og kraftfuld dokumentation af programmeringsgrænsefladen for dine projekter. doxygen + + Valgrind fra http://developer.kde.org/~sewardj/ hjælper dig med at finde hukommelseshåndteringsproblemer i dine programmer. valgrind + + SVN fra http://subversion.tigris.org/, hvis du vil bruge versionshåndteringssystemet SVN. + svn + krav + + 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. + + + + + + Du kan i et vist omfang omgå behovet for &autoconf; ≥ 2.52 og &automake; ≥ 1.6. Fjern blot mappen admin i installationsmappen for &tdevelop;, og skriv: + autoconf + omgå versionsbehov + + automake + omgå versionsbehov + + versionsbehov + omgå behov for autoconf og automake + + + (din tdevelop-mappe)> ln -s $KDEDIR/share/apps/tdelibs/admin admin + + i terminalen. Det gør at &tdevelop; bruger standardindstillingerne i &kde;'s admin-mappe i stedet. + + + Vær forsigtig så du ikke blander forskellige versioner af &Qt;. Link altid &tdevelop; med samme version af &Qt; som &kde;-biblioteket kompileredes med. Ellers vil du formodentlig komme ud for meget mærkelig opførsel. + + + + + + + + + +Kompilering og installation af &tdevelop; + + + &tdevelop; + kompilering + + &tdevelop; + installation + +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. + + Forberedende skridt fortæller dig om opsætning af rigtigt miljø. + Kompilér &tdevelop; 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;. + Nogle bemærkninger om configure tilvalg fortæller dig hvordan du kører &tdevelop; hvis det er blevet installeret på et andet sted end &kde;-mappen. + + + +Forberedende skridt + + + preliminært + Installation af &tdevelop; + + KDEDIR + + QTDIR + + LD_LIBRARY_PATH + + LIBRARY_PATH + + PATH + +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. + +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 .bashrc eller .cshrc. På den måde indstilles miljøvariablerne rigtigt hver gang du starter skallen. + + +Opsætning af miljøet for bash-skallen + +Hvis du bruger bash-skallen, tilføjes følgende linjer: + + + export KDEDIR=(sti til din KDE-installation) + export QTDIR=(sti til dit Qt-bibliotek) + export LD_LIBRARY_PATH=$QTDIR/lib:$KDEDIR/lib:$LD_LIBRARY_PATH + export LIBRARY_PATH=$QTDIR/lib:$KDEDIR/lib:$LIBRARY_PATH + export PATH=$QTDIR/bin:$KDEDIR/bin:$PATH + + + + + + +Opsætning af miljøet for tcsh-skallen + +Hvis du bruger tcsh-skallen, tilføjes følgende linjer: + + + setenv KDEDIR (sti til din KDE-installation) + setenv QTDIR (sti til dit Qt-bibliotek) + setenv LD_LIBRARY_PATH=$QTDIR/lib:$KDEDIR/lib:$LD_LIBRARY_PATH + setenv LIBRARY_PATH $QTDIR/lib:$KDEDIR/lib:$LIBRARY_PATH + setenv PATH $QTDIR/bin:$KDEDIR/bin:$PATH + + + + + + + + +Kompilér &tdevelop; + + + make + Installation af &tdevelop; + + kompilering + &tdevelop; + +I følgende beskrivelse antager vi at du har placeret kildekoden for &tdevelop; i mappen ~/kde3src/tdevelop. + + +Særlige hensyn ved kompilering fra svn + +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. + + + +Efter en udtjekning fra svn + +Du skal initiere byggesystemet efter en ny udtjekning. Det samme gælder hver gang du skal starte igen fra begyndelsen. Skriv: + +~/kde3src/tdevelop> make -f admin/Makefile.common svn-clean +og derefter alle følgende skridt. +Du har måske brug for adgang til svn-arkivet for oprydningen hvis nogen korrupte eller manglende filer skal genkonstrueres. +svn-clean-kommandoen vil fjerne hver fil der ikke er i svn fra mappen! Sørg for at sikkerhedskopiere al værdifuld information før du udsteder denne oprydningskommando. + + + + +Efter en opdatering fra svn + +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): + +U /en_mappe_sti/Makefile.am + +eller hvis du netop har lavet en fuldstændig udtjekning, skal du skrive: +~/kde3src/tdevelop> make -f Makefile.svn +inden du fortsætter med alle følgende skridt. + + + + + + +Grundlæggende kommandosekvens med <command +>make</command +> + +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 Makefile, som make kommandoen vil bruge. + +Du kan udelade flaget i følgende kommandolinjer med configure, hvis du ønsker at &tdevelop; skal installeres i &kde;'s standardmappe. Se kapitlet Nogle bemærkninger om flag til configure om dette. + + + +En version kompileret til fejlsøgning + +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 configure om at gøre det: + +~/kde3src/tdevelop> ./configure --enable-debug=full --prefix=(hvor-din-kde3-er) + + + + +En version kompileret til distribution + +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 configure. + +~/kde3src/tdevelop> ./configure --prefix=(hvor-din-kde3-er) + + +Hvis du vil lave din egen dokumentation for programmeringsgrænsefladen for &tdevelop;, skal du tage yderligere et flag med i kommandoen configure: + + ~/kde3src/tdevelop> ./configure --(tilvalg-som-ovenfor) \ --with-tdelibsdoxy-dir=$KDEDIR/share/doc/HTML/en/tdelibs-apidocs + + + + + + +Byg og installér &tdevelop; + +Kommandoen configure kontrollerer systemet og bygger en Makefile ifølge hvad den finder. Kommandoen make bruger normalt denne Makefile. Altså er + +~/kde3src/tdevelop> make +tilstrækkeligt. Om nødvendigt, så skaf rettigheder som systemadministrator +~/kde3src/tdevelop> su +og angive systemadministratorens kodeord. Installér derefter programmet: +~/kde3src/tdevelop> make install +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 Anden installationsmappe end standard nedenfor. + + + Faktisk er der normalt tre &tdevelop;-programmer installeret: + + &tdevelop; integreret udviklingsmiljø — det er her du normalt kommer til at arbejde. + 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. + &tdevelop; Designer — forbedrer &Qt;-User Interface Designer med &kde; specifikke kontroller og integrerer sig fint i &tdevelop; udviklingsmiljøet. + + + + + + + + + + + + +Nogle bemærkninger om flag til <command +>configure</command +> + + +Anden installationsmappe end standard + + + &tdevelop; + installation + ikke standardmappe + + ikke standardmappe + + KDEDIRS + + kbuildsycoca + +Normalt forbereder configure 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 configure med flaget : +~/kde3src/tdevelop> ./configure --prefix=(hvor-din-kde3-er) +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.) + Du skal bruge en skal, og følgende kommando skal køres inden du kan starte &tdevelop; fra skallen. + +Husk at bruge flertal: Det er KDEDIRS, ikke blot KDEDIR) + + + ~> export KDEDIRS=/usr/local/kde:/opt/kde3 + ~> kbuildsycoca + (Start nu &tdevelop;:) + ~> tdevelop + + + + KDEDIRS miljøvariablen skal sættes til listen af aktive &kde; mapper på dit system. Vi bruger + /usr/local/kde:/opt/kde3 + blot som et eksempel. + Mappen /usr/local/kde kan for eksempel indeholde en ufuldstændig udgave af &kde; som du kompilerede til fejlretningsformål og mappen /opt/kde3 kunne derudover indeholder standardudgaven af &kde; fra din distribution der bruges til hverdagsarbejde. + + +I en tcsh-skal skal du indstille miljøvariablerne ved at bruge: +~> setenv KDEDIRS /usr/local/kde:/opt/kde3 +Kommandoen kbuildsycoca (byg systemkontrolcache) 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. +(Du vil også kunne indtaste linjerne i filen .bashrc eller .cshrc, men det er ikke ønskværdigt fordi så køres kbuildsycoca hver gang du bruger skallen.) + +Kommandoen kbuildsycoca kører ikke for systemadministratoren. Du skal kalde den som en anden bruger. (Men det er ikke en særlig god idé at udvikle som systemadministrator!) + + + + + + + + + +Hvordan man får fat i programmeringsgrænsefladen for &tdevelop; + + + API + &tdevelop; + + &tdevelop; + API + + kompilering + &tdevelop; + API + + configure + &tdevelop; API + +Programmeringsgrænsefladen, Application Program Interface 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. +Der er en version af den seneste programmeringsgrænseflade på KDevelops hjemmeside. Den opdateres automatisk hvert døgn så at du kan følge med. +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 til configure-kommandoen når du forbereder at kompilere &tdevelop;'s kildekode: + + + ~/kde3src/tdevelop> ./configure --(flag-som-sædvanligt) \ + + --with-tdelibsdoxy-dir=$KDEDIR/share/doc/HTML/en/tdelibs-apidocs + + + +(make erstatter den globale $KDEDIR med den egentlige &kde;-mappe). Udfør derefter kommandoen make som sædvanligt. 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: +~/kde3src/tdevelop> make apidocs + +Dette bygger en Doxyfile i basismappen for &tdevelop;, som derefter behandles af programmet doxygen for at oprette en hel del .html-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: + +~/kde3src/tdevelop> su + +og angive systemadministratorens kodeord. Installér derefter dokumentationsfilerne: + +~/kde3src/tdevelop> make install-apidox + +Når dette er gjort, informerer make 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. + +Du vil mest sandsynligt se en masse advarsler og/eller fejlmeddelelser under API byggekørslen for Doxygen. Bedst at ignorere dem, de er kun af interesse for &tdevelop;-udviklerne. Hvis API-generingen nogensinde bliver færdig, så vil .html API-filerne kunne bruges. + + + + 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 @@ + + + + + IanGeiser + + + + +Brug af scripter i KDevelop + + +At køre scripter +For at tilgå et script der er til rådighed for &tdevelop;, skal du bruge menuen VærktøjerScripter. Hvis ikke der findes en sådan menu, er der ingen scripter installeret som KDevelop kan bruge. + + + +Tilføjelse af scripter +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: +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: + +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" + +Et af de mest brugbare værktøjer til at udvikle scripter for programmer er KDCOP-programmet. +
+ KDCOP søger i DCOP grænseflader i&tdevelop; + + + +
+ +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. + +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". + +
+ &tdevelop; Scripter på filsystemet + + + +
+ +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. + +
+ + +
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 @@ + + + + + BerndPol + + + + +Oversigt over &tdevelop;'s funktioner + + + &tdevelop; + overblik + + Oversigt + + overblik + +&tdevelop; integrerer mange værktøjer, scripter og skabeloner med en fælles brugergrænseflade. De grundlæggende dele er + flere tilstande for brugergrænseflader som du kan bruge til at vælge arbejdsområdets udseende og fornemmelse, + en programguide, som hjælper dig med at indstille et nyt projekt, + flere systemer til projekthåndtering, som hjælper med at bygge og håndtere dit projekt, + nogle redigeringsværktøjer for nemt at kunne arbejde med programteksten, + diverse filsøgere, som giver dig forskellige visninger af filsystemet, + diverse klassesøgere for at hjælpe dig med at vedligeholder klasser og deres forhold i et objektorienteret programmeringsprojekt, + en fejlsøgningsgrænseflade til at finde og fjerne programfejl indefra &tdevelop;, og + flere plugin-værktøjer, 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. + et sæt andre diagnose-, dokumentations- og optimeringsværktøjer. + + + + + Faktisk er der tre &tdevelop;-baserede programmer: + + &tdevelop; integreret udviklingsmiljø — det er her du normalt kommer til at arbejde. + 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. + &tdevelop; Designer — forbedrer &Qt;-User Interface Designer med &kde; specifikke kontroller og integrerer sig fint i &tdevelop; udviklingsmiljøet. + + + + + +Tilgængelige tilstande for brugergrænseflader + + + &tdevelop; + tilstande for brugergrænseflader + + brugergrænseflade + Tilstande i &tdevelop; + + Grænsefladestilstande + + Underrammevinduer + + Fanebladssider + + Topniveauvinduer + + IDEA-vinduer + +&tdevelop; tilbyder fire forskellige grænsefladestilstande (klik på tilstandsnavnet for at se et eksempel): + IDEA-vindue + Dette er en ny slags brugergrænseflade som både optimerer arbejdspladsen og giver en intuitiv brug af værktøjerne. + + 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. + Editor- og browservisninger opbevares i et stort vindue med faneblade midt i hovedrammens område. + + + + + Underrammevinduer + + Alle værktøjsvisninger er fra begyndelsen dokkede i hovedrammen. + Editor- og søgervinduer eksisterer som topniveauvinduer inde i et visningsområde i hovedrammen. + + + + + Fanebladssider + + Alle værktøjsvisninger er fra begyndelsen dokkede i hovedrammen. + Editor- og søgervinduer opbevares i et vindue med faneblade. + + + + + Topniveauvinduer + + Alle editor-, søger- og værktøjsvinduer er topniveauvinduer direkte på desktoppen. + Hovedkontrollen indeholder kun menulinjen, værktøjslinjer og statuslinjen. + + + + + + + +Hvordan man skifter tilstand for brugergrænseflader + + + brugergrænseflade + skifte tilstand + + skifte grænsefladetilstand + +For at skifte tilstand for brugergrænsefladen, vælges Opsætning Indstil KDevelop... i menulinjen. Dialogen Indstil KDevelop dukker op, hvor du skal vælge Brugergrænseflade i feltet til venstre. Dette bringer dig til indstillingssiden som vises nedenfor: + + + + + + + Vælg en brugergrænsefladetilstand + + + +(Ældre udgaver af &tdevelop; har kun toptilstand markeringsafsnittet.) + +I afsnittet Hoved-brugergrænseflade-tilstand vælger radioknappen den brugergrænseflade-tilstand du ønsker at arbejde i. +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 Valg af brugergrænseflade for flere detaljer. + +Glem ikke at genstarte &tdevelop; for at dine valg skal få virkning. + + + + +Hvordan man maksimerer arbejdsområdet + + + &tdevelop; + arbejdsområde + + &tdevelop; + maksimér arbejdsområde + + brugergrænseflade + arbejdsområde + + brugergrænseflade + menulinje + + brugergrænseflade + fuldskærmstilstand + + fuldskærmstilstand + + menulinje + skjul/vis + + skjul menulinje + + vis menulinje + +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 KDE-programmer. + + + +Fuldskærmstilstand + +For at skifte fra eller til fuldskærmstilstand, vælges Vis Fuldskærmstilstand i menulinjen, eller tryk på &Ctrl;&Shift;F . Der er også en ikon for Fuldskærmstilstand i Søgeværktøjslinjen. + + + + +Vis eller skjul menulinjen + +For at skjule menulinjen, vælges Indstillinger Vis menulinje i menulinjen, eller tryk på &Ctrl;M . Du kan også tilføje en ikon for Vis menulinje i en passende værktøjslinje, ⪚ Søgeværktøjslinjen, for slutmålet. For at vise menulinjen, skal du trykke på &Ctrl;M eller bruge ikonen Vis menulinje hvis den er tilgængelig. + + + + + + + + + + + +Elementer i brugergrænsefladen + +(... endnu ikke skrevet ...) + + +Arbejdsområdet + +(... endnu ikke skrevet ...) + + + +&tdevelop;'s titellinje + +(... endnu ikke skrevet ...) + + + +&tdevelop;'s statuslinje + +(... endnu ikke skrevet ...) + + + +Menulinjen + +(... endnu ikke skrevet ...) + + + +Værktøjslinjerne + +(... endnu ikke skrevet ...) + + + +Træværktøjsvisningerne + +(... endnu ikke skrevet ...) + + + +Uddataværktøjsvisningerne + +(... endnu ikke skrevet ...) + + + + + + + +Projekthåndteringssystem + + + projekthåndtering + +Alt i alt afhænger et projekt af en form af et projekthåndteringssystem. &tdevelop; tilbyder fire projekthåndteringssystemer som programmøren kan vælge mellem når et nyt projekt laves. + Automake-projekt bruger de almindelige udviklingsværktøjer for &GNU;. + Qmake-projekt bruger Trolltechs Qmake-projekthåndtering. + ANT-projekt bruger Apaches ANT-projekthåndtering for &Java;-udvikling. + Eget projekt kræver at du vedligeholder din egen Makefile. + + + + +Automake-projekt + + + projekt + automake + + automake + projekt + +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 + en bedre måde at oprette en Makefile og + en god og sikkert måde for hurtig indstilling til forskellige systemer med configure-script oprettede af autoconf. + + + + + +Qmake-projekter + + + projekt + qmake + + qmake + projekt + +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. +For mere information om Qmake-projekthåndtering se Qmake User Guide, som skal være med i distributionen, eller kig på hjemmesiden Trolltech Documentation hvor du finder Qmake-dokumentationen under Qt C++ GUI Application Development Toolkit. + + + +CMake-projekter + + + projekt + cmake + + cmake + projekt + +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 $PATH for at bygge dem. +For at indstille et nyt C eller C++ projekt i &tdevelop; vælg Projekt Nyt projekt... C eller C++ CMake-baserede projekter En skabelon for delt bibliotek eller Hello world program . + + + +ANT-projekthåndtering (&Java;-programmer) + + + projekt + ant + + ant + projekt + + projekt + Java + + Java + projekt + + udvikling + Java + +&Java;-udviklere vil måske bruge Apaches ANT-projekthåndtering til deres projekter. For at oprette et nyt ANT-projekt i &tdevelop;, vælges Projekt Nyt projekt... Java Ant projekt Program. +For mere information se Ant-projektets hjemmeside. + + + +Egne projekter + + + projekt + egen + + eget projekt + + Makefile + eget projekt + +Hvis du foretrækker at vedligeholde din egen Makefile 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. +Hvis du alligevel ikke virkelig behøver 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. + + + +Hvordan du kan distribuere dit program + + + distribution + + program + distribution + + binær pakke + +Distributionen af dit program kræver ikke at slutbrugeren har installeret noget yderligere andet end + en passende oversætter, + en linker, og + passende udviklingsbiblioteker, + + +hvilket i det mindste for C++ programmer oftest er tilfældet. Men du kan ligesågodt distribuere binære pakker af programmet. Under alle omstændigheder behøver slutbrugeren af produktet ikke at installere &tdevelop;. +Hvis du giver din kildekode bort, råder vi dig at også tage projektfilen med for &tdevelop;. Det gør det meget enkelt for andre udviklere, hvis de bruger &tdevelop;—til at arbejde med kildekoden. +For projekter hvor flere udviklere, 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 Makefile, for at ikke løbe ind i problemer. +Især for programmer med flere sprog, arbejder oversættere ikke direkte med kildekoden, undtagen i tilfælde som kræver rettelser for at gøre det muligt med oversættelsesunderstøttelse. + + + + + + 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 @@ + + + + + BerndPol + + + + +Udvikling på Unix + +udvikling + + UNIX + udvikling + + +Nogle historiske bemærkninger + +historie +scriptsprog + + UNIX + historie + + UNIX + pipe + + UNIX + skal + + skal + UNIX + +Fra begyndelsen har Unix opretholdt to meget forskellige udviklingsmodeller. Den ene er sfæren af programmeringssprog for systemer og programmeringssprog, hvor en kildekode oversættes til maskinkode med en oversætter eller tolk. 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.) +Den anden model er sfæren med scriptsprog, 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. grep, sed og find. 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 pipe, 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. +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. + + + + + +Moderne scriptsprog +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. +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. + + +&perl; + +Perl + + scriptsprog + Perl + +&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 mod_perl 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. +For mere information se hjemmesiden Comprehensive Perl Archive Network (CPAN). + + + +Python + +Python + + scriptsprog + Python + +&python; 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. + + + +PHP + +PHP + + scriptsprog + PHP + +&php; blev opfundet som et sprog til direkte indlejring på &HTML;-sider, og har af den grund hovedbrugen at leverere dynamisk indhold for nettet. + + + + + +Højere-niveau scripter + +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;. +Der har været forsøg på at sørge for lignende mekanismer som vil virke på et højere programniveau, især CORBA og, i &kde;-miljøet, &DCOP;. + + +CORBA-Protokollen + +CORBA + + scriptsprog + CORBA + + kommunikation + CORBA + +CORBA (Common Object Request Broker Architecture) er et forsøg på at lade computerens programmer arbejde sammen henover netværk. Det blev lavet af den private, leverandøruafhængige OMG (Object Management Group) standardkomite. +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. +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. + + + + +&DCOP;-grænsefladen + +DCOP + + scriptsprog + DCOP + + kommunikation + DCOP + +En anden udvikling af UNIX-lignende scripter er DCOP-protokollen som blev lavet til kommunikation mellem &kde; programmer for at komme ud over CORBA's begrænsninger. +&DCOP; betyder Desktop COmmunikation Protocol (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. +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. +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. +For yderligere information, se DCOP Desktop COmmunication Protocol library artiklen eller The &DCOP; Desktop Communication Protocol library, dokumentation af brugergrænsefladen for &kde;'s DCOP-bibliotek. + + + + + + + +Byggesystemer + +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. +For at opnå dette, er de grundlæggende værktøjer du behøver + en teksteditor til at skrive kildekodefilerne, + et oversættelsesprogram, oftest en oversætter til at lave kildekoden om til objektfiler, + et biblioteksprogram som samler objektfiler i biblioteker, som nemt kan genbruges uden at behøve at kompileres igen, + en linker, som binder flere objektfiler og biblioteker sammen til et kørbart program, + et byggesystem, som tilbyder nogle måder at håndtere alt dette, og ikke at forglemme, + en fejlsøger til (forhåbentlig) at finde alle fejl i programmet, og muligvis yderligere diagnoseværktøjer for at få alt til at køre smidigt. + + + +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. +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. + + +Make-processen + + + make + + Makefile + + regel + + genkompileringer + + mål + + afhængigheder + + kommandoer + +Et værktøj som tager sig af omkompileringer er make. Det holder styr på alt arbejde med et sæt regler, 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 Makefile, som behandles af make så snart du vil opdatere dit arbejde. +Hver regel består af flere byggeblokke, nærmere bestemt + et mål, &ie; filen som skal bygges + et sæt afhængigheder, 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 + de kommandoer som skal køres for at make målet (dvs. for at kompilere det eller linke det sammen med andre objektfiler for at lave en kørbar programfil). + + +Enkelt udtrykt, læser kommandoen make 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. +Der er adskillige yderligere muligheder for at styre en sådan byggeproces, og en Makefile 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 make. Selv om du ikke normalt bruger det direkte, kan en forståelse for det fundamentale i byggesystemet være nyttigt. Se GNU make manualen for mere information. +For mere detaljeret information specifik for &tdevelop;, se Bygge og projekthåndtering i denne håndbog. +Der er flere vejledninger tilgængelige, se referencer i kapitlet Bygge og projekthåndtering. + + + + + + + +Udvikling af grafisk grænseflade + + + GUI + + grafisk brugergrænseflade + + brugergrænseflade + GUI + +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. +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å. +For udvikling af grafiske grænseflader for &kde; er der en stilguide tilgængelig. Den findes som &kde;'s guide for brugergrænseflade på siden &kde;'s udviklingshjørne. +En kort introduktion til almindelige GUI design-principper kan findes her. + + + + + + +Integration af begreber og værktøjer: det integrerede udviklingsmiljø + + + IDE + + integreret udviklingsmiljø + + udvikling + IDE + + miljø + IDE + +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. +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. +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. +For nemmere at opnå et sådant system kom integrerede udviklingsmiljøer (IDE) frem. Et sådant miljø integrerer alle skabeloner, værktøjer og scripter som behøves i udviklingsprocessen i en enkelt omgivelse. +&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. + + +Grundlæggende funktioner i &tdevelop; &kdevrelease; + + + &tdevelop; + funktioner + + funktioner + + + + + + Håndterer alle udviklingsværktøjer som behøves for C++ programmering, såsom oversætteren, linkeren, fejlsøgeren og byggesystemet + + + Sørger for en programguide som laver fuldstændige, køreklare eksempelprogrammer + + + Tillader brugeren at vælge en integreret editor baseret på &kde;'s programmeringseditoren &kwrite;, Trolltec's QEditor, eller andre. + + + En klassegenerator til at oprette nye klasser og integrere dem i det nuværende projekt + + + Filhåndtering for kildekode, deklarationer, dokumentation, osv. som skal indgå i projektet + + + Hjælp med at lave en brugerhåndbog for programmet skrevet med &kde;-værktøjer. + + + Automatisk &HTML;-baseret dokumentation af programmeringsgrænseflade for projektets klasser med krydsreference til de brugte biblioteker + + + Oversættelsesunderstøttelse som gør det muligt for oversættere enkelt at tilføje deres modersmål til projektet, inklusive understøttelse for &kbabel;. + + + Støtte for at håndtere et projekt via et af adskillige versionssystemer (f.eks. &CVS;), ved at sørge for en letanvendelig grænseflade til funktionerne som oftest behøves + + + En integreret fejlsøger forende. + + + En integreret skal-konsol emulator. + + + kommentarer i deklarationsfiler og kildekodefiler. + + + Automatisk kodekomplettering for klassevariabler, klassemetoder, funktionsargumenter med mere + + + Skabeloner til at oprette diverse projekter (moduler i kontrolcentret, miniprogrammer i panelet &kicker;, I/O-slaver, plugin til &konqueror; og desktopstiler) + + + Fire navigationstrævisninger for nemt at kunne skifte mellem kildekodefiler, deklarationsfiler, klasser og dokumentation, hvilket gør det unødvendigt med en ekstern filhåndtering + + + Støtte for krydskompilering, med mulighed for at angive forskellige oversættere, oversætterflag, målarkitektur osv. + + + Støtte for projekter med Qt/Embedded (som Zaurus og IPAQ) + + + Mulighed for inklusion af et hvilket som helst andet program du behøver til udvikling ved at tilføje det i menuen Værktøjer, ifølge dine individuelle behov + + + + + + + + + -- cgit v1.2.1