diff -Nru kdevelop-3.9.98/app/CMakeLists.txt kdevelop-4.0.1/app/CMakeLists.txt --- kdevelop-3.9.98/app/CMakeLists.txt 2010-02-04 00:57:02.000000000 +0000 +++ kdevelop-4.0.1/app/CMakeLists.txt 2010-07-17 20:08:19.000000000 +0100 @@ -1,9 +1,11 @@ ########### next target ############### +find_package(SharedMimeInfo REQUIRED) +set(kdevelop_SRCS main.cpp) kde4_add_app_icon(kdevelop_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/../pics/hi*-app-kdevelop.png") -kde4_add_executable(kdevelop "main.cpp") +kde4_add_executable(kdevelop ${kdevelop_SRCS} ) set(kdevelop_bin_SRCS main_internal.cpp @@ -51,4 +53,6 @@ install( FILES kdevelop.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) install( FILES kdeveloprc DESTINATION ${CONFIG_INSTALL_DIR} ) -install( FILES kdevelopui.rc kdevelop.notifyrc DESTINATION ${DATA_INSTALL_DIR}/kdevelop ) +install( FILES kdevelopui.rc katepartui.rc kdevelop.notifyrc DESTINATION ${DATA_INSTALL_DIR}/kdevelop ) +install( FILES kdevelop.xml DESTINATION ${XDG_MIME_INSTALL_DIR} ) +update_xdg_mimetypes( ${XDG_MIME_INSTALL_DIR} ) diff -Nru kdevelop-3.9.98/app/katepartui.rc kdevelop-4.0.1/app/katepartui.rc --- kdevelop-3.9.98/app/katepartui.rc 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/app/katepartui.rc 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,140 @@ + + + + &File + + + + + + + + &Edit + + + + + + + + + + &Advanced + + + + + + + + + + + + + + + + + + + + &View + + + + + + + + + + + + + + &Code Folding + + + + + + + + + + + + + &Tools + + + + + + + + + + + Word Completion + + + + + + + + + + + + + + + + + + + + + + + + + + + + + &Settings + + + + + + + + + + + + + + + + + + + + +Main Toolbar + + + + + + + + + + diff -Nru kdevelop-3.9.98/app/kdevelop.desktop kdevelop-4.0.1/app/kdevelop.desktop --- kdevelop-3.9.98/app/kdevelop.desktop 2010-01-10 10:53:38.000000000 +0000 +++ kdevelop-4.0.1/app/kdevelop.desktop 2010-07-17 20:08:19.000000000 +0100 @@ -9,6 +9,7 @@ Name[ca]=KDevelop 4 Name[ca@valencia]=KDevelop 4 Name[cs]=KDevelop 4 +Name[da]=KDevelop 4 Name[de]=KDevelop 4 Name[el]=KDevelop 4 Name[en_GB]=KDevelop 4 @@ -30,10 +31,12 @@ Name[nds]=KDevelop 4 Name[ne]=केडीई विकास ४ Name[nl]=KDevelop 4 +Name[pa]=KDevelop 4 Name[pl]=KDevelop 4 Name[pt]=KDevelop 4 Name[pt_BR]=KDevelop 4 Name[ru]=KDevelop 4 +Name[sl]=KDevelop 4 Name[sv]=KDevelop 4 Name[tr]=KDevelop 4 Name[uk]=KDevelop 4 @@ -44,6 +47,7 @@ GenericName[ca]=Entorn integrat de desenvolupament GenericName[ca@valencia]=Entorn integrat de desenvolupament GenericName[cs]=Integrované Vývojové Prostředí +GenericName[da]=Integreret udviklingsmiljø (IDE) GenericName[de]=Integrierte Entwicklungsumgebung GenericName[el]=ολοκληρωμένο περιβάλλον ανάπτυξης GenericName[en_GB]=Integrated Development Environment @@ -65,6 +69,7 @@ GenericName[pt]=Ambiente de Desenvolvimento Integrado GenericName[pt_BR]=Ambiente Integrado de Desenvolvimento GenericName[ru]=Интегрированная среда разработки +GenericName[sl]=Integrirano razvojno okolje GenericName[sv]=Integrerad utvecklingsmiljö GenericName[tr]=Bütünleşik Geliştirme Ortamı GenericName[uk]=Комплексне середовище розробки diff -Nru kdevelop-3.9.98/app/kdevelop.notifyrc kdevelop-4.0.1/app/kdevelop.notifyrc --- kdevelop-3.9.98/app/kdevelop.notifyrc 2010-01-19 12:39:48.000000000 +0000 +++ kdevelop-4.0.1/app/kdevelop.notifyrc 2010-07-17 20:08:19.000000000 +0100 @@ -29,6 +29,7 @@ Comment[nb]=KDevelop Comment[nds]=KDevelop Comment[nl]=KDevelop +Comment[pa]=KDevelop Comment[pl]=KDevelop Comment[pt]=KDevelop Comment[pt_BR]=KDevelop @@ -115,7 +116,7 @@ Comment[nl]=Proces met succes beëindigd Comment[pl]=Proces zakończony pomyślnie Comment[pt]=O processo terminou com sucesso -Comment[pt_BR]=Processo terminado com sucesso +Comment[pt_BR]=Processo concluído com sucesso Comment[ro]=Proces încheiat cu succes Comment[ru]=Процесс завершён успешно Comment[sk]=Proces skončil úspešne @@ -202,11 +203,11 @@ Comment[nl]=Proces voltooid met fouten Comment[pl]=Proces zakończony z błędami Comment[pt]=O processo terminou com erros -Comment[pt_BR]=Processo terminado com erros +Comment[pt_BR]=Processo concluído com erros Comment[ro]=Proces încheiat cu erori Comment[ru]=Процесс завершён с ошибками Comment[sk]=Proces skončil s chybami -Comment[sl]=Proces je končal brez napak +Comment[sl]=Proces je končal z napakami Comment[sv]=Processen avslutades med fel Comment[ta]=பிழையுடன் முடிவடைந்த செயலாக்கம் Comment[tg]=Ҳангоми иҷро намудани амал хатогие дида мешавад @@ -222,6 +223,7 @@ Name[ca]=S'està carregant el projecte Name[ca@valencia]=S'està carregant el projecte Name[cs]=Načítám projekt +Name[da]=Indlæser projekt Name[de]=Projekt wird geladen Name[en_GB]=Loading Project Name[es]=Cargando proyecto @@ -235,9 +237,11 @@ Name[nb]=Laster inn prosjekt Name[nds]=Projekt warrt laadt Name[nl]=Project wordt geladen +Name[pl]=Wczytywanie projektu Name[pt]=A Carregar o Projecto Name[pt_BR]=Carregando Projeto Name[ru]=Загрузка проекта +Name[sl]=Nalaganje projekta Name[sv]=Laddar projekt Name[tr]=Proje Yükleniyor Name[uk]=Завантаження проекту @@ -247,6 +251,7 @@ Comment=A project loading process has just started Comment[ca]=Tot just s'acaba de començar a carregar el projecte Comment[ca@valencia]=Tot just s'acaba de començar a carregar el projecte +Comment[da]=Indlæsning af projekt er lige startet Comment[de]=Es ist ein Projekt-Ladeprozess gestartet Comment[en_GB]=A project loading process has just started Comment[es]=Acaba de comenzar un proceso de carga de proyecto @@ -259,9 +264,11 @@ Comment[nb]=En prosess med prosjektinnlasting er nettopp startet Comment[nds]=Dat Laden vun en Projekt hett jüst anfungen Comment[nl]=Een proces voor het laden van een project is zojuist gestart +Comment[pl]=Rozpoczęło się wczytywanie projektu Comment[pt]=Acabou de ser iniciado um processo de carregamento do projecto Comment[pt_BR]=Um processo de carregamento de projeto foi iniciado Comment[ru]=Начата загрузка проекта +Comment[sl]=Pričel se je postopek nalaganja projekta Comment[sv]=En laddningsprocess för projektet har just startats Comment[tr]=Bir proje yükleme süreci başladı Comment[uk]=Процес завантаження проекту було запущено @@ -275,6 +282,7 @@ Name[ca]=El projecte s'ha carregat amb èxit Name[ca@valencia]=El projecte s'ha carregat amb èxit Name[cs]=Projekt úspěšně načten +Name[da]=Projekt indlæst Name[de]=Projekt erfolgreich geladen Name[en_GB]=Project Loaded Successfully Name[es]=Proyecto cargado con éxito @@ -288,9 +296,11 @@ Name[nb]=Prosjektet vellykket lastet inn Name[nds]=Projekt mit Spood laadt Name[nl]=Project is succesvol geladen +Name[pl]=Projekt wczytany poprawnie Name[pt]=O Projecto foi Carregado com Sucesso Name[pt_BR]=Projeto Carregado com Sucesso Name[ru]=Проект загружен +Name[sl]=Projekt uspešno naložen Name[sv]=Projekt laddat med lyckat resultat Name[tr]=Proje Başarılı Bir Şekilde Yüklendi Name[uk]=Проект успішно завантажено @@ -301,6 +311,7 @@ Comment[ca]=S'ha carregat amb èxit un projecte Comment[ca@valencia]=S'ha carregat amb èxit un projecte Comment[cs]=Projekt byl úspěšně načten +Comment[da]=Et projekt er blevet indlæst Comment[de]=Ein Projekt wurde erfolgreich geladen Comment[en_GB]=A project has been loaded successfully Comment[es]=Un proyecto ha sido cargado con éxito @@ -314,9 +325,11 @@ Comment[nb]=Et prosjekt er vellykket lastet inn Comment[nds]=En Projekt wöör mit Spood laadt Comment[nl]=Een project is succesvol geladen +Comment[pl]=Projekt został wczytany poprawnie Comment[pt]=Foi carregado um projecto com sucesso Comment[pt_BR]=Um projeto foi carregado com sucesso Comment[ru]=Проект загружен +Comment[sl]=Projekt je bil uspešno naložen Comment[sv]=Ett projekt har laddats med lyckat resultat Comment[tr]=Bir proje başarıyla yüklendi Comment[uk]=Проект було успішно завантажено @@ -330,6 +343,7 @@ Name[ca]=Depurador Name[ca@valencia]=Depurador Name[cs]=Debugger +Name[da]=Fejlsøger Name[de]=Debugger Name[en_GB]=Debugger Name[es]=Depurador @@ -338,11 +352,14 @@ Name[fr]=Débogueur Name[gl]=Depurador Name[it]=Debugger +Name[ja]=デバッガ Name[nb]=Feilsøker Name[nds]=Fehlersöker Name[nl]=Debugger +Name[pl]=Debugger Name[pt]=Depurador Name[pt_BR]=Depurador +Name[sl]=Razhroščevalnik Name[sv]=Avlusare Name[tr]=Hata Ayıklayıcı Name[uk]=Зневадник @@ -358,6 +375,7 @@ Name[ca]=Punt d'interrupció Name[ca@valencia]=Punt d'interrupció Name[cs]=Dosažen Breakpoint +Name[da]=Stoppunkt nået Name[de]=Haltepunkt erreicht Name[en_GB]=Breakpoint Hit Name[es]=Punto de interrupción alcanzado @@ -369,8 +387,10 @@ Name[nb]=Bruddpunkt nådd Name[nds]=Hollpunkt drapen Name[nl]=Breekpunt bereikt +Name[pl]=Uruchomiono pułapkę Name[pt]=Ponto de Paragem Atingido Name[pt_BR]=Ponto de interrupção atingido +Name[sl]=Prihod do prekinitvene točke Name[sv]=Brytpunkt påträffad Name[uk]=Проходження точки зупину Name[x-test]=xxBreakpoint Hitxx @@ -379,6 +399,7 @@ Comment=A Breakpoint has been hit by the debugger Comment[ca]=El depurador ha assolit un punt d'interrupció Comment[ca@valencia]=El depurador ha assolit un punt d'interrupció +Comment[da]=Fejlsøgeren nåede et stoppunkt Comment[de]=Der Debugger hat einen Beobachtungspunkt erreicht Comment[en_GB]=A Breakpoint has been hit by the debugger Comment[es]=El depurador ha alcanzado un punto de interrupción @@ -390,8 +411,10 @@ Comment[nb]=Feilsøkeren har nått et bruddpunkt Comment[nds]=De Fehlersöker is bi en Hollpunkt ankamen Comment[nl]=De debugger heeft een breekpunt bereikt +Comment[pl]=Pułapka została uruchomiona przez debugger Comment[pt]=Foi atingido um ponto de paragem pelo depurador Comment[pt_BR]=Um ponto de interrupção foi atingido pelo depurador +Comment[sl]=Razhroščevalnik je prispel do prekinitvene točke Comment[sv]=En brytpunkt har påträffats av avlusaren Comment[uk]=Інструмент зневаджування пройшов позицію точки зупину Comment[x-test]=xxA Breakpoint has been hit by the debuggerxx @@ -404,6 +427,7 @@ Name=Watchpoint Hit Name[ca]=Punt d'observació Name[ca@valencia]=Punt d'observació +Name[da]=Overvågningspunkt nået Name[de]=Beobachtungspunkt erreicht Name[en_GB]=Watchpoint Hit Name[es]=Punto de observación alcanzado @@ -415,8 +439,10 @@ Name[nb]=Treff på vaktpunkt Name[nds]=Luerpunkt drapen Name[nl]=Bewakingspunt bereikt +Name[pl]=Uruchomiono punkt kontrolny Name[pt]=Ponto de Vigia Atingido Name[pt_BR]=Ponto de Visualização atingido +Name[sl]=Prihod do opazovalne točke Name[sv]=Bevakningspunkt påträffad Name[uk]=Проходження точки спостереження Name[x-test]=xxWatchpoint Hitxx @@ -425,6 +451,7 @@ Comment=A Watchpoint has been hit by the debugger Comment[ca]=El depurador ha assolit un punt d'observació Comment[ca@valencia]=El depurador ha assolit un punt d'observació +Comment[da]=Fejlsøgeren nåede et overvågningspunkt Comment[de]=Der Debugger hat einen Beobachtungspunkt erreicht Comment[en_GB]=A Watchpoint has been hit by the debugger Comment[es]=El depurador ha alcanzado un punto de observación @@ -436,8 +463,10 @@ Comment[nb]=Feilsøkeren har truffet et vaktpunkt Comment[nds]=De Fehlersöker is bi en Luerpunkt ankamen Comment[nl]=De debugger heeft een bewakingspunt bereikt +Comment[pl]=Debugger uruchomił punkt kontrolny Comment[pt]=Foi atingido um ponto de vigia pelo depurador Comment[pt_BR]=Um ponto de Visualização foi atingido pelo depurador +Comment[sl]=Razhroščevalnik je prispel do opazovalne točke Comment[sv]=En bevakningspunkt har påträffats av avlusaren Comment[uk]=Інструмент зневаджування пройшов позицію точки спостереження Comment[x-test]=xxA Watchpoint has been hit by the debuggerxx diff -Nru kdevelop-3.9.98/app/kdevelopui.rc kdevelop-4.0.1/app/kdevelopui.rc --- kdevelop-3.9.98/app/kdevelopui.rc 2010-01-03 19:18:26.000000000 +0000 +++ kdevelop-4.0.1/app/kdevelopui.rc 2010-07-17 20:08:19.000000000 +0100 @@ -1,12 +1,12 @@ - + - + Session - + &Project @@ -24,7 +24,7 @@ - + &Run @@ -46,7 +46,7 @@ - + &Navigation @@ -58,9 +58,7 @@ - - | - + &File @@ -84,6 +82,8 @@ + + Editor @@ -94,9 +94,7 @@ - - | - + &Window @@ -157,17 +155,14 @@ Main Toolbar - - - + - diff -Nru kdevelop-3.9.98/app/kdevelop.xml kdevelop-4.0.1/app/kdevelop.xml --- kdevelop-3.9.98/app/kdevelop.xml 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/app/kdevelop.xml 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,42 @@ + + + + KDevelop 4 Project File + Fitxer de projecte de KDevelop 4 + Fitxer de projecte de KDevelop 4 + Soubor projektu Kdevelop 4 + KDevelop 4 projektfil + KDevelop-4-Projektdatei + Αρχείο έργου KDevelop 4 + KDevelop 4 Project File + Archivo de proyecto de KDevelop 4 + KDevelop 4 projektifail + پروندۀ پروژۀ KDevelop 4 + KDevelop 4-projektitiedosto + Fichier projet KDevelop 4 + Comhad Tionscadail KDevelop 4 + Ficheiro de proxecto de KDevelop 4 + के-डेवलप ४ परियोजना फ़ाइल + के-डेवलप ४ परियोजना फाइल + File di progetto per KDevelop 4 + KDevelop 4 プロジェクトファイル + KDevelop 4 프로젝트 파일 + KDevelop 4 projekta fails + KDevelop 4 prosjektfil + KDevelop4-Projektdatei + केडीई विकास ४ परियोजना फाइल + KDevelop 4 projectbestand + Plik projektu KDevelopa 4 + Ficheiro de Projecto do KDevelop 4 + Arquivo de Projeto do KDevelop 4 + Fișier Proiect Kdevelop 4 + Файл проекта KDevelop 4 + Projektna datoteka KDevelop 4 + KDevelop 4-projektfil + KDevelop 4 Proje Dosyası + Файл проекту KDevelop 4 + KDevelop 4 工程文件 + KDevelop 4 專案檔 + + + diff -Nru kdevelop-3.9.98/app/kdevideextension.cpp kdevelop-4.0.1/app/kdevideextension.cpp --- kdevelop-3.9.98/app/kdevideextension.cpp 2009-06-28 19:06:12.000000000 +0100 +++ kdevelop-4.0.1/app/kdevideextension.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -18,15 +18,8 @@ ***************************************************************************/ #include "kdevideextension.h" -#include -#include - -#include -#include -#include -#include -#include -#include +#include +#include KDevIDEExtension::KDevIDEExtension() : ShellExtension() diff -Nru kdevelop-3.9.98/app/main.cpp kdevelop-4.0.1/app/main.cpp --- kdevelop-3.9.98/app/main.cpp 2010-02-04 00:57:02.000000000 +0000 +++ kdevelop-4.0.1/app/main.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -8,6 +8,7 @@ * Copyright 2001-2002 Bernd Gehrmann * * Copyright 2001-2002 Matthias Hoelzer-Kluepfel * * Copyright 2003 Roberto Raggi * + * Copyright 2010 Niko Sams * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Library General Public License as * @@ -52,13 +53,19 @@ int main( int argc, char *argv[] ) { + QList argvOrig; //We copy the original argv here, as it seems that KCmdLineArgs changes the arguments ("--style" becomes "-style") + + for(int a = 0; a < argc; ++a) + argvOrig << argv[a]; + static const char description[] = I18N_NOOP( "The KDevelop Integrated Development Environment" ); KAboutData aboutData( "kdevelop", 0, ki18n( "KDevelop" ), i18n("%1", QString(VERSION) ).toUtf8(), ki18n(description), KAboutData::License_GPL, - ki18n( "Copyright 1999-2009, The KDevelop developers" ), KLocalizedString(), "http://www.kdevelop.org" ); + ki18n( "Copyright 1999-2010, The KDevelop developers" ), KLocalizedString(), "http://www.kdevelop.org/" ); #include "shared_app_init.cpp" - options.add("s ", ki18n("Session to load" )); + options.add("cs ", ki18n("Create new session with given name.")); + options.add("s ", ki18n("Session to load. You can pass either hash or the name of the session." )); options.add("sessions", ki18n( "List available sessions and quit" )); KCmdLineArgs::addCmdLineOptions( options ); @@ -68,33 +75,125 @@ if(args->isSet("sessions")) { QTextStream qout(stdout); - qout << endl << ki18n("Available sessions (use '-s HASH' to open a specific one):").toString() << endl << endl; - qout << QString("%1").arg(ki18n("Hash").toString(), -38) << '\t' << ki18n("Session contents").toString() << endl; + qout << endl << ki18n("Available sessions (use '-s HASH' or '-s NAME' to open a specific one):").toString() << endl << endl; + qout << QString("%1").arg(ki18n("Hash").toString(), -38) << '\t' << ki18n("Name: Opened Projects").toString() << endl; foreach(const KDevelop::SessionInfo& si, KDevelop::SessionController::availableSessionInfo()) { - qout << si.uuid.toString() << '\t' << si.description << endl; + if ( si.name.isEmpty() && si.projects.isEmpty() ) { + continue; + } + qout << si.uuid.toString() << '\t' << si.description; + + if(!KDevelop::SessionController::tryLockSession(si.uuid.toString())) + qout << " " << i18n("[running]"); + + qout << endl; } return 0; } - ///Manage sessions: There always needs a KDEV_SESSION to be set, so the duchain can be stored in the session-specific directory - QString session = args->getOption("s"); + // if empty, restart kdevelop with last active session, see SessionController::defaultSessionId + QString session; + + if ( args->isSet("debug") ) { + if ( debugArgs.isEmpty() ) { + QTextStream qerr(stderr); + qerr << endl << i18n("Specify the binary you want to debug.") << endl; + return 1; + } + QString binary = debugArgs.first(); + if ( binary.contains('/') ) { + binary = binary.right(binary.lastIndexOf('/')); + } + session = i18n("Debug")+" "+binary; + } else if ( args->isSet("cs") ) + { + session = args->getOption("cs"); + foreach(const KDevelop::SessionInfo& si, KDevelop::SessionController::availableSessionInfo()) + { + if ( session == si.name ) { + QTextStream qerr(stderr); + qerr << endl << i18n("A session with the name %1 exists already. Use the -s switch to open it.", session) << endl; + return 1; + } + } + // session doesn't exist, we can create it + } else if ( args->isSet("s") ) { + session = args->getOption("s"); + bool found = false; + foreach(const KDevelop::SessionInfo& si, KDevelop::SessionController::availableSessionInfo()) + { + if ( session == si.name || session == si.uuid.toString() ) { + found = true; + break; + } + } + if ( !found ) { + QTextStream qerr(stderr); + qerr << endl << i18n("Cannot open unknown session %1. See --sessions switch for available sessions or use -cs to create a new one.", session) << endl; + return 1; + } + if ( !KDevelop::SessionController::tryLockSession(KDevelop::SessionController::defaultSessionId(session)) ) { + QTextStream qerr(stderr); + qerr << endl << i18n("Session %1 is already running.", session) << endl; + return 1; + } + } - //No session is set, we have to pick one, then we restart kdevelop through kdev_starter, and forward all relevant arguments to it + ///Manage sessions: There always needs a KDEV_SESSION to be set, so the duchain can be stored in the session-specific directory session = KDevelop::SessionController::defaultSessionId(session); - //@todo Eventually show a session-picking dialog - KProcess proc; - proc << QFileInfo(QApplication::applicationFilePath()).path() + "/kdevelop.bin" ; + //if session is already running create a new one + //if the user explicitely picked a already running session using the -s switch he already + //gets got an error + if(!KDevelop::SessionController::tryLockSession(session)) { + session = QUuid::createUuid(); + } + +#ifdef Q_WS_WIN + QFileInfo fi(QFileInfo(QApplication::applicationFilePath()).path() + "/kdevelop.bin.exe"); +#else + QFileInfo fi(QFileInfo(QApplication::applicationFilePath()).path() + "/kdevelop.bin"); +#endif + if( !fi.exists() ) { + QTextStream qerr(stderr); + qerr << endl << i18n("Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please fix your KDevelop installation.", fi.absolutePath() ) << endl; + return -1; + } + //Forward all arguments, except -s as the internal app doesn't setup -s or --sessions arguments - for(uint a = 1; a < argc; ++a) { - if( qstrcmp( argv[a], "-s" ) == 0 ) { + QList kdevelopBinArgs; + for(int a = 1; a < argvOrig.count(); ++a) { + // note: KCmdLineArgs does not care whether an option gets passed as with one or two dashes + if( argvOrig[a] =="-s" || argvOrig[a] == "--s" || argvOrig[a] == "--cs" || argvOrig[a] == "-cs" ) { ++a; - } else { - proc << QString(argv[a]); + } else if ( argvOrig[a] != "--sessions" && argvOrig[a] != "-sessions" ) { + kdevelopBinArgs << argvOrig[a]; } } + +#ifdef Q_WS_WIN + KProcess proc; + proc << fi.absoluteFilePath(); + foreach (const QString &arg, kdevelopBinArgs) { + proc << arg; + } proc.setEnv( "KDEV_SESSION", session ); return proc.execute(); -} +#else + QByteArray pathData = fi.absoluteFilePath().toLocal8Bit(); + char **cmd = 0; + cmd = (char**)realloc(cmd, (kdevelopBinArgs.count() + 2) * sizeof(char*)); + cmd[0] = pathData.data(); + for (int i = 0; i < kdevelopBinArgs.length(); ++i) { + cmd[i+1] = kdevelopBinArgs[i].data(); + } + cmd[kdevelopBinArgs.count() + 1] = 0; + + QByteArray sessionData = session.toLocal8Bit(); + + setenv("KDEV_SESSION", sessionData.data(), true); + return execv(qPrintable(fi.absoluteFilePath()), cmd); +#endif +} diff -Nru kdevelop-3.9.98/app/main_internal.cpp kdevelop-4.0.1/app/main_internal.cpp --- kdevelop-3.9.98/app/main_internal.cpp 2010-02-04 00:57:02.000000000 +0000 +++ kdevelop-4.0.1/app/main_internal.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -8,6 +8,7 @@ * Copyright 2001-2002 Bernd Gehrmann * * Copyright 2001-2002 Matthias Hoelzer-Kluepfel * * Copyright 2003 Roberto Raggi * + * Copyright 2010 Niko Sams * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Library General Public License as * @@ -41,6 +42,7 @@ #include #include #include +#include #include #include @@ -48,6 +50,10 @@ #include #include #include +#include +#include +#include +#include #include "kdevideextension.h" #include @@ -59,19 +65,31 @@ using KDevelop::Core; +class KDevelopApplication: public KApplication { +public: + explicit KDevelopApplication(bool GUIenabled = true): KApplication(GUIenabled) {} + + void saveState( QSessionManager& sm ) { + if (KDevelop::Core::self() && KDevelop::Core::self()->sessionController()) + sm.setRestartCommand(QStringList() << "kdevelop" << "-s" << KDevelop::Core::self()->sessionController()->activeSession()->id().toString()); + KApplication::saveState(sm); + } + +}; + int main( int argc, char *argv[] ) { static const char description[] = I18N_NOOP( "The KDevelop Integrated Development Environment" ); KAboutData aboutData( "kdevelop", 0, ki18n( "KDevelop" ), i18n("%1 (using KDevPlatform %2)", QString(VERSION), Core::version()).toUtf8(), ki18n(description), KAboutData::License_GPL, - ki18n( "Copyright 1999-2009, The KDevelop developers" ), KLocalizedString(), "http://www.kdevelop.org" ); + ki18n( "Copyright 1999-2010, The KDevelop developers" ), KLocalizedString(), "http://www.kdevelop.org/" ); #include "shared_app_init.cpp" KCmdLineArgs::addCmdLineOptions( options ); KCmdLineArgs* args = KCmdLineArgs::parsedArgs(); - KApplication app; + KDevelopApplication app; KDevIDEExtension::init(); if(!getenv("KDEV_SESSION")) @@ -91,7 +109,9 @@ splash->show(); } - Core::initialize(splash); + if(!Core::initialize(splash)) + return 5; + KGlobal::locale()->insertCatalog( Core::self()->componentData().catalogName() ); Core* core = Core::self(); @@ -100,41 +120,115 @@ { foreach(const QString& p, projectNames) { - KUrl url(p); - QString ext = QFileInfo( url.fileName() ).suffix(); - if( ext == "kdev4" ) - { - core->projectController()->openProject( url ); + QFileInfo info( p ); + if( info.suffix() == "kdev4" ) { + // make sure the project is not already opened by the session controller + bool shouldOpen = true; + KUrl url(info.absoluteFilePath()); + foreach(KDevelop::IProject* p, core->projectController()->projects()) { + if (p->projectFileUrl() == url) { + shouldOpen = false; + break; + } + } + if (shouldOpen) { + core->projectController()->openProject( url ); + } } } } - int count=args->count(); - for(int i=0; iarg(i); - //Allow opening specific lines in documents, like mydoc.cpp:10 - int lineNumberOffset = file.lastIndexOf(':'); - KTextEditor::Cursor line; - if( lineNumberOffset != -1 ) + if ( args->isSet("debug") ) { + if ( debugArgs.isEmpty() ) { + QTextStream qerr(stderr); + qerr << endl << i18n("Specify the binary you want to debug.") << endl; + return 1; + } + QString binary = debugArgs.first(); + if ( binary.contains('/') ) { + binary = binary.right(binary.lastIndexOf('/')); + } + QString launchName = i18n("Debug")+' '+binary; + + KDevelop::LaunchConfiguration* launch = 0; + kDebug() << launchName; + foreach (KDevelop::LaunchConfiguration *l, core->runControllerInternal()->launchConfigurationsInternal()) { + kDebug() << l->name(); + if (l->name() == launchName) { + launch = l; + } + } + + KDevelop::LaunchConfigurationType *type = 0; + foreach (KDevelop::LaunchConfigurationType *t, core->runController()->launchConfigurationTypes()) { + kDebug() << t->id(); + if (t->id() == "Native Application") { + type = t; + break; + } + } + if (!type) { + QTextStream qerr(stderr); + qerr << endl << i18n("Cannot find native launch configuration type") << endl; + return 1; + } + + if (launch && launch->type()->id() != "Native Application") launch = 0; + if (launch && launch->launcherForMode("debug") != args->getOption("debug")) launch = 0; + if (!launch) { + kDebug() << launchName << "not found, creating a new one"; + QPair launcher; + launcher.first = "debug"; + foreach (KDevelop::ILauncher *l, type->launchers()) { + if (l->id() == args->getOption("debug")) { + if (l->supportedModes().contains("debug")) { + launcher.second = l->id(); + } + } + } + if (launcher.second.isEmpty()) { + QTextStream qerr(stderr); + qerr << endl << i18n("Cannot find launcher %1").arg(args->getOption("debug")) << endl; + return 1; + } + KDevelop::ILaunchConfiguration* ilaunch = core->runController()->createLaunchConfiguration(type, launcher, 0, launchName); + launch = dynamic_cast(ilaunch); + } + + type->configureLaunchFromCmdLineArguments(launch->config(), debugArgs); + launch->config().writeEntry("Break on Start", true); + core->runControllerInternal()->setDefaultLaunch(launch); + + core->runControllerInternal()->execute("debug", launch); + } else { + int count=args->count(); + for(int i=0; iarg(i); + //Allow opening specific lines in documents, like mydoc.cpp:10 + int lineNumberOffset = file.lastIndexOf(':'); + KTextEditor::Cursor line; + if( lineNumberOffset != -1 ) { - file = file.left(lineNumberOffset); - line = KTextEditor::Cursor(lineNr, 0); + bool isInt; + int lineNr = file.mid(lineNumberOffset+1).toInt(&isInt); + if (isInt) + { + file = file.left(lineNumberOffset); + line = KTextEditor::Cursor(lineNr, 0); + } } - } - KUrl f(file); - if( f.isRelative() ) - f=KUrl(QDir::currentPath(), file); + if( QFileInfo( file ).isRelative() ) { + file = QDir::currentPath() + QDir::separator() + file; + } + KUrl f("file://"+file); - if(!core->documentController()->openDocument(f, line)) - kWarning() << i18n("Could not open %1") << args->arg(i); + if(!core->documentController()->openDocument(f, line)) + kWarning() << i18n("Could not open %1") << args->arg(i); + } + args->clear(); } - args->clear(); return app.exec(); } diff -Nru kdevelop-3.9.98/app/shared_app_init.cpp kdevelop-4.0.1/app/shared_app_init.cpp --- kdevelop-3.9.98/app/shared_app_init.cpp 2010-02-04 00:57:02.000000000 +0000 +++ kdevelop-4.0.1/app/shared_app_init.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -8,6 +8,7 @@ * Copyright 2001-2002 Bernd Gehrmann * * Copyright 2001-2002 Matthias Hoelzer-Kluepfel * * Copyright 2003 Roberto Raggi * + * Copyright 2010 Niko Sams * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Library General Public License as * @@ -83,7 +84,33 @@ aboutData.addCredit( ki18n("Sascha Cunz") , ki18n( "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" ), "mail@sacu.de" ); aboutData.addCredit( ki18n("Zoran Karavla"), ki18n( "Artwork for the ruby language" ), "webmaster@the-error.net", "http://the-error.net" ); + //we can't use KCmdLineArgs as it doesn't allow arguments for the debugee + //so lookup the --debug switch and eat everything behind by decrementing argc + //debugArgs is filled with args after --debug + QStringList debugArgs; + { + bool debugFound = false; + int c = argc; + for (int i=0; i < c; ++i) { + if (debugFound) { + debugArgs << argv[i]; + } else if (QString(argv[i]) == "--debug") { + if (argc <= i+1) { + argc = i + 1; + } else { + i++; + argc = i + 1; + } + debugFound = true; + } else if (QString(argv[i]).startsWith("--debug=")) { + argc = i + 1; + debugFound = true; + } + } + } + KCmdLineArgs::init( argc, argv, &aboutData ); KCmdLineOptions options; options.add("project ", ki18n( "Url to project to load" )); options.add("+files", ki18n( "Files to load" )); + options.add("debug ", ki18n( "Start debugger, for example gdb. The binary that should be debugged must follow - including arguments." )); \ No newline at end of file diff -Nru kdevelop-3.9.98/app/vendor/kate/katepartui.rc kdevelop-4.0.1/app/vendor/kate/katepartui.rc --- kdevelop-3.9.98/app/vendor/kate/katepartui.rc 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/app/vendor/kate/katepartui.rc 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,130 @@ + + + + &File + + + + + + + + &Edit + + + + + + + + + + + + + + + + + + + + + + + + + &View + + + + + + + + + + + + + + &Code Folding + + + + + + + + + + + + + &Tools + + + + + + + + + + + Word Completion + + + + + + + + + + + + + + + + + + + + + + + + + + + + + &Settings + + + + + + + + + + + + + + + + + + +Main Toolbar + + + + + + + diff -Nru kdevelop-3.9.98/app/x-kdevelop.desktop kdevelop-4.0.1/app/x-kdevelop.desktop --- kdevelop-3.9.98/app/x-kdevelop.desktop 2010-01-10 10:53:38.000000000 +0000 +++ kdevelop-4.0.1/app/x-kdevelop.desktop 1970-01-01 01:00:00.000000000 +0100 @@ -1,41 +0,0 @@ -[Desktop Entry] -Comment=KDevelop 4 Project File -Comment[ca]=Fitxer de projecte de KDevelop 4 -Comment[ca@valencia]=Fitxer de projecte de KDevelop 4 -Comment[cs]=Soubor projektu Kdevelop 4 -Comment[de]=KDevelop-4-Projektdatei -Comment[el]=Αρχείο έργου KDevelop 4 -Comment[en_GB]=KDevelop 4 Project File -Comment[es]=Archivo de proyecto de KDevelop 4 -Comment[et]=KDevelop 4 projektifail -Comment[fa]=پروندۀ پروژۀ KDevelop 4 -Comment[fi]=KDevelop 4-projektitiedosto -Comment[fr]=Fichier projet KDevelop 4 -Comment[ga]=Comhad Tionscadail KDevelop 4 -Comment[gl]=Ficheiro de proxecto de KDevelop 4 -Comment[hi]=के-डेवलप ४ परियोजना फ़ाइल -Comment[hne]=के-डेवलप ४ परियोजना फाइल -Comment[it]=File di progetto per KDevelop 4 -Comment[ja]=KDevelop 4 プロジェクトファイル -Comment[ko]=KDevelop 4 프로젝트 파일 -Comment[lv]=KDevelop 4 projekta fails -Comment[nb]=KDevelop 4 prosjektfil -Comment[nds]=KDevelop4-Projektdatei -Comment[ne]=केडीई विकास ४ परियोजना फाइल -Comment[nl]=KDevelop 4 projectbestand -Comment[pl]=Plik projektu KDevelopa 4 -Comment[pt]=Ficheiro de Projecto do KDevelop 4 -Comment[pt_BR]=Arquivo de Projeto do KDevelop 4 -Comment[ro]=Fișier Proiect Kdevelop 4 -Comment[ru]=Файл проекта KDevelop 4 -Comment[sv]=KDevelop 4-projektfil -Comment[tr]=KDevelop 4 Proje Dosyası -Comment[uk]=Файл проекту KDevelop 4 -Comment[x-test]=xxKDevelop 4 Project Filexx -Comment[zh_CN]=KDevelop 4 工程文件 -Comment[zh_TW]=KDevelop 4 專案檔 -DefaultApp=kdevelop -Icon=kdevelop_project -Type=MimeType -MimeType=application/x-kdevelop; -Patterns=*.kdev4; diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_plaincpp/cmake_plaincpp.kdevtemplate kdevelop-4.0.1/app_templates/cpp/CMake/cmake_plaincpp/cmake_plaincpp.kdevtemplate --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_plaincpp/cmake_plaincpp.kdevtemplate 2010-01-19 12:39:48.000000000 +0000 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_plaincpp/cmake_plaincpp.kdevtemplate 2010-07-17 20:08:19.000000000 +0100 @@ -4,6 +4,7 @@ Name[ca]=Senzilla aplicació C++ basada en CMake Name[ca@valencia]=Senzilla aplicació C++ basada en CMake Name[cs]=Jednoduchá aplikace C++ založená na CMake +Name[da]=Simpel CMake-baseret C++-applikation Name[de]=Einfache auf CMake basierende C++-Anwendung Name[en_GB]=Simple CMake-based C++ application Name[es]=Aplicación C++ sencilla basada en CMake @@ -11,13 +12,15 @@ Name[fi]=Yksinkertainen CMake-perustainen C++-sovellus Name[fr]=Application C++ simple utilisant CMake Name[gl]=Programa básico en C++ baseado en CMake -Name[it]=Semplice applicazione C++ basata su CMake +Name[it]=Semplice applicazione in C++ basata su CMake Name[nb]=Enkelt C++-program basert på CMake Name[nds]=Eenfach op CMake-baseert "C++"-Programm Name[nl]=Eenvoudige op CMake gebaseerd C++ programma +Name[pl]=Prosty program w C++ używający CMake Name[pt]=Aplicação simples em C++ com CMake Name[pt_BR]=Simples Aplicativo C++ baseado no CMake Name[ru]=Простое приложение на С++ с CMake +Name[sl]=Preprost program v C++, temelječ na CMake Name[sv]=Enkelt CMake-baserat C++ program Name[tr]=Basit CMake temelli C++ uygulaması Name[uk]=Проста заснована на CMake програма C++ @@ -26,4 +29,4 @@ Name[zh_TW]=簡單的使用 CMake 的 C++ 應用程式 Category=C++/No GUI (CMake) Icon=default-kdevelop -ShowFilesAfterGeneration=%{dest}/src/main.cpp +ShowFilesAfterGeneration=%{dest}/main.cpp diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core/cmake_qt4core.kdevtemplate kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core/cmake_qt4core.kdevtemplate --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core/cmake_qt4core.kdevtemplate 2010-01-10 10:53:38.000000000 +0000 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core/cmake_qt4core.kdevtemplate 2010-07-17 20:08:19.000000000 +0100 @@ -4,6 +4,7 @@ Name[ca]=Aplicació principal Qt4 CMake Name[ca@valencia]=Aplicació principal Qt4 CMake Name[cs]=Aplikace Qt4 CMake Core +Name[da]=Qt4 CMake Core-applikation Name[de]=Qt-4/CMake-Anwendung Name[el]=Βασική εφαμοργή Qt4 CMake Name[en_GB]=Qt4 CMake Core application @@ -13,6 +14,7 @@ Name[fr]=Application principale CMake pour Qt4 Name[gl]=Programa básico de Qt4 con CMake Name[hne]=क्यूटी४ सीमेक कोर अनुपरयोग +Name[it]=Applicazione core in Qt4 con CMake Name[ja]=Qt4 CMake コアアプリケーション Name[lv]=Qt4 CMake core programma Name[nb]=Qt4 CMake kjerneprogram @@ -32,6 +34,7 @@ Comment=Generate a CMake/Qt4 based application (crossplatform compatible) Comment[ca]=Genera una aplicació basada en CMake/Qt4 (multi plataforma) Comment[ca@valencia]=Genera una aplicació basada en CMake/Qt4 (multi plataforma) +Comment[da]=Genererer et CMake-/Qt4-baseret program (krydsplatform kompatibelt) Comment[de]=Erstellt eine auf CMake und Qt 4 basierende Anwendung (Plattformunabhängig) Comment[el]=Δημιουργία μιας εφαρμογής με βάση τα CMake/Qt4 (συμβατή με πολλαπλές πλατφόρμες) Comment[en_GB]=Generate a CMake/Qt4 based application (crossplatform compatible) @@ -51,6 +54,7 @@ Comment[pt]=Gera uma aplicação baseada no QMake/Qt4 (compatível com várias plataformas) Comment[pt_BR]=Gera um aplicativo em CMake/Qt4 (compatível com várias plataformas) Comment[ru]=Создание кроссплатформенного приложения CMake/Qt4 +Comment[sl]=Ustvari program temelječ na CMake/Qt4 (združljiv z več platformami) Comment[sv]=Skapar ett QMake- och Qt4-baserat program (som fungerar på flera plattformar) Comment[tr]=CMake/Qt4 tabanlı bir uygulama oluştur (platformlararası uyumlu) Comment[uk]=Створити програму, засновану на CMake/Qt4 (сумісну з декількома платформами) diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAME}.cpp kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAME}.cpp --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAME}.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAME}.cpp 1970-01-01 01:00:00.000000000 +0100 @@ -1,9 +0,0 @@ -#include "%{APPNAME}.h" - -%{APPNAME}::%{APPNAME}() -{} - -%{APPNAME}::~%{APPNAME}() -{} - -#include "%{APPNAME}.moc" diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAME}.h kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAME}.h --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAME}.h 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAME}.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,14 +0,0 @@ -#ifndef %{APPNAME}_H -#define %{APPNAME}_H - -#include - -class %{APPNAME} : public QObject -{ -Q_OBJECT -public: - %{APPNAME}(); - virtual ~%{APPNAME}(); -}; - -#endif // %{APPNAME}_H diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAMEID}.cpp kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAMEID}.cpp --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAMEID}.cpp 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAMEID}.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,9 @@ +#include "%{APPNAMEID}.h" + +%{APPNAMEID}::%{APPNAMEID}() +{} + +%{APPNAMEID}::~%{APPNAMEID}() +{} + +#include "%{APPNAMEID}.moc" diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAMEID}.h kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAMEID}.h --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAMEID}.h 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/%{APPNAMEID}.h 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,14 @@ +#ifndef %{APPNAMEID}_H +#define %{APPNAMEID}_H + +#include + +class %{APPNAMEID} : public QObject +{ +Q_OBJECT +public: + %{APPNAMEID}(); + virtual ~%{APPNAMEID}(); +}; + +#endif // %{APPNAME}_H diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/CMakeLists.txt kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/CMakeLists.txt --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/CMakeLists.txt 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/CMakeLists.txt 2010-07-17 20:08:19.000000000 +0100 @@ -5,9 +5,9 @@ include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}) -set(%{APPNAME}_SRCS %{APPNAME}.cpp main.cpp) -qt4_automoc(${%{APPNAME}_SRCS}) -add_executable(%{APPNAME} ${%{APPNAME}_SRCS}) -target_link_libraries(%{APPNAME} ${QT_QTCORE_LIBRARY}) +set(%{APPNAMEID}_SRCS %{APPNAMEID}.cpp main.cpp) +qt4_automoc(${%{APPNAMEID}_SRCS}) +add_executable(%{APPNAMEID} ${%{APPNAMEID}_SRCS}) +target_link_libraries(%{APPNAMEID} ${QT_QTCORE_LIBRARY}) add_subdirectory(tests) diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/cmake_qt4core_qtest.kdevtemplate kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/cmake_qt4core_qtest.kdevtemplate --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/cmake_qt4core_qtest.kdevtemplate 2010-01-10 10:53:38.000000000 +0000 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/cmake_qt4core_qtest.kdevtemplate 2010-07-17 20:08:19.000000000 +0100 @@ -3,6 +3,7 @@ Name=Qt4 CMake QTest Core application Name[ca]=Aplicació principal Qt4 CMake QTest Name[ca@valencia]=Aplicació principal Qt4 CMake QTest +Name[da]=Qt4 CMake QTest Core-applikation Name[de]=Qt-4/CMake/QTest-Anwendung Name[el]=Βασική εφαρμογή Qt4 CMake QTest Name[en_GB]=Qt4 CMake QTest Core application @@ -11,6 +12,7 @@ Name[fi]=Qt4 CMake QTest-ydinsovellus Name[fr]=Application principale QTest CMake pour Qt4 Name[gl]=Programa básico de Qt4 con CMake e QTest +Name[it]=Applicazione core QTest in Qt4 con CMake Name[ja]=Qt4 CMake QTest コアアプリケーション Name[lv]=Qt4 CMake QTest Core programma Name[nb]=Qt4 CMake QTest kjerneprogram @@ -30,6 +32,7 @@ Comment=Generate a CMake/Qt4 based application (crossplatform compatible) Comment[ca]=Genera una aplicació basada en CMake/Qt4 (multi plataforma) Comment[ca@valencia]=Genera una aplicació basada en CMake/Qt4 (multi plataforma) +Comment[da]=Genererer et CMake-/Qt4-baseret program (krydsplatform kompatibelt) Comment[de]=Erstellt eine auf CMake und Qt 4 basierende Anwendung (Plattformunabhängig) Comment[el]=Δημιουργία μιας εφαρμογής με βάση τα CMake/Qt4 (συμβατή με πολλαπλές πλατφόρμες) Comment[en_GB]=Generate a CMake/Qt4 based application (crossplatform compatible) @@ -49,6 +52,7 @@ Comment[pt]=Gera uma aplicação baseada no QMake/Qt4 (compatível com várias plataformas) Comment[pt_BR]=Gera um aplicativo em CMake/Qt4 (compatível com várias plataformas) Comment[ru]=Создание кроссплатформенного приложения CMake/Qt4 +Comment[sl]=Ustvari program temelječ na CMake/Qt4 (združljiv z več platformami) Comment[sv]=Skapar ett QMake- och Qt4-baserat program (som fungerar på flera plattformar) Comment[tr]=CMake/Qt4 tabanlı bir uygulama oluştur (platformlararası uyumlu) Comment[uk]=Створити програму, засновану на CMake/Qt4 (сумісну з декількома платформами) diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/main.cpp kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/main.cpp --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/main.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/main.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -1,10 +1,10 @@ #include -#include "%{APPNAME}.h" +#include "%{APPNAMEID}.h" int main(int argc, char** argv) { QCoreApplication app(argc, argv); - %{APPNAME} foo; + %{APPNAMEID} foo; return app.exec(); } diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAMEID}Test.cpp kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAMEID}Test.cpp --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAMEID}Test.cpp 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAMEID}Test.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,23 @@ +#include "%{APPNAMEID}Test.h" +#include + +void %{APPNAMEID}Test::initTestCase() +{} + +void %{APPNAMEID}Test::init() +{} + +void %{APPNAMEID}Test::cleanup() +{} + +void %{APPNAMEID}Test::cleanupTestCase() +{} + +void %{APPNAMEID}Test::someTest() +{ + QCOMPARE(1,2); +} + + +QTEST_MAIN(%{APPNAMEID}Test) +#include "%{APPNAMEID}Test.moc" diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAMEID}Test.h kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAMEID}Test.h --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAMEID}Test.h 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAMEID}Test.h 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,18 @@ +#ifndef %{APPNAMEID}TEST_H +#define %{APPNAMEID}TEST_H + +#include + +class %{APPNAMEID}Test : public QObject +{ +Q_OBJECT +private slots: + void initTestCase(); + void init(); + void cleanup(); + void cleanupTestCase(); + + void someTest(); +}; + +#endif // %{APPNAME}TEST_H diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAME}Test.cpp kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAME}Test.cpp --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAME}Test.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAME}Test.cpp 1970-01-01 01:00:00.000000000 +0100 @@ -1,23 +0,0 @@ -#include "%{APPNAME}Test.h" -#include - -void %{APPNAME}Test::initTestCase() -{} - -void %{APPNAME}Test::init() -{} - -void %{APPNAME}Test::cleanup() -{} - -void %{APPNAME}Test::cleanupTestCase() -{} - -void %{APPNAME}Test::someTest() -{ - QCOMPARE(1,2); -} - - -QTEST_MAIN(%{APPNAME}Test) -#include "%{APPNAME}Test.moc" diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAME}Test.h kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAME}Test.h --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAME}Test.h 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/%{APPNAME}Test.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,18 +0,0 @@ -#ifndef %{APPNAME}TEST_H -#define %{APPNAME}TEST_H - -#include - -class %{APPNAME}Test : public QObject -{ -Q_OBJECT -private slots: - void initTestCase(); - void init(); - void cleanup(); - void cleanupTestCase(); - - void someTest(); -}; - -#endif // %{APPNAME}TEST_H diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/CMakeLists.txt kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/CMakeLists.txt --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/CMakeLists.txt 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4core_qtest/tests/CMakeLists.txt 2010-07-17 20:08:19.000000000 +0100 @@ -1,8 +1,8 @@ include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}) set(CMAKE_EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}) -set(%{APPNAME}Test_SRCS %{APPNAME}Test.cpp) -qt4_automoc(${%{APPNAME}Test_SRCS}) -add_executable(%{APPNAME}Test ${%{APPNAME}Test_SRCS}) -add_test(%{APPNAME}Test %{APPNAME}Test) -target_link_libraries(%{APPNAME}Test ${QT_QTTEST_LIBRARY}) +set(%{APPNAMEID}Test_SRCS %{APPNAMEID}Test.cpp) +qt4_automoc(${%{APPNAMEID}Test_SRCS}) +add_executable(%{APPNAMEID}Test ${%{APPNAMEID}Test_SRCS}) +add_test(%{APPNAMEID}Test %{APPNAMEID}Test) +target_link_libraries(%{APPNAMEID}Test ${QT_QTTEST_LIBRARY}) diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAME}.cpp kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAME}.cpp --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAME}.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAME}.cpp 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ -#include "%{APPNAME}.h" - -#include -#include -#include -#include - -%{APPNAME}::%{APPNAME}() -{ - QLabel* l = new QLabel( this ); - l->setText( "Hello World!" ); - setCentralWidget( l ); - QAction* a = new QAction(this); - a->setText( "Quit" ); - connect(a, SIGNAL(triggered()), SLOT(close()) ); - menuBar()->addMenu( "File" )->addAction( a ); -} - -%{APPNAME}::~%{APPNAME}() -{} - -#include "%{APPNAME}.moc" diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAME}.h kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAME}.h --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAME}.h 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAME}.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,14 +0,0 @@ -#ifndef %{APPNAME}_H -#define %{APPNAME}_H - -#include - -class %{APPNAME} : public QMainWindow -{ -Q_OBJECT -public: - %{APPNAME}(); - virtual ~%{APPNAME}(); -}; - -#endif // %{APPNAME}_H diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAMEID}.cpp kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAMEID}.cpp --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAMEID}.cpp 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAMEID}.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,22 @@ +#include "%{APPNAMEID}.h" + +#include +#include +#include +#include + +%{APPNAMEID}::%{APPNAMEID}() +{ + QLabel* l = new QLabel( this ); + l->setText( "Hello World!" ); + setCentralWidget( l ); + QAction* a = new QAction(this); + a->setText( "Quit" ); + connect(a, SIGNAL(triggered()), SLOT(close()) ); + menuBar()->addMenu( "File" )->addAction( a ); +} + +%{APPNAMEID}::~%{APPNAMEID}() +{} + +#include "%{APPNAMEID}.moc" diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAMEID}.h kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAMEID}.h --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAMEID}.h 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4gui/%{APPNAMEID}.h 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,14 @@ +#ifndef %{APPNAMEID}_H +#define %{APPNAMEID}_H + +#include + +class %{APPNAMEID} : public QMainWindow +{ +Q_OBJECT +public: + %{APPNAMEID}(); + virtual ~%{APPNAMEID}(); +}; + +#endif // %{APPNAME}_H diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4gui/CMakeLists.txt kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4gui/CMakeLists.txt --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4gui/CMakeLists.txt 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4gui/CMakeLists.txt 2010-07-17 20:08:19.000000000 +0100 @@ -1,10 +1,10 @@ -project(%{APPNAME}) +project(%{APPNAMEID}) cmake_minimum_required(VERSION 2.6) find_package(Qt4 REQUIRED) include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}) -set(%{APPNAME}_SRCS %{APPNAME}.cpp main.cpp) -qt4_automoc(${%{APPNAME}_SRCS}) -add_executable(%{APPNAME} ${%{APPNAME}_SRCS}) -target_link_libraries(%{APPNAME} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY}) +set(%{APPNAMEID}_SRCS %{APPNAMEID}.cpp main.cpp) +qt4_automoc(${%{APPNAMEID}_SRCS}) +add_executable(%{APPNAMEID} ${%{APPNAMEID}_SRCS}) +target_link_libraries(%{APPNAMEID} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY}) diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4gui/cmake_qt4gui.kdevtemplate kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4gui/cmake_qt4gui.kdevtemplate --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4gui/cmake_qt4gui.kdevtemplate 2010-01-19 12:39:48.000000000 +0000 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4gui/cmake_qt4gui.kdevtemplate 2010-07-17 20:08:19.000000000 +0100 @@ -4,6 +4,7 @@ Name[ca]=Aplicació IGU Qt4 CMake Name[ca@valencia]=Aplicació IGU Qt4 CMake Name[cs]=Aplikace Qt4 CMake Gui +Name[da]=Qt4 CMake gui-applikation Name[de]=Qt-4/CMake-GUI-Anwendung Name[en_GB]=Qt4 CMake Gui application Name[es]=Aplicación de interfaz gráfica CMake para Qt4 @@ -11,10 +12,12 @@ Name[fi]=Qt4 CMake graafinen käyttöliittymäsovellus Name[fr]=Application avec interface graphique CMake pour Qt4 Name[gl]=Programa básico con GUI de Qt4 con CMake -Name[it]=Applicazione con GUI Qt4 con CMake +Name[it]=Applicazione con GUI in Qt4 con CMake +Name[ja]=Qt4 CMake Gui アプリケーション Name[nb]=Qt4 CMake Gui-program Name[nds]=Qt4-CMake-Böversietprogramm Name[nl]=Qt4 CMake Gui-programma +Name[pl]=Program Qt4 z graficznym interfejsem użytkownika używający CMake Name[pt]=Aplicação gráfica com CMake para Qt4 Name[pt_BR]=Aplicativo de Interface em Qt4 CMake Name[sv]=Qt4 CMake-program med grafiskt användargränssnitt @@ -27,6 +30,7 @@ Comment=Generate a CMake/Qt4 based GUI application (crossplatform compatible) Comment[ca]=Genera una aplicació basada en CMake/Qt4 (multi plataforma) Comment[ca@valencia]=Genera una aplicació basada en CMake/Qt4 (multi plataforma) +Comment[da]=Genererer et CMake-/Qt4-baseret gui-applikation (krydsplatform kompatibelt) Comment[de]=Erstellt eine auf CMake und der Qt-4-GUI basierende Anwendung (Plattformunabhängig) Comment[en_GB]=Generate a CMake/Qt4 based GUI application (crossplatform compatible) Comment[es]=Genera una aplicación con interfaz gráfica basada en CMake/Qt4 (compatible multiplataforma) @@ -34,9 +38,12 @@ Comment[fi]=Generoi CMake/Qt4-perustainen graafinen käyttöliittymäsovellus (eri käyttöjärjestelmissä yhteensopiva) Comment[fr]=Génère une application avec interface graphique utilisant CMake/Qt4 (compatible multi-plateforme) Comment[gl]=Xera un programa con GUI baseado en CMake/Qt4 (compatíbel con multiplataforma) +Comment[it]=Genera un'applicazione con GUI basata su CMake/Qt4 (compatibile multipiattaforma) +Comment[ja]=CMake/Qt4 ベースの GUI アプリケーションを作成 (クロスプラットフォーム) Comment[nb]=Lag et program med grafisk brukerflate basert på CMake/Qt4 (kryssplattform-kompatibelt) Comment[nds]=En op CMake un Qt4 opbuut Böversiet-Programm opstellen (över Bedriefümgeven weg kompatibel) Comment[nl]=Genereert een Cmake/Qt4-gebaseerd programma (crossplatform compatibel) +Comment[pl]=Generuje program z graficznym interfejsem użytkownika używający CMake i Qt4 (wieloplatformowy) Comment[pt]=Gera uma aplicação gráfica baseada no QMake/Qt4 (compatível com várias plataformas) Comment[pt_BR]=Gera um aplicativo de interface em CMake/Qt4 (compatível com várias plataformas) Comment[sv]=Skapar ett QMake- och Qt4-baserat program med grafiskt användargränssnitt (som fungerar på flera plattformar) diff -Nru kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4gui/main.cpp kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4gui/main.cpp --- kdevelop-3.9.98/app_templates/cpp/CMake/cmake_qt4gui/main.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/app_templates/cpp/CMake/cmake_qt4gui/main.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -1,11 +1,11 @@ #include -#include "%{APPNAME}.h" +#include "%{APPNAMEID}.h" int main(int argc, char** argv) { QApplication app(argc, argv); - %{APPNAME} foo; + %{APPNAMEID} foo; foo.show(); return app.exec(); } diff -Nru kdevelop-3.9.98/BUGS kdevelop-4.0.1/BUGS --- kdevelop-3.9.98/BUGS 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/BUGS 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,12 @@ +-when adjusting the project setting you get this: + CXXFLAGS= -O2 -g3 -Wall : Command not found. + +please use bash as your login shell until the bug is fixed + +These are not considered as bugs but a lack of implementation and described for those who will complain: + +- The classparser does no macro expansion +- The widget editor does not generate geometry management implementations +- TMake is not yet supported +- KDE 2 is not supported, neither Qt 2.0. KDE 2 is in development and KDevelop will be ported after the next KDE 1.1.x release. +- If the generation of the KDE libs documentation fails, go to http://developer.kde.org or www.kdevelop.org and get the tar'ed documentation. diff -Nru kdevelop-3.9.98/cmake/modules/FindCheck.cmake kdevelop-4.0.1/cmake/modules/FindCheck.cmake --- kdevelop-3.9.98/cmake/modules/FindCheck.cmake 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/cmake/modules/FindCheck.cmake 1970-01-01 01:00:00.000000000 +0100 @@ -1,24 +0,0 @@ -# Find Check, a C unit testing framework. -# -# This script tries to set the following variables: -# -# CHECK_FOUND - what you'd expect -# CHECK_INCLUDE_DIR - the TDB include directory -# CHECK_LIBRARIES - Link these to use TDB -# -# Copyright (c) 2008, Manuel Breugelmans -# -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. -# - -find_path(CHECK_INCLUDE_DIR - check.h ) - -find_library(CHECK_LIBRARY - NAMES check ) - -if (CHECK_INCLUDE_DIR AND CHECK_LIBRARY) - set(CHECK_FOUND on) -endif (CHECK_INCLUDE_DIR AND CHECK_LIBRARY) -macro_log_feature(CHECK_FOUND "Check" "A unit testing framework for C" "http://check.sourceforge.net/" FALSE "" "Needed for building the Check test runner") diff -Nru kdevelop-3.9.98/cmake/modules/FindCppUnit.cmake kdevelop-4.0.1/cmake/modules/FindCppUnit.cmake --- kdevelop-3.9.98/cmake/modules/FindCppUnit.cmake 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/cmake/modules/FindCppUnit.cmake 1970-01-01 01:00:00.000000000 +0100 @@ -1,11 +0,0 @@ - -find_path(CPPUNIT_INCLUDE_DIR - TestSuite.h PATH_SUFFIXES cppunit ) - -find_library(CPPUNIT_LIBRARY - NAMES cppunit-1.12 cppunit ) - -if (CPPUNIT_INCLUDE_DIR AND CPPUNIT_LIBRARY) - set(CPPUNIT_FOUND on) -endif (CPPUNIT_INCLUDE_DIR AND CPPUNIT_LIBRARY) -macro_log_feature(CPPUNIT_FOUND "CppUnit" "A C++ unit testing framework" "http://cppunit.sourceforge.net" FALSE "" "Needed for building the CppUnit test runner") diff -Nru kdevelop-3.9.98/CMakeLists.txt kdevelop-4.0.1/CMakeLists.txt --- kdevelop-3.9.98/CMakeLists.txt 2010-02-10 19:26:13.000000000 +0000 +++ kdevelop-4.0.1/CMakeLists.txt 2010-07-17 20:14:00.000000000 +0100 @@ -4,9 +4,9 @@ set(CMAKE_MODULE_PATH ${KDevelop_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH}) -set( KDEVELOP_VERSION_MAJOR 3 ) -set( KDEVELOP_VERSION_MINOR 9 ) -set( KDEVELOP_VERSION_PATCH 98 ) +set( KDEVELOP_VERSION_MAJOR 4 ) +set( KDEVELOP_VERSION_MINOR 0 ) +set( KDEVELOP_VERSION_PATCH 1 ) set(KDE_MIN_VERSION "4.3.0") find_package(KDE4 4.3.0 REQUIRED) @@ -16,30 +16,18 @@ include (MacroLibrary) include (MacroOptionalAddSubdirectory) -if( extragear-sdk_SOURCE_DIR ) - if ( ${extragear-sdk_SOURCE_DIR} STREQUAL ${CMAKE_SOURCE_DIR} ) - set( KDEVPLATFORM_FOUND TRUE ) - include_directories( ${CMAKE_SOURCE_DIR}/kdevplatform ${CMAKE_SOURCE_DIR}/kdevplatform/plugins ) - set( KDEVPLATFORM_INTERFACES_LIBRARIES kdevplatforminterfaces ) - set( KDEVPLATFORM_SHELL_LIBRARIES kdevplatformshell ) - set( KDEVPLATFORM_TESTS_LIBRARIES kdevplatformtests ) - set( KDEVPLATFORM_UTIL_LIBRARIES kdevplatformutil ) - set( KDEVPLATFORM_PROJECT_LIBRARIES kdevplatformproject ) - set( KDEVPLATFORM_OUTPUTVIEW_LIBRARIES kdevplatformoutputview ) - set( KDEVPLATFORM_LANGUAGE_LIBRARIES kdevplatformlanguage ) - set( KDEVPLATFORM_VCS_LIBRARIES kdevplatformvcs ) - set( KDEVPLATFORM_DEBUGGER_LIBRARIES kdevplatformdebugger ) - set( KDEVPLATFORM_SUBLIME_LIBRARIES sublime ) - include( ${CMAKE_SOURCE_DIR}/kdevplatform/cmake/modules/KDevPlatformMacros.cmake ) - endif ( ${extragear-sdk_SOURCE_DIR} STREQUAL ${CMAKE_SOURCE_DIR} ) -endif( extragear-sdk_SOURCE_DIR ) +# Make sure that we're having RPATH on our installed libs, else using kdevelop +# from prefixes like $HOME/kdevelop breaks +# Code taken from FindKDE4Internal.cmake from KDE 4.5 +list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${LIB_INSTALL_DIR}" + _isSystemLibDir) +if("${_isSystemLibDir}" STREQUAL "-1") + set(CMAKE_INSTALL_RPATH "${LIB_INSTALL_DIR}") +endif("${_isSystemLibDir}" STREQUAL "-1") +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) -if( NOT KDEVPLATFORM_FOUND ) - - find_package(KDevPlatform 0.9.98 REQUIRED) - include_directories(${KDEVPLATFORM_INCLUDE_DIR}) - -endif( NOT KDEVPLATFORM_FOUND ) +find_package(KDevPlatform 1.0.0 REQUIRED) +include_directories(${KDEVPLATFORM_INCLUDE_DIR}) add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS} -DHAVE_CONFIG_H=1) @@ -63,3 +51,6 @@ macro_display_feature_log() + +include(MacroOptionalAddSubdirectory) +macro_optional_add_subdirectory( po ) diff -Nru kdevelop-3.9.98/debian/changelog kdevelop-4.0.1/debian/changelog --- kdevelop-3.9.98/debian/changelog 2010-08-10 23:36:30.000000000 +0100 +++ kdevelop-4.0.1/debian/changelog 2010-08-10 23:30:21.000000000 +0100 @@ -1,61 +1,121 @@ -kdevelop (4:3.9.98-0ubuntu1) lucid; urgency=low +kdevelop (4:4.0.1-2~ppa1) lucid; urgency=low - * New upstream release - - Build against kdevplatform 3.9.98 - - Refresh 10_private_libs_soversion.diff - - Update kdevelop.install + * Backport to lucid - -- Alessandro Ghersi Sat, 13 Feb 2010 04:48:19 +0100 + -- Emanuele Wed, 11 Aug 2010 00:30:01 +0200 -kdevelop (4:3.9.97a-0ubuntu1) lucid; urgency=low +kdevelop (4:4.0.1-1ubuntu2) maverick; urgency=low - * New tar from upstream + * Disable parallel building to fix FTBFS. - -- Jonathan Riddell Wed, 16 Dec 2009 12:49:50 +0000 + -- Felix Geyer Tue, 03 Aug 2010 15:31:02 +0200 -kdevelop (4:3.9.97-0ubuntu1) lucid; urgency=low +kdevelop (4:4.0.1-1ubuntu1) maverick; urgency=low - * New upstream beta release + * Set export KUBUNTU_DESKTOP_POT=extragear-sdk_kdevelop - -- Jonathan Riddell Mon, 14 Dec 2009 21:27:24 +0000 + -- Jonathan Riddell Mon, 26 Jul 2010 18:22:28 +0100 -kdevelop (4:3.9.96-0ubuntu1) lucid; urgency=low +kdevelop (4:4.0.1-1) unstable; urgency=low - * Sync with Debian experimental - * New upstream release: - - Drop the version correction patch, not needed for upstream version - - Bump build-depend versions - - Update .install files + * New upstream release. + * Add localization packages: Finnish (fi), Dutch (nl), Slovenian (sl) and + Thai (th). + * Update debian/control: + - bump Standards-Version to 3.9.0 (no changes needed). + - bump kdevplatform-dev and kdebase-workspace-dev build dependency version. + - add shared-mime-info build dependency. + - comment turkish localization package, not shipped in this release. + * Update debian/rules: remove workaround for FindKDE4Internal.cmake default + rpath value, fixed in kdelibs5-dev 4.4.1. - -- Jonathan Thomas Wed, 04 Nov 2009 09:59:31 -0500 + -- Fathi Boudra Fri, 23 Jul 2010 20:08:00 +0300 -kdevelop (4:3.9.95-0ubuntu3) karmic; urgency=low +kdevelop (4:4.0.0-2) unstable; urgency=low - * Add kubuntu_01_fix_gdb_ver_check.diff from upstream to fix compatibility - with gdb 7.0 (LP: #450462) + * Upload to unstable (Closes: #579947, #481832). + * Acknowledge obsolete NMU fixes (Closes: #562410, #546961). - -- Jonathan Thomas Tue, 13 Oct 2009 12:02:39 -0400 + -- Jeremy Lainé Wed, 05 May 2010 07:21:55 +0200 -kdevelop (4:3.9.95-2) experimental; urgency=low +kdevelop (4:4.0.0-1) experimental; urgency=low - * Add patch to fix kdevelop version. + * New upstream release (Closes: #579947, #481832). + * Update debian/control: + - Bump kdevplatform-dev build dependency version. + * Acknowledge obsolete NMU fixes (Closes: #562410, #546961). - -- Fathi Boudra Mon, 24 Aug 2009 09:24:47 +0200 + -- Jeremy Lainé Tue, 04 May 2010 08:12:22 +0200 + +kdevelop (4:3.10.2-1) experimental; urgency=low + + * New upstream release. + * Add localizations packages. + + -- Fathi Boudra Sat, 17 Apr 2010 13:43:11 +0300 + +kdevelop (4:3.10.0-1) experimental; urgency=low + + * New upstream release. + * Switch to dpkg-source 3.0 (quilt) format. + * Update debian/copyright: update authors list. + * Add debian/kdevelop.lintian-overrides: override postinst/postrm errors. + + -- Fathi Boudra Sun, 04 Apr 2010 11:45:29 +0200 + +kdevelop (4:3.9.99-1) experimental; urgency=low + + * New upstream release. + * Update debian/control: + - Suggests cmake package. (Closes: #561507) + - Bump kdevplatform-dev build dependency version. + + -- Fathi Boudra Thu, 18 Feb 2010 09:43:49 +0100 + +kdevelop (4:3.9.98-1) experimental; urgency=low + + * New upstream release. + + [ Fathi Boudra ] + * Remove 10_private_libs_soversion.diff patch. + * Update debian/control: + - Bump build dependencies versions (debhelper, pkg-kde-tools and + kdevplatform-dev). + - Bump Standards-Version to 3.8.4 (no changes needed). + * Update debian/kdevelop-dev.install file. + * Update debian/kdevelop.install file. + * Add debian/kdevelop.lintian-overrides file. + * Update debian/rules: pass -DCMAKE_SKIP_RPATH=ON + to workaround FindKDE4Internal.cmake default rpath value. -kdevelop (4:3.9.95-0ubuntu2) karmic; urgency=low + [ Modestas Vainius ] + * Fix Vcs-Browser URL. - * Fix 10_private_libs_soversion.diff to prevent FTBFS + -- Fathi Boudra Thu, 11 Feb 2010 16:48:26 +0100 - -- Jonathan Thomas Sat, 22 Aug 2009 19:53:34 -0400 +kdevelop (4:3.9.97-1) experimental; urgency=low -kdevelop (4:3.9.95-0ubuntu1) karmic; urgency=low + * New upstream release. + * Drop 01_kdevelop_r1044086.diff and 02_kdevelop_r1044721.diff patches. + * Update debian/kdevelop-data.install: remove valgrind plugin. - * New upstream release: - - Fixes LP: #407526 - * Merge from Debian Experimental, remaining changes: - - Conflict/replace on old -kde4 packages, this can go away in karmic+1 + -- Fathi Boudra Sat, 12 Dec 2009 20:47:28 +0100 - -- Jonathan Thomas Sat, 22 Aug 2009 15:48:51 -0400 +kdevelop (4:3.9.96-1) experimental; urgency=low + + * New upstream release. + * Add 01_kdevelop_r1044086.diff and 02_kdevelop_r1044721.diff patches. + * Remove kdevelop version fix. + * Update debian/kdevelop-data.install: re-add usr/share/icons/* entry and + update installed files. + + -- Fathi Boudra Thu, 12 Nov 2009 16:34:51 +0100 + +kdevelop (4:3.9.95-2) experimental; urgency=low + + * Add patch to fix kdevelop version. + + -- Fathi Boudra Mon, 24 Aug 2009 09:24:47 +0200 kdevelop (4:3.9.95-1) experimental; urgency=low @@ -75,14 +135,6 @@ -- Fathi Boudra Tue, 11 Aug 2009 15:57:35 +0200 -kdevelop (4:3.9.94-1ubuntu1) karmic; urgency=low - - * Merge from Debian experimental, remaining changes: - - Conflict/replace -kde4 packages - - Remove gdb from recommends, version >= 6.8.50 is not yet in Ubuntu - - -- Alessandro Ghersi Sun, 28 Jun 2009 20:48:13 +0200 - kdevelop (4:3.9.94-1) experimental; urgency=low * New upstream release. @@ -93,13 +145,6 @@ -- Fathi Boudra Tue, 02 Jun 2009 21:43:19 +0200 -kdevelop (4:3.9.93-1ubuntu1) karmic; urgency=low - - * Merge from Debian experimental, remaining changes: - - Conflict/replace -kde4 packages - - -- Jonathan Thomas Mon, 25 May 2009 19:34:26 -0400 - kdevelop (4:3.9.93-1) experimental; urgency=low * New upstream release. @@ -119,24 +164,6 @@ -- Jeremy Lainé Mon, 27 Apr 2009 08:18:04 +0200 -kdevelop-kde4 (4:3.9.91-0ubuntu2) jaunty; urgency=low - - * Add kdevplatform to depends so plugins work (LP: #326342) - - -- Scott Kitterman Fri, 06 Feb 2009 18:02:03 -0500 - -kdevelop-kde4 (4:3.9.91-0ubuntu1) jaunty; urgency=low - - * New upstream beta release - - -- Jonathan Riddell Thu, 05 Feb 2009 14:50:09 +0000 - -kdevelop-kde4 (4:3.9.90-0ubuntu1) jaunty; urgency=low - - * New upstream beta release - - -- Jonathan Riddell Wed, 28 Jan 2009 12:05:37 +0000 - kdevelop (4:3.5.2-1) unstable; urgency=low * New upstream release. @@ -299,7 +326,7 @@ * Remove circular dependencies (Closes: #368474) * Merge kdevelop-plugins into kdevelop - * Add Recommends on libtool (Closes: #284694) + * Add Recommends on libtool (Closes: #284694) * Update to standards version 3.7.2 * Update versioned Build-Depends on debhelper to >= 5 * Add debian/watch file @@ -329,7 +356,7 @@ kdevelop3 (4:3.3.1-1) unstable; urgency=low - * New upstream release + * New upstream release - fix code completion for external libraries (Closes: #355444, #351290) * Build-Depends on automake1.9, not automaken * Fix KOffice part C++ template (Closes: #345279) @@ -351,7 +378,7 @@ * Add Jeremy Lainé to maintainers, acknowledge NMU fixes (Closes: #274966, #295659, #302133, #304203, #304419, #306485, #309351, #311153, #312160, #312161, #315170, #326883, #326929, #327710, #327730, #330037, #330038, - #331346, #336094, #341990) + #331346, #336094, #341990) * Switch to Debian Qt/KDE team's CDBS scripts * Update Suggests and README.Debian regarding SVN integration * Remove explicit Build-Depends on g++-3.4 (Closes: #342991) @@ -411,7 +438,7 @@ * Non-maintainer upload * Fix kdevdesigner crash on start (Closes: #309351) * Fix kdevassistant crash on start (Closes: #274966) - * Fix file permissions of Python/Qt examples (Closes: #330037, #330038) + * Fix file permissions of Python/Qt examples (Closes: #330037, #330038) -- Jeremy Lainé Thu, 15 Sep 2005 08:37:32 +0200 @@ -422,15 +449,15 @@ * Build against new Qt / KDE libraries (Closes: #326929) * Fix lintian warnings: - Update to Standards-Version 3.6.2 - - Replace possible bashism "-a" by "&&" in debian/config + - Replace possible bashism "-a" by "&&" in debian/config * Add Suggests on kdesdk-misc to provide kio_svn files * Translation fixes: - - Fix debian/templates.master, run debconf-updatepo (Closes: #312161) + - Fix debian/templates.master, run debconf-updatepo (Closes: #312161) - Add Vietnamese debconf translation (Closes: #312160) - Update Brazilian translation (Closes: #304419) * Fix adding new classes to qmake projects (Closes: #315170) * Remove X-KDE-KDevelopIDE category from .desktop entries - * Add --disable-rpath to configure flags (Closes: #327710) + * Add --disable-rpath to configure flags (Closes: #327710) * Fix debian/menu , package is 'kdevelop3' not 'kdevelop' (Closes: #311153) * Fix some references to 'kdevelop' in .desktop files (Closes: #304203) * Add missing Depends on debconf (Closes: #327730) @@ -925,7 +952,7 @@ kdevelop (1:1.4.0-3.4) unstable; urgency=low - * Updated the build-depends field + * Updated the build-depends field -- Norman Jordan Sun, 13 May 2001 22:17:08 -0700 @@ -939,52 +966,52 @@ * Change Maintainer (Closes: #90814) * No longer installs extractrc (Closes: #93012) - * Suggests kdesdk-scripts + * Suggests kdesdk-scripts -- Norman Jordan Thu, 5 Apr 2001 11:03:57 -0700 kdevelop (1:1.4.0-3.1) unstable; urgency=low - + * NMU * Fixing build-depends (Closes: #92190) - + -- Ivan E. Moore II Fri, 30 Mar 2001 21:22:00 -0700 kdevelop (1:1.4.0-3) unstable; urgency=low - + * Change Maintainer * More upstream fixes while I'm at it - + -- Ivan E. Moore II Fri, 23 Mar 2001 03:00:00 -0700 kdevelop (1:1.4.0-2) unstable; urgency=low - + * Removed non en docs as they are provided in kde-i18n now - + -- Ivan E. Moore II Sun, 04 Mar 2001 20:00:00 -0700 kdevelop (1:1.4.0-1) unstable; urgency=low - + * Cleaned up source based off of current CVS branch * Fix desktop file (Closes: #87802) * Update Build-Depends * If you install qt-doc and not qt2.2-doc this works (Closes: #88185) - + -- Ivan E. Moore II Fri, 02 Mar 2001 07:00:00 -0700 kdevelop (1:1.4-final-1) unstable; urgency=low - + * New upstream release * Fix kde-i18n conflicts (Closes: #87381) - + -- Ivan E. Moore II Mon, 19 Feb 2001 02:06:00 -0700 kdevelop (1:1.4-20010218-1) unstable; urgency=low - + * New upstream cvs pull * New upload to Debian with permission of Raphael Bossek who did the ITP * Updating for potato/woody/sid - + -- Ivan E. Moore II Sun, 18 Feb 2001 02:06:00 -0700 kdevelop (1:1.4-20010127-1) unstable; urgency=low @@ -1005,7 +1032,7 @@ kdevelop (1:1.1beta2-20000206-1) stable; urgency=low * Back to old configure arguments - * Mentioned debugger in control file, + * Mentioned debugger in control file, made kdebase a dependency -- Bernd Gehrmann Mon, 7 Feb 2000 00:10:59 +0100 @@ -1082,10 +1109,7 @@ kdevelop (990422-1) experimental; urgency=low - * Initial Release + * Initial Release -- Bernd Gehrmann Thu, 22 Apr 1999 20:33:18 +0200 -Local variables: -mode: debian-changelog -End: diff -Nru kdevelop-3.9.98/debian/control kdevelop-4.0.1/debian/control --- kdevelop-3.9.98/debian/control 2010-08-10 23:36:30.000000000 +0100 +++ kdevelop-4.0.1/debian/control 2010-07-26 18:22:39.000000000 +0100 @@ -4,18 +4,19 @@ Maintainer: Kubuntu Developers XSBC-Original-Maintainer: Debian Qt/KDE Maintainers Uploaders: Fathi Boudra , Jeremy Lainé -Build-Depends: cdbs, debhelper (>= 7), quilt, cmake, pkg-kde-tools, - kdevplatform-dev (>= 0.9.98), kdebase-workspace-dev (>= 4:4.3.0) -Standards-Version: 3.8.3 +Build-Depends: cdbs, debhelper (>= 7.4.15), quilt, cmake, pkg-kde-tools (>= 0.6.4), + kdevplatform-dev (>= 1.0.1), kdebase-workspace-dev (>= 4:4.4.1), shared-mime-info +Standards-Version: 3.9.0 Homepage: http://www.kdevelop.org/ -Vcs-Browser: http://svn.debian.org/wsvn/pkg-kde/trunk/packages/kdevelop +Vcs-Browser: http://svn.debian.org/wsvn/pkg-kde/trunk/packages/kdevelop/#_trunk_packages_kdevelop_ Vcs-Svn: svn://svn.debian.org/pkg-kde/trunk/packages/kdevelop Package: kdevelop Architecture: any Depends: ${misc:Depends}, ${shlibs:Depends}, kdevelop-data (>= ${source:Version}), lcov -Recommends: gdb (>= 6.8.50), valgrind +Recommends: gdb (>= 7.0), valgrind +Suggests: cmake, kdevelop-l10n Description: integrated development environment for KDE KDevelop is an easy to use integrated development environment for KDE. It supports a wide range of programming languages and features project @@ -50,3 +51,224 @@ for terminal programs and GUI programs using Qt, KDE or GNOME. . This package contains development files for KDevelop. + +Package: kdevelop-l10n-ca +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-ca +Provides: kdevelop-l10n +Description: Catalan (ca) localization files for the KDevelop IDE + This package contains the Catalan translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-cavalencia +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-cavalencia +Provides: kdevelop-l10n +Description: Southern Catalan (Valencian) (ca@valencia) files for the KDevelop IDE + This package contains the Southern Catalan (Valencian) translations + for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-da +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-da +Provides: kdevelop-l10n +Description: Danish (da) localization files for the KDevelop IDE + This package contains the Danish translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-de +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-de +Provides: kdevelop-l10n +Description: German (de) localization files for the KDevelop IDE + This package contains the German translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-engb +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-engb +Provides: kdevelop-l10n +Description: British English (en_GB) localization files for the KDevelop IDE + This package contains the British English translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-es +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-es +Provides: kdevelop-l10n +Description: Spanish (es) localization files for the KDevelop IDE + This package contains the Spanish translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-et +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-et +Provides: kdevelop-l10n +Description: Estonian (et) localization files for the KDevelop IDE + This package contains the Estonian translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-fi +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-fi +Provides: kdevelop-l10n +Description: Finnish (fi) localization files for the KDevelop IDE + This package contains the Finnish translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-fr +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-fr +Provides: kdevelop-l10n +Description: French (fr) localization files for the KDevelop IDE + This package contains the French translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-gl +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-gl +Provides: kdevelop-l10n +Description: Galician (gl) localization files for the KDevelop IDE + This package contains the Galician translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-it +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-it +Provides: kdevelop-l10n +Description: Italian (it) localization files for the KDevelop IDE + This package contains the Italian translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-nds +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-nds +Provides: kdevelop-l10n +Description: Low Saxon (nds) localization files for the KDevelop IDE + This package contains the Low Saxon translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-nl +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-nl +Provides: kdevelop-l10n +Description: Dutch (nl) localization files for the KDevelop IDE + This package contains the Dutch translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-pt +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-pt +Provides: kdevelop-l10n +Description: Portugese (pt) localization files for the KDevelop IDE + This package contains the Portugese translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-ptbr +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-ptbr +Provides: kdevelop-l10n +Description: Brazilian Portugese (pt_BR) localization files for the KDevelop IDE + This package contains the Brazilian Portugese translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-sl +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-sl +Provides: kdevelop-l10n +Description: Slovenian (sl) localization files for the KDevelop IDE + This package contains the Slovenian translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-sv +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-sv +Provides: kdevelop-l10n +Description: Swedish (sv) localization files for the KDevelop IDE + This package contains the Swedish translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-th +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-th +Provides: kdevelop-l10n +Description: Thai (th) localization files for the KDevelop IDE + This package contains the Thai translations for KDevelop. + . + This package is part of the KDevelop IDE. + +#Package: kdevelop-l10n-tr +#Section: localization +#Architecture: all +#Recommends: kdevplatform-l10n-tr +#Provides: kdevelop-l10n +#Description: Turkish (tr) localization files for the KDevelop IDE +# This package contains the Turkish translations for KDevelop. +# . +# This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-uk +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-uk +Provides: kdevelop-l10n +Description: Ukrainian (uk) localization files for the KDevelop IDE + This package contains the Ukrainian translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-zhcn +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-zhcn +Provides: kdevelop-l10n +Description: Chinese Simplified (zh_CN) localization files for the KDevelop IDE + This package contains the Chinese Simplified translations for KDevelop. + . + This package is part of the KDevelop IDE. + +Package: kdevelop-l10n-zhtw +Section: localization +Architecture: all +Recommends: kdevplatform-l10n-zhtw +Provides: kdevelop-l10n +Description: Chinese Traditional (zh_TW) localization files for the KDevelop IDE + This package contains the Chinese Traditional translations for KDevelop. + . + This package is part of the KDevelop IDE. diff -Nru kdevelop-3.9.98/debian/copyright kdevelop-4.0.1/debian/copyright --- kdevelop-3.9.98/debian/copyright 2010-08-10 23:36:30.000000000 +0100 +++ kdevelop-4.0.1/debian/copyright 2010-04-05 11:41:10.000000000 +0100 @@ -1,62 +1,84 @@ -This package was debianized by Bernd Gehrmann , -then maintained by Ivan E. Moore II and -Norman Jordan . +This work was packaged for Debian by: -The current Debian maintainer is Jeremy Lainé . + Bernd Gehrmann + Ivan E. Moore II + Norman Jordan + Jeremy Lainé + Fathi Boudra -It was downloaded from http://www.kdevelop.org/ +It was downloaded from: -Upstream Authors: + http://www.kdevelop.org - Bernd Gehrmann - John Birch - Jonas Nordin - Richard Dale - Sandy Meier - Matthias Hoelzer-Kluepfel - Victor Roeder - Kurth Granroth - The KWrite authors - Roberto Raggi - Harald Fernengel - Simon Hausmann - Mickael Marchand - Dominic Seichter - Yann Hodique - Heinz Hornung - Marion Klein - Ramón Lamana Villar - Caleb Tennis - Mario Scalas - Alexander Dymo - Dominik Haumann - Ian Reinhart Geiser - Amilcar Lucas - Jens Dagerbo - Robert Gruber +Upstream Authors: -Copyright: 1999-2006 The KDevelop developers + Andreas Pakulat + Alexander Dymo + David Nolden + Aleix Pol Gonzalez + Vladimir Prus + Hamish Rodda + Amilcar do Carmo Lucas + Niko Sams + Milian Wolff + Bernd Gehrmann + John Birch + Jonas Nordin + Richard Dale + Sandy Meier + Matthias Hoelzer-Kluepfel + Victor Roeder + Kurth Granroth + The KWrite authors + Roberto Raggi + Harald Fernengel + Simon Hausmann + Mickael Marchand + Dominic Seichter + Yann Hodique + Heinz Hornung + Marion Klein + Ramón Lamana Villar + Caleb Tennis + Mario Scalas + Dominik Haumann + Ian Reinhart Geiser + Jens Dagerbo + Robert Gruber + +Copyright: + + Copyright (C) 1999-2010 The KDevelop developers + +License: + + This package 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 package 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, see + +On Debian systems, the complete text of the GNU General +Public License version 2 and version 3 can be found in +"/usr/share/common-licenses/GPL-2" and "/usr/share/common-licenses/GPL-3". + +The Debian packaging is: + + Copyright (C) 2009-2010 Fathi Boudra + Copyright (C) 2005-2009 Jeremy Lainé + Copyright (C) 2001-2005 Norman Jordan + Copyright (C) 1999-2001 Ivan E. Moore II + Copyright (C) 1999-2000 Bernd Gehrmann -This program is free software; you can redistribute it and/or modify +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 with -the Debian GNU/Linux distribution in file /usr/share/common-licenses/GPL; -if not, write to the Free Software Foundation, Inc., 51 Franklin St, -Fifth Floor, Boston, MA 02110-1301, USA. - -On Debian GNU/Linux systems, the complete text of the GNU General Public -License, version 2, can be found in `/usr/share/common-licenses/GPL-2'. - -The Debian packaging is (C) 1999-2008 Bernd Gehrmann -, Ivan E. Moore II , -Norman Jordan , Jeremy Lainé , -Fathi Boudra and is licensed under the GPL, see above. - diff -Nru kdevelop-3.9.98/debian/kdevelop-data.install kdevelop-4.0.1/debian/kdevelop-data.install --- kdevelop-3.9.98/debian/kdevelop-data.install 2010-08-10 23:36:30.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-data.install 2010-07-23 21:34:27.000000000 +0100 @@ -1,3 +1,4 @@ +usr/share/icons/* usr/share/kde4/apps/kdevappwizard/* usr/share/kde4/apps/kdevcmakebuilder/* usr/share/kde4/apps/kdevcmakemanager/* @@ -6,4 +7,4 @@ usr/share/kde4/apps/kdevelop/* usr/share/kde4/apps/kdevgdb/* usr/share/kde4/config/* -usr/share/icons/hicolor/* +usr/share/mime/packages/kdevelop.xml diff -Nru kdevelop-3.9.98/debian/kdevelop-dev.install kdevelop-4.0.1/debian/kdevelop-dev.install --- kdevelop-3.9.98/debian/kdevelop-dev.install 2010-08-10 23:36:30.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-dev.install 2010-02-17 21:03:39.000000000 +0000 @@ -1,3 +1,2 @@ usr/include/kdevelop/* -usr/lib/lib*.so usr/share/kde4/apps/cmake/* diff -Nru kdevelop-3.9.98/debian/kdevelop.install kdevelop-4.0.1/debian/kdevelop.install --- kdevelop-3.9.98/debian/kdevelop.install 2010-08-10 23:36:30.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop.install 2010-02-17 21:03:39.000000000 +0000 @@ -1,6 +1,6 @@ usr/bin/kdevelop usr/bin/kdevelop.bin usr/lib/kde4/* -usr/lib/lib*.so.* +usr/lib/libkdev4*.so usr/share/applications/kde4/* usr/share/kde4/services/* diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-ca.install kdevelop-4.0.1/debian/kdevelop-l10n-ca.install --- kdevelop-3.9.98/debian/kdevelop-l10n-ca.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-ca.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/ca \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-cavalencia.install kdevelop-4.0.1/debian/kdevelop-l10n-cavalencia.install --- kdevelop-3.9.98/debian/kdevelop-l10n-cavalencia.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-cavalencia.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/ca@valencia \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-da.install kdevelop-4.0.1/debian/kdevelop-l10n-da.install --- kdevelop-3.9.98/debian/kdevelop-l10n-da.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-da.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/da \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-de.install kdevelop-4.0.1/debian/kdevelop-l10n-de.install --- kdevelop-3.9.98/debian/kdevelop-l10n-de.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-de.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/de \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-engb.install kdevelop-4.0.1/debian/kdevelop-l10n-engb.install --- kdevelop-3.9.98/debian/kdevelop-l10n-engb.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-engb.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/en_GB \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-es.install kdevelop-4.0.1/debian/kdevelop-l10n-es.install --- kdevelop-3.9.98/debian/kdevelop-l10n-es.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-es.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/es \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-et.install kdevelop-4.0.1/debian/kdevelop-l10n-et.install --- kdevelop-3.9.98/debian/kdevelop-l10n-et.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-et.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/et \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-fi.install kdevelop-4.0.1/debian/kdevelop-l10n-fi.install --- kdevelop-3.9.98/debian/kdevelop-l10n-fi.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-fi.install 2010-07-23 05:24:24.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/fi \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-fr.install kdevelop-4.0.1/debian/kdevelop-l10n-fr.install --- kdevelop-3.9.98/debian/kdevelop-l10n-fr.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-fr.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/fr \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-gl.install kdevelop-4.0.1/debian/kdevelop-l10n-gl.install --- kdevelop-3.9.98/debian/kdevelop-l10n-gl.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-gl.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/gl \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-it.install kdevelop-4.0.1/debian/kdevelop-l10n-it.install --- kdevelop-3.9.98/debian/kdevelop-l10n-it.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-it.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/it \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-nds.install kdevelop-4.0.1/debian/kdevelop-l10n-nds.install --- kdevelop-3.9.98/debian/kdevelop-l10n-nds.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-nds.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/nds \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-nl.install kdevelop-4.0.1/debian/kdevelop-l10n-nl.install --- kdevelop-3.9.98/debian/kdevelop-l10n-nl.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-nl.install 2010-07-23 05:24:30.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/nl \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-ptbr.install kdevelop-4.0.1/debian/kdevelop-l10n-ptbr.install --- kdevelop-3.9.98/debian/kdevelop-l10n-ptbr.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-ptbr.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/pt_BR \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-pt.install kdevelop-4.0.1/debian/kdevelop-l10n-pt.install --- kdevelop-3.9.98/debian/kdevelop-l10n-pt.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-pt.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/pt \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-sl.install kdevelop-4.0.1/debian/kdevelop-l10n-sl.install --- kdevelop-3.9.98/debian/kdevelop-l10n-sl.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-sl.install 2010-07-23 05:24:35.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/sl \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-sv.install kdevelop-4.0.1/debian/kdevelop-l10n-sv.install --- kdevelop-3.9.98/debian/kdevelop-l10n-sv.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-sv.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/sv \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-th.install kdevelop-4.0.1/debian/kdevelop-l10n-th.install --- kdevelop-3.9.98/debian/kdevelop-l10n-th.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-th.install 2010-07-23 05:24:42.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/th \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-tr.install kdevelop-4.0.1/debian/kdevelop-l10n-tr.install --- kdevelop-3.9.98/debian/kdevelop-l10n-tr.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-tr.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/tr \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-uk.install kdevelop-4.0.1/debian/kdevelop-l10n-uk.install --- kdevelop-3.9.98/debian/kdevelop-l10n-uk.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-uk.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/uk \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-zhcn.install kdevelop-4.0.1/debian/kdevelop-l10n-zhcn.install --- kdevelop-3.9.98/debian/kdevelop-l10n-zhcn.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-zhcn.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/zh_CN \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop-l10n-zhtw.install kdevelop-4.0.1/debian/kdevelop-l10n-zhtw.install --- kdevelop-3.9.98/debian/kdevelop-l10n-zhtw.install 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop-l10n-zhtw.install 2010-04-17 16:49:33.000000000 +0100 @@ -0,0 +1 @@ +usr/share/locale/zh_TW \ No newline at end of file diff -Nru kdevelop-3.9.98/debian/kdevelop.lintian-overrides kdevelop-4.0.1/debian/kdevelop.lintian-overrides --- kdevelop-3.9.98/debian/kdevelop.lintian-overrides 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevelop.lintian-overrides 2010-04-05 11:41:10.000000000 +0100 @@ -0,0 +1,7 @@ +kdevelop: package-name-doesnt-match-sonames libkdev4cmakecommon libkdev4cppduchain libkdev4cppparser libkdev4cpprpp +kdevelop: shlib-without-versioned-soname usr/lib/libkdev4cppparser.so libkdev4cppparser.so +kdevelop: shlib-without-versioned-soname usr/lib/libkdev4cpprpp.so libkdev4cpprpp.so +kdevelop: shlib-without-versioned-soname usr/lib/libkdev4cppduchain.so libkdev4cppduchain.so +kdevelop: shlib-without-versioned-soname usr/lib/libkdev4cmakecommon.so libkdev4cmakecommon.so +kdevelop: postinst-must-call-ldconfig usr/lib/libkdev4cpprpp.so +kdevelop: postrm-should-call-ldconfig usr/lib/libkdev4cpprpp.so diff -Nru kdevelop-3.9.98/debian/kdevplatform1-libs.install kdevelop-4.0.1/debian/kdevplatform1-libs.install --- kdevelop-3.9.98/debian/kdevplatform1-libs.install 2010-08-10 23:36:30.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevplatform1-libs.install 1970-01-01 01:00:00.000000000 +0100 @@ -1,82 +0,0 @@ -usr/lib/kde4/kcm_kdev_bgsettings.so -usr/lib/kde4/kcm_kdev_ccsettings.so -usr/lib/kde4/kcm_kdev_envsettings.so -usr/lib/kde4/kcm_kdev_genericprojectmanagersettings.so -usr/lib/kde4/kcm_kdev_pluginsettings.so -usr/lib/kde4/kcm_kdev_projectsettings.so -usr/lib/kde4/kcm_kdev_uisettings.so -usr/lib/kde4/kcm_kdevsourceformattersettings.so -usr/lib/kde4/kdevappwizard.so -usr/lib/kde4/kdevclassbrowser.so -usr/lib/kde4/kdevcontextbrowser.so -usr/lib/kde4/kdevcvs.so -usr/lib/kde4/kdevdocumentswitcher.so -usr/lib/kde4/kdevexecute.so -usr/lib/kde4/kdevfilemanager.so -usr/lib/kde4/kdevgenericmanager.so -usr/lib/kde4/kdevkonsoleview.so -usr/lib/kde4/kdevmercurial.so -usr/lib/kde4/kdevopenwith.so -usr/lib/kde4/kdevpatchreview.so -usr/lib/kde4/kdevproblemreporter.so -usr/lib/kde4/kdevprojectmanagerview.so -usr/lib/kde4/kdevquickopen.so -usr/lib/kde4/kdevsnippet.so -usr/lib/kde4/kdevsourceformatter.so -usr/lib/kde4/kdevstandardoutputview.so -usr/lib/kde4/kdevsubversion.so -usr/lib/libkdevplatformdebugger.so.* -usr/lib/libkdevplatforminterfaces.so.* -usr/lib/libkdevplatformlanguage.so.* -usr/lib/libkdevplatformoutputview.so.* -usr/lib/libkdevplatformproject.so.* -usr/lib/libkdevplatformshell.so.* -usr/lib/libkdevplatformtests.so.* -usr/lib/libkdevplatformutil.so.* -usr/lib/libkdevplatformvcs.so.* -usr/share/icons/hicolor/22x22/actions/run-clean.png -usr/share/icons/hicolor/22x22/actions/run-install.png -usr/share/kde4/apps/kdevappwizard/kdevappwizard.rc -usr/share/kde4/apps/kdevappwizard/template_previews/default-kdevelop.png -usr/share/kde4/apps/kdevclassbrowser/kdevclassbrowser.rc -usr/share/kde4/apps/kdevcodegen/licenses -usr/share/kde4/apps/kdevcontextbrowser/kdevcontextbrowser.rc -usr/share/kde4/apps/kdevcvs/kdevcvs.rc -usr/share/kde4/apps/kdevdebugger/kdevdebuggershellui.rc -usr/share/kde4/apps/kdevdocumentswitcher/kdevdocumentswitcher.rc -usr/share/kde4/apps/kdevfilemanager/kdevfilemanager.rc -usr/share/kde4/apps/kdevmercurial/kdevmercurial.rc -usr/share/kde4/apps/kdevpatchreview/kdevpatchreview.rc -usr/share/kde4/apps/kdevproblemreporter/kdevproblemreporter.rc -usr/share/kde4/apps/kdevprojectmanagerview/kdevprojectmanagerview.rc -usr/share/kde4/apps/kdevquickopen/kdevquickopen.rc -usr/share/kde4/apps/kdevsourceformatter/kdevsourceformatter.rc -usr/share/kde4/apps/kdevstandardoutputview/kdevstandardoutputview.rc -usr/share/kde4/services/kcm_kdev_bgsettings.desktop -usr/share/kde4/services/kcm_kdev_ccsettings.desktop -usr/share/kde4/services/kcm_kdev_envsettings.desktop -usr/share/kde4/services/kcm_kdev_genericprojectmanagersettings.desktop -usr/share/kde4/services/kcm_kdev_pluginsettings.desktop -usr/share/kde4/services/kcm_kdev_projectsettings.desktop -usr/share/kde4/services/kcm_kdev_uisettings.desktop -usr/share/kde4/services/kcm_kdevsourceformattersettings.desktop -usr/share/kde4/services/kdevappwizard.desktop -usr/share/kde4/services/kdevclassbrowser.desktop -usr/share/kde4/services/kdevcontextbrowser.desktop -usr/share/kde4/services/kdevcvs.desktop -usr/share/kde4/services/kdevdocumentswitcher.desktop -usr/share/kde4/services/kdevexecute.desktop -usr/share/kde4/services/kdevfilemanager.desktop -usr/share/kde4/services/kdevgenericmanager.desktop -usr/share/kde4/services/kdevkonsoleview.desktop -usr/share/kde4/services/kdevmercurial.desktop -usr/share/kde4/services/kdevopenwith.desktop -usr/share/kde4/services/kdevpatchreview.desktop -usr/share/kde4/services/kdevproblemreporter.desktop -usr/share/kde4/services/kdevprojectmanagerview.desktop -usr/share/kde4/services/kdevquickopen.desktop -usr/share/kde4/services/kdevsnippet.desktop -usr/share/kde4/services/kdevsourceformatter.desktop -usr/share/kde4/services/kdevstandardoutputview.desktop -usr/share/kde4/services/kdevsubversion.desktop -usr/share/kde4/servicetypes/kdevelopplugin.desktop diff -Nru kdevelop-3.9.98/debian/kdevplatform-dev.install kdevelop-4.0.1/debian/kdevplatform-dev.install --- kdevelop-3.9.98/debian/kdevplatform-dev.install 2010-08-10 23:36:30.000000000 +0100 +++ kdevelop-4.0.1/debian/kdevplatform-dev.install 1970-01-01 01:00:00.000000000 +0100 @@ -1,26 +0,0 @@ -usr/include/kdevplatform/debugger -usr/include/kdevplatform/execute -usr/include/kdevplatform/interfaces -usr/include/kdevplatform/kdevplatformversion.h -usr/include/kdevplatform/language -usr/include/kdevplatform/outputview -usr/include/kdevplatform/project -usr/include/kdevplatform/shell -usr/include/kdevplatform/tests -usr/include/kdevplatform/util -usr/include/kdevplatform/vcs -usr/lib/cmake/kdevplatform/KDevPlatformConfig.cmake -usr/lib/cmake/kdevplatform/KDevPlatformConfigVersion.cmake -usr/lib/cmake/kdevplatform/KDevPlatformMacros.cmake -usr/lib/cmake/kdevplatform/KDevPlatformTargets-debian.cmake -usr/lib/cmake/kdevplatform/KDevPlatformTargets.cmake -usr/lib/libkdevplatformdebugger.so -usr/lib/libkdevplatforminterfaces.so -usr/lib/libkdevplatformlanguage.so -usr/lib/libkdevplatformoutputview.so -usr/lib/libkdevplatformproject.so -usr/lib/libkdevplatformshell.so -usr/lib/libkdevplatformtests.so -usr/lib/libkdevplatformutil.so -usr/lib/libkdevplatformvcs.so -usr/share/kde4/apps/cmake/modules/FindKDevPlatform.cmake diff -Nru kdevelop-3.9.98/debian/libsublime1.install kdevelop-4.0.1/debian/libsublime1.install --- kdevelop-3.9.98/debian/libsublime1.install 2010-08-10 23:36:30.000000000 +0100 +++ kdevelop-4.0.1/debian/libsublime1.install 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -usr/lib/libsublime.so.* diff -Nru kdevelop-3.9.98/debian/libsublime-dev.install kdevelop-4.0.1/debian/libsublime-dev.install --- kdevelop-3.9.98/debian/libsublime-dev.install 2010-08-10 23:36:30.000000000 +0100 +++ kdevelop-4.0.1/debian/libsublime-dev.install 1970-01-01 01:00:00.000000000 +0100 @@ -1,2 +0,0 @@ -usr/include/kdevplatform/sublime/* -usr/lib/libsublime.so diff -Nru kdevelop-3.9.98/debian/patches/10_private_libs_soversion.diff kdevelop-4.0.1/debian/patches/10_private_libs_soversion.diff --- kdevelop-3.9.98/debian/patches/10_private_libs_soversion.diff 2010-08-10 23:36:30.000000000 +0100 +++ kdevelop-4.0.1/debian/patches/10_private_libs_soversion.diff 1970-01-01 01:00:00.000000000 +0100 @@ -1,58 +0,0 @@ -Index: kdevelop-3.9.98/CMakeLists.txt -=================================================================== ---- kdevelop-3.9.98.orig/CMakeLists.txt 2010-02-13 05:21:50.000000000 +0100 -+++ kdevelop-3.9.98/CMakeLists.txt 2010-02-13 05:22:14.000000000 +0100 -@@ -7,6 +7,7 @@ - set( KDEVELOP_VERSION_MAJOR 3 ) - set( KDEVELOP_VERSION_MINOR 9 ) - set( KDEVELOP_VERSION_PATCH 98 ) -+set(PRIVATE_LIBS_SOVERSION ${KDEVELOP_VERSION_MAJOR}.${KDEVELOP_VERSION_MINOR}.${KDEVELOP_VERSION_PATCH}) - - set(KDE_MIN_VERSION "4.3.0") - find_package(KDE4 4.3.0 REQUIRED) -Index: kdevelop-3.9.98/languages/cpp/cppduchain/CMakeLists.txt -=================================================================== ---- kdevelop-3.9.98.orig/languages/cpp/cppduchain/CMakeLists.txt 2009-11-04 11:45:46.000000000 -0500 -+++ kdevelop-3.9.98/languages/cpp/cppduchain/CMakeLists.txt 2009-11-04 11:46:04.000000000 -0500 -@@ -62,6 +62,7 @@ - kdev4cppparser - ${KDE4_KTEXTEDITOR_LIBS} - kdev4cpprpp) -+set_target_properties(kdev4cppduchain PROPERTIES SOVERSION ${PRIVATE_LIBS_SOVERSION}) - install(TARGETS kdev4cppduchain ${INSTALL_TARGETS_DEFAULT_ARGS}) - - ########### install files ############### -Index: kdevelop-3.9.98/languages/cpp/parser/CMakeLists.txt -=================================================================== ---- kdevelop-3.9.98.orig/languages/cpp/parser/CMakeLists.txt 2009-11-04 11:45:05.000000000 -0500 -+++ kdevelop-3.9.98/languages/cpp/parser/CMakeLists.txt 2009-11-04 11:45:33.000000000 -0500 -@@ -35,4 +35,5 @@ - # to the plugin target - kde4_add_library(kdev4cppparser SHARED ${kdevcppparser_LIB_SRCS}) - target_link_libraries(kdev4cppparser ${KDEVPLATFORM_LANGUAGE_LIBRARIES} ${KDE4_KDECORE_LIBS} ${KDE4_KTEXTEDITOR_LIBS} kdev4cpprpp ) -+set_target_properties(kdev4cppparser PROPERTIES SOVERSION ${PRIVATE_LIBS_SOVERSION}) - install(TARGETS kdev4cppparser ${INSTALL_TARGETS_DEFAULT_ARGS} ) -Index: kdevelop-3.9.98/languages/cpp/parser/rpp/CMakeLists.txt -=================================================================== ---- kdevelop-3.9.98.orig/languages/cpp/parser/rpp/CMakeLists.txt 2009-11-04 11:44:34.000000000 -0500 -+++ kdevelop-3.9.98/languages/cpp/parser/rpp/CMakeLists.txt 2009-11-04 11:44:58.000000000 -0500 -@@ -22,6 +22,7 @@ - # to the plugin target - kde4_add_library(kdev4cpprpp SHARED ${kdevcpprpp_LIB_SRCS}) - target_link_libraries(kdev4cpprpp ${KDE4_KDECORE_LIBS} ${KDEVPLATFORM_LANGUAGE_LIBRARIES} ${KDE4_KTEXTEDITOR_LIBS} ) -+set_target_properties(kdev4cpprpp PROPERTIES SOVERSION ${PRIVATE_LIBS_SOVERSION}) - install(TARGETS kdev4cpprpp ${INSTALL_TARGETS_DEFAULT_ARGS} ) - - ########### install files ############### -Index: kdevelop-3.9.98/projectmanagers/cmake/CMakeLists.txt -=================================================================== ---- kdevelop-3.9.98.orig/projectmanagers/cmake/CMakeLists.txt 2010-02-13 05:05:36.000000000 +0100 -+++ kdevelop-3.9.98/projectmanagers/cmake/CMakeLists.txt 2010-02-13 05:06:18.000000000 +0100 -@@ -71,6 +71,7 @@ - ${KDE4_KTEXTEDITOR_LIBS} ${KDEVPLATFORM_INTERFACES_LIBRARIES} ${KDEVPLATFORM_PROJECT_LIBRARIES} - ${QT_QTSCRIPT_LIBRARY} ${KDEVPLATFORM_LANGUAGE_LIBRARIES} - ) -+set_target_properties(kdev4cmakecommon PROPERTIES SOVERSION ${PRIVATE_LIBS_SOVERSION}) - - kde4_add_ui_files( cmakemanager_SRCS ${cmakemanager_UI} ) - kde4_add_plugin( kdevcmakemanager ${cmakemanager_SRCS} ) diff -Nru kdevelop-3.9.98/debian/patches/series kdevelop-4.0.1/debian/patches/series --- kdevelop-3.9.98/debian/patches/series 2010-08-10 23:36:30.000000000 +0100 +++ kdevelop-4.0.1/debian/patches/series 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -10_private_libs_soversion.diff diff -Nru kdevelop-3.9.98/debian/README.source kdevelop-4.0.1/debian/README.source --- kdevelop-3.9.98/debian/README.source 2010-08-10 23:36:30.000000000 +0100 +++ kdevelop-4.0.1/debian/README.source 1970-01-01 01:00:00.000000000 +0100 @@ -1,6 +0,0 @@ -This package uses quilt for upstream source code patch management. Please read -/usr/share/doc/quilt/README.source for more information how to apply, unapply, -add, modify or remove patches. - -Please note that /usr/share/doc/quilt/README.source is only available in quilt -version 0.46-4.1 or later. diff -Nru kdevelop-3.9.98/debian/rules kdevelop-4.0.1/debian/rules --- kdevelop-3.9.98/debian/rules 2010-08-10 23:36:30.000000000 +0100 +++ kdevelop-4.0.1/debian/rules 2010-08-03 15:51:23.000000000 +0100 @@ -1,7 +1,12 @@ #!/usr/bin/make -f +export KUBUNTU_DESKTOP_POT=extragear-sdk_kdevelop + include /usr/share/pkg-kde-tools/qt-kde-team/1/debian-qt-kde.mk +# disable parallel building as it fails on the archive buildds +DEB_BUILD_PARALLEL= + binary-install/kdevelop:: install -D -p -m0644 debian/kdevelop.xpm \ debian/kdevelop/usr/share/pixmaps/kdevelop.xpm diff -Nru kdevelop-3.9.98/debian/source/format kdevelop-4.0.1/debian/source/format --- kdevelop-3.9.98/debian/source/format 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debian/source/format 2010-08-10 23:36:32.000000000 +0100 @@ -0,0 +1 @@ +3.0 (quilt) diff -Nru kdevelop-3.9.98/debuggers/gdb/CMakeLists.txt kdevelop-4.0.1/debuggers/gdb/CMakeLists.txt --- kdevelop-3.9.98/debuggers/gdb/CMakeLists.txt 2009-12-07 02:50:03.000000000 +0000 +++ kdevelop-4.0.1/debuggers/gdb/CMakeLists.txt 2010-07-17 20:08:19.000000000 +0100 @@ -25,7 +25,7 @@ gdbparser.cpp stty.cpp disassemblewidget.cpp - memviewdlg.cpp +# memviewdlg.cpp processselection.cpp gdboutputwidget.cpp # debuggertracingdialog.cpp @@ -36,6 +36,7 @@ stringhelpers.cpp debugsession.cpp gdblaunchconfig.cpp + debugjob.cpp selectcoredialog.cpp variablecontroller.cpp gdbframestackmodel.cpp diff -Nru kdevelop-3.9.98/debuggers/gdb/debuggerconfigwidget.ui kdevelop-4.0.1/debuggers/gdb/debuggerconfigwidget.ui --- kdevelop-3.9.98/debuggers/gdb/debuggerconfigwidget.ui 2009-06-03 07:03:42.000000000 +0100 +++ kdevelop-4.0.1/debuggers/gdb/debuggerconfigwidget.ui 2010-07-17 20:08:19.000000000 +0100 @@ -135,21 +135,7 @@ - - - - Use the floating toolbar. This toolbar always stays -on top of all windows so that if the app covers KDevelop -you have control of the app through the small toolbar. It -can also be docked into the panel. - -This toolbar is in addition to the toolbar in KDevelop. - - - E&nable floating toolbar - - - + @@ -309,7 +296,6 @@ kcfg_displayStaticMembers kcfg_asmDemangle kcfg_breakOnLoadingLibrary - kcfg_enableFloatingToolBar kcfg_dbgTerminal kcfg_configGdbScript kcfg_runShellScript diff -Nru kdevelop-3.9.98/debuggers/gdb/debuggerplugin.cpp kdevelop-4.0.1/debuggers/gdb/debuggerplugin.cpp --- kdevelop-3.9.98/debuggers/gdb/debuggerplugin.cpp 2009-07-25 23:14:43.000000000 +0100 +++ kdevelop-4.0.1/debuggers/gdb/debuggerplugin.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -80,6 +80,7 @@ #include #include "gdblaunchconfig.h" +#include "debugjob.h" namespace GDBDebugger @@ -144,9 +145,7 @@ gdbfactory = new DebuggerToolFactory( this, "org.kdevelop.debugger.ConsoleView",Qt::BottomDockWidgetArea); - viewerfactory = new DebuggerToolFactory( - this, "org.kdevelop.debugger.VariousViews", Qt::BottomDockWidgetArea); - + core()->uiController()->addToolView( i18n("Disassemble"), disassemblefactory); @@ -155,9 +154,13 @@ i18n("GDB"), gdbfactory); + /* + viewerfactory = new DebuggerToolFactory( + this, "org.kdevelop.debugger.VariousViews", Qt::BottomDockWidgetArea); core()->uiController()->addToolView( i18n("Debug views"), viewerfactory); + */ setupActions(); @@ -182,13 +185,14 @@ { core()->uiController()->removeToolView(disassemblefactory); core()->uiController()->removeToolView(gdbfactory); - core()->uiController()->removeToolView(viewerfactory); + //core()->uiController()->removeToolView(viewerfactory); } void CppDebuggerPlugin::setupActions() { KActionCollection* ac = actionCollection(); + /* KAction* action = new KAction(KIcon("dbgmemview"), i18n("Viewers"), this); action->setToolTip( i18n("Debugger viewers") ); action->setWhatsThis(i18n("Debugger viewers

Various information about application being executed. There are 4 views available:
" @@ -198,9 +202,10 @@ "Libraries")); connect(action, SIGNAL(triggered(bool)), this, SIGNAL(addMemoryView())); ac->addAction("debug_memview", action); + */ - action = new KAction(KIcon("core"), i18n("Examine Core File..."), this); + KAction* action = new KAction(KIcon("core"), i18n("Examine Core File..."), this); action->setToolTip( i18n("Examine core file") ); action->setWhatsThis( i18n("Examine core file

" "This loads a core file, which is typically created " @@ -278,15 +283,12 @@ CppDebuggerPlugin::~CppDebuggerPlugin() { - delete floatingToolBar; - GDBParser::destroy(); } void CppDebuggerPlugin::initializeGuiState() { - stateChanged("stopped"); } KDevelop::ContextMenuExtension CppDebuggerPlugin::contextMenuExtension( KDevelop::Context* context ) @@ -363,7 +365,13 @@ emit showMessage(this, i18n("Examining core file %1", dlg.core().toLocalFile()), 1000); - createSession()->examineCoreFile(dlg.binary(), dlg.core()); + DebugSession* session = createSession(); + session->examineCoreFile(dlg.binary(), dlg.core()); + + KillSessionJob *job = new KillSessionJob(session); + job->setObjectName(i18n("Debug core file")); + core()->runController()->registerJob(job); + job->start(); } @@ -387,7 +395,13 @@ { emit showMessage(this, i18n("Attaching to process %1", pid), 1000); - createSession()->attachToProcess(pid); + DebugSession* session = createSession(); + session->attachToProcess(pid); + + KillSessionJob *job = new KillSessionJob(session); + job->setObjectName(i18n("Debug process %1", pid)); + core()->runController()->registerJob(job); + job->start(); } // Used to disable breakpoint actions when non-text document selected diff -Nru kdevelop-3.9.98/debuggers/gdb/debuggerplugin.h kdevelop-4.0.1/debuggers/gdb/debuggerplugin.h --- kdevelop-3.9.98/debuggers/gdb/debuggerplugin.h 2009-07-22 15:16:10.000000000 +0100 +++ kdevelop-4.0.1/debuggers/gdb/debuggerplugin.h 2010-07-17 20:08:19.000000000 +0100 @@ -98,7 +98,7 @@ void reset(); - void addMemoryView(); + //void addMemoryView(); private Q_SLOTS: void setupDBus(); @@ -134,8 +134,6 @@ void attachProcess(int pid); void setupActions(); - QPointer floatingToolBar; - QHash m_drkonqis; QSignalMapper* m_drkonqiMap; QString m_drkonqi; @@ -152,7 +150,7 @@ DebugSession* m_session; DebuggerToolFactory< DisassembleWidget >* disassemblefactory; DebuggerToolFactory< GDBOutputWidget >* gdbfactory; - DebuggerToolFactory< ViewerWidget >* viewerfactory; + //DebuggerToolFactory< ViewerWidget >* viewerfactory; }; diff -Nru kdevelop-3.9.98/debuggers/gdb/debugjob.cpp kdevelop-4.0.1/debuggers/gdb/debugjob.cpp --- kdevelop-3.9.98/debuggers/gdb/debugjob.cpp 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debuggers/gdb/debugjob.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,151 @@ +/* +* GDB Debugger Support +* +* Copyright 2006 Vladimir Prus +* Copyright 2007 Hamish Rodda +* Copyright 2009 Andreas Pakulat +* +* 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., +* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include "debugjob.h" +#include "debuggerplugin.h" +#include +#include +#include +#include +#include +#include +#include "debugsession.h" + +using namespace GDBDebugger; +using namespace KDevelop; + +DebugJob::DebugJob( GDBDebugger::CppDebuggerPlugin* p, KDevelop::ILaunchConfiguration* launchcfg, QObject* parent) + : KDevelop::OutputJob(parent), m_launchcfg( launchcfg ) +{ + setCapabilities(Killable); + + m_session = p->createSession(); + connect(m_session, SIGNAL(applicationStandardOutputLines(QStringList)), SLOT(stderrReceived(QStringList))); + connect(m_session, SIGNAL(applicationStandardErrorLines(QStringList)), SLOT(stdoutReceived(QStringList))); + connect(m_session, SIGNAL(finished()), SLOT(done()) ); + + setObjectName(launchcfg->name()); +} + +void DebugJob::start() +{ + KConfigGroup grp = m_launchcfg->config(); + KDevelop::EnvironmentGroupList l(KGlobal::config()); + IExecutePlugin* iface = KDevelop::ICore::self()->pluginController()->pluginForExtension("org.kdevelop.IExecutePlugin")->extension(); + Q_ASSERT(iface); + QString err; + QString executable = iface->executable( m_launchcfg, err ).toLocalFile(); + QString envgrp = iface->environmentGroup( m_launchcfg ); + + if( !err.isEmpty() ) + { + setError( -1 ); + setErrorText( err ); + emitResult(); + return; + } + + if( envgrp.isEmpty() ) + { + kWarning() << i18n("No environment group specified, looks like a broken " + "configuration, please check run configuration '%1'. " + "Using default environment group.", m_launchcfg->name() ); + envgrp = l.defaultGroup(); + } + + QStringList arguments = iface->arguments( m_launchcfg, err ); + if( !err.isEmpty() ) + { + setError( -1 ); + setErrorText( err ); + } + if( error() != 0 ) + { + emitResult(); + return; + } + + setStandardToolView(KDevelop::IOutputView::DebugView); + setBehaviours(KDevelop::IOutputView::AllowUserClose | KDevelop::IOutputView::AutoScroll); + setModel( new KDevelop::OutputModel(), KDevelop::IOutputView::TakeOwnership ); + setTitle(m_launchcfg->name()); + + startOutput(); + + m_session->startProgram( m_launchcfg ); +} + +bool DebugJob::doKill() +{ + kDebug(); + m_session->stopDebugger(); + return true; +} + +void DebugJob::stderrReceived(const QStringList& l ) +{ + if (KDevelop::OutputModel* m = model()) { + m->appendLines( l ); + } +} + +void DebugJob::stdoutReceived(const QStringList& l ) +{ + if (KDevelop::OutputModel* m = model()) { + m->appendLines( l ); + } +} + +KDevelop::OutputModel* DebugJob::model() +{ + return dynamic_cast( KDevelop::OutputJob::model() ); +} + + +void DebugJob::done() +{ + emitResult(); +} + + +KillSessionJob::KillSessionJob(DebugSession *session, QObject* parent): m_session(session), KJob(parent) +{ + connect(m_session, SIGNAL(finished()), SLOT(sessionFinished())); + setCapabilities(Killable); +} + +void KillSessionJob::start() +{ + //NOOP +} + +bool KillSessionJob::doKill() +{ + m_session->stopDebugger(); + return true; +} + +void KillSessionJob::sessionFinished() +{ + emitResult(); +} diff -Nru kdevelop-3.9.98/debuggers/gdb/debugjob.h kdevelop-4.0.1/debuggers/gdb/debugjob.h --- kdevelop-3.9.98/debuggers/gdb/debugjob.h 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debuggers/gdb/debugjob.h 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,75 @@ +/* +* GDB Debugger Support +* +* Copyright 2006 Vladimir Prus +* Copyright 2007 Hamish Rodda +* Copyright 2009 Andreas Pakulat +* +* 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., +* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ +#ifndef GDBDEBUGJOB +#define GDBDEBUGJOB + +#include + +namespace KDevelop +{ +class OutputModel; +class ILaunchConfiguration; +} + +namespace GDBDebugger +{ +class CppDebuggerPlugin; +class DebugSession; + + +class DebugJob : public KDevelop::OutputJob +{ +Q_OBJECT +public: + DebugJob( CppDebuggerPlugin*, KDevelop::ILaunchConfiguration*, QObject* parent = 0 ); + virtual void start(); +protected: + virtual bool doKill(); +private slots: + void stdoutReceived(const QStringList&); + void stderrReceived(const QStringList&); + void done(); +private: + KDevelop::OutputModel* model(); + DebugSession* m_session; + KDevelop::ILaunchConfiguration* m_launchcfg; +}; + +//this job is just here to be able to kill the debug session +class KillSessionJob : public KJob +{ +Q_OBJECT +public: + KillSessionJob(DebugSession *session, QObject *parent = 0); + virtual void start(); +protected: + virtual bool doKill(); +private: + DebugSession* m_session; +private slots: + void sessionFinished(); +}; + +} + +#endif diff -Nru kdevelop-3.9.98/debuggers/gdb/debugsession.cpp kdevelop-4.0.1/debuggers/gdb/debugsession.cpp --- kdevelop-3.9.98/debuggers/gdb/debugsession.cpp 2010-01-08 18:00:54.000000000 +0000 +++ kdevelop-4.0.1/debuggers/gdb/debugsession.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -47,6 +47,8 @@ #include #include #include +#include +#include #include "breakpointcontroller.h" #include "variablecontroller.h" @@ -165,20 +167,9 @@ if (changedState & s_dbgNotStarted) { if (newState & s_dbgNotStarted) { message = i18n("Debugger stopped"); - if (floatingToolBar) - floatingToolBar->hide(); } else { setSessionState(StartingState); - if (m_config.readEntry("Floating Toolbar", false)) - { - #ifndef QT_MAC - if (!floatingToolBar) { - floatingToolBar = new KToolBar(qApp->activeWindow()); - floatingToolBar->show(); - } - #endif - } } //core()->running(this, false); @@ -293,7 +284,7 @@ // real binary name. queueCmd(new GDBCommand(GDBMI::FileExecAndSymbols)); - queueCmd(new GDBCommand(GDBMI::TargetAttach, pid)); + queueCmd(new GDBCommand(GDBMI::TargetAttach, pid, this, &DebugSession::handleTargetAttach, true)); raiseEvent(connected_to_program); @@ -963,12 +954,28 @@ KConfigGroup grp = cfg->config(); KDevelop::EnvironmentGroupList l(KGlobal::config()); + if (grp.readEntry("Break on Start", false)) { + BreakpointModel* m = KDevelop::ICore::self()->debugController()->breakpointModel(); + bool found = false; + foreach (KDevelop::Breakpoint *b, m->breakpoints()) { + if (b->location() == "main") { + found = true; + break; + } + } + if (!found) { + KDevelop::ICore::self()->debugController()->breakpointModel()->addCodeBreakpoint("main"); + } + } + + // Configuration values bool config_breakOnLoadingLibrary_ = grp.readEntry( GDBDebugger::breakOnLibLoadEntry, false ); bool config_forceBPSet_ = grp.readEntry( GDBDebugger::allowForcedBPEntry, true ); bool config_displayStaticMembers_ = grp.readEntry( GDBDebugger::staticMembersEntry, false ); bool config_asmDemangle_ = grp.readEntry( GDBDebugger::demangleNamesEntry, true ); - bool config_dbgTerminal_ = grp.readEntry( GDBDebugger::separateTerminalEntry, false ); + //bool config_dbgTerminal_ = grp.readEntry( GDBDebugger::separateTerminalEntry, false ); + bool config_dbgTerminal_ = false; KUrl config_dbgShell_ = grp.readEntry( GDBDebugger::debuggerShellEntry, KUrl() ); KUrl config_configGdbScript_ = grp.readEntry( GDBDebugger::remoteGdbConfigEntry, KUrl() ); KUrl config_runShellScript_ = grp.readEntry( GDBDebugger::remoteGdbShellEntry, KUrl() ); @@ -1077,46 +1084,9 @@ } else { - QFileInfo app(executable); - - if (!app.exists()) - { - KMessageBox::error( - qApp->activeWindow(), - i18n("Application does not exist" - "

The application you are trying to debug,
" - " %1\n" - "
does not exist. Check that you have specified " - "the right application in the debugger configuration.", - app.fileName()), - i18n("Application does not exist")); - - // FIXME: after this, KDevelop will still show that debugger - // is running, because DebuggerPart::slotStopDebugger won't be - // called, and core()->running(this, false) won't be called too. - stopDebugger(); - return false; - } - - if (!app.isExecutable()) - { - KMessageBox::error( - qApp->activeWindow(), - i18n("Could not run application '%1'." - "

The application does not have the executable bit set. " - "Try rebuilding the project, or change permissions " - "manually.", - app.fileName()), - i18n("Could not run application")); - stopDebugger(); - return false; - } - else - { - queueCmd(new GDBCommand(GDBMI::FileExecAndSymbols, executable)); - raiseEvent(connected_to_program); - queueCmd(new GDBCommand(GDBMI::ExecRun)); - } + queueCmd(new GDBCommand(GDBMI::FileExecAndSymbols, executable, this, &DebugSession::handleFileExecAndSymbols, true)); + raiseEvent(connected_to_program); + queueCmd(new GDBCommand(GDBMI::ExecRun)); } setStateOff(s_appNotStarted|s_programExited); @@ -1124,6 +1094,7 @@ return true; } + // ************************************************************************** // SLOTS // ***** @@ -1438,6 +1409,31 @@ } +void DebugSession::handleFileExecAndSymbols(const GDBMI::ResultRecord& r) +{ + if (r.reason == "error") { + KMessageBox::error( + qApp->activeWindow(), + i18n("Could not start debugger:
")+ + r["msg"].literal(), + i18n("Startup error")); + stopDebugger(); + } +} + +void DebugSession::handleTargetAttach(const GDBMI::ResultRecord& r) +{ + if (r.reason == "error") { + KMessageBox::error( + qApp->activeWindow(), + i18n("Could not attach debugger:
")+ + r["msg"].literal(), + i18n("Startup error")); + stopDebugger(); + } +} + } + #include "debugsession.moc" diff -Nru kdevelop-3.9.98/debuggers/gdb/debugsession.h kdevelop-4.0.1/debuggers/gdb/debugsession.h --- kdevelop-3.9.98/debuggers/gdb/debugsession.h 2010-01-16 12:11:36.000000000 +0000 +++ kdevelop-4.0.1/debuggers/gdb/debugsession.h 2010-07-17 20:08:19.000000000 +0100 @@ -62,8 +62,7 @@ static QString staticMembersEntry = "Display Static Members"; static QString demangleNamesEntry = "Display Demangle Names"; static QString breakOnLibLoadEntry = "Try Setting Breakpoints On Loading Libraries"; -static QString separateTerminalEntry = "Separate Terminal For Application IO"; -static QString floatingToolbarEntry = "Floating Toolbar"; +//static QString separateTerminalEntry = "Separate Terminal For Application IO"; static QString allowForcedBPEntry = "Allow Forced Breakpoint Set"; class DebugSession : public KDevelop::IDebugSession @@ -128,7 +127,6 @@ KDevelop::ProcessLineMaker *m_gdbLineMaker; DebuggerState m_sessionState; bool justRestarted_; - QPointer floatingToolBar; KConfigGroup m_config; QPointer m_gdb; @@ -274,6 +272,8 @@ void slotKillGdb(); void handleVersion(const QStringList& s); + void handleFileExecAndSymbols(const GDBMI::ResultRecord& r); + void handleTargetAttach(const GDBMI::ResultRecord& r); public Q_SLOTS: void slotKill(); diff -Nru kdevelop-3.9.98/debuggers/gdb/gdblaunchconfig.cpp kdevelop-4.0.1/debuggers/gdb/gdblaunchconfig.cpp --- kdevelop-3.9.98/debuggers/gdb/gdblaunchconfig.cpp 2010-01-30 22:21:53.000000000 +0000 +++ kdevelop-4.0.1/debuggers/gdb/gdblaunchconfig.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -34,13 +34,13 @@ #include #include #include -#include #include #include #include #include #include #include +#include #include "debugsession.h" #include "debuggerplugin.h" @@ -48,6 +48,9 @@ #include "ui_debuggerconfigwidget.h" #include #include +#include "debugjob.h" + +using namespace KDevelop; GdbConfigPage::GdbConfigPage( QWidget* parent ) : LaunchConfigurationPage(parent), ui( new Ui::DebuggerConfigWidget ) @@ -57,10 +60,9 @@ connect(ui->kcfg_asmDemangle, SIGNAL(toggled(bool)), this, SIGNAL(changed())); connect(ui->kcfg_breakOnLoadingLibrary, SIGNAL(toggled(bool)), this, SIGNAL(changed())); connect(ui->kcfg_configGdbScript, SIGNAL(textChanged(QString)), this, SIGNAL(changed())); - connect(ui->kcfg_dbgTerminal, SIGNAL(toggled(bool)), this, SIGNAL(changed())); + //connect(ui->kcfg_dbgTerminal, SIGNAL(toggled(bool)), this, SIGNAL(changed())); connect(ui->kcfg_debuggingShell, SIGNAL(textChanged(QString)), this, SIGNAL(changed())); connect(ui->kcfg_displayStaticMembers, SIGNAL(toggled(bool)), this, SIGNAL(changed())); - connect(ui->kcfg_enableFloatingToolBar, SIGNAL(toggled(bool)), this, SIGNAL(changed())); connect(ui->kcfg_gdbPath, SIGNAL(textChanged(QString)), this, SIGNAL(changed())); connect(ui->kcfg_runGdbScript, SIGNAL(textChanged(QString)), this, SIGNAL(changed())); connect(ui->kcfg_runShellScript, SIGNAL(textChanged(QString)), this, SIGNAL(changed())); @@ -84,8 +86,7 @@ //TODO: add ui for this //ui->kcfg_allowForceBP->setChecked( cfg.readEtnry( GDBDebugger::allowForcedBPEntry, true ) ); ui->kcfg_breakOnLoadingLibrary->setChecked( cfg.readEntry( GDBDebugger::breakOnLibLoadEntry, true) ); - ui->kcfg_dbgTerminal->setChecked( cfg.readEntry( GDBDebugger::separateTerminalEntry, false) ); - ui->kcfg_enableFloatingToolBar->setChecked( cfg.readEntry(GDBDebugger::floatingToolbarEntry, false) ); + //ui->kcfg_dbgTerminal->setChecked( cfg.readEntry( GDBDebugger::separateTerminalEntry, false) ); blockSignals( block ); } @@ -99,8 +100,7 @@ cfg.writeEntry(GDBDebugger::staticMembersEntry, ui->kcfg_displayStaticMembers->isChecked() ); cfg.writeEntry(GDBDebugger::demangleNamesEntry, ui->kcfg_asmDemangle->isChecked() ); cfg.writeEntry(GDBDebugger::breakOnLibLoadEntry, ui->kcfg_breakOnLoadingLibrary->isChecked() ); - cfg.writeEntry(GDBDebugger::separateTerminalEntry, ui->kcfg_dbgTerminal->isChecked() ); - cfg.writeEntry(GDBDebugger::floatingToolbarEntry, ui->kcfg_enableFloatingToolBar->isChecked() ); + //cfg.writeEntry(GDBDebugger::separateTerminalEntry, ui->kcfg_dbgTerminal->isChecked() ); } QString GdbConfigPage::title() const @@ -146,7 +146,7 @@ { l << depjob; } - l << new GdbJob( m_plugin, cfg ); + l << new GDBDebugger::DebugJob( m_plugin, cfg ); return new KDevelop::ExecuteCompositeJob( KDevelop::ICore::self()->runController(), l ); } kWarning() << "Unknown launch mode" << launchMode << "for config:" << cfg->name(); @@ -168,96 +168,6 @@ return new GdbConfigPage( parent ); } -GdbJob::GdbJob( GDBDebugger::CppDebuggerPlugin* p, KDevelop::ILaunchConfiguration* launchcfg, QObject* parent) - : KDevelop::OutputJob(parent), m_launchcfg( launchcfg ) -{ - setCapabilities(Killable); - - m_session = p->createSession(); - connect(m_session, SIGNAL(applicationStandardOutputLines(QStringList)), SLOT(stderrReceived(QStringList))); - connect(m_session, SIGNAL(applicationStandardErrorLines(QStringList)), SLOT(stdoutReceived(QStringList))); - connect(m_session, SIGNAL(finished()), SLOT(done()) ); -} - -void GdbJob::start() -{ - KConfigGroup grp = m_launchcfg->config(); - KDevelop::EnvironmentGroupList l(KGlobal::config()); - IExecutePlugin* iface = KDevelop::ICore::self()->pluginController()->pluginForExtension("org.kdevelop.IExecutePlugin")->extension(); - Q_ASSERT(iface); - QString err; - QString executable = iface->executable( m_launchcfg, err ).toLocalFile(); - QString envgrp = iface->environmentGroup( m_launchcfg ); - - if( !err.isEmpty() ) - { - setError( -1 ); - setErrorText( err ); - emitResult(); - return; - } - - if( envgrp.isEmpty() ) - { - kWarning() << i18n("No environment group specified, looks like a broken " - "configuration, please check run configuration '%1'. " - "Using default environment group.", m_launchcfg->name() ); - envgrp = l.defaultGroup(); - } - - QStringList arguments = iface->arguments( m_launchcfg, err ); - if( !err.isEmpty() ) - { - setError( -1 ); - setErrorText( err ); - } - if( error() != 0 ) - { - emitResult(); - return; - } - - setStandardToolView(KDevelop::IOutputView::DebugView); - setBehaviours(KDevelop::IOutputView::AllowUserClose | KDevelop::IOutputView::AutoScroll); - setModel( new KDevelop::OutputModel(), KDevelop::IOutputView::TakeOwnership ); - setTitle(m_launchcfg->name()); - - startOutput(); - - m_session->startProgram( m_launchcfg ); -} - -bool GdbJob::doKill() -{ - kDebug(); - m_session->stopDebugger(); - return true; -} - -void GdbJob::stderrReceived(const QStringList& l ) -{ - if (KDevelop::OutputModel* m = model()) { - m->appendLines( l ); - } -} - -void GdbJob::stdoutReceived(const QStringList& l ) -{ - if (KDevelop::OutputModel* m = model()) { - m->appendLines( l ); - } -} - -KDevelop::OutputModel* GdbJob::model() -{ - return dynamic_cast( KDevelop::OutputJob::model() ); -} - - -void GdbJob::done() -{ - emitResult(); -} #include "gdblaunchconfig.moc" diff -Nru kdevelop-3.9.98/debuggers/gdb/gdblaunchconfig.h kdevelop-4.0.1/debuggers/gdb/gdblaunchconfig.h --- kdevelop-3.9.98/debuggers/gdb/gdblaunchconfig.h 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/debuggers/gdb/gdblaunchconfig.h 2010-07-17 20:08:19.000000000 +0100 @@ -44,24 +44,6 @@ class DebugSession; } -class GdbJob : public KDevelop::OutputJob -{ -Q_OBJECT -public: - GdbJob( GDBDebugger::CppDebuggerPlugin*, KDevelop::ILaunchConfiguration*, QObject* parent = 0 ); - virtual void start(); -protected: - virtual bool doKill(); -private slots: - void stdoutReceived(const QStringList&); - void stderrReceived(const QStringList&); - void done(); -private: - KDevelop::OutputModel* model(); - GDBDebugger::DebugSession* m_session; - KDevelop::ILaunchConfiguration* m_launchcfg; -}; - class GdbConfigPageFactory : public KDevelop::LaunchConfigurationPageFactory { public: diff -Nru kdevelop-3.9.98/debuggers/gdb/gdbvariable.cpp kdevelop-4.0.1/debuggers/gdb/gdbvariable.cpp --- kdevelop-3.9.98/debuggers/gdb/gdbvariable.cpp 2009-11-28 11:51:54.000000000 +0000 +++ kdevelop-4.0.1/debuggers/gdb/gdbvariable.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -77,7 +77,12 @@ void GdbVariable::setVarobj(const QString& v) { - Q_ASSERT(varobj_.isEmpty()); + if (!varobj_.isEmpty()) { + // this should not happen + // but apperently it does when attachMaybe is called a second time before + // the first -var-create call returned + allVariables_.remove(varobj_); + } varobj_ = v; allVariables_[varobj_] = this; } @@ -148,7 +153,7 @@ s->addCommand( new GDBCommand( GDBMI::VarCreate, - QString("var%1 @ %2").arg(nextId++).arg(expression()), + QString("var%1 @ %2").arg(nextId++).arg(enquotedExpression()), new CreateVarobjHandler(this, callback, callbackMethod))); } } @@ -310,3 +315,11 @@ { return varobj_; } + +QString GdbVariable::enquotedExpression() const +{ + QString expr = expression(); + expr.replace('"', "\\\""); + expr = expr.prepend('"').append('"'); + return expr; +} diff -Nru kdevelop-3.9.98/debuggers/gdb/gdbvariable.h kdevelop-4.0.1/debuggers/gdb/gdbvariable.h --- kdevelop-3.9.98/debuggers/gdb/gdbvariable.h 2009-09-18 14:58:00.000000000 +0100 +++ kdevelop-4.0.1/debuggers/gdb/gdbvariable.h 2010-07-17 20:08:19.000000000 +0100 @@ -61,6 +61,7 @@ private: // Internal friend class ::CreateVarobjHandler; friend class ::FetchMoreChildrenHandler; + QString enquotedExpression() const; void setVarobj(const QString& v); QString varobj_; diff -Nru kdevelop-3.9.98/debuggers/gdb/kdevgdb.desktop kdevelop-4.0.1/debuggers/gdb/kdevgdb.desktop --- kdevelop-3.9.98/debuggers/gdb/kdevgdb.desktop 2010-01-10 10:53:38.000000000 +0000 +++ kdevelop-4.0.1/debuggers/gdb/kdevgdb.desktop 2010-07-17 20:08:19.000000000 +0100 @@ -4,6 +4,7 @@ Comment=This plugin provides a frontend for GDB, a source-level debugger for C, C++ and more. Comment[ca]=Aquest connector proveeix d'un frontal per GDB, un depurador a nivell de codi per C,C++ i més llenguatges. Comment[ca@valencia]=Este connector proveeix d'un frontal per GDB, un depurador a nivell de codi per C,C++ i més llenguatges. +Comment[da]=Dette plugin sørger for en brugerflade til GDB, en fejlsøger til C, C++ og mere. Comment[de]=Dieses Modul stellt eine Oberfläche für GDB zur Verfügung. GDB ist ein Debugger für C, C++ und weitere. Comment[el]=Αυτό το πρόσθετο προσφέρει ένα σύστημα περιβάλλοντος για το GDB, έναν αποσφαλματωτή επιπέδου πηγαίου κώδικα για τις C, C++ και άλλες γλώσσες. Comment[en_GB]=This plugin provides a frontend for GDB, a source-level debugger for C, C++ and more. @@ -13,15 +14,17 @@ Comment[fr]=Ce module externe fournit une interface pour GDB, un débogueur au niveau des sources pour C, C++, etc. Comment[ga]=Soláthraíonn an breiseán seo comhéadan ar GDB, dífhabhtóir foinse C, C++ agus a thuilleadh. Comment[gl]=Esta extensión fornece unha interface para GDB, un depurador a nivel do código fonte para C, C++ e outros. -Comment[it]=Questa estensione fornisce una interfaccia per il GDB, un debugger a livello sorgente per C, C++ e altro. +Comment[it]=Questa estensione fornisce un'interfaccia per il GDB, un debugger a livello sorgente per C, C++ e altro. Comment[ja]=このプラグインは、C, C++ などのソースレベルデバッガ GDB のフロントエンドを提供します。 Comment[lv]=Šis spraudnis nodrošina priekšpusi GDB, C, C++ un cita pirmkoda atkļūdotāja. Comment[nb]=Dette programtillegget gir en brukerflate til GDB, et feilsøkingsprogram på kildenivå for C og C++ Comment[nds]=Dit Moduul stellt en Böversiet för GDB praat, en Bornkode-Fehlersöker för C, C++ un anner Spraken. Comment[nl]=Deze plugin levert een frontend voor GDB, een broncodedebugger voor C, C++ en meer. +Comment[pl]=Ta wtyczka udostępnia interfejs do GDB, debuggera dla C, C++ i innych języków. Comment[pt]=Este 'plugin' oferece uma interface para o GDB, um depurador a nível do código-fonte para C, C++, entre outros. Comment[pt_BR]=Este plugin oferece uma interface para o GDB, um depurador em nível de código-fonte para C, C++, entre outros. Comment[ru]=Этот модуль предоставляет интерфейс к GDB, отладчику исходного кода для C, C++ и других языков. +Comment[sl]=Ta vstavek prinaša vmesnik za GDB, razhroščevalnik na ravni izvorne kode za C, C++ in več. Comment[sv]=Insticksprogrammet tillhandahåller ett gränssnitt till GDB, en källkodsavlusare för C, C++ med mera. Comment[tr]=Bu eklenti, C, C++ ve daha fazlası için bir kaynak-düzeyinde hata ayıklayıcı olan GDB için bir önucu sağlar. Comment[uk]=Цей додаток надає можливість користуватися клієнтським інтерфейсом GDB, зневадника вихідного коду на C, C++ тощо. @@ -32,6 +35,7 @@ Name[ca]=Implementació de GDB Name[ca@valencia]=Implementació de GDB Name[cs]=Podpora GDB +Name[da]=GDB-understøttelse Name[de]=Unterstützung für GDB Name[el]=Υποστήριξη GDB Name[en_GB]=GDB Support @@ -47,9 +51,11 @@ Name[nb]=GDB-støtte Name[nds]=GDB-Ünnerstütten Name[nl]=Ondersteuning voor GDB +Name[pl]=Obsługa GDB Name[pt]=Suporte a GDB Name[pt_BR]=Suporte a GDB Name[ru]=Поддержка GDB +Name[sl]=Podpora za GDB Name[sv]=GDB stöd Name[tr]=GDB Desteği Name[uk]=Підтримка GDB @@ -100,7 +106,7 @@ Icon=debugger X-KDE-Library=kdevgdb X-KDevelop-Category=Global -X-KDevelop-Version=8 +X-KDevelop-Version=9 X-KDE-PluginInfo-Name=kdevgdb X-KDE-PluginInfo-License=GPL ServiceTypes=KDevelop/Plugin diff -Nru kdevelop-3.9.98/debuggers/gdb/kdevgdbui.rc kdevelop-4.0.1/debuggers/gdb/kdevgdbui.rc --- kdevelop-3.9.98/debuggers/gdb/kdevgdbui.rc 2009-06-03 07:04:19.000000000 +0100 +++ kdevelop-4.0.1/debuggers/gdb/kdevgdbui.rc 2010-07-17 20:08:19.000000000 +0100 @@ -1,5 +1,5 @@ - +

Run @@ -18,31 +18,5 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru kdevelop-3.9.98/debuggers/gdb/printers/.gitignore kdevelop-4.0.1/debuggers/gdb/printers/.gitignore --- kdevelop-3.9.98/debuggers/gdb/printers/.gitignore 2009-06-27 21:34:12.000000000 +0100 +++ kdevelop-4.0.1/debuggers/gdb/printers/.gitignore 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -*.pyc diff -Nru kdevelop-3.9.98/debuggers/gdb/printers/qt4.py kdevelop-4.0.1/debuggers/gdb/printers/qt4.py --- kdevelop-3.9.98/debuggers/gdb/printers/qt4.py 2010-01-23 10:42:33.000000000 +0000 +++ kdevelop-4.0.1/debuggers/gdb/printers/qt4.py 2010-07-17 20:08:19.000000000 +0100 @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- +# -*- coding: iso-8859-1 -*- # Pretty-printers for Qt4. # Copyright (C) 2009 Niko Sams @@ -26,20 +26,24 @@ self.val = val def to_string(self): - ret = "" - i = 0 - while i < self.val['d']['size']: - if self.val['d']['data'][i] > 256: - #TODO: fix this properly - ret += '?' - else: - ret += chr(self.val['d']['data'][i]) - i = i + 1 - return ret + #ret = "" + #i = 0 + size = self.val['d']['size'] + #while i < size: + # char = self.val['d']['data'][i] + # if (char > 127): + # ret += "\\u%x" % int(char) + # else: + # ret += chr(char) + # i = i + 1 + #return ret + dataAsCharPointer = self.val['d']['data'].cast(gdb.lookup_type("char").pointer()) + return dataAsCharPointer.string(encoding = 'UTF-16', length = size * 2) def display_hint (self): return 'string' + class QByteArrayPrinter: def __init__(self, val): @@ -395,7 +399,7 @@ def to_string(self): try: return self.val['d']['encodedOriginal'] - except RuntimeError as error: + except RuntimeError, error: #if no debug information is avaliable for Qt, try guessing the correct address for encodedOriginal #problem with this is that if QUrlPrivate members get changed, this fails offset = gdb.lookup_type('int').sizeof @@ -443,6 +447,17 @@ return 'QSet' +class QCharPrinter: + + def __init__(self, val): + self.val = val + + def to_string(self): + return unichr(self.val['ucs']) + + def display_hint (self): + return 'string' + def register_qt4_printers (obj): if obj == None: obj = gdb @@ -489,6 +504,7 @@ pretty_printers_dict[re.compile('^QDateTime$')] = lambda val: QDateTimePrinter(val) pretty_printers_dict[re.compile('^QUrl$')] = lambda val: QUrlPrinter(val) pretty_printers_dict[re.compile('^QSet<.*>$')] = lambda val: QSetPrinter(val) + pretty_printers_dict[re.compile('^QChar$')] = lambda val: QCharPrinter(val) pretty_printers_dict = {} diff -Nru kdevelop-3.9.98/debuggers/gdb/printers/tests/CMakeLists.txt kdevelop-4.0.1/debuggers/gdb/printers/tests/CMakeLists.txt --- kdevelop-3.9.98/debuggers/gdb/printers/tests/CMakeLists.txt 2010-01-30 19:53:11.000000000 +0000 +++ kdevelop-4.0.1/debuggers/gdb/printers/tests/CMakeLists.txt 2010-07-17 20:08:19.000000000 +0100 @@ -46,6 +46,9 @@ add_executable(qsetstring qsetstring.cpp) target_link_libraries(qsetstring ${QT_QTCORE_LIBRARY}) +add_executable(qchar qchar.cpp) +target_link_libraries(qchar ${QT_QTCORE_LIBRARY}) + kde4_add_unit_test(qtprinters qtprinters.cpp) target_link_libraries(qtprinters ${QT_QTCORE_LIBRARY} diff -Nru kdevelop-3.9.98/debuggers/gdb/printers/tests/qchar.cpp kdevelop-4.0.1/debuggers/gdb/printers/tests/qchar.cpp --- kdevelop-3.9.98/debuggers/gdb/printers/tests/qchar.cpp 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/debuggers/gdb/printers/tests/qchar.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,6 @@ +#include +int main() +{ + QChar c('k'); + return 0; +} diff -Nru kdevelop-3.9.98/debuggers/gdb/printers/tests/qtprinters.cpp kdevelop-4.0.1/debuggers/gdb/printers/tests/qtprinters.cpp --- kdevelop-3.9.98/debuggers/gdb/printers/tests/qtprinters.cpp 2010-01-23 10:42:33.000000000 +0000 +++ kdevelop-4.0.1/debuggers/gdb/printers/tests/qtprinters.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -274,7 +274,14 @@ QVERIFY(out.contains("] = \"30\"")); } -//QSet +void QtPrintersTest::testQChar() +{ + GdbProcess gdb("qchar"); + gdb.execute("break qchar.cpp:5"); + gdb.execute("run"); + QVERIFY(gdb.execute("print c").contains("\"k\"")); +} + } QTEST_MAIN(GDBDebugger::QtPrintersTest) diff -Nru kdevelop-3.9.98/debuggers/gdb/printers/tests/qtprinters.h kdevelop-4.0.1/debuggers/gdb/printers/tests/qtprinters.h --- kdevelop-3.9.98/debuggers/gdb/printers/tests/qtprinters.h 2010-01-23 10:42:33.000000000 +0000 +++ kdevelop-4.0.1/debuggers/gdb/printers/tests/qtprinters.h 2010-07-17 20:08:19.000000000 +0100 @@ -44,6 +44,7 @@ void testQHashString(); void testQSetInt(); void testQSetString(); + void testQChar(); }; } diff -Nru kdevelop-3.9.98/debuggers/gdb/unittests/gdbtest.cpp kdevelop-4.0.1/debuggers/gdb/unittests/gdbtest.cpp --- kdevelop-3.9.98/debuggers/gdb/unittests/gdbtest.cpp 2010-01-30 10:28:27.000000000 +0000 +++ kdevelop-4.0.1/debuggers/gdb/unittests/gdbtest.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -47,6 +47,8 @@ #include "debugsession.h" #include "gdbframestackmodel.h" +using KDevelop::AutoTestShell; + namespace GDBDebugger { @@ -935,6 +937,46 @@ WAIT_FOR_STATE(session, DebugSession::EndedState); } +void GdbTest::testVariablesWatchesQuotes() +{ + TestDebugSession *session = new TestDebugSession; + session->variableController()->setAutoUpdate(KDevelop::IVariableController::UpdateWatches); + + TestLaunchConfiguration cfg; + + const QString testString("test"); + const QString quotedTestString("\"" + testString + "\""); + + breakpoints()->addCodeBreakpoint(debugeeFileName, 38); + QVERIFY(session->startProgram(&cfg)); + WAIT_FOR_STATE(session, DebugSession::PausedState); + + variableCollection()->watches()->add(quotedTestString); //just a constant string + QTest::qWait(300); + + QModelIndex i = variableCollection()->index(0, 0); + QCOMPARE(variableCollection()->rowCount(i), 1); + COMPARE_DATA(variableCollection()->index(0, 0, i), quotedTestString); + COMPARE_DATA(variableCollection()->index(0, 1, i), "[" + QString::number(testString.length() + 1) + "]"); + + QModelIndex testStr = variableCollection()->index(0, 0, i); + COMPARE_DATA(variableCollection()->index(0, 0, testStr), "..."); + variableCollection()->expanded(testStr); + QTest::qWait(100); + int len = testString.length(); + for (int ind = 0; ind < len; ind++) + { + COMPARE_DATA(variableCollection()->index(ind, 0, testStr), QString::number(ind)); + QChar c = testString.at(ind); + QString value = QString::number(c.toLatin1()) + " '" + c + "'"; + COMPARE_DATA(variableCollection()->index(ind, 1, testStr), value); + } + COMPARE_DATA(variableCollection()->index(len, 0, testStr), QString::number(len)); + COMPARE_DATA(variableCollection()->index(len, 1, testStr), "0 '\\000'"); + + session->run(); + WAIT_FOR_STATE(session, DebugSession::EndedState); +} void GdbTest::testVariablesWatchesTwoSessions() { diff -Nru kdevelop-3.9.98/debuggers/gdb/unittests/gdbtest.h kdevelop-4.0.1/debuggers/gdb/unittests/gdbtest.h --- kdevelop-3.9.98/debuggers/gdb/unittests/gdbtest.h 2010-01-30 10:28:27.000000000 +0000 +++ kdevelop-4.0.1/debuggers/gdb/unittests/gdbtest.h 2010-07-17 20:08:19.000000000 +0100 @@ -62,6 +62,7 @@ void testVariablesLocals(); void testVariablesLocalsStruct(); void testVariablesWatches(); + void testVariablesWatchesQuotes(); void testVariablesWatchesTwoSessions(); void testVariablesStopDebugger(); void testVariablesStartSecondSession(); diff -Nru kdevelop-3.9.98/debuggers/gdb/variablecontroller.cpp kdevelop-4.0.1/debuggers/gdb/variablecontroller.cpp --- kdevelop-3.9.98/debuggers/gdb/variablecontroller.cpp 2009-12-16 19:56:57.000000000 +0000 +++ kdevelop-4.0.1/debuggers/gdb/variablecontroller.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -154,7 +154,7 @@ void VariableController::updateLocals() { debugSession()->addCommand( - new GDBCommand(GDBMI::StackListLocals, "--all-values", + new GDBCommand(GDBMI::StackListLocals, "--simple-values", new StackListLocalsHandler(debugSession()))); } @@ -166,7 +166,7 @@ if (!c.isLetterOrNumber() && c != '_') return QString(); - int start = Utils::expressionAt(line, index); + int start = Utils::expressionAt(line, index+1); int end = index; for (; end < line.size(); ++end) { diff -Nru kdevelop-3.9.98/doc/addendum/index.cvlog kdevelop-4.0.1/doc/addendum/index.cvlog --- kdevelop-3.9.98/doc/addendum/index.cvlog 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/addendum/index.cvlog 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,1258 @@ +=== LinuxDoc conversion errors =================== +-> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 2 `BOOK' 0 `book' +! Normally this should not be a problem, but check anyway ... + 6 `' 0 `' +! Check the authorname ( instead of ?) + 8 `REF' 0 `' + 11 `TOC' 0 `' + 45 `' 0 `' +! check if reference ID mini-HOWTO was meant for a section (if not, eg for an anchor, change manually) + 52 `BF' 0 `' +! Check and correct manually + 52 `HTMLURL' 0 `' + 62 `HTMLURL' 0 `' + 72 `HTMLURL' 0 `' + 77 `HTMLURL' 0 `' + 95 `LIST' 0 `' +! Would be better? (uses !) + 96 `HTMLURL' 0 `' + 98 `HTMLURL' 0 `' + 100 `HTMLURL' 0 `' + 101 `HTMLURL' 0 `' + 102 `HTMLURL' 0 `' + 103 `HTMLURL' 0 `' + 108 `BF' 0 `' +! Check and correct manually + 108 `BF' 0 `' +! Check and correct manually + 108 `BF' 0 `' +! Check and correct manually + 111 `BF' 0 `' +! Check and correct manually + 111 `BF' 0 `' +! Check and correct manually + 125 `TSCREEN' 0 `' + 128 `VERB' 0 `' +! Because it is in TSCREEN + 128 `TT' 0 `' +! Check and correct manually + 128 `TT' 0 `' +! Check and correct manually + 165 `TT' 0 `' +! Check and correct manually + 167 `HTMLURL' 0 `' + 171 `TT' 0 `' +! Check and correct manually + 174 `TT' 0 `' +! Check and correct manually + 176 `TT' 0 `' +! Check and correct manually + 178 `BF' 0 `' +! Check and correct manually + 178 `TSCREEN' 0 `' + 182 `VERB' 0 `' +! Because it is in TSCREEN + 184 `TT' 0 `' +! Check and correct manually + 187 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 187 `TSCREEN' 0 `' + 191 `VERB' 0 `' +! Because it is in TSCREEN + 196 `BF' 0 `' +! Check and correct manually + 196 `TSCREEN' 0 `' + 199 `VERB' 0 `' +! Because it is in TSCREEN + 203 `BF' 0 `' +! Check and correct manually + 203 `TSCREEN' 0 `' + 210 `VERB' 0 `' +! Because it is in TSCREEN + 212 `TT' 0 `' +! Check and correct manually + 224 `BF' 0 `' +! Check and correct manually + 224 `TSCREEN' 0 `' + 227 `VERB' 0 `' +! Because it is in TSCREEN + 229 `TT' 0 `' +! Check and correct manually + 232 `BF' 0 `' +! Check and correct manually + 232 `TSCREEN' 0 `' + 235 `VERB' 0 `' +! Because it is in TSCREEN + 240 `BF' 0 `' +! Check and correct manually + 240 `TSCREEN' 0 `' + 246 `VERB' 0 `' +! Because it is in TSCREEN + 249 `BF' 0 `' +! Check and correct manually + 249 `TSCREEN' 0 `' + 255 `VERB' 0 `' +! Because it is in TSCREEN + 257 `BF' 0 `' +! Check and correct manually + 257 `TSCREEN' 0 `' + 265 `VERB' 0 `' +! Because it is in TSCREEN + 267 `BF' 0 `' +! Check and correct manually + 267 `TSCREEN' 0 `' + 274 `VERB' 0 `' +! Because it is in TSCREEN + 299 `TSCREEN' 0 `' + 308 `VERB' 0 `' +! Because it is in TSCREEN + 314 `TT' 0 `' +! Check and correct manually + 316 `TSCREEN' 0 `' + 336 `VERB' 0 `' +! Because it is in TSCREEN + 341 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 341 `TT' 0 `' +! Check and correct manually + 343 `TT' 0 `' +! Check and correct manually + 343 `TT' 0 `' +! Check and correct manually + 343 `TT' 0 `' +! Check and correct manually + 350 `HTMLURL' 0 `' + 358 `TT' 0 `' +! Check and correct manually + 358 `TT' 0 `' +! Check and correct manually + 358 `TT' 0 `' +! Check and correct manually + 358 `TT' 0 `' +! Check and correct manually + 358 `TT' 0 `' +! Check and correct manually + 358 `HTMLURL' 0 `' + 365 `TT' 0 `' +! Check and correct manually + 365 `TT' 0 `' +! Check and correct manually + 373 `TT' 0 `' +! Check and correct manually + 376 `TSCREEN' 0 `' + 401 `VERB' 0 `' +! Because it is in TSCREEN + 403 `TT' 0 `' +! Check and correct manually + 403 `TT' 0 `' +! Check and correct manually + 403 `TT' 0 `' +! Check and correct manually + 403 `TT' 0 `' +! Check and correct manually + 409 `TT' 0 `' +! Check and correct manually + 409 `TSCREEN' 0 `' + 412 `VERB' 0 `' +! Because it is in TSCREEN + 414 `TT' 0 `' +! Check and correct manually + 414 `TT' 0 `' +! Check and correct manually + 414 `TT' 0 `' +! Check and correct manually + 414 `TT' 0 `' +! Check and correct manually + 414 `TT' 0 `' +! Check and correct manually + 414 `TT' 0 `' +! Check and correct manually + 414 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 438 `TT' 0 `' +! Check and correct manually + 438 `TT' 0 `' +! Check and correct manually + 438 `TT' 0 `' +! Check and correct manually + 445 `TSCREEN' 0 `' + 450 `VERB' 0 `' +! Because it is in TSCREEN + 457 `TSCREEN' 0 `' + 463 `VERB' 0 `' +! Because it is in TSCREEN + 463 `TSCREEN' 0 `' + 467 `VERB' 0 `' +! Because it is in TSCREEN + 467 `TSCREEN' 0 `' + 471 `VERB' 0 `' +! Because it is in TSCREEN + 473 `TSCREEN' 0 `' + 476 `VERB' 0 `' +! Because it is in TSCREEN + 480 `TSCREEN' 0 `' + 484 `VERB' 0 `' +! Because it is in TSCREEN + 486 `TT' 0 `' +! Check and correct manually + 489 `TT' 0 `' +! Check and correct manually + 492 `TT' 0 `' +! Check and correct manually + 492 `TSCREEN' 0 `' + 495 `VERB' 0 `' +! Because it is in TSCREEN + 503 `TT' 0 `' +! Check and correct manually + 503 `TT' 0 `' +! Check and correct manually + 503 `TT' 0 `' +! Check and correct manually + 503 `TT' 0 `' +! Check and correct manually + 509 `BF' 0 `' +! Check and correct manually + 515 `TSCREEN' 0 `' + 521 `VERB' 0 `' +! Because it is in TSCREEN + 527 `TSCREEN' 0 `' + 558 `VERB' 0 `' +! Because it is in TSCREEN + 566 `TT' 0 `' +! Check and correct manually + 568 `TSCREEN' 0 `' + 586 `VERB' 0 `' +! Because it is in TSCREEN + 597 `HTMLURL' 0 `' + 600 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 603 `TT' 0 `' +! Check and correct manually + 616 `HTMLURL' 0 `' + 619 `HTMLURL' 0 `' + 622 `HTMLURL' 0 `' + 622 `HTMLURL' 0 `' + 643 `HTMLURL' 0 `' + 659 `TT' 0 `' +! Check and correct manually + 659 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 659 `TT' 0 `' +! Check and correct manually + 659 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 668 `TT' 0 `' +! Check and correct manually + 668 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 675 `TT' 0 `' +! Check and correct manually + 680 `TT' 0 `' +! Check and correct manually + 680 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 680 `TT' 0 `' +! Check and correct manually + 680 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 686 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 686 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 689 `VERB' 0 `' +! Because it contains a newline character + 701 `HTMLURL' 0 `' + 716 `TT' 0 `' +! Check and correct manually + 716 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 716 `TT' 0 `' +! Check and correct manually + 716 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 724 `TT' 0 `' +! Check and correct manually + 724 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 724 `TT' 0 `' +! Check and correct manually + 724 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 724 `TT' 0 `' +! Check and correct manually + 724 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 724 `TT' 0 `' +! Check and correct manually + 724 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 731 `TT' 0 `' +! Check and correct manually + 731 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 731 `TT' 0 `' +! Check and correct manually + 731 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 731 `TT' 0 `' +! Check and correct manually + 731 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 731 `TT' 0 `' +! Check and correct manually + 731 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 731 `TT' 0 `' +! Check and correct manually + 731 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 731 `TT' 0 `' +! Check and correct manually + 731 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 731 `TT' 0 `' +! Check and correct manually + 731 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 731 `TT' 0 `' +! Check and correct manually + 731 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 731 `TT' 0 `' +! Check and correct manually + 731 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 731 `TT' 0 `' +! Check and correct manually + 731 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 741 `TT' 0 `' +! Check and correct manually + 741 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 756 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 759 `VERB' 0 `' +! Because it contains a newline character + 767 `VERB' 0 `' +! Because it contains a newline character + 776 `VERB' 0 `' +! Because it contains a newline character + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 806 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 806 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 806 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 806 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 809 `VERB' 0 `' +! Because it contains a newline character + 821 `TT' 0 `' +! Check and correct manually + 821 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 821 `TT' 0 `' +! Check and correct manually + 821 `TT' 0 `' +! Check and correct manually + 821 `TT' 0 `' +! Check and correct manually + 832 `TT' 0 `' +! Check and correct manually + 832 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 832 `TT' 0 `' +! Check and correct manually + 832 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 832 `TT' 0 `' +! Check and correct manually + 832 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 832 `TT' 0 `' +! Check and correct manually + 832 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 832 `TT' 0 `' +! Check and correct manually + 832 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 832 `TT' 0 `' +! Check and correct manually + 832 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 832 `TT' 0 `' +! Check and correct manually + 832 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 832 `TT' 0 `' +! Check and correct manually + 832 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 832 `TT' 0 `' +! Check and correct manually + 832 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 832 `TT' 0 `' +! Check and correct manually + 832 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 848 `TT' 0 `' +! Check and correct manually + 848 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 858 `TT' 0 `' +! Check and correct manually + 858 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 867 `TT' 0 `' +! Check and correct manually + 867 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 867 `TT' 0 `' +! Check and correct manually + 869 `TT' 0 `' +! Check and correct manually + 869 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 871 `TT' 0 `' +! Check and correct manually + 874 `TT' 0 `' +! Check and correct manually + 874 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 874 `TT' 0 `' +! Check and correct manually + 874 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 882 `VERB' 0 `' +! Because it contains a newline character + 919 `TT' 0 `' +! Check and correct manually + 919 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 919 `TT' 0 `' +! Check and correct manually + 919 `TT' 0 `' +! Check and correct manually + 919 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 935 `TT' 0 `' +! Check and correct manually + 935 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 935 `TT' 0 `' +! Check and correct manually + 935 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 935 `TT' 0 `' +! Check and correct manually + 935 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 948 `TT' 0 `' +! Check and correct manually + 948 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 967 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 967 `TT' 0 `' +! Check and correct manually + 967 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 967 `TT' 0 `' +! Check and correct manually + 967 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 979 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 979 `TT' 0 `' +! Check and correct manually + 979 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 994 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 994 `TT' 0 `' +! Check and correct manually + 994 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1005 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1015 `' 0 `' +! check if reference ID KOMOP was meant for a section (if not, eg for an anchor, change manually) +1017 `TT' 0 `' +! Check and correct manually +1017 `TT' 0 `' +! Check and correct manually +1093 `TT' 0 `' +! Check and correct manually +1140 `TSCREEN' 0 `' +1151 `CODE' 0 `' +! Because it is in TSCREEN +1155 `TSCREEN' 0 `' +1181 `CODE' 0 `' +! Because it is in TSCREEN +1212 `TSCREEN' 0 `' +1221 `CODE' 0 `' +! Because it is in TSCREEN +1223 `TT' 0 `' +! Check and correct manually +1223 `TT' 0 `' +! Check and correct manually +1253 `TSCREEN' 0 `' +1258 `CODE' 0 `' +! Because it is in TSCREEN +1300 `TT' 0 `' +! Check and correct manually +1444 `HTMLURL' 0 `' +1517 `HTMLURL' 0 `' +1517 `HTMLURL' 0 `' + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1524 `' 0 `' +! check if reference ID KOMHOWTO was meant for a section (if not, eg for an anchor, change manually) +1527 `HTMLURL' 0 `' +1558 `HTMLURL' 0 `' +1558 `HTMLURL' 0 `' +1568 `TT' 0 `' +! Check and correct manually +1568 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1588 `TT' 0 `' +! Check and correct manually +1588 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1588 `TT' 0 `' +! Check and correct manually +1588 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1593 `TT' 0 `' +! Check and correct manually +1593 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1612 `VERB' 0 `' +! Because it contains a newline character +1626 `VERB' 0 `' +! Because it contains a newline character +1633 `VERB' 0 `' +! Because it contains a newline character +1635 `TT' 0 `' +! Check and correct manually +1635 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1650 `VERB' 0 `' +! Because it contains a newline character +1666 `TT' 0 `' +! Check and correct manually +1666 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1667 `TT' 0 `' +! Check and correct manually +1667 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1668 `TT' 0 `' +! Check and correct manually +1668 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1671 `TT' 0 `' +! Check and correct manually +1671 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1671 `TT' 0 `' +! Check and correct manually +1671 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1671 `TT' 0 `' +! Check and correct manually +1671 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1671 `BF' 0 `' +! Check and correct manually +1671 `BF' 0 `' +! Check and correct manually +1679 `TT' 0 `' +! Check and correct manually +1679 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1691 `TT' 0 `' +! Check and correct manually +1691 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1697 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1705 `TT' 0 `' +! Check and correct manually +1705 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1705 `VERB' 0 `' +! Check and correct manually +1716 `TT' 0 `' +! Check and correct manually +1716 `TT' 0 `' +! Check and correct manually +1722 `TT' 0 `' +! Check and correct manually +1722 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1722 `TT' 0 `' +! Check and correct manually +1722 `VERB' 0 `' +! Check and correct manually +1722 `VERB' 0 `' +! Check and correct manually +1731 `TT' 0 `' +! Check and correct manually +1731 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1731 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1733 `TT' 0 `' +! Check and correct manually +1733 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1733 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1735 `TT' 0 `' +! Check and correct manually +1735 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1735 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1737 `TT' 0 `' +! Check and correct manually +1737 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1737 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1739 `TT' 0 `' +! Check and correct manually +1739 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1739 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1741 `TT' 0 `' +! Check and correct manually +1741 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1741 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1817 `VERB' 0 `' +! Because it contains a newline character +1819 `TT' 0 `' +! Check and correct manually +1819 `TT' 0 `' +! Check and correct manually +1819 `TT' 0 `' +! Check and correct manually +1819 `TT' 0 `' +! Check and correct manually +1819 `TT' 0 `' +! Check and correct manually +1824 `TT' 0 `' +! Check and correct manually +1825 `TT' 0 `' +! Check and correct manually +1826 `TT' 0 `' +! Check and correct manually +1827 `TT' 0 `' +! Check and correct manually +1828 `TT' 0 `' +! Check and correct manually +1829 `TT' 0 `' +! Check and correct manually +1830 `TT' 0 `' +! Check and correct manually +1841 `TT' 0 `' +! Check and correct manually +1841 `TT' 0 `' +! Check and correct manually +1852 `TT' 0 `' +! Check and correct manually +1852 `TT' 0 `' +! Check and correct manually +1865 `TT' 0 `' +! Check and correct manually +1876 `BF' 0 `' +! Check and correct manually +1876 `BF' 0 `' +! Check and correct manually +1890 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1910 `TT' 0 `' +! Check and correct manually +1910 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1910 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1922 `VERB' 0 `' +! Because it contains a newline character +1934 `VERB' 0 `' +! Because it contains a newline character +1936 `TT' 0 `' +! Check and correct manually +1936 `TT' 0 `' +! Check and correct manually +1936 `TT' 0 `' +! Check and correct manually +1954 `TT' 0 `' +! Check and correct manually +1954 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2013 `TT' 0 `' +! Check and correct manually +2013 `TT' 0 `' +! Check and correct manually +2013 `TT' 0 `' +! Check and correct manually +2013 `TT' 0 `' +! Check and correct manually +2013 `TT' 0 `' +! Check and correct manually +2013 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2013 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2059 `TT' 0 `' +! Check and correct manually +2059 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2059 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2059 `TT' 0 `' +! Check and correct manually +2059 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2059 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2068 `TT' 0 `' +! Check and correct manually +2068 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2068 `TT' 0 `' +! Check and correct manually +2068 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2068 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2068 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2078 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2078 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2081 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2084 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2084 `TT' 0 `' +! Check and correct manually +2090 `TT' 0 `' +! Check and correct manually +2090 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2114 `TT' 0 `' +! Check and correct manually +2114 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2114 `TT' 0 `' +! Check and correct manually +2114 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2114 `TT' 0 `' +! Check and correct manually +2114 `TT' 0 `' +! Check and correct manually +2114 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2114 `TT' 0 `' +! Check and correct manually +2114 `TT' 0 `' +! Check and correct manually +2125 `TT' 0 `' +! Check and correct manually +2125 `TT' 0 `' +! Check and correct manually +2125 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2125 `TT' 0 `' +! Check and correct manually +2125 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2125 `TT' 0 `' +! Check and correct manually +2125 `TT' 0 `' +! Check and correct manually +2138 `TT' 0 `' +! Check and correct manually +2138 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2164 `VERB' 0 `' +! Because it contains a newline character +2166 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2166 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2177 `TT' 0 `' +! Check and correct manually +2178 `TT' 0 `' +! Check and correct manually +2182 `TT' 0 `' +! Check and correct manually +2183 `TT' 0 `' +! Check and correct manually +2186 `TT' 0 `' +! Check and correct manually +2186 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2191 `TT' 0 `' +! Check and correct manually +2195 `TT' 0 `' +! Check and correct manually +2195 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2201 `TT' 0 `' +! Check and correct manually +2201 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2201 `TT' 0 `' +! Check and correct manually +2201 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2233 `VERB' 0 `' +! Because it contains a newline character +2243 `TT' 0 `' +! Check and correct manually +2243 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2243 `TT' 0 `' +! Check and correct manually +2243 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2243 `TT' 0 `' +! Check and correct manually +2243 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2243 `TT' 0 `' +! Check and correct manually +2243 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2243 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2254 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2257 `TT' 0 `' +! Check and correct manually +2257 `TT' 0 `' +! Check and correct manually +2257 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2257 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2257 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2257 `TT' 0 `' +! Check and correct manually +2269 `VERB' 0 `' +! Because it contains a newline character +2271 `TT' 0 `' +! Check and correct manually +2271 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2271 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2276 `TT' 0 `' +! Check and correct manually +2276 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2276 `TT' 0 `' +! Check and correct manually +2276 `TT' 0 `' +! Check and correct manually +2282 `TT' 0 `' +! Check and correct manually +2289 `TT' 0 `' +! Check and correct manually +2299 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2299 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2304 `TT' 0 `' +! Check and correct manually +2304 `TT' 0 `' +! Check and correct manually +2304 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2304 `TT' 0 `' +! Check and correct manually +2304 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2311 `TT' 0 `' +! Check and correct manually +2311 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2328 `TT' 0 `' +! Check and correct manually +2333 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2333 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2336 `TT' 0 `' +! Check and correct manually +2336 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2343 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2343 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2346 `TT' 0 `' +! Check and correct manually +2346 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2352 `VERB' 0 `' +! Because it contains a newline character +2374 `TT' 0 `' +! Check and correct manually +2374 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2374 `TT' 0 `' +! Check and correct manually +2374 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2377 `TT' 0 `' +! Check and correct manually +2386 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2386 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2386 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2395 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2398 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2398 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2404 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2404 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2404 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2404 `TT' 0 `' +! Check and correct manually +2404 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2404 `TT' 0 `' +! Check and correct manually +2404 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2415 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2430 `VERB' 0 `' +! Because it contains a newline character +2442 `VERB' 0 `' +! Because it contains a newline character +2444 `TT' 0 `' +! Check and correct manually +2444 `TT' 0 `' +! Check and correct manually +2444 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2453 `VERB' 0 `' +! Because it contains a newline character +2465 `' 0 `' +! check if reference ID KDEDAEMON was meant for a section (if not, eg for an anchor, change manually) +2467 `HTMLURL' 0 `' +2472 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2481 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2485 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2487 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2489 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2496 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2500 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2503 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2503 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2513 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2518 `VERB' 0 `' +! Check and correct manually +2518 `BF' 0 `' +! Check and correct manually +2518 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2528 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2528 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2528 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2528 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2528 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2537 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2537 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2537 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2537 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2540 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2540 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2540 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2542 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2542 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2542 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2554 `BF' 0 `' +! Check and correct manually +2563 `TT' 0 `' +! Check and correct manually +2563 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2563 `BF' 0 `' +! Check and correct manually +2563 `TT' 0 `' +! Check and correct manually +2570 `VERB' 0 `' +! Check and correct manually +2570 `TT' 0 `' +! Check and correct manually +2576 `TT' 0 `' +! Check and correct manually +2576 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2576 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2581 `TT' 0 `' +! Check and correct manually +2581 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2581 `TT' 0 `' +! Check and correct manually +2581 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2587 `TT' 0 `' +! Check and correct manually +2587 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2587 `TT' 0 `' +! Check and correct manually +2587 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2602 `TT' 0 `' +! Check and correct manually +2602 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2602 `TT' 0 `' +! Check and correct manually +2602 `TT' 0 `' +! Check and correct manually +2602 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2611 `TT' 0 `' +! Check and correct manually +2611 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2611 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2611 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2611 `TT' 0 `' +! Check and correct manually +2611 `TT' 0 `' +! Check and correct manually +2611 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2611 `TT' 0 `' +! Check and correct manually +2611 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2628 `TT' 0 `' +! Check and correct manually +2628 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2628 `BF' 0 `' +! Check and correct manually +2631 `TT' 0 `' +! Check and correct manually +2631 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2652 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2681 `VERB' 0 `' +! Because it contains a newline character +2684 `TT' 0 `' +! Check and correct manually +2684 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2691 `TT' 0 `' +! Check and correct manually +2691 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2694 `TT' 0 `' +! Check and correct manually +2694 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2694 `TT' 0 `' +! Check and correct manually +2694 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2694 `TT' 0 `' +! Check and correct manually +2694 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2702 `TT' 0 `' +! Check and correct manually +2702 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2702 `TT' 0 `' +! Check and correct manually +2702 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2716 `VERB' 0 `' +! Because it contains a newline character + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2716 `BF' 0 `' +! Check and correct manually +2716 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2762 `TT' 0 `' +! Check and correct manually +2789 `VERB' 0 `' +! Because it contains a newline character +2800 `VERB' 0 `' +! Because it contains a newline character +2806 `TT' 0 `' +! Check and correct manually +2809 `BF' 0 `' +! Check and correct manually +2809 `BF' 0 `' +! Check and correct manually +2828 `TT' 0 `' +! Check and correct manually +2828 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2849 `VERB' 0 `' +! Because it contains a newline character +2867 `VERB' 0 `' +! Because it contains a newline character +2870 `' 0 `' +! check if reference ID DCOP was meant for a section (if not, eg for an anchor, change manually) +2872 `HTMLURL' 0 `' +2963 `CODE' 0 `' +! Because it contains a newline character +2976 `CODE' 0 `' +! Because it contains a newline character +3026 `CODE' 0 `' +! Because it contains a newline character +3052 `CODE' 0 `' +! Because it contains a newline character +3090 `CODE' 0 `' +! Because it contains a newline character +3094 `HTMLURL' 0 `' +3114 `CODE' 0 `' +! Because it contains a newline character +3119 `TSCREEN' 0 `' +3128 `VERB' 0 `' +! Because it is in TSCREEN +3133 `TSCREEN' 0 `' +3141 `VERB' 0 `' +! Because it is in TSCREEN +3167 `Copyright' 0 `Copyright-0' +! Reference changed: check if still unique +3167 `' 0 `' +! check if reference ID Copyright-0 was meant for a section (if not, eg for an anchor, change manually) +3169 `TSCREEN' 0 `' +3186 `VERB' 0 `' +! Because it is in TSCREEN +3196 `REF' 0 `' +3196 `HTMLURL' 0 `' +3199 `REF' 0 `' +3199 `HTMLURL' 0 `' + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +3199 `HTMLURL' 0 `' +3203 `REF' 0 `' +3203 `REF' 0 `' +3203 `HTMLURL' 0 `' +3207 `REF' 0 `' +3207 `HTMLURL' 0 `' +=== NIF conversion errors ======================== +=== Finalising errors =========================== diff -Nru kdevelop-3.9.98/doc/addendum/index.docbook kdevelop-4.0.1/doc/addendum/index.docbook --- kdevelop-3.9.98/doc/addendum/index.docbook 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/addendum/index.docbook 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,3637 @@ +kdevelop"> + + ]]> +]> + + + +The KDE 2 Developer's Guide +The KDE 2 information guide to development, I/O slaves and KOM/OpenParts + + +Ralf +Nolden + + +Kurt +Granroth + + +Simon +Hausmann + + +David +Sweet + + +Preston +Brown + + +Torben +Weis + + +Bern +Wuebben + + +21/03/2000 +1.02.00 + +This Handbook is a collection of various documentation about KDE 2 development. Each chapter remains the copyright of the original +author mentioned at the beginnig of the chapters and in section Copyright. + + +KDE +KDevelop +I/O slaves +KOM +OpenParts + + + + +Preface + +This handbook has been assembled to provide KDE developers the information they will need when porting their applications to KDE 2, +currently under development. KDE 2 is based on the Qt 2.x and KDE 1.1.x libraries, whereby the KDE libraries are ported to work with +the current Qt library. Further, the KDE libraries will introduce a component technology based on the MICO CORBA implementation which +is developed and tested with the KOffice suite. + +As KDE application developers not involved in implementing for the KDE core team will probably want to port their applications, they +will not only have to watch out for the changes in Qt, but also for KDE's improvements and additions. As KDE 1.x applications will not +only be binary incompatible but also sourcecode incompatible, we want to provide enough information that can be used by developers that +are using the currently stable KDE 1.x implementation for applications that are suitable for production use, so transitioning will be +made less complicated and further implementations in current projects can be reviewed for possible problems that will arise when +porting. + +Also the usual KDE developer does not have too much information about CORBA, not to speak of KOM. Therefore, this handbook tries to +give an insight where to get information and how the current implementation works in general. This will enable you to find out where +your applications can probably take advantage of distributed component technology where needed. In conjunction with the latest +development, this version of the KDE 2 Developer's Guide also contains a short HOWTO for the new DCOP (Desktop COmmunications +Protocol), which was created due to performance problems of local desktop applications using CORBA. Therefore, a few things mentioned +and explained in the documents relying on CORBA technology can be out of date and reading yourself into the dcop library reference and +reviewing current KDE CVS sourcecode will give you probably more up-to-date information on IPC (Inter-Process-Communication) between +local desktop applications using DCOP. + +I want to thank all authors that were willing to contribute their current documentation to this handbook and hope this collection will +be of good use to those who want to stay on the bleeding edge of KDE development. + +Ralf Nolden + + + +The KDE Developer's mini-HOWTO + +David Sweet &<;dsweet@chaos.umd.edu&>; + +March, 11, 2000 + +To help develop KDE or a KDE application you need to know +how to (i) find KDE information and code, (ii) use CVS, and (iii) +compile. This document aims to help to you do these things without +losing too much hair. This HOWTO is geared toward new developers, occasional +developers, and anyone considering contributing the the most excellent +free software project that is KDE. It addresses questions that I and +others have been asking on the kde-devel mailing list recently +along with some more general information. +You can find a current version of this document at the +KDE Developer's HOWTO homepage. +To contribute, comment, or correct, please email me at +dsweet@chaos.umd.edu + + +Information and Source Code + + +General Information + +The K Desktop Environment is an open source Unix desktop created by volunteers from around the world. There are many ways to +contribute to the project. You can write new code, improve old code, write documentation, translate to other languages, create +artwork, sounds, & music, report bugs, and suggest new features. If you would like to develop code, read on. If you would like to +contribute in another way, please visit the KDE web site (\|\| name="http://www.kde.org">) for more information. + +KDE uses the Qt toolkit which is developed by Troll Tech (http://www.troll.no). The main +components of the desktop are a file manager (kfm), window manager (kwm), and panel (kpanel). There are many more utilities and +applications which are included in the base distribution and available elsewhere. The primary programming language used for development +is C++, although bindings are available for Python (pyKDE). The KDE code consists of libraries containing classes for, for example: +(libkdecore) an application base (KApplication), accessing configuration files (KConfig), launching external processs (KProcess); +(libkdeui) widgets (KEdit, KFontDialog, KToolBar, etc.); and other utility classes like KFileDialog (a file dialog) and KSpell (a +spellchecker). + +Various desktop, configuration, and system administration utilities are also included in the distribution. These are +some of the things KDE developers work on. A more recent creation is KOffice, a productivity suite which includes a word processor, +spreadsheet, and presentation tool The currently released version of KDE is 1.1.2. + +KDE 2.0, which is, perhaps, the main focus of development right now, will include rewrites or major updates of kfm, khtmlw (an HTML +widget), kpanel, kmail, and maybe kwm, unicode support, Inter-Process-Communication protocols and much more. + + + +URLs + + +The main KDE web site is at: http://www.kde.org. + + +The developer's library is at: http://developer.kde.org. + + + Bug reports can be found at (and sent to): http://bugs.kde.org. + + + Troll Tech (makers of the Qt toolkit) main site: http://www.troll.no. + + + KDE Source Code and binaries: ftp://ftp.kde.org (or mirrors) + + + Qt Source Code and binaries: ftp://ftp.troll.no + + + + + +Mailing lists + +The list kde-devel is for KDE developers in general. The kde-koffice mailing list is for developers interested in koffice, +and kfm-devel is for kfm (the file manager) developers. + +Send a message to either kde-devel-request or koffice-request with the message "subscribe myid@myserver" (where myid@myserver +stands for your email address). Go to the KDE mail page a click on "Mailing Lists" for more information about other KDE mailing lists +and the mailing list archive. + +Toll Tech provides a list for users of the Qt 2.1 snapshots (discussed below). You may subscribe to this by sending an email to +snapshot-users-request@troll.no with the message "subscribe". + +As a KDE developer you may want or need a kde email address, like joedeveloper@kde.org. To obtain one, send an email with a polite +request to Martin Konold at konold@kde.org. + +To gain access to the KDE CVS respository (discussed below), you firsly need to have a good reason for wanting access. For example, +you may be maintaining a CVS module. If you think you have a good reason, send a polite email request to Stephan Kulow +&<;coolo@kde.org&>;. + +You'll also need to send him an encrypted password to get the account set up. To create your encrpyted password, type: + perl -e print\ crypt\('passwd','sa'\)\.\"\\n\" + + +where passwd is your choice of password and sa is two random +characters from the set (a-zA-Z0-9./). The output is your encrypted +password. + + + + +KDE CVS + + +Introduction + +The KDE CVS (Concurrent Versions System) is the source code repository for the KDE project. You can access it via (i) WWW: +http://www., (ii) cvs utility, (iii) cvsup utility, or (iv) snapshots. You will need CVS access only for (ii); (i), (iii), and (iv) are +read-only methods and available to the public. + +The web page for method (i) explains its usage. I haven't an explanation for method (iii), cvsup, yet. Please see +http://www.kde.org/cvsup.html &{; -- Perhaps someone who uses it will contribute a short explanation of usage and information +on obtaining it. -- &}; + +The snapshots, (iv), are .tar.bz2 files which contain a section of KDE code (called "modules"; ex, kdelibs, kdeutils) as it looked on +some specified day (specified in the filename: ex, kdelibs990517.tar.bz2). The snapshots are posted daily +in ftp://ftp.kde.org/pub/kde/unstable/CVS/snapshots. &{; (ii) is described below. &}; + +The repository (or, just "CVS") stores all of the changes made to the source code by all of the contributors so that changes may be +undone. Each time a user makes a change (s)he includes a comment so that the devlopment of code can be more easily followed. These +comments are sent to the kde-cvs mailing list. The CVS splits into &_;branches&_; which may contain different versions of the KDE project. +For example, the two branches being developed now are KDE&_;1&_;1&_;BRANCH and HEAD. They both are derived from the same code (i.e., if you +"undid" enough of the changes made to either branch you'd reveal identical source code) but used for different purposes. Here are some +branches and descriptions for your reference: + + + + KDE&_;1&_;1&_;2&_;RELEASE - code that was considered stable, released, +and distributed as KDE 1.1.2 + + + + HEAD - code which will become KDE 2.0. It is based on Qt 2.1, has a new kwm, kpanel, etc. LOTS of changes. + + + + + + +Using <literal remap="tt">cvs</literal> + +The cvs utility is probably on your system. If not, you should visit http://www.cyclic.com/cyclic-pages/howget.html To learn to use it I would recommend reading the man page! But, I've included +explanations of some common functions below. + +Let's assume for this section that your username is joedeveloper. As written below you should enter all of these commands from +some base directory. (KDE/CVS is not a bad choice!) + +Set the environment variable CVSROOT to + +:pserver:joedeveloper@cvs.kde.org:/home/kde. + +Listing CVS modules You can't do this directly unfortunately. You can, however, view the contents of the file /home/kde/modules +with +cvs -z6 co -c + + + +The -z6 option tells the server to compress the code at "level 6" before sending it to you. This may speed things up for you. +(In this case, since the module listing is small, it may not matter.) + +Checking out a module, e.g. kdelibs from HEAD +cvs -z6 checkout -r HEAD kdelibs +cvs -z6 checkout kdelibs + + + +The -r options tells cvs which branch you want to checkout from. The +default is the HEAD branch. + +Checking out a module, ex. kdelibs, from KDE&_;1&_;1&_;2&_;RELEASE +cvs -z6 checkout -r KDE_1_1_2_RELEASE kdelibs + + + +Note: you could use co as an abbreviation for checkout. + +Checking out an application from within a module (ex kjots, which +is in the kdeutils module) from the HEAD branch +(1) cvs -z6 co -l kdeutils +(2) cvs -z6 co -l admin +(3) cvs -z6 co -l kdeutils/kjots +(4) cd kdeutils; ln -s ../admin + + + +The -l in line (1) tells cvs not to recurse the subdirectories of kdeutils. This means will get the configure script and its +companions (discussed below), but none of the application source code. + +Line (2) gets the admin directory which contains support files for autoconf and friends. (This directory is retrieved automatically +when checking out an entire module.) + +Line (3) gets the kjots source. + +Line (4) makes a link to the admin directory. (This is better than copying or moving the directory here. If you leave admin where cvs +put if then you can easily update the admin directory with cvs. You could also make links to admin from any other modules you check +out this way and thus have only one, up-to-date copy of admin.) + +Updating source code you've previously checked out (ex. kdeutils/kjots) + cvs -z6 update -P -d kdeutils/kjots + + + +The source code for kjots on your hard drive will be updated to match the code in the CVS. You don't need to specify the branch here. +The correct branch is stored in kdeutils/kjots/CVS/Tag. + +Commiting changes (putting them into CVS) (ex. kdeutils/kjots) +cvs -z6 commit kdeutils/jots + + + +You'll be prompted to edit a comment. Enter a short one which desribes the changes you're making with this commmit. (You can use +your editor of choice by setting the EDITOR or CVSEDITOR environment variable.) + +Adding a file (ex. kdeutils/kmyapp/greatnewcode.cpp) +(create the file first!) +cd kdeutils/kmyapp +cvs add greatnewcode.cpp +cvs commit + + + +Deleting a file (ex. kdeutils/kmyapp/badoldcode.cpp) +cd kdeutils/kmyapp +rm badoldcode.cpp +cvs remove badoldcode.cpp +cvs commit + + + +Adding a directory (a module, like a new app) (ex. kdeutils/kmyapp, with the source file kmysource.cpp) +cd kdeutils +mkdir kmyapp +(create the kmyapp/kmysource.cpp file) +cvs add kmyapp +cvs add kmyapp/kmysource.cpp +cvs commit (actually puts the directory and file in the CVS) + + + +Note: You need to have files in a directory to commit it. +Removing a directory (a module, like a new app) (ex. kdeutils/kmyapp) +cd kdeutils/kmyapp +(delete all files, as described above in "Deleting a file") +cd .. +cvs -P update (will remove the local kmyapp automatically) + + + + + + +Compiling and Safe Development Practices (with configure) + +Before you start downloading and compiling the latest sources you should be aware that there's a good chance they won't work! They are +in a state of constant development so they could very well have bugs. + +Knowing this, you should find a way to compile and run new KDE stuff without interfering with your existing stable KDE setup. Here's +one way, using the HEAD branch as an example. We, again, assume your login is joedeveloper. We also assume that your home directory +is in /home/joedeveloper. (This would be the case for Red Hat systems.) + + +Organizing + +Make a directory called KDE in the home directory of your *user* account. You should not be doing any of this as root! Make another +called KDE/CVS-HEAD. cd into that directory and get the KDE sources from the HEAD branch that you want. The (minumum) modules needed +to use an application are: kdesupport, kdelibs. You should compile and install them in that order (see below for compiling). Others +you might want are: kdebase, kdeutils, kdegraphics, etc. Now, make a directory called KDE/kde-HEAD. This is where you'll store the +compiled code from the HEAD branch -- as well as Qt 2.1! + + + +Compiling Qt 2.1 + +Let's get Qt 2.1. Take the KDE copy of the current Qt library from the KDE CVS with + +cvs -z6 co qt-copy +cd qt-copy +setenv QTDIR $PWD (if you use csh/tcsh) +OR +export QTDIR=`pwd` (if you use bash) +make -f Makefile.cvs (creates symlinks -without that, qt will not compile !) +./configure (-gif optionally) +make + + + + + +Compiling KDE (HEAD) + +Now, for the KDE code. cd to KDE/CVS-HEAD/kdesupport. Type + +make -f Makefile.cvs +./configure --prefix=/home/joedeveloper/KDE/kde-HEAD +--with-qt-dir=/home/joedeveloper/KDE/kde-HEAD/qt-copy +--with-qt-libs=/home/joedeveloper/KDE/kde-HEAD/qt-copy/lib +make + +If all goes well, then + +make install + +If not, try to fix things, then type + +make install + +Repeat this process for the other modules. You should alter the +./configure line to read + ./configure --prefix=/home/joedeveloper/KDE/kde-HEAD + --with-qt-dir=/home/joedeveloper/KDE/kde-HEAD/qt-copy + --with-qt-libs=/home/joedeveloper/KDE/kde-HEAD/qt-copy/lib + + + + + +Compiling tips + + + + I usually put that long configure command into a file called conf and leave it in my CVS-HEAD directory. Then I can do a +../conf from any module and get a good configure. + + + It seems that you need to compile and install qimageio (part of Qt) separately. Just +cd to /$QTDIR/extensions/imageio/src and type make install + + + + + + + +Documentation + +It's important to document your application so that end-users can make the most of it. You should be clear and concise. Describe any +non-standard installation, usage and UI features. There's no need to talk about how to use the File menu, for example, unless +you've put some special entry on it. Include contact and bug-reporting information as well as a hyperlink to the application's home +page. Writing documentation for KDE 2 should be done in docbook-sgml. Look at http://developer.kde.org for more details how to get the needed packages for installing the docbook tools. KDE extends these +tools by the module kdesdk/ksgmltools. This module also contains information where to get the docbook tools, additional documentation +as well as how to use docbook and KDE. + +You should also document your widgets and other classes. You can include comments in your header ( .h) files which describe +each public or protected method. It you do this as you write the methods it will make the documentation proceSss seem +easier. (It may also help you be certain about what function(s) that method is to perform.) The script kdoc will turn your header +files into beautiful class documentation. You can see examples of kdoc output if you look at http://www.ph.unimelb.edu.au/~ssk/kde/srcdoc/kdecore/index-long.html. This is the annotated list of the core KDE classes. + +You can find ksgmltools in the KDE SDK which is available in the kdesdk module of CVS, kdoc in the kdoc module. (Methods for +getting things from CVS are described above.) + + +KDOC: The KDE Class Documentation Tool for C++ + +It's called kdoc and is in the kdedoc subdirectory of the CVS +module kdesdk. + +If you mark up your header files like this: + /** + * Short description of this class + * + * This is a longer description of my class. It does the following + * @li Some bulleted thing + * @li Some other bulleted thing + * You should use it when ... It's not appropriate for ... + * + * @author My Name <myemail@wherever.edu> + * @version 0.0.1 + **/ + +class KMyClass +{ + . + /** + * Describe method. It takes &<;i&>;argument&<;/i&>; to mean ... + * + * @return A pointer to another class + * @see KOtherClass + **/ + KOtherClass *method (int argument); +} + + + +The text in the comments beginning with /** (two asterisks, +mind you!) will be taken by kdoc as class documentation and +formatted appropriately. You can use some HTML tags (like the +&<;i&>; above). The @author and other tags are meaningful +to kdoc and used for formatting. + +To run kdoc, use the following command + kdoc -dhtml -L$KDEDIR/share/kdoc -a Title header1.h header2.h ... + + + +This instructs kdoc to generate HTML output (the default) in the +html directory (by the -d option) from the specified header +files. It uses Title as the title for the documentation. ( -a +says to do work on all header files, even if they don't "ask for it". I +haven't told you how to "ask for it." The -L tells kdoc where +its libraries are.) Type kdoc -h for more information. + + + + +Packaging and Submitting Code to KDE + + +Packaging + +'Packing' means putting your (in this case source) code into some +format that is + + + easy for others to configure and install, and + + + easy to transfer, + + + can be indexed so that it is easy to find. + + + + +These three concepts are expanded upon in the next three subsections. + + +GNU Configure + +The standard KDE application (or other code) source code package includes the GNU configure script which determines some +information about the user's system and provides it to your source code as &#;define statements in a header file called +config.h. + +To get started with this, get the kdesdk from CVS using a method described above. Then prepare kexample, an example package, for your +application + + cd kdesdk + cd kexample + make -f Makefile.cvs + cd ..; cp -r kexample ~/KDE/kmyapp-0.0.1 + + + +(That last directory is just an example. Replace kmyapp with your application's (or widget's) name, and replace 0.0.1 with its version +number.) + +Now, we'll put your source code into the example package. Let's say your source code was in the directory & ;/KDE/KMyApp: + + cd ~/KDE/kmyapp-0.0.1 + mkdir kmyapp + cp ~/KDE/KMyApp/*.cpp kmyapp + cp ~/KDE/KMyApp/*.h kmyapp + (There may be other files to copy, but leave your old Makefile behind!) + + +Now, edit kmyapp-0.0.1/Makefile.am and change the line + SUBDIRS = kexample + + +to + SUBDIRS = kmyapp + + + +Note: kmyapp here refers to the subdirectory by that name. You could include more subdirectories to be compiled. For example: + SUBDIRS = kmyapp kmysupportclass + + + +Also edit the last line of configure.in to read + +AC_OUTPUT(Makefile \ + kmyapp/Makefile \ + po/Makefile) + + + +The po directory contains translations of strings that you used in your code (this is about i18n(), which is not covered in this +HOWTO). We'll get to that it a minute. + +Now we want to set up the Makefile for the kmyapp subdirectory. Edit kmyapp/Makefile.am according to the instructions given +in the comments. They should be clear enough. + +Now cd &˜;/KDE/kmyapp and type + ./configure + + +This should create: + + + Makefile + + + kmyapp/Makfile + + + config.h + + + + +You can now include config.h in your source code with &#;include "../config.h" and have your code compile differently on +different systems based on the &#;defines. Eh? Well, different systems have slightly differnent ideas about implementing +standards and such, and your code my need take this into account to be portable, i.e. to work on various Unices. Take a look inside +config.h for descriptions of the &#;defines. + +Shared Libraries! If you are packaging a widget or other class you should be compiling a shared library. Luckily, this is +easy to do within the kexample packge. You only need to change the Makefile.am that resides in your code's sudirectory. Unluckily, +now example for a shared-library Makefile.am is included. So, I've included one in the next section. Note: If you distribute a +widget, you should also distribute a small program which tests the widget. Put that program in the same package in another +subdirectory and have it compile along with the widget. + +Next, make a compressed archive. You can do it this way + cd ~/KDE/kmyapp + make dist + OR + tar -cvf kmyapp-0.1.1.tgz kmyapp-0.1.1 + + +or however you like. Just be sure that the archive expands to one directory containing all of the files. This is neater and +easier for the user to deal with. + + + +Example Makfile.am for a Shared Library + +# Example Makefile.am for a shared library. It makes a library +# called "example" as libexample.so.2.1.2 +# This Makefile.am was taken from the kdelibs distribution and modified +# to serve as an example. +# +# David Sweet +# + +INCLUDES= $(all_includes) + +lib_LTLIBRARIES = libexample.la + +# Note: If you specify a:b:c as the version in the next line, +# the library that is made has version (a-c).c.b. In this +# example, the version is 2.1.2. +libexample_la_LDFLAGS = -version-info 3:2:1 $(all_libraries) + +include_HEADERS = header1.h header2.h\ + header3.h + +# Which headers shouldn't be installed when a make install is done? +noinst_HEADERS = version.h + +libexample_la_SOURCES = code1.cpp code2.cpp + code3.cpp + +# AUTO is great. This takes care of all of your moc'ing +# dependencies. +# (You still need to include, for example, header1.moc in code1.cpp.) +libexample_la_METASOURCES = AUTO + + + + + +LSM file + +Next, you need and LSM file. You can keep a copy in kmyapp-0.1.1 +for distribution. + +Here's a sample .lsm: + + +Begin3 +Title: KLab +Version: 0.1.0 +Entered-date: 3/1/99 +Description: GUI and more for RLab +Keywords: kde rlab math plot plotting +Author: David Sweet &<;dsweet@chaos.umd.edu&>; +Maintained-by: David Sweet &<;'dsweet@chaos.umd.edu&>; +Home-page: http://www.glue.umd.edu/~dsweet/KDE/KLab +Primary-site: ftp://ftp.kde.org/pub/kde/unstable/apps/scientific +Alternate-site: http://www.glue.umd.edu/~dsweet/KDE/KLab/ +Original-site: ftp://upload.kde.org/pub/kde/Incoming +Platform: unix +Copying-policy: GPL +End + + + + +You can copy and paste this text into a file called "kmyapp.lsm" and make the appropriate changes. + + + + +Submitting + +If you are hacking at CVS, you should follow the commit procedure outlined above. If you want to submit changes to code +that you are not maintaining, you should first check with the maintainer of the application. You can usually find his/her email +address in the directory containing the source. Also check the program's "About" box if it has one. If no maintainer is specifically +listed, you should contact the author. + +If you are developing outside of CVS, you can submit your code (widgets, applications, etc.) via FTP to +ftp://upload.kde.org/pub/kde/Incoming + +When you do this be sure to include an .lsm (Linux Software Map) file. This way your code can be automatically placed in the +appropriate spot on ftp.kde.org and its mirrors and an announcement can be automatically sent to the kde-announce mailing list. + +Note: The .lsm file should be uploaded separately from the source code (as a plain ASCII file). The source code should be +packaged as a .tar.gz (or .tgz) or .tar.bz2. This archive should expand to a single directory with all of your stuff in it. + + + + +Acknowledgements + +I'd like to thank the following people for their suggestions (in no particular order): Roberto Alsina, Waldo Bastian, Harri Porten, +Samuel Wuethrich, Richard Moore, Daniel Naber, Ralf Nolden, Martin Konold, and Pietro Iglio, Stephan Kulow, Junji Takagi. + + + +About this document + + +Finding + +The current version of this document is available at http://www.chaos.umd.edu/~dsweet/KDE/MiniHOWTO. + +A Japanese language version is available at http://www.asahi-net.or.jp/~hc3j-tkg/kde-jp/DevelMiniHOWTO-jp.txt thanks to Junji Takagi. + +This document is included in the KDE Developer's Web Site (http://developer.kde.org) +and is part of the KDevelop (http://www.kdevelop.org) programming manuals. + + + +Changes + + +Changes from version &<;July 1, 1999&>; to version &<;March, 11, 2000&>;: + + + + Added "About this document" section + + + Added more acknowledgements + + + Multiple formatting changes (thanks Ralf!) + + + Fixed instructions for getting CVS access + + + updated contents for current KDE 2 development state (March, 11, 2000) + + + + + + + + + +Using KDE I/O Slaves + +Kurt Granroth \|<\|granroth@kde.org\|>\| + +v0.1, 15, June 1999 + +This HOWTO describes how the KDE I/O slaves (ioslaves) work. It is +intended for both ioslave implementers as well as users. In this +document, I will attempt to describe both how ioslaves work as well +as how to use them. + + +Introduction + + +What Are I/O Slaves? + +The K Desktop Environment (KDE) I/O slaves (ioslaves) are a series of +small programs that have intimate knowledge on working with a very +specific protocol. For instance, the HTTP ioslave (kio&_;httpkio&_;http) +knows all about sending and receiving data to and from a web server web server. It +knows all about SSL SSL, encoding, and what all of the different header fields +mean. It knows this so that KDE developers won't have to -- if they want +a web page, they merely have to use kio&_;httpkio&_;http for it and it will +take care of everything for them. + +The ioslaves are based on the KIO library (libkiolibkio). This library +implements a method of asynchronous communication between +applications as well as provides a "protocol registry" of sorts. +This has many advantages. Two of the major ones are: + + + +The client does not need to know anything about the ioslave that +it is calling. It merely specifies the protocol and cdx/libkio/ will +automatically determine the proper ioslave to use. + + + +All communication is done asynchronously. All libkiolibkio calls will +return immediately. Whenever events occur, libkiolibkio will send +signals altering the client to that fact. This means that the +client does not have to engage in any "busy waiting." + + + + +Here is a fully working snippet of code to download a web page:KIOJobsigData() + + KIOJob *job = new KIOJob; + connect(job, SIGNAL(sigData(int, const char*, int)), + this, SIGNAL(slotData(int, const char*, int))); + job->get("http://www.kde.org/news_dyn.html"); + + + +That's it! When the ioslave is done getting the KDE news page, it +will call your application's slotData() function with the page. + + + +Copyright + +Copyright (c) 1999 Kurt Granroth, All rights reserved. This is free +documentware; you can redistribute it and/or modify it under the +terms of version 2 or later of the +GNU General Public License + + + + +Setting Up IOSlaves + + +Using the KDE ioslaves is very easy once the framework is in place. +This section will describe getting the "back-end" stuff setup. + + +The KIO Library + + +The first part that needs to be installed is the KDE IO library +(libkiolibkio). This library is part of the KDE 2.x kdelibskdelibs +package. It +will be installed by default on all KDE 2.x systems when 2.x is +finally released. In the meantime, you will need to get it through +either CVSUP or the snapshots. See www.kde.org (or a later appendix +when I get around to it later) for details on that. + +libkiolibkio depends on the KDE UI library (libkdeuilibkdeui), the KDE +Core library (libkdecorelibkdecore), and Qt (libqtlibqt). These are +the "standard" KDE libraries so there shouldn't be any problems, there. + + + +The IOSlaves + + +There are ioslaves for httphttp, filefile, gzipgzip, +tartar, filefile, smbsmb, pop3pop3, and +imap4imap4 as of the time of this writing. They are all found in the +kdebasekdebase package under kioslaveskioslaves. Again, these are +available only from the KDE development CVS so you'll need to use CVSUP or +the snapshots to retrieve them. + + + + +Using ioslaves in your Application + + +Now that you have the backend stuff all setup, you can start setting +up your application to use them. This requires adding the libkiolibkio +library to your linking and including the proper header files. + + +Modifying your Makefile + + +If you are using the standard KDE automake/autoconf system for your +application, then you are in luck! Adding another library is +trivial: + + + +Edit Makefile.am Makefile.am + + +Change the line &<;yourapp&>;&_;LDADD&_;LDADD to look something like: + + myapp_LDADD = $(LIB_KIO) + + + + + + +That's it! If you are not using the KDE setup, then just make sure +that you are including the following in your link stage: + + -lkio -lkdeui -lkdecore -lqt + + + + + +Adding the Proper Headers + + +This is also simple: + + #include <kio_job.h> + + + +Will take care of everything. + + + + +Using IOSlaves via KIOJob + + +Now that your application is all prepped for using ioslaves, you can +actually start using them! + +The only class you need to deal with at a client level is the KIOJob +class. You will use it to "call" the ioslaves and it will send you +signals when it received events from them. + +The basic procedure is something like this: + + + +Create a KIOJob KIOJob instance + + +Connect all of the signals (events) that you are interested in to +some local slots (callbacks). + + +Send the actual request + + +Process the resulting response in your slots. + + + + + +Typical Example + + +An example looks like so:sigData()sigError()sigDataEnd()sigFinished() + + KIOJob *job = new KIOJob; + connect(job, SIGNAL(sigData(int, const char*, int)), + this, SLOT(slotData(int, const char*, int))); + connect(job, SIGNAL(sigError(int, int, const char*)), + this, SLOT(slotError(int, int, const char*))); + connect(job, SIGNAL(sigDataEnd(int)), + this, SLOT(slotDataEnd(int))); + connect(job, SIGNAL(sigFinished(int)), + this, SLOT(slotFinished(int))); + job->get("http://www.pobox.com/~kurt_granroth/index.html"); + + + +This will get the web page at the above URL. When the ioslave is done +receiving the page, it will send it to you with your slotData()slotData() +function. If there was an error, then you receive it in +slotError(). If the page was large, then it will be sent in +chunks. You know that you are done receiving data when +slotDataEnd() is called. The slotFinished() function is +called when the ioslave is completely done. + + + + +KIOJob Calls + + +There are numerous operations that you can do with KIOJob. Some of them +are: putput, getget, mkdirmkdir, copycopy, +movemove, deldel, unmountunmount, and mountmount. I will +refer only to put()put() and get()get() in this HOWTO. The others +follow similar patterns. + + +get(const char* url) + + +This is probably the most common operation. It tells the ioslave to +"get" the resource described in the URL. This may be a web page, a +POP3 message, or a local file -- it all depends on your URL. + +This operation is not very interactive. You tell the ioslave what +you want and it gets it for you. Period. + +Specifically, it will send back your data with the sigData(int id, +char char* data, int length)sigData(int id, +char char* data, int length) signal. + +Parameters: + +const char *url - The URL of the resource that you wish to get + + + +put(const char* url, int mode, bool overwrite, bool resume, int size) + + +This operation will start the process of "putting" or sending data to +the location specified in the URL. This is used, for instance, to +send files to a remote FTP server or do do a PUT or POST request with +HTTP. It is not quite a straight-forward as a get()get() operation. + +The basic procedure looks like: + + + +Connect sigReady(int)sigReady(int) to a local slot (e.g., slotReady(int)) + + +Send a KIOJob::put(..)KIOJob::put(..) request + + +When slotReady(..) is called, you know that the ioslave is ready +to relay your data to its final destination. + + +Send all of your data using the KIOJob::data(const char*, int)KIOJob::data(const char*, int) +operation. When you are done, notify the ioslave of this by +sending a KIOJob::dataEnd()KIOJob::dataEnd() + + + + +Some sample code looks like so: + + KIOJob *job; + char *data = "My message"; + Client::Client() + { + job = new KIOJob; + connect(job, SIGNAL(sigReady(int)), this, SLOT(slotReady(int))); + connect(job, SIGNAL(sigData(int, const char*, int)), + this, SLOT(slotData(int, const char*, int))); + connect(job, SIGNAL(sigDataEnd(int)), + this, SLOT(slotDataEnd(int))); + job->put("http://server.com/cgi-bin/post.cgi", -1, true, false, strlen(data)); + } + + void Client::sigReady(int id) + { + job->data(data, strlen(data)); + job->dataEnd(); + } + + + +Parameters: + +const char* url - The end location for your data +int mode - Special permissions for your data. This should be set +to -1 if there are no special permissions +bool overwrite - Instructs the ioslave to overwrite anything that +may already be there. +bool resume - Instructs the ioslave to resume a previously aborted +transaction. +int size - This is the size of the data that you will be sending + +Beyond that, everything else is identical to the 'get' method. + + + +data(void *data, int size) + + +This is used to send data to an ioslave. It is used in conjunction with +the KIOJob::put(..)KIOJob::put(..) operation. It is almost always called from +your object's slotReady() slot as you must wait for the +sigReady(int)sigReady(int) signal before sending any data. If your data is +greater than 2048 bytes, then you must break it up into many chunks and +send each chunk individually. + +Parameters: + +void *data - Your data that needs to go to the ioslave. This should be no +more than 2048 bytes. +int size - The size of this data + + + +dataEnd() + + +This is used along with KIOJob::data(..)KIOJob::data(..) and +KIOJob::put(..)KIOJob::put(..). It signals the ioslave that you are done +sending it data. If you do not send this signal, then the ioslave will +essentially hang. You do not need to use this if you are using +KIOJob::get(..)KIOJob::get(..). + +Parameters: + +None + + + + +KIOJob Signals + + +All communication from the ioslaves come through KIOJob in the form of +signals. There are quite a few of them (see kio&_;job.hkio&_;job.h for a complete +listing), but I'll only discuss the "essential" ones. + + +sigError(int id, int errid, const char* text) + + +This signal is emitted whenever an error occurs. You should always connect a +slot to this signal unless you really don't care if there is an error or not. + +Parameters: + +int id - The job id +int errid - The error code. This corresponds to the list of errors +defined in kio&_;interface.h +const char* text - A textual description of the error + + + +sigReady(int id) + + +sigReady() +This signal occurs when the ioslave is ready to accept data. If you are +using only get(..)get(..) methods, then you should not have to connect to this +signal. If you are using a put(..)put(..) method, then you must connect to this +signal and begin sending data from there. + +Parameters: + +int id - The job id + + + +sigData(int id, const char *data, int size) + + +sigData() +This signal happens whenever the ioslave is sending you data. This is +typically the data that it just downloaded. It will never be more than 2048 +bytes, so plan on having it called several times. You are responsible for +collecting all of the data. You will know that the ioslave is done sending +you data when you get the sigDataEnd(int)sigDataEnd(int) signal. + +Parameters: + +int id - The job id +const char *data - The data that the ioslave just downloaded +int size - The size of this data chunk + + + +sigDataEnd(int id) + + +sigDataEnd() +This signal is sent to signify that the ioslave is done sending you data. +You should use this signal as an assurance that you can use the data as +sigData(..)sigData(..) will never again be called. + +Parameters: + +int id - The job id + + + +sigFinished(int id) + + +sigFinished() +This signal indicates the the ioslave is completely done. + +Parameters: + +int id - The job id + + + + + +KDE KOM/Open Parts + +Torben Weis weis@kde.org, Bernd Wuebben wuebben@kde.org + +v 1.0 August 1998 + +A free Object Model for Unix + + +Introduction + +Although it is nice to have applications like StarOffice and +ApplixWare available for Unix/Linux, it is a sad fact that they do not +interact with other applications. In fact user is expected to use the +supplied e-mail-client only, the StarOffice spreadsheet cannot be +embedded into an Applix document, and users cannot use the WWW +browser of their choice. + +Even a rather simple component-based approach like COM (Component +Object Model) can do lots of magic. Take a glimpse into Bill Gates' +world to convince yourself. The spread sheet of one software house can +be used in a word processor of another and many applications support +scripting interfaces. A veritable industry of OCX/ActiveX component +writers has cropped up. Using easy to learn languages such as Visual +Basic, users with a minimal programming background can glue separate +components together with ease in order to create new applications +exhibiting previously unavailable functionality. As Aristotle put it: +The whole is more than the sum of its parts. + +Even the most faithful of all Unix supporters had to recognize that +the Unix community had technologically fallen far behind the windows as +well as Macintosh worlds with regard to GUI and desktop technologies. +Fortunately, distributed objects make sense beyond a the realm of +desktop and GUI applications. The development of distributed databases +may serve as an example and component technology in general fits +nicely into the strategy of major software companies which in turn +helped to push CORBA development on the UNIX platform. Consequently, +there is a standardized, network transparent, platform- and +language-independent solution to the IPC-problem available, that is +based on an object-oriented approach and that offers exception +handling as well as support for management of complex data structures. + +While initially only available commercially, free implementations of +the CORBA 2.0 standard object request broker (ORB) became available as +well. A particularly well done free implementation of the CORBA +standard, that will soon cover the full CORBA-2.1 standard, was +developed at the university of Frankfurt, Germany. This GNU GPL'd ORB +named MICO, can compete with commercial implementations with respect to +completeness and stability. + + + +CORBA-based KDE Object Model + +However, CORBA alone is not enough, as the standard only describes how +distributed objects communicate; the COSS (CORBA Standard Services) +define interfaces for a whole range of so called services, such as +trading services, security services, transactions sercies and license +management services and others. As is apparent, desktop development or +even GUI application development did not play an important role when +designing CORBA. The nearly indispensable event service does not +support event filtering, furthermore it lacks a mechanism for so +called 'callbacks'. Thus, in order for X11 and CORBA to work well +together, CORBAs well done industry standard object model had to be +enhanced in order to be suitable as the underlying distributed object +broker on which to build the all important compound document +framework. Of course all this had to be undertaking within the limits +of the accepted CORBA industry standards. + +The KDE Object Model (KOM) addresses these issues and makes life +easier for a programmer by automatically giving each object a base set +of functionalities. This includes first and foremost event +handling. Each KOM object is capable of receiving events. An event +consists of an arbitrary data structure (CORBA::Any) as well +as a string, describing the type of the event, for example +Desktop/Font/ChangeFont or Desktop/Color. By reading this string, an +object can decide whether it is interested in that event, and will +know how the unknown data structure is to be interpreted semantically. + + + +Flexibility with events and filters + +An important aspect when processing events is filtering. It allows the +developer to enhance the functionality of a program without having to +change the sources. There are three types of filters: those which +merely recognize events, those which are allowed to change or discard +events, and finally those which finally process them. This model can +be illustrated with a simple WWW browser example: If a program wants +the browser to open a new URL, it has to send it an event. To enhance +the browser with a history function and the user only has to plug in a +filter of the first category into the browser. This filter can record +all URLs, thereby managing a history function. A tool for blocking +certain pages (in order to protect minors for example) belongs to +category two: If the URL is rated unsuitable for minors, the filter +discards the event or replaces the URL in it with a different one. If +the Browser does not support mailto, we need a third category filter: +upon arrival of a URLOpen event with mailto:joe@doe in it, the event +is discarded from the browser's point of view, but the filter offers +an alternative implementation. + +The filter principle is of great importance, as in CORBA only +interfaces are inherited, not implementations. It would not be +possible to derive from the browser object and to just overload the +function that opens a new URL. The event model does not just solve +this problem, it enables developers to install several enhancements at +the same time. A second filter, filtering FTP URLs for example, can be +easily installed in addition. It is important that an user can plug-in +an arbitrary number of such filters at run-time. A filter is installed +this way: + + + KOM::EventTypeSeq types; + + types.length (1); + + types [0] = CORBA::string_dup ("OpenURL"); + + browser->installEventFilter ( this, "eventFilter", types); + + + + + +Now, all you have to do is wait for events: + + +boolean MailFilter::eventFilter (in Object obj, in EventType type, in any value) +{ + + if ( type == "OpenURL" ) + { + + char *p; + + if (( value >>=p ) && strcmp (type, "mailto:", 7) == 0) + { + + // open mail app + + CORBA::string_free (p); + + return true; + + } + } + + return false; +} + + + + + +When a user enters a URL in the example above, the browser sends an +event to itself. This concept can also serve for a macro recorder, +because events can be filtered, saved and re-send later. As event +handling works the same way for all KOM objects, there is now - at +last - the possibility of creating a supra-component macro recording. + +To avoid performance loss, filters can be installed in a way that they +only receive events whose type matches a certain +expression. Desktop/Font/* would filter all events that have to do +with the font settings of the whole desktop. + + + +Callbacks with signal and slots + +In an event-driven environment, programmers have to deal with so +called callbacks. A callback is a mechanism by which a button for +example activates a procedure that is supposed to be called once the +button is pressed. C offers pointers to functions for that, under C++ +we can use elegant signals and slots. A wonderful implementation of +this idea is offered by the QT toolkit. KOM offers this technique for +distributed objects as well, it uses CORBAs DII (Dynamic Invocation +Interface) for that purpose. An object can be target and sender of +signals at the same time. To receive a signal, an object must have a +slot with a matching list of parameters. Such a slot is not different +from a usual CORBA method without return value. The lines + + + MySender_var s = new MySender; + + MyReceiver_var r = new MyReceiver; + + r.connect ( "selected", s, "myslot" ); + + + + + +connect two objects with each other. As soon as s emits the +selected signal, the function myslot of object r is +called. If one of the objects is destroyed, the connection between the +two is released automatically. It is possible to connect one signal to +different slots and one slot to different signals. Theoretically, it +would also be possible to work with events here. Signals and slots +however work a lot faster and are easier to handle for the programmer, +because he/she does not have to deal with event +processing. Furthermore they are type-safe. On the other hand, you +have to work without the advantages of filtering. + +As already mentioned, interface inheritance does not solve all +problems. The browser example shows that installing multiple +enhancements at run-time works only because filters are loaded which +can plug into the browser. The principle behind this mechanism is +called dynamic aggregation. You take a core object (the browser) and +enhance it by other objects (plug-ins). The interface of the browser +is expanded with the sum of the plug-ins' interfaces. KOM support +run-time installation and uninstallation of those plug-ins. Neither is +required to run within the same process or even the same computer. + +An object that communicates with the browser does not notice which +interface was implemented by the core object and which by the +plug-ins. If a client wants to know whether a component supports a +special interface, a simple + + +CORBA::Object_var obj = browser->getInterface ('IDL:/foo/bar:1.0'); + + + + + +is enough to get a reference to that interface. It is even possible to +load the plug-in with the required interface at run-time. This saves a +lot of memory, because the plug-ins allocate resources only then when +they are really needed. + + + +OpenParts: KOM meets GUI + +Until now, the word GUI has not been mentioned a single time. Indeed, +KOM is solely based on CORBA. There are in effect quite a number of +applications which do not have or do not need a GUI. It would not make +sense to burden those applications with GUI code; we better leave that +to the supporters of the Redmond doctrine. OpenParts form a layer on +top of CORBA, KOM, and X11. Embedding GUI components in own programs +has become widely known since introduction of MS Internet Explorer +4.0. In the windows world, a lot of controls have been created, a +whole industry has formed around the creation of controls and nearly +everything, from a simple push-button to a complete WWW browser, can +be realized as a control. + +The idea behind controls is actualized in KDE's OpenParts. This is +done using window objects that export a well-defined interface. The +CORBA Implementation Repository registers the implementation of those +components. + +When an application needs a specific control, it relays a request to +the repository. In the OpenParts framework, separate server processes +handle these requests. Thus, a high level of toolkit, compiler, +language and multi threading-support independence is achieved. The +repository returns a reference to a factory. CORBA does not support +the creation of new objects with a special construct. Because of that, +factories have been introduced, which serve the purpose of creating a +new object and returning a reference to it. + +The actual embedding is done via X11 swallowing. The element that is +to be embedded (a X11 window) is assigned a new parent using the X11 +Xlib call XReparentWindow. In order to keep developers away +from messing around with pure X11, there exist so called control +frames. This class depends on the used toolkit and (viewed from +outside) looks like a normal window implemented using a specific GUI +toolkit. The control frame is made the new father of the control. Is +it moved or resized, the control is moved or resized as well. + + + +Dynamic Elements realized easily + +Some elements of a window are subject to restrictions. There can only +be one menu bar as well as one status bar. Great confusion would ensue +if controls were allowed to take control of these restricted +elements. One way to avoid this confusion is offered by an enhancement +of controls: Parts. A part can be in three different modes: inactive, +marked, or active. In a top-level window only one can be active. This +part gains control over the restricted elements. The top-level window +is called PartShell; it owns menu bar, tool bars, status bar etc. Each +part can register its menus and toolbars with the Shell. The Shell, +however, only displays the restricted elements of the active Part. + +Using Parts, one can build the basic structure of an integrated office +suite. Text processing, spread sheet, drawing application and all the +rest is put into such structures. As Parts can contain Parts, a +spread-sheet Part can be embedded into a text-Part with no +problems. Instead of ControlFrames, the developer can use the mightier +PartFrames as well. A single click on a part creates a window frame, +the user can move and resize the frame now; another click makes it +active. The window frame is changed automatically to show the user, +that the part has been made active. The Shell changes menu bar and +tool bar to the needs of the Part that has become active. + +What is missing is a common file menu: it is the Shell's privilege to +provide a menu and a toolbar of its own for that purpose. Via these +widgets, the user can access the document as a whole, for example to +save or print it. + + + +The Document View Architecture + +OpenParts support the Document View Model, known from Smalltalk and +popularized in Microsoft's MFC. A view displays the document on the +screen and is derived from the Parts class. The document contains data +as well as the associated algorithms. The advantage of this solution is +that users can have several views of the document. It is, for example, +possible to display two paragraphs of a longer article in two windows +or to display an image in a separate window when manipulating it. When +zooming in on this picture, the rest of the document does not have to +be enlarged as well. + +For reasons of performance, document and view run within the same +process. In order to achieve a clean design, the developer has to +strictly follow the principle of separating data and belonging +manipulating algorithms on one side and viewing algorithms on the +other side. Every user action first affects the view. This view must +then signal the Document to change the data basis accordingly. After +that, the Document must inform all views to update their windows +in order to correctly reflect the new data state. + +An important aspect is using a Document without a View. This allows to +make use of an office suite's functionality in a batch job, for +example. The Document should export methods for manipulating data. A +CORBA-aware scripting language could make use of those methods. At +this time, CORBA-binding for Perl, Tcl, and CORBA-Script exist, a +Python binding is being worked on. + +Object models, and operating systems are alike in that they are of +mere academic value as long as there are no applications making use of +their qualities. KOffice is, at the moment, the largest and most +widely known application using OpenParts technology. As the KDE +project makes wider use of CORBA, and KOM and OpenParts respectively, +there is reason to hope that Unix will soon have a free implementation +of a object model that transfers the advantages of contemporary +compound document framework technology to the user. + + + +Using OpenParts: KOffice + +Based on OpenParts technology, the KOffice project aims at offering a +free and easily extendible office suite for KDE. + +The 'mother' of all KOffice components (called Parts) is the spread +sheet KSpread. Although officially still declared 'alpha', it is +already working very well.. Its mathematical functions can be easily +enhanced by means of an embedded Python language interpreter. + +KPresenter is a presentation application written by Reginald +Stadlbauer, which convincingly demonstrated its usability at the Linux +Congress in Cologne where a talk about KDE was given using +KPresenter. In the future, Linus Torvalds will no longer have use +Windows applications when giving presentations. + +KChart is an application to create diagrams. It supports different +modes (bars, lines, etc.) and can be embedded into other KOffice +application without problems. When data is changed in, for example, +KSpread, the chart automatically changes itself accordingly. + +There is a component for displaying graphics, and work is being done +adapting a formula editor and a vector-oriented painting application +(KIllustrator). For the future, adaptation of KLyx is planned to embed +Parts in LaTeX documents. Other KDE applications like KOrganizer, +KAddressbook and KMail will be enhanced with CORBA interfaces to +provide seamless integration in the KOffice suite. + +If possible, components save their data in XML format. To save an +aggregate document in a file, the MIME multi-part format is used. XML +and MIME multi-part share the advantage that import and exports filters +can easily be written in scripting languages like Python and +Perl. Ever since a WinWord filter attracted attention on +c.o.l.a. (comp.os.linux.announce), developers began writing import +filters for the most important MS applications. + +KOffice runs quite stably for a alpha release. To compile it, a fast +CPU and a reasonable amount of RAM ( 64 MByte) should be available; +for using KOffice, 32 MByte and a Pentium 133 MHz will +suffice. KOffice is reported to work on DEC Alpha and Sun Sparcs as +well. The sources for KOffice, KOM and OpenParts are available on +http://www.kde.org + + + +Code Re-use with CORBA + +A developer, sitting in front of his editor and trying to build new +software components out of old ones, might sadly remember the good old +Lego pieces from his/her childhood. Those always fit together nicely, +and from a great number of primitive elements, great buildings could be +constructed. From the software developer's point of view, software +pieces do not fit at all, and each new building requires a lot of work +to make it usable. Many developers therefore choose to rewrite the +sources rather than to re-use code. + +Under Unix, the usual method concerning code re-use is putting code +into libraries and linking the application against them. However, +sometimes it happens that those libraries use different GUI toolkits, +or that some support multi-threading and some do not. Additionally, +all libraries should have been compiled with the same compiler, +otherwise you will be subject to problems at the linking stage. + +One solution is to split an application into several processes. One +process might, for example, offer database functionality with +multi-threading, another one might offer the X11-GUI +single-threaded. Now, the problem of Interprocess Communication (IPC) +remains to be solved. CORBA (Common Object Request Broker +Architecture) offers a modern and object-oriented solution, but the +developer is tied to the CORBA object model, what is somewhat limited +in contrast to the C++, Python or Smalltalk object model. First of all +one can derive only from interfaces, not from implementations. If +there is a text editor as a CORBA object, it usually is impossible to +derive from this editor and overload just a few of its functions. The +derivation of implementations works only if the sources of the editor +are available, or if it is available as a library. But that was what +we wanted to avoid. + +As the main article describes, the KDE Object Model (KOM) offers a +solution for this problem; it is based on events and event +filters. Instead of calling a function directly, it is possible to +send an event. By filtering events, function overloading can be +simulated. + +There are other obstacles when re-using code: According to Murphy's +laws, the desperately needed module is always written in a different +programming language than expected. Mixing different languages in one +application is always a problem for programmers. Even semi-automatic +wrapper generators like SWIG expect a certain amount of refining from +the programmer. Further, a look at the KDE bindings in Python, Perl +and Tcl shows that this wrapper code can easily grow huge. As +OpenParts is CORBA-based, objects can be implemented in any of the +languages for which CORBA bindings are available for. For interpreter +languages, in most cases no special wrapper code is necessary, for +compiler languages like C/C++, wrapper code generation is done +automatically. + + + +Credits + +Most of this document was written by Torben Weis +weis@kde.org. +Additions, corrections as well as the editorial work was done by +Bernd Johannes Wuebben wuebben@kde.org. + + + + +Using KOM / OpenParts HOWTO + +Simon Hausmann <hausmann@kde.org> + +v1.0 18, June 1999 + +This documentation is meant to help programmers who are already familiar +with the standard Qt/KDE application framework and who are interested in using +the KDE component technology, the KDE Object Model (KOM) and OpenParts, for +their application. It covers both "why" you should use KOM/OP +and "how" to do so. + + +Introduction + +This documentation is meant to help programmers who are already familiar with +the standard Qt/KDE application framework and who are interested in using the +KDE component technology, the KDE Object Model (KOM) and OpenParts, for their +application. The goals of using components in case of standard KDE +applications might be: + + + +make several modules of the application re-usable components, being +available for other applications, not matter in what language they are +written or on what platform/machine they're running. + + +make use of OpenPart's embedding facility and its way to manage shared +GUI elements to provide seamless graphical integration of components in +applications. + + +use CORBA and KOM as an easy way of inter-process communication + + + + +I recommend reading the +article by Torben Weis about KOM/Openparts +Torben Weis is the +author/creator/master/god of KOM/OpenParts. + + + +The KDE Object Model (KOM) + + +First ways of communication - the KOM::Base interface <indexterm remap="idx"><primary>KOM::Base interface</primary></indexterm> + +The Base interface and its implementation in libkomlibkom provide the basic +functionality for a standardized communication between CORBA objects using +KOM. This includes + + + +signals and slots, similar to the mechanism used in the Qt toolkit + + +event handling, including filtering + + +relatives management + + +reference counting + + + + + + +Signals and Slots <indexterm remap="idx"><primary>Signals and Slots</primary></indexterm> + +KOM supports signals and slots just like in the Qt toolkit, with a few +differences in usage and implementation. The first and biggest difference is +that signals and slots are no more typesafe again, meaning there's no moc +compiler generating meta data for KOM signals/slots to enable type checking at +run-time, when connecting. + +Another difference is the way you declare signal and slot functions. Signals +have to be declared with the SIGNAL&_;IMPLSIGNAL&_;IMPL macro from komBase.hkomBase.h, +without specifying any signal arguments. Slot methods have to be defined in +your CORBA interface description. + +For KOM signals the equivalent to the "emit" keyword from Qt is the +SIGNAL&_;CALLSIGNAL&_;CALLx macro, were "x" is one of 0, 1, 2, depending on the +number of arguments. +KOM::Base +Example: + +In your CORBA interface description: + #include &<;kom.idl&>; + + interface FooSender : KOM::Base + { + signal void mySignal( in long foobaz ); + }; + + interface FooReceiver : KOM::Base + { + slot void mySlot( in long gosh ); + }; + + +In the implementation of FooSender: + FooSender_Impl::FooSender_Impl( ... ) + { + ... + SIGNAL_IMPL( "mySignal" ); + ... + } + + FooSender_Impl::mySignal( CORBA::Long foobaz ) + { + SIGNAL_CALL1( "mySignal", foobaz ); + } + + +In the implementation of FooReceiver: + FooReceiver_Impl::mySlot( CORBA::Long gosh ) + { + ... + } + + +First some words about the sender: It is not required to define the signal +in the interface description and to provide an implementation which simply +emits the signal. However in many cases this is recommended, because this makes +it easier for other developers to use your interface because they aren't required +to seek in the implementation sources just to find out about the signals this +object emits. Another way is to simply document the existence of the signal +in the interface description, without defining a method. From the technical +point only the SIGNAL&_;CALLSIGNAL&_;CALLx macro counts when emitting the signal. + +What's left is connecting and disconnecting. In the above described example it +could like this: + ... + SenderObject->connect( "mySignal", ReceiverObject, "mySlot" ); + ... + SenderObject->disconnect( "mySignal", ReceiverObject", "mySlot"); + + +Well, this is quite self-explaining I think. Just make sure to always disconnect +from your object upon destruction. + + + +Events + +An event consists of two elements, the event name, being a string, and an +event argument, being a CORBA::Any value and therefore freely choosable by the +developer. + +Events, sent to a specified object, can be imagined as being put through a +pipe until they reach the destination object. This "pipe" is filled with +installed event filters. There are three kinds of filters. + + +reading filters ( FM&_;READFM&_;READ ) + + +writing filters ( FM&_;WRITEFM&_;WRITE ) + + +implementing filters ( FM&_;IMPLEMENTFM&_;IMPLEMENT ) + + + + +In the current implementation in KOM these filter modes only specify the order +how the event is processed. When an event is emitted it gets first filtered by +all event filters with the filter mode FM&_;WRITEFM&_;WRITE, then followed by +FM&_;IMPLEMENTFM&_;IMPLEMENT and finally by FM&_;READFM&_;READ. Event filters have two +possibilities what they can do with the actual event: They can just +read it or they can discard it, which means the event is +discarded and will never receive its destination object. + +The actual event name has a special meaning in regard to event filters. When +installing an event filter to an object you have to specify, beside a +reference to the filter object and the name of the filter mapping function, a +sequence of so called event type patterns. An event type pattern can be the +name of a single event as well as a special pattern (see kom.idlkom.idl for more +information about event type patterns) . + +When an event is meant to be processed by a filter, the specified filter +function gets called, with the event name and the event value as arguments. +This filter function has to return (through a boolean value) whether the event +should be discarded or not. + +When all filtering is done and none of the installed filters discarded the +event, it is finally received by the destination object, by calling the +object's event()event() method, defined in the KOM::Base KOM::Base interface. The default +implementation does actually nothing, so you may want to re-implement this +virtual function. + +The very low-level usage of events is to call the receive/receiveASync methods +of an object for sending an event and to re-implement KOMBase::eventKOMBase::event for +mapping an event. But KOM provides some nice macros which simplify the +processing of events. + + +Sending Events + +For sending komBase.h defines some useful EMIT&_;EVENTEMIT&_;EVENT macros, all +using the same syntax: +EMIT_EVENT_x( destination_object, event_name, event_argument) + +"destination&_;object" is a reference to the object which is meant to +receive/process the event. The event will be filtered through all event +filters which are installed in this destination object. "event&_;name" is +self-explaining ;-) . The event argument depends on the specific macro, which +are in particular: + + + +EMIT&_;EVENT, the general macro for sending. The event argument is +required to have a <<= operator for CORBA::Any defined. You +will want to use this macro whenever the event argument is a structure +for example. (and don't forget to compile your idl file with the "--any" +option, so that the idl compiler generates the necessary operator +methods) + + +EMIT&_;EVENT&_;BOOLEANEMIT&_;EVENT&_;BOOLEAN, useful for boolean event arguments. The +only difference to the EMIT&_;EVENT macro is that it uses +CORBA::Any::from&_;boolean for you to convert the boolean value. So it +doesn't really matter whether you use: + + EMIT_EVENT( receiver, name, CORBA::Any::from_boolean( value ) ); +or + EMIT_EVENT_BOOLEAN( receiver, name, value ); + + + +EMIT&_;EVENT&_;OCTETEMIT&_;EVENT&_;OCTET, similar to EMIT&_;EVENT&_;BOOLEAN, useable for +CORBA::OctetCORBA::Octet values. + + +EMIT&_;EVENT&_;CHAREMIT&_;EVENT&_;CHAR, similar to EMIT&_;EVENT&_;BOOLEAN, useable for char +(CORBA::CharCORBA::Char) values. + + +EMIT&_;EVENT&_;WCHAREMIT&_;EVENT&_;WCHAR, similar to EMIT&_;EVENT&_;BOOLEAN, useable for +CORBA::WCharCORBA::WChar values. + + +EMIT&_;EVENT&_;STRINGEMIT&_;EVENT&_;STRING, similar to EMIT&_;EVENT&_;BOOLEAN, useable for +char * (CORBA::Char*CORBA::Char*) values. + + +EMIT&_;EVENT&_;WSTRINGEMIT&_;EVENT&_;WSTRING, similar to EMIT&_;EVENT&_;BOOLEAN, useable for +CORBA::WChar*CORBA::WChar* values. + + +EMIT&_;EVENT&_;OBJECTEMIT&_;EVENT&_;OBJECT, similar to EMIT&_;EVENT&_;BOOLEAN, useable for +CORBA objects (CORBA::ObjectCORBA::Object). + + + + + + +Receiving Events + +The process of receiving events is a little bit more difficult, compared +to sending, since we have to process all kinds of events an object can receive +in one handler method, KOM::Base KOM::Base::event (IDL IDL) / KOMBase::event (C++) . Just +like with sending events you can again do everything on low CORBA level, but +why should we go the hard way? KOM again provides very nice and easy-to-use +macros for this (defined in komBase.h) :-) . Usually all this looks like the +following example:KOM::Base +#include &<;kom.idl&>; + +module MyModule +{ + // we say: the event argument is a string + const string eventFirstFoo = "MyFooEventNameOrWhateverYouNameIt"; + + struct MyStruct + { + boolean kde_rules; + }; + + const string eventSecondFoo = "Blaafooo"; + typedef MyStruct EventSecondFoo; + + interface SomethingElse + { + //.. + }; + + const string eventThirdFoo = "KOMIsCool"; + typedef SomethingElse EventThirdFoo; + + interface Foo : KOM::Base + { + //... + }; + +}; + +bool FooImpl::event( const char *event, const CORBA::Any &&;value ) +{ + EVENT_MAPPER( event, value ); + + MAPPING_STRING( MyModule::eventFirstFoo, mappingFirstFoo ); + + MAPPING( MyModule::eventSecondFoo, MyModule::EventSecondFoo, mappingSecondFoo ); + + MAPPING( MyModule::eventThirdFoo, MyModule::EventThirdFoo_ptr, mappingThirdFoo ); + + END_EVENT_MAPPER; //the macro executes "return false;" for us, to indicate that + //we did not handle the event if we reach this point +} + +bool FooImpl::mappingFirstFoo( const char *myArgument ) +{ + ... + //don't forget to return with a boolean value, indicating whether you sucessfully + //processed the event or not. +} + +bool FooImpl::mappingSecondFoo( MyModule::MyString anotherArg ) +{ + //... +} + +bool FooImpl::mappingThirdFoo( MyModule::SomethingElse_ptr whaaboo ) +{ + //... +} + + + +As you can see an event handler usually begins with the EVENT&_;MAPPER +macro and ends with END&_;EVENT&_;MAPPER . Similar to the +EMIT&_;EVENT&_;x macros, the MAPPING macros consist of a general +MAPPING macro and the following friends: + + +MAPPING&_;BOOLEAN + + +MAPPING&_;OCTET + + +MAPPING&_;CHAR + + +MAPPING&_;WCHAR + + +MAPPING&_;STRING + + +MAPPING&_;WSTRING + + +MAPPING&_;OBJECT + + + + +In order to structurize the process of event handling a little bit, every +event gets its own event handling function. These functions are called by the +mapping macros (last argument) . The above used naming scheme is not a +requirement, however it is used in most applications using KOM. + + + + +Adopting + +You should use adopting whenever you want to hold a reference to an object and +want to be informed when the object dies in order to free all your references +to this object. But this should only be used when you're not the parent +object, meaning you didn't reference the object directly via the KOM reference +counter. When using adopting you should re-implement the leaveNotify +(and perhaps adoptNotify) methods of your object (and don't forget +to call the original KOMBase method!) . + + + +KOM referencing + +KOM reference counting should be used to "express" that you possess the +object. This gives you direct control over the lifecycle of the object by +letting the reference counter act directly on the server object, in contrary +to CORBA reference counting, where the reference counter only acts on the stub +object, in case of remote objects (this is different for local objects, where +stub = server object) . When the KOM reference counter drops down to zero the +object gets destroyed. This destruction is done by calling cleanUp(), +which closes all connections to other objects and leaves all relatives. After +this call is finished the object truly gets released. You might want to +re-implement the cleanUp() method. In this case make sure that you +don't forget two things: + + + +only execute if the boolean variable m&_;bIsClean is false, +otherwise simply return + + +make sure you call the previous implementation! + + + + +As a short summary to this KOM reference stuff just keep in mind, that +there are three ways to hold a reference to an object: + + +you're connected to the object via signals/slots or via event filters + + +you're the parent object, meaning you hold a reference through the KOM +reference counter + + +otherwise you should use adopting to get informed whenever the object wants +to die, in order to free all references to the object which are not of +one of the above kinds. The idea behind all this is that all +connections/references between objects are symmetric, meaning +both sides know about the connection and both sides +clean up all connections between each other whenever one of the two +objects wants to die. In case of signal/slot connections this is done +automatically by KOM. In case of KOM reference counters you have the +direct control over the lifecylcle for the object. Adopting, as third +way, can be used to keep other connections symmetric, connections which +are neither signal/slot connections nor direct references via the KOM +reference counter. + + + + +Hint: Using the KOMVar template makes handling KOM references much +easier, they can be used similar to the CORBA &_;var types. + + + +THE component - the KOM::Component <indexterm remap="idx"><primary>KOM::Component</primary></indexterm> interface + +The Component interface, being derived from the Base interface, additionally +provides a kind of small interface repository for only this component, +combined with the possibility to provide new interfaces by dynamic aggregation +and a standard way to add plugin components. This gives CORBA objects the +possibility to enhance their functionality at run-time. + +There are five kinds of interfaces: + + +Builtin Interfaces (derived Interfaces) + + +Builtin Aggregate Interfaces + + +Dynamic Aggregate Interfaces + + +Builtin Plugin Interfaces + + +Dynamic Plugin Interfaces + + + + +Builtin interfaces are all interfaces the object directly implements. This +means they are part of the actual object implementation and can be specified +via the ADD&_;INTERFACEADD&_;INTERFACE macro (in komComponent.hkomComponent.h) . So for example if +your interface description looks like this: +module Foo +{ + interface MyInterface : AnotherInterface + { + ... + }; +}; + + +You should add the following line into the constructor of an implementation of +this interface: +IDL +ConstructorNameOfMyInterface::ConstructorNameOfMyInterface( ... ) +{ + ... + ADD_INTERFACE( "IDL:Foo/MyInterface:1.0" ); + ... +} + + +This way you tell your component that it supports the interface +"Foo/Interface" and therefore makes it available through the three functions +getInterface(), interfaces() and +supportsInterface() . + + + +Extend your component by aggregation - KOM::Aggregate <indexterm remap="idx"><primary>KOM::Aggregate</primary></indexterm> + +Aggregates solve a problem with distributed objects, the problem of +derivation. Since the implementation of an interface is completely +encapsulated there has to be another way to extend the functionality of an +already existing object. By using aggregate components you can add new +interfaces to an object, at run-time. This means you extend the functionality +but you do not change the behaviour of the object itself. + + +Builtin Aggregates + +Builtin aggregate interfaces are the interfaces of aggregate implementations +which run in the same process as our component. See in komComponent.h the four +functions of the KOMComponentKOMComponent class for adding builtin aggregates, it's easy. + + + +Dynamic Aggregates + +Dynamic aggregates are similar to builtin aggregates, with two differences: + + + +They can (are) be installed from "outside" of the component, +using AggregateFactories (see kom.idl kom.idl) . This way they do neither have +to run within the same process nor on the same computer. + + +They can depend on other available interfaces. KOM does the job of resolving +these dependencies for you. + + + + + + + +Plugins - the KOM::Plugin <indexterm remap="idx"><primary>KOM::Plugin</primary></indexterm> interface + +Plugins are the kind of counterpart to aggregates. They do not extend the +functionality of an object by providing new interfaces, but instead usually +change the behaviour of it, by + +doing things like installing event filters to the object, etc. + + +providing special plugin interfaces + + + + + + +Collect your components - the KOM::Container <indexterm remap="idx"><primary>KOM::Container</primary></indexterm> interface + +Containers do something simple but extremly useful: They act as repository for +Container members. A container member structure consists of two elements: + + + +the member name, a freely chooseable and unique string identifier + + +the member object, a KOM::Base KOM::Base type You can add, remove, replace, list +and lookup container members or just clear the whole container. In +addition the container emits signals whenever a member has been added +or removed. + + + + + + +Factories + +KOM contains two abstract factory interfaces: + +KOM::AggregateFactory KOM::AggregateFactory + + +KOM::PluginFactory KOM::PluginFactory + + + + +They both serve the job of creating objects and are needed for the creation of +dynamic plugin and aggregate components. Whenever you want to install a such a +dynamically created object to a component you have to provide an +implementation of a factory interface. + + + +KOMApplication <indexterm remap="idx"><primary>KOMApplication</primary></indexterm> + +KOMApplication KOMApplication is the drop-in replacement for KApplication KApplication, required when +using CORBA in your KDE Application. It, internally, combines CORBA event +handling with Qt event handling and initializes the ORB ORB and the BOA BOA on +startup. komApplication.h defines two smart macros to get a reference to the +ORB/BOA: komapp&_;orb and komapp&_;boa . Usually you will want +to use your own application class, derived from KOMApplication, and +re-implement start() and/or restore() , which will be called +>from KOMApplication::exec()KOMApplication::exec(), depending on the BOA's state about +restoring objects. For further information about KOMApplication's API see +komApplication.hkomApplication.h . + + + + +OpenParts + + +Introduction + +The goals of the OpenParts technology, based upon KOM, are: + + +provide an easy way to graphically embed other application's "widgets" + + +provide an clever way to manage shared GUI elements and provide a CORBA/KOM +interface/implementation of these + + +implement the basic support for the document view model + + + + +To simplify the act of understanding OpenParts I will give a short example +situation: + +Imagine you have an a word processor and a formula editor, both being separate +applications. If you now want to insert a formula into your word processor +document by using your formula editor application this arises several +problems: You can of course embed the formula editor's main widget window via +swallowing by using XReparentWindow and friends, or easier by using QXEmbed. +But then how do you want to edit your formula without having access to the +formula editor's menubar / toolbar? In any way it would look ugly if these are +part of the formula window. Wouldn't it be nice if the menus / toolbars of +your word processor application would get replaced by the formula editor ones, +except for some general menu /toolbar items? And when you go back to your text +document the old menus / toolbars come back again. + +Well, this is a perfect job for OpenParts :-) . + +OpenParts solves the above described problem by introducing a new sytem of +visual components and a new way of creating shared GUI elements, such as menus +or toolbars, dynamically on demand. + +In the implementation of OpenParts every element consists usually of two +classes, the interface implementation, where the class name ends with "If", +and the Qt/KDE object. So for example the OpenParts StatusBar element is +represented by two classes: OPStatusBarOPStatusBar, being derived from +KStatusBarKStatusBar, handles the Qt/KDE specific extensions, and +OPStatusBarIfOPStatusBarIf which is responsible for providing an implementation +of the actual OpenPartsUI::StatusBarOpenPartsUI::StatusBar interface by "translating" the interface +functionality into Qt/KDE function calls. + +Since every Qt/KDE object in OpenParts is most often bound to such an +interface, like described above, there is usually an interface() function +which returns a reference to the OpenParts interface of the element. In case +of the above example OPStatusBar::interface()OPStatusBar::interface() returns a reference to +an OPStatusBarIfOPStatusBarIf object which is directly bound to this +OPStatusBarOPStatusBar object. + + + +OPApplication <indexterm remap="idx"><primary>OPApplication</primary></indexterm> + +Similar to KOMApplicationKOMApplication, the class OPApplicationOPApplication (derived from +KOMApplication) is required when using OpenParts. + + + +<indexterm remap="cdx"><primary><literal>QWidget</literal></primary></indexterm>QWidget as Component? - the OpenParts::Part interface + +In OpenParts every window which has its own GUI and which is meant to be +displayed in a MainWindow is called a Part (just like the formula editor view +or the word processor document view in the above described example) , and +implements the OpenParts::PartOpenParts::Part interface by deriving from the class +OPPartIf. + +If you want to make a widget class a full-featured Part component then you +have to handle some things different than you might be used to, in regard to +the standard Qt/KDE widget framework. In fact now a widget is no more a simple +window in which you display some data, no, a Part is much more than this. In +particular a Part has, beside it's window (widget, which may of course contain +sub-windows or even other Parts (see OPFrameOPFrame documentation) ) a +full-featured GUI, consisting of a menubar with menus, toolbar(s) and a +statusbar. + +The special thing with the GUI is the way it is created, handled/used and +"destroyed" . All this has to be highly dynamic because now the user decides +about which Part he wants to have active. OpenParts provides the basic +framework for this: + + +it tells you when you have to create your GUI and provides you the necessary +references to the GUI related objects of OpenParts. + + +it also tells you when the GUI is destructed. + + +in addition you are notified when your Part gets the focus and gives you +the choice whether to accept or reject the focus. + + +you are also notified when your Part gets registered to a MainWindow, in +order to register your component at several GUI servant objects, just +like the menubar manager for example. + + + + +The very first step you have to make is to tell the OpenParts Part Interface +(OPPartIfOPPartIf) , the class you have to inherit from, what the actual +widget is, because OPartIfOPartIf does not inherit from QWidget. This gives +you the flexibility to separate your Part component from your actualy widget, +but you don't have to do this. You can simply multiply inherit from +OPPartIf and QWidgetQWidget or the appropriate widget class. In any way you +specify your Part widget by calling setWidget( your&_;widget&_;here ) . +In most cases, when the Part component is the widget at the same time, you +simply call setWidget( this ) :-) . Make sure this call is done in +the constructor of your class! + +The next important point is that you will want to re-implement the virtual +init() function of OPPartIfOPPartIf . This is highly recommended +since this function is called after your Part got registered by a MainWindow. +The idea behind this function is that at the time the constructor of a Part +gets executed, the Part itself is definitely not registered to a MainWindow, +yet. But in fact you need to know when your Part gets registered, in order to +register your Part at the GUI servant objects, which are only available via +the MainWindow's interface. A reference to the MainWindow is available through +the m&_;vMainWindowm&_;vMainWindow variable, which will be automatically initialized +when the MainWindow registration is done, so don't use this variable before +your init() function gets called (m&_;vMainWindow will be nil +anyway) . + +Now over to the details of the init()init() function. Here you should place +all initialisation stuff which depends on being registered to a MainWindow. +In addition you can do the above mentioned registration at the GUI managing +objects. Usually this looks like the following example: +void MyPart::init() +{ + //register at the menubar manager if you want to use/display a menubar + OpenParts::MenuBarManager_var menuBarManager = m_vMainWindow->menuBarManager(); + if ( !CORBA::is_nil( menuBarManager ) ) //check whether the shell window allows us to have a menubar + menuBarManager->registerClient( id(), this ); //see chapter about the + //*barManager objects + //for further explanations + + //...the same with the toolbar + OpenParts::ToolBarManager_var toolBarManager = m_vMainWindow->toolBarManager(); + if ( !CORBA::is_nil( toolBarManager ) ) + toolBarManager->registerClient( id(), this ); + + //better define a class wide variable, of course + OpenPartsUI::StatusBar_var m_vMyStatusBar; + + OpenParts::StatusBarManager_var statusBarManager = m_vMainWindow->statusBarManager(); + if ( !CORBA::is_nil( statusBarManager ) ) + m_vMyStatusBar = statusBarManager->registerClient( id() ); +} + + +Note that the registration calls for these three GUI element types are only +necessary if you really want to use them. For example if your Part does not +want to display any toolbar you should leave out the corresponding call. In +addition you might come up with the situation that for example the +toolBarManager()toolBarManager() call returns a nil reference, which indicates that +the MainWindow does not allow its Parts to have a toolbar. Obviously the same +applies for the menubar and the statusbar. + +OpenParts makes use of KOM events to tell a Part about the +construction/destruction of it's GUI. These are in particular: + + +OpenPartsUI::eventCreateMenuBar ("OpenPartsUI/CreateMenuBar") + + + +The attached argument is a OpenPartsUI::MenuBar + + + +OpenPartsUI::eventCreateToolBar ("OpenPartsUI/CreateToolBar") + + + +The attached argument is a OpenPartsUI::ToolBarFactory + +Depending on whether a Part wants to display a menubar and/or toolbar, the +managing objects emit these two events to it. In regard to your implementation +this means that you have to re-implement the event()event() function +(remember: A Part is a full-featured KOM Component) . + +The attached event arguments indicate whether the toolbar(s) or the menubar +are to be created or cleared. Check these arguments against +CORBA::is&_;nil() and you know :-) . + +The OpenParts StatusBar is handled different compared to the +MenuBar/ToolBar(s) . In fact it is easier: When registering at the OpenParts +StatusBarManager you receive your OpenParts::StatusBarOpenParts::StatusBar as return +value. You can then use the StatusBar everywhere in your Part, independend +from whether it is visible (active) or not. + +In the init()init() function a lot of registration stuff is done, and +corresponding to this in the cleanUp()cleanUp() function (see chapter about +KOM::Base KOM::Base) you have to unregister from the GUI servant objects and free all +appropriate references, following KOM's model of symmetric references and +connections. Usually the code looks like this: +void MyPart::cleanUp() +{ + if ( m_bIsClean ) + return; + + //unregister our menubar + OpenParts::MenuBarManager_var menuBarManager = m_vMainWindow->menuBarManager(); + if ( !CORBA::is_nil( menuBarManager ) ) + menuBarManager->unregisterClient( id() ); + + //...the same with the toolbar + OpenParts::ToolBarManager_var toolBarManager = m_vMainWindow->toolBarManager(); + if ( !CORBA::is_nil( toolBarManager ) ) + toolBarManager->unregisterClient( id() ); + + OpenParts::StatusBarManager_var statusBarManager = m_vMainWindow->statusBarManager(); + if ( !CORBA::is_nil( statusBarManager ) ) + statusBarManager->unregisterClient( id() ); + + //free other references here + //... + + //this is IMPORTANT!!! + //Always call the cleanUp() method of the base class when you're done! + OPPartIf::cleanUp(); +} + + + + +Part Children + +A Part Child is a usual Part with three extra features: + +A Part Child has a Parent Part assigned. + + +It does not have a GUI and it therefore does not receive any GUI creation +events. + + +The Parent Child receives events whenever there are any child related focus +changes. Since the Part Child functionality is integrated in the +OpenParts::PartOpenParts::Part interface and it's implementation, +OPPartIfOPPartIf, you don't have to deal with additional classes when +using Child Parts. Simply leave out the mapping of the OpenParts GUI +events in the Child Part and instead map the Child Part events described +below and assign the Parent Part via setParent()setParent(). See the +interface description of OpenParts::PartOpenParts::Part , in openparts.idlopenparts.idl, +for further information about the events and the API in general. + + + + + + +How to embed a Part - the <indexterm remap="cdx"><primary><literal>OPFrame</literal></primary></indexterm>OPFrame class + +Now that you know how to create full-featured Part components it is still +unexplained how Parts are really displayed/shown. Since Parts are no simple +QWidgets but CORBA objects we need a helping hand here, which is the +OPFrame class. In fact OPFrameOPFrame is a QWidgetQWidget, but in +conjuction with Qt's QXEmbedQXEmbed it embeds the Part's widget window. The usage of +OPFrame is really easy, usually the code looks like this: + +... somewhere in an application's widget ... +myFrame = new OPFrame( the_parent_widget ); +myFrame->attach( a_reference_to_the_part_we_want_to_embed ); +myFrame->show(); + + +In addition to the above example you can detach()detach() your Part, which +you should usually do on exit. Just have a look at opFrame.hopFrame.h, it is +documented. + +One last important thing you have to know about OPFrameOPFrame is that this +class internally uses KOM referencing (using a KOMVar variable) to +hold the Part. This means that there are two possible situations when using +OPFrame : + + + +If the embedding Widget/Object uses KOM referencing as well to keep a +reference to the Part then there are two objects influencing the Part's +lifecycle. On the one hand there's the OPFrame which +increases/decreases the Part's KOM reference counter when it gets +attached/detached, and on the other hand there's the embedding +Widget/Object. So make sure that you know when you free your KOM +reference to the Part in regard to detaching the Part! + + +If the embedding Widget/Object does not use KOM referencing then you have +to know that when detaching the Part it automatically gets destroyed, +since usually the OPFrame is the only object holding a KOM +reference to the Part and the KOM reference counter therefore drops +down to zero and issues the complete destruction of the object. + + + + + + +The center of OpenParts - the OpenParts::MainWindow interface + +Another important component is the so called OpenParts::MainWindowOpenParts::MainWindow, being +derived from a KTMainWindowKTMainWindow in the implementation (and therefore the top-level +window of your application) and being the shell around visible sub-windows and +shared GUI elements. + +The MainWindow's functionality is extended by some builtin aggregates, the +managing objects for the menu-/tool-/statusbar. These objects are either +available directly via the *barManager() methods of the MainWindow's +interface or indirectly by being aggregates and therefore available via the +components interface repository (getInterface()getInterface(), +supportsInterface()supportsInterface(), ...) . + +A Part can only be displayed in a MainWindow and the MainWindow has to know +about this. So before you can display a Part you have to register it to the +MainWindow. This is done by calling the Part Interface's +setMainWindow()setMainWindow() method (see previous chapter for further information +about the process of registration) and this will give the Part a unique ID +(which is for example used when addressing the part's GUI via the *bar manager +objects) . + +The MainWindow, as shell, has full control over all shared GUI elements. This +means that it is responsible for + + +creating the appropriate *bar managing objects + + +providing a skeleton/standard GUI which is meant to be always present, +no matter what Part is active + + +telling the GUI managing objects to activate/deactivate a Part's GUI + + + + +The creation of the *bar managers can be easily done by simply performing a +dummy call to *barManager() which usually returns a pointer to the +appropriate manager and also creates a new one if it does not exist yet. It is +recommended to perform these calls in the constructor of your MainWindow. + +The creation/handling of the skeleton GUI is explained later in the chapters +about OPMenuOPMenu(Bar)/OPToolBarOPToolBar . + +Your MainWindow emits a Qt signal (activePartChangedactivePartChanged) which informs +you about a focus change of the active part, meaning whenever the user clicks +on a non-active Part and it accepts the focus. Beside the pure informative +sense of this signal it is recommended to connect to this signal and perform +the following two steps in the slot implementation: + + +deactivate the previous active Part's GUI by calling the *bar managers +clear()clear() function, which will do the job and, beside some +internal stuff, emit the GUI events (see previous chapter) to the Part. + + +activate the new active Part's GUI by calling the *bar managers +create()create() function, which will, similar to the activation, emit +events to the Part. This is not really required but it is highly +recommended. The following code is usually used for this: + + void NameOfYourMainWindow::slotActivePartChanged( unsigned long old_id, + unsigned long new_id ) + { + // clear the menu/tool/statusbar(s) + menuBarManager()->clear(); + toolBarManager()->clear(); + statusBarManager()->clear(); + // create the new Part's GUI + menuBarManager()->create( new_id ); + toolBarManager()->create( new_id ); + statusBarManager()->create( new_id ); + } + + + + + + +Now that the MainWindow handles all the shared "stuff" there is one thing +which was not mentioned in this documentation, yet: What about the +MainWindow's caption? The OpenParts MainWindow interface allows parts to have +their own window captions, but how does OpenParts handle this? + +Well, there are two ways: + +OPMainWindowOPMainWindow provides you a so called AutoCaptionAutoCaption mode +which automatically changes the MainWindow's caption whenever the active +part changes. This is enabled by default. + + +But sometimes the shell wants to have full control over the window's +caption, and this is accomplished by disabling the AutoCaption +mode, which leads to the situation that the window's caption is not +changed by OpenParts in any way but instead gives you control over it. + + + + + + +Access shared GUI elements through CORBA - OpenPartsUI and its interfaces + +Well, now that we know when we have to construct/destruct a Part's GUI, +via the OpenPartsUIOpenPartsUI events, we have to learn how to really create it, because +we don't have the common KMenuBarKMenuBar, KToolBarKToolBar, etc. classes anymore available. +The replacement for them are CORBA Objects, described in openparts&_;ui.idl which +is, together with the corresponding implementations, a part of the partsui +module. The interfaces are 98&%;; similar to the KDE/Qt classes, so they're +quite easy to use. Instead of bloating up this documentation with example code +I rather suggest reading the tutorials in kdelibs/corba/tutorials . + + + +Pixmaps <indexterm remap="idx"><primary>Pixmaps</primary></indexterm> and Strings <indexterm remap="idx"><primary>Strings</primary></indexterm> in OpenParts - <indexterm remap="cdx"><primary><literal>OPUIUtils</literal></primary></indexterm>OPUIUtils + +Toolbars and menus are usually beautified with pixmaps, using QPixmap classes. +As we now use a CORBA interface to access our GUI elements, QPixmapQPixmap has become +OpenPartsUI::PixmapOpenPartsUI::Pixmap for OpenParts applications. OpenPartsUI::Pixmap is just +a "stringified" QPixmap, and opUIUtils.(h,cc) contains some easy +to use conversion routines. + +In addition OPUIUtils contains string conversion routines between CORBA::WChar* +and QStringQString. This is necessary since Qt version >=2.0 supports UnicodeUnicode, +via QString, all over the place, and obviously GUI elements like menus or +toolbars have been converted to support this. OpenParts has been converted, +too, by using "wstring" (CORBA::WChar *CORBA::WChar *) in the interfaces and by +using and providing conversion routines. These routines are static member +functions of the OPUIUtils class, just like with the pixmap conversion. To +simplify the usage, two macros have been defined: Q2CQ2C and +C2QC2Q . The first one converts a QString into a CORBA::WChar * string +and the second one vice-versa. + +When converting from QString to CORBA::WChar * the conversion routine +allocates memory. To avoid memory leaks memory leaks it is highly recommended to use +CORBA::WString&_;var variables. Exactly the same applies for QPixmap -> +OpenPartsUI::Pixmap conversions: Use OpenPartsUI::Pixmap&_;varOpenPartsUI::Pixmap&_;var , and you don't +have to worry about leaks :-) . + +Here's some example code, to show how to do it right: + ... + OpenPartsUI::Pixmap_var pm = OPUIUtils::convertPixmap( QPixmap_variable_here ); + someToolBar->insertButton( pm, ... ); + ... + //use the same pm variable again + pm = OPUIUtils::convertPixmap( another_qpixmap ); + ... + + +Similar things have to be done with QString's: + + ... + CORBA::WString_var text = Q2C( QString_here ); + someMenuBar->insertItem7( text, ... ); + ... + // or you can write: + someMenuBar->insertItem7( ( text = Q2C( QString_here ) ) , ...); + ... + + +One note left: When you return a "wide string" (CORBA::WChar *) as +a function result by using Q2C, make sure not to use +CORBA::wstring&_;dup()CORBA::wstring&_;dup(). + +Example: + return CORBA::string_dup( Q2C( QString_here ) ); //!!!! WRONG!!!!! + ... + return Q2C( QString_here ); // RIGHT! because Q2C already allocates the string + + +That's it! Have fun using KOM/OpenParts :-) + +TODO: + + +KOMShutdownManager + + +AutoLoader template classes + + +OPApplication Interface + Factories + + + + + + + + +The KDE Daemon + +Simon Hausmann <hausmann@kde.org> + +v1.0 26, June 1999 + +This documentation describes the KDE Daemon, the services it provides and +how to use it. So if you're dealing with CORBA server CORBA servers in the KDE or if you're +interested in a smart way of accessing KService KService data in your application then +you might want to read this and use kdedkded + + +Introduction + +The KDE Daemon, herein simply named kdedkded, is a central daemon in the KDE Desktop +Environment. It provides three services: + + + +The KDE Trader (KTraderKTrader) , which provides an easy-to-use but still extremly +powerful interface to the KDE Registry. + + +The KDE Activator (KActivatorKActivator) , which makes accessing CORBA based services +in KDE the easiest thing of the world ;-) . + + +The KDE Naming Service (KNamingKNaming) , which provides a simple but useful +naming service for CORBA Objects. + + + + + + +Using The KDE Daemon In Your Application + +Before we can use any of kdedkded's services, we have to know something about it's +"position" in the KDE and the way it itself and the services can be accessed. + +As kdedkded uses CORBA to communicate with it's clients, your application (as client), +has to + + +link to the kdedkded library, libkdedlibkded. + + +link to libmico + + +initialize the MICO MICO ORB ORB + + + + +The first two points are fixed for all clients, the third one depends on the +specific client. In general you have to choices: + + + +If your application already uses KOM KOM, then you're fine with using +KOMApplicationKOMApplication (as you need it anyway) . + + +If you don't want to use KOM KOM, then you can initialize the ORBA "manually": +CORBA::ORB_ptr orb = CORBA::ORB_init( argc, argv, "mico-local-orb" ); +Please note that when using this construct or similar ones, your application is +not able to act as CORBA server CORBA server if you are using KDE/Qt classes at the +same time. This is due to the fact that the ORB ORB needs it's own event loop, beside +the main Qt event loop. Currently only KOMApplicationKOMApplication, as part of the KDE Object +Model, implements the needed functionality to combine both event loops and thus +making KDE apps able to serve CORBA Objects. + + + + +Although kdedkded uses CORBA extensively, the API is kept simple and free from +complicated CORBA stuff. In fact when talking about kdedkded and it's API not the +kded serverkded server is meant but the KDE Daemon library. This library contains the +interface to the server (for the clients) as well as the whole server functionality. +The reason for this is based on the idea that an application using kdedkded should +not be forced to rely on an existing kded serverkded server binary nor a running server at +all. The following three situations may exist when a client app gets started: + + + +No kdedkded is running and there's no kded serverkded server binary in the path. In this +situation libkdedlibkded will automatically start a local instance of kdedkded in +the application's process. + + +No kdedkded is running but there's a kded serverkded server binary available. Here libkdedlibkded +will start the kded executable and connect to it. + + +kdedkded is already running :-) . The fact that a kdedkded is running is indicated +by a special property on the X Root Window. kdedkded publishes it's IOR IOR +(Interoperable Object Reference) in this property. This also ensures that +a kded kded instance is specific to a X display and therefore to your KDE session. + + + + +To sum it up: libkded libkded will always make sure that the services of kded kded are available +for your client application, no matter in what alien environment the app is +running :-) . And, although you don't have to care about this, you can optionally +control this behaviour of libkded libkded by adding one of the following three commandline arguments commandline arguments +to your app: + + +"-kdedlocal" , which will make libkded libkded always start a process-local +instance of kded and it's services. + + +"-kdedremote" , which will make libkded libkded try to look for a running kded kded +instance before starting a local one. + + +"-kdedior ior&_;here" , which will make libkded libkded connect to the kded server kded server +specified by the given IOR IOR. + + + + +Your actual interface to kded kded and it's services is the KdedInstanceKdedInstance class, +defined in kded&_;instance.h . So if you want to use kded kded (I guess that's why you're +reading this shit ;) ) then make sure to create one single instance +of it, preferably by adding the following line somewhere in the beginning of +your main() : +KdedInstance( argc, argv, _a_reference_to_the_orb_here_ ); +If you're using KOMApplication KOMApplication as application object (make sure to create the +instance before this line) , then you're fine by specifying komapp&_;orb as +reference to the ORB ORB. + +As there is always only one single instance of this class, you can simply access +it by the static self()self() method of the class from anywhere you want. No +need to pass KdedInstanceKdedInstance arguments all around in your program ;-) . + +For further information about KdedInstanceKdedInstance you might want to read +kded&_;instance.hkded&_;instance.h , it's pretty good documented. + + + +KTrader <indexterm remap="idx"><primary>KTrader</primary></indexterm> + +As already mentioned in the introduction, KTrader KTrader gives you access to the registry. +"Now what the hell is the registry?" you might ask. As this is just a documentation +about kded kded/libkded libkded, I can only respond: "Please consult the documentation of/in +libkiolibkio for more information" :-&}; . Just one thing about it here: KTrader KTrader loads +the whole and bloaty registry for you. Thanks to the magic of libkiolibkio the loaded +registry will always be in sync with the "real" registry, the .desktop .desktop files in +the following standard directories (both types, the system wide and the user ones) : + + +applnk + + +mimelnk + + +services + + +servicetypes + + + + +Now over to KTrader KTrader and it's API. Similar to KdedInstanceKdedInstance there can +be only one single instance. The difference is that you don't have to care +about allocating it, just simply get a reference to the KTrader KTrader by calling +the ktrader() method of KdedInstanceKdedInstance . And: don't +even think about deleting the returned reference! Just simply use it and be +happy with it :-) . (hey, kded kded is designed to be easy to use, no need for difficult +stuff...) + +The KTrader KTrader API is even so simple that it contains only two methods ;-) . But +before I describe these methods you have to know something about the kind of +data KTrader KTrader returns. In simple words: You will always get a list of KService KService +objects. More detailed: The returned list is a QValueListQValueList and the +entries are KSharedPtrKSharedPtr's (FIXME: will soon be renamed to QSharedPtr, +as it will become part of Qt.... AFAIK) to KService KService objects. Please +read the corresponding Qt documentation about these two classes. The big advantage +of using these two template classes is that everything becomes easy for you +and that the memory consumption is kept at a minimum . You don't have to care +about pointers, freeing them and cleaning up the list, as long as you use +KTrader::ServicePtrKTrader::ServicePtr variables to hold the KService KService objects and as +long as you use KTrader::OfferListKTrader::OfferList to pass the list around in your +program. So: Remember to always use these two types when dealing with KTrader KTrader! + +Now over to the two methods. + +KTrader::listServices()KTrader::listServices() returns your a list of all available +services in the whole KDE. (no need for further explanations I think...) + +KTrader::query()KTrader::query() is the key method of this beast. It performs a lookup +in the registry database, given your information about what you want to have. +The first argument is the name of the servicetype which all returned services +must implement. If you're unsure about the word "servicetype" , then you can +replace it with "mimetype" , for most, but not all, cases. + +The second argument is an additional constraint expression, which has to be +fulfilled by a service. + +The third argument is a preference expression after which the returned services +will be sorted. The value of the expression has to be numeric. + +The syntax of these two expressions is equal with the language of the standard +CORBA Trader (this is due to the fact that the parsing code is from the COS COS +Trader of MICO MICO) . The language is not very difficult and I don't want to bloat +this documentation with further explanations about it. Please consult your +CORBA literature for more information. Just one thing you have to know: +Comparisons are always done with the properties of the KService KService object, +which are the standard entries (Name, ServiceType, RepoIds, ...) plus +the ones specified in the servicetype declaration and read by KService KService. + +Well, after so much theoretical explanations it's time for some practical example +code: +KTrader::OfferList + ... + //get a reference to the KTrader + KTrader *trader = KdedInstance::self()->ktrader(); + + ... + //will return a list of all services which implement the servicetype + //named "text/plain" + KTrader::OfferList offers = trader->query( "text/plain" ); + + + ... + //will return a list of all services which implement the servicetype + //named "image/gif" and which have the AllowAsDefault property set true + KTrader::OfferList offers = trader->query( "image/gif", "AllowAsDefault == TRUE" ); + + ... + //will return KSpread ;-) + KTrader::OfferList offers = trader->query( "KOfficeDocument", "(Exec == 'kspread') and (Path != '/opt/gnome/bin')" ); + + ... + //will return a list of all services which implement the servicetype + //named "BlahFoo" and which will be sorted (from lowest to highest) by + //the value of the property "Price" , declared in the servicetype + //declaration of BlahFoo. + KTrader::OfferList offers = trader->query( "BlahFoo", QString::null, "min Price" ); + + +Please note that KTrader KTrader, since it queries libkiolibkio for services, will +always return services sorted by the user's preferences for the specific +servicetype. These preferences can be specified in the file "profilerc" . + + +KTraderServiceProvider + +This section requires to be familiar with libkiolibkio and it is meant for everybody who +wants to use KRun KRun in his application. + +KRun KRun requires a fully loaded registry in order to resolve mimetype <-> application +bindings. A fully loaded registry means that you need a KServiceTypeFactoryKServiceTypeFactory and +a KServiceFactory, which both load the appropriate KServiceTypeKServiceTypeKServiceKService objects. +Now the KServiceType information doesn't need that much memory, but the KService KService +object really eat loooots of it. And isn't it kind of stupid to load this information +if this is already done by kded kded? Yes, it is ;-) . + +What we would need is to make KRun KRun query KTrader KTrader for KService KService data, instead of +directly using KServiceTypeProfile KServiceTypeProfile. Fortunately KRun KRun is flexible enough for this, +we just need a re-implementation of the KServiceProvider KServiceProvider, defined in krun.hkrun.h +and used by KRun KRun. Guess what, but KTrader KTrader provides you this re-implementation :-) . +Just have a look at the end of ktrader.hktrader.h. + +To sum it up: The following line makes KRun KRun query kded kded, in your application: + ... + //place this somewhere BEFORE the first usage of KRun, preferable somewhere + //in main() + KTraderServiceProvider serviceProvider; + ... + +That's all, except that you must have a KdedInstanceKdedInstance in order to be +able to use it. + + + + +KActivator <indexterm remap="idx"><primary>KActivator</primary></indexterm> + +One often mentioned problem, when talking about applications which provide +their services via CORBA, is how to start and access these services. Solutions +like making apps write the IOR IOR of an object somewhere into a file in the +filesystem or similar approaches are just hacks ;-) . Better use KActivator KActivator, +since it can automatically, on demand, start servers for you or use already +running ones. This is accomplished with the help of the mediators for BOA/POA BOA/POA +and the IMR IMR (Implementation Repository), both provided by MICO MICO. Fortunately +you don't have to deal with IMR entries and the mediators. + +Before you can use KActivator KActivator to start a server for you, you have to register +the server's service. There are two possible ways, the last one is highly +recommended though: + + + +Register and unregister it manually, by using the two corresponding +methods of the KActivator KActivator. + + +Go the smart way and provide the necessary information in a .desktop .desktop file. +Fortunately KService KService supports the necessary properties, like repository +ids, activation mode and others. + + + + +For the second point it's important that the .desktop .desktop file is available for +KRegistry KRegistry, by placing it in a directory which gets scanned by the registry. +If your application has already a .desktop .desktop file in the applnk tree for example, +then you're fine with adding the necessary fields in there. Otherwise the +directory named "services" (either system-wide or user-local) is the best place +for it. If you provide the CORBA service information this way, then KActivator KActivator +will automatically detect it and register it automatically at the IMR. This +means that it is immediately available for KActivator KActivator and thus to your client app. +And since KRegistry KRegistry is such a cool thing :-) , you can do all this even at +run-time, when kded kded is running. Just place the .desktop .desktop file in one of the +right directories for it and KActivator KActivator will update the IMR on-the-fly. The +same applies obviously for just deleted or modified .desktop .desktop files, which will +make KActivator KActivator adjust the IMR. Now you might get the idea why this is the +preferred way :-)) . + +Now that you know how to register CORBA services you will want to know how +to "access" it. activateService() is your friend here. Simply pass +it the name of the service, the repository id of the server object and the +object's tag and it will return you a functional object reference. That's all :-) + +Depending on the service's activation mode, KActivator KActivator will either return a reference +to an already running server or it will start a new instance. + +One note about the returned object reference: This is a virtual reference, +which means that that server object is started when the first call is invoked +on this reference, thus making your server get started "lazy", only on-demand. +But that's just additional information, you don't have to deal and know about +it at all. Just be happy with your functional object reference :-) . + +Want some examples? Here we go: + +This is how a .desktop .desktop file could look like, assuming that the commandline +"--server" starts the app in CORBA server CORBA server mode: +Name=MyApp +Exec=fooblah +CORBAExec=fooblah --server +X-KDE-RepoIds=IDL:Foo/Blah:1.0#MyFoo +X-KDE-ActivationMode=shared + + +If KActivator KActivator "gets" this file, it will register the service and then you're +able to do something like this: + ... + KActivator *activator = KdedInstance::self()->kactivator(); + ... + CORBA::Object_var obj = activator->activateServer( "MyApp", "IDL:Foo/Blah:1.0", "MyFoo ); + ... + + +The above example will either start a new fooblah instance or connect to a running +one. + +For further information please have a look at the examples in kdelibs/corba/tutorials/kded . +The example application there registers the server manually via registerService . + +Please note: The server has to be started by kded kded in order to make KActivator KActivator +return a reference to a running one. Executing "fooblah" from somewhere else +will not make KActivator KActivator use it. This is a problem for persistent +servers like KDesktop KDesktop for example. But there's a solution available, just read +the next chapter about the KDE Naming Service :-) . + + + +KNaming <indexterm remap="idx"><primary>KNaming</primary></indexterm> + +The KDE Naming Service, KNaming KNaming, is also a very simple service, but it's pretty +useful and in some cases a very nice solution to make a CORBA client connect to +a persistent CORBA server CORBA server. + +With KNaming KNaming you can bind a freely chooseable name to a CORBA object. And since +kded kded is system (session) wide available, your object becomes available for any +client which is able to connect to kded kded. + +There's not much to explain here :-&}; , so I suggest having a look at the KNaming KNaming +API, in knaming.hknaming.h. + +Example code can be, again, found in kdelibs/corba/tutorials/kded . Here's just +a short real example situation: + +Just think of KDesktop KDesktop, that nice app providing your background desktop icons. +It provides some functionality via CORBA, just have a look at kdesktop.idl to +see what I'm talking about. Now the problem for KDesktop KDesktop is: How can it provide +this service to other apps in the system? Writing an IOR IOR into some file is no +clean solution IMHO, and using KActivator KActivator doesn't work because KDesktop KDesktop does not +get started by kded kded but by the startkde script on KDE startup. So we find a better +way and make KDesktop KDesktop register it's object at KNaming KNaming. This is done by the following +lines: + ... + KNaming *knaming = KdedInstance::self()->knaming(); + naming->bind( "KDesktop", kdesktop_object_here ); + ... + +Well, I told you a lie ;) : KNaming KNaming does not really bind to "KDesktop KDesktop" but +instead to "IDL:KDesktopIf:1.0" , but since there's no naming convention +for the naming I have choosen a more readable name, IMHO of course :-) (don't +mind me David :] ) . I personally prefer human readable names ;) , in contrary +to repository ids with tags. + +Back to KNaming KNaming and KDesktop KDesktop: Now any client application, kfmclient for example, +can "connect" to KDesktop KDesktop. Just like this: + .. + KNaming *knaming = KdedInstance::self()->knaming(); + ... + CORBA::Object_var obj = knaming->resolve( "KDesktop" ); + KDesktopIf_var kdesky = KDesktopIf::_narrow( obj ); + kdesky->selectAll(); //let's confuse the user by selecting all icons ;-) + ... + + + + + +DCOP: Desktop COmmunications Protocol + +Preston Brown <pbrown@kde.org> + +Version 1.0, October 14, 1999 + +Howto for the KDE Desktop COmmunincations Protocol implementation + + +Motivation and Background + +The motivation behind building a protocol like DCOP is simple. For +the past year, we have been attempting to enable interprocess +communication between KDE applications. KDE already has an extremely +simple IPC mechanism called KWMcom, which is (was!) used for communicating +between the panel and the window manager for instance. It is about as +simple as it gets, passing messages via X Atoms. For this reason it +is limited in the size and complexity of the data that can be passed +(X atoms must be small to remain efficient) and it also makes it so +that X is required. CORBA was thought to be a more effective IPC/RPC +solution. However, after a year of attempting to make heavy use of +CORBA in KDE, we have realized that it is a bit slow and memory +intensive for simple use. It also has no authentication available. + +What we really needed was an extremely simple protocol with basic +authorization, along the lines of MIT-MAGIC-COOKIE, as used by X. It +would not be able to do NEARLY what CORBA was able to do, but for the +simple tasks required it would be sufficient. Some examples of such +tasks might be an application sending a message to the panel saying, +"I have started, stop displaying the 'application starting' wait +state," or having a new application that starts query to see if any +other applications of the same name are running. If they are, simply +call a function on the remote application to create a new window, +rather than starting a new process. + + + +Implementation + +DCOP is a simple IPC/RPC mechanism built to operate over sockets. +Either unix domain sockets or tcp/ip sockets are supported. DCOP is +built on top of the Inter Client Exchange (ICE) protocol, which comes +standard as a part of X11R6 and later. It also depends on Qt, but +beyond that it does not require any other libraries. Because of this, +it is extremely lightweight, enabling it to be linked into all KDE +applications with low overhead. + + +Model + +The model is simple. Each application using DCOP is a client. They +communicate to each other through a DCOP server, which functions like +a traffic director, dispatching messages/calls to the proper +destinations. All clients are peers of each other. + +Two types of actions are possible with DCOP: "send and forget" +messages, which do not block, and "calls," which block waiting for +some data to be returned. + +Any data that will be sent is serialized (marshalled, for you CORBA +types) using the built-in QDataStream operators available in all of the +Qt classes. This is fast and easy. Currently, there is no +type checking or parameter checking available for RPC, but this may be +provided at some time in the future in the form of a simple IDL-like +compiler (NOTE: 5 days later the IDL compiler is already started; +look in dcopidl/). Until that is available, you will have to code +some things by hand that normally the compiler or CORBA take care of +automatically, but it is not a lot of work. + + + +Establishing the Connection + +KApplication has gained a method called "KApplication::dcopClient()" +which returns a pointer to a DCOPClient instance. The first time this +method is called, the client class will be created. DCOPClients have +unique identifiers attached to them which are based on what +KApplication::name() returns. In fact, if there is only a single +instance of the program running, the appId will be equal to +KApplication::name(). + +To actually enable DCOP communication to begin, you must use +DCOPClient::attach(). This will attempt to attach to the DCOP server. +If no server is found or there is any other type of error, attach() +will return false. Applications which are DCOP-enabled should +probably do something like this at startup time: + +client = kApp->dcopClient(); +if (!client->attach()) { + QMessageBox::error(this, i18n("Error connecting to DCOP server"), + i18n("There was an error connecting to the Desktop\n" + "communications server. Please make sure that\n" + "the 'dcopserver' process has been started, and\n" + "then try again.\n")); + exit(1); +} + + +After connecting with the server via DCOPClient::attach(), you need to +register this appId with the server so it knows about you. Otherwise, +you are communicating anonymously. Use the +DCOPClient::registerAs(const QCString &&;name) to do so. In the simple +case: +/* + * returns the appId that is actually registered, which _may_ be + * different from what you passed + */ +appId = client->registerAs(kApp->name()); + + +If you never retrieve the DCOPClient pointer from KApplication, the +object will not be created and thus there will be no memory overhead. + +You may also detach from the server by calling DCOPClient::detach(). +If you wish to attach again you will need to re-register as well. If +you only wish to change the ID under which you are registered, simply +call DCOPClient::registerAs() with the new name. + + + +Sending Data to a Remote Application + +To actually communicate, you have one of two choices. You may either +call the "send" or the "call" method. Both methods require three +identification parameters: an application identifier, a remote object, +a remote function. Sending is asynchronous (i.e. it returns immediately) +and may or may not result in your own application being sent a message at +some point in the future. Then "send" requires one and "call" requires +two data parameters. + +The remote object must be specified as an object hierarchy. That is, +if the toplevel object is called "fooObject" and has the child +"barObject", you would reference this object as "fooObject/barObject". +Functions must be described by a full function signature. If the +remote function is called "doIt", and it takes an int, it would be +described as "doIt(int)". Please note that the return type is not +specified here, as it is not part of the function signature (or at +least the C++ understanding of a function signature). You will get +the return type of a function back as an extra parameter to +DCOPClient::call(). See the section on call() for more details. + +In order to actually get the data to the remote client, it must be +"serialized" via a QDataStream operating on a QByteArray. This is how +the data parameter is "built". A few examples will make clear how this +works. + +Say you want to call "doIt" as described above, and not block (or wait +for a response). You will not receive the return value of the remotely +called function, but you will not hang while the RPC is processed either. +The return value of send() indicates whether DCOP communication succeeded +or not. + +QByteArray params; +QDataStream stream(params, IO_WriteOnly); +params << 5; +if (!client->send("someAppId", "fooObject/barObject", "QString doIt(int)", + params)) + qDebug("there was some error using DCOP."); + + +OK, now let's say we wanted to get the data back from the remotely +called function. You have to execute a call() instead of a send(). +The returned value will then be available in the data parameter "reply". +The actual return value of call() is still whether or not DCOP +communication was successful. + +QByteArray params, reply; +QCString replyType; +QDataStream stream(params, IO_WriteOnly); +params << 5; +if (!client->call("someAppId", "fooObject/barObject", "doIt(int)", + params, replyType, reply)) + qDebug("there was some error using DCOP."); +else { + QDataStream stream2(reply, IO_ReadOnly); + if (replyType == "QString") { + QString result; + stream2 >> result; + print("the result is: %s",result.latin1()); + } else + qDebug("doIt returned an unexpected type of reply!"); +} + + + + + +Receiving Data via DCOP + +Currently the only real way to receive data from DCOP is to multiply +inherit from the normal class that you are inheriting (usually some +sort of QWidget subclass or QObject) as well as the DCOPObject class. +DCOPObject provides one very important method: DCOPObject::process(). +This is a pure virtual method that you must implement in order to +process DCOP messages that you receive. It takes a function +signature, QByteArray of parameters, and a reference to a QByteArray +for the reply data that you must fill in. + +Think of DCOPObject::process() as a sort of dispatch agent. In the +future, there will probably be a precompiler for your sources to write +this method for you. However, until that point you need to examine +the incoming function signature and take action accordingly. Here is +an example implementation. + +bool BarObject::process(const QCString &&;fun, const QByteArray &&;data, + QCString &&;replyType, QByteArray &&;replyData) +{ + if (fun == "doIt(int)") { + QDataStream stream(data, IO_ReadOnly); + int arg; + QString res; + stream >> arg; + res = self->doIt(arg); + QDataStream stream2(replyData, IO_WriteOnly); + stream2 << res; + replyType = "QString"; + return true; + } else { + qDebug("unknown function call to BarObject::process()"); + return false; + } +} + + + + + +Conclusion + +Hopefully this document will get you well on your way into the world +of inter-process communication with KDE! Please direct all comments +and/or suggestions to Preston Brown <pbrown@kde.org>. + + +Performance Tests + +A few back-of-the-napkin tests folks: + +Code: +#include <kapp.h> + +int main(int argc, char **argv) +{ + KApplication *app; + + app = new KApplication(argc, argv, "testit"); + return app->exec(); +} + +Compiled with: + +g++ -O2 -o testit testit.cpp -I$QTDIR/include -L$QTDIR/lib -lkdecore + +on Linux yields the following memory use statistics: +VmSize: 8076 kB +VmLck: 0 kB +VmRSS: 4532 kB +VmData: 208 kB +VmStk: 20 kB +VmExe: 4 kB +VmLib: 6588 kB + + + +If I create the KApplication's DCOPClient, and call attach() and +registerAs(), it changes to this: + +VmSize: 8080 kB +VmLck: 0 kB +VmRSS: 4624 kB +VmData: 208 kB +VmStk: 20 kB +VmExe: 4 kB +VmLib: 6588 kB + + + +Basically it appears that using DCOP causes 100k more memory to be +resident, but no more data or stack. So this will be shared between all +processes, right? 100k to enable DCOP in all apps doesn't seem bad at +all. :) + +OK now for some timings. Just creating a KApplication and then exiting +(i.e. removing the call to KApplication::exec) takes this much time: + +0.28user 0.02system 0:00.32elapsed 92&%;CPU (0avgtext+0avgdata 0maxresident)k +0inputs+0outputs (1084major+62minor)pagefaults 0swaps + +I.e. about 1/3 of a second on my PII-233. Now, if we create our DCOP +object and attach to the server, it takes this long: + +0.27user 0.03system 0:00.34elapsed 87&%;CPU (0avgtext+0avgdata 0maxresident)k +0inputs+0outputs (1107major+65minor)pagefaults 0swaps + +I.e. about 1/3 of a second. Basically DCOPClient creation and attaching +gets lost in the statistical variation ("noise"). I was getting times +between .32 and .48 over several runs for both of the example programs, so +obviously system load is more relevant than the extra two calls to +DCOPClient::attach and DCOPClient::registerAs, as well as the actual +DCOPClient constructor time. + + + + + +Copyright + + +KDevelop Copyright 1998, 1999, 2000 The KDevelop Team. + +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., 675 Mass Ave, Cambridge, MA 02139, USA. + + + +Each chapter of this handbook contains the documentation of the according authors, therefore the copyright remains on the side of +those. This handbook has been assembled by agreement with each author about the usage of his documentation. Reprint is therefore only +allowed on agreement with the KDevelop Team and the authors of each chapter. + +KDevelop is Copyright 1998,1999,2000 The KDevelop Team. + +This handbook itself is part of the KDevelop Intergrated Development environment. + +The KDE Developer's mini-HOWTO is copyright of David Sweet.<dsweet@chaos.umd.edu> + +KDE KOM / OpenParts is copyright of Torben Weis <weis@kde.org> and +Bernd Wuebben <wuebben@kde.org> + +Using KDE KOM / OpenParts HOWTO and The KDE Daemon are copyright of Simon +Hausmann <hausmann@kde.org> + +DCOP: Desktop COmmunications Protocol is copyright of Preston Brown <pbrown@kde.org> + + +Glossary + + + +CORBA + +Common Object Request Broker Architecture, standard introduced by the OMG for distributed components that can be used +independently of platform, implementation and operating system. CORBA itself is only the standard which requires a corresponding +implementation that fulfills the requirements of the standard. KDE uses the MICO implementation, which provides a C++ interface to +CORBA services. + + + +BOA + +Basic Object Adapter. Interface defined by the OMG, which offers fundamental operations for managing remote objects. + + + +COS + +Common Object Services. Collection of standard services to simplify developing standard applications. Naming, Event and +Lifecycle-services are a part of the COS collection. + + + +DII + +Dynamic Invocation Interface, interface to execute dynamic invocations in opposition to static invocations (clent side) + + + +Dynamic Invocation + +Creation and execution of a request, whose signature is probably first known at runtime in opposition to +static invocation. + + + +DSI + +Dynamic Skeleton Interface. Server side in opposition to a DII. + + + +GIOP + +General-Inter-ORB-Protocol + + + +IIOP + +Internet-Inter-ORB-Protocol + + + +IMR + +Implementation Repository + + + +IOR + +Interoperable Object Reference. The reference is specificated in the two parts GIOP and IIOP. + + + +IDL + +Interface Definition Language. C++-Syntax similar programming language to describe object interfaces. The implementation +translates IDL's to their target programming language. + + + +Interface + +in CORBA, all exported methods and attributes of an object are called an interface, whereby these are defined in IDL. +Elements which are not specified in the interface are not accessible by clients. + + + +IOP + +Interoperability Profile + + + +MICO + +free implementation of the CORBA standard. KDE's KOM/OpenParts technology is based on the MICO implementation. + + + +OMA + +Object Management Architecture + + + +OMG + +Object Management Group + + + +ORB + +Object Request Broker, abstract name for the communication service between clients and remote objects. + + + +POA + +Portable Object Adapter. The POA extends the features the BOA provides; introduced in the CORBA 2.2 standard. + + + + + + + + diff -Nru kdevelop-3.9.98/doc/addendum/Makefile.am kdevelop-4.0.1/doc/addendum/Makefile.am --- kdevelop-3.9.98/doc/addendum/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/addendum/Makefile.am 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,4 @@ +EXTRA_DIST = index.docbook + +KDE_LANG = en +KDE_DOCS = AUTO diff -Nru kdevelop-3.9.98/doc/cref/index.html kdevelop-4.0.1/doc/cref/index.html --- kdevelop-3.9.98/doc/cref/index.html 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/cref/index.html 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,24 @@ + + + + + + + +  +

+ERROR:

+  +

+The C/C++ Reference is not installed.  Please get the package "c_c++_reference.tar.gz" +from the KDevelop Homepage at

+ +

+www.kdevelop.org

+ +

+and copy it to your KDE-directory.   Untar it with  "tar +zxvf  c_c++_reference.tar.gz "  to install the reference.

+ + + diff -Nru kdevelop-3.9.98/doc/cref/Makefile.am kdevelop-4.0.1/doc/cref/Makefile.am --- kdevelop-3.9.98/doc/cref/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/cref/Makefile.am 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,8 @@ +EXTRA_DIST =index.html + +install-data-local: + $(mkinstalldirs) $(kde_htmldir)/en/kdevelop/reference/C/ + $(INSTALL_DATA) $(srcdir)/index.html $(kde_htmldir)/en/kdevelop/reference/C/cref.html + +uninstall-local: + -rm -f $(kde_htmldir)/en/kdevelop/reference/C/cref.html diff -Nru kdevelop-3.9.98/doc/documentation kdevelop-4.0.1/doc/documentation --- kdevelop-3.9.98/doc/documentation 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/documentation 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,50 @@ +[Contents] +KDevelopEntries=welcome,manual,programming,tutorial,kde_libref,reference +LibrariesEntries=qt,kdecore,kdeui,kfile,khtml,kab,kspell,kio +[KDevelop-welcome] +Name=Welcome! +Name[de]=Willkommen! +Path=welcome/index.html +Expandable=false +[KDevelop-manual] +Name=User Manual +Name[de]=Handbuch +Path=index.html +Expandable=true +[KDevelop-programming] +Name=Programming Handbook +Name[de]=Handbuch +Path=programming/index.html +Expandable=true +[KDevelop-tutorial] +Name=Tutorials +Name[de]=Tutorials +Path=tutorial/index.html +Expandable=true +[KDevelop-kde_libref] +Name=KDE Library Reference +Path=kde_libref/index.html +Expandable=true +[KDevelop-reference] +Name=C/C++ Reference +Path=reference/C/cref.html +Expandable=false +[Libraries-qt] +Name=Qt Library +[Libraries-kdecore] +Name=KDE Core Library +Name[de]=KDE Core Bibliothek +[Libraries-kdeui] +Name=KDE UI Library +[Libraries-kfile] +Name=KDE File Dialog +[Libraries-khtml] +Name=KDE HTML Widget +[Libraries-kab] +Name=KDE Addressbook +[Libraries-kspell] +Name=KDE Spellchecker +[Libraries-kparts] +Name=KDE KParts Library +[Libraries-kio] +Name=KDE IO Library diff -Nru kdevelop-3.9.98/doc/kde_libref/index.cvlog kdevelop-4.0.1/doc/kde_libref/index.cvlog --- kdevelop-3.9.98/doc/kde_libref/index.cvlog 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/kde_libref/index.cvlog 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,1683 @@ +=== LinuxDoc conversion errors =================== +-> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 2 `BOOK' 0 `book' +! Normally this should not be a problem, but check anyway ... + 5 `HTMLURL' 0 `
' + 6 `' 0 `' +! Check the authorname ( instead of ?) + 6 `INST' 0 `corpauthor' +! Use affiliation, only corpauthor, or leave this out + 9 `REF' 0 `' + 13 `TOC' 0 `' + 66 `BF' 0 `' +! Check and correct manually + 66 `BF' 0 `' +! Check and correct manually + 66 `BF' 0 `' +! Check and correct manually + 127 `TT' 0 `' +! Check and correct manually + 127 `TT' 0 `' +! Check and correct manually + 137 `TT' 0 `' +! Check and correct manually + 138 `TT' 0 `' +! Check and correct manually + 139 `TT' 0 `' +! Check and correct manually + 145 `TT' 0 `' +! Check and correct manually + 145 `TT' 0 `' +! Check and correct manually + 145 `TT' 0 `' +! Check and correct manually + 145 `TT' 0 `' +! Check and correct manually + 153 `TT' 0 `' +! Check and correct manually + 154 `TT' 0 `' +! Check and correct manually + 154 `TT' 0 `' +! Check and correct manually + 158 `TT' 0 `' +! Check and correct manually + 166 `TT' 0 `' +! Check and correct manually + 169 `BF' 0 `' +! Check and correct manually + 171 `BF' 0 `' +! Check and correct manually + 171 `TT' 0 `' +! Check and correct manually + 173 `TT' 0 `' +! Check and correct manually + 173 `TT' 0 `' +! Check and correct manually + 177 `BF' 0 `' +! Check and correct manually + 177 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 179 `BF' 0 `' +! Check and correct manually + 188 `BF' 0 `' +! Check and correct manually + 188 `TT' 0 `' +! Check and correct manually + 190 `BF' 0 `' +! Check and correct manually + 197 `BF' 0 `' +! Check and correct manually + 197 `TT' 0 `' +! Check and correct manually + 199 `BF' 0 `' +! Check and correct manually + 210 `TT' 0 `' +! Check and correct manually + 210 `TT' 0 `' +! Check and correct manually + 213 `TT' 0 `' +! Check and correct manually + 216 `TT' 0 `' +! Check and correct manually + 216 `TT' 0 `' +! Check and correct manually + 216 `TT' 0 `' +! Check and correct manually + 216 `TT' 0 `' +! Check and correct manually + 222 `TT' 0 `' +! Check and correct manually + 222 `TT' 0 `' +! Check and correct manually + 227 `TT' 0 `' +! Check and correct manually + 227 `TT' 0 `' +! Check and correct manually + 227 `TT' 0 `' +! Check and correct manually + 230 `TT' 0 `' +! Check and correct manually + 230 `TT' 0 `' +! Check and correct manually + 233 `TT' 0 `' +! Check and correct manually + 251 `TT' 0 `' +! Check and correct manually + 262 `TT' 0 `' +! Check and correct manually + 262 `TT' 0 `' +! Check and correct manually + 262 `TT' 0 `' +! Check and correct manually + 265 `TT' 0 `' +! Check and correct manually + 265 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 265 `TT' 0 `' +! Check and correct manually + 265 `TT' 0 `' +! Check and correct manually + 275 `TT' 0 `' +! Check and correct manually + 275 `TT' 0 `' +! Check and correct manually + 311 `TT' 0 `' +! Check and correct manually + 312 `TT' 0 `' +! Check and correct manually + 317 `TT' 0 `' +! Check and correct manually + 333 `TT' 0 `' +! Check and correct manually + 334 `TT' 0 `' +! Check and correct manually + 335 `TT' 0 `' +! Check and correct manually + 336 `TT' 0 `' +! Check and correct manually + 343 `TT' 0 `' +! Check and correct manually + 344 `TT' 0 `' +! Check and correct manually + 345 `TT' 0 `' +! Check and correct manually + 346 `TT' 0 `' +! Check and correct manually + 349 `TT' 0 `' +! Check and correct manually + 349 `TT' 0 `' +! Check and correct manually + 359 `TT' 0 `' +! Check and correct manually + 364 `TT' 0 `' +! Check and correct manually + 364 `TT' 0 `' +! Check and correct manually + 364 `TT' 0 `' +! Check and correct manually + 396 `TT' 0 `' +! Check and correct manually + 403 `LIST' 0 `' +! Would be better? (uses !) + 404 `HTMLURL' 0 `' + 405 `HTMLURL' 0 `' + 414 `TT' 0 `' +! Check and correct manually + 414 `TT' 0 `' +! Check and correct manually + 414 `TT' 0 `' +! Check and correct manually + 414 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 417 `TT' 0 `' +! Check and correct manually + 417 `TT' 0 `' +! Check and correct manually + 417 `TT' 0 `' +! Check and correct manually + 421 `TT' 0 `' +! Check and correct manually + 425 `TT' 0 `' +! Check and correct manually + 425 `TT' 0 `' +! Check and correct manually + 425 `TT' 0 `' +! Check and correct manually + 425 `TT' 0 `' +! Check and correct manually + 425 `TT' 0 `' +! Check and correct manually + 430 `TT' 0 `' +! Check and correct manually + 435 `BF' 0 `' +! Check and correct manually + 435 `TT' 0 `' +! Check and correct manually + 435 `TT' 0 `' +! Check and correct manually + 435 `TT' 0 `' +! Check and correct manually + 435 `TT' 0 `' +! Check and correct manually + 440 `BF' 0 `' +! Check and correct manually + 440 `TT' 0 `' +! Check and correct manually + 440 `TT' 0 `' +! Check and correct manually + 440 `TT' 0 `' +! Check and correct manually + 440 `TT' 0 `' +! Check and correct manually + 445 `BF' 0 `' +! Check and correct manually + 445 `TT' 0 `' +! Check and correct manually + 445 `TT' 0 `' +! Check and correct manually + 445 `TT' 0 `' +! Check and correct manually + 450 `BF' 0 `' +! Check and correct manually + 450 `TT' 0 `' +! Check and correct manually + 450 `TT' 0 `' +! Check and correct manually + 455 `HTMLURL' 0 `' + 460 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 460 `TT' 0 `' +! Check and correct manually + 460 `TT' 0 `' +! Check and correct manually + 463 `TT' 0 `' +! Check and correct manually + 463 `TT' 0 `' +! Check and correct manually + 463 `TT' 0 `' +! Check and correct manually + 469 `TT' 0 `' +! Check and correct manually + 472 `TT' 0 `' +! Check and correct manually + 475 `TT' 0 `' +! Check and correct manually + 475 `TT' 0 `' +! Check and correct manually + 476 `TT' 0 `' +! Check and correct manually + 476 `TT' 0 `' +! Check and correct manually + 477 `TT' 0 `' +! Check and correct manually + 480 `TT' 0 `' +! Check and correct manually + 491 `TT' 0 `' +! Check and correct manually + 491 `TT' 0 `' +! Check and correct manually + 491 `TT' 0 `' +! Check and correct manually + 491 `TT' 0 `' +! Check and correct manually + 491 `TT' 0 `' +! Check and correct manually + 495 `TT' 0 `' +! Check and correct manually + 500 `TT' 0 `' +! Check and correct manually + 505 `TSCREEN' 0 `' + 507 `VERB' 0 `' +! Because it is in TSCREEN + 509 `TT' 0 `' +! Check and correct manually + 509 `TT' 0 `' +! Check and correct manually + 509 `TT' 0 `' +! Check and correct manually + 509 `TT' 0 `' +! Check and correct manually + 509 `TT' 0 `' +! Check and correct manually + 514 `TT' 0 `' +! Check and correct manually + 516 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 518 `BF' 0 `' +! Check and correct manually + 519 `BF' 0 `' +! Check and correct manually + 520 `BF' 0 `' +! Check and correct manually + 521 `BF' 0 `' +! Check and correct manually + 522 `BF' 0 `' +! Check and correct manually + 524 `BF' 0 `' +! Check and correct manually + 525 `BF' 0 `' +! Check and correct manually + 526 `BF' 0 `' +! Check and correct manually + 527 `BF' 0 `' +! Check and correct manually + 529 `BF' 0 `' +! Check and correct manually + 530 `BF' 0 `' +! Check and correct manually + 533 `BF' 0 `' +! Check and correct manually + 536 `TT' 0 `' +! Check and correct manually + 536 `TT' 0 `' +! Check and correct manually + 536 `TSCREEN' 0 `' + 541 `VERB' 0 `' +! Because it is in TSCREEN + 543 `TT' 0 `' +! Check and correct manually + 547 `TT' 0 `' +! Check and correct manually + 547 `TT' 0 `' +! Check and correct manually + 547 `TT' 0 `' +! Check and correct manually + 547 `TT' 0 `' +! Check and correct manually + 547 `TT' 0 `' +! Check and correct manually + 547 `TT' 0 `' +! Check and correct manually + 547 `TT' 0 `' +! Check and correct manually + 554 `COMMENT' 0 `note' +! Too conspicuous for an ex-comment. Find a better element! (note that does not render its content in HTML)! + 554 `TT' 0 `' +! Check and correct manually + 554 `TT' 0 `' +! Check and correct manually + 554 `TT' 0 `' +! Check and correct manually + 554 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 563 `TT' 0 `' +! Check and correct manually + 563 `TT' 0 `' +! Check and correct manually + 563 `TT' 0 `' +! Check and correct manually + 563 `TT' 0 `' +! Check and correct manually + 563 `TT' 0 `' +! Check and correct manually + 569 `TT' 0 `' +! Check and correct manually + 569 `TT' 0 `' +! Check and correct manually + 573 `TT' 0 `' +! Check and correct manually + 573 `TT' 0 `' +! Check and correct manually + 575 `TT' 0 `' +! Check and correct manually + 575 `TT' 0 `' +! Check and correct manually + 579 `TT' 0 `' +! Check and correct manually + 579 `TT' 0 `' +! Check and correct manually + 579 `TT' 0 `' +! Check and correct manually + 584 `TT' 0 `' +! Check and correct manually + 584 `TT' 0 `' +! Check and correct manually + 588 `TT' 0 `' +! Check and correct manually + 592 `TT' 0 `' +! Check and correct manually + 592 `TT' 0 `' +! Check and correct manually + 598 `TSCREEN' 0 `' + 600 `VERB' 0 `' +! Because it is in TSCREEN + 602 `TT' 0 `' +! Check and correct manually + 602 `TT' 0 `' +! Check and correct manually + 602 `TT' 0 `' +! Check and correct manually + 602 `TT' 0 `' +! Check and correct manually + 607 `TT' 0 `' +! Check and correct manually + 607 `TT' 0 `' +! Check and correct manually + 611 `TT' 0 `' +! Check and correct manually + 611 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 617 `TT' 0 `' +! Check and correct manually + 617 `TT' 0 `' +! Check and correct manually + 621 `TT' 0 `' +! Check and correct manually + 621 `TT' 0 `' +! Check and correct manually + 621 `TT' 0 `' +! Check and correct manually + 621 `TT' 0 `' +! Check and correct manually + 621 `TT' 0 `' +! Check and correct manually + 621 `TT' 0 `' +! Check and correct manually + 621 `TT' 0 `' +! Check and correct manually + 621 `TT' 0 `' +! Check and correct manually + 630 `TT' 0 `' +! Check and correct manually + 630 `TT' 0 `' +! Check and correct manually + 630 `TT' 0 `' +! Check and correct manually + 630 `TT' 0 `' +! Check and correct manually + 636 `VERB' 0 `' +! Check and correct manually + 640 `TT' 0 `' +! Check and correct manually + 640 `TT' 0 `' +! Check and correct manually + 640 `TT' 0 `' +! Check and correct manually + 652 `TT' 0 `' +! Check and correct manually + 706 `CODE' 0 `' +! Because it contains a newline character + 739 `BF' 0 `' +! Check and correct manually + 742 `TT' 0 `' +! Check and correct manually + 742 `TT' 0 `' +! Check and correct manually + 743 `BF' 0 `' +! Check and correct manually + 744 `BF' 0 `' +! Check and correct manually + 747 `TT' 0 `' +! Check and correct manually + 762 `TT' 0 `' +! Check and correct manually + 762 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 762 `TT' 0 `' +! Check and correct manually + 765 `TT' 0 `' +! Check and correct manually + 765 `TT' 0 `' +! Check and correct manually + 765 `TT' 0 `' +! Check and correct manually + 780 `CODE' 0 `' +! Because it contains a newline character + 783 `TT' 0 `' +! Check and correct manually + 783 `COMMENT' 0 `note' +! Too conspicuous for an ex-comment. Find a better element! (note that does not render its content in HTML)! + 783 `TT' 0 `' +! Check and correct manually + 783 `TT' 0 `' +! Check and correct manually + 790 `TT' 0 `' +! Check and correct manually + 802 `CODE' 0 `' +! Because it contains a newline character + 804 `TT' 0 `' +! Check and correct manually + 804 `TT' 0 `' +! Check and correct manually + 804 `TT' 0 `' +! Check and correct manually + 804 `TT' 0 `' +! Check and correct manually + 812 `TT' 0 `' +! Check and correct manually + 812 `TT' 0 `' +! Check and correct manually + 812 `TT' 0 `' +! Check and correct manually + 815 `TT' 0 `' +! Check and correct manually + 819 `TT' 0 `' +! Check and correct manually + 820 `TT' 0 `' +! Check and correct manually + 821 `BF' 0 `' +! Check and correct manually + 822 `BF' 0 `' +! Check and correct manually + 823 `TT' 0 `' +! Check and correct manually + 823 `TT' 0 `' +! Check and correct manually + 824 `TT' 0 `' +! Check and correct manually + 846 `CODE' 0 `' +! Because it contains a newline character + 848 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 848 `TT' 0 `' +! Check and correct manually + 848 `TT' 0 `' +! Check and correct manually + 855 `TT' 0 `' +! Check and correct manually + 864 `TT' 0 `' +! Check and correct manually + 866 `TSCREEN' 0 `' + 871 `VERB' 0 `' +! Because it is in TSCREEN + 873 `TT' 0 `' +! Check and correct manually + 873 `TT' 0 `' +! Check and correct manually + 873 `TT' 0 `' +! Check and correct manually + 877 `COMMENT' 0 `note' +! Too conspicuous for an ex-comment. Find a better element! (note that does not render its content in HTML)! + 877 `TT' 0 `' +! Check and correct manually + 877 `TT' 0 `' +! Check and correct manually + 877 `TT' 0 `' +! Check and correct manually + 877 `TT' 0 `' +! Check and correct manually + 877 `TT' 0 `' +! Check and correct manually + 887 `TT' 0 `' +! Check and correct manually + 893 `TT' 0 `' +! Check and correct manually + 893 `TT' 0 `' +! Check and correct manually + 893 `TT' 0 `' +! Check and correct manually + 893 `TT' 0 `' +! Check and correct manually + 893 `TT' 0 `' +! Check and correct manually + 893 `TT' 0 `' +! Check and correct manually + 893 `TT' 0 `' +! Check and correct manually + 893 `TT' 0 `' +! Check and correct manually + 904 `TT' 0 `' +! Check and correct manually + 908 `TT' 0 `' +! Check and correct manually + 908 `TT' 0 `' +! Check and correct manually + 908 `TT' 0 `' +! Check and correct manually + 908 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 908 `TT' 0 `' +! Check and correct manually + 908 `TT' 0 `' +! Check and correct manually + 908 `TT' 0 `' +! Check and correct manually + 908 `TT' 0 `' +! Check and correct manually + 908 `TT' 0 `' +! Check and correct manually + 919 `TT' 0 `' +! Check and correct manually + 923 `TT' 0 `' +! Check and correct manually + 923 `TT' 0 `' +! Check and correct manually + 923 `TT' 0 `' +! Check and correct manually + 923 `TT' 0 `' +! Check and correct manually + 923 `TT' 0 `' +! Check and correct manually + 923 `TT' 0 `' +! Check and correct manually + 930 `TT' 0 `' +! Check and correct manually + 939 `BF' 0 `' +! Check and correct manually + 939 `TT' 0 `' +! Check and correct manually + 939 `TT' 0 `' +! Check and correct manually + 939 `TT' 0 `' +! Check and correct manually + 939 `TT' 0 `' +! Check and correct manually + 941 `BF' 0 `' +! Check and correct manually + 942 `BF' 0 `' +! Check and correct manually + 942 `TT' 0 `' +! Check and correct manually + 943 `BF' 0 `' +! Check and correct manually + 943 `TT' 0 `' +! Check and correct manually + 944 `BF' 0 `' +! Check and correct manually + 949 `BF' 0 `' +! Check and correct manually + 949 `TT' 0 `' +! Check and correct manually + 949 `TT' 0 `' +! Check and correct manually + 949 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 953 `BF' 0 `' +! Check and correct manually + 953 `TT' 0 `' +! Check and correct manually + 953 `TT' 0 `' +! Check and correct manually + 953 `TT' 0 `' +! Check and correct manually + 953 `TT' 0 `' +! Check and correct manually + 959 `BF' 0 `' +! Check and correct manually + 959 `TT' 0 `' +! Check and correct manually + 959 `TT' 0 `' +! Check and correct manually + 959 `TT' 0 `' +! Check and correct manually + 959 `TT' 0 `' +! Check and correct manually + 965 `BF' 0 `' +! Check and correct manually + 965 `TT' 0 `' +! Check and correct manually + 965 `TT' 0 `' +! Check and correct manually + 968 `BF' 0 `' +! Check and correct manually + 968 `TT' 0 `' +! Check and correct manually + 973 `TT' 0 `' +! Check and correct manually + 976 `BF' 0 `' +! Check and correct manually + 976 `TT' 0 `' +! Check and correct manually + 983 `TT' 0 `' +! Check and correct manually + 983 `TT' 0 `' +! Check and correct manually + 983 `TT' 0 `' +! Check and correct manually + 983 `TT' 0 `' +! Check and correct manually + 983 `TT' 0 `' +! Check and correct manually + 989 `Event Types' 0 `Event-Types' +! Reference changed: check if still unique + 989 `' 0 `' +! check if reference ID Event-Types was meant for a section (if not, eg for an anchor, change manually) + 991 `TT' 0 `' +! Check and correct manually + 991 `TT' 0 `' +! Check and correct manually + 991 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 991 `TT' 0 `' +! Check and correct manually + 991 `TT' 0 `' +! Check and correct manually + 991 `TT' 0 `' +! Check and correct manually + 991 `TT' 0 `' +! Check and correct manually + 999 `BF' 0 `' +! Check and correct manually +1014 `CODE' 0 `' +! Because it contains a newline character +1014 `TT' 0 `' +! Check and correct manually +1018 `TT' 0 `' +! Check and correct manually +1023 `REF' 0 `' +1024 `REF' 0 `' +1025 `REF' 0 `' +1026 `REF' 0 `' +1027 `REF' 0 `' +1033 `Window Events' 0 `Window-Events' +! Reference changed: check if still unique +1033 `' 0 `' +! check if reference ID Window-Events was meant for a section (if not, eg for an anchor, change manually) +1035 `TT' 0 `' +! Check and correct manually +1035 `TT' 0 `' +! Check and correct manually +1050 `TT' 0 `' +! Check and correct manually +1050 `TT' 0 `' +! Check and correct manually +1050 `TT' 0 `' +! Check and correct manually +1050 `TT' 0 `' +! Check and correct manually +1050 `TT' 0 `' +! Check and correct manually +1057 `TT' 0 `' +! Check and correct manually +1064 `BF' 0 `' +! Check and correct manually +1064 `TT' 0 `' +! Check and correct manually +1068 `BF' 0 `' +! Check and correct manually +1068 `TT' 0 `' +! Check and correct manually +1072 `BF' 0 `' +! Check and correct manually +1072 `TT' 0 `' +! Check and correct manually +1075 `TT' 0 `' +! Check and correct manually +1077 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1077 `TT' 0 `' +! Check and correct manually +1080 `TT' 0 `' +! Check and correct manually +1082 `BF' 0 `' +! Check and correct manually +1082 `TT' 0 `' +! Check and correct manually +1082 `TT' 0 `' +! Check and correct manually +1086 `TT' 0 `' +! Check and correct manually +1088 `BF' 0 `' +! Check and correct manually +1088 `TT' 0 `' +! Check and correct manually +1096 `TT' 0 `' +! Check and correct manually +1096 `TT' 0 `' +! Check and correct manually +1096 `TT' 0 `' +! Check and correct manually +1096 `TT' 0 `' +! Check and correct manually +1100 `Focus Events' 0 `Focus-Events' +! Reference changed: check if still unique +1100 `' 0 `' +! check if reference ID Focus-Events was meant for a section (if not, eg for an anchor, change manually) +1102 `TT' 0 `' +! Check and correct manually +1111 `TT' 0 `' +! Check and correct manually +1111 `TT' 0 `' +! Check and correct manually +1111 `TT' 0 `' +! Check and correct manually +1111 `TT' 0 `' +! Check and correct manually +1114 `TT' 0 `' +! Check and correct manually +1118 `BF' 0 `' +! Check and correct manually +1119 `BF' 0 `' +! Check and correct manually +1120 `BF' 0 `' +! Check and correct manually +1121 `BF' 0 `' +! Check and correct manually +1124 `TT' 0 `' +! Check and correct manually +1124 `TT' 0 `' +! Check and correct manually +1124 `TT' 0 `' +! Check and correct manually +1124 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1124 `TT' 0 `' +! Check and correct manually +1124 `TT' 0 `' +! Check and correct manually +1124 `TT' 0 `' +! Check and correct manually +1128 `LIST' 0 `' +! Would be better? (uses !) +1133 `TT' 0 `' +! Check and correct manually +1140 `TT' 0 `' +! Check and correct manually +1140 `TT' 0 `' +! Check and correct manually +1140 `TT' 0 `' +! Check and correct manually +1140 `TT' 0 `' +! Check and correct manually +1145 `Mouse Events' 0 `Mouse-Events' +! Reference changed: check if still unique +1145 `' 0 `' +! check if reference ID Mouse-Events was meant for a section (if not, eg for an anchor, change manually) +1147 `TT' 0 `' +! Check and correct manually +1151 `LIST' 0 `' +! Would be better? (uses !) +1158 `TT' 0 `' +! Check and correct manually +1158 `TT' 0 `' +! Check and correct manually +1158 `TT' 0 `' +! Check and correct manually +1158 `TT' 0 `' +! Check and correct manually +1158 `TT' 0 `' +! Check and correct manually +1158 `TT' 0 `' +! Check and correct manually +1158 `TT' 0 `' +! Check and correct manually +1169 `TT' 0 `' +! Check and correct manually +1169 `BF' 0 `' +! Check and correct manually +1169 `TT' 0 `' +! Check and correct manually +1169 `LIST' 0 `' +! Would be better? (uses !) +1178 `BF' 0 `' +! Check and correct manually +1178 `LIST' 0 `' +! Would be better? (uses !) +1187 `BF' 0 `' +! Check and correct manually +1187 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1187 `LIST' 0 `' +! Would be better? (uses !) +1214 `TT' 0 `' +! Check and correct manually +1214 `TT' 0 `' +! Check and correct manually +1214 `TT' 0 `' +! Check and correct manually +1218 `TT' 0 `' +! Check and correct manually +1218 `TT' 0 `' +! Check and correct manually +1218 `TT' 0 `' +! Check and correct manually +1218 `TT' 0 `' +! Check and correct manually +1218 `TT' 0 `' +! Check and correct manually +1223 `TT' 0 `' +! Check and correct manually +1223 `TT' 0 `' +! Check and correct manually +1237 `TT' 0 `' +! Check and correct manually +1237 `TT' 0 `' +! Check and correct manually +1242 `Keyboard Events' 0 `Keyboard-Events' +! Reference changed: check if still unique +1242 `' 0 `' +! check if reference ID Keyboard-Events was meant for a section (if not, eg for an anchor, change manually) +1244 `LIST' 0 `' +! Would be better? (uses !) +1253 `TT' 0 `' +! Check and correct manually +1253 `TT' 0 `' +! Check and correct manually +1253 `TT' 0 `' +! Check and correct manually +1253 `TT' 0 `' +! Check and correct manually +1253 `TT' 0 `' +! Check and correct manually +1253 `TT' 0 `' +! Check and correct manually +1258 `BF' 0 `' +! Check and correct manually +1260 `TT' 0 `' +! Check and correct manually +1260 `LIST' 0 `' +! Would be better? (uses !) +1266 `BF' 0 `' +! Check and correct manually +1268 `TT' 0 `' +! Check and correct manually +1268 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1268 `TT' 0 `' +! Check and correct manually +1268 `TT' 0 `' +! Check and correct manually +1273 `BF' 0 `' +! Check and correct manually +1275 `TT' 0 `' +! Check and correct manually +1278 `BF' 0 `' +! Check and correct manually +1280 `TT' 0 `' +! Check and correct manually +1280 `TT' 0 `' +! Check and correct manually +1280 `TT' 0 `' +! Check and correct manually +1280 `TT' 0 `' +! Check and correct manually +1280 `TT' 0 `' +! Check and correct manually +1280 `TT' 0 `' +! Check and correct manually +1290 `TT' 0 `' +! Check and correct manually +1290 `TT' 0 `' +! Check and correct manually +1290 `TT' 0 `' +! Check and correct manually +1290 `TT' 0 `' +! Check and correct manually +1290 `TT' 0 `' +! Check and correct manually +1290 `TT' 0 `' +! Check and correct manually +1295 `TT' 0 `' +! Check and correct manually +1300 `TT' 0 `' +! Check and correct manually +1300 `TT' 0 `' +! Check and correct manually +1300 `TT' 0 `' +! Check and correct manually +1303 `TT' 0 `' +! Check and correct manually +1303 `TT' 0 `' +! Check and correct manually +1303 `TT' 0 `' +! Check and correct manually +1306 `TT' 0 `' +! Check and correct manually +1306 `TT' 0 `' +! Check and correct manually +1306 `TT' 0 `' +! Check and correct manually +1306 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1310 `TT' 0 `' +! Check and correct manually +1313 `TT' 0 `' +! Check and correct manually +1320 `REF' 0 `' +1323 `Drag'n Drop Events' 0 `Dragn-Drop-Events' +! Reference changed: check if still unique +1323 `' 0 `' +! check if reference ID Dragn-Drop-Events was meant for a section (if not, eg for an anchor, change manually) +1325 `TT' 0 `' +! Check and correct manually +1325 `TT' 0 `' +! Check and correct manually +1325 `TT' 0 `' +! Check and correct manually +1325 `TT' 0 `' +! Check and correct manually +1325 `TT' 0 `' +! Check and correct manually +1325 `TT' 0 `' +! Check and correct manually +1325 `TT' 0 `' +! Check and correct manually +1325 `TT' 0 `' +! Check and correct manually +1325 `TT' 0 `' +! Check and correct manually +1325 `TT' 0 `' +! Check and correct manually +1325 `TT' 0 `' +! Check and correct manually +1366 `BF' 0 `' +! Check and correct manually +1366 `TT' 0 `' +! Check and correct manually +1366 `TT' 0 `' +! Check and correct manually +1369 `COMMENT' 0 `note' +! Too conspicuous for an ex-comment. Find a better element! (note that does not render its content in HTML)! +1373 `COMMENT' 0 `note' +! Too conspicuous for an ex-comment. Find a better element! (note that does not render its content in HTML)! +1383 `TT' 0 `' +! Check and correct manually +1383 `TT' 0 `' +! Check and correct manually +1383 `TT' 0 `' +! Check and correct manually +1383 `TT' 0 `' +! Check and correct manually +1392 `TT' 0 `' +! Check and correct manually +1392 `TT' 0 `' +! Check and correct manually +1392 `TT' 0 `' +! Check and correct manually +1392 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1392 `TT' 0 `' +! Check and correct manually +1392 `TT' 0 `' +! Check and correct manually +1392 `TT' 0 `' +! Check and correct manually +1392 `TT' 0 `' +! Check and correct manually +1404 `TT' 0 `' +! Check and correct manually +1415 `TT' 0 `' +! Check and correct manually +1439 `BF' 0 `' +! Check and correct manually +1441 `BF' 0 `' +! Check and correct manually +1443 `TT' 0 `' +! Check and correct manually +1443 `TT' 0 `' +! Check and correct manually +1456 `TT' 0 `' +! Check and correct manually +1456 `TT' 0 `' +! Check and correct manually +1456 `TT' 0 `' +! Check and correct manually +1462 `TT' 0 `' +! Check and correct manually +1462 `TT' 0 `' +! Check and correct manually +1462 `TT' 0 `' +! Check and correct manually +1462 `TT' 0 `' +! Check and correct manually +1465 `TSCREEN' 0 `' +1469 `VERB' 0 `' +! Because it is in TSCREEN +1478 `TSCREEN' 0 `' +1508 `VERB' 0 `' +! Because it is in TSCREEN +1510 `TT' 0 `' +! Check and correct manually +1510 `TT' 0 `' +! Check and correct manually +1510 `TT' 0 `' +! Check and correct manually +1515 `COMMENT' 0 `note' +! Too conspicuous for an ex-comment. Find a better element! (note that does not render its content in HTML)! +1515 `TT' 0 `' +! Check and correct manually +1538 `TT' 0 `' +! Check and correct manually +1538 `TT' 0 `' +! Check and correct manually +1538 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1538 `TT' 0 `' +! Check and correct manually +1551 `TT' 0 `' +! Check and correct manually +1551 `TT' 0 `' +! Check and correct manually +1551 `TT' 0 `' +! Check and correct manually +1551 `TT' 0 `' +! Check and correct manually +1551 `TT' 0 `' +! Check and correct manually +1556 `TT' 0 `' +! Check and correct manually +1556 `TT' 0 `' +! Check and correct manually +1556 `TT' 0 `' +! Check and correct manually +1558 `TT' 0 `' +! Check and correct manually +1558 `TT' 0 `' +! Check and correct manually +1558 `TT' 0 `' +! Check and correct manually +1558 `TT' 0 `' +! Check and correct manually +1558 `TT' 0 `' +! Check and correct manually +1558 `TT' 0 `' +! Check and correct manually +1558 `TT' 0 `' +! Check and correct manually +1561 `TT' 0 `' +! Check and correct manually +1561 `TT' 0 `' +! Check and correct manually +1561 `TT' 0 `' +! Check and correct manually +1561 `TT' 0 `' +! Check and correct manually +1561 `TT' 0 `' +! Check and correct manually +1561 `TT' 0 `' +! Check and correct manually +1561 `TT' 0 `' +! Check and correct manually +1561 `TT' 0 `' +! Check and correct manually +1561 `TT' 0 `' +! Check and correct manually +1561 `TT' 0 `' +! Check and correct manually +1561 `TT' 0 `' +! Check and correct manually +1567 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1567 `TT' 0 `' +! Check and correct manually +1567 `TT' 0 `' +! Check and correct manually +1570 `TT' 0 `' +! Check and correct manually +1572 `TT' 0 `' +! Check and correct manually +1572 `TT' 0 `' +! Check and correct manually +1572 `TT' 0 `' +! Check and correct manually +1578 `TSCREEN' 0 `' +1581 `VERB' 0 `' +! Because it is in TSCREEN +1583 `TT' 0 `' +! Check and correct manually +1591 `TSCREEN' 0 `' +1594 `VERB' 0 `' +! Because it is in TSCREEN +1594 `TT' 0 `' +! Check and correct manually +1598 `TSCREEN' 0 `' +1601 `VERB' 0 `' +! Because it is in TSCREEN +1601 `COMMENT' 0 `note' +! Too conspicuous for an ex-comment. Find a better element! (note that does not render its content in HTML)! +1605 `TT' 0 `' +! Check and correct manually +1605 `REF' 0 `' +1605 `TT' 0 `' +! Check and correct manually +1605 `TT' 0 `' +! Check and correct manually +1605 `TT' 0 `' +! Check and correct manually +1605 `TT' 0 `' +! Check and correct manually +1614 `TT' 0 `' +! Check and correct manually +1614 `TT' 0 `' +! Check and correct manually +1614 `TT' 0 `' +! Check and correct manually +1614 `TT' 0 `' +! Check and correct manually +1614 `TT' 0 `' +! Check and correct manually +1643 `TT' 0 `' +! Check and correct manually +1646 `TT' 0 `' +! Check and correct manually +1648 `TT' 0 `' +! Check and correct manually +1648 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1669 `The Menubar' 0 `The-Menubar' +! Reference changed: check if still unique +1669 `' 0 `' +! check if reference ID The-Menubar was meant for a section (if not, eg for an anchor, change manually) +1671 `TT' 0 `' +! Check and correct manually +1671 `TT' 0 `' +! Check and correct manually +1671 `TT' 0 `' +! Check and correct manually +1671 `TT' 0 `' +! Check and correct manually +1676 `TT' 0 `' +! Check and correct manually +1676 `TT' 0 `' +! Check and correct manually +1681 `TT' 0 `' +! Check and correct manually +1684 `TSCREEN' 0 `' +1686 `VERB' 0 `' +! Because it is in TSCREEN +1688 `TT' 0 `' +! Check and correct manually +1716 `CODE' 0 `' +! Because it contains a newline character +1718 `TT' 0 `' +! Check and correct manually +1718 `TT' 0 `' +! Check and correct manually +1718 `TT' 0 `' +! Check and correct manually +1718 `TT' 0 `' +! Check and correct manually +1718 `TT' 0 `' +! Check and correct manually +1718 `TT' 0 `' +! Check and correct manually +1718 `TT' 0 `' +! Check and correct manually +1728 `TT' 0 `' +! Check and correct manually +1731 `TT' 0 `' +! Check and correct manually +1740 `TT' 0 `' +! Check and correct manually +1740 `TT' 0 `' +! Check and correct manually +1740 `TT' 0 `' +! Check and correct manually +1740 `TT' 0 `' +! Check and correct manually +1748 `TT' 0 `' +! Check and correct manually +1748 `TT' 0 `' +! Check and correct manually +1774 `CODE' 0 `' +! Because it contains a newline character + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1774 `TT' 0 `' +! Check and correct manually +1774 `TT' 0 `' +! Check and correct manually +1774 `TT' 0 `' +! Check and correct manually +1774 `TT' 0 `' +! Check and correct manually +1774 `TT' 0 `' +! Check and correct manually +1774 `TT' 0 `' +! Check and correct manually +1774 `TT' 0 `' +! Check and correct manually +1774 `TT' 0 `' +! Check and correct manually +1774 `TT' 0 `' +! Check and correct manually +1786 `TT' 0 `' +! Check and correct manually +1786 `TSCREEN' 0 `' +1789 `VERB' 0 `' +! Because it is in TSCREEN +1793 `TT' 0 `' +! Check and correct manually +1796 `TT' 0 `' +! Check and correct manually +1796 `TT' 0 `' +! Check and correct manually +1802 `TSCREEN' 0 `' +1809 `VERB' 0 `' +! Because it is in TSCREEN +1811 `TT' 0 `' +! Check and correct manually +1811 `TT' 0 `' +! Check and correct manually +1819 `TT' 0 `' +! Check and correct manually +1825 `TT' 0 `' +! Check and correct manually +1825 `TT' 0 `' +! Check and correct manually +1829 `Keyboard 0 `Keyboard-Accelerators' +! Reference changed: check if still unique +1829 `' 0 `' +! check if reference ID Keyboard-Accelerators was meant for a section (if not, eg for an anchor, change manually) +1840 `TT' 0 `' +! Check and correct manually +1850 `VERB' 0 `' +! Check and correct manually +1852 `TT' 0 `' +! Check and correct manually +1866 `TT' 0 `' +! Check and correct manually +1866 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1866 `TT' 0 `' +! Check and correct manually +1870 `TT' 0 `' +! Check and correct manually +1870 `TT' 0 `' +! Check and correct manually +1870 `TT' 0 `' +! Check and correct manually +1907 `REF' 0 `' +1907 `TT' 0 `' +! Check and correct manually +1907 `TT' 0 `' +! Check and correct manually +1918 `TT' 0 `' +! Check and correct manually +1935 `TT' 0 `' +! Check and correct manually +1937 `TT' 0 `' +! Check and correct manually +1937 `TT' 0 `' +! Check and correct manually +1937 `TT' 0 `' +! Check and correct manually +1943 `TT' 0 `' +! Check and correct manually +1943 `TT' 0 `' +! Check and correct manually +1943 `TT' 0 `' +! Check and correct manually +1953 `TT' 0 `' +! Check and correct manually +1973 `CODE' 0 `' +! Because it contains a newline character +1991 `CODE' 0 `' +! Because it contains a newline character +1998 `CODE' 0 `' +! Because it contains a newline character +2005 `CODE' 0 `' +! Because it contains a newline character +2012 `CODE' 0 `' +! Because it contains a newline character +2027 `CODE' 0 `' +! Because it contains a newline character +2032 `CODE' 0 `' +! Because it contains a newline character +2034 `TT' 0 `' +! Check and correct manually +2042 `TT' 0 `' +! Check and correct manually +2042 `TT' 0 `' +! Check and correct manually +2050 `TT' 0 `' +! Check and correct manually +2053 `TT' 0 `' +! Check and correct manually +2055 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2055 `TT' 0 `' +! Check and correct manually +2057 `TT' 0 `' +! Check and correct manually +2058 `TT' 0 `' +! Check and correct manually +2062 `TT' 0 `' +! Check and correct manually +2062 `TT' 0 `' +! Check and correct manually +2069 `TT' 0 `' +! Check and correct manually +2069 `TT' 0 `' +! Check and correct manually +2069 `TT' 0 `' +! Check and correct manually +2069 `TT' 0 `' +! Check and correct manually +2076 `TSCREEN' 0 `' +2086 `VERB' 0 `' +! Because it is in TSCREEN +2088 `TT' 0 `' +! Check and correct manually +2088 `TT' 0 `' +! Check and correct manually +2088 `TT' 0 `' +! Check and correct manually +2092 `TT' 0 `' +! Check and correct manually +2092 `TT' 0 `' +! Check and correct manually +2092 `TT' 0 `' +! Check and correct manually +2092 `TT' 0 `' +! Check and correct manually +2092 `TT' 0 `' +! Check and correct manually +2095 `TT' 0 `' +! Check and correct manually +2095 `TT' 0 `' +! Check and correct manually +2100 `TT' 0 `' +! Check and correct manually +2104 `BF' 0 `' +! Check and correct manually +2106 `TT' 0 `' +! Check and correct manually +2108 `TSCREEN' 0 `' +2117 `VERB' 0 `' +! Because it is in TSCREEN +2118 `TT' 0 `' +! Check and correct manually +2118 `TT' 0 `' +! Check and correct manually +2124 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2130 `TT' 0 `' +! Check and correct manually +2134 `TT' 0 `' +! Check and correct manually +2134 `TT' 0 `' +! Check and correct manually +2134 `TT' 0 `' +! Check and correct manually +2134 `TT' 0 `' +! Check and correct manually +2149 `CODE' 0 `' +! Because it contains a newline character +2151 `TT' 0 `' +! Check and correct manually +2151 `TT' 0 `' +! Check and correct manually +2158 `TT' 0 `' +! Check and correct manually +2162 `TT' 0 `' +! Check and correct manually +2167 `CODE' 0 `' +! Because it contains a newline character +2169 `TT' 0 `' +! Check and correct manually +2169 `TT' 0 `' +! Check and correct manually +2176 `TT' 0 `' +! Check and correct manually +2176 `TT' 0 `' +! Check and correct manually +2176 `TT' 0 `' +! Check and correct manually +2176 `TT' 0 `' +! Check and correct manually +2183 `TT' 0 `' +! Check and correct manually +2183 `TT' 0 `' +! Check and correct manually +2183 `TT' 0 `' +! Check and correct manually +2183 `TT' 0 `' +! Check and correct manually +2183 `TT' 0 `' +! Check and correct manually +2183 `TT' 0 `' +! Check and correct manually +2183 `TT' 0 `' +! Check and correct manually +2183 `TT' 0 `' +! Check and correct manually +2192 `TT' 0 `' +! Check and correct manually +2201 `TT' 0 `' +! Check and correct manually +2201 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2201 `TT' 0 `' +! Check and correct manually +2201 `TT' 0 `' +! Check and correct manually +2201 `TT' 0 `' +! Check and correct manually +2201 `TT' 0 `' +! Check and correct manually +2217 `TT' 0 `' +! Check and correct manually +2227 `CODE' 0 `' +! Because it contains a newline character +2255 `TT' 0 `' +! Check and correct manually +2260 `TT' 0 `' +! Check and correct manually +2260 `TT' 0 `' +! Check and correct manually +2264 `TT' 0 `' +! Check and correct manually +2264 `TT' 0 `' +! Check and correct manually +2264 `TT' 0 `' +! Check and correct manually +2264 `TT' 0 `' +! Check and correct manually +2270 `TT' 0 `' +! Check and correct manually +2270 `TT' 0 `' +! Check and correct manually +2274 `TT' 0 `' +! Check and correct manually +2274 `TT' 0 `' +! Check and correct manually +2278 `TT' 0 `' +! Check and correct manually +2303 `CODE' 0 `' +! Because it contains a newline character +2308 `TT' 0 `' +! Check and correct manually +2308 `TT' 0 `' +! Check and correct manually +2312 `TT' 0 `' +! Check and correct manually +2312 `TT' 0 `' +! Check and correct manually +2318 `TT' 0 `' +! Check and correct manually +2318 `TT' 0 `' +! Check and correct manually +2318 `TT' 0 `' +! Check and correct manually +2318 `TT' 0 `' +! Check and correct manually +2318 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2318 `TT' 0 `' +! Check and correct manually +2318 `COMMENT' 0 `note' +! Too conspicuous for an ex-comment. Find a better element! (note that does not render its content in HTML)! +2329 `TT' 0 `' +! Check and correct manually +2329 `TT' 0 `' +! Check and correct manually +2347 `TT' 0 `' +! Check and correct manually +2347 `TT' 0 `' +! Check and correct manually +2347 `TT' 0 `' +! Check and correct manually +2353 `TT' 0 `' +! Check and correct manually +2353 `TT' 0 `' +! Check and correct manually +2353 `TT' 0 `' +! Check and correct manually +2353 `TT' 0 `' +! Check and correct manually +2353 `TT' 0 `' +! Check and correct manually +2353 `TT' 0 `' +! Check and correct manually +2353 `TT' 0 `' +! Check and correct manually +2362 `TT' 0 `' +! Check and correct manually +2362 `TT' 0 `' +! Check and correct manually +2371 `TT' 0 `' +! Check and correct manually +2377 `TT' 0 `' +! Check and correct manually +2382 `TT' 0 `' +! Check and correct manually +2382 `TT' 0 `' +! Check and correct manually +2382 `TT' 0 `' +! Check and correct manually +2390 `TT' 0 `' +! Check and correct manually +2390 `TT' 0 `' +! Check and correct manually +2397 `TT' 0 `' +! Check and correct manually +2401 `TT' 0 `' +! Check and correct manually +2401 `TT' 0 `' +! Check and correct manually +2408 `TT' 0 `' +! Check and correct manually +2424 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2424 `TT' 0 `' +! Check and correct manually +2434 `TT' 0 `' +! Check and correct manually +2434 `TT' 0 `' +! Check and correct manually +2434 `TT' 0 `' +! Check and correct manually +2446 `TT' 0 `' +! Check and correct manually +2449 `' 0 `' +! check if reference ID Copyright was meant for a section (if not, eg for an anchor, change manually) +2451 `TSCREEN' 0 `' +2468 `VERB' 0 `' +! Because it is in TSCREEN +=== NIF conversion errors ======================== +=== Finalising errors =========================== diff -Nru kdevelop-3.9.98/doc/kde_libref/index.docbook kdevelop-4.0.1/doc/kde_libref/index.docbook --- kdevelop-3.9.98/doc/kde_libref/index.docbook 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/kde_libref/index.docbook 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,3370 @@ +kdevelop"> + + ]]> +]> + + + +The KDE Library Reference Guide +The Reference Guide to C++ Application Design for the K Desktop Environment (KDE) + + +Ralf +Nolden + +The KDevelop Team +
Ralf.Nolden@post.rwth-aachen.de
+
+
+
+21/03/2000 +1.02.00 + +This handbook is part of the KDevelop Integrated Development Environment and is also licensed under the GNU General +Public License; see Chapter Copyright for more information. + + +KDE +KDevelop +reference + +
+ + +Introduction + + +What KDE provides + +The K Desktop Environment offers an easy way for application designers to equip their products with an intuitive way of user +interaction. It provides all means to solve common tasks using a set of library classes that extend the facilities of the Qt toolkit. +This allows for a unique look and feel to applications as well as interaction with other programs and the window manager. This handbook +provides an introduction to the usage of the KDE libraries, shipped with KDE, to enable developers to find +easy solutions for common programming issues. It also explains why certain techniques and classes should be used when creating applications +that are targeting the K Desktop Environment. + +Basically, KDE offers a set of standards that allow a unique look and usage of applications that should be watched when designing +programs. A lot of tasks are done automatically, such as: + + + +Session Management + + +Standard keyboard accelerator configuration + + +Font, Color and Style changing + + +Theme support (KDE 1.1.2 and higher) + + +Internationalization + + + + +Therefore, theses issues only have to be mentioned in their functionality for complete information. Application developers only have to +care about what their program is intended to do and where KDE can help. There, KDE offers user interfaces that extend the Qt toolkit +where necessary. If both libraries offer similar solutions, KDE developers should (in most cases) use the methods provided by the KDE +libraries. + +KDE offers a set of widgets that can be used for creating application specific dialogs and views. Examples are + + +KSeparator, offering a common separator line + + +KColorButton, offering a push button displaying a color + + + + +Normally, applications ask the user to select various values. Here, the libraries provide easy means to get these values by complex +widgets that are ready to use and are already known to the user by the KDE desktop, such as: + + + +File dialogs, + + +Color dialogs, + + +Font dialogs, + + +Keyboard configuration dialogs + + + + +These should be used wherever a user setting is required as it simplifies the programmer's work, extends the application's facilities +dramatically and provide a common look. + +The Qt library is addressed in this handbook as far as it offers solutions not provided by KDE, but as information about event handling +and the signal/slot mechanism is hard to find for developers, this turned out to be a special chapter in this handbook. + + + +Notes about KDE 2 / Qt 2.0 + +As you may have guessed, this handbook explicitely adresses KDE 1.x development using the Qt 1.4x libraries. You may +ask "Hey, Qt's 2.0 version is released already, why not talk only about that ?" - but there are several issues that result in a need +for a KDE 1.x reference. + +The issues that lead to this are first of all that developers should consider the KDE 1.x series the stable desktop and development +environment. As long as KDE 2 (which will introduce Qt 2.0 as well) is under development, programmers will have a hard time to follow +the changes, which means a high time-consuming search for information and, if you experience bugs, error searching. There are projects +covered by the KDE core team that ensure the KDE 2 libraries will work - the KDE itself as well as the supplying applications and the +KOffice suite. Nevertheless, developers who are starting or developing projects for KDE now have the choice and those that want to rely +on the stable environment will also want to port their applications to KDE 2 to make it usable on one hand and to implement +improvements that are introduced by new library functions. Therefore information about where KDE and Qt differ from the 1.x series in +future releases have been included as footnotes as far as changes are known to the author at the time of this writing and doesn't +claim to be in any way complete. Explanations of classes that are still in the KDE 1.x API but are already removed in the current KDE 2 +API are left out to avoid any trouble when porting to KDE 2. + +In further versions of this handbook KDE 2 development will be addressed completely and the according chapters revisited for the +changes this implies. + + + +About this Handbook + +This handbook has been written in order to give developers a guideline to the usage of the KDE 1.x libraries in general in conjunction +with the Qt 1.4x library on X11 desktop systems. It cannot replace any programming knowledge that is needed for C++ programming and +covers the Qt classes where necessary. You should in any case look at the page "Structure Overview" of the Qt online reference which +contains a general guidance to the Qt library by class usage in general. This handbook tries to follow this structure to complete your +knowledge about where KDE classes are appropriate and explains the technique of KDE application development by describing class usage +on topics. + + + + +Class Categories + +The KDE/Qt C++ class libraries offer easy solutions to extend applications dramatically with a minimum amount of coding on the side of +the application programmer. This chapter sorts the classes provided towards their usage by certain categories: + + + +Baseclass + + +Application architecture classes + + +Application objects of KDE + + +Application configuration + + +Main Windows + + + + + +User Interface Objects + + +Views + + +Dialogs + + +Control Elements + + +Menus + + + + + +General purpose classes + + +Files + + +Data objects + + +Graphics + + +Processes + + + + + + + + +Baseclass + +Most of the KDE/Qt classes have QObject as their baseclass in their inheritance hierarchy. QObject can be described as a +baseclass because it offers the usage of Qt's signal/slot mechanism which allows object interaction within the application and should +be used as the baseclass for any self-created classes that are supposed to emit signals or can connect to signals by slots. + + + +Application Architecture Classes + +KDE applications usually consist of a set of objects that interact with each other. The programmer has to use the provided classes to +create a KDE application either by creating a class instance or by inheritance. A typical application contains: + + + +One application object of KApplication + + +One main window class derived from KTMainWindow + + +A class derived from QWidget to create the view area + + + + + +Application objects of KDE + +The K Desktop Environment provides functionality that an application can use to integrate into the KDE. This functionality +is implemented in the class +KApplication and should therefore be the baseclass for any application that targets KDE. A KDE application only contains one object of the +class KApplication. This is created in the application's main() function. The KApplication object is responsible for +providing the basic interfaces and objects towards the desktop and interprets the command-line arguments of an application. As the +instance is a non-visible, but the main application object, the following rules have to be watched: + + + +the application is terminated by kapp->quit(). + + +the object that is representing the graphical interface has to be set the main widget with setTopWidget() (for widgets not +inherited by KTMainWindow) + + + + +The KApplication object provides: + + +access to the KDE File System + + +a session configuration object + + +a configuration object + + +internationalization by the locale object + + +changing of the visible application objects by signals + + + + +KDE 2 accesses the according instances by static methods provided by KGlobal. + + + +Dependencies: -lkdecore -lqt + +Includes: &#;include &<;kapp.h&>; + +The kdeui library additionally offers two classes that inherit KApplication for specialized purposes: + + + +KWMModuleApplication + +Includes: &#;include &<;kwmmapp.h&>; + +Dependencies: -lkdeui -lkdecore -lqt + +The class KWMModuleApplication is the base class for KDE window-manager modules. It mainly informs a module about all currently managed +windows and changes to them (via Qt signals). There are no methods to manipulate windows. These are defined in the class KWM (see +kwm.h). An example for using KWMModuleApplication is kcontrol. + + + +KControlApplication + +Includes: &#;include &<;kcontrol.h&>; + +Dependencies: -lkdeui -lkdecore -lqt + +KControlApplication is the common base for setup applications. It provides a tab dialog and functionality common to most setup +programs. The configuration dialogs for the KDE are examples of KControlApplications. + + + +KWM + +Includes: &#;include &<;kwm.h&>; + +Dependencies: -lkdeui -lkdecore -lqt + +The KWM class provides a set of static methods to interact with the window and session-manager. Therefore, call any member with + +KWM::&<;method()&>; + +depending on the purpose of the desired functionality. + + + +Application Configuration + +The class KConfig provides the usage of a configuration object which can write its entries into configuration files. Dependent of +the values to read and write you have to call the methods of the class KConfigBase. + +The KApplication object provides an application configuration object with a resource file by default which is stored in the user's +kde-directory as well as the session management file to store information between sessions. + +For internationalization, the KApplication object uses the class KLocale to translate localized entries dependent on the +selected language. Instead of using the klocale->translate() method, KDE applications should use the i18n() macro that +contains the string to be translated as the message extraction depends on this macro. + + + +Main Windows + +As the application's KApplication instance is non-visible, it only provides the basic means to create a KDE application. +Therefore a KDE application needs to have a main window representing the application towards the user graphically. The main window +usually consists of a widget which can be as simple as a pure button up to the complex KTMainWindow widget, offering the means to +create a full-featured main window with geometry management, session management support, menu bar, toolbars and statusbar. + +Generally, every main window has to be set main widget with KApplication's setTopWidget() method. An exception is a main +window that inherits KTMainWindow. + +The main window usually takes the responsibility to terminate the application by providing a user interface that is connected to +KApplication::quit(), easily used by kapp->quit(). + +Most KDE applications will use KTMainWindow to represent the application graphically. + + + + +User Interface Objects + +This section covers the user interface object the KDE libraries provide. By category, these can be divided by their purpose. A user +interface can be: + + + +a view area widget, representing the data an application is intended to produce and allowing the methods to manipulate the +contents. + + +dialogs, used to retrieve user input, e.g. a file dialog + + +control elements to compose application specific widgets + + +menus, providing user interfaces to invoke application commands. + + + + + +Views + +View are generally the content area of an application. Therefore it can be the main widget or a part of a main widget that additionally +offers a set of functionality such as KTMainWindow + +The KDE libraries offer a set of ready to use views which can be inherited to advance the desired functionality: + + +KTabListBox: offers a multi-column list box where the user can change the rows with drag'n drop. + + +KEdit: the base classes for the KEdit application offered with KDE. This could be used instead of QMultiLineEdit. + + +KNewPanner: manages two child widgets like QSplitter. + +Removed in KDE 2. Use QSplitter instead. + + + + +KHTMLView: a HTML-interpreting widget (khtmlw) + + + + +For use with KTMainWindow, create your view instance and call setView(QWidget*) to enable the management by the +KTMainWindow instance. + +Individual views are usually created by inheritance of QWidget or any provided widget that comes closest to the desired +functionality the view should offer. For widgets that want to offer scrolling facilities, you could inherit from QScrollView or +create a QScrollView instance and set the view widget as the managed area with addChild(). + + + +Dialogs + +Dialogs are a main part of the user interaction wherever the application requires parameters that have to be set by the user. +Fortunately, the KDE library already offers a set of dialogs that are ready to use for standard parameters such as fonts and colors. In +any case where these types of information is requested by the user, the application should make use of these standard dialogs. + +In cases where the given dialogs don't fit the requirements, you have to inherit from QWidget or QDialog and create your own +dialog either directly coded with geometry management or by creating it visually with KDevelop's dialogeditor. + +The KDE libraries offer the following dialogs: + + +KColorDialog: selects a color value + + +KWizard: base dialog class to create wizards + + +KEdGotoLine: Go-to-Line dialog for editors + + +KEdReplace: Search and replace dialog for editors + + +KEdSrch: search dialog for editors + + +KFontDialog: font selection dialog + + +KIconLoaderDialog: Icon selection dialog + + +KKeyDialog: keyboard accelerator configuration dialog + + +KMsgBox: message box dialog with up to four configurable buttons + + +KFileDialog: (kfile) file dialog to open and save files + + +KSpellDlg: (kspell) spell-checking dialog for use with Ispell + + +DatePickerDialog: (kab) date selection dialog + + + + +Additionally, the Qt library offers: + + +QFileDialog + + +QMessageBox + + +QPrintDialog + + +QProgressDialog + + + + +Qt 2.0 introduces a QColorDialog for selecting colors and a QFontDialog for font-selection as well + + + + + + +Control Elements + +Control elements are used within visible areas of the application and can be combined together to create a dialog or view. Beyond the +control elements that the Qt library provides, KDE offers: + + + +KButton: active raise-lower button + + +KButtonBox: manages buttons + + +KColorButton: button displaying a color setting, calls KColorDialog + + +KIconLoaderButton: button displaying a selected Icon, calls KIconLoaderDialog + + +KDatePicker: Date selection widget + + +KIntegerLine: line edit that only accepts integer values + + +KLedLamp: LED lamp + + +KLined: line edit + + +KNewPanner: panner devider managing two widgets + +Use QSplitter instead, this is already removed in KDE 2. + + + + +KPopupMenu: popup menu with title + + +KRestrictedLine: line edit that only accepts certain input + + +KSelector: value selector + + +KSeparator: standard separator + + +KSlider: slider widget + + +KTabCtl: tabulator widget + + + + + + +General Purpose Classes + + +Files and Directories + +Qt already offers a set of classes to work with files and directories. Those classes are: + + + +QDir + + +QFileInfo + + +QFile + + +QFileDialog + + + + +A comparable and extended technology has been introduced by the KDE libraries and have a similar usage like the corresponding classes +of Qt. Those are: + + + +KDir + + +KFileInfo + + +KFileDialog + + +KFilePreviewDialog + + + + +For loading and saving files, use the class QFile which operates with streams. If you want network transparent +file access, consider using KFile. + + + +Data Objects + +The Qt library supports data objects by classes that offer handling of lists, arrays, streams, strings and the like. See the Qt +documentation for mor information. + + + +Graphics + +Qt supports a set of graphics formats that can be used for drawings or image programs. The graphics device for painting is +QPainter. + + + +Processes + +As applications can have different types of application communication with other programs available on the system such as standard Unix +actions, developers can make use of the class KProcess to call another application. As the application is running independently +from the one that invoked it, you can only receive the current status of the application invoked by isRunning(). Also, the +invocation can be done with various initialization values. Finally, the process can inform the application whether it has been +terminated or ended. See KProcess for details. + + + + + +Classes of KDE Applications + +The KDE libraries, in conjunction with the Qt library, are providing developers a complete framework for application design. As KDE is +targeted towards Unix Operating Systems running the graphical X11 System, you would think you would have to understand Unix and X11 - +but as the libraries are already encapsulating the complex graphics subsystem, you don't have to know about that in most cases. If +you're already familiar with Qt, KDE won't make too much difference in regards of using classes and widgets. + +Beginners, on the other hand, have a lot of problems in the sections of + + + +Application design with GUI components + + +Application parts + + +Widget construction + + +Inter-widget communication (Signals and slots) + + + + +The following will help you to understand, where you will generally find classes used in KDE applications, including the according +replacements of Qt classes for those developers that are familiar with Qt, but didn't make use of KDE libraries. These will be the +application objects, their behavior and creation.You will learn about: + + + +the most needed objects of a KDE application + + +the difference between your code and the application framework + + +KDE application classes that encapsulate the window manager communication + + +the class QWidget that all GUI components inherit + + +graphical objects + + +the system clipboard + + + + +More information about KDE applications can be found in the following sections: + + +The KDevelop Programming Handbook + + +KDE Application Tutorials Handbook + + + +For information about Qt application design, see the Qt online reference documentation. + + +The Application Instance + +Generally, a KDE application has to be started by creating an instance (and only one!) of the class KApplication, which is +provided by the kdecore library. The class KApplication is derived from the according Qt class QApplication. + +What happens exactly is that QApplication manages the application event queue, which means it processes events from the underlying +window system to its child objects, such as mouse movements or keyboard events. This is also the reason, why only one instance of +KApplication can be declared and why this has to be the first thing the main() function executes. + +The KApplication class extends the Qt class in terms of providing additional functionality for a unique-looking application that +integrates into other desktop components and can therefore be influenced in its behavior by control applications (in KDE generally +collected in the KDE Control Center) such as keyboard accelerator configuration and GUI style. + +Corresponding to the Qt class, the KApplication class provides a static function to access the application object within the +application, KApplication::getKApplication(). This solves the problem to pass the pointer to the application object. Further, the +include file kapp.h provides a macro that can be used instead of the static function, kapp. Whenever you need to access the +application object, use this macro. + +In KDE 2, the application object can be retrieved with KApplication::kApplication(). + + + +The KApplication object itself provides a set of instances that are commonly used in KDE applications and lets the programmer +access them by functions. You will make extensive use of them as they avoid creating own instances. The following objects are +provided by their purpose: + + + +KConfig + +a configuration object that is used to read and store configuration settings in a resource file. Use the +according methods of KConfigBase to read and write values. The configuration object is retrieved by +kapp->getConfig() + +For KDE 2 use KGlobal::config() to retrieve the config object + +, the session managment +configuration by kapp->getSessionConfig() + + + +KIconLoader + +an object that loads icons into QPixmaps by using the KDE File System. This takes away the need to +search for any pixmap on the file system completely as only the filename has to be entered. Use the macro Icon("icon.xpm") to load +an icon easily. The iconloader instance can be addressed by kapp->getIconLoader() + +KDE 2 uses KGlobal::iconLoader() +to access the icon loader instance + + + + + +KLocale + +an object that returns the actual localization settings. This makes applications appear in the language on the +desktop chosen by the user globally. Use the macro klocale to access the application locale object. The klocale instance can be +addressed by using kapp->getLocale() (as the macro klocale does already) + +Again, KDE 2 changes this with a static method +of KGlobal::locale(). + + + + + +KCharsets + +the charset object currently set globally by the user. This translates key events to the correctly set +charset. Retrieve the charsets instance with kapp->getCharsets(). + +Replaced by KGlobal::charsets() in KDE2. + + + + + + + +Furthermore, the KApplication class provides you with the needed methods to access files according to the KDE File System Standard. +This will prevent you from problems that will always occur when hard-coding any directories into the code (see The KDevelop Programming Handbook for information about the KDE-FSS). The class also provides +the needed access for the application icon and mini icon, current KDE fonts and session management support. + +To use the clipboard, the according QApplication class already provides a clipboard object, QApplication::clipboard(), which +can be used to exchange text and image data between applications (see QClipboard). + +Internationalization is another keyword for KDE applications. This is supported by the KLocale object already mentioned above and +is always used with the macro i18n() of kapp.h. + +It just shortens the call of the KApplication pointer to the KLocale pointer and is read by gettext to extract all macro-embraced +strings into an application message file that then can be translated. + +At least, the KApplication already constructs a help menu that can be inserted into a menu bar the application may contain with a +predefined (can be turned on/off) KDE hint dialog and your application's about dialog. + +The following advice should be taken into account when dealing with the KApplication class: + + + +create the KApplication object at the beginning of the main() function + + +execute the application with exec() at the end of the main() function + + +terminate the application with calling the quit() slot function. + + + + +Using KApplication, you are able to catch the following event signals: + + + +kdisplayPaletteChanged() + + +kdisplayStyleChanged() + + +kdisplayFontChanged() + + +appearanceChanged() + + +saveYourself() + + +shutDown() + + + + +As the widgets of your application will receive these signals, they will normally update themselves. The important signals for you will +be in most cases saveYourself() and shutDown() (whereby KTMainWindow already catches saveYourself() to call +KTMainWindow::saveData()). + +You will be able to communicate with the KWM window manager as well by the according static methods of kwm.h. + + + +Commandline Argument Processing + +An application usually wants to be able to process command line options. Those are entered by the user if he started the application from +a console or from within a kdelnk file. Command line options are very often used to start an application with a certain file. +This also enables filemanagers to call your application properly and use the mime-type mechanism included in KDE. +To be able to process command line options, the main() function should be constructed with the declaration + +int main(int argc(), const char* argv[]) + + + +Here, argc() is the number of commandline options and the array argv[] actually contains the commandline option's texts. +As the QApplication constructor is executed before the KApplication, it is sufficient to know what is processed by possible +options first. The already read options are automatically removed from the array and cannot be read after the KApplication +instance is declared: + +(taken from the Qt 1.42 online reference of QApplication) + + +-nograb, tells Qt to never grab the mouse or the keyboard. (If you are running your program +in a debugger, this option is automatically enabled). + + +-sync (only under X11), switches to synchronous mode for debugging. + + +-display display, sets the X display (default is $DISPLAY). + + +-geometry geometry, sets the client geometry of the main widget. + + +-fn or -font font, defines the application font. + + +-bg or -background color, sets the default background color and an application palette (light and dark shades are +calculated). + + +-fg or -foreground color, sets the default foreground color. + + +-name name, sets the application name. + + +-title title, sets the application title (caption). + + +-style= style, sets the application GUI style. Possible values are motif and windows. By default, the global +KDE style setting is used. + + +-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display. + + +-ncols count, limits the number of colors allocated in the color cube on a 8-bit display, if the application is using the +QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (ie. 6 levels of red, 6 of green, and 6 of +blue); for 108, a 3x3x3, and for other values, a cube approximately proportional to a 2x3x1 cube is used. + + +-cmap causes the application to install a private color map on an 8-bit display. + + + + +Then, the KApplication processes commands whose values can be set within a .kdelnk file. Usually, those link files contain +internationalized versions for the application description and the application name as well as some other values such as the icon and +miniicon name. The commandline options to use these values are: +foo %i %m -caption \"%c\" + + + +This will start the application with the value -icon something.xpm for &%;i and -miniicon for &%;m. The application caption can be set with +the -caption value &%;c. The class KApplication also provides the according methods who return the values for these commandline +arguments. + +Now, when it comes to your own processing of commandlines, you can either access them directly after the application object is declared +to exclude any of the above values in the main() function. Within the application itself (e.g. the mainwindow class), +QApplication provides the methods argc() and argv() to process any other options given at the commandline. These can be +accessed by the argument number, whereby the argument kapp->argv()[0] is the application name; any other following arguments can +be processed with kapp->argv()[number]. + +KDE 2 has an additional class, KCmdLineArgs, to parse additional +command-line parameters, which is already used by KDevelops KDE 2 frameworks. + + + +The KApplication class uses different methods to change the application's style, fonts and colors by X11 Atoms which +call all open KDE applications to change their values recursively throughout all widgets. This is done automatically when the user +changes values through using the KDE control center which causes these X11 events. The method x11eventFilter() emits the +according signals to change all values. As far as I know of, the only value not changed by KDE 1.x is the double click interval, which +is set to 400 ms by default in QApplication. Changes on this can be made using QApplication::setDoubleClickInterval(). + + + +Other Application Classes + +By "Other Application Classes" we would describe any replacements of the KApplication class. The KDE library kdeui offers two +more classes that inherit KApplication for more specific use in KDE applications. Those are the class KControlApplication and +KWMModuleApplication. + + +KControlApplication + +The KControlApplication is a class for specific applications that are intended to serve as setup modules. By providing a +tab dialog, control modules can easily be created. The differences to KApplication are: + + + +uses -init as commandline option to call the method init(). This one has to be overwritten to initialize the dialog +settings. + + +the caption of the dialog has to be set independently of the KApplication way with setTitle() + + +provides a complete widget frameset already where your control widgets have to be inserted. + + + + +To overwrite the virtual methods like init(), you have to derive an application specific KControlApplication class from +KControlApplication. The class is generally used for control applications such as used in the KDE as separate programs. + + + +KWMModuleApplication + +KWMModuleApplication is another class that inherits KApplication for a certain purpose: the class provides methods that allow +interaction with the window manager. An example for a KWMModuleApplication is the kpager, who uses the signals that the +window manager sends out to manage the windows with the static methods of KWM. + +To create a KWMModuleApplication, you first have to create your application instance and then call the method connectToKWM() + + + +Docking of Windows + +Another issue to general KDE application design is the use of kpanel to display your running application symbolized. KDE users are +probably familiar with the display settings symbol left of the clock in kpanel. + +The way it runs is rather simple: You have to provide a widget that is the docked widget in the panel; therefore has to be a top-level +window by calling the constructor with 0 as parent. Include the kwm.h header file and call + +KWM::setDockWindow(mywidget->winID()); + + + +Mind that for undocking hiding the widget is not enough, you have to call destroy() (see QWidget for destroy() and +create()). + + + + +The Main Window + +As stated above, the first object to create for a KDE application is one instance of KApplication. Indeed, it doesn't provide any +widgets (visible user interfaces) except the about dialog similar to the QApplication class as a popup menu, but that isn't seen +anywhere. Therefore, any application needs a top-widget to make itself visible. + +When it comes to the visible parts, the programmer generally is free to choose which widget he wants to derive from or use directly as +his main window. It can be a simple QLabel as well as the advanced KTMainWindow that supplies all needed objects for a usual +desktop application. + + +General Rules + +Generally it can be said that you probably would like to use ready components that are specialized. KDE supports this with the class +KTMainWindow as a pendant to the Qt class QMainWindow. Before describing the general guideline, we have a look at the +exceptional: using any other widget. + +When using QApplication as the base application class, you would first create the application instance, then create the main +widget. Now, it is safe to register the widget as the top widget with the method setMainWidget(), because the user can use the +close button of the window to exit the window. He expects the application to be terminated, if the last window is closed, but to do so, +you have to call the QApplication slot quit(). You could do this in a derived class by a re-implementation of +QWidget::closeEvent(), but with the method setMainWidget() this is already done. Now, in any case of using widgets with +KApplication, things are almost the same with the difference that the according method of KDE is setTopWidget(). +The only exception is when using the class KTMainWindow which automatically does this in its constructor (if there is no other +topwidget). + +Another way would be to set no window explicitely as a top widget or main widget at all when using several top-level widgets. As the +application object still has to terminate with quit(), you can as well use a connect() to call it automatically if the last +application window is closed (using QApplication's lastWindowClosed() signal): + +QObject::connect(kapp, SIGNAL(lastWindowClosed()), kapp, SLOT(quit())); + + + +Using KTMainWindow + +As usual desktop applications provide a complete user interface following a common design rule for GUI programs, KDE provides a class +that already is capable of all needed functions that an application may make use of, KTMainWindow, which is located in the +kdeui library. It is strongly connected to KApplication and therefore very easy to use. The class provides: + + + +session management support + + +a main widget + + +a menu bar + + +as many toolbars as your application may require + + +a statusbar + + + + +The elements of the Widget themselves are already managed by KTMainWindow's geometry implementation, therefore you usually don't +have to take care of that to re-implement an application specific instance for your program. + + + + + +Event Handling + +This chapter will illuminate some of the internals of KDE/Qt programming, and will dive into the fascinating subject of event handling as well. It is meant for people who feel they need deeper insight to the more advanced topics of Qt based programming. In particular the Signals and Slots mechanism is explained in detail. This because users have indicated that resources +about the meaning and usage of signals and slots are somehow hard to find in other +documentation. For non-english persons the translated version are available, offering easier access +than the originals. + +Event handling covers the communication of an application. Withn that, we mean the interaction between different objects and between objects +and the user. Beginners in particular have a hard time to learn the mechanisms underlying event handling. Many of the misconstructions found in beginners' code can be attributed to a lack of understanding of the Qt signals and slots framework. + +Signals and slots are formally not a part of event handling but are used during the +event processing often and are a major reason why simple widget elements such as buttons +can be usd in such a simple way. + + +Signals and Slots + +This section covers the Qt concept of advanced object communication. +In this context objects are the instances of classes that are +created during runtime by the application. The instances normally don't know about each other, but they have to communicate to allow +method calls of other object's methods. The usual way for XWindow has been using function pointers, but this lead to very complex code. It also gives no opportunity for the compiler to check types (a function pointer is actually just a (void*) pointer). + +The Qt library offers a far better solution to this by a mechanism that is called signals and slots. + +Before going into the technical details, I'll explain the mechanism by a comparison to everyday-life. Imagine you have a bunch of +people somewhere and someone looks into the sky. He sees a balloon and points with his finger to the balloon and says: "Hey, there's a +balloon !". Now, what do other people do that are standing around him ? One who is interested in balloons will look up as well and +have a look at it, maybe take a picture with a camera. Others won't because they were never interested in balloons and don't want to +know about it; they just ignore what was said. + +With Signals and Slots, things are just the same, except that instead of people objects interact. Objects are instances of classes that can +send out a signal in a certain situation. Objects which are interested in that kind of signal react to it, others do not. While humans have +the choice to react interactively, class objects can't because they have no ears. But they can provide a kind of ears that listen to +signals that were sent out. Then, those special kind of ears have to be connected to the signal an object emits to provide the medium +to transmit the message to the receiver. Any kind of ears that could react won't if they are not connected with the signal and +therefore ignore the message transmission. + +I hope this made somehow clear how the signal/slot mechanism works generally. The chart shows this a bit more appropriate: + +Person_1 Person_2 Person_3 + +signal balloon_seen(); slot i_see_it(); slot not_interested(); + +watch_out(){ i_see_it(){ + if(balloon){ look_where(); + emit balloon_seen(); } + } +} + +connect (Person_1, SIGNAL(balloon_seen()), Person_2, SLOT(i_see_it())); + + +This explains more about the functionality. The class that builds Person&_;1 provides a signal balloon&_;seen(). Also it has a +method watch&_;out() that symbolizes that he watches for something. If this method detects that a balloon is there, it emits the signal +and transmits the message to the outside of its responsibility. After the emit, Person&_;1 is not responsible for any actions that +follow as a reaction to this signal; it just does the message invocation. + +Now, the table contains the other persons Person&_;2 and Person&_;3. Both provide methods that are slots; Person&_;2 has one slot that is +called i&_;see&_;it() and Person&_;3 a slot not&_;interested(). Those slots are just like any method with the difference that they can also be +connected to a signal and build a receiver for the connection. They will execute the slot implementation when the object +receives the signal message. In this case, we have a typical connection method at the last line. The connect() takes Person&_;1 as a +signaler object. It connects the signal balloon&_;seen() that the object may send out when he sees a balloon with Person&_;2. Person&_;2 is +then the receiver object. Now, the receiver has to do something with the signal; we have to tell him, which method to execute whenever +Person&_;1 sees a balloon. The implementation of the slot i&_;see&_;it() just calls another method to make this example short. look&_;where can +symbolize a method to localize the coordinates, the color, the size of the balloon or how many people the balloon carries. + +Person&_;3 then is anther object. The class that builds it provides a slot as well, the method not&_;interested(). The implementation +doesn't matter for our example here, because we don't want Person&_;3 to react to Person&_;1's detection of a balloon. We could, if we add +another connect though, just with Person&_;3 instead of Person&_;2 and the according slot Person&_;3's class provides. + + +Requirements + +This way of object communication is not provided by C++; it is a part of the Qt library. + +If you want to use Signals and +slots they have to be declared as such in the class-declaration for two good reasons: + + +you know which signals and slots a class provides and the parameters they need + + +the moc (Meta Object Compiler) of Qt can create the implementation for signals and slots automatically and include it to the compile process (since signals and slots are not part of the C++ standard, your C++ compiler wont do that) + + + + +Now, we're going into the details of the Qt library. To make use of the signal/slot mechanism, you have to: + + + +inherit from QObject or any subclass of QObject + + +add the macro Q&_;OBJECT at the beginning of the class-declaration (without a semicolon !) + + +run moc over the header file to produce an implementation file to be compiled + + + + +Normally, KDE and Qt applications constructed with automake and autoconf (amongst them all programs made with KDevelop) already run moc when necessary. This is done by +the program automoc, which also does everything needed to create the meta object implementation for signals and slots as well as +incorporating the correct headers for the implementation and the inclusion into the build-process. So you don't have to take care of +updating any moc output files after changing header file implementations nor about the integration of the moc source file output into +the project. Those will be automatically generated by detection of the Q&_;OBJECT macro in the class declaration. + +If you have further questions please read the page "Using The Meta Object Compiler" of you Qt Online Reference. It covers all restrictions +on using signals and slots. + + + +Emitting Signals + +This part describes the several ways of signal emission. It is important to know where signals are emitted and for what +purpose you would do so. + +We separate two ways of signal usage, one which is the usual way through sub-classing QObject, and the other to use the +QSignal class from within classes that don't want to inherit from QObject but want to use the signal emission features. + +So, when deriving from QObject, we already said that we have to add the Q&_;OBJECT macro into the class declaration. Then any +signal that a class object will emit has to be inserted in the class declaration with the modifier signals: + +Example: +class Foo : public QObject{ + Q_OBJECT + +public: + Foo(); + +signals: + void mySignal(); + void myParameterSignal(int, int); +}; + +This shows the insertion into the class declaration and also shows that you can use signals to emit values as well. This is one of the best features and is widely used throughout KDE and Qt. + +Now, this shows one half of the work. The other is: where does the signal get emitted ? For this, you have to use the keyword +emit in connection with the signal name and the transmitted actual parameters. The place where to emit is usually within a method +that is processed and wants to inform about the state of the object by the signal to outside objects. +The keyword emit is technically only an empty &#;define, therefore the C++ -compiler only sees a normal method call. The +moc takes care to add the according meta-object creation and initialization, which finally implements the signal as a member +function in the moc output. + +As an example, we have a look at a snippet of code where a method of KMyClass cuts out a part of a visible area +the user works with: + +void KMyClass::cut(){ + + int xpos=view->xPos(); + int ypos=view->yPos(); + view->cut(xpos, ypos); + + emit cutting(xpos, ypos); +} + + +This method could be called e.g. from a toolbar icon "Cut" or the according menu entry of the application's menu bar. We assume that we +have a view area that we retrieve as a pointer view. The class providing the view area offers cutting a selection by an x and y +integer value. The actual values can be found out with xPos() and yPos() and stored into xpos and ypos to avoid temporaries +and to reuse the values for emitting the signal. Then, we call the cutting method via the view object by the actual parameters. +Finally, we want to inform about what's being done by emitting a signal cutting(). In case anyone needs to know about what +happened, we have also included the exact information about where we have done the action by transmitting the values with the signal. + +Another way to produce a signal is, as mentioned, possible without sub-classing QObject. Qt provides this by the class +QSignal. The usage is rather simple, though inheritance of QObject should always be preferred. + +To use QSignal, write a normal C++ class. Then add the following: + + +&#;include &<;qsignal.h&>; + + +add a QSignal member attribute to the class declaration + + +add a method void connect(QObject* receiver, const char* member); to the class + + +create the signal in the constructor with new + + +destroy the signal in the destructor with delete + + +implement the connect() method by calling connect(receiver, member) on the signal to emit + + +emit the signal at any place in your class code with yoursignal->activate() + + + + + + +Slot Implementation + +After explaining the ways of how to produce signals by objects, those can only be of important use if an application's classes provide +slots that get connected with signals. The slots themselves are normal C++ class member functions and can therefore be called any place any +time you need to, only depending on the class access rights. They just have an additional feature that they can be called automatically +during runtime by their connected signals. The main difference is the declaration of the methods within the class: + +class Foo : public QObject{ + Q_OBJECT + +public: + Foo(); + +public slots: + void mySlot(); + void myParameterSlot(int, int); +}; + + +Above, you see that the class Foo has two slots declared in the class-declaration. As the modifier is also preset, here to public, +it follows that you can also restrict slot usage by access rights to public, protected and private. The only thing to watch out for +is that all methods after public slots: are slots, so you have to start with public: again, if you want to add public methods +behind the slots declarations. Whe connecting signals to slots, the sender can only connect to slots the receiver allows to call +depending on the access rights e.g. a private slot cannot be called by an instance of another class than the own (which means only +instances of the same class can connect signals to this slot). + +Another restriction is the return type. As slots are most often called by signals, where should they deliver any return values ? +Therefore, your slots will always have void as return type. + +For all restrictions of implementing slots in classes, see +the Qt online reference documentation, section The Meta Object Compiler. + + + + + +Connections + +The last section of this chapter deals with connecting signals and slots. As stated in the Signals section, there are two ways to +produce signals, and in the Slots section we saw that slots are methods which have modifiers as well. + +When it comes to connecting signals and slots, you generally will use the static method of QObject to send a signal to a method: + +bool connect(const QObject* sender, const char* signal, + const QObject* receiver, const char* member) +bool disconnect(const QObject* sender, const char* signal, + const QObject * receiver, const char* member) + + + +Both are static public members of QObject and can be called everywhere in the code if you want to connect/disconnect a sender and +receiver by certain signals and slots. The signal in these methods have to be used with the SIGNAL() macro; the slot of the +receiver has to be used with the macro SLOT(). + +Note: within classes that inherit QObject you don't have to use the static variant, so instead of using +QObject::connect(), you can also use the overloaded methods that either the sender provides (such as QMenuData to connect +activated() directly to the receiver's slot while inserting a menu entry) or just call connect() directly. + +Further, the signal and slot should have the same parameter list as parameters are translated from the signal to the slot method. Slot +implementations that don't require using any transmitted parameter only have to declare the type but do not need a formal parameter. +This avoids the unused parameter warnings you usually get when declaring formal parameters which aren't processed in the method. The +slot methods itself can also have less parameters than the signal emits. + +Also, signals can be forwarded. This means, you can use the connect() method to connect two signals, meaning that the sender's +signal will cause the receiver to emit the connected signal. +If several slots are connected to one signal, the slots will be ececuted one after the other, in an arbitrary order, when the signal is emitted. (Qt documentation: metaobjects.html) + + + + +The Event Queue + +The previous chapter dealt with the object communication by Qt's signal/slot mechanism and we know how an application can arrange +a certain functionality. +But we have not yet discussed the events produced by the user. Generally, he communicates with an +application by the keyboard and the mouse. When running an application under XWindow, the X11 protocol ensures that the right +application is called to process the events. Only the application object receives the event and can provide means to +handle them. This is called event handling. The application object therefore has to keep an event queue when initialized where events +run into and get processed to the right application window. The application itself is running in a so-called main event loop, +which indicates that it waits for user interaction until the user quits the application either via the quit() slot or by calling +exit(). The exit() function also returns the value to the main() function's call of exec() to terminate. If the number +exit() is called with is higher than 0, an error has occurred. The exec() function call in main() starts the event handling. + +X11 event handling starts by defining the events the window is willing to process. All other +events are already filtered out. The events which are selected, go into the event queue and +wait to be processed. Typical events include the XExposeEvent, XDestroyWindowEvent and XResizeRequestEvent. All these events have to be handled by the application. Fortunately (for you) Qt takes care of most of the event processing. This is done using the QEvent class; the Qt event abstraction. + +This QEvent is then processed by QApplication's notify() function. This sends all receivers which are derived from +QObject and are part of the application the according event with receiver->event(QEvent* event). The application objects +therefore get notified about any event that happened and can process the event via the re-implemented event() method of +QObject if needed. QObject also allows a self-created event filter functionality by installing an event filter on the +class. The event filter is processed first if one is installed and then the event method returns control over the event if the event +filter returned false. If the event() method doesn't find any event processing, it returns false and the application gets to +know that the object didn't sign responsible for the event. If the event was successfully processed and the event() returns +true, the event is deleted from the event queue. + + +Processing Events + +Qt and KDE applications use a graphical interface to make themselves visible to the user. Application windows are deived from QWidget, the baseclass for any graphical object drawn in windows. Independent of how the widget +is created, the application object notices all widgets that are created and keeps a list of these. Furthermore, the windows can have +several states dependent on how they are created. + +The QWidget class is most important to understand because it re-implements the event() method already to transform the +incoming event to some commonly occurring events, e.g. a mouse event, and creates appropriate filter event functions which are easier +to re-implement for the special purpose a widget may need. This is e.g. used for any widget that inherits the QWidget class, +because those events can be used to send out signals that are avoiding any sub-classing of common widgets such as pushbuttons. The +pressed() signal e.g. is emitted on the re-implementation of QWidget's mousePressEvent(), showing that you don't have to +subclass a simple pushbutton to find out the event and to get notified that the user pressed it. + +Re-implementing these methods is one of the common tasks of a programmer writing his own widgets, therefore you will have to know about +the virtual event functions of QWidget and the event queue processing very well. + +Above, we mentioned that a widget can have several states. This predefines the behavior of the widget towards the user as well as +towards the application object. + +A widget can be: + + +a main widget when set as the main widget with QApplication's setMainWidget() or KApplication's +setTopWidget. + + +a top widget when the parent of the widget is 0. + + +a modal widget usually a QDialog which has its own event loop + + +a semimodal widget like a QDialog, but without its own event loop + + +a popup widget when the widget flag is set to WType&_;Popup, is also a top widget + + + + +The specialized behavior of the widgets depending on their creation is then: + +main widget: a main widget is the most important widget of the application, but the application doesn't need to have a main +widget of course. If it has, and the main widget gets closed, the application terminates automatically by calling quit(). +The QApplication method mainWidget() returns the pointer to the main widget. + + + +top widget: a top widget is a widget which has no parent. All widgets that have non-zero parents are +sub-widgets of the parent. The list of top level widgets can be found with QApplication::topLevelWidgets(). If an application +doesn't have a main widget but only top widgets, connect quit() to QApplication::lastWindowClosed() to terminate the +application, otherwise the application object will still exist even if all windows are closed. The application finds the currently +active (focus enabled) widget with QApplication::focusWidget(). + + + +modal widget: a modal widget is a widget derived from QDialog. QDialog widgets have their own local event loop +which is entered when calling exec() on the dialog object. The dialog is modal, if the third widget flag is set to true, +meaning that the dialog has to be terminated before the event processing can return to other application windows. All events are sent +to the dialog by the application object. The current modal widget is found by the application by +QApplication::activeModalWidget(). + + + +semimodal widget: is a widget that disables events to other widgets like a modal dialog but does not have its own event +loop. The modal flag has to be set to true like for a QDialog, although the semimodal dialog is derived from QWidget. + + + +popup widget: a popup widget is a popup that, when it appears, makes the application object send all events to it. The popup +has to be finished before the event returns to any other widget, except for another popup. The current popup widget is found by the +application object by QApplication::activePopupWidget() to post the events to. + + + + +The application object itself keeps track of all widgets that it is responsible for. The list of widgets can be retrieved by +QApplication::allWidgets(). + +Summary: The application object is responsible for retrieving the events that were invoked by the user from the underlying window +system. Then it converts these events via QEvent and can sent the event to any widget that is currently active. The widget itself +is responsible to process the event either by accepting the event after finding out that it has an event-handler (or to be precise: the +event handler has to return true to the notifying of the application's event posting). The event is deleted from the queue if an event +handler was found, if all possible event handlers return false, the application is not responsible for the event and the event is +ignored (deleted from the queue as well). + +What is left to explain about event processing is the installation of own event filters for widgets or any other object derived from +QObject and the way QWidget contains a pre-defined event handling that has to be overwritten for processing events on custom +widgets. Mind that as a guideline to define own event handling, you should reimplement QObject::event() for all classes that do +not inherit QWidget and the more specialized event handlers described below for all QWidget inherited classes. Also, preserve +the declarations as virtual protected to ensure reusability and consistency for your code. + + + +Event Types + +The events sent to the application are, as described, converted by QEvent to Qt events. The event type can be found out by using +the type() method of QEvent, which can then be compared with the event that you want to know about. Now, the event type that +type() delivers is an integer number; those are declared with &#;define in the file qevent.h. + +Qt 2.0 uses an enum +for all available event-types whose entries are similar to the current defines but generally leave out the Event&_; prefix. The +event type can be retrieved as described above, so you only have to change the comparison of the event type. + +After filtering +events for the specialized event class, more information can be found out by explicit conversion to the event class to retrieve exact +data about the event. + +Example: +bool MyClass::event( QEvent* event ){ + + if( event->type() == Event_MouseButtonPress){ + if( (QMouseEvent*)event->button() == RightButton ){ + // do something with the event, eg. pop up a contextmenu + return true; + } + else{ + return false; + } + } + else return false; +} + +The event has been explicitely converted to QMouseEvent* here to find out the button type. You could also find out the position of +the mouse pointer at the time of the event, see the following section about mouse events + +As there are so many event types that can occur, I have sorted the events defined in qevent.h logically according to the general +event type and the subclasses that provide an event handling and offer the exact information about specific events. The sorting +contains: + + + +Window Events + + +Focus Events + + +Mouse Events + + +Keyboard Events + + +Drag'n Drop Events + + + + +This will allow you to logically have a look at what might be interesting to reimplement or use before having to browse the Qt online +documentation in depth. + + +Window Events + +By window events, all events that are produced by the window system in regards to handling any visible part of the application windows. +This does also include the event processing in the other direction, because by methods like QWidget::close() or +QWidget::repaint() events are sent to the window system to execute a synthetic events to manipulate the window behavior (either +inside the window or affecting the whole window). + +This is sometimes a bit hard to understand, so I will give another short example here. Assuming you have an application that has a +window on the desktop. This window can be manipulated by the user through actions like: + + +resizing + + +moving + + +obscuring with another window + + +closing + + +showing by execution + + + + +These are incoming events that are sent to the application. The event type is determined by QWidget's event() +re-implementation and converted to the according event class that provides methods to handle the event specifically. Now, when you have a +look at the QWidget class, a lot of methods are provided for window manipulation, e.g. resize(). You're using these methods, +but you probably never thought about their way of execution. In effect, these methods work the other way round: they produce an event +that is sent to the display by qt&_; functions to execute actions like simulating a user action. This way, events can also be +produced to gain synthetic events ( see below ). + +Within a window, the widgets are arranged somehow. As each widget is treated like a separate window internally (it always is a +QWidget or inherits it), the same events can be processed randomly inside the window for incoming events as well as manipulating +internal parts of a window. + +The following chart shows the according event classes with the event types they process: + + + +QShowEvent: Processed by QWidget::show() + + +Event&_;Show + + + + + +QHideEvent: Processed by QWidget::hide() + + + Event&_;Hide + + + + + +QCloseEvent: Processed by QWidget::close() + + +Event&_;Close + + +event handler: QWidget::closeEvent(QCloseEvent*) + + + + + +QResizeEvent: Processed by QWidget::resize() + + +Event&_;Resize + + +event handler: QWidget::resizeEvent(QResizeEvent*) + + + + + +QPaintEvent: Processed by QWidget::repaint() calling the event handler directly, and QWidget::update() which +generates a window system paint event. + + +Event&_;Paint + + +event handler: QWidget::paintEvent(QPainEvent*) + + + + + +QChildEvent: not included in the release version of Qt; to handle these events reimplement QObject::event() or install +an event filter. Child events are inserting a child widget or removing it + + +Event&_;ChildInserted + + +Event&_;ChildRemoved + + +Event&_;LayoutHint + + + + + + + +Qt 2.0 includes another event class QWheelEvent to handle events that occur by wheel-mice. The QWidget class also +provides an already existing event handler for this, wheelEvent(QWheelEvent*). Also all drag'n drop events have their +event-handlers already in QWidget, see the notes for drag'n drop + + + + + +Focus Events + +Focus events are somehow special to windows, but I have added a separate section for those due to the filtering of focus events in +QWidget. A focus event is generally the fact that a window consists of several widgets who have a focus policy, which means that +there can only be one widget at a time that can have the current input focus. The focus itself can be activated by a mouse click to +activate the clicked widget or pressing the TAB key to forward the focus to the next widget in the tabring focus. Backwards focus +setting can be done with SHIFT+TAB. This is a common usability and users expect windows to have this behavior so they can navigate the +focus to the next widget. A good example for this is a dialog. If the dialog is a modal widget, it has to be finished first, otherwise +is active when it gets the focus if it is the active window. Now, on dialogs widgets can be disabled as well to prohibit any user +input. These disabled widgets don't get the focus either and are painted disabled. + +The QWidget class defines the focus handling already when receiving an event. If the event type is Event&_;FocusIn, the widget +gets the keyboard focus by event()'s conversion into a QFocusEvent. + +This already catches a key event of the keys TAB and the combination SHIFT+TAB without processing these keys to QKeyEvent if +there is a widget the focus can be forwarded to. Anyway, you can influence this filtering by setting focus policy. The focus policy +can be set to: + + +QWidget::TabFocus TAB-focusing + + +QWidget::ClickFocus focus on mouse clicks + + +QWidget::StrongFocus focus on TAB and mouse clicks + + +QWidget::NoFocus no focus at all + + + + +The QFocusEvent class delivers information about the focus event by comparing the event type with type(). The method +gotFocus() returns true on Event&_;FocusIn and lostFocus() returns true on Event&_;FocusOut. The QWidget +predefined event handlers are: + + +focusInEvent(QFocusEvent*) for Event&_;FocusIn + + +focusOutEvent(QFocusEvent*) for Event&_;FocusOut + + + +You have a lot of choices to influence the default focus handling by the methods provided by QWidget, e.g. you can forward the +focus to another widget with setting another focus order. Mind that the focus is arranged in a ring and your implementation of this +manipulation should take care that it doesn't break the focus handling. The default focus ring depends on the declaration of your +widgets while constructing; if your tests result in a fuzzy focus order you have to recheck the declaration. The default design should +always be left to right and top to bottom for forwarding the tab-focus. When using the geometry layout management you should declare +your widget order first and then implement the layout. + +Hint: if your widgets use multilineedits, the user expects the tab key to produce a tab in the text, not the forwarding of the +focus. Therefore a simple method is to use setFocusPolicy(NoFocus) or setFocusPolicy(ClickFocus)on all additional widgets +that are in the current window. Menubars and Toolbars do not have the tabfocus by default, so you don't have to set the focus policy +there. An exception is the QWhatsThis button, which although mostly used in a toolbar, receives the input focus on TAB. + + + +Mouse Events + +Mouse events are, as the word says, generated by the user's handling of the mouse. As these will only be of interest if the mouse is +over a widget, the best use to process mouse events is to reimplement the virtual methods QWidget provides for this. Now, the +window system sends the following event types to the application by mouse actions: + + +Event&_;MouseButtonPress + + +Event&_;MouseButtonRelease + + +Event&_;MouseButtonDblClick + + +Event&_;MouseMove + + + +This means, that the user can handle the mouse with moving the cursor in X and Y direction, press any button and release it. A button +can also be doubleclicked, which is a special event and requires special handling. As the event message is filtered by the event() +method of QWidget, these event types are converted from a QEvent to a QMouseEvent. Then, the mouse event is processed, +whereby QWidget provides a set of event handlers already. What is interesting about a mouse event is not only the type, but the +other parameters, as mentioned, to implement certain actions on specific events. One of the most recently used event types are probably +a right button press over a widget to open a context menu to allow quick access to commands that are available. This requires the exact +position of the event's occurrence and a comparison of the button type. Double clicks are processed by the user as producing a mouse +press event followed by a mouse release event and another mouse press event. As the time between the release and the next press cannot +be easily determined, the QApplication class has methods to define the click time which is by default 400 milliseconds: +QApplication::setDoubleClickInterval(int ms) is what you need. + +The QMouseEvent class allows finding out the exact event by providing information about: +Button type: using button() + +NoButton + + +LeftButton + + +RightButton + + +MidButton + + + +Mouse Position: + +pos() : relative mouse position within the widget (x,y) + + +globalPos() : absolute mouse position on the desktop (x,y) + + +globalX() : global x position of the mouse pointer from left to right + + +globalY() : global y position of the mouse pointer from top to bottom + + +x(): relative mouse position within the widget from left to right + + +y(): relative mouse position within the widget from top to bottom + + + +Additional Keyboard presses at the same time: using state() and OR'ed with Left,Right and MidButton + +ShiftButton + + +ControlButton + + +AltButton + + + +The provided event handlers are: + + +Event&_;MouseButtonPress + + +virtual void mousePressEvent ( QMouseEvent * ) + + + + + +Event&_;MouseButtonRelease + + +virtual void mouseReleaseEvent ( QMouseEvent * ) + + + + + +Event&_;MouseButtonDblClick + + +virtual void mouseDoubleClickEvent ( QMouseEvent * ) + + + + + +Event&_;MouseMove + + +virtual void mouseMoveEvent ( QMouseEvent * ) + + + + + + + +Thereby, the mouseDoubleClickEvent() by default only produces a mousePressEvent. You have to reimplement the +mouseDoubleClickEvent() to receive the event and process it as it is produced as an hypothetic event, not produced by the window +system under X11. Set the double click time with QApplication::setDoubleClickInterval(). + +For MouseMove events, you have to watch that the mouse event is only handled if a button is pressed. This can be configured by +QWidget::setMouseTracking(true) to receive all mouse movements as QMouseEvents in the event handler. The implementation +therefore is on QWidget: the event is raised, event() asks if mousetracking is set to true. If not (default), the event is +ignored, if yes, the event is converted to a QMouseEvent and delivered to the mouseMoveEvent() event handler. + +Additionally, the widget can detect if the mouse enters the widget's space. This is done by filtering out the mouse movement before +generating the QMouseEvent in QWidget::event(): + + + +Event&_;Enter + + +virtual void enterEvent ( QEvent * ) + + + + + +Event&_;Leave + + +virtual void leaveEvent ( QEvent * ) + + + + + + + +An example for reimplementing an enter and leave event is QToolButton. The buttons in the toolbar have a automatic raising +behavior in windows style, therefore the widget uses an enter event to raise the button in 3D and lowers it when the mouse leaves the +widget area. + +Wheel mice are offering an additional functionality for scrolling by the wheel. Qt 2.0 offers solutions for +handling wheel events in a separate event class QWheelEvent, therefore these are not handled as mouse-events. + + + + + +Keyboard Events + +A keyboard event is generally sent to the application if the user pressed or released a keyboard button, therefore can determine the +event by: + +Event&_;KeyPress + + +Event&_;KeyRelease + + + + +Handling + +Now, the QWidget class converts a keyboard event from QEvent to a QKeyEvent if the widget has the keyboard input focus; +if the widget has tabfocus policy, the TAB and SHIFT+TAB key-presses are filtered out to produce a QFocusEvent instead a +QKeyEvent. The QKeyEvent class provides more convenient methods to process the key event. Those have some specialties which +I want to discuss. + +Event Handlers: + +QWidget provides two event handlers for the two event types the keyboard produces: + +virtual void keyPressEvent(QKeyEvent*) for Event&_;KeyPress + + +virtual void keyReleaseEvent(QKeyEvent*) for Event&_;KeyRelease + + + +Acceptance: + +The widget that receives a QKeyEvent and re-implements the event handlers from QWidget has to determine if it wants to accept +or ignore the keyevent, so the widget can sent it back to the parent widget. Therefore you have to know that the accept flag is set to +true in the constructor of a QKeyEvent. You can clear this flag with calling ignore() if you don't want to process the key +and sent it back. + +Modifiers + +The user can press so-called key-modifiers. Those are the ShiftButton, ControlButton and AltButton. The currently pressed modifier keys +can be found out with state(), which returns the modifiers OR'ed together. + +Key Values + +The key values for all keyboard keys are defined in the include file qkeycode.h. + +Qt 2.0 has all keycodes coded into +namespaces of the class Qt located in qnamespace.h, enum keys. + + The key that produced the event can be +retrieved with key() and then compared to the defined keycode. The ASCII value can be found with ascii(). Mind that the +symbolic constants for key values are platform independent and allow the best usage as they are simple to remind. + + + +Keyboard Accelerator Questions + +A question that often occurs is the implementation of keyboard accelerators. As this handbook primarily targets KDE programming, I will +go into that as well. + +Qt has a class QAccel which offers connections of key presses with actions. This is done by installing an event filter that +filters out keyboard events that match any item inserted into the QAccel object. The keyboard accelerator itself has to be a +combination of the CTRL, SHIFT or ALT keys with a normal keyboard key. Another value can be ASCII&_;ACCEL here to use +the ASCII keyboard value for the accelerator. + +An accelerator instance is then created by using the widget that it should work for as an event filter with the widget as its parent. +Insert the keys with insertItem(keycode, ID ). Although setting the ID is not necessary, you should write yourself a logical ID +table containing integer value defines that allow using the ID later to find the accelerator item and helps keeping an overview over +the used numbers. + +Then, the item has to be connected to the object and slot it shall work for on its signal activated(int ID) using the +connectItem() method instead of the usual QObject::connect() variant. + +Popup menus (only within menu-bars) already provide accelerator usage without explicitely creating a QAccel instance. You only have +to use setAccel() there; see QMenuData for more details. + +Now, when it comes to KDE, things will be a bit different because KDE offers some additional features. First of all, you have to use +the class KAccel instead of QAccel; the usage is almost the same. The KAccel class (part of kdecore) also offers an +insertion into menus and configuration of accelerator keys, which then can change the menu entry as well. + +Further, KDE provides globally configured accelerators for standard keys.Those are defined in kaccel.h and only have to be +inserted. The class documentation also shows the usage of standard accelerators and accelerators in general by examples. + +Whenever an application offers keyboard accelerators, users often feel uncomfortable with the given values and want to change them +themselves. Also, the programmer usually sets keyboard accelerators for those slots that he thinks are the most needed functions in his +program; in fact he should in any case add accelerators to all of his available menu entries and functions. Further, KDE has two ways to +offer configurating the KAccel object as well as saving the configuration to the application config file by providing a ready-to +use dialog for configuration as well as a widget that can be used within a custom configuration dialog (most often a tab dialog) to +configure the keys. + +For accelerator configuration dialogs, see section Keyboard Accelerators. + + + + +Drag'n Drop Events + +One of the most advanced techniques to allow application communication is drag'n drop. This offers users a cool and fast feature to +handle the objects they work with in an application by an intuitive interface, catching it by a symbolic icon or by marking parts of a +document and move the dragged object away from the current area. The area the dragged object comes from is therefore called a +dragsource. Then the user moves the object away to another area of the application, to the desktop or into the area of another +application. After releasing the mouse button over there, he expects the data dragged to be dropped into the drop area. Therefore the +drop area is also called a drop site or a drop sink. The window system provides a protocol for this, the XDND protocol, which +causes the emission of the according events. The application windows can support these events by providing methods to drag object out +of the window and methods to accept a drop event. Qt implements this by a class QDropSite. + +Qt 2.0 makes this a lot +easier. QWidget already contains all event handlers that are mentionend here for the class QDropSite, therefore you only have +to remove the inheritance from QDropSite of your drag'n drop enabled widget and add a call to setAcceptDrops(TRUE) in the +widget's constructor. + + The widget that wants to use drag'n drop has to inherit this class additionally to the base widget +class. Then, the QDropSite offers additional event handlers that convert the QEvent types for drag'n drop to one of the +according specialized event classes. The programmer also has to take care in his re-implementation of the mouse event handlers by which +mouse button holding a drag can occur. Also, Qt currently provides two types of data to decode, text and images, which should be the +most common usage. The following chart contains the window system events, the event classes handling these events and the event +handlers of QDropSite: + + + +Event&_;DragEnter + + +QDragEnterEvent + + +event handler:virtual void dragEnterEvent(QDragEnterEvent*) + + + + + +Event&_;DragMove + + +QDragMoveEvent + + +event handler:virtual void dragMoveEvent(QDragMoveEvent*) + + + + + +Event&_;DragLeave + + +QDragLeaveEvent + + +event handler:virtual void dragLeaveEvent(QDragLeaveEvent*) + + + + + +Event&_;Drop + + +QDropEvent + + +event handler:virtual void dropEvent(QDropEvent*) + + + + + + +The event handlers are all implemented as public and reimplementations should preserve to + +Note: the system event Event&_;DragResponse is automatically handled by the application object internally through the +Qt implementation. It causes a QDragResponseEvent that accepts/rejects the drag action. + +KDE also contains another implementation of Drag'n Drop functionality. The description of using KDE 1.x Drag'n Drop has been +left out because this will be removed in KDE 2 and only the Qt implementation is going to be used with an extended implementation of +the XDND protocol. + +There exists a zoo of DND protocols. At the moment of writing, the Qt DND protocol does +not support the Motif DND protocol (as used by for instance Netscape and GNOME). +Please be aware of this if you reimplement the Qt DND functions. + + + + + +QWidget Virtual Methods + +As the event handling generally is implemented by virtual protected methods, especially the event() method provided by +QObject, the QWidget class reimplements this function in order to sort out the incoming event and convert it to other event +types that can be handled by more specialized classes. Furthermore, it calls the provided additional virtual methods by default +implementations. The programmer has a good advantage by this pre-selection of events as the widgets he creates are all derived from +QWidget and therefore will need one or more special event handler implementation. The most common events that are processed are +mouse events and for text input mostly keyboard events. The other events mostly deal with focus handling, which moves on the keyboard +input focus from one widget to the next. Programmers need to know about focus handling well, because the user will expect a certain +behavior over his widget when using the TAB key and the SHIFT+TAB combination to move the input focus forward. + +Like explained in the Event Queue chapter, the QApplication takes care of converting window system events to objects of the +QEvent class that are handled by the QObject::event() method. Therefore all classes that are derived from QObject can +process event handling. The class QWidget already contains an overwritten event() method. It first checks for installed event +filters (which are additionally created event filters by the programmer to redefine the default behavior by processing the event +themselves or only the wanted events). Then it decides by the type() of the event which kind of event was called and converts it +to one of the following event classes derived from QEvent who are delivered to the according virtual methods: + + + +QCloseEvent + + +virtual void closeEvent ( QCloseEvent * ) + + + + + +QFocusEvent: keyboard input focus event; widget gets the focus and looses it due to preselection of TAB and SHIFT+TAB by +event() + + +virtual void focusInEvent ( QFocusEvent * ) + + +virtual void focusOutEvent ( QFocusEvent * ) + + + + + +QMouseEvent: mouse events + + +virtual void mousePressEvent ( QMouseEvent * ) + + +virtual void mouseReleaseEvent ( QMouseEvent * ) + + +virtual void mouseDoubleClickEvent ( QMouseEvent * ) + + +virtual void mouseMoveEvent ( QMouseEvent * ) :with pressed mouse button by default. Use setMouseTracking(true) to receive +all movements + + + + + +QMoveEvent: window move event, position change + + +virtual void moveEvent ( QMoveEvent * ) + + + + + +QKeyEvent: keyboard events + + +virtual void keyPressEvent ( QKeyEvent * ) + + +virtual void keyReleaseEvent ( QKeyEvent * ) + + + + + +QResizeEvent: widget is resized + + +virtual void resizeEvent ( QResizeEvent * ) + + + + + +QPaintEvent: widget needs repainting + + +virtual void paintEvent ( QPaintEvent * ) + + + + + + + +Additionally, two events are called that don't match any other event type but may be important sometimes: + +virtual void enterEvent ( QEvent * ): the mouse enters the widget space + +virtual void leaveEvent ( QEvent * ): the mouse leaves the widget space + +Reimplementing is always needed if your custom widget wants to process the event and react to it. The reason why the event gets split +up to other QEvent types is that the other event classes provide methods that are suitable to directly retrieving the needed +event-specific data. This means, that e.g. a QMouseEvent can be asked for the button that caused the event or was active at that +particular event as well as the global and relative mouse position where the event occurred. Mouse events are always used to pop up +context menus over widgets which need to know the button (right mousebutton) and the position, because the user expects the context +menu to pop up at the same position the mouse cursor currently is. + +The paint event is often needed if a widget has to draw something. Instead of creating a synthetic event (a logical event caused by the +program internally), call repaint() here. + + + +Event Filters + +In addition to the normal processing of the event queue that is provided by the application object, the programmer can influence the +default behavior by installing event filters. As explained above, all QObject inherited classes use event processing through the +event() method. Instead of writing a completely new event handler in situations where you only need some events processed by your +own methods, you should write an event filter. The event filter gets installed where you like to and filters out the event directly +when QObject::event() is called internally. + +To write an event filter, your class has to overwrite the QObject::eventFilter() method and call installEventFilter() as +well as removeEventFilter(). The declaration of these methods in QObject are: + +bool QObject::eventFilter ( QObject *, QEvent * ) [virtual] +void QObject::installEventFilter ( const QObject * obj ) +void QObject::removeEventFilter ( const QObject * obj ) + + + +The implementation of an event filter can be done in several ways. One that is possible is to create a new class for special event +filters and create an instance of this class in the program. Then you can install the event filter on every instance you like to to +achieve the same event filter on all instances independent of their class as well as redefining event processing of existing classes +without inheriting them. + +An example would be: + +// Classdeclaration + +class KMyAppFilter: public QObject +{ +protected: + virtual bool eventFilter(QObject* object, QEvent* event); +}; + +// Filterimplementation + +bool KMyAppFilter::eventFilter(QObject* object, QEvent* event){ + + if(event->type() == [the eventtype you like to filter]) + { + [your filter implementation] + return true; // the event has been caught and processed + } + else + { + return false; // return false to continue processing the event with QObject::event() + } +} + +// installing the filter + +QObject* myfilter= new KMyAppFilter(); +QPushButton* mybutton= new QPushButton(); + +mybutton->installEventFilter(myfilter); + + + +Another solution would be to reimplement the eventFilter() method in your inherited class as long as the base class is +QObject, e.g. if your view area of your application wants to process a certain event that is not covered by the virtual methods +QWidget provides. Then you have to install the event filter at the place you like to; normally this would be in the constructor of +your class. With removeEventFilter() you can stop the event filter from processing the events any time. + +Note: KApplication already has a global application event filter installed to filter out CTRL+ALT+F12 for +KDebug + + + +Synthetic Events + +Before describing what synthetic events are and how they can be used by the programmer, I want to review the last sections briefly. + +We saw that the application object receives the window system events, processes them and creates event objects from the classes the +library provides. The converted event can then be handled by event handlers that are specialized on the event class to retrieve further +information about the event. Finally, we can influence the event handling itself by installing event filters and overwriting provided +event handlers. + +This does the "normal" job of an application to execute actions according to user invoked events. On the other side, this system offers +another possibility: the fact that the events are converted to class instances can be reversed - a so-called synthetic event can be +created which fakes an original window system event. The next advantage is that these events are independent of the underlying window +system. + +A good possibility where this feature could be used would be e.g. for learning programs. Those are almost non-existent for Unix but +could offer a market to teach beginners how to handle programs similar to commercial products already available on other platforms. +Also this could be a part of a help-system which an application can provide. + +An example description how to implement this: + +Provide a help window with a button that invokes a step e.g. "Show me". On pressing the button, the cursor will move to the desired +location, e.g. to a pushbutton on the screen. The implementation then has to find out the exact position of the button and calculate +the center coordinates the mouse pointer has to move to. Then the mouse pointer could move there by construction of a QCursor and +using setPos(). The start position can be found out in the mouse event that called the function. Then, the cursor has to move +visually by using setPos() in a loop where a QTimer could be used to run between positions to slow down the move so that the +user can follow the mouse pointer. + + +Creating Events + +Now, to come to the actual implementation of a synthetic event, you have to know the event you want to create. Therefore, you need the +constructor parameters for the event classes. The following list contains the constructors including the event-classes hierarchy: + + + +QEvent(int type) + +type is one of the events declared in qevent.h + +Qt 2.0 uses all events from an enum +instead of the &#;defines. See QEvent. The types are almost the same except they leave out the Event&_; prefix. + + + + + +QCloseEvent() + +takes no parameter. Mind that the accept flag is set to false + + + +QFocusEvent(int type) + +type is either Event&_;FocusIn or Event&_;FocusOut. + + + +QKeyEvent(int type, int key, int ascii, int state) + +takes Event&_;KeyPress and Event&_;KeyRelease as type. +key is one of the keys defined in qkeycode.h. state is ShiftButton, ControlButton, AltButton OR'ed. + + + +QMouseEvent (int type, const QPoint & pos, int button, int state) + +The type parameter must be +Event&_;MouseButtonPress, Event&_;MouseButtonRelease, Event&_;MouseButtonDblClick or Event&_;MouseMove. The button is +LeftButton, RightButton, MidButton, NoButton. state is ShiftButton, ControlButton and AltButton OR'ed for event +Event&_;MouseButtonRelease, for events Event&_;MouseButtonPress, Event&_;MouseButtonDblClick state includes LeftButton, +RightButton, MidButton. + + + +QMoveEvent(const QPoint & pos, const QPoint & oldPos) + +pos is the new position the widget shall move to, oldPos the +old position. Retrieve the old position before creating the event with QWidget::pos(). + + + +QPaintEvent(const QRect & paintRect) + +raise a paint event to repaint the area paintRect + + + +QResizeEvent(const QSize & size, const QSize & oldSize) + +resizes the widget from oldSize to size. Retrieve the old +size before creating the event with QWidget::size(). + + + + + +An example on how to create an event would be: + +QMouseEvent press_quit(Event_MouseButtonPress, + quit_button->pos(), LeftButton, LeftButton); + + + +This creates a mousePressEvent() for the widget quit&_;button with the left button. + + + +Sending Events + +After creation, the event has to be sent to the application instance to call its execution. Thereby, two ways can be used: one that +directly processes the event and one that will place the event in the event queue at the last position: + +Direct execution: +QApplication::sendEvent(quit_button, &&;press_quit); + + +The sendEvent() waits for the result and returns true or false depending if the event has been accepted or not. + +Placement into event queue: +QApplication::postEvent(quit_button, &&;press_quit); + + +The event for postEvent() must be allocated on the heap as it gets deleted immediately after the posing. + +To turn a posted event into a send event, use sendPostedEvents(QObject * receiver, int event&_;type). This requires the options +given at the constructor. As you may see, some constructors don't need an event type, therefore the according event type can be found +in Event Types but is also simple to guess as they are only responsible for one event type. Example: +QCloseEvent only takes Event&_;Close, QPaintEvent only takes Event&_;Paint. + + + + +Event Precedence + +In relation to influence the event behavior of the application, the programmer often faces situations where long operations block the +Event&_;Paint and lead to a scrambled look of the application windows. These situations can be solved either by using a +progressdialog that indicates the operation progress or by event precedence. This means that the current event gets stopped and the +event queue is processed. The class QApplication offers a solution for this by two methods which are identical except the +parameters. One is processEvents(), which processes pending events for 3 seconds or until there are no more events in the event +queue. The other, more likely used method is processEvents(int maxtime), where maxtime is the time in milliseconds during +which pending events can be processed. + +On one hand this means stopping the current long operation which then would take even longer to get finished if pending events are in +the queue, but the user cares more about the visible state of an application than if an operation which takes some time will take a +second longer (or even parts of a second). + +KDE offers an additional library for I/O operations in the upcoming KDE 2, which is under development. This will allow running the long +I/O operations outside the application's process as multi-threading is not supported by Qt directly. + + + +Summary + +After this long chapter about signals, slots and events, I want to append a short summary so you can recapitulate the collected +knowledge about application behavior. + + + +An application can communicate internally by signals and slots + + +Signals are sent out without caring about who will catch it + + +Slots are normal methods that can connect to signals and react as well as they can be called where allowed by their access attribute + + +Slots cannot have default arguments + + +Slots return void + + +The user communicates with the application through the window system + + +The window system reports the events to the application + + +The application converts window system events to QEvents + + +The events are processed through an optional application global event filter + + +The event that passes the filter gets forwarded to the according window e.g. the current modal window + + +The widget receives the event and can have an event filter that comes first when the reimplemented QObject::event() is +called. + + +If the event passes the widget event filter, event() proceeds to convert it to the according Q***Event class + + +The event filters for these event types are called to react on the event + + + + +Further, we saw that the programmer can influence the behavior by: + + + +reimplementing any stage of virtual methods filtering events + + +creating synthetic events + + +sending synthetic events directly or into the event queue + + +the event queue can be given precedence that stop long processes to allow execution of waiting events to be processed + + + + +Finally, I hope this has given at least experienced C++ programmers a good insight and explanation on how Qt and KDE work. I have +collected the information by working myself into the class structure and I hope that this collection makes it a lot easier for other +programmers to get started especially in the advanced chapters of application design and programming. The information value is +therefore not granted to be exact; if you may find any misconcepted or incorrect information, please contact me via email. + + + + +User Control Elements + + +The Menubar + +The menu bar is a central component of the main window. It allows the user to execute operations that the application (or to be precise: +the mainview) offers in regards of manipulating the main view's contents. In opposition to Qt's QMenuBar, KDE offers the use of +the class KMenuBar. Additionally, the menu bar is already constructed for the programmer when using KTMainWindow with the +first call of menuBar(). + +The menu bar itself, independent which class is going to be used, contains entries that the user can select with the mouse or by using +keyboard accelerators with the ALT-key and the underlined character. The menus that have to pop up on a selection have to be created +with the class QPopupMenu, which itself only provides the popups, entries have to be inserted using the methods provided by +QMenuData. + +Mind that menu-bars should always contain all functions a program has to offer except those that can be accessed by additional dialogs. +The menu bar also makes use of the KApplication help menu already provided. Inserting the menu is just easy with + +menuBar()->insertItem(i18n("Help"), kapp->getHelpMenu()); + + + +Example construction of a menu bar with using KTMainWindow and setting the menu bar explicitely: +my_menubar=new KMenuBar(this,"my_menubar"); + +file_menu = new QPopupMenu; +file_menu->insertItem(Icon("filenew.xpm"),i18n("&&;New..."), + this,SLOT(slotFileNew()),0,ID_FILE_NEW); +file_menu->insertItem(Icon("open.xpm"),i18n("&&;Open..."), + this, SLOT(slotFileOpen()),0 ,ID_FILE_OPEN); +file_menu->insertItem(i18n("&&;Close"), + this, SLOT(slotFileClose()),0,ID_FILE_CLOSE); +file_menu->insertSeparator(); +file_menu->insertItem(Icon("save.xpm"),i18n("&&;Save"), + this, SLOT(slotFileSave()),0 ,ID_FILE_SAVE); +file_menu->insertItem(i18n("Save &&;As..."), + this, SLOT(slotFileSaveAs()),0 ,ID_FILE_SAVE_AS); +file_menu->insertItem(Icon("save_all.xpm"),i18n("Save All"), + this, SLOT(slotFileSaveAll()),0,ID_FILE_SAVE_ALL); +file_menu->insertSeparator(); +file_menu->insertItem(Icon("fileprint.xpm"),i18n("&&;Print..."), + this, SLOT(slotFilePrint()),0 ,ID_FILE_PRINT); +file_menu->insertSeparator(); +file_menu->insertItem(i18n("E&&;xit"), + this, SLOT(slotFileQuit()),0 ,ID_FILE_QUIT); + +my_menubar->insertItem(i18n("&&;File"), file_menu); + +setMenu(my_menubar); + + +The example creates a menu bar and a popup menu first. Then the popup menu is filled with entries. The used method of QMenuData +here allows an implicit connection to the method to call when the popup menu emits SIGNAL(activated(int)). The zero parameters after +the slot declaration is left out as the example assumes the program will use KAccel to set the according keyboard accelerators +with changeMenuAccel(). Further you can see that the integer value ID is inserted like the method name with all uppercase letters +and underscores to separate the words. The menu id's themselves are set with &#;define in a separate file to keep track of the used +numbers. You would think that you don't need the menu id if the activated() signal is already connected - in fact the id can be +used to forward the signal highlighted(int) to a method that compares the id by a switch statement and sets a statusbar +help message for the menu entry. You could as well do that for the signal activated(int) as well to call the according method by a +switch statement. Then you have to add a connect() for each popup menu you want to use. + +You can as well insert a separator into the menu bar with my&_;menubar->insertSeparator(). This will align all entries inserted after +the separator to the right in Motif style, in windows style this has no effect. + +The creation of a separate menu bar allows the creation of several menubars which can be set as the actual menu with setMenu(). +This is how we did it in KDevelop to change the menu bar when switching to the dialogeditor and back to the project editor. + +Finally, the ampersand in the menu entry sets the following character as the keyboard accelerator when the user presses ALT+ the +character. + + + +The Toolbar + +Toolbars are another component that enhance user interaction with symbols representing most needed functions that an application +provides. The KDE libraries are again offering another class to use with KDE applications, KToolBar. As KTMainWindow already +handles the geometry management for all user interface elements, it also provides methods to add toolbars. Now, the good thing is that +you can use as many toolbars as your application may require and the creation is done easily with toolBar(). This method also +takes a parameter which is the according toolbarnumber. The first toolbar has by default number 0, so the parameter can be left out +there; the next has to be called with toolBar(1) etc. You can also make this more variable with a define for your toolbar and use +a descriptive name; this avoids changing the toolbarnumber everywhere when you decide to set a toolbar to another position. + +Now, when using a toolbar, you have many choices. The class KToolBar provides a whole set of methods to insert user elements such +as buttons, which is probably the most recently used method, delayed popups, lineedits, combos and generally a widget of your choice. +Further you need to know that toolbars are created with using the full width of the parent window - but that is configurable. All +following toolbars are then appended to the end of the last toolbar. Also you can set the toolbar to show at a certain position. This +is often used by applications that offer painting facilities. The following example shows you how to use a toolbar with +KTMainWindow: + +1 // first call of toolBar() - creates the toolbar 0. +2 toolBar()->insertButton(Icon("new.xpm"), ID_FILE_NEW, true, i18n("New File")); + +3 QPopupMenu* select_menu = new QPopupMenu(); +4 toolBar()->insertButton(Icon("select.xpm"), ID_OPTIONS_SELECT, select_menu, true, i18n("Select Option")); + +5 connect(toolBar(), SIGNAL(clicked( int )), SLOT( slotSelected( int )) ); + + +6 Foo::slotSelected( int id ){ + +7 switch (id ){ + +8 case ID_FILE_NEW: +9 slotFileNew(); +10 break; +11 } +12 } + +The above explains some specialities for toolbars - we will discuss these now in detail. First of all, you see that we used the +toolBar() method. This returns a pointer to the according toolbar and creates one if the toolbar doesn't exist. We use the +insertButton() method to add a toolbar button representing the standard "New File" action. Now, when looking at the +class-documentation of KToolBar, you see that there is a QPixmap required as the first parameter. Here, we only set the name +of the pixmap embraced by the Icon() method. This is a macro which makes inserting icons very easy, provided by kapp.h. In +fact, it makes the application's KIconLoader instance load the icon with the filename new.xpm for you using a list of +standard directories within the KDE File System. Additionally, the icon new.xpm is already provided - you don't have to paint it +yourself. The KDE libraries come with a whole set of toolbar icons that are ready to use for insertion. This is also the reason why, +when testing an application, sometimes a button looks a bit scrambled although you have painted the pixmap - it just can't be found if +it isn't installed at the correct location within the KDE FSSTD; whereas standard icons are already present. + +The exact execution of the Icon() macro is therefore: +KApplication::getKApplication()->getIconLoader()->loadIcon("new.xpm") + + + +In KDE2, you have to use BarIcon() to load menu/toolbar icons + + + +which implicitely uses the kapp macro to get the application object. You see that using this macro saves lots of code but offers a +very nice way to load an icon for a toolbar button. + +The second parameter, the ID of the button, is a macro that our application specifies itself to name certain actions logically by a +&#;define. Obviously, you could think that using another method of KToolBar would do the same when directly specifying the receiver +object and the slot to call, but this way you save a lot of code. The first place is that you only have to write one connect() +(line 5) to connect all toolbar elements. The other is, that by this way you can use the same ID for your toolbar items as well as for +your menubar items. The following code completes this example with the according menubar action: + +QPopupMenu* file_menu = new QPopupMenu(); +file_menu->insertItem(Icon("filenew.xpm"),i18n("&&;New..."),0,ID_FILE_NEW); + +connect(file_menu, SIGNAL(activated(int)), SLOT(slotSelected(int))); + +menuBar()->insertItem(file_menu, i18n("&&;File")); + + + +By this, the file&_;menu is already connected to the slotSelected() method and the corresponding entry "New File" executes the +same action. Just collect all your ID's as &#;defines into one file and you can keep a good overview over the used numbers (which +naturally have to be integer values). + +The next example in line 3 and 4 add a button that opens a popup menu when the user presses the button. This can be used if the button +itself does not perform any action but represents a better access method for e.g. a list of entries. Just create your popup menu and +insert it with the according ID and pointer as a button. + +Besides the example you can do a lot of other things like making a button a toggle button. This is useful if the button executes an +on/off action (which in the corresponding menubar popup is represented by a checkmark). See the complete reference of KToolBar for +more information. + + + +The Statusbar + +KDE also provides the pendant to Qt's QStatusBar, KStatusBar. The statusbar can contain labels +as well as widgets, such as progress bars (those have to have the statusbar as parent). The statusbar is used to display information +about the current state of the application and gives hints about the usage of commands e.g. over toolbars and menubars. + + + +Keyboard Accelerators + +Keyboard accelerators are a good enhancement for any kind of application. GUI application designers often think that the user can +access all methods with the provided graphical interface, but advanced users usually want to work as fast as possible and using the +mouse to call actions doesn't make an application very attractive. The more a user will make use of your application, the more he will +miss keyboard accelerators. Fortunately, the Qt and KDE libraries provide a whole set of functions and classes to support keyboard +accelerators in conjunction with GUI elements. This section therefore collects all these classes and shows the possible implememtation +for various situations. + + +Menu Accelerators + +The first thing where keyboard accelerators are used without much effort from the programmer's side is over menuentries. The menubar, +as mentioned above, consists of a set of QPopupMenus, which are inserted in the order they will appear later from left to right. +The popup menu itself can be called by the user by a keyboard shortcut if he presses the ALT-key together with the underlined character +of the desired menu of the menubar. The menuentry itself has to define the underlined character at the time you insert the popup into +the menubar. + +Example: + +menuBar()->insertItem(i18n("&&;File"), file_menu); + +Mind the ampersand in front of "File". This makes the "F" the key with which the user can pop up the popup menu file&_;menu when +pressed together with the ALT-key. The same goes with entries within the popups, where the user, after a popup is active, only has to +press the key to invoke the desired action. Selfexplaining, you should watch the usage of underlined characters very closely, because a +key that is used twice either in the menubar or within the same popup makes the last inserted item the one that is activated and this +makes the previously defined shortcuts useless. + +Using the menu-accelerators is therefore very easy for the programmer - just select the key you want to be used and set an ampersand +in front of it while inserting the entry. As the KDE applications get internationalized, translators take over the responsibility to +place the keys in their translated version later. They should watch the same principles for placing the keys and shouldn't only +translate one-to-one but test the application later if everything is accessible again by their keyboard shortcuts. + + + +Tabulator and Button Accelerators + +The keyboard accelerators with the ALT-key don't only work with the menus - they do the same over dialogs, tab-pages and on buttons. +Therefore it should be used whereever possible, the principle is the same: on a dialog, you have to watch the used keys, on e.g. a +QTabDialog you have to watch the keys for each page plus the used keys to activate the pages in the addTab() methods. + +Within the user interface, buttons have an additional option - as mentionend, the keyboard input focus is forwarded in user interfaces +with the TAB and SHIFT-TAB keys. When a button receives the focus, it gets a slight frame like other active elements, the user has to +press the SPACE-key to execute the action connected to the button. Now, this can be changed by using setDefault(true) on one +button or by setting setAutoDefault(true) on several buttons on the dialog. The difference is that if the User presses the +ENTER-key, the default button will be pressed. If several buttons shall provide this behavoir, setAutoDefault() has to be used on +those. If one of them receives the keyboard input focus, it will automatically become the default button. + +KKeyDialog: keyboard accelerator configuration dialog +KKeyChooser +KAccel + + + + +Other Widgets + +Control elements are used within visible areas of the application and can be combined together to create a dialog or view. Beyond the +control elements that the Qt library provides, KDE offers: + +KButton: active raise-lower button +KButtonBox: manages buttons +KColorButton: button displaying a color setting +KIconLoaderButton: button displaying a selected Icon +KCombo: similar to QComboBox +KDatePicker: Date selection widget +KIntegerLine: lineedit that only accepts integer values +KLedLamp: LED lamp +KLined: line edit +KPanner: panner devider +KNewPanner: panner devider managing two widgets +KPopupMenu: popup menu with title +KRestrictedLine: lineedit that only accepts certain input +KSelector: value selector +KSeparator: standard separator +KSlider: slider widget +KTabCtl: tabulator widget + + + + +KDE Dialogs + +A very useful thing of the KDE libraries is that they provide already constructed dialogs for various purposes that are common to a lot +of desktop applications. This has two reasons: a) the user feels comfortable using these dialogs if he knows them already from an +application and b) lessens the programmer's work a lot. In section Keyboard Accelerators, you +already got to know one of these dialogs that KDE provides to configure keybindings. For the other dialogs that are mostly part of the +kdeui library, the usage is mostly as simple as for the KKeyDialog and enhances applications within seconds of coding +efforts. You should always first look for an already existing solution for general value requests from the user before starting to +implement a new dialog from scratch. Further, you don't have to care about internationalization as these dialogs are part of the KDE +libraries and are already translated. + + +KMsgBox + +The KMsgBox class provides a whole set of message boxes that match everyday life usage in applications. Using KMsgBox has a lot of +advantages: you can use one of the static methods to retrieve results on standard questions and you can still influence the behavior by +setting text, window text, symbol and button text. + + + +message(): providing a single message box with an OK button to inform the user + + +yesNo(): provides a yes/no question box. + + +yesNoCancel(): provides a yes/no/cancel box with three buttons. Used e.g. to quit an application with the question: Document has +been modified. Would you like to save changes ?. Then the yes-button would mean saving changes and exiting the application, no would +mean exit without saving and cancel would stop any exiting and just returns. + + + + +If this doesn't match your actual need, you could as well create a new KMsgBox instance that can have up to four buttons. This can be +used by applications that have multiple open files but don't want the user to ask if he would like to save changes for each file +separately; therefore these will need a button "Save All" or something. Then you could program the dialog towards your needs like the +static methods and will receive the correct result. + +As usual with dialogs, the return value is that what a programmer usually has to process by retrieving it into a variable and then +compare with if() for the actions to execute. + +The KDE 2 API contains a modified version of KMsgBox, KMessageBox. It provides a similar functionality; the 1.x API +is no longer available. As a replacement, you can use QMessageBox, providing static methods as well. + + + + + +KQuickHelp + +The KQuickHelp class provides a good way to add quick-help dialogs to widgets. The user can access the quick-help by a +context-menu entry "Quick-Help" and is therefore easy to use and gives enough information where a Help-button for the manuals would be +too much and a QToolTip would be too less. The reason I include KQuickHelp into the provided dialogs is that the +class-documentation itself contains example usage, but doesn't cover all formatting possibilities, therefore these are listed in detail +here. + + + +In KDE2, KQuickHelp is no longer available and is replaced by QWhatsThis, which has almost the same API + + + + +Usage + +A quick-help window therefore can always be added to a widget by using the static method add(), also one help message can be used +for more than one widget. The example shows this by adding one message that applies to two widgets that are providing a funcitionality +that depends on each other: + +#include <kquickhelp.h> +#include <kapp.h> +#include "mydialog.h" + +MyDialog::MyDialog(QWidget* parent, const char* name): QDialog(parent, name) +{ + + file_lineedit= new QLineEdit(this, "file_lineedit"); + file_select_button= new QPushButton(this, "file_select_button"); + + KQuickHelp::add(file_lineedit, + KQuickHelp::add(file_select_button, i18n("Select the filename to process.\n" + "You can use the lineedit or the\n" + "button to select the filename."))); +} + + + + +Text Formatting + +The text inside your quick-help window can also be formatted to fit various needs, even hyperlinks. Using the KDE-FSSTD, you can also +access your online-documentation to provide a link for further information by just using your html filename. This is considered a nice +way to give the user the best information in some cases where the purpose of certain functions is too difficult to explain in a +quick-help window. + +The followindg list contains the valid tags for text formatting: + +Font Attributes Tag Short-form Tag + +bold font &<;bold&>;&<;/bold&>; &<;b&>;&<;/b&>; +italic font &<;italic&>;&<;/italic&>; &<;i&>;&<;/i&>; +underlines &<;underline&>;&<;/underline&>; &<;u&>;&<;/u&>; + + +Font Size Tag Short-form Tag + +increase &<;FONTSIZE +&>; &<;+&>; +decrease &<;FONTSIZE -&>; &<;-&>; + + +Font Selection Tag Short-form Tag + +default font &<;FONT DEFAULT&>; &<;DEFAULT&>; +fixed font &<;FONT FIXED&>; &<;FIXED&>; + + +Indentation Tag Short-form Tag + +right indent &<;INDENT +&>; &<;i+&>; +left indent &<;INDENT -&>; &<;i-&>; + + +Color + +RGB color &<;COLOR #&>; +red text &<;COLOR RED&>; &>;&<;red&>; +green text &<;COLOR GREEN&>; &<;green&>; +blue text &<;COLOR BLUE&>; &<;blue&>; +white text &<;COLOR WHITE&>; &<;white&>; +yellow text &<;COLOR YELLOW&>; &<;yellow&>; +black text &<;COLOR BLACK&>; &<;black&>; +brown text &<;COLOR BROWN&>; &<;brown&>; +magenta text &<;COLOR MAGENTA&>; &<;magenta&>; +cyan text &<;COLOR CYAN&>; &<;cyan&>; + + +Newline &<;br&>; +Hyperlinks &<;link linkname&>;&<;/link&>; + + +Thereby, valid linknames are: + + + +http://yourlink + + +info://yourlink + + +ftp://yourlink + + +file://yourlink + + +mailto:your&_;address@your&_;domain + + + +These links will be opened using the kfm (KDE File Manager). All other linknames assume that you want to access your application's +online-help documentation and therefore use the linkname as the file you want to access and tries to open it with the KDEHelp +program. + + + + +File Dialogs + +As the kfile library provides several dialogs for retrieving filenames as well as directories, those have to be separated towards +which class and method to use for which purpose. + +Generally, the kfile library offers: + + +a KFileDialog class, which is a specialized KFileBaseDialog and provides the most needed static methods to retrieve +filenames. + + +the KFileDialog class itself, which can be subclassed but also be used for retrieving several filenames and directories. + + +the KFilePreviewDialog class, which offers file-dialogs that can display selected files by their contents if the developer +provides a preview module that is able to show a preview of the filecontents + + + + +For general file/directory services, the classes KFileInfo and KDir can be used. + +The following sections will discuss the usage and handling of the according file-dialogs in applications. + + +KFileDialog + +The KFileDialog class provides four static methods to ask the user for a filename. As the filedialog itself can handle the +creation of new folders, storing bookmarks etc, the user will be thankful if you use this dialog to ask for a filename to open and a +filename to save files to. The KFileDialog class itself is a specialized class that is based on KFileBaseDialog, so if the +given methods don't fit your needs you can always inherit from KFileBaseDialog to customize the settings. + +The following examples show the usage for each purpose: + +// request a filename to open + +QString open_filename; +open_filename=KFileDialog::getOpenFileName() + +if(!open_filename.isEmpty()) +{ + // read the file +} + + + +This asks the user for a filename to open. The KFileDialog shows and retrieves the information. If the user cancels the +filedialog, the return string will be null, therefore you have to test first if QString::isEmpty() doesn't return true before +opening the file actually. + +The same goes with the static methods getSaveFileName(), getOpenFileURL(), getSaveFileURL(), whereby each function takes +parameters to set the starting directory, mime-types and, as usual, the QWidget parent,name parameters. + +The parallel methods for getSaveFile and getOpenFile behave identically for retrieving remote and/or local files with the URL +dialogs. + + + +KFileBaseDialog + +The class KFileBaseDialog provides the basic interfaces for building filedialogs; therefore filedialogs can be customized in wide +ranges towards your needs and is the most flexible way to construct filedialogs. Besides that, the class provides additional +functionality for other standard cases like retrieving a directory name. Further functionality can be achieved by inheritance. + +Retrieving a directory name + +The class provides retrieving a directory name by the static method getDirectory(). The following example shows the usage: + +QString the_directory; + +the_directory=KFileBaseDialog::getDirectory(); + +if(!the_directory.isEmpty()) +{ + // do something +} + + + +Of course, you can also use KFileDialog instead of KFileBaseDialog if you like your API to be more +consistent. + + + + + +KFilePreviewDialog + +The class KFilePreviewDialog provides another specialized, but more seldomly used filedialog. Its best feature is that it provides +an area where the programmer can use a preview widget for his file format to open. The best usage is made within graphic programs that +operate on pictures. + + + + +KColorDialog + +The KColorDialog provides an easy-to use interface to receive color values from the user. Color values are always requested, if +the application is a drawing or painting program to select the current brush as well as for e.g. KDevelop's dialogeditor to set color +values for widgets. + +The usage itself is often combined with a KColorButton, which is a specific QPushButton implemented in kdeui that +displays a color and calls the KColorDialog already when the user presses the button. Anyway, you can call the color dialog from +your menu bar or toolbar as well to retrieve a color value from the user. + +Using the colordialog is very easy inside applications. The class provides a static method which can be called to retrieve the color +value: + +#include &<;kcolordlg.h&>; + + +QColor myColor; + +int result = KColorDialog::getColor( myColor ); + + + +This creates an instance of QColor to store a color value and by calling the static method getColor() the color gets the selected +value. The returned integer value will probably be of no interest - its the result code of QDialog that specifies the dialog has +been exited via the OK or Cancel button. + + + +KFontDialog + +The KFontDialog will retrieve you a value for a font currently avaliable on the system. Therefore using the fontdialog will mostly +only make sense where you will need a font; the most recent usage is made by text editors but could also be used to get a +formatting for a text to draw inside a widget as well as into a picture. + +To retrieve the font value, you probably will use the static methods of KFontDialog. The example shows the usage: + + QFont myFont; + int res = KFontDialog::getFont( myFont ); + + +This is it already - you only have to create a QFont instance to contain the font value. Then call the font dialog with the font +and after the dialog was executed, your font will have the selected value. Then you have the methods of QFont to determine which +type of font the user selected etc. to use the font within the application. + + + +KIconLoaderDialog + +For applications requiring an icon selection, KDE provides the KIconLoaderDialog. The main purpose is to select an icon on the +system to draw it on a button for example. Usage is made by the KDE window manager to select the icons for mounted/unmounted states of +device links. Then the values for the link are displayed on the according button to display the current selection; the filenames get +stored in the link file and can be drawn on the desktop as a symbol by loading the icons dependent on the state of the connected +device. There, an additional widget of the kdeui libary is used, the KIconLoaderButton. Like the KColorButton, this +class will call the icon loader dialog when the user presses the button and will display the selected icon on the button. + +As the KIconLoaderDialog class does not provide any static methods, you have to create an instance first and then call +QDialog's exec() method to display the dialog. Another possibility would be to call selectIcon() to execute the dialog +but retrieve a QPixmap value instead. The selected Icon will be in your KIconLoader instance (depending on the used +constructor which one - the standard constructor uses the application's KIconLoader), therefore the value can be processed with +the according methods of KIconLoader. + + + +KWizard + +The KWizard class already contains a predefined dialog to construct wizards that lead the user through an input process. Thereby, +the wizard dialog provides the necessary buttons and draws the according page numbers already, so that you only have to construct your +widgets you want to use as the single pages for the dialog and insert them in the order you want the user to proceed while calling the +wizard. + + + +KSpellDlg + +The KSpellDlg is part of the kspell library. This library contains all functionality to use the Ispell application for +spell checking. The KEdit application makes a good use of this library, so you should take a look at the implementation of +KEdit on how to implement spell checking functionality. Using the KSpell class should last in any case. + + + +DatePickerDialog + +(kab) date selection dialog + + + +Qt Dialogs + +In some cases, it may be needed to use dialogs provided by Qt. In fact, the only dialog where there are no replacements is a +progressdialog and a printing dialog. Of course you could construct one yourself, but the Qt library offers some good solutions for +these situations. The following will give you a short overview where to find what you need. + +Important: When using Qt dialogs, including QTabDialog for new dialogs, you have to set the labels again with i18n() to enable +internationalization. + +Example: +QTabDialog tabdlg = new QTabDialog(); +tabdlg->setDefaultButton(i18n("Default")); +tabdlg->setCancelButton(i18n("Cancel")); +tabdlg->setApplyButton(i18n("Apply")); +tabdlg->setOkButton(i18n("OK")); + +This will add all four buttons to the tabdialog, so you should only set those buttons you really need. + + +QFileDialog + +Using the QFileDialog, you will have the same functionality like KFileDialog. The KDE development prefers the KFileDialog for a +consistent look of applications as it offers some nice functionality as well. + + + +QMessageBox + +As mentioned in section KMsgBox, the QMessageBox can be used as well for messages. One situation where a QMessageBox can serve better +is a messagebox containing a picture for example. Usage is provided through static methods which should cover most cases. + + + +QPrintDialog + +For printing support, you will most likely use the QPrintDialog. As a view-widget displays a document's contents, it will most likely +offer routines for printing as well through QPainter drawing on a QPrinter instead of onto a widget. + + + +QProgressDialog + +When an application is processing data that may take some time to finish, the user expects a notification about that state. For those +cases, Qt provides the QProgressDialog. As the class is well documented, including example code for usage, you should take a look at +the according API documentation. + + + + + +Provided Views + +As mentioned earlier, a usual application interface contains a so-called "view" or "content" area, usually the center widget surrounded +by menubar, toolbars and a statusbar. Besides the required construction of a view widget by inheritance of QWidget, the KDE and Qt +libraries offer several complete widgets that can serve as view areas already. These are widgets that are used commonly over a lot of +applications and do not necessarily have to be used as a main view; they may also get used in dialogs. + +Qt only offers one of these: the QMultiLineEdit class, offering a text editing widget. By using a QMultiLineEdit, a developer +can create a full-functional editor rapidly. The class interface may also serve you as an example what functionality a view area should +provide. + +KDE on the other hand contains two complete widgets. One is again an editor widget, derived from QMultiLineEdit and is +encapsulated in the KEdit class of the kdeui library; the other a HTML- interpreter widget, KHTMLWidget. The following +will discuss these classes and explain the interface usage by example. + + +The KEdit View + +As mentioned, the KEdit view is a full-functional editor class that offers a complete interface to build an editor. As it inherits +QMultiLineEdit, it makes use of Qt's basic functionality with the intention to complete the interface beyond the facilities a text +editor view should provide such as insertion or clipboard communication. + +The idea is to construct a KTMainWindow based main view with the according items like a menubar, toolbar and statusbar. The +slots that get called by the popup menus or the toolbar icons are all placed as public methods within the KEdit class. This +requires the implementation of slots on the main widget that call the according methods. + +An example containing a slot implementation and the use of a slot provided already by QMultiLineEdit: +void MyEditor::initMenuBar(){ + + // create the "Edit" menu + edit_menu= new QPopupMenu(); + // here we call a slot selectAll() provided by QMultiLineEdit to select the whole text: + edit_menu->insertItem(i18n("&&;Select All"), kedit, SLOT(selectAll()), 0, ID_EDIT_SELECT_ALL); + + // construct a view-menu and insert a menuentry "Font" + view_menu= new QPopupMenu(); + // we have to call a self-created slot to call + // the public method selectFont() of KEdit + view_menu->insertItem(i18n("&&;Font"), this, SLOT(slotViewFont()), 0, ID_VIEW_FONT); + + + // insert the view_menu into the menubar + menuBar()->insertItem(i18n("&&;Edit"), edit_menu); + menuBar()->insertItem(i18n("&&;View"), view_menu); +} + +void MyEditor::slotViewFont(){ + // call a method of KEdit to call the font selection dialog + selectFont (); +} + + + + +The KHTML View + +The second view area provided by KDE is originally the KHTMLWidget. This class actually is the visible widget that interprets HTML +files including graphics, tables etc. What it doesn't offer is a scrolling functionality which limits the use of the widget. Therefore, +the class KHTMLView is introduced which serves as a wrapper class that offers this and other functionality. + +A lot of applications make wide use of either KHTMLWidget, adding the scrolling functionality by code, or using KHTMLView +directly, such as KDEHelp, KDevelop and KFM. + +The main reason for a complete HTML widget is that today's applications tend to use HTML-based help functionality almost everywhere, so +a reuse of this funcitionality is very certain. + +The usage can be compared to the implementation example of the last chapter for KEdit, as KHTMLView provides signals, slots +and public methods as well that can be called similar to provide a user interface that handles the widget. When it comes to configuring +the behavoir of the displaying KHTMLWidget, you have to create a pointer to a KHTMLWidget and retrieve the instance of your +KHTMLView's widget by calling getKHTMLWidget(). Then you can set options like color settings and font sizes for your view +area. +In KDE2 you will have an extended KHTMLWidget that directly inherits QScrollView, so scrolling is provided by default. +KHTMLView is removed instead. Also, the new HTML widget provides support for Java Script. + + + + +Process Handling + +The KDE UI library provides the classes KProcess and KShellProcess to run external processes that are invoked within the +application that needs to run another application. This has generally two advantages: + + + +you don't have to reinvent the wheel when commandline programs already exist + + +your application's event queue is not blocked by long operations + + + + +A lot of applications already make wide use of these classes as they are very flexible and provide the necessary interface not only to +start another application but to control its output and termination. As mentioned, a lot of Unix applications are already available +but only work on commandline. The commandline arguments are hard to remember and most users won't ever touch them if they don't need +them really. For occasional usage, the interface is too complex and therefore not very user-friendly. As KDE applications target a +desktop system where even unexperienced users can feel themselves at home, this is the best way to write so-called front-ends for +terminal applications. + +Another possible use even for KDE programmers would be to write their target application as a commandline program and provide a +user-friendly GUI interface. + +The following sections will describe the KProcess class first, then the usage of KShellProcess, as this is a subclass of +KProcess, therefore differs only in its usage. + + +KProcess + +The KProcess class is based on QObject, therefore able to communicate by signals and slots. It can be used to start any +executable binary as a child process on the local system and control it by communication and run mode. To use KProcess, include +kprocess.h and create an instance of KProcess. If the instance has been created and used already, you have to call +clearArguments() to ensure the arguments are empty before the next usage. The actual usage is to transmit the complete commandline +argument to the process instance using the operator << as strings. Then the actual process is called with start(). This function +has to be called with the run mode and communication. + + +Run mode + +The run mode of the external application can be set when calling start() as the first argument. The run mode can be one of +DontCare, NotifyOnExit, Block. Now, what does this mean to the application that is called and to the application that calls the +process ? + + + +DontCare: The child process is called and started with the given commandline arguments. Easy to guess, DontCare means that the +caller is not interested if the child process has exited or not. The two applications run concurrently, but the invoking process +(usually the GUI application) doesn't get notified and runs like without starting any process. + + + +NotifyOnExit: both processes run concurrently like in DontCare run mode. The difference is that the process controller can emit +the signal processExited(), which can be caught to determine the child process has finished. The notification can be used to reset +any statusbar message informing the user that the process is running, this should be used as a guideline to inform the user about the +current state of the application. Mind that the invoking application is responsible for the child process as it is unlikely that +non-experienced users will control and other process that they see. + + + +Block: the child process blocks the caller's event handling and program execution. This is not recommended to use within GUI +applications as even the call processEvents() won't be executed; therefore the event handling cannot be called to execute even by +event precedence. + + + + +The start() method also returns if the start has been successful or not. Therefore you should always call the method with an +if() statement to display a message box if starting the process returns false. Reasons for start() to return false could be: + + +the commandline argument list is empty (which is your implementations's fault) + + +the process which is to be called is already running + + +starting the child process failed + + + + +To inform the user why the process cannot be executed, you have to investigate these three possibilities. The first possibility, an +empty commandline, depends on your GUI that provides the methods setting the commandline options. Normally, you would retrieve them +by a dialog where the user sets the options on how to start the application. The GUI for these dialogs normally uses radio buttons to +let the user choose one of several options (or more if the process allows this), a lineedit for filenames (with an additional +file-selection button to call a KFileDialog::getOpenFileName()), eventually a lineedit for output locations, also with a +KFileDialog::getSaveFileName(). + +The second possibility mostly occurs in situations where the application has been started twice or the user has opened another instance +of its main window where or by which he caused another process call. In this case, you could use getPid() to determine the +current process ID which can be used in a message box to show that the process is already running. + +Finally, failing a call of a child process often means that the program is not available on the system. There, you should inform the +user that he has to install the program to ensure functionality. Another option would be to test the PATH environment variable of +the user for the directories he uses to call applications. Then you could test with QFile::exists(), if the binary is there even +before trying to start it. + + + +Communication + +The communication with the caller process is another option that has to be set while calling KProcess::start(). With this, you can +retrieve the output of the process where needed. The available communication modes are: + + + +NoCommunication : Use when you don't want to communicate with the process, e.g. it runs silently without interesting output or +requiring any input. + + +Stdin : To be used if the process asks for user input. Depending on the process, you have to use this communication mode to avoid +blocking - the process just will wait for input but can never retrieve the information if this mode isn't used. + + +Stdout : The output the process sends to StdOut, which would be your terminal for example. This mode has to be used if you want +to retrieve the output information for displaying it to the user in a widget. + + +Stderr : error messages sent by the process to StdErr can be retrieved seperately by this mode. This is useful to check for +errors. + + +AllOutput : Stdout and Stderr OR'ed together. Mind that this doesn't include StdIn communication ! + + +All: Open all communication channels, meaning that Stdout, Stderr and Stdin are OR'ed together. + + + + +As mentioned for AllOutput and All communication modes, the available modes can be OR'ed together to combine the needed +modes. + +By the according signals and slots, you can connect the communication data channels to e.g. a text widget or a buffer. Displaying the +output directly into a text widget will be used for Stdout in most cases while error messages can as well be retrieved into a +non-visible buffer which can be processed to visualize errors by messageboxes. + + + + +KShellProcess + +The KShellProcess class is a specialized KProcess class. The main difference is that you can call your executable via a Unix +shell which allows all options the selected shell offers. You should check for available shells as well before calling a shell process +for a special shell; the normal constructor will check for any shell available but can be set to use e.g. /bin/bash to make use of the +Bourne shell - but you can't expect any system to have the Bourne shell available. The use of a KShellProcess offers the following +advantages: + + +Useage of environment variables + + +Setting environment variables + + +pipe usage + + +wildcard usage + + + + +The methods of KProcess then offer the necessary communication and runmodes the process may need. + + + + +Copyright + + +KDevelop Copyright 1998, 1999, 2000 The KDevelop Team. + +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., 675 Mass Ave, Cambridge, MA 02139, USA. + + + + +
+ diff -Nru kdevelop-3.9.98/doc/kde_libref/Makefile.am kdevelop-4.0.1/doc/kde_libref/Makefile.am --- kdevelop-3.9.98/doc/kde_libref/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/kde_libref/Makefile.am 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,4 @@ +EXTRA_DIST = index.docbook + +KDE_LANG = en +KDE_DOCS = AUTO diff -Nru kdevelop-3.9.98/doc/kdevelop2/index.docbook kdevelop-4.0.1/doc/kdevelop2/index.docbook --- kdevelop-3.9.98/doc/kdevelop2/index.docbook 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/kdevelop2/index.docbook 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,184 @@ +kdevelop"> + + ]]> +]> + + + +The KDevelop2 Engine Handbook + + + +Ivan +Hawkes + + + +19/12/2000 +0.01.00 + + + +This Handbook describes the techniques and interfaces used to extend the +KDevelop2 framework. It will describe how to build +a KDevelop2 Part, and provide other information on extending the Kdevelop2 interface. + + + + +KDE +KDevelop +KDevelop2 +Extending +Developer + + + + + +Introduction + + + + +This handbook will explain the techniques you need to learn and apply to +extend the KDevelop2 Framework. It covers the basics of the makefiles we use, +and how to write a KPart. + + + +In time, this manual will be filled out to contain all the information you +will need to create your own KDevelop2 friendly extensions. + + + + + +Revision History + + + +0.1 - first public release + + + + + + + +KParts + + +Creating a KPart + + +NOTE: I will write this up shortly. + + + +Add new directory under /kdevelop/kdevelop/parts +update /kdevelop/configure.in.in to include your makefile +update /kdevelop/kdevelop/parts/Makefile.am with your directory +make -f Makefile.cvs +./configure +Should be able to make now. +Add your classses to the project +Commit your changes to the repository. + + + + + + + +Questions and Answers + + + + + + + + +My Mouse doesn't work. How do I quit KDevelop? + + +You silly goose! + + + + +Why can't I twiddle my documents? + + +You can only twiddle your documents if you have the foobar.lib +installed. + + + + + + + + + +Credits and License + + +KDevelop + + +Program copyright 1997 John Q. Hacker jqh@kde.org + + +Contributors: + +Konqui the KDE Dragon konqui@kde.org + +Tux the Linux Penguin tux@linux.org + + + + + +Documentation copyright 1999 George N. Ugnacious gnu@kde.org + + +Translations done by: + + +Babel D. Fish babelfish@kde.org (Sanskrit) + + + + + + + +This program is licensed under the terms of the +GNU GPL. + + + + + diff -Nru kdevelop-3.9.98/doc/kdevelop2/Makefile.am kdevelop-4.0.1/doc/kdevelop2/Makefile.am --- kdevelop-3.9.98/doc/kdevelop2/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/kdevelop2/Makefile.am 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,4 @@ +EXTRA_DIST = index.docbook + +KDE_LANG = en +KDE_DOCS = AUTO \ No newline at end of file diff -Nru kdevelop-3.9.98/doc/manual/index.cvlog kdevelop-4.0.1/doc/manual/index.cvlog --- kdevelop-3.9.98/doc/manual/index.cvlog 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/manual/index.cvlog 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,1285 @@ +=== LinuxDoc conversion errors =================== +-> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 2 `BOOK' 0 `book' +! Normally this should not be a problem, but check anyway ... + 6 `HTMLURL' 0 `
' + 7 `' 0 `' +! Check the authorname ( instead of ?) + 7 `INST' 0 `corpauthor' +! Use affiliation, only corpauthor, or leave this out + 10 `REF' 0 `' + 14 `TOC' 0 `' + 31 `TT' 0 `' +! Check and correct manually + 81 `HTMLURL' 0 `' + 88 `REF' 0 `' + 88 `REF' 0 `' + 91 `REF' 0 `' + 93 `REF' 0 `' + 94 `REF' 0 `' + 96 `REF' 0 `' + 98 `REF' 0 `' + 99 `REF' 0 `' + 100 `REF' 0 `' + 101 `REF' 0 `' + 103 `REF' 0 `' + 104 `REF' 0 `' + 106 `REF' 0 `' + 108 `REF' 0 `' + 139 `BF' 0 `' +! Check and correct manually + 139 `HTMLURL' 0 `' + 139 `HTMLURL' 0 `' + 145 `HTMLURL' 0 `' + 150 `' 0 `' +! check if reference ID Installation was meant for a section (if not, eg for an anchor, change manually) + 154 `URL' 0 `' + 154 `URL' 0 `' + 163 `REF' 0 `' + 164 `HTMLURL' 0 `' + 181 `BF' 0 `' +! Check and correct manually + 183 `URL' 0 `' + 184 `URL' 0 `' + 185 `URL' 0 `' + 186 `URL' 0 `' + 187 `URL' 0 `' + 189 `URL' 0 `' + 190 `URL' 0 `' + 191 `URL' 0 `' + 194 `BF' 0 `' +! Check and correct manually + 198 `URL' 0 `' + 199 `URL' 0 `' + 200 `BF' 0 `' +! Check and correct manually + 200 `BF' 0 `' +! Check and correct manually + 200 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 200 `URL' 0 `' + 202 `URL' 0 `' + 203 `URL' 0 `' + 212 `BF' 0 `' +! Check and correct manually + 214 `BF' 0 `' +! Check and correct manually + 218 `URL' 0 `' + 218 `TT' 0 `' +! Check and correct manually + 218 `TT' 0 `' +! Check and correct manually + 226 `TSCREEN' 0 `' + 233 `VERB' 0 `' +! Because it is in TSCREEN + 236 `TT' 0 `' +! Check and correct manually + 238 `TSCREEN' 0 `' + 247 `VERB' 0 `' +! Because it is in TSCREEN + 249 `TT' 0 `' +! Check and correct manually + 249 `TT' 0 `' +! Check and correct manually + 249 `TT' 0 `' +! Check and correct manually + 253 `TSCREEN' 0 `' + 260 `VERB' 0 `' +! Because it is in TSCREEN + 264 `TSCREEN' 0 `' + 266 `VERB' 0 `' +! Because it is in TSCREEN + 268 `REF' 0 `' + 272 `TSCREEN' 0 `' + 274 `VERB' 0 `' +! Because it is in TSCREEN + 278 `The Installation 0 `The-Installation-Program' +! Reference changed: check if still unique + 278 `' 0 `' +! check if reference ID The-Installation-Program was meant for a section (if not, eg for an anchor, change manually) + 287 `BF' 0 `' +! Check and correct manually + 289 `BF' 0 `' +! Check and correct manually + 292 `REF' 0 `' + 319 `URL' 0 `' + 323 `URL' 0 `' + 324 `URL' 0 `' + 338 `BF' 0 `' +! Check and correct manually + 351 `REF' 0 `' + 356 `BF' 0 `' +! Check and correct manually + 361 `' 0 `' +! check if reference ID Programs was meant for a section (if not, eg for an anchor, change manually) + 366 `The Compiler' 0 `The-Compiler' +! Reference changed: check if still unique + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 366 `' 0 `' +! check if reference ID The-Compiler was meant for a section (if not, eg for an anchor, change manually) + 375 `TSCREEN' 0 `' + 383 `VERB' 0 `' +! Because it is in TSCREEN + 389 `TSCREEN' 0 `' + 391 `VERB' 0 `' +! Because it is in TSCREEN + 391 `TT' 0 `' +! Check and correct manually + 394 `' 0 `' +! check if reference ID Make was meant for a section (if not, eg for an anchor, change manually) + 396 `TT' 0 `' +! Check and correct manually + 396 `TT' 0 `' +! Check and correct manually + 396 `TT' 0 `' +! Check and correct manually + 396 `TT' 0 `' +! Check and correct manually + 406 `TT' 0 `' +! Check and correct manually + 408 `REF' 0 `' + 433 `TT' 0 `' +! Check and correct manually + 436 `' 0 `' +! check if reference ID Configure was meant for a section (if not, eg for an anchor, change manually) + 438 `TT' 0 `' +! Check and correct manually + 438 `TT' 0 `' +! Check and correct manually + 438 `TT' 0 `' +! Check and correct manually + 447 `TT' 0 `' +! Check and correct manually + 451 `TT' 0 `' +! Check and correct manually + 451 `TT' 0 `' +! Check and correct manually + 455 `TT' 0 `' +! Check and correct manually + 468 `BF' 0 `' +! Check and correct manually + 479 `TT' 0 `' +! Check and correct manually + 479 `TT' 0 `' +! Check and correct manually + 502 `' 0 `' +! check if reference ID Debugging was meant for a section (if not, eg for an anchor, change manually) + 504 `TT' 0 `' +! Check and correct manually + 524 `TT' 0 `' +! Check and correct manually + 530 `Development with 0 `Development-with-KDevelop' +! Reference changed: check if still unique + 530 `' 0 `' +! check if reference ID Development-with-KDevelop was meant for a section (if not, eg for an anchor, change manually) + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 532 `HTMLURL' 0 `' + 532 `REF' 0 `' + 542 `TT' 0 `' +! Check and correct manually + 594 `REF' 0 `' + 658 `REF' 0 `' + 703 `TT' 0 `' +! Check and correct manually + 703 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 703 `TT' 0 `' +! Check and correct manually + 703 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 703 `REF' 0 `' + 703 `HTMLURL' 0 `' + 748 `TT' 0 `' +! Check and correct manually + 748 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 787 `REF' 0 `' + 821 `REF' 0 `' + 826 `REF' 0 `' + 837 `BF' 0 `' +! Check and correct manually + 837 `REF' 0 `' + 837 `HTMLURL' 0 `' + 853 `HTMLURL' 0 `' + 855 `REF' 0 `' + 855 `REF' 0 `' + 855 `REF' 0 `' + 863 `URL' 0 `' + 864 `URL' 0 `' + 865 `URL' 0 `' + 866 `URL' 0 `' + 870 `' 0 `' +! check if reference ID Overview was meant for a section (if not, eg for an anchor, change manually) + 878 `REF' 0 `' + 883 `REF' 0 `' + 884 `REF' 0 `' + 892 `REF' 0 `' + 943 `BF' 0 `' +! Check and correct manually + 945 `BF' 0 `' +! Check and correct manually + 946 `BF' 0 `' +! Check and correct manually + 947 `BF' 0 `' +! Check and correct manually + 949 `BF' 0 `' +! Check and correct manually + 950 `BF' 0 `' +! Check and correct manually + 951 `BF' 0 `' +! Check and correct manually + 953 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 962 `BF' 0 `' +! Check and correct manually + 963 `BF' 0 `' +! Check and correct manually + 964 `BF' 0 `' +! Check and correct manually + 965 `BF' 0 `' +! Check and correct manually + 967 `BF' 0 `' +! Check and correct manually + 968 `BF' 0 `' +! Check and correct manually + 969 `BF' 0 `' +! Check and correct manually + 970 `BF' 0 `' +! Check and correct manually + 971 `BF' 0 `' +! Check and correct manually + 973 `BF' 0 `' +! Check and correct manually + 976 `BF' 0 `' +! Check and correct manually + 979 `BF' 0 `' +! Check and correct manually + 979 `TT' 0 `' +! Check and correct manually + 982 `BF' 0 `' +! Check and correct manually + 983 `BF' 0 `' +! Check and correct manually + 985 `BF' 0 `' +! Check and correct manually + 995 `BF' 0 `' +! Check and correct manually + 997 `BF' 0 `' +! Check and correct manually + 999 `BF' 0 `' +! Check and correct manually +1000 `BF' 0 `' +! Check and correct manually +1001 `BF' 0 `' +! Check and correct manually +1003 `BF' 0 `' +! Check and correct manually +1004 `BF' 0 `' +! Check and correct manually +1005 `BF' 0 `' +! Check and correct manually +1006 `BF' 0 `' +! Check and correct manually +1015 `BF' 0 `' +! Check and correct manually +1017 `BF' 0 `' +! Check and correct manually +1019 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1021 `BF' 0 `' +! Check and correct manually +1023 `BF' 0 `' +! Check and correct manually +1025 `BF' 0 `' +! Check and correct manually +1029 `BF' 0 `' +! Check and correct manually +1032 `BF' 0 `' +! Check and correct manually +1034 `BF' 0 `' +! Check and correct manually +1037 `BF' 0 `' +! Check and correct manually +1039 `BF' 0 `' +! Check and correct manually +1041 `BF' 0 `' +! Check and correct manually +1043 `BF' 0 `' +! Check and correct manually +1043 `TT' 0 `' +! Check and correct manually +1043 `TT' 0 `' +! Check and correct manually +1043 `TT' 0 `' +! Check and correct manually +1047 `BF' 0 `' +! Check and correct manually +1059 `BF' 0 `' +! Check and correct manually +1061 `BF' 0 `' +! Check and correct manually +1062 `BF' 0 `' +! Check and correct manually +1063 `BF' 0 `' +! Check and correct manually +1064 `BF' 0 `' +! Check and correct manually +1065 `BF' 0 `' +! Check and correct manually +1066 `BF' 0 `' +! Check and correct manually +1069 `BF' 0 `' +! Check and correct manually +1071 `BF' 0 `' +! Check and correct manually +1074 `BF' 0 `' +! Check and correct manually +1077 `BF' 0 `' +! Check and correct manually +1083 `REF' 0 `' +1090 `REF' 0 `' +1095 `BF' 0 `' +! Check and correct manually +1096 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1097 `BF' 0 `' +! Check and correct manually +1098 `BF' 0 `' +! Check and correct manually +1100 `BF' 0 `' +! Check and correct manually +1101 `BF' 0 `' +! Check and correct manually +1104 `BF' 0 `' +! Check and correct manually +1106 `BF' 0 `' +! Check and correct manually +1108 `BF' 0 `' +! Check and correct manually +1123 `BF' 0 `' +! Check and correct manually +1125 `BF' 0 `' +! Check and correct manually +1128 `BF' 0 `' +! Check and correct manually +1130 `BF' 0 `' +! Check and correct manually +1133 `BF' 0 `' +! Check and correct manually +1135 `BF' 0 `' +! Check and correct manually +1144 `BF' 0 `' +! Check and correct manually +1145 `BF' 0 `' +! Check and correct manually +1146 `BF' 0 `' +! Check and correct manually +1150 `BF' 0 `' +! Check and correct manually +1153 `BF' 0 `' +! Check and correct manually +1155 `BF' 0 `' +! Check and correct manually +1155 `HTMLURL' 0 `' +1159 `BF' 0 `' +! Check and correct manually +1159 `HTMLURL' 0 `' +1164 `BF' 0 `' +! Check and correct manually +1164 `HTMLURL' 0 `' +1167 `BF' 0 `' +! Check and correct manually +1167 `HTMLURL' 0 `' +1171 `BF' 0 `' +! Check and correct manually +1175 `BF' 0 `' +! Check and correct manually +1178 `BF' 0 `' +! Check and correct manually +1180 `BF' 0 `' +! Check and correct manually +1180 `REF' 0 `' + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1183 `BF' 0 `' +! Check and correct manually +1185 `BF' 0 `' +! Check and correct manually +1188 `BF' 0 `' +! Check and correct manually +1253 `REF' 0 `' +1274 `CODE' 0 `' +! Because it contains a newline character +1292 `CODE' 0 `' +! Because it contains a newline character +1307 `CODE' 0 `' +! Because it contains a newline character +1317 `CODE' 0 `' +! Because it contains a newline character +1334 `CODE' 0 `' +! Because it contains a newline character +1345 `CODE' 0 `' +! Because it contains a newline character +1353 `CODE' 0 `' +! Because it contains a newline character +1361 `CODE' 0 `' +! Because it contains a newline character +1383 `CODE' 0 `' +! Because it contains a newline character +1399 `CODE' 0 `' +! Because it contains a newline character +1401 `The Help System' 0 `The-Help-System' +! Reference changed: check if still unique +1401 `' 0 `' +! check if reference ID The-Help-System was meant for a section (if not, eg for an anchor, change manually) +1488 `Using the 0 `Using-the-Documentation-Browser' +! Reference changed: check if still unique +1488 `' 0 `' +! check if reference ID Using-the-Documentation-Browser was meant for a section (if not, eg for an anchor, change manually) +1497 `REF' 0 `' +1499 `REF' 0 `' +1499 `REF' 0 `' +1512 `HTMLURL' 0 `' +1515 `URL' 0 `' +1522 `URL' 0 `' +1523 `TT' 0 `' +! Check and correct manually +1529 `REF' 0 `' +1529 `REF' 0 `' +1554 `Using the 0 `Using-the-Searchindex' +! Reference changed: check if still unique +1554 `' 0 `' +! check if reference ID Using-the-Searchindex was meant for a section (if not, eg for an anchor, change manually) +1556 `REF' 0 `' +1574 `TT' 0 `' +! Check and correct manually +1574 `TT' 0 `' +! Check and correct manually +1574 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1579 `Working with the 0 `Working-with-the-Editor' +! Reference changed: check if still unique +1579 `' 0 `' +! check if reference ID Working-with-the-Editor was meant for a section (if not, eg for an anchor, change manually) +1631 `REF' 0 `' +1644 `REF' 0 `' +1663 `BF' 0 `' +! Check and correct manually +1671 `BF' 0 `' +! Check and correct manually +1684 `BF' 0 `' +! Check and correct manually +1690 `BF' 0 `' +! Check and correct manually +1702 `REF' 0 `' +1742 `CODE' 0 `' +! Because it contains a newline character +1797 `BF' 0 `' +! Check and correct manually +1798 `BF' 0 `' +! Check and correct manually +1799 `BF' 0 `' +! Check and correct manually +1800 `BF' 0 `' +! Check and correct manually +1801 `BF' 0 `' +! Check and correct manually +1820 `BF' 0 `' +! Check and correct manually +1832 `TT' 0 `' +! Check and correct manually +1852 `BF' 0 `' +! Check and correct manually +1853 `BF' 0 `' +! Check and correct manually +1854 `BF' 0 `' +! Check and correct manually +1855 `BF' 0 `' +! Check and correct manually +1856 `BF' 0 `' +! Check and correct manually +1861 `BF' 0 `' +! Check and correct manually +1862 `BF' 0 `' +! Check and correct manually +1863 `BF' 0 `' +! Check and correct manually +1864 `BF' 0 `' +! Check and correct manually +1865 `BF' 0 `' +! Check and correct manually +1866 `BF' 0 `' +! Check and correct manually +1867 `BF' 0 `' +! Check and correct manually +1905 `REF' 0 `' + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1937 `BF' 0 `' +! Check and correct manually +1938 `BF' 0 `' +! Check and correct manually +1940 `BF' 0 `' +! Check and correct manually +1941 `BF' 0 `' +! Check and correct manually +1943 `BF' 0 `' +! Check and correct manually +1945 `BF' 0 `' +! Check and correct manually +1946 `BF' 0 `' +! Check and correct manually +1948 `BF' 0 `' +! Check and correct manually +1950 `BF' 0 `' +! Check and correct manually +1951 `BF' 0 `' +! Check and correct manually +1953 `BF' 0 `' +! Check and correct manually +1955 `BF' 0 `' +! Check and correct manually +1956 `BF' 0 `' +! Check and correct manually +1957 `BF' 0 `' +! Check and correct manually +1964 `BF' 0 `' +! Check and correct manually +1966 `BF' 0 `' +! Check and correct manually +1967 `BF' 0 `' +! Check and correct manually +1968 `BF' 0 `' +! Check and correct manually +1970 `BF' 0 `' +! Check and correct manually +1972 `BF' 0 `' +! Check and correct manually +1973 `BF' 0 `' +! Check and correct manually +1974 `BF' 0 `' +! Check and correct manually +1976 `BF' 0 `' +! Check and correct manually +1978 `BF' 0 `' +! Check and correct manually +1979 `BF' 0 `' +! Check and correct manually +1980 `BF' 0 `' +! Check and correct manually +1981 `BF' 0 `' +! Check and correct manually +1983 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1985 `BF' 0 `' +! Check and correct manually +1986 `BF' 0 `' +! Check and correct manually +1987 `BF' 0 `' +! Check and correct manually +1988 `BF' 0 `' +! Check and correct manually +1995 `BF' 0 `' +! Check and correct manually +1997 `BF' 0 `' +! Check and correct manually +1998 `BF' 0 `' +! Check and correct manually +1999 `BF' 0 `' +! Check and correct manually +2000 `BF' 0 `' +! Check and correct manually +2001 `BF' 0 `' +! Check and correct manually +2003 `BF' 0 `' +! Check and correct manually +2005 `BF' 0 `' +! Check and correct manually +2006 `BF' 0 `' +! Check and correct manually +2007 `BF' 0 `' +! Check and correct manually +2009 `BF' 0 `' +! Check and correct manually +2011 `BF' 0 `' +! Check and correct manually +2012 `BF' 0 `' +! Check and correct manually +2014 `BF' 0 `' +! Check and correct manually +2016 `BF' 0 `' +! Check and correct manually +2017 `BF' 0 `' +! Check and correct manually +2019 `BF' 0 `' +! Check and correct manually +2020 `BF' 0 `' +! Check and correct manually +2022 `BF' 0 `' +! Check and correct manually +2024 `BF' 0 `' +! Check and correct manually +2025 `BF' 0 `' +! Check and correct manually +2033 `BF' 0 `' +! Check and correct manually +2034 `BF' 0 `' +! Check and correct manually +2035 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2036 `BF' 0 `' +! Check and correct manually +2037 `BF' 0 `' +! Check and correct manually +2038 `BF' 0 `' +! Check and correct manually +2046 `BF' 0 `' +! Check and correct manually +2047 `BF' 0 `' +! Check and correct manually +2048 `BF' 0 `' +! Check and correct manually +2049 `BF' 0 `' +! Check and correct manually +2050 `BF' 0 `' +! Check and correct manually +2051 `BF' 0 `' +! Check and correct manually +2052 `BF' 0 `' +! Check and correct manually +2053 `BF' 0 `' +! Check and correct manually +2054 `BF' 0 `' +! Check and correct manually +2056 `BF' 0 `' +! Check and correct manually +2057 `BF' 0 `' +! Check and correct manually +2058 `BF' 0 `' +! Check and correct manually +2060 `BF' 0 `' +! Check and correct manually +2061 `BF' 0 `' +! Check and correct manually +2062 `BF' 0 `' +! Check and correct manually +2072 `BF' 0 `' +! Check and correct manually +2074 `BF' 0 `' +! Check and correct manually +2075 `BF' 0 `' +! Check and correct manually +2076 `BF' 0 `' +! Check and correct manually +2077 `BF' 0 `' +! Check and correct manually +2078 `BF' 0 `' +! Check and correct manually +2079 `BF' 0 `' +! Check and correct manually +2081 `BF' 0 `' +! Check and correct manually +2083 `BF' 0 `' +! Check and correct manually +2085 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2086 `BF' 0 `' +! Check and correct manually +2088 `BF' 0 `' +! Check and correct manually +2090 `BF' 0 `' +! Check and correct manually +2091 `BF' 0 `' +! Check and correct manually +2094 `BF' 0 `' +! Check and correct manually +2096 `BF' 0 `' +! Check and correct manually +2097 `BF' 0 `' +! Check and correct manually +2098 `BF' 0 `' +! Check and correct manually +2108 `' 0 `' +! check if reference ID Projects was meant for a section (if not, eg for an anchor, change manually) +2143 `REF' 0 `' +2196 `REF' 0 `' +2243 `HTMLURL' 0 `' +2259 `REF' 0 `' +2263 `REF' 0 `' +2277 `TT' 0 `' +! Check and correct manually +2287 `REF' 0 `' +2292 `REF' 0 `' +2297 `REF' 0 `' +2300 `REF' 0 `' +2303 `Adding Files and 0 `Adding-Files-and-Classes' +! Reference changed: check if still unique +2303 `' 0 `' +! check if reference ID Adding-Files-and-Classes was meant for a section (if not, eg for an anchor, change manually) +2317 `REF' 0 `' +2333 `Setting Project 0 `Setting-Project-File-Options' +! Reference changed: check if still unique +2333 `' 0 `' +! check if reference ID Setting-Project-File-Options was meant for a section (if not, eg for an anchor, change manually) +2343 `Adding 0 `Adding-Translations' +! Reference changed: check if still unique +2343 `' 0 `' +! check if reference ID Adding-Translations was meant for a section (if not, eg for an anchor, change manually) +2345 `TT' 0 `' +! Check and correct manually +2345 `TT' 0 `' +! Check and correct manually +2354 `TT' 0 `' +! Check and correct manually +2354 `TT' 0 `' +! Check and correct manually +2354 `TT' 0 `' +! Check and correct manually +2354 `TT' 0 `' +! Check and correct manually +2354 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2354 `TT' 0 `' +! Check and correct manually +2354 `TT' 0 `' +! Check and correct manually +2363 `TT' 0 `' +! Check and correct manually +2363 `TT' 0 `' +! Check and correct manually +2363 `TT' 0 `' +! Check and correct manually +2380 `TT' 0 `' +! Check and correct manually +2380 `TT' 0 `' +! Check and correct manually +2384 `URL' 0 `' +2384 `REF' 0 `' +2384 `HTMLURL' 0 `' +2389 `Extending the 0 `Extending-the-Project-Documentation' +! Reference changed: check if still unique +2389 `' 0 `' +! check if reference ID Extending-the-Project-Documentation was meant for a section (if not, eg for an anchor, change manually) +2403 `TT' 0 `' +! Check and correct manually +2403 `TT' 0 `' +! Check and correct manually +2403 `TT' 0 `' +! Check and correct manually +2403 `TT' 0 `' +! Check and correct manually +2403 `TT' 0 `' +! Check and correct manually +2403 `HTMLURL' 0 `' +2418 `Project Hacking' 0 `Project-Hacking' +! Reference changed: check if still unique +2418 `' 0 `' +! check if reference ID Project-Hacking was meant for a section (if not, eg for an anchor, change manually) +2430 `REF' 0 `' +2446 `Build Settings' 0 `Build-Settings' +! Reference changed: check if still unique +2446 `' 0 `' +! check if reference ID Build-Settings was meant for a section (if not, eg for an anchor, change manually) +2460 `BF' 0 `' +! Check and correct manually +2461 `BF' 0 `' +! Check and correct manually +2472 `Compiler Options' 0 `Compiler-Options' +! Reference changed: check if still unique +2472 `' 0 `' +! check if reference ID Compiler-Options was meant for a section (if not, eg for an anchor, change manually) +2511 `BF' 0 `' +! Check and correct manually +2511 `BF' 0 `' +! Check and correct manually +2517 `Compiler Warnings' 0 `Compiler-Warnings' +! Reference changed: check if still unique +2517 `' 0 `' +! check if reference ID Compiler-Warnings was meant for a section (if not, eg for an anchor, change manually) + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2543 `TT' 0 `' +! Check and correct manually +2543 `TT' 0 `' +! Check and correct manually +2594 `BF' 0 `' +! Check and correct manually +2596 `Linker Options' 0 `Linker-Options' +! Reference changed: check if still unique +2596 `' 0 `' +! check if reference ID Linker-Options was meant for a section (if not, eg for an anchor, change manually) +2597 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2597 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2597 `BF' 0 `' +! Check and correct manually +2613 `BF' 0 `' +! Check and correct manually +2623 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2625 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2627 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2629 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2631 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2633 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2635 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2637 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2639 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2641 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2643 `BF' 0 `' +! Check and correct manually +2647 `Make Options' 0 `Make-Options' +! Reference changed: check if still unique +2647 `' 0 `' +! check if reference ID Make-Options was meant for a section (if not, eg for an anchor, change manually) +2691 `The Class Browser' 0 `The-Class-Browser-0' +! Reference changed: check if still unique +2691 `' 0 `' +! check if reference ID The-Class-Browser-0 was meant for a section (if not, eg for an anchor, change manually) +2727 `TT' 0 `' +! Check and correct manually +2749 `BF' 0 `' +! Check and correct manually +2750 `BF' 0 `' +! Check and correct manually +2751 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2752 `BF' 0 `' +! Check and correct manually +2753 `BF' 0 `' +! Check and correct manually +2761 `BF' 0 `' +! Check and correct manually +2762 `BF' 0 `' +! Check and correct manually +2783 `TT' 0 `' +! Check and correct manually +2783 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2783 `TT' 0 `' +! Check and correct manually +2783 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2803 `BF' 0 `' +! Check and correct manually +2822 `The Dialog Editor' 0 `The-Dialog-Editor-0' +! Reference changed: check if still unique +2822 `' 0 `' +! check if reference ID The-Dialog-Editor-0 was meant for a section (if not, eg for an anchor, change manually) +2850 `REF' 0 `' +2852 `REF' 0 `' +2854 `REF' 0 `' +2865 `BF' 0 `' +! Check and correct manually +2867 `BF' 0 `' +! Check and correct manually +2870 `BF' 0 `' +! Check and correct manually +2886 `HTMLURL' 0 `' +2902 `BF' 0 `' +! Check and correct manually +2902 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2903 `BF' 0 `' +! Check and correct manually +2903 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2903 `TT' 0 `' +! Check and correct manually +2903 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2903 `TT' 0 `' +! Check and correct manually +2903 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2903 `TT' 0 `' +! Check and correct manually +2903 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2905 `BF' 0 `' +! Check and correct manually +2907 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2907 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2908 `BF' 0 `' +! Check and correct manually +2908 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2908 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2912 `BF' 0 `' +! Check and correct manually +2939 `HTMLURL' 0 `' +2945 `Adding Widgets' 0 `Adding-Widgets' +! Reference changed: check if still unique +2945 `' 0 `' +! check if reference ID Adding-Widgets was meant for a section (if not, eg for an anchor, change manually) +3006 `The Widget Editor' 0 `The-Widget-Editor' +! Reference changed: check if still unique +3006 `' 0 `' +! check if reference ID The-Widget-Editor was meant for a section (if not, eg for an anchor, change manually) +3012 `Setting Properties' 0 `Setting-Properties' +! Reference changed: check if still unique +3012 `' 0 `' +! check if reference ID Setting-Properties was meant for a section (if not, eg for an anchor, change manually) +3022 `TT' 0 `' +! Check and correct manually +3022 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +3022 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +3038 `HTMLURL' 0 `' +3042 `The Internal 0 `The-Internal-Debugger' +! Reference changed: check if still unique +3042 `' 0 `' +! check if reference ID The-Internal-Debugger was meant for a section (if not, eg for an anchor, change manually) +3059 `REF' 0 `' +3063 `REF' 0 `' +3065 `BF' 0 `' +! Check and correct manually +3065 `REF' 0 `' +3105 `Available 0 `Available-functions' +! Reference changed: check if still unique +3105 `' 0 `' +! check if reference ID Available-functions was meant for a section (if not, eg for an anchor, change manually) +3130 `' 0 `' +! in-the-debug-menu,available-functions added to sect3 +3187 `The floating 0 `The-floating-toolbar' +! Reference changed: check if still unique +3187 `' 0 `' +! check if reference ID The-floating-toolbar was meant for a section (if not, eg for an anchor, change manually) +3194 `REF' 0 `' +3209 `Shared libraries 0 `Shared-libraries-and-breakpoints' +! Reference changed: check if still unique +3209 `' 0 `' +! check if reference ID Shared-libraries-and-breakpoints was meant for a section (if not, eg for an anchor, change manually) +3225 `CVS Integration' 0 `CVS-Integration' +! Reference changed: check if still unique + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +3225 `' 0 `' +! check if reference ID CVS-Integration was meant for a section (if not, eg for an anchor, change manually) +3247 `BF' 0 `' +! Check and correct manually +3261 `TT' 0 `' +! Check and correct manually +3296 `BF' 0 `' +! Check and correct manually +3296 `TT' 0 `' +! Check and correct manually +3302 `BF' 0 `' +! Check and correct manually +3303 `BF' 0 `' +! Check and correct manually +3304 `BF' 0 `' +! Check and correct manually +3309 `BF' 0 `' +! Check and correct manually +3310 `BF' 0 `' +! Check and correct manually +3311 `BF' 0 `' +! Check and correct manually +3312 `BF' 0 `' +! Check and correct manually +3319 `TT' 0 `' +! Check and correct manually +3322 `General 0 `General-Configuration' +! Reference changed: check if still unique +3322 `' 0 `' +! check if reference ID General-Configuration was meant for a section (if not, eg for an anchor, change manually) +3328 `Configuring the 0 `Configuring-the-Tools-Menu' +! Reference changed: check if still unique +3328 `' 0 `' +! check if reference ID Configuring-the-Tools-Menu was meant for a section (if not, eg for an anchor, change manually) +3364 `KDevelop Setup' 0 `KDevelop-Setup' +! Reference changed: check if still unique +3364 `' 0 `' +! check if reference ID KDevelop-Setup was meant for a section (if not, eg for an anchor, change manually) +3366 `BF' 0 `' +! Check and correct manually +3371 `BF' 0 `' +! Check and correct manually +3376 `BF' 0 `' +! Check and correct manually +3382 `BF' 0 `' +! Check and correct manually +3387 `Changing Keyboard 0 `Changing-Keyboard-Shortcuts' +! Reference changed: check if still unique +3387 `' 0 `' +! check if reference ID Changing-Keyboard-Shortcuts was meant for a section (if not, eg for an anchor, change manually) +3393 `' 0 `' +! check if reference ID Documentation was meant for a section (if not, eg for an anchor, change manually) +3434 `TT' 0 `' +! Check and correct manually +3440 `COMMENT' 0 `note' +! Too conspicuous for an ex-comment. Find a better element! (note that does not render its content in HTML)! + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +3440 `BF' 0 `' +! Check and correct manually +3440 `TT' 0 `' +! Check and correct manually +3440 `TT' 0 `' +! Check and correct manually +3452 `REF' 0 `' +3471 `' 0 `' +! check if reference ID Debugger was meant for a section (if not, eg for an anchor, change manually) +3473 `REF' 0 `' +3483 `REF' 0 `' +3487 `REF' 0 `' +3493 `Setting Paths' 0 `Setting-Paths' +! Reference changed: check if still unique +3493 `' 0 `' +! check if reference ID Setting-Paths was meant for a section (if not, eg for an anchor, change manually) +3495 `HTMLURL' 0 `' +3502 `Questions and 0 `Questions-and-Answers' +! Reference changed: check if still unique +3502 `' 0 `' +! check if reference ID Questions-and-Answers was meant for a section (if not, eg for an anchor, change manually) +3507 `Bug Reporting' 0 `Bug-Reporting' +! Reference changed: check if still unique +3507 `' 0 `' +! check if reference ID Bug-Reporting was meant for a section (if not, eg for an anchor, change manually) +3509 `HTMLURL' 0 `' +3513 `HTMLURL' 0 `' +3519 `BF' 0 `' +! Check and correct manually +3521 `BF' 0 `' +! Check and correct manually +3521 `HTMLURL' 0 `' +3526 `URL' 0 `' +3533 `BF' 0 `' +! Check and correct manually +3535 `BF' 0 `' +! Check and correct manually +3556 `BF' 0 `' +! Check and correct manually +3556 `TSCREEN' 0 `' +3562 `VERB' 0 `' +! Because it is in TSCREEN +3562 `BF' 0 `' +! Check and correct manually +3567 `BF' 0 `' +! Check and correct manually +3569 `BF' 0 `' +! Check and correct manually +3572 `BF' 0 `' +! Check and correct manually +3574 `BF' 0 `' +! Check and correct manually +3576 `TSCREEN' 0 `' +3583 `VERB' 0 `' +! Because it is in TSCREEN +3583 `TSCREEN' 0 `' + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +3587 `VERB' 0 `' +! Because it is in TSCREEN +3590 `BF' 0 `' +! Check and correct manually +3590 `TSCREEN' 0 `' +3616 `VERB' 0 `' +! Because it is in TSCREEN +3616 `BF' 0 `' +! Check and correct manually +3616 `URL' 0 `' +3622 `BF' 0 `' +! Check and correct manually +3624 `BF' 0 `' +! Check and correct manually +3627 `BF' 0 `' +! Check and correct manually +3629 `BF' 0 `' +! Check and correct manually +3632 `BF' 0 `' +! Check and correct manually +3634 `BF' 0 `' +! Check and correct manually +3638 `BF' 0 `' +! Check and correct manually +3638 `BF' 0 `' +! Check and correct manually +3643 `BF' 0 `' +! Check and correct manually +3643 `BF' 0 `' +! Check and correct manually +3653 `BF' 0 `' +! Check and correct manually +3653 `BF' 0 `' +! Check and correct manually +3674 `BF' 0 `' +! Check and correct manually +3676 `HTMLURL' 0 `' +3676 `QUOTE' 0 `quote' +! QUOTE seems only to be used to get some indentation. DELETE if this is so! +3680 `HTMLURL' 0 `' +3680 `QUOTE' 0 `quote' +! QUOTE seems only to be used to get some indentation. DELETE if this is so! +3683 `HTMLURL' 0 `' +3683 `QUOTE' 0 `quote' +! QUOTE seems only to be used to get some indentation. DELETE if this is so! +3686 `HTMLURL' 0 `' +3686 `QUOTE' 0 `quote' +! QUOTE seems only to be used to get some indentation. DELETE if this is so! +3689 `HTMLURL' 0 `' +3689 `QUOTE' 0 `quote' +! QUOTE seems only to be used to get some indentation. DELETE if this is so! +3692 `HTMLURL' 0 `' +3692 `QUOTE' 0 `quote' +! QUOTE seems only to be used to get some indentation. DELETE if this is so! +3695 `HTMLURL' 0 `' +3695 `QUOTE' 0 `quote' +! QUOTE seems only to be used to get some indentation. DELETE if this is so! + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +3698 `HTMLURL' 0 `' +3698 `QUOTE' 0 `quote' +! QUOTE seems only to be used to get some indentation. DELETE if this is so! +3701 `HTMLURL' 0 `' +3701 `QUOTE' 0 `quote' +! QUOTE seems only to be used to get some indentation. DELETE if this is so! +3704 `HTMLURL' 0 `' +3704 `QUOTE' 0 `quote' +! QUOTE seems only to be used to get some indentation. DELETE if this is so! +3709 `BF' 0 `' +! Check and correct manually +3711 `HTMLURL' 0 `' +3715 `BF' 0 `' +! Check and correct manually +3718 `HTMLURL' 0 `' +3719 `HTMLURL' 0 `' +3720 `HTMLURL' 0 `' +3721 `HTMLURL' 0 `' +3722 `HTMLURL' 0 `' +3723 `HTMLURL' 0 `' +3724 `HTMLURL' 0 `' +3725 `HTMLURL' 0 `' +3726 `HTMLURL' 0 `' +3727 `HTMLURL' 0 `' +3728 `HTMLURL' 0 `' +3729 `HTMLURL' 0 `' +3730 `HTMLURL' 0 `' +3731 `HTMLURL' 0 `' +3732 `HTMLURL' 0 `' +3733 `HTMLURL' 0 `' +3734 `HTMLURL' 0 `' +3735 `HTMLURL' 0 `' +3736 `HTMLURL' 0 `' +3739 `BF' 0 `' +! Check and correct manually +3742 `HTMLURL' 0 `' +3743 `HTMLURL' 0 `' +3746 `BF' 0 `' +! Check and correct manually +3749 `HTMLURL' 0 `' +3750 `HTMLURL' 0 `' +3751 `HTMLURL' 0 `' +3752 `HTMLURL' 0 `' +3753 `HTMLURL' 0 `' +3754 `HTMLURL' 0 `' +3755 `HTMLURL' 0 `' +3756 `HTMLURL' 0 `' +3757 `HTMLURL' 0 `' +3758 `HTMLURL' 0 `' +3759 `HTMLURL' 0 `' +3760 `HTMLURL' 0 `' +3761 `HTMLURL' 0 `' +3762 `HTMLURL' 0 `' +3763 `HTMLURL' 0 `' +3764 `HTMLURL' 0 `' +3765 `HTMLURL' 0 `' +3766 `HTMLURL' 0 `' + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +3767 `HTMLURL' 0 `' +3768 `HTMLURL' 0 `' +3769 `HTMLURL' 0 `' +3770 `HTMLURL' 0 `' +3771 `HTMLURL' 0 `' +3772 `HTMLURL' 0 `' +3773 `HTMLURL' 0 `' +3774 `HTMLURL' 0 `' +3775 `HTMLURL' 0 `' +3776 `HTMLURL' 0 `' +3777 `HTMLURL' 0 `' +3778 `HTMLURL' 0 `' +3779 `HTMLURL' 0 `' +3783 `BF' 0 `' +! Check and correct manually +3785 `BF' 0 `' +! Check and correct manually +3785 `HTMLURL' 0 `' +3787 `BF' 0 `' +! Check and correct manually +3787 `HTMLURL' 0 `' +3789 `BF' 0 `' +! Check and correct manually +3789 `HTMLURL' 0 `' +3792 `BF' 0 `' +! Check and correct manually +3792 `HTMLURL' 0 `' +3810 `' 0 `' +! check if reference ID Copyright was meant for a section (if not, eg for an anchor, change manually) +3812 `TSCREEN' 0 `' +3829 `VERB' 0 `' +! Because it is in TSCREEN +=== NIF conversion errors ======================== +=== Finalising errors =========================== diff -Nru kdevelop-3.9.98/doc/manual/index.docbook kdevelop-4.0.1/doc/manual/index.docbook --- kdevelop-3.9.98/doc/manual/index.docbook 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/manual/index.docbook 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,5478 @@ +KDevelop"> + + ]]> +]> + + + The User Manual to KDevelop + The Reference Guide to the KDevelop Integrated Development Environment for Unix Systems, Version 1.2 + + +RalfNolden +The KDevelop Team +
Ralf.Nolden@post.rwth-aachen.de
+
+The Kdevelop Team + +LauriWatts +Reviewer +
vampyr@atconnex.net
+
+
+ + +1998 +1999 +2000 +Ralf Nolden + + +21/03/2000 +1.02.00 + + +KDE +Kdevelop + + + +This handbook is part of the KDevelop Integrated Development Environment, for KDE 1.x and KDE 2.0 + +
+ + + Introduction + + Just as everything on earth has its fashions, todays computer world seems to be tending to the use of free software, even for commercial purposes. The most popular free software project is Linux. It is now generally agreed that Linux, (as well as other projects such as the Apache web server, the Perl language and the GNU suite of tools), proves that free software can be of as high a quality as commercial software. But despite the quality, end users must still suffer from the often cryptic commands of any Unix System. For Linux to thrive, it needs applications, both free and commercial, and it needs ease of use. + The KDE KDE project tries to close the gap with commercial software, by providing an easy to use desktop, and the companion libraries to extend the variety of available GUIGUI-based software. As free software is often made in the author's free time, the question for many programmers is how much they like their current code development environment. kdevelop; wants to take a major step towards making the programmer's life easier and more efficient. Products created with kdevelop; can reach a higher level of reliability and functionality in the same development period. + To fulfill this goal, the KDevelop Integrated Development Environment provides many features that developers need, at the same time as it wraps the functionality of third party projects such as make and the GNU C++ CompilerCompiler, and makes them an invisible, integrated part of the development process. + + kdevelop; manages: + + + All development tools needed for C++ programming including the Compiler Compiler, the LinkerLinker, automakeautomake, and autoconfautoconf + + + kappwiz; KAppWizard, which generates complete, ready-to-go sample applications + + + Class-generator, for creating new classes classes and integrating them into the current project + + + File management for sources, headers, documentation etc., to be included in the project + + + The creation of User Handbooks written in SGML SGML and the automatic generation of HTMLHTML-output output with the KDE look and feel + + + Automatic HTMLHTMLbased API documentation API-documentation for your project's classes, classes with cross-references to the used libraries + + + Internationalization support for your application, allowing translators to easily add their target language to a project + + + WYSIWYG (What you see is what you get) creation of user interfaces, with a built-in dialog editor dialog editor + + + Managing your project via CVS, by providing an easy-to-use front end for the most needed functions + + + Debugging your application, by integrating kdbg;KDbg + + + Editing of project-specific pixmaps pixmaps with KIconEdit KIconEdit + + + The inclusion of any other program you need for development by adding it to the "ToolsTools" menu, according to your individual needs + + + kdevelop; makes it a joy to work with all the necessary programs in one place, and saves time by automating standard development processes, while giving you direct and transparent access to all the information you need. The integrated browsing mechanisms are designed to support the documentation documentation requirements that developers have in conjunction with their project. + The class viewer class viewer and error finder bring you anywhere in the project code with a mouse click, without needing to search for files. File trees give direct access to the project files, project files and the integrated help system offers superb access to online-documentation from anywhere within the IDE. + + + Changes + + Version 1.2 of kdevelop; contains the most needed facilities for C/C++ development. During the development phase of kdevelop;, the project has made great improvements since the 1.0 final release, followed by the release of version 1.1. The current version is to be expected to be the final release for the KDE 1.x series, giving developers the environment they want to use. + Improvements were made in the following sections: + + + fast class-parser and -browser with graphical class-tree view and dialog-based adding of members and classes + + + CVS support for the most needed functions such as adding, removing, updating, and committing files and directories + + + updated and extended documentation, now comprising five handbooks shipping with kdevelop; + + + bug-fixed dialog-editor and error-finder + + + updated documentation tree which lets you access the class documentation, up to any method of classes directly + + + Any comments about the IDE, its documentation, or feature requests are welcome. + + + + About this Handbook + + This user manual gives the user a complete overview of the kdevelop; IDE and describes the basic development process in brief. For more information about specific programming issues, we suggest reading the KDevelop Programming Handbook included with kdevelop;, which covers themes such as understanding generated application frameworkapplication frameworks, and how to create full-featured KDE KDE applications, using example projects. + + The design of this handbook is therefore separated into the following parts: + + + Chapter Installation, covers the system requirements, installation and setting up of the kdevelop; IDE. + + + Chapter Programs, tells you how programs are created with standard GNU development tools and how they are built. + + + Chapter Development with kdevelop;, takes you on a short tour, describing the main functionality of the environment. + + + Chapter Overview, explains the menus and dialogs, as well as keyboard shortcutsshortcuts. + + + Chapter The Help System, shows how to use the built-in documentation browser documentation browser and additional help functions. + + + Chapter Working with the Editor, explains the features for file management and editing. + + + Chapter Projects, describes the creation and maintaining of software projects. + + + Chapter Build Settings, contains a reference on how to set Compiler Compiler and linker flags, as well as project options. + + + Chapter The Class Browser, tells you how to make use of kdevelop;'s powerful Class Browser. + + + Chapter The Dialog Editor, features the integrated visual GUI GUI constructor and how it generates C++ output output. + + + ChapterThe Internal Debugger,gives an overview of the debugging setup and use of the internal debugger + + + ChapterCVS Integration, tells you how to use the revision control system CVS, and RCS with your kdevelop; project. + + + Chapter General Configuration shows how you can set overall preferences for using kdevelop;. + + + Chapter Questions and Answers, covers questions regarding the usage of kdevelop; under different flavors of Unix systems, and problem solutions in general. + + + For programming beginners, and new users of this product, we recommend you read entirely through this manual before starting to actually work with the IDE, as it covers the usage in depth. The understanding of how things are done the quickest way will save you a lot of time searching for functions and features, as it will enable you to make full use of first-class development tools. + + + + About the <application>kdevelop</application>; Project + + The kdevelop; project was started in summer of 1998 (after KDE 1.0 was available on Linux/Unix,) as an attempt to create an easy to use C/C++ IDE for programmers, especially targeting the KDE desktop. Since then the project has found a lot of helpers and supporters, as well as sponsors who want to help the team continue their work on this now widely recognized programming environment. Within one and a half years, the IDE developed to a full-featured KDE application with the most possible functionality and stability, as the creators started to develop the IDE within the IDE itself once enough usability was established. Bugs were mostly found by the authors themselves, and could be fixed very quickly, as well as needed extensions for programming KDE applications. + The first official stable release was made with version 1.0 on December 6, 1999. Thereafter, the kdevelop; Team introduced more features and stability into the IDE by new code or code that was unstable before, which lead to the second release, as version 1.1 on February 28, 2000. + Since then, the project has continued to integrate more functionality and has been simplifying the current code-base. Many translators are transferring kdevelop; to as many languages as possible, to provide the international developer community the IDE in their own language, including the handbooks that ship with it. Many users have contributed their experience and knowledge to the project as one of the most promising products for Linux/Unix developers, helping to make it even more stable and portable to other Unices. + + + + Printed Versions + + A printed version of the complete kdevelop; Documentation is available as the book titled Developing Applications for Linux: KDE Edition, which can be ordered either online from the kdevelop; web site at http://www.kdevelop.org or at http://www.opendocs.org. A share of the Gross Profits from the sales of this book goes back to the kdevelop; project, to support continuing the further development of kdevelop;. + Printable versions of the kdevelop; Documentation can also be obtained from the kdevelop; web site at http://www.kdevelop.org in DVI, Postscript and PDF format, both in A4 and in Letter size. + + + + + + Installation <indexterm><primary>Installation</primary></indexterm> + + + How to obtain <application>kdevelop</application> + + kdevelop; can be found either on the KDE KDE Applications page at http://www.kde.org/current.html, or on the kdevelop; home page at http://www.kdevelop.org. + kdevelop is also available on Linux distributions, such as SuSE 6.1. + We're also offering snapshots of the kdevelop CVS repository on our home page, for those who want to stay up to date with kdevelop. Usually, the snapshots are not intended to be used for production, but as a test for new features, and to give an insight into development progress of the KDevelop team. We also offer various third party software needed by KDevelop directly such as KDoc KDoc and kdbg;KDbg. + If you are experiencing problems with compiling or using KDevelop, please read the Questions and Answers section of this handbook or the FAQ file included with the KDevelop package. If your problem is not addressed, please subscribe to the KDevelop mailing list at kdevelop-request@barney.cs.uni-potsdam.de by sending an email with an empty header and "subscribe youremailaddress" as contents. + Requests and problem reports should only target the usage of the KDevelop IDE, and not questions that regard any implementation implementation problems you may have while coding your own application. All email sent to the mailing list should be written in English, so that all participants can take part in discussions and are able to provide better help. The mailing list is also intended for those users willing to contribute and who have found solutions for any problems they experienced. This enables us to fix errors errors and include that knowledge to give beginners even more qualified first-hand help. + A good way to report problems is to send the output output you get from starting kdevelop from the console or to copy and paste the contents of KDevelop's internal Messages-window Messages-window. + + + + Requirements <indexterm><primary>Requirements</primary></indexterm> + + In order to successfully compile and use KDevelop, you need the following programs and libraries. These are available on most platforms as distribution packages and can thereby be installed easily. + + Required: + + + g++ 2.7.2/g++ 2.8.1/egcs 1.1 (or compatible), available at http://www.gnu.org/ + + + GNU make (or compatible), available at http://www.gnu.org/ + + + Perl 5.004, available at http://www.perl.com/ + + + autoconf autoconf 2.12, available at http://www.gnu.org/ + + + automake automake 1.2, available at http://www.gnu.org/ + + + flex 2.5.4 + + + GNU gettext, available at http://www.gnu.org/ + + + Qt 1.42, available at http://www.troll.no/ + + + KDE KDE 1.1.x, available at http://www.kde.org/ + + + Optional: + + + enscript enscript for printing printing support + + + ghostview or kghostview for printing printing preview + + + glimpse glimpse 4.0 for the search index search index, available at http://glimpse.cs.arizona.edu/ + + + sgmltools 1.0, available at http://www.sgmltools.org/ + + + KDE-SDK KDE-SDK (KDE Software Development Kit), which includes KDoc KDoc, KSgml2Html KSgml2Html, KTranslator KTranslator (available at http://developer.kde.org/) + + + kdbg; KDbg, available at http://members.telecom.at/~johsixt/kdbg.html + + + KIconEdit KIconEdit available at http://www.kde.org/ + + + KDevelop was tested on an AMD K6 200, 64MB RAM with SuSE Linux 5.2 and with Free-BSD 3.0-Release, and also SuSE Linux 6.0 on an Intel 200 MMX, 128MB RAM. + As far as known to the authors, SuSE Linux and Free-BSD contain all necessary packages, including enscript enscript as packages or rpms, so you should have no problem installing the required third-party software. + Documentation: + For creating the KDE KDE library documentation, you need the kdelibs package in source available on your system as provided by the KDE project or included with the source packages of your distribution, and KDocKDoc (included in the KDE-SDK KDE-SDK). + We are also offering a C/C++ Reference Reference on our home-page at http://www.kdevelop.org that is integrated into the documentation browser documentation browser after it's installation. Download the package and copy the source file as root into your KDE KDE directory, and untar it with tar zxvf c_c++_reference.tar.gz, then the reference is available in the documentation tree; otherwise selecting the reference book in the browser shows an error page with the KDevelop home-page URL offering a download and describing the installation process. + + + + Compilation and Installation + + In order to compile and install kdevelop on your system, type the following in the base directory of the KDevelop distribution: + + + +bash$ ./configure +bash$ make + +and as root + +bash# make install + + Since KDevelop uses autoconf autoconf you should have no trouble compiling it. + In order to compile the KDevelop CVS snapshot, type the following : + + +bash$ make -f Makefile.cvs +bash$ ./configure +bash$ make + +change to `root` and type: + +bash# make install + + If your system's make command make-command is gmake, type gmake instead of make. + + + + Starting <application>KDevelop</application> + + If you use KDE KDE as your window manager, KDevelop can be started by choosing "K"->"Development"->"KDevelop 1.2"". As KDevelop supports KDEKDE-Mime-types, you can also start by selecting a KDevelop project file ("*.kdevprj", displayed with the KDevelop project icon) in the KDE KDE File Manager, which will start KDevelop and load the project. Under other window managers, open a console and type: + + + +bash$ kdevelop + + To start KDevelop with an existing project, change into the project-directory and type: + + + +bash$ kdevelop <yourProject>.kdevprj + + Under each user account KDevelop will invoke the automatic installation process on the first start, allowing a quick configuration of the most needed options. If your installation is messed up, you can reconfigure KDevelop any time either by entering + + + +bash$ kdevelop --setup + + or, when using KDE, by choosing "K""Development""KDevelop Setup". + + + + The Installation Program + + KDevelop includes an automatic installation program module, which is invoked whenever KDevelop is started and the configuration file kdeveloprc does not exist. We suggest you follow the installation steps by choosing "Proceed" to automatically check your system and to set up your KDevelop environment. + The Installation dialog's buttons execute the following actions: + Help: Will open the KDEHelp program. + Proceed: This starts the installation process and executes the following actions: + + + Checking for make/gmake, autoconfautoconf, autoheader, automake automake and perl for the creation and compilation of new applications generated by KDevelop. If gmake is installed, the make command make-command will be set automatically to use gmake. Other command-line options to your make program can be set in the setup setup dialog accessed by the "Options" menu later. An introduction into development under Unix is explained in section Programs. + + + Checking for KDocKDoc and glimpse glimpse. These will allow the creation of new KDE-Library KDE-Library documentation, and a search index search index to be created automatically in a later setup setup step, if found. + + + Checking for enscript enscript to ensure that printing printing is available. This program must be installed to allow correct printing printing. If it isn't installed, you can optionally do this at any time later on, without having to run the setup setup again. + + + Checking for kdbg;KDbg, KIconEdit KIconEdit, and KTranslatorKTranslator. We encourage you to install those programs, as they are helpful for creating complete KDE KDEapplications. kdbg; KDbg is used directly for debugging debugging your current project within KDevelop; KIconEdit KIconEdit is used to display and edit pixmaps pixmaps selected in the file-viewer trees. The programs kdbg; KDbg, KIconEditKIconEdit, and KTranslator KTranslator are then configured to be available in the Tools Tools menu of the KDevelop menu bar, if they are found. Other tools can be added to the "Tools" Tools-menu by selecting "ToolsTools..." in the "Options" menu later. + + + Summary of detected programs: the installer lists those programs it found and those it didn't. Additional hints are given, if a needed program is not found. + + + Detection of your Qt Documentation Qt-Documentation path. This checks for several standard paths in your system for the documentation, and sets the path automatically. If your Qt Documentation Qt-Documentation could not be found, either because it is not installed, or your system keeps it at a different location, a message will appear that asks you to either set the correct path manually or to continue. Choosing the button to set the path will return to the main installation window, and shows an editing field with a button on the right of it to choose the path. Usually this is in the qt/html directory. After doing so, the installation can continue with the selection of "Proceed" again. + + + If KDoc KDoc was detected, you are asked to create/update your KDE KDE library documentation. For that, you need to have the kde-libraries in source form. + For Linux users who have installed KDE KDE from a distribution, we suggest copying and extracting the source of the kdelibs-package to your system. Free BSD users who installed the kdelibs as a package should look for their appropriate distfile package in the ports-collection. + If none of these cases match your situation, you should download the sources from http://www.kde.org and untar the sources on your system. If you wish to use the documentation package provided by http://developer.kde.org/, cancel the creation and continue on with creating the search index search index. + After the installer finished and KDevelop has been started, set the path to the extracted documentation package in the KDevelop Setup dialog, and run the search index search index setup setup again, which can be found at the same setup setup page of the dialog. + The "Update KDE KDE-Library documentation" dialog is set up to use a default path for the location of the documentation, in $(HOME)/.kde/share/apps/kdevelop/KDE-Documentation. The only thing you have to do is choosing the path to your library sources you extracted on the system with the selection button on top of the dialog, and press "OK". As an example, if you got the kdelibs.tar.gz package from http://www.kde.org/ and downloaded it to your home directory, you should open a console or terminal, and enter tar zxvf kdelibs.tar.gz This will untar the sources into a directory $HOME/kdelibs, which then contains the sources for each library in a subdirectory, e.g. for kdecore, this would be on my computer in /home/rnolden/kdelibs/kdecore. Now, the path you have to enter in the KDE-Library documentation dialog would be the path to all libraries, in the example /home/rnolden/kdelibs. After pressing the "OK" button, a message in the installation window shows that the documentation generation is in progress and you should wait for the next message. + On a multi-user system multi-user system or systems with disk-quotas disk-quotas for user accounts, the installation of a complete HTML HTML documentation for each user would be a waste of disk space. In this case, ask your system administrator to run KDevelop under the root account, to allow write access to the system's root directory. Then install the documentation within the KDE KDEdirectory, under $KDEDIR/share/apps/kdevelop/KDE-Documentation. The correct path can then be set up later in the KDevelop setup setup dialog, available in the "Options" menu "Options"-menu. + + + If the system check found the glimpse glimpse program on your system, you are offered to create a search database. The search database can be created with the options of including both the KDE Documentation KDE-Documentation and the Qt Documentation Qt-Documentation (the default). Additionally the KDevelop documentation is included and will be indexed. If you have other documentation that you want indexed you can select the directories, and add them to the indexing process as well. + + + During the creation of the search index search index, the installation window will show a message that this is in progress. + + + If all installation steps were done correctly, a final message states that KDevelop will be started after pressing "OK". Mind that you can set up additional options like auto saving in the KDevelop Setup dialog that can be accessed through the "Options" menu. + + + Cancel: Will show a warning message that the installation process is going to be canceled. This warning message allows you to return to the installation ("Back") or to start KDevelop with the default values ("Continue"). Mind that in this case you will have to set all options manually with the configuration dialogconfiguration dialogs provided in the "Options" menu. + + + + + Programs + + Now that KDevelop installed successfully and the most commonly used options are set, you are probably wondering if it keeps its promises. This chapter gives you a guideline to how programs are created using the GNU tools in general, and especially what part KDevelop plays in this game. + + + The Compiler + The Compiler Compiler is actually the program on your system that has to be installed as a minimum to create running programs; he is the one that compiles the source code into object files and creates the program. + Normally, you would start like this: Open an editor of your choice - don't use a word-processor! Type in something like this to create the source for your first program: + +#include <iostream.h> + +int main(){ + +cout << "Hello World" << endl; + +} + + Well, actually all the program will do is to print out the string "Hello World" to your standard output output. But this is just the source code for the program to be built, not the program itself. Therefore, we need a Compiler Compiler, in this case a C++-Compiler Compiler like g++. Then we can save the file with the source code, as, let's say, myprogram.cpp and invoke the Compiler Compiler with the filename (on a console): + + +g++ -o myprogram myprogram.cpp + + + Now we can start our program: just type myprogram on the console, and the program prints out the string, then exits. + + + + Make and Makefile<indexterm><primary>Makefile</primary></indexterm>s + + I have everything I need: an editor, a Compiler Compiler and I can execute my own C++ program. But it isn't all that easy. What happens if you have more than one source file? Do you have to compile all sources over and over again if you only changed one file? + Compiling will become more and more complicated and time-consuming, because you have to type in all the commands and options yourself. You could write a so-called "MakefileMakefile" (You could also call it some other name, except the name of the program to build.) Then, you should have the tool make or gmake installed, or any other tool that is capable of keeping track of a project's compilation. Insert all your Compiler Compiler commands in the correct syntax into that Makefile Makefile and save it, and then you will only have to type make or gmake on the console in the directory where your Makefile Makefile is located, and then make takes over, leading the Compiler Compiler to create your application. The make utility has many other advantages and can be used to a lot of purposes. + To get a complete overview, open a console and type: + man make + or search for "GNU Make" in KDEHelp, under "System GNU Info contents". + Now you have some insight why a developer needs the make utility for making it easier to compile his application. + Writing a Makefile Makefiles is not only hard work up, but you also have to dig yourself into the whole syntax and options. Here is the good news about KDevelop and any Make utility: You just have to set the Make Command in the KDevelop Setup dialog, and then you're done. All projects generated with KDevelop will use that Make command to build the target application, and no more typing at all. Just hit the buttons on the toolbar of KDevelop, beginning with the one after the second separator line, or choose the desired function for Make in the "Build" menu. + The toolbar and the "Build" menu offer the most common functions that you need to let make do the dirty work: + + + + Build + Compile File + + + Invokes the make command with the correct parameters to compile only the current source. Only active if you're working on a source file. + + + + + + BuildMake + + + + Calls make and creates your target. + + + + + + + Build + Rebuild All + + + + Rebuilds the whole project + + + + + + + Build + Clean/Rebuild All + + + + Cleans the project directory first and then runs make again + + + + + Build + Stop Build + + + Cancels the current process.This is mostly used if you watch make working and staring at your sources. Then -ahh- I forgot about this line... and you have to correct your code. Just hit "Stop", correct the error you found by yourself and run Make again. + + + + + But this is not the only way KDevelop works together with make for KDE KDE applications. There are some special extras, like creating the message files for internationalization. These functions are included, so no need to worry about them anymore. + Now, you know about sources, the Compiler Compiler and why make is needed. In the next section, we'll discuss how projects created with KDevelop can automatically be compiled on most other Unix-platforms using the configure script. + + + + Configure + + The title of this section probably has you asking: Configure? What has to be configured? Or who? +Well, assume you have written a program, including a MakefileMakefile. Then you would like to distribute it, but the compiled binary only runs on your system or on systems that are compatible with yours. +To support other platforms, like different Unix-systems or machines like Alphas or RISCs, you have to recompile the program. The easiest way would be to copy the source package to the target machine and run make again. But what if the target machine uses another Compiler Compiler command or has some other problem to build your binary? Not to mention more difficult issues like installation paths for your program and documentation e.g., KDE KDE can be installed in opt/kde/ on one machine, while it is installed under /usr/local/kde/ on another. In this case, you would have to rewrite the Makefile Makefile each time to ensure a correct compilation and installation of your product. + Fortunately, GNU tools have even more to offer than that mighty make - the commonly used automake automake and autoconf autoconfpackages. It sounds good to hear something with "auto" in the name, seems like something about application design can be done quick and easy, which exactly is the point. + Automake's purpose is generally to create a so-called Makefile.in Makefile.in from a file Makefile.am Makefile.am which you have to write for your project. This Makefile.am Makefile.am consists of macros which are interpreted, and reduce the complexity that make offers. A Makefile.am Makefile.am is written more safely and more quickly than creating the final Makefile Makefileby hand. + Having this said, you may wonder, who is finally creating me my MakefileMakefile? Here comes autoconfautoconf. Autoconf requires several macro files for the project. These are in Makefile.inMakefile.in's generated by automake automake and a file called configure.in, also containing macros. + The Makefile.am Makefile.am and Makefile.in files contain macros that are responsible for how to build the software, in terms of which sources have to be compiled, which files belong to the package, and what name the final binary or library will have after a build. Configure.in on the other hand contains macros for what the final configure shell script will check for on the system at the time configure is executed. These could be e.g., the Compiler Compiler command, required libraries against which the final binary will be linked, include-files the project needs, and their locations. + For example: you want to write a KDE KDE application. After writing your sources, you want to distribute the program to the user community, and each user has to compile the binary on his own. Then you would write a configure.in file that contains the macros for a KDE KDE compliant application. That single macro eventually expands. to a check on the system whether the Qt-library is installed, checks for the Qt header files, the KDE libraries KDE-libraries and headers etc. + Summary: To create a GNU-compliant application that is portable to different Unix OS's and machines other than yours, you will need to do the following: + + write the sources for your project + write a Makefile.amMakefile.am for each subdirectory, including the main project directory of your project + write a configure.in file, placed in the main project directory, containing the macros for system requirements. + run automakeautomake + run autoconf autoconf + + Then the main work is done. Automake creates the Makefile.inMakefile.in files, then autoconf autoconf processes the configure.in and generates an executable shell script called configure. All you then have to do is to execute it with /.configure and the script will run the checks of your choice. Finally MakefileMakefile files will be generated, that allow a final execution of make (or gmake) that will process all MakefileMakefile files and then you're done. + This seems to be a lot of stuff, for simply writing a small application, and much to learn, especially how to write correct macros. But even the fact that you provide a compilation on almost all Unix systems will be worth this work sooner or later. Finally, you only have to do this work once for your project, and if your project's files increase in number, you only have to add the filenames to the macros. + Now, how far does KDevelop support this kind of application development and how complicated does it get for the programmer? The good news is, that you don't even have to know anything about macros and scripts. All details are hidden behind an easy to use graphical interface doing the work for you. An application is therefore created with GNU tools in a very user friendly way. + Just generate your application with kappwiz;KAppWizard, by choosing your application's needs: may it be a pure C++ terminal application, or a kind of GUIGUI program using Qt, or the Qt/KDE KDE libraries. All work is done automatically and your project already contains the MakefileMakefiles that are created by an auto execution of the GNU tools and the configure script. + This is it - you're ready to extend the source of your project, may it be by adding classes classes, dialogs, translations or documentation, which is also completely automated. Just concentrate on the real work of the developer, which is providing functionality for the final application that you want to create. In most cases, you probably won't come in touch with MakefileMakefile files at all when using KDevelop. + + + + Debugging + + The following section covers a term that is widely used by developers: Debugging. It means that, although your Compiler Compiler produces the final application, your application may not run or crash during execution due to a so-called "bug" in the code. A program error described by the name of an insect, comes from the history of computing; one of the first errors errors that caused a machine to crash was not obviously a malfunction - real bugs were inside the computer, which were responsible for the crashes. Therefore, an error not detectable on the first look is called a "bug", so "debugging debugging" means to throw out bugs where they shouldn't be. + Nowadays, you don't have to hunt them for real, assuming that todays computers are designed to keep them out by some kind of outer protection. They are to be found inside the code instead, mostly ending the execution of a program with the message "Segmentation fault". + GNU provides another tool called gdb, the GNU debugger. This terminal program allows you to watch the internal values of an application, and the execution, step by step, by setting "breakpoints" in the code. Gdb stops the execution every time the program comes to a breakpoint while executing. But like most other tools, the debugger is handled by another program providing a front-end to it, making it easy to watch values, and set breakpoints in the code. + For this purpose, your project's application is by default created with a Compiler Compiler option for debugging debugging, storing additional data in the executable to allow the localization of values and lines in the code. As a third-party front end to gdb, KDevelop makes use of kdbg; KDbg, the KDebugger. + To debug your program, you just have to select "Debug" in the "Build" menu or press the corresponding tool-bar button, displayed by a wheel with glasses over it, signaling that you want to watch the execution. + KDevelop then opens the Tools Tools-window and starts your application with kdbg; KDbg. The kdbg; KDbg interface appears inside the Tools Tools window, and allows usage just as if you started it from outside. + In general, the above steps show the required steps that a developer must complete when starting to write his own application, and cover issues that are common to all projects. Also, we explained what part KDevelop does for a developer and how it supports the idea of providing an easy way to Unix programming. To get further information about the role and purpose of GNU tools, you should read the documentation provided with them, commonly accessed via the man command or by the "System GNU Info contents" section in KDEHelp. + + + + + Development with <application>KDevelop</application> + + In this chapter you will get a general overview of how you can use KDevelop and the internal dialog editor dialog editor to create your own applications. + All tools are described by their use during the development process. If you are a beginner in C++/GUI GUI design and programming, you should read The KDevelop Programming Handbook, which describes some basics for program design and shows a more detailed use of KDevelop through sample projects which you can follow step-by-step, to get used with the way applications are created using KDevelop. Also you should have read chapter Programs to gain a general understanding why Unix applications should make use of provided development tools. This will make things easier when you hit references to what a MakefileMakefile is, etc. + + + What are <application>KDevelop</application> Project Applications? + + Projects created with KDevelop make it very easy for developers to use the GNU standard development tools. Instead of the self-creation of MakefileMakefile files, which have to be written anyway because of the project's complexity, the GNU tools provide not only a better method of Makefile Makefile generation, but also a good and safe way to provide fast adaption towards different systems through autoconfautoconf-generated configure scripts. + The distribution of your applications does not require the end-user to have anything different installed than a C++ Compiler Compiler and the development libraries, which is most often the case anyway, but you can also distribute binary packages of your application. Either way, the end-user of your product does not have to have KDevelop installed. For giving away your sources, we advise to include the project file of KDevelop as well, as this makes it very easy for other developers to work with your sources if they use KDevelop as well. For projects where several developers, maybe working on different places, are involved, this should the case anyway, to ensure consistency of the MakefileMakefile files so you don't run into trouble. Especially on multi-language applications, translators won't actually work with the source code, except in cases that require corrections to enable translation support. Even in those cases, translators will be thankful as KDevelop reduces their work to a minimum by adding their language and reducing the work to concentrating on the translation. + When using KDevelop for your own projects, you would start creating a new application with the kappwiz;KAppWizard. There, you can set the project type according the goals of your program. Then, you would start developing the user interface by adding widgets widgets that are already constructed in the libraries and only have to be called by your application, or by self-constructions that can be made with the dialog editor. Next comes the extension of the user interface by changing and extending those parts that are already created by KDevelop like the status-bar, menu-bar and tool-bars. As resources are collected in a resource file, this can be extended simply by adding new values to the already existing ones. The given resources can also be used as a guideline for adding your specific ones. After implementing the functionality to methods that are either generated empty by the dialog editor dialog editor, or already containing code for standard user actions, you should extend the User Manual by simply editing the provided SGML SGML index file to describing your applications capabilities. The last step would be to generate translation files and to distribute your project to translators working to enhance internationalization. + But even for non-GUI GUI application designers the IDE offers an easy way to create new projects: the editor and Class Browser in conjunction with KDevelop's powerful project management will reduce the time for development to the minimum that is required for implementation implementation of functionality. + + + + Short Description of <application>KDevelop</application>'s Tools <indexterm><primary>Tools</primary></indexterm> + + With KDevelop you have chosen a package, that, in conjunction with the use of other tools, will provide you a prefect and flexible environment for object-oriented application development under Unix-Systems. Generally, KDevelop consists of the programming environment, and the dialog editor dialog editor. Besides these, all needed programs that can be helpful for designing applications are embedded in one or the other way. + + + Programming Environment and Dialog Editor + + + The Programming Environment + + The Programming Environment is the user interface that KDevelop provides for creating and maintaining projects, using many other tools while simplifying their use. It's built-in Editor and Help-browser Help-browser as well as the Class Browser reduce the amount of work that development processes usually burden on the programmer. The ease of use features make writing applications for Unix an enjoyment on it's own and will probably result in shorter release cycles and better development improvements. From here, you're managing your project throughout all its details, keep the overview over your classes classes and don't have to use additional consoles for your work. The integration of all user interfaces results in the fact that you only have to work with one window under X and don't have to watch for several windows spread all over your desktop. + + + + The Dialog Editor + + KDevelop's built-in dialog editor dialog editor offers a simple way of designing user interfaces with the Qt and KDE KDE libraries. Its simple way to do almost everything with the mouse allows a rapid construction of dialogs and main views for applications and their direct transformation into C++ code, which is directly added to the project. As the dialog editor dialog editor is embedded into the rest of KDevelop's user interface, you have these same commands available when working in Programming mode. This allows e.g., construction of a dialog, generation of the code output, output and it's direct testing, all within the program, by the availability of the make commandmake-command. You can also still control the Compiler Compiler output output without having to switch back to the programming view. For a detailed description, see The Dialog Editor. + + + + + <application>kappwiz</application>; <indexterm><primary>KAppWizard</primary></indexterm> and the Class-tools + + The kappwiz; KAppWizard and the Class-tools provided for project generation and automatic code extension are intended to make the creation of applications as easy and safe as possible. It offers a good way for beginners in Qt/KDE KDE programming to start actually working themselves into the details of GUI GUI application design, as results can be achieved very quickly. + + + <application>kappwiz</application>; <indexterm><primary>KAppWizard</primary></indexterm> + + kappwiz; KAppWizard is intended to create full-functional application projects that are ready-to-run by using GNU standard tools and, for GUI GUI-programs, taking advantage of the KDE KDE and Qt libraries. By specifying only the information that is required as a minimum, users are able to start working on a new project within seconds. Calling kappwiz; KAppWizard should be the first step to be to creating a new application with KDevelop. + + kappwiz; KAppWizard provides you a so called application skeleton, with all needed C++ source code files for a running application. After you have specified a project-name and set the needed preferences, your new project will be generated and you have a complete application that already contains a lot of functionality (for KDE and Qt projects), without you even having to type one line of C++ code yourself. + When specifying the complete set of options the program generator offers, your application already contains: + + + an SDI-Interface (for working with one document per application window), based on the document-view-controller model + + + Menus and dialogs for opening and saving files, as well as printing printing dialogs + + + a tool-bar and status-bar already providing complete functionality + + + a help-system, containing an SGML SGML-based user manual and status-bar help + + + a complete HTML HTML based API API (application programming interface) documentation for the current state of the project + + + an installation routine though make + + + + The kappwiz; KAppWizard is available under the "Project" menu entry "New...". + + + + Class-tools + + The term "Class-tools" describes a variety of functions that are available for the developer to work on a project not only by an object-oriented language, but using the sources in an object-oriented way. Working with classes classes instead of having to watch for files offers a very flexible way to extend a project and lets the user concentrate on the objects the project contains. + The tools that KDevelop offers are a Class-generator and a Class Browser, each one providing a lot of automated functionality. + + + Creating a new class with the Class-generator + + After generating a project with the kappwiz;, KAppWizard your work as a developer would be to add a set of classes classes that match the design of the application. The typical process without using KDevelop, would be to create a new header and source file, add them manually to the appropriate Makefile.am, Makefile.am and to start writing the new class classes declaration declaration and implementationimplementation. + To simplify the whole process, the Class-generator lets you do this by only specifying the new class by its name, inherited class, and inheritance attribute, and any further information such as class documentation by it's purpose for the project. Additionally, you can change the filenames that are preset by the generator, and if the class should be Qt-signal/slot enabled by default. + The rest of the work is done automatically. You don't have to take care of Makefile.am Makefile.am files and the class itself. A new make invocation is enough to include the new class in the compilation process. + As the Class Browser updates itself after the addition of a class, the declaration declaration and implementation implementation are available at once, and you can start working on the extension of the class. The Class-generator is invoked by the "Project" menu, entry "New ClassNew Class". + + + + The Class Browser + + The Class Browser displays all types of objects and functions of your project, in a tree left of the editing windows. A class parser scans all files for methods and classes, classes and makes them available as graphical symbols. Further, context-menus offer a specialized functionality to work with the sources, by focusing on the classes classes and functions. + Selecting a class will result in opening the file that contains the declaration declaration; on methods and functions this will +show you the implementation implementation. For a full description, see The Class Browser + + + + + + + The Development Process + + The development of a new application with KDevelop can generally be divided into two major steps: first, you have to generate a program skeleton with kappwiz; KAppWizard, then the "rest" of the development has to be done using KDevelop's features, which only requires your abilities as a programmer. To describe the development process, we assume you want to create a Qt/KDE KDE application, which implies using most of KDevelop's features for working with these types of project, so you have a general "HOW-TO". + + + Creating a Program Skeleton + + To start creating your application, you normally would call the kappwiz;KAppWizard, enter the project name, and generate the program. The wizard automatically creates a project file for the application and inserts the KDevelop areas into the Makefile.aMakefile.am's, which will be used later when extending the application. The project file is the file you load to open the project in later sessions. + You call kappwiz; KAppWizard with the "Project" menu entry "New...". When the wizard appears, you first specify the project type on the first page. Selecting "Next >>" brings you to the next page, where you insert the project name, version, directory, and your personal information. Page 3 offers more detailed options. Pages 4 and 5 allow the editing of file headers for header and implementation implementation files that are inserted automatically according to your selection. If you already have file headers you want to use, you can choose those files as well. The last page contains an output output window and an error message window. + When selecting "Create", your application will be generated and the actions that are executed can be seen in the output output window. If "READY" appears in the output output window, the kappwiz; KAppWizard is finished, and you can select "Exit" to return to the Programming Environment. To build the binary, choose "Make" from the "Build" menu, or choose the corresponding button in the tool-bar. You can also test the functions already present, by choosing "Execute" from the "Build" menu. + + + + Developing an Application + + This section describes the development phase of applications with KDevelop and the dialog editor dialog editor, and all work can be done within the IDE. + The development steps are generally to edit the source files, the compilation of the project sources, followed by the Linker Linker process binding all object files to the final binary. Then errors errors have to be located which either prevented a compilation or linking, or are semantical bugs that can be found by a debugging debugging session. Finally, the documentation has to be extended and translations have to be added. But as all those steps can mix which each other, it is not that easy to describe a general way how to develop your own application. + Typically, the procedure would be to first create all visible parts of the project such as the main view, and the dialogs for configuring options, then generate the source code and implement all needed connections that remain, like changing the menu-bar and tool-bars, adding status-bar help for new menu entries and filling the new member functions with the objects that display your dialogs. Then you would compile your application and test it's capabilities, fix errors errors and test it again. + The following sections describe how this would be done; for your particular application you may choose another way. KDevelop leaves you enough flexibility to decide what to do at what time. + + + User Interfaces + + The User Interface of an application is what the user sees, and what he uses to interact with the program. A program generally has a menu-bar, tool-bars, and a status-bar, as well as a main view which could be for example a text input window for an editor. + kappwiz; KAppWizard generated applications already contain a complex functionality in graphical interfaces; the frame structure takes care of standard elements such as bars and buttons. When developing your application, you have to extend the given structure to give the program the user interaction capability you want to provide. + One part of the work is the design of dialogs e.g., for changing values like the brush width in a paint application. This can be done easily with the dialog editor dialog editor inside KDevelop. Now, how do you create those good-looking dialogs? As the Qt-library Qt-library is a GUI GUI toolkit, it provides a base set of so-called "widgetswidgets" such as labels displaying plain text, line-edits for text input, and buttons for navigation and selection commands. Besides these "low-level" parts of user interfaces, standard dialogs are provided, and are ready to use, such as printing printing dialogs. + The KDE-libraries KDE-libraries are based on the Qt-library and contain replacements for certain dialogs as well as additional widgets widgets that can be used in your application. + So, when you start designing your application's behavior towards the user, you should make yourself comfortable with the widgets widgets provided with Qt and KDE KDE. The online-documentation of Qt offers screen-shots for most of them, so you should have a look there first. Then we advise to have a closer look at the KDE-UI library, offering other widgets widgets. Libraries like the KHTML HTML library contains very specialized widgets widgets that a lot of programs make use of. It just simplifies application design, using the predefined dialogs provided with Qt. + For your own dialogs, those low-level widgets widgets are the one you need. A dialog merely consists of a collection of different widgetswidgets, combined together to build the interface, and is technically programmed by C++ code, in a class that is derived from QWidgetQWidget, or a more specialized dialog class that inherits QWidgetQWidget. The program using the widget, therefore needs an object of the widget's class. This is almost all you have to understand how dialogs or views are used. + The dialog editor dialog editor of KDevelop now offers a nice, simple way to construct dialogs and user interfaces visually, instead of you having to combine dialogs with pure C++ code, the hard way to create interfaces. Switch to the dialog editor dialog editor by choosing the appropriate entry in the "View" menu (or by using the tool-bar button). You will see that KDevelop's face has changed but the menubar and the toolbar are very similar. This makes it very easy to switch back and forth between the two working modes, and you will feel comfortable in both after some time. + In the dialog editor you can construct your views and dialogs as you like, and set all available preferences for the items the view will contain. When you're finished, select "Generate Sources" from the "Build" menu. The dialog editor dialog editor and project management will take care of the rest. You can test if everything went OK by selecting Make or Execute from the "Build" menu. This will build your application, including your new sources. Don't expect that dialogs are immediately usable, this is a matter of implementationimplementation, as is the usual way a developer works. Don't worry, implementation isn't too difficult either. + For more information about creating dialogs, see The Dialog Editor. Examples and guidelines can also be found in The KDevelop Programming Handbook. + + + + Binding New Elements + + After you have created your user interfaces and generated the sources, you are ready to make your application use them as objects. As described above, a usual GUIGUI-based program contains among other things tool-bars and the main view. In addition, the main view interacts with the bars, which are part of the main application class, and it interacts with the document object it is connected to. + In terms of object-oriented design, you would describe the given architecture as the "Document-View-Controller" model. This model describes the basic functions for objects in an application, regarding their role within the program. The Controller represents the one coordinating the main application, and provides user interaction through a menubar, toolbars, and a statusbar. The Document class takes the task of representing a document the user works with. Therefore, a document class should do all actions like loading files, and saving them again. + The view now is in the center of the application window, showing the user a part of the document visually, and providing all functions to manipulate the data by the user. As the bars and toolbars are already present, your task is to create the main view and additional dialogs, through which the user can change settings, and access additional functions. + To build your main-view, the generated source code for your application already contains a class in the form of <YourApplication>View which inherits the QWidgetQWidget class. This is the minimal class that handles visual interfaces in Qt and therefore in KDE KDE as well. + In general, there are three ways to extend the given class: + + Remove the document-view structure and use one of the predefined "big" widgets widgets already containing a lot of functionality; just remove the View-class and replace the view-object by another. + + Change the inheritance of the View-class. Change the inheritance to e.g. QMultiLineEdit and your application would be an editor. + + If your main view will consist of several separated parts, create the widgets widgets and the classes classes you need with the dialog editor,dialog editor and create objects of these classes classes in the view-class constructors, that in combination, will build the main view. + + + For dialogs, things are a bit different. The usual way to call a dialog is through a menu-bar entry or a tool-bar icon. After you have constructed your dialog, and generated the sources, the class is available for creating an object that will be the dialog. So you first have to look for a suitable place in the menu-bar to add an entry which will open the dialog when selected by the user. If the already given menus do not match your needs, create a new pop-up menu just like the others, and insert in it your entry and the slot you want to call when the menu-item is selected. Then implement the slot by creating an instance of the dialog class, and call the dialog with the member functions member functions given by the base class. + You must also specify an ID for the menu-entry. The frame applications have all the IDs already issued collected in a file called resource.h, so you have only to add the ID and give it a new number, then you're done. Additionally you could construct another tool-bar icon and add the status-help message. Your application now offers a new functionality which is visible to the user. +Now you must add the implementation implementation of methods that your dialog will be operating with to manipulate any values. Finally, call your make-tool or "Execute" and the changed files will be recompiled; the result of your changes can then be tested immediately. + + + + The Complete Development Process + + Above, we discussed the usual way to start working on a new application using KDevelop and how to extend the user interface. These are the standard steps where the IDE helps you, but KDevelop does more than providing tools for creating applications and their visual components. The following gives a short description of the main functionality that is offered for enhancing application development. + + + Sourcecode Management + + The KDevelop IDE provides a lot of methods for programmers to achieve their goals within the shortest time. As described above, the kappwiz; KAppWizard and the dialog editor dialog editor shorten the time you would usually need to get to the same result manually. But this didn't cover the further work a programmer has to do usually: working on the implementation implementation of his application to provide a proper execution for the end-user. + Why is KDevelop the IDE you would want to use as a coding environment, including using it to create even non-GUI GUI applications? + The IDE keeps track of your project in general; that means you don't have to take care of saving changes, the MakefileMakefile generation and so on. This is full project-management, and KDevelop plays out all it's power here, in any case of C++ application development. It is easy to understand, after taking away the management from the programmer, he is able to concentrate more on working out the sourcecode. + On the other hand, the code is usually spread over many different files across the project, so you can separate certain parts. This could mean working the hard way: being the developer, you still would have to struggle with creating these files and writing standard contents, like file headers containing the date and the author's name, or things like license terms for the code. This requires that you remember where your functions, class declarationdeclarations, and implementationimplementations are in the project. + KDevelop contains the "Class-tools," a variety of actions that allow fast work and move the developer's focus from files, to objects: classes,classes structures, and methods. + The class-generator lets you easily create a new class, including inheritance, attributes, attributes and documentation. + For object-oriented work, the Class Browser brings you to the location of your objects. It doesn't matter any more where the code actually is. The Browser scans all sources automatically and rebuilds itself after additions to keep up with your work and enables you to access the new code directly. Through context-menus, the browser offers even more functionality, such as bringing you to the implementation, implementation or to the declaration declaration of member functions member functions. The addition of members are done graphically, in dialogs. No need to search for the file, and then the place you would have to add your entries. + Finally, you can get an even more specialized view of your project's classes classes through the Class-tool dialog, which provides trees that show the usage, contents, and inheritance of classes classes and their objects. For more detailed information, see The Class Browser. + + + + Building and Executing your Application + + The KDevelop IDE is specially designed to take away all those tasks that you have to do periodically like building and executing your program as well as locating errors errors in the sourcecode. + You start the build-process by: + + + clicking on the symbols "Build" or "Rebuild All" in the tool-bar + + + or selecting BuildRebuild All from the menu. + + + To execute your application, choose + + + the symbol "Execute" or "Debug" (starting kdbg; KDbg with your program) from the tool-bar + + + + + BuildExecute + or + + BuildDebug from the menu. + + + BuildExecute with Arguments to start your application with additional arguments + + + For more information about the build-process, see Projects. + + + + Searching For Program Errors + + Errors mayerrors occur either during the build-process (which are detected by the Compiler Compiler and are called syntactical errors errors because they result from a wrong syntax of the sources), or during the execution of the application. Those errors have to be found and removed by the programmer. To locate errorserrors, the developer needs the information as to what exactly caused its occurrence. + As mentioned, the Compiler Compiler is able to detect syntax errors errors itself, resulting in an error message that the executable can't be built. Note that this can also happen from the Linker Linker when it detects "unresolved symbols"; see Linker Options). + As the compiler gives as detailed as possible a description of the error, the error can be found and removed. During the build-process, you will see the output output window pop up showing you what your make-tool and the Compiler Compiler has to say. In case of errors errors or warnings warnings, just press the mouse button over the error line and the editor will open the affected file and sets the cursor to the error line. This can also be done by the entries in the "View"menu, "Next Error" and "Previous Error" or by the appropriate keyboard shortcuts shortcuts. You will find that this is very functional and saves a lot of time to get to the error, although to remove the cause, your knowledge as a programmer is asked. + Runtime Errors, which occur during execution and will mostly result in a segmentation fault, are sometimes hard to find. Therefore, you can enable the Compiler Compiler to add information within the binary to watch the execution by the sourcecode. A debugger is a program that lets you do this by starting the application and letting you set breakpoints in the code, where the execution stops, so you can control critical implementationimplementations and by this detect at least the line that caused the error. Finding the real cause is another task, it depends on the programmer to locate this. + The gdb is a debugger that is provided with the GNU Compiler Compiler and programs like ddd or kdbg; KDbg are front-ends that allow easier use. KDevelop uses kdbg; KDbg and lets you invoke the debugging debugging process by the commands "Debug" in the "Build"menu or by the "Debug" icon in the tool-bar. For more information about debugging debugging applications, see Projects and The KDevelop Programming Handbook. + + + + + + + Additional Information + + The topics addressed within this chapter are described in more detail within the documentation provided with the KDevelop IDE and in the following other documentation: + + + + The KDevelop Programming Handbook, covering a complete introduction into GUI GUI application design and programming with the Qt and KDE KDE libraries. + + + This handbook, sections Overview to Projects, describing all available functions within KDevelop. + + + This handbook, section The Dialog Editor, addressing the use of the dialog editor dialog editor to create your own widgets. widgets + + + The Online-Reference Reference Documentation to the Qt-library Qt-library, which covers examples of using the Qt GUIGUI-toolkit, as well as a class reference and screenshots for the most important ready-to-use widgets widgets included. + + + The KDE-Library Class-Reference Reference, generated automatically by KDevelop from the KDE-Library sources, containing descriptions for all classes classes and widgets widgets including example code for their use, + + + And on the Internet, see: + + + http://www.troll.no/ for information about Qt and additional third-party widgets widgets + + + http://www.kde.org/ for information about the KDE project and developer guidelines + + + http://developer.kde.org/ for additional references to KDE application development + + + on the KDevelop home page http://www.kdevelop.org/ + + + + + + + + + + Overview + + Looking at KDevelop, the user interface can be described by it's logical separation: the main window, the treeview and the output output window, surrounded by the menubar, toolbars and the statusbar. This section describes the purpose of each part of the interface, starting with the windows, followed by the bars and the functions they provide. + + + Main Window + + The main window consists of four tabs, of which the left two are for editing purposes. First comes the Header/Resource window for headers and any other text files, e.g., the documentation SGMLSGML's. Next is the C/C++ window for sourcecodes. These are followed by the Documentation window displaying documentation in HTML HTMLformat. Finally there is the Tools Tools window for external programs like KIconEdit KIconEditand kdbg;, KDbg which are embedded into the IDE. + Any Tool that is registered, can be accessed via the "Tools"Tools menu. The registration of third-party programs can easily be done in a configuration dialog configuration dialog (see General Configuration). + For a description of the Editor windows functionality, see chapter Working with the Editor, and for the Helpbrowser Helpbrowser, you should look at section Using the Documentation Browser. + + + + The Class Browser and File-viewers + + + The Class Viewer <indexterm><primary>Class Viewer</primary></indexterm> + + The Class Viewer Class Viewer (CVCV) shows the classes classes of your project, as well as global functions and variablesvariable. + Opening the tree will show all member functions member functions and members, with symbols for attributes attributes (private, protected and public, signals, and slots,) so you can see the properties of members visually without switching to the header file. + Selecting the class name will open the headerfile containing the class, and set the cursor to the class declaration declaration beginning. + Selecting member functions member functions will open the implementation implementation file, and place the cursor at the function header. For elements, KDevelop will look for the header file and place the cursor at the line the element is declared. + The class-viewer classviewer also provides pop-up-menus that offer more specified options. See The Class Browser for more detailed information. + + + + The Logical File Viewer + + The Logical File Viewer (LFVLFV) allows sorting files, by filters and in groups. + Individual groups can be added by the properties entry of the "Project" menu or by a right click on the tree items. This allows a more specialized search for files that you want to access quickly, in the first place only showing project-included files. According to their Mime-type, the files will be opened when selected. You will like the LFV LFV for things like selecting pixmaps. pixmaps This will start KIconEdit KIconEdit (if installed on the system,) in the Tools Toolswindow, and open the chosen picture. + + + + The Real File Viewer + + The Real File Viewer (RFVRFV) shows the project directory tree with all files, so you can edit non-project files, project files or files hidden by the LFV LFV e.g.,configure.in and MakefileMakefiles. Pop-up menus also provide functions like adding or removing files to the current project. + + + + The Documentation Tree + + The Documentation Tree (DOCDOC) displays all available HTML HTMLbased documentation that is configured, as books. Selecting a book will open the first page in the Browser window. Also, a pop-up menu provides personal configuration for additional HTML HTMLbased documentation packages. + + + + + Output window + + The Output window is separated further into a messages window, a stdin/stdout window and a stderr window, for the following necessities: + + + Messages Window + Displays all outputoutput of the CompilerCompiler. Clicking on error messages will change the edit widget to set the cursor to the line where the Compiler Compiler found an error. + + + + stdout Window + Display for terminal based applications that send messages to the standard outputoutput of the computer. Note that Terminal applications are now started in an external console window. + + + + stderr window + Displays all the error messages your program produces. This is useful for testing purposes. The Output window is programmed to show up each time an external process is called, such as make or a terminal application. + + + + + + + Menu-bar <indexterm><primary>Menu-bar</primary></indexterm> Commands + + + File Management and Printing + + This section covers the functions that KDevelop provides about files, accessed via the File menu in the menu-bar or by the corresponding icons in the toolbar: +"File"-menu + + + + + + + CtrlN + + File + New + + + Opens the "New FileNew File" dialog, allowing the creation of a new file. The file can be created using different templates and the filename must be given, as well as the path where the file will be created. + + + + + + CtrlO + FileOpen + + + + displays the "Open File..." dialog and lets you choose a file to be opened. + + + + + + CtrlW + FileClose + + + + Closes the file in the top editing window + + + + + + CtrlS + FileSave + + + Saves the file open in the top editing window. If the file has never been saved, the "Save File As..." dialog will be opened, to let you choose a path and filename for the file. + + + + + + CtrlA + FileSave As... + + + Opens the "Save File As..." dialog to let you save the current file under a new filename + + + + + + Ctrll + FileSave All + + + + Saves all changed files. + + + + + + CtrlP + FilePrint... + + + Opens the "Print File" dialog where you can set various options for printing, using either enscript or lpr. + + + + + + + + CtrlQ + FileQuit + + + Exits KDevelop. If files have been changed, you will be asked if you want to save these files. + + + + + + + + Editing Files + + "Edit" menu +Here, the "Edit" menu and the corresponding icons in the tool-bar are covered. The editing functions are also available via a context-menu in the editoreditor. + + + + + + CtrlZ + EditUndo + + + + Reverts the last editing operation + + + + + + CtrlX + EditRedo + + + + Lets you do the last undone step again. + + + + + + + + Ctrl + X + + + Edit + Cut + + + + + Cuts out the selection and copies it to the system clipboard. + + + + + + + + + + Ctrl + C + + + Edit + Copy + + + copies a selection to the system clipboard. This also includes selections made in the documentation browser + + + + + + CtrlV + EditPaste + + + Inserts the clipboard contents at the current cursor position + + + + + + CtrlI + EditIndent + + + + Moves a selection to the right + + + + + + CtrlU + EditUnIndent + + + + Moves a selection to the left. + + + + + + CtrlInsert + EditInsert File.. + + + + Lets you select a file and the inserts that files contents at the current cursor position. + + + + + + CtrlF + EditSearch... + + + + Opens the Search dialog that looks for an expression in the current file. To search across several files, "Search in Files..." should be used. + + + + + + F3 + EditRepeat Search + + + + Repeats the last search for an expression. This also works for searches made across documentation, where more than one hit was found in the same page. The next hit will be displayed by choosing Repeat Search or pressing F3. + + + + + + CtrlR + EditReplace... + + + + Opens the "Search and Replace" dialog, which allows the search for an expression, and replaces the found text with a new expression. + + + + + + CtrlAltF + EditSearch in Files... + + + + + Displays the "Search in files..." dialog, that works grep grep on whole directories with wildcards. Search results are displayed with a list of the filenames, line and expression. Choosing an entry will open that file and the cursor is set to the line of the search result. search result + + + + + + CtrlA + EditSelect All + + + + Selects the whole text of the file currently open in the editing window + + + + + + EditDeselect All + + + + Deselects the whole text of the current file. This is often used for multiple selections so you don't have to find and deselect each one separately. + + + + + + EditInvert Selection + + + + Inverts the selection. Text previously selected becomes deselected, and text which was not selected becomes selected. + + + + + + + View Configuration + + "View"-menu"The View-Menu covers closing and opening functions for windows, and commands to enable/disable the tool- and status-bar, as well as to jump to errors errors in the code. + + + + + CtrlG + ViewGoto Line + + + + Opens a "Go to Line..." dialog that lets you insert a line-number to show in the actual file. The last line-number is remembered and marked, so you can either jump to that line again directly, or enter a new line number that you want to see. + + + + + + F4 + ViewNext Error + + + + Jumps to the next error KDevelop detects from the outputoutput. The output output message of Make or other tools should give you a description of the problem is, so you can correct the error. + + + + + + ShiftF4 + ViewPrevious Error + + + Jumps to the previous reported error + + + + + + CtrlD + ViewDialog Editor + + + + Switches to the dialog editor. dialog editor + + + + + + CtrlT + ViewTree-View + + + + Enables or disables the Tree window on the left side of the main view containing the Class Browser, LFVLFV, RFVRFV and DOCDOC-tree. + + + + + + CtrlB + ViewOutput-View + + + + Enables or disables the Output window on the bottom of the main view. + + + + + + ViewTool-bar + + + + Enables or disables the tool-bar. + + + + + + ViewBrowser-Tool-bar + + + + Enables or disables the browser tool-bar, containing the back, forward, and search buttons for the browser. + + + + + + ViewRefresh + + + + Rescans all files to rebuild the Class Browser. The scanning progress is shown in the status-bar progress display. + + + + + + + Creating and Maintaining Projects + + "Project"menuThis section describes functions that are available in the "Project" menu and cover the creation and maintenance of projects. + + + + + + ProjectNew... + + + + Starts the kappwiz;, and allows you to create a new project by choosing application type, name, version, and other options. + + + + + + ProjectOpen + + + + Shows the "Open Project" dialog, where you can choose a KDevelop project file to be opened. After selection, the project will be loaded. + + + + + + ProjectOpen Recent Project + + + + Contains a sub-menu with the last 5 opened projects. You can open a project more easily using the recent project menu. + + + + + + ProjectClose + + + + Closes the current project. This is mostly done automatically when you quit KDevelop, invoke the kappwiz; KAppWizardor open another project. + + + + + + ProjectNew Class + + + + Starts the class generator to create a new class that will be added to the current project. The class generator lets you specify classname, inheritance and filenames for the new class. + + + + + + ProjectAdd Existing File(s) + + + + Opens a selection dialog where you can choose the files that you want to add to the current project, and the path where they will be copied to. If you choose a destination that was currently not included in the project, for example, creating a new subdirectory, KDevelop will copy the files to add to the new subdirectory, and create a new Makefile.amMakefile.am. After the copy process, your project will be rebuilt by automakeautomake and autoconfautoconf to include the new subdirectory into the make-process. + + + + + + ProjectAdd new translation file + + + + Opens a language selection dialog that lets you choose the translation file language that will be added to the project. This is mostly used by translators, who can easily add their language to the project and work on the translation without having to care about the Makefile.amMakefile.am's. + + + + + + ShiftF7 + ProjectFile Properties + + + + Opens the File Properties dialog showing a copy of the LFV LFV and the project file options. Here, the properties for your files have to be set, like installation path, and file type. + + + + + + ProjectMake messages and merge + + + + This is intended to create the messages file for your project. The message file is the one containing all strings that are set up in the sources for internationalization, and is used by translators to create the .po file for their target language. + + + + + + ProjectMake APIAPI-Doc + + + + Calls KDoc KDoc on your header files, and generates a HTML HTML output output with the documentation of your project classesclasses. + + + + + + ProjectMake User Manual + + + + Runs KSgml2Html KSgml2Html on your manual SGML SGML file, creating an HTML HTML user manual. If KSgml2Html KSgml2Html is not installed, sgml2html will be used to do this. + + + + + + ProjectMake Distributiontar.gz + + + + Creates a distribution file of your current project in the project directory that is ready to ship to the end-users containing the sources of your project. The end-user has to run tar zxvf yourproject.tar.gz to unpack it to a source directory, and then use the standard commands ./configure,make and make install. + + + + + + F7 + ProjectOptions + + + + Opens the Project Options dialog that lets you change various settings for your project. This could be a new version number, or perhaps to set the compiler options compiler options to for a release with optimization. + + + + + + + Building Projects + + "Build" menu This section describes the Build menu that contains all actions to be done with make or actions like rebuilding the project's online help or API API documentation. + + + + + + CtrlF8 + BuildCompile file... + + + + Active, if the top editing window is the C++ Window. This only compiles the current implementation implementation file, and lets you save time in case you suspect errorserrors. + + + + + + F8 + BuildMake + + + + Invokes the make-command make-command on your project, and builds the target. + + + + + + BuildClean Rebuild All + + + + Cleans the project directory from all make-created files and rebuilds the target. + + + + + + F10 + BuildStop Build + + + + Stops the current process. + + + + + + F9 + BuildExecute + + + + Executes your target, after building the program with make. + + + + + + AltF9 + BuildExecute with Arguments + + + + Executes your target with arguments. First, a dialog appears to let you specify the execution arguments (which are saved in the project for the next session), then your application uses the entered commandline. Note that your application program is started from the project directory directly. + + + + + + BuildDebug... + + + + Opens kdbg; KDbg in the ToolsTools-Window to debug your application. In this case, kdbg; KDbg automatically opens the file containing the main() function and executes your application. + + + + + + BuildDistClean + + + + Removes all files that are generated by the project like object files etc. Distclean has to be done before distributing your project, so the distribution file doesn't contain any platform-specific files like those that were generated by your CompilerCompiler. + + + + + + BuildAutoconf and automake + + + + Calls Make on the file Makefile.distMakefile.dist, located in your main project directory. Makefile.dist Makefile.dist contains all the commands for automake automake, autoconf autoconf etc., to build your project. If you added files manually or changed macros yourself, you should run Autoconf afterwards, followed by Configure to recreate all MakefileMakefiles. + + + + + + BuildConfigure + + + + Executes the configure-script generated by autoconf autoconf. If this command cannot be executed, run Autoconf and then run Configure again. + + + + + + + Calling Tools <indexterm><primary>Tools</primary></indexterm> + + "Tools"-menuThe "Tools" Tools menu contains by default the entries for the following programs if installed: kdbg; KDbg, KIconEdit KIconEdit and KTranslator KTranslator. These are +checked by the KDevelop installation program and inserted in the given order into the menu. Invoking a tool will open the "Tools" window and start the selected program inside this window. The "Tools" Tools menu can be edited by the "Tools" Tools-entry in the "Options" menu; see Configuring the Tools Menu. + + + + Changing <application><application>KDevelop</application>'s</application> settings + + "Options"-menuThe "Options" menu contains all entries for invoking configuration dialogs, configuration dialogs with which you can change KDevelop's default settings. + Major settings like those for the editor editor or printing printing have their own entries; general setting of KDevelop's behavior can be made with the KDevelop Setup dialog. + + + + + + OptionsEditor + + + + Allows the configuration of the editors behavior such as word-breaking, selections, etc. + + + + + + OptionsEditor Colors... + + + Here, you can set the color-configuration of the editor editor e.g. the background and text colors. + + + + + + OptionsEditor Defaults... + + + + This sets the default display, e.g., the default font and font size for the editor editor + + + + + + OptionsSyntax-Highlighting + + + + This dialog lets you configure the fonts and colors for the highlighting of several programming languages, including HTMLHTML. + + + + + + OptionsDocumentation Browser + + + + In this tab-dialog, you can set the fonts, sizes and colors for the internal Helpbrowser Helpbrowser. + + + + + + OptionsConfigure Printer... + + + + Contains the entries for the printer configuration dialog configuration dialogs. + + + + + + OptionsConfigure Printer...enscript + + + + Configures the printer for use with enscript enscript. See Printing for more information. + + + + + + OptionsTools + + + + Opens the Configure Tools Tools dialog. Here, you can configure the "ToolsTools" menu by adding or removing programs that will be started in the Tools Tools-window. + + + + + + OptionsKDevelop Setup + + + + Opens the KDevelop Setup dialog. The first tab configures general settings, followed by the key-configuration and the Documentation settings. The Documentation settings also include the generation of a new set of HTML HTML-library documentation, and the rebuilding of the search index search index for the Helpbrowser Helpbrowser. + + + + + + + The Window Menu + + "Window"-menuThe Window menu contains a list with all currently open files. This allows a quick switch between files you're currently working on. + + + + Managing Bookmarks + + "Bookmarks"-menu The Bookmarks menu is intended for adding and removing bookmarks bookmarks you want to set in the current editing file. As KDevelop uses two editing windows, each one configures it's bookmarks bookmarks separately. + + + + + + BookmarksSet Bookmark + + + + Opens a context-menu with up to nine configurable bookmarksbookmarks. This allows setting a bookmark to a certain entry in the bookmarks bookmarks menu by logical reasons. + + + + + + CtrlAltA + BookmarksAdd Bookmark + + + + Adds the line of the current cursor position to the bookmarks bookmarks menu as a bookmark. Mind that this could overwrite a bookmark set with the Set Bookmark-option. If the browser is opened, a bookmark will be added to the Browser-Window bookmarks bookmarks menu. + + + + + + CtrlAltC + BookmarksClear Bookmarks + + + + Clears the bookmark-entries for the top editing window or the browser, e.g., if +the Header-Window is visible and you call Clear Bookmarks, the entries for the Header-Window are deleted. + + + + + + + + BookmarksHeader-Window + + + + Contains the bookmark-list for the Header-Window. Selecting a bookmark will set the cursor to the selected bookmarks bookmarks' line. Mind that bookmarks bookmarks are specifically assigned to the file they are set in, so if you change to another file, the bookmarks bookmarks are not deleted, but choosing a bookmark won't automatically change to the file they are assigned to as well. + + + + + + BookmarksC/C++ Window + + + + Contains the bookmark-list for the C/C++-Window. The preferences are the same as for the Header-Window. + + + + + + BookmarksBrowser Window + + + + Contains the browser bookmarks bookmarks. Selecting a bookmark will open the browser with the selected page. + + + + + + + Online Help <indexterm><primary>Online Help</primary></indexterm> + + Help-menu The Help menu contains entries for navigating in the Helpbrowser, Helpbrowser as well as most recently used entries for library and online-documentation. Accessing additional online-documentation can be achieved with the DOCDOC-tree in the treeview, which is automatically opened (if Autoswitch is enabled) when changing to the Documentation Browser window. + + + + + + AltLeft Arrow + HelpBack + + + + Opens the page opened before the currently displayed one. + + + + + + AltRight Arrow + HelpForward + + + + Opens the next page of the browser-history, available after a "Back" action. + + + + + + F2 + HelpSearch Marked Text + + + + Scans the search-index for text currently marked in the editing windows or the browser-window. After the search, a result page is shown which lets you select the help-page to switch to. After choosing a page, the browser will highlight the found entry for the expression the search was invoked for. With the F3 key the next search result search result on the same page +will be displayed, if more than one hit was reported for the search on one page. + + + + + + HelpSearch for Help on... + + + + Opens the "Search for Help on..." dialog that lets you search for a specific expression you want help on. + + + + + + F1 + HelpThe User Manual to KDevelop + + + + Opens the User's Manual to KDevelop index page (this handbook). + + + + + + HelpThe KDevelop Programming Handbook + + + + Opens the KDevelop Programming Handbook index page. This handbook contains a complete programming guide to KDE development. + + + + + + HelpKDE Application Tutorials + + + + Changes to the index page of the KDE Application Tutorials handbook. This handbook explains how to build the Qt tutorial applications and introduces you to KDE programming by developing an example application. + + + + + + HelpThe KDE Library Reference Guide + + + + Changes to the index page of the KDE Library Reference Guide. This handbook contains detailed information about using the KDE/Qt libraries, separated on topics such as event handling. + + + + + + HelpThe KDE 2 Developers Guide + + + + Changes to the index page of the KDE 2 Developers Guide. This Handbook contains information about the most recent KDE development and how to prepare your application to be KDE 2-ready. + + + + + + HelpC/C++ Reference + + + + Displays the language reference index page. If the reference is not installed, an error page shows you how to get the reference and how to install it correctly. + + + + + + HelpTip of the Day + + + + Opens the Tip of the Day dialog to inform you about KDevelop's features. + + + + + + HelpKDevelop Home page + + + + Opens the KDevelop Home page in the browser window if Internet access is provided. + + + + + + HelpBug Report + + + + Opens the KDevelop Bug Report dialog, where you can send a bug-report directly to the KDevelop Team by email. See Bug Reporting + + + + + + HelpProject-API-Doc + + + + Changes to the project's class-documentation index file.KDocAPI + + + + + + HelpProject-User-Manual + + + + Opens the User manual's index file of your current project. This can be used to review the HTML HTML-output output generated by KSgml2Html KSgml2Html + + + + + + HelpAbout KDevelop + + + + Shows the about box of KDevelop containing the version number, the authors' names and email-addresses, as well as reference to the licensing of KDevelop. + + + + + + + + + Toolbar <indexterm><primary>Toolbar</primary></indexterm> Items + + KDevelop provides quick access to a various set of commands through it's toolbars. These are the standard and the browser toolbar. In dialog editor dialog editor mode, only the standard toolbar is visible. Both can be en-/disabled through the according menu entries in the "View" menu, and can also be dragged out of the main window and placed on each side of the working area. + + + The Standard Toolbar <indexterm><primary>Toolbar</primary></indexterm> + + The standard toolbar provides quick access to the most recently used functions for file processing and editing, as well as those for building your application. + The buttons execute the following commands from left to right: "File"-menu"Edit"-menu"Project"-menu""Build"-menudebuggingTree-ViewOutput-Viewexecute target + + + + Open Project + Shows the open project dialog + + + + Open File + Shows the open file dialog and contains a delayed pop-up to fast select the current project header and source files. + + + + Save File + + Saves the currently opened file to disk + + + + Print File + + Opens the printer dialog + + + + (Separator) + + + + + + Undo + + Reverts the last action + + + + Redo + + Executes a reverted action again + + + + Cut + + Cuts out the current selection + + + + Copy + + Copies the current selection to the system clipboard + + + + Paste + + Pastes the current clipboard contents to the actual cursor position + + + + (Separator) + + + + + + Compile File Compile File + + Compiles the file currently visible in the source file window. In Dialog-editor mode this is replaced by the Generate Files button. + + + + Make + + Invokes make on the project + + + + Rebuild All + + Rebuilds the project + + + + Debug + + Opens kdbg; KDbg with the application binary for debugging debugging in the Tools Tools window + + + + Execute + + Runs the application target binary + + + + Stop + + Cancels the current process + + + + (Separator) + + + + + + Dialog-editor + + Switches to Dialog-editor mode. There, the button is replaced by a Sourcecode editor editor button + + + + Tree-View + + En/disables the treeview and works as a toggle button to display the current state + + + + Output-View + + En/disables the output output view and works as a toggle button to display the current state + + + + (Separator) + + + + + + What's this..? + + Help button - changes the cursor to a question arrow and lets you get information about GUI GUI components of KDevelop + + + + + + + The Browser Toolbar <indexterm><primary>Toolbar</primary></indexterm> + + The browser browser toolbar is another toolbar that provides a lot of useful commands for browsing files and the documentation documentation. + The toolbar contains:documentation browserHelp-menu" + + + + The Class Combo-box + Lets you select a class of the current project to browse to + + + + the Method Combo-box + Lets you select a method of the current class, and browses to the implementation of that method + + + + the Class Assistant button + On a single click, this will bring you to the declaration of the method currently selected. Also contains a delayed pop-up menu to access the Classtools, for adding Classes, Methods and Attributes, as well as the browsing commands + + + + Back + Browses back in the documentation browser documentation browser history; contains a delayed pop-up to select a certain page of the back history. + + + + Forward + Browses forward in the documentation browser documentation browser history; contains a delayed pop-up to select a certain page of the forward history. + + + + Stop +Stops the browser from loading a documentation file request + + + + Reload + Reloads the currently displayed page + + + + Home + Opens the KDevelop User Manual index page in the browser + + + + Search Marked Text + + Searches the documentation index for the selected text; works with the browser and the editor editor windows + + + + Search for Help on... + Opens the "Search for Help on..." dialog, to let you enter a keyword to search for in the documentation + + + + + + + + Keyboard Shortcuts + + This section handles the predefined as well as the standard values for configurable keyboard commands used in the KDevelop IDE. You should see section Changing Keyboard Shortcuts for a detailed explanation how to change assigned values to commands. + + + Shortcuts for Text Processing + + Keyboard ShortcutsShortcuts + + + Cursor Movements + + + + + + One letter to the left + Left Arrow + + + One letter to the right + Right Arrow + + + One word to the left + CtrlLeft Arrow + + + One word to the right + CtrlRight Arrow + + + One line upwards + Up Arrow + + + One line downwards + Down Arrow + + + To beginning of the line + Home + + + To end of line + End + + + One page up + Page Up + + + One page down + Page Down + + + To the beginning of the current file + CtrlPage Up + + + To the end of the current file + CtrlPage Down + + + + + + + +Text Selections + + + + + + One letter to the left + ShiftLeft Arrow + + + One letter to the right + ShiftRight Arrow + + + One word to the left + CtrlShiftLeft Arrow + + + One word to the right + CtrlShiftRight Arrow + + + One line upwards + CtrlUp + + + One line downwards + CtrlDown + + + To the beginning of the line + CtrlHome + + + One page up + ShiftPage Up + + + One page down + ShiftPage Down + + + To the beginning of the current file + CtrlShiftPage Down + + + To the end of the current file + CtrlShiftPage Up + + + + + + + +Inserting and Copying Text, Tabulators + + + + + En/Disable insert mode + Insert + + + Copy selection to the clipboard + CtrlC or CtrlInsert + + + Insert text from the clipboard +CtrlV or ShiftInsert + + + Delete current line + CtrlK + + + Insert line after current line + End then Enter + + + Insert line before current line + Home then Enter + + + Undo editing step + CtrlZ + + + Redo an undo step + CtrlY + + + Tabulator + Tab + + + + + + + Deleting Text + + + + + Delete letter left of cursor position + Backspace + + + Delete letter right of cursor position + Delete + + + Delete selected text + Select text, then Backspace + + + + + + + + Searching Text within the Editor <indexterm><primary>Editor</primary></indexterm> + + + + + + open "Goto Line..." dialog + CtrlG + + + Open "Find text" dialog + CtrlF + + + Repeat last search + F3 + + + Open Search and Replace dialog + CtrlR + + + Open Search in Files dialog (grep) + CtrlAltF + + + Search marked text with grep + ShiftF2 + + + Locate next error + F4 + + + Locate previous error + ShiftF4 + + + + + + + + Searching Text with the Documentation Browser + + + + + search selected editor text in documentation + F2 + + + search selected browser text in documentation + F2 + + + display next search hit on the same page + F3 + + + search selected browser text within project + ShiftF2 + + + + + + + +Browser Shortcuts + + + + + previous page + AltLeft Arrow + + + next page + AltRight Arrow + + + + + + + + Managing Bookmarks + + + + + + Add bookmark + CtrlAltA + + + Clear bookmark list + CtrlAltC + + + + + + + + + Shortcuts for Toolbar <indexterm><primary>Toolbar</primary></indexterm> Symbols + + + + + + Icon "Open File" + CtrlO + + + Icon "Save File" + CtrlS + + + Icon "Print File" + CtrlP + + + Icon "Undo + CtrlZ + + + Icon "Redo" + CtrlY + + + Icon "Cut" + CtrlX + + + Icon "Copy" + CtrlC + + + Icon "Paste" + CtrlV + + + Icon "Compile File" + CtrlF8 + + + Icon "Make" + F8 + + + Icon "Execute" + F9 + + + Icon "Execute with Arguments" + AltF9 + + + Icon "Dialog Editor" + CtrlD + + + Icon "Back" + AltLeft Arrow if browser is open + + + Icon "Forward" + AltRight Arrow if browser is open + + + Icon "Search marked text" + F2 + + + + + + + + Window Management + + To switch to a certain window, press Altplus the underlined letter in the window title, e.g. Tools Tools would be AltT + + + +Shortcuts to Compilation Processes + + + + + + Compile current source file + CtrlF8 + + + Build current project target + F8 + + + Execute target after Build process + CtrlF9 + + + Execute target with Arguments + AltF9 + + + Stop the current process + F10 + + + + + + + + + + The Help System + + Most of KDevelop's strength is accumulated in the Help System. It is also an example of how to extend your own KDE application with a complete set of help functionality. This is, in part, already realized in the template applications, so KDE/Qt application frameworksapplication framework generated with the kappwiz; KAppWizard already contain the basic functionality for status-bar help, and for documentation, which needs only to be extended by the programmer. + This section introduces the usage of the general help provided within the IDE, as well as showing the usage of the Helpbrowser Helpbrowser, which, with some intelligent use, will make it very easy to get the information you need for development. + + + The "What's this ?"-Button and Quickhelp <indexterm><primary>Quickhelp</primary></indexterm> + + Looking at KDevelop's top toolbar, you will see the "What's this?" button on the far right end. After selecting this button, the cursor will change to a pointer with a question mark on the right, the same as the button in the toolbar. You can now select any visible part of the KDevelop user interface and click on it. This will display a help-window giving you a short description of the function the item you clicked gives you, or what it can do for you. Included are the main view, the tree-views and the tool-bars, for which help is provided for very button. + After another mouse click or a keyboard input, the What's this? help window disappears and your cursor is set to the last active position. Note, if you place the mouse pointer over a button, it becomes raised, and after a short time, you will get a QuickTip window, describing the function the button represents in the menubar; this will disappear when you move the mouse pointer away. + For user interaction dialogs, Quickhelp Quickhelp provides your help windows with a short description of the selected item for which help was requested. These are accessed by a right button mouse click to the item, which pops up a context-menu that allows the selection of "Quick-Help". Selecting this will pop up the help window. This is always useful for dialogs where you can't see the action's purpose for as long, especially if you are not yet familiar with KDevelop. Note that most dialogs offer a Help-button which will show you the detailed context-help for that dialog's options, within the provided online-manual in the help-browser. + + + + The Statusbar <indexterm><primary>Statusbar</primary></indexterm> Help + + The statusbar of KDevelop offers many functions to inform you about the current activity state, as well as "status messages" offering a short description of commands. + + + Statusbar <indexterm><primary>Statusbar</primary></indexterm> Entries + + The Statusbar Statusbar contains: + + + a general message field, most left. This is used for help messages and displays the current activity. + + the progress-bar, indicating the progress for actions that require a comparatively long time to complete, such as saving files, and the scan-progress of the Class Browser. The progress-bar only appears when such processes are executed. + + an Insert/Overwrite indicator. It shows the editor editor mode for insert actions by INS for Insert mode and OVR for Overwrite mode. The mode can be changed by the Insert key on the keyboard. + + a line counter, displaying the current line in which the cursor is placed. + + a column counter, indicating the current column position of the cursor in a line. + + + + + + Help Messages + + The statusbar informs you about the action of menu entries, if you select a menu within the menu-bar and select an action, without executing it. If you press on a toolbar icon, without releasing the mouse-button, the help message for the button is displayed in the same way as for the menu entries. You can prevent the execution of the selected icon by moving the mouse-pointer away from the icon, still holding the mouse button pressed. When the cursor is off the icon, release the mouse button. + For actions that are currently executing, KDevelop displays the action. This includes processes running in the background such as saving files, as well as for dialogs. If the process has exited, such as a make invocation, the status-bar display changes back to "Ready" state. + When using the documentation browser documentation browser, the status-bar displays link urls for as long as the cursor is placed over an URL link in the browser window. In this manner, you can easily find out if the file is a local or a remote file which can only accessed by network connection. + The caption of the KDevelop Project Editor shows you the currently opened filename in the top window. This would be a HTML HTML file +for the documentation browser, documentation browser or a text file for the editing windows. Further, the Project name is displayed, so you have constant +control where you are and what you're currently working at. + + + + + Configuring the HTML <indexterm><primary>HTML</primary></indexterm> Browser + + The browser included in KDevelop is completely HTML HTMLbased. You can specify the usual options, such as background and the like. You can set all preferences by the "Documentation Browser" entry of the "Options" menu. This configuration dialog configuration dialog shows you two tabs; the first for setting the font preferences, the second for color selection. + + + Font Preferences + + The first option for the font display is the size. Available are small, medium and large. The best display for normal use is set to small by default. For the font selection you must specify a standard font for normal text as it appears in HTML HTML documents; the fixed font is the one used for displaying e.g., code within the HTML HTML file. + + + + Color Preferences + + The color preferences dialog allows configuration of background, normal text, URL Link and followed link color. The colored buttons on the right display the current settings and selecting a button will result in opening the "Select Color" dialog. There, you can specify the color either by choosing a System Color, a custom color, selecting the color in the multi-colored window, or by setting the values directly. The center contains a preview for the color selected. + + You may also specify if the browser should underline links, to easier detect them visually, and if you would like to use your own colors always independent of the page's preset ones. "Apply" will execute all changes, while "OK" will apply changes and close the dialog. "Cancel" leaves all settings untouched, and exits the configuration dialog. + + + + + Using the Documentation Browser + + The documentation browser documentation browser allows quick and easy access to all manuals and documentations that are provided with KDevelop or are generated automatically, including online-documentation for the KDE-libraries, KDE-libraries and your project documentation. Plus, the Documentation Tree in the tree-view lets you customize a special "Others" folder that contains all individually added documentation. + + + Requirements + + To make use of all features of the Helpbrowser Helpbrowser, you should have KDoc KDoc and glimpse glimpse installed. KDoc KDoc will generate all kind of online class-documentation for the KDE-libraries KDE-libraries during the setup setup process, but can also invoked by option in the KDevelop Setup. + For the generation of an API API (Application Programming Interface) Documentation for your project's classes classes, KDoc KDoc is also used and called by the Project menu, entry "Make API Doc" APIDoc". This will process all current header files of the project plus the addition of a cross-reference to the Qt and KDE-libraries KDE-libraries if those are available in the Helpbrowser Helpbrowser. + For the generation of the project handbooks, you should have KSgml2Html KSgml2Html (provided with the KDE-SDK KDE-SDK) and, as a minimum, SGML SGMLtools installed on your system. To extend and change your project's online-documentation, you have to edit the documentation file for your project by selecting it in the RFV RFV. After saving your changes, call "Make User-Manual" from the Projectmenu. In case SGML SGMLtools detect formatting errors errors, these will be displayed in the output output window, to allow you to find the error line directly. + The program "glimpseglimpse" is used to create a personal search-index for your documentation automatically. The index is generally built during the installation process, but can also be built with the KDevelop Setup dialog. For a description of the provided search functions see Using the Searchindex. + + + + Provided Documentation + + The KDevelop IDE comes with two sets of online-documentation, which can be accessed either via the "Help" menu or in the Doc-tree, in the Tree-View, in the KDevelop folder. + The first book provided is this online-handbook, containing all information you need regarding installation, configuration, available functionality, and introduction to application development. + The second book is The KDevelop Programming Handbook in it's first edition. The programming handbook covers most questions related to the creation and extension of projects that work with KDevelop. Through tutorials, the user gets an introduction to the rich facilities that applications created with the Qt- and/or KDE-libraries KDE-libraries have to offer, as well as given a guideline for ensuring KDE KDE compliance. These tutorials cover the same instructions given on the Internet site at http://developer.kde.org/. However, the programming handbook cannot replace any additional documentation available in printed or electronic form about the C++ programming language, nor documentation about the usage of the Qt-library. + The C/C++-Reference Reference used with KDevelop is currently only available on the KDevelop home-page at http://www.kdevelop.org/. In certain Linux distributions the reference may be included, see your distribution installation program index for more information. It can be installed easily by downloading and copying the sourcefile to the main KDE-directory ($KDEDIR). There, you must untar it as root with tar zxvf c_c++_reference.tar.gz. The reference will then be copied the documentation directory of KDevelop. To uninstall the reference documentation, you just have to delete the reference folder under ($KDEDIR)/share/doc/HTML/default/kdevelop/reference. + The Qt/KDE-libraries KDE-libraries documentation folder, allows direct access to the HTML HTMLonline documentation of your copy of the Qt-library. The path to the library documentation is usually automatically detected by the KDevelop installation program, but can be set manually in the KDevelop Setup dialog. All available documentation for the KDE-libraries KDE-libraries are listed in order of the library name, so if you would use classes classes of a certain library it is easy to determine the library type to be added to the Linker Linker settings in the project. Note that the whole KDE-Library documentation is only accessible when generated by KDoc, KDoc so this program, included in the KDE-SDK KDE-SDK, has to be installed before the documentation can be generated. As the installation program of KDevelop does this automatically, it should be installed before running the KDevelop Setup. If this is not the case, and the documentation cannot be built, you are able to create it afterwards at any time with the KDevelop Setup dialog. + The documentation tree also contains the "Others" folder, which is intended to contain all personally customized documentation as described below. Finally, the Doc-Tree allows access to the API API and the Manual for your current project. + + + + Adding Documentation to the Helpbrowser <indexterm><primary>Helpbrowser</primary></indexterm> + To customize your HelpbrowserHelpbrowser, open the Tree-View and select the "DOCDOC" Tab. You will see an opened tree containing four folders. The "Others" folder is, by default, empty. On a right mouse-button click over this folder, a context menu opens that has an entry "Add Entry". Select this to open the Add Entry dialog where you must enter two values: the upper one for the name that will be displayed for the documentation within the Doc-tree, and, below that, a file-entry line. Here, you enter the path and filename to the start page that will be opened by the selection of the entry later. You can enter the path and filename directly, or by selection of the pushbutton on the right to open a file chooser dialog. This allows a quick browsing on your system to the path for your start page. Mind that only HTML HTML documentation can be selected, so only HTML HTML files are available to choose. Selecting "OK" will add the entry to the Doc-tree and it is then available directly. + + + + Using the Searchindex + + KDevelop includes a set of functions to help you search information within HTML HTML documentation. To use these features, your system needs to have the program "glimpseglimpse" installed. Glimpse is a free database generator, which creates the search index search index and executes searches within the documentation. To set up the index, see KDevelop Setup. The index is also automatically generated during the installation program. + The search functions are available through several ways which you can choose from: + + + in the editor editor, select the text you want to have help on, or place the cursor in the word that you want to look for. Then press the right mouse button and select look up: "expression" This can also be done by selecting "Search Marked Text" from the Help menu, the shortcut key F2or by selecting the Search icon from the toolbar. + + + in the Documentation browser, select the text you want to look up and press the right mouse button, select look up:"expression" or select "Search Marked Text" or the search icon as above. + + + if you want to search for a specific keyword, select "Search for Help on..." in the Help menu or select the "Search for Help on..." icon from the toolbar, in all cases opening a search dialog where you can enter the expression you want to get information for. + + + Direct access to specific documentation is given by selecting the according icon in the "DOCDOC" tree-view or through the "Help" menu entries. + + The Helpbrowser Helpbrowser also offers support for grep grep to search for a selection within your current project. For example, you have opened the documentation page for the KTMainWindow class (KDEUI library,) and you want to know where in your code KTMainWindow appears. Mark KTMainWindow and either select "Grep: KTMainWindow" or press ShiftF2. The "Search in Files" dialog opens with the results from grep grep search directly. Then you can choose a result line, to jump to the according sourcecode. + + + + + + Working with the Editor + + An important part of the integrated development environment is the editor editor. You will be using it for: + + + creating, opening, and saving source and project files project files + + + editing source and project files project files + + + writing your SGML SGML documentation + + + printing printing your project files project files + + + Generally, the editor editor itself won't be much different in comparison to other editors, especially as it is a built-in version of the popular KWrite, also known as the "Extended Editor". If you're familiar with that, you won't have any problems using it for managing your projects. In addition to normal editors, KDevelop contains a new printing printing system, that is specialized for use with sourcecode, and you can choose which printing printing program you want to use. + This section gives you more information about how to handle your project's files project files, and to make you more familiar with the editor editor's functionality. A lot of Unix hard-liners would prefer using Emacs or XEmacs they're fine with that. But Emacs isn't necessary for easy programming, and especially for beginners, to work themselves into powerful editors, which in the end, only allow you to enter your code. + + + Managing Project Files + + The following sections describe how to create, save, open, and close your project filesproject files. Note this section doesn't apply to translation files or pixmapspixmaps. Those are recognized automatically, and the appropriate editing program such as KTranslator KTranslator opens those files for you. + To give you an easy access to your files, KDevelop contains two easy-to-handle tree-views, similar to a file manager, that recognize if you have selected a file, and open it in the appropriate editoreditor window. + The main view contains two windows that are used independently, but are connected via the Project Editor, so all menu-bar actions operate the same way. The intention behind this is to allows you to handle two windows at the same time, although only one is visible. The C/C++ window has another task, to allow you to easily compile your sources one by one, so you can check the implementations without having to run a complete build process over your project. + File by file compilation can be done while the C/C++ window is on top. Select "Compile File"Compile File from the Build menu, or press the corresponding button in the toolbar. Your file is saved and compiled, and you can control any errors errors by the Compiler Compiler output output in the output output window. + Within the IDE you can open as many text files as you like. All currently open files are listed in the Window menu, so you can switch between them by selecting the filename from the menu. Further, the actual opened file is displayed with its name in the window title-bar of KDevelop. + + + Creating and Saving Files + + To create a new file, choose "New" from the "File" menu. This opens the "New File New File" dialog, where you can specify the filename and it's type. Additionally, you set the destination directory, and if the file is added to the project or not. Finally, you can also select here to use your header template for the project, in case you want to add a new sourcefile without generating a new class through the Class-Generator. + After the file has been created, you can edit the new file as usual. If you have to switch between different files, you can always turn back to the file either via the file-trees or by the Window-menu. + For saving any changes, KDevelop offers a whole variety of options. The standard way would be to save the file by selecting "Save" or "Save As" from the "File" menu or by the "Save" button on the toolbar. For saving all changed files at once, there is also "Save all" from the "File" menu. + When working on a project, it is very annoying if something critical happens after you have done a lot of changes on your files; sometimes you will kick yourself that you have forgotten to save the changes. KDevelop takes care of this by offering "Autosaving", which is by default enabled, and set to save all files in intervals of 5 minutes. To select another Autosave period, or to disable this, see KDevelop Setup, where the setup setup options are described. + KDevelop takes care of all changes if you open another project, or exit KDevelop. You will be asked if you wish to save the changed files, and you also have the option to specify which one to save,e and which you want to stay unsaved. Further, when invoking any build-processes, your files get saved automatically, so you won't ever wonder why your application doesn't run the way you expected it to do after your changes to the source files. The only exception is the "Compile File"Compile File command, which only saves the currently opened source file visible in the source editor editor window. + + + + Opening and Closing Files + + To open a source file, you have a lot of options. One way could be, as is standard for editors, to select "Open" from the "File" menu. You will be presented an "Open File" dialog, which allows you to choose the file you want to edit. Another, probably more frequently used way, is to select the file from the LFV, LFV the Logical File Viewer, or the RFVRFV, the Real File Viewer (see Overview). The advantage of the file trees is that they provide a quick visual access to your files, especially the LFVLFV,which only displays your project files, sorted project files by their type, and collected into folders. You can also configure the LFV LFV to sort your files in another manner by a right mouse click on the tree. Select "New Group" from the pop-up menu, and you can configure a new group. Select "Edit Group" to install new file filters by specifying the group's file extensions, separated by commas. + The standard file groups for a project generated by kappwiz; KAppWizard are the Headers, Sources, GNU, and Others. Additionally, after adding a translation file, KDevelop adds a folder "Translations", containing your *.po files. + To close files, select the file to close from the Window menu, which loads the opened file into the front editor editor. Then select "Close" from the "File" menu. If your file has been changed, you will be asked to save it. When closing a project, all currently opened files will be checked for changes and you will be asked about saving as well. + + + + + Navigating within Files + + The following gives you a general guideline how to locate certain positions within your files for a quicker access. + + How to find a certain line in a file + Select "Goto Line" in the "View" menu or press CTRLG. The dialog "Goto Line" appears. + Insert the linenumber you want to go to. + Press "OK". + + + How to set a bookmark + Set the cursor to the line you want to access via a bookmark + Select "Set Bookmark" from the "Bookmarks"-menu. + A pop-up-menu opens that allows you to select the bookmark number you want to set for the new bookmark. + Select the bookmark number. + + Another way to set bookmarks bookmarks would be to select "Add Bookmark" from the "Bookmarks" menu. This sets a bookmark to the current line, and appends it to the bookmarks bookmarks-list. The documentation browser documentation browser also offers setting a bookmark to the current page by a context menu entry "Add Bookmark". + + How to delete bookmarks + To delete all bookmarks, select "Delete Bookmarks" from the "Bookmarks" menu. This deletes the bookmarks bookmarks for the window actually on top, either the Header window, the C++ window or the browser window. + + The bookmarks bookmarks are set for each editing window separately. Be aware that your bookmarks bookmarks aren't connected to the certain file you set the bookmark for. + + How to go to a bookmarked line + Select the "Bookmarks" menu and open the appropriate popup menu containing the bookmarks bookmarks you want to view; either the C++-Window or the Header-Window entry. + Select the bookmarked line. + + Selecting a bookmark for the browser window will open the browser and load the page. + + + +Working with Keyboard Shortcuts + +For using the editor editor, you should make yourself comfortable with some keyboard shortcuts shortcuts that make it easier to position the cursor and edit the file. The complete shortcut reference is also listed in section Overview. + + + + + + One letter to the left + Left Arrow + + + One letter to the right + Right Arrow + + + One word to the left + CtrlLeft Arrow + + + One word to the right + CtrlRight Arrow + + + One line upwards + Up Arrow + + + One line downwards + Down Arrow + + + To beginning of the line + Home + + + To end of line + End + + + One page up + Page Up + + + One page down + Page Down + + + To the beginning of the current file + CtrlPage Up + + + To the end of the current file + CtrlPage Down + + + + + + + + + Edit Windows Settings + + The editor editor inside KDevelop can be configured for special editing needs with a global effect on all editing windows. You can set the color modes, highlighting colors, (also configurable in reference to the programming language of the file,) and automatic text settings like tab-with and selection modes. The following describes how to set these options in the configuration dialogs provided in the "Options" menu. + + + General Settings + + The editoreditor's general settings can be configured with the "Editor" entry in the "Options" menu. Select the appropriate values and press "OK" after you have finished your configuration. + + + Edit Options + + + + Auto Indent: + + this sets the editor to place the cursor below the first literal when a new line is entered. + + + + Backspace Indent: + + this option sets the cursor below the first literal of the line above when backspace is pressed. + + + + Word Wrap: + + words are taken into the next line after the column set in "Wrap Words At:" + + + + Replace Tabs: + + tabs in the current text are replaced with tabs of the "Tab Width:" value + + + + Remove Trailing Spaces: + + removes trailing spaces + + + + Wrap Cursor: + + sets the cursor to the end of the last line when backspace enters the beginning of a line + + + + Auto Brackets: + + creates a closing bracket in front of the cursor when a bracket (any kind) is opened. + + + + + + + Select Options + + + + Persistent Selections: + + selections made stay marked after setting the cursor to a different place + + + + Multiple Selections: + + allows multiple independent selections within the text + + + + Vertical Selections: + + allows vertical selections of text + + + + Delete On Input: + + deletes a selection when writing in the selection. + + + + Toggle Old: + + allows only one selection. A selection made gets deselected when another selection is made. + + + + Wrap Words At: + + sets the maximum columns that a line can have. The word that contains a letter that reaches over this value will be automatically broken into the next line. + + + + + + + + Colors + + To change the editoreditor's general appearance, you can define a set of colors that the editor uses by selecting "Editor Colors" from the "Options" menu. +You can configure colors for: + + + + background + + the editor's background + + + selected + the color of selected text + + + found + the color of text found by a search via the menu "Edit" - e.g., with "Search","Repeat Search", and "Replace" + + + selected + found + the color of text selected to search for, and then found + + + + + + Syntax Highlighting + + The syntax-highlighting mode of KDevelop's editor editor can be configured by two dialogs. + First you can set default colors for syntax-highlighting by the "Editor Defaults" entry in the "Options" menu. There, you can set colors and fonts as well as the font size for e.g. keywords. Select the default item, and set all needed options. + The second configuration dialog configuration dialog is accessed by the "Syntax-Highlighting" entry in the "Options" menu. This allows you to set the file filters for the programming language, e.g. *.cpp, and *.h for C++. Then select the item that you want to configure. If you wish to use the default values you've set in the "Editor Defaults" dialog, select the "default" check-boxes in the Item-style and Item-Font sections. This reads the default settings for the selected item. After pressing "OK", your new values will be enabled and used by the editor editor. + + + + + Searching and Replacing + + + Single File Search + + How to find one or more characters in the current editing window + Select "Search" from the "Edit" menu. This opens the search dialog. + Specify the expression to search for in the edit field. The drop-down menu offers selecting a previous search expression. + Select additional options like "Whole Words only", as required + Press "OK". + + To repeat searching for an expression entered in the search dialog, press F3. + + + + Searching over Several Files + +The search function is limited to referencing the single file that is currently visible, but often you want to search for the same expression all over your project. KDevelop contains a grepgrep dialog, which lets you search in all files that you specify, either by setting the directory to start the search from, and/or by mime-type. Specifying the exact directory and the mime-type will reduce the time that KDevelop needs to read your files and display the results. To start a search over several files, select "Search in files..." from the "Edit" menu. + The search dialog opens and lets you enter: + + + The expression to search for (the pattern) + + + The template used for the search + + + The mime-type of files to search in + + + The directory to start from + + + If the search is recursive over all included subdirectories + + + By default, the grep grep-dialog is set to start at your project directory, and works recursively over implementation implementation and header files. + You can even extend your search pattern by using the following options: + + + Match any character + + + Match the beginning of a line + + + Match the end of a line + + + Match the beginning of a word + + + Match the end of a word + + + For a repeating search, you can also use these available operators: + + + The preceding item matches less than once + + + The preceding item is matched zero or more times + + + The preceding item is matched once or more times + + + The preceding item is matched exactly n times + + + The preceding item is matched n or more times + + + The preceding item matches less than n times + + + The preceding item matches at least n times but less than m times + + + + Back-references to bracketed subexpressions are also available by the notation . + After specifying your search parameters, press "Search". The results are then displayed in the result window. To jump to a file and line number, select the result line and press Enter or double click the result. The editor will automatically open the corresponding file and place the cursor to the line of the result. + KDevelop offers more specialized functionality to use grep grep within the editoreditors, and the browser. Select the expression you want to search for in either of the windows, and press ShiftF2 or select "grep grep:<your_expression>" from the right button pop-up menu. This will ask grep grep to search for the selected text in your project directory's files, and will show the results immediately. Switching to the result works as described above. From within the editor window, simply place the cursor over a word and start searching; the word under the cursor will be the search pattern. + + + + Searching within Documentation + + While working on a project, you often need to have information about the parameters of member functions member functions you want to use. Most often you remember the function name that matches your needs, but the parameters are a very hard thing to keep in mind. KDevelop contains a search functionality that allows searching for expressions that appear in your files in the documentation browser documentation browser. + To make use of this search functionality, you must have set up the documentation browser documentation browser correctly and created the search database. +To invoke a search through the documentation, do the following: + + + + place your cursor at the word you want to search, or mark an expression + + + select "Search Marked Text" from the Help menu Help-menu or press the right mouse button to open the context menu; then select "Look Up: "expression". + + + after the search result search result page is displayed in the documentation browser documentation browser, select the page that you think could contain the information you need. + + + the selected documentation page is displayed and your search result search result is marked. To display the next result within the same +documentation page, press F3. + + + This functionality allows you to easily find the information you need. To aid in using the results, the documentation browser documentation browser allows marking a selection and copying it to the clipboard. Then return to the file you're editing and select "Paste" from the "Edit" menu. + For a full description of how to use the Documentation, see Using the Searchindex. + + + + Replacing Text + + To replace an expression, select "Search and Replace" from the "Edit" menu. The "Search and Replace" dialog lets you specify the expression to be replaced, as well as the replacement expression. Then press OK. The first expression which is found will be marked, so you can see where the expression is and in which context. Then you can specify in a dialog if the expression should be replaced or not. When the search is finished by reaching the end of the current file, you will be asked if you want to start the search again from the beginning. If you're finished, select "Cancel". + + + + + Printing + + As KDevelop is designed to give developers the best access to files and information, to reduce development cycles, it also contains a new printing utility which makes use of enscript, a common printing program available for Unix Systems. Besides this, you can also print by directly using lpr (the line-printer device). + As using enscript offers the most options for printing, you should install it on your system; it is usually shipped with distributions, so you shouldn't have any problem finding it. + Before printing, you should have a look at the configuration dialog, to prepare the output according to your needs. The following section describes how to configure KDevelop for printing files. + + + Configuring the Printer + + The printing printing program can be configured by selecting "Print" from the "File" menu "File"-menu. In the printing printing dialog, select the preferred program in the drop-down-menu in the left upper corner. Then press the "Options" button on the right. This opens the configuration for the selected program. Another way to configure the program is selecting "Printer Configuration..." from the "Options" menu, then select "enscript enscript". + + + The enscript <indexterm><primary>enscript</primary></indexterm> Configuration Options + + + Header + + + + Fancy Header + Adds a fancy header + + + + Header Text + Enables adding a header text + + + Text + Sets the text contents + + + Position + Sets the text position to left, center, or right + + + + + + Login + Add the User-ID to the header + + + login + Enables adding the User-ID + + + position + Sets the position for the User-ID to left, center, or right + + + + + + Filename + Add the filename to the header + + + Size of filename + Add filename as full (i.e., with full path) or short (i.e., filename only + + + Position + Sets the position for the filename + + + + + + Hostname + Add the hostname to the header + + + hostname + Enables adding the hostname + + + size of hostname + Sets the size for the hostname + + + Position + Sets the position for the hostname + + + + + + + + + Date & Time + + + Current Date + Include the current date + + + current date + Enables adding the current date + + + position + Sets the position for the date entry + + + format + Sets the date format + + + + + + Modification Date + Include the last modification date + + + modification date + Enables modification date adding + + + position + Sets the position for modification date entry + + + format + sets the date format + + + + + + Current Time + Include the current time + + + current time + Enables adding the current time + + + AM/PM + Use AM/PM or 24 hour format + + + Position + Sets the position for the time entry + + + Format + Sets the time format + + + + + + Modification Time + Include the modificaiton time + + + current time + Enables adding the current time + + + AM/PM + Use AM/PM or 24 hour format + + + Position + Sets the position for the time entry + + + Format + Sets the time format + + + + + + + + + Layout + + + + Numbering & Border + + + + numbering lines + Adds the line numbers to the printed document + + + borders + Adds a border to the printed pages + + + numbering pages + Number printed pages + + + align files + Appends files, for page numbering + + + lines per page + The maximum value for lines per page + + + + + + Format and Tab + + + + set TAB size + Sets the TAB size for interpreting TABs + + + Font for header + Sets the font used for the header text + + + Font for body + Sets the font for the body text (the file contents) + + + + + + Textprinting + + + + Cut lines + Cuts the lines if too long. If left unchecked, lines are broken (wrapped) + + + replace non-printing characters by space + Replaces characters that the printing charset doesn't support with space characters + + + + + + Other Options + + + + Table of Contents + Adds a table of contents page that contains information about printed files, page numbers, etc. + + + Highlight bars + + + + highlight bars + Highlights rows for printing + + + Cycle to change + Sets the number of rows to change the highlight style + + + + + + Wrapped link + + + + mark wrapped lines + Mark lines that have been broken for printing + + + value for wrapped lines + The preset value for the newline the line is broken into + + + + + + + + + + + + Underlay + + + + Text + Sets the text to underlay + + + Position + Sets the position of the underlay text + + + Font + Set the font used for the underlay + + + Angle + Sets the angle for the underlay text + + + Gray scaling + Sets the gray scaling value for the underlay text + + + Style + Sets the underlay text to be printed as outlined or as filled + + + + + + + + The Printing Dialog + + + Direct Printing Options + + + + Program + Sets the printingprinting program to be used for printing:printing enscriptenscript or lpr + + + Printer + Sets the printer to be used for printingprinting + + + Output location + for printing into a file, select the outputoutput location + + + Orientation + Sets the orientation for printing + + + Copy + Sets the number of copies to be made of each page + + + Paper Size + Sets the paper size to be used + + + Output Format + When using enscript enscript as printing printing program, you can choose between postscript or html printing printing + + + Default Printsettings + Sets the default settings to use for printing + + + Outprinting + + + + Page Printing + Sets on or two pages, per sheet of paper + + + Pages + Select all, odd, or even (when using enscript + + + Pretty Print + + + + pretty-print + Enables pretty-print mode for enscript + + + Color + Use color printing + + + Pretty Print Mode + Sets the mode, dependent on your file format + + + + + + + + + + + + File Selection + The file selection dialog is accessed through the "Files" button on the printing printing dialog. The file selection allows you to specify which files to print out by certain criteria: + + + File Selection + + + + Current + The currently opened file, visible in the editing window + + + All in project + All files included in the project currently open + + + Self chosen files + Allows you to choose the files to be printed + + + all cpp files + Prints out all source files of the project + + + all headers + prints out all the header files of the project + + + Changed files + Allows specifying the printing of files changed within a certain timespan + + + Between + Specifies all files changed after: + + + Date + The Date files were changed + + + Time + The time the files were changed + + + + + + And + specifies all files changed before: + + + Date + The Date files were changed + + + Time + The time the files were changed + + + + + + + + + Self Chosen Files + Available only if "self chosen files" is selected (see above) + + + Add + Press this to add a file selected for printingprinting in the lineedit field to the left + + + Delete + Deletes a selected file from the printingprinting list + + + Clear + Clears the printingprinting list + + + + + + + + + + + + Print Preview + + Print Preview is available for you to control what the output output will look like. Therefore, KDevelop uses the program ghostview or kghostview. When the preview button is pressed on either printing printing dialog, you will be presented a templated output output that shows you the effect of the currently set options. + + + + + + + Projects + + + Project types + + + Programs + KDevelop creates a projectfile with the .kdevprj ending. This file contains all your project information, so be careful not to delete it. It is stored in the project's base directory, and is opened to load the project. The projectfile keeps all information for your files, like the file properties, install path, distribution status, and compiler options compiler options (CXXFLAGS). Setting file properties allows you to keep track of where the files should go. + With kappwiz; KAppWizard, you can create a new application project according to your choice of application type. For now, kappwiz; KAppWizard generates five kinds of frame applications, as follows: + + a single document interface (SDI) KDE KDE application, including a menubar, a toolbar, and a statusbar. It contains basic control resource management, to allow extending the frame application into a unique KDE KDE application. The application frame also contains statusbar help messages, as seen from commercial products, and just like KDevelop itself. + From the programmer's point of view, it is based on three application-specific classes classes leaning on the MVC-concept (Model-View-Controller). Technically, the base classes classes may not be viewed that way, but it's construction is at least created most logical to create applications with a GUIGUI. + + + a KDE KDEbased application frame window. This application type offers the most flexibility to those wanting to develop their program from scratch, but can also be used as a basis for developing wizard applications or modules. + + + a Qt-only based program framework. For those programmers who want to use only the Qt-library Qt-library as the GUI GUI interface, we have tried to offer you a smart framework to support your application development. As Qt programming is fully supported, you should have no problems to create a full-functional application by using Qt only. + + + a C++ program framework. This application type is intended for those wanting to write a terminal based C++ program. Just remove the "Hello World" line in main() and construct your classes classes the same way with KDevelop as you would for KDE KDE applications. + + + a C program framework for C programmers. This is also a terminal based application but only uses the C compiler. + + + Further, KDevelop allows you to create projects for KDE 2 and Qt 2.x. These projects require installing the required libraries as well as setting the according installation path in the KDevelop Setup dialog, (see General Configuration) before generating a project, to ensure everything will work automatically. The KDevelop 1.2 Appwizard adds a GNOME-template so that developers wanting to use KDevelop to create GTK+-based applications can do so as well. + Additionally, KDevelop enables you to work with already existing projects. Those can have any options set by the programmer himself in configure and Makefiles. As far as the execution and the build-process is concerned, the current state only allows the same structure as for the other base classes. Create a custom project with the application wizard and add your files to the project to allow scanning by the class-browser. + To ensure the build process, your custom project has to have all sources in a subdirectory matching the lowercase name of your project. The execution of the binary is also restricted to this lowercase project name. + KDevelop does not write any information into your custom Makefile or configuration files. You are responsible for any project behavior and build settings yourself in this case. + + + + Libraries + + A general project-type for creating libraries is not available at the moment. Still, building libraries is not impossible with KDevelop. + Here are a few guidelines and workarounds: + + + + Whenever your project subdirectory gets another subdirectory that contains source files, KDevelop will build a static library of these. That means static libraries are already supported by automatic creation, in order to sort project sourcefiles. Mind that the static library is part of the binary later, and won't be installed. + + To create a shared library KDevelop offers an easy way to turn a such created static library into a shared library: Open the RFV on the left of KDevelop's main window, and browse to the created subdirectory. There, use the right mouse button over the subdirectory. The pop-up menu offers the following options: + + + update Makefile.am + + + change to static lib + + + change to shared lib + + + Use "change to shared lib" to convert the default generated static library into a shared one. You can reverse your decision later if you decide that using it as a static library will work as well for your project. Simply repeat the same steps again and select "change to static lib". + + + + + + Multiple Targets + + For some projects, the facilities of KDevelop in it's current state are not be sufficient. Those are projects that include multiple targets, such as packages containing several applications. As commands like "Execute" require that only one target is built by the developer, multiple target projects are only supported to a point. You will have to write your own entries to the Makefile.amMakefile.am files, and create your directories for the additional libraries or binaries to build. Nevertheless, a build-process always invokes your make-program independent from what actually the targets are; so these functions still can be used (with the restriction that the build is invoked from the main project subdirectory). + Another way to work with multiple target projects, and to still have access to the binaries themselves, is to create empty projects and move the appropriate subdirectories, in conjunction with the project files, project files back to the directory containing all sources later. Then you could load each target independently by its project file. This also allows executing and debugging debugging the target on it's own. + Multiple binaries or libraries within the main project subdirectory are possible by following the rules explained in sectionProject Hacking, and the following guidelines for editing the main project's subdirectory Makefile.am (all modifications outside the KDevelop write area): + + + add your target to the if it is an executable + + + add your library declaration line if it is a shared library + + + add the same declarations as those of the original project binary: + + + + + + + + + + + + copy the messages: entry for the original binary and replace with , and target.pot with newtarget.pot + + + + + add the sources for your binary or library the same as the KDevelop write area contains, but outside the write area. + + + to install static libraries, create the library with KDevelop's auto-creation inside subdirectories. Then modify the Makefile.am outside the write area according to the needed settings + + + + + + + New Project<indexterm><primary>New Project</primary></indexterm>s + + The KDevelop Application Wizard allows the creation of different types of projects, constructing a framework for each. All projects use the GNU standard development tools as described in the requirements section of this handbook. + + For KDE KDE applications, there are six different frameworks: + + + + Mini + Creates a KDE application, with an empty main widget + + + Normal + Creates a KDE application with session management, menubar, toolbar, statusbar, and support for a document-view codeframe model + + + + Normal-OpenGL + >Creates a KDE application with session management, menubar, toolbar, statusbar, and support for a document-view codeframe model. OpenGL(tm) (Mesa3D) support is added. + + + + KDE 2 Normal + + Creates a KDE-2 application with session management, menubar, toolbar, status-bar, and support for a document-view codeframe +model. + + + + KDE 2 Mini + + KDE 2 Mini: Creates a KDE-2 application with an empty main widget. + + + + KDE 2 MDI + KDE 2 MDI: Creates a KDE-2 MDI (Multiple Document Interface) application with menubar, toolbar, statusbar, and support for a document-view codeframe model. + + + + If you wish to build an application with no dependencies on the KDE-libraries KDE-libraries for end-users, you can choose from four Qt-only types: + + + Normal + Creates a Qt-Application with a main window containing a menubar, toolbar and statusbar, and including support for a generic document-view model. + + + + QT 2.x SDI + Creates a Qt-2.x Application with a main window containing a menubar, toolbar and statusbar, and including support for a single document-view interface (SDI) model. + + + + QT 2.1 MDI + Creates a Qt-2.1 Application with a main window containing a menubar, toolbar and statusbar, and including support for a multiple document interface (MDI) model. + + + QextMDI + QextMDI: Creates an MDI framework based on the QextMDI library and Qt2.0x. Allows switching between two modes, Toplevel and Childframe. Requires the QextMDI library, see http://www.geocities.com/gigafalk/qextmdi.htm for more information. + + + + Further, the Application Wizard offers a template for creating GNOME compliant applications with the GTK+ C-library, with a ready-to-run main window containing a menubar, toolbar, and statusbar. + The two C and C++ -Application types offer a framework for creating commandline applications. + Last but not least, you can create an empty project, e.g., to work with pre-existing projects. + The wizard asks for your project name, version, and the location where the project directory will be built. Your Name and Email address are asked for, so they may be inserted header and cpp templates on top of your source files, as well as for entries in the *.lsm file. + For adding revision control to your project, see CVS Integration. + + + + Opening and Closing of Projects + + KDevelop is by default configured to open the last project loaded when starting. This allows a fast start, but you may want to change that to just start the IDE without any project. To prevent the default behavior, disable the "Load last project" option in the KDevelop Setup dialog. + To open another project, select "Open" from the "Project" menu or press the "Open Project" button on the toolbar. If you have another project currently open, this will be closed. If your currently open project contains files that aren't saved, you are asked to save all changed files. You can select which file to save and which you want to close without saving, or to save all at once. + You will then get an "Open Project" dialog, where you can change to the directory containing the project file to be loaded. KDevelop project files project files have the *.kdevprj extension, which is also displayed with a project icon. Select the project file and press "Open". When loading a project, the Class Browser scans all files and builds the initial classtree, so you can start working on the project by using the Class Browser directly. + Another way to open a project is to select the project file in the KFM, the KDE KDE File Manager. This will start KDevelop, loading the selected project file. You could also open a project on the commandline, entering kdevelop projectname.kdevprj. + When closing KDevelop, your project file will be saved automatically, and the IDE detects if you have changed any project files. Then you will be asked to save any changes before exiting. The available options for closing are the same as for closing a project before loading another. + + + + Editing a Project + + After you created a new project with the kappwiz; KAppWizard, the usual next task is to extend the project by editing the already created sources, and adding classesclasses, pixmapspixmaps, pictures, and whatever else your project needs. Editing a project means that you can change the default project after its generation, through menus and dialogs, according to your needs. The next section describes how you can add existing files and classes classes to your project, as well as creating new files. This is necessary for building your project, but won't help you for the installation process by the end-user. Therefore, section Setting Project File Options describes how to set File Properties, especially for additional files that you want make to install, like documentation or pixmaps pixmaps. Another part in project maintenance is adding translations, for applications that support internationalization, which is described in Adding Translations. + Extending the Project Documentation covers questions on how to create a good set of documentation for online help, enabling the end-user to help himself in case of trouble, as well as telling the user how to use your product. + Finally, Project Hacking describes how you can work around the KDevelop project management for special cases. + + + Adding and Removing Files and Classes + + Adding a new file is often used when you think that you should separate your class implementation implementation file into several files. Then you need to create an new file, which will contain the part of the class implementation implementation you want to move. You can do this by choosing "New" from the "File" menu "File"-menu, opening the "New File New File" dialog. + This dialog enables you to specify the file-type, name, and the location. When entering the filename, KDevelop automatically enters the extension for you, but you can change the extensions towards your own preferences.You can include the header template for sourcefiles, so you don't have to copy this into your new file yourself. Also, you can decide, if the file is included in the project or not. This doesn't cover the installation destination, which has to be configured later by setting the file preferences. + After the new file has been created, the project file will be updated as well as the according Makefile.amMakefile.am. + To add a complete class to your project, you can construct a new class with the Classgenerator, which is invoked by "New Class"New Class from the "Project" menu. + If you have an existing project, and you have certain classes classes that you want to re-use in your current project, select "Add File(s) to Project..." from the "Project" menu "Project"-menu. Select "Add existing files", which will open a dialog to let you specify which files will be added to the project and the destination directory. Mind that the files will be copied into the specified directory and added to the project. You should call "Make" after adding sources; then your added files will be included in the build-process. If you want to add e.g., pixmapspixmaps to be installed by the end-user, you should update the File Properties for the added file, and specify the installation path (see Setting Project File Options.) + To add a file to the project that is already in the project directory, go to the RFVRFV, where all project-included files are displayed by their project status, with a red ! over the file icon. Select the file you want to add to the project (which will have a normal file icon) and press the right mouse button to get the popup-menu. Then select "Add". + Files can also be removed from your project. This could be for example, in cases where you don't want to use pre-generated files that are already given by the kappwiz; KAppWizard. When removing a file, you have the option to remove a file from the project, or to delete it completely. To remove a file from the project, select the file in the LFVLFV or the RFVRFV, press the right mouse button and select "remove". To delete a file, select "delete physically". + + + + Setting Project File Options + + The file properties dialog can be accessed via the "Project" menu or within the LFV LFV by a right mouse click. It shows the project files in groups, as they are sorted in the LFVLFV, and displays the file properties such as file size, file type, and if the file is included in the project, as well as the installation path if the file is going to be installed by the end-user's make install command. It is important for documentation files, as well as pixmapspixmaps, to specify the location where the files should go when the +project is built and installed by end users, so you must set up those locations. For standard KDE KDE location macros you should look in your Makefile.amMakefile.am, where the location macros are specified. + + + + Adding Translations + + As KDE KDE allows configuring your desktop and the behavior of your applications, you also have the option to choose the language that your application uses, in online-documentation as well as the application's GUI. For documentation files, this seems a trivial task. You would add a subdirectory labeled by the desired language, e.g. de for German, to the docs directory of your project and copy the English documentation into that directory. Next you would generate the documentation, and set all project file options for the installation directories. Then you could start translating the SGML SGML file to your desired language, and regenerate the documentation, then you're done. Now we will explain how to enable internationalization support for your application, and how to add the languages you want to support. + First, you must enclose all visible strings in your application, those that appear in bars, or dialogs, with the i18n i18n() macro. This macro is a replacement for the function klocale->translate() of the KLocale class and much easier to use. As this macro is declared in the kapp.h include file, you have to add to the source file, or the class declaration declaration file of the class that makes use of the macro. + Although i18ni18n() is a macro and therefore you could think about using the original function, this won't work because the strings that are set up for translation have to be read out of the sources, and are stored in the application's translation file (<YourApp>.pot in the /po subdirectory). This task is handled by the program xgettext, and to do this, you would enter make messages messages in your project directory containing the sources. As xgettext depends on the i18n i18n() macro, the original function won't do the job. + For translations themselves, you first have to create the message file containing all strings that are used in your sources, with the i18ni18n() macro. This can be done by choosing "Make messages messages and merge" from the "Build" menu. + Then you have to add the languages that you want your application to support. To do this, select "Add Translation File" from the "Project" menu. This opens a language selection dialog. Select the language and press OK. This will build the ASCII file containing entries for the filename of the string, and the line where the original string is placed. Then you will see a msgid line containing the string to translate, followed by msgstr. The msgstr line is mostly empty, except for the translations already provided by the KDE-libraries KDE-libraries. They are to be filled with the appropriate translations of your language. + You could think about writing the translations by hand. But the KDE-SDK KDE-SDK offers the use of the program KTranslatorKTranslator. KTranslator reads the already existing files, from other applications installed on the system, so you can reuse already translated strings to support your language. + To access KTranslator KTranslator, the easiest way is selecting a <language>.po file in the /po directory either in the LFVLFV or in the RFV RFV. This opens KTranslator KTranslator and lets you do the translation easily. Mind that you have to set up KTranslatorKTranslator's properties yourself to include the author name and the language, as well as the destination file. KTranslator KTranslator by default only opens your translation file. + For all translation files, makemake uses the program msgfmt to format your message files to use with the binary, but you don't have to take care of that, nor of specifying the destination directory for installing the translation files. These are all done by KDevelop automatically. + For more information about internationalization support, see http://www.kde.org/; a lot of people are involved in doing translations for you to support their language. You will find a list of email-addresses of the translators you could write to, and who will help you with this. Also read The Dialog Editor and The KDevelop Programming Handbook where questions about internationalization are covered again. + + + + Extending the Project Documentation + + All projects created with KDevelop contain a pre-configured documentation set, which already contains standard chapters for installation, project name and version, as well as the author name and email-address. As KDevelop uses SGMLSGML templates, it's very easy to extend the documentation to a fully descriptive help system. The only thing you have to do is edit the SGML SGML file, at docs/en/index.sgml. + The reference documentation included with your sgml-tools package can be added to the Helpbrowser, Helpbrowser and will allow you direct access to special tags, as well as a short description of how to extend the documentation. SGML SGML has a lot of advantages. + KDE KDE makes wide use by this documentation type with the additional KSgml2HtmlKSgml2Html tool. This creates the typical KDE KDE style documentation, and makes it look nice. The sgmltools alone are enough to produce an HTML output output that is already included in your application. To create the documents using KSgml2HtmlKSgml2Html, install the tool and run "Make User-Manual" from the "Build" menu. + The Documentation Browser allows a direct controlling of the output output by selecting "Project User-Manual" from the "Help" menu or the corresponding icon in the DOC DOCtree. Then you can browse the documentation online in KDevelop and have a better overview of the outputoutput errors errors that result from missing tags. + While extending the documentation, you can't avoid that additional files may be produced that have to be included into the project as each sect tag creates a new HTML HTML file. The output output generated by the kappwiz; KAppWizard is already included in the project, so you don't have to worry about their installation path. What you have to watch out for is any index-xx.html file, where xx is higher than 6 (as the first six pages are already included in the project). After generating the documentation, switch to the RFV RFV and browse to your documentation directory. Press the right mouse button over the files to add, and select "Add". + KSgml2Html KSgml2Html adds the KDE KDE logo to the documentation directory. This file, logotp3.gif, has to be added to the project as well. Select the "File Properties" either from the "Project" menu or in the popup menu in the file-viewers. + The easiest way to set the installation path is to select a documentation file that is already set up for installation such as index.html. You see that Install is checked and the Installdir + filename already contains the destination. Mark the "Installdir" and enter CtrlC to copy the installation path to the clipboard. Then select the file you want to specify for installation. Enable "Install", and this will enable the installdir-entry field, already containing the filename. Place the cursor in front of the filename and enter CtrlV to insert the clipboard contents (the installation path copied before.) This is the fastest way to specify the installation path. + For more options about specifying installation destinations, see The KDevelop Programming Handbook. + + + + Project Hacking + + When working with a project, you should never edit the project file by hand. This will prevent KDevelop from loading your project correctly under certain circumstances. It could mean that changes will not result in updating the MakefileMakefiles. + To change any settings for your project, you have to use the given menu entries For experts that are +not comfortable with certain options for e.g. the Linker, Linker or need additional project configuration, you should work yourself into the Makefile.am Makefile.am macros and add all changes in the Makefile.amMakefile.am's after the section separated with the entry "KDevelop write area". + As the GNU-tools are using the commands at the end of all macro files, you can overwrite KDevelop's settings with this. + Doing this will prevent using KDevelop for any further changes related to project configuration. + + + + + Compiler and Linker <indexterm><primary>Linker</primary></indexterm> Flags for Projects + + Each new project contains all necessary options for the Compiler Compiler and Linker Linker as well as general settings. + By default, your project is set to use debugging debugging by the flag, and warnings warnings are set to the standard, . This ensures you can debug your application and detect constructions that may cause program errorserrors. For some applications, you would need additional Compiler Compiler or Linker Linker flags, especially if you're using libraries that are not currently included by the Linker Linker. Then you need to update the project by configuring the correct settings with the Project Options dialog. See Build Settings for more information how and where to set Compiler Options, Warnings and Linker Linker Options. + + + + External Projects + + Existing projects can be converted to KDevelop projects by selecting "New" from the "Project" menu. The dialog creates an empty project file with your project name, version, and type information, as well as your name and email address. Next copy all your compilation and construction files to the new project directory, and choose "Add Files" from the "Project" menu. The files selected will be copied into your project directory and the Makefile.amMakefile.am files are updated. + Be sure to change all Makefile.am Makefile.am entries existing before the conversion, to the newly created entries placed by KDevelop in the KDevelop area. + After this procedure, test that your program can still be compiled and installed after the conversion to ensure the project's consistency. + + + + + Build Settings + + The Project Options dialog, accessed by the "Project" menu, lets you specify all needed parameters for your project. These will be used for the Makefile.amMakefile.am files and the configureconfigure.in script (e.g. version number change, or compiler warningscompiler warnings) and will thereby set the compilation preferences as well. After changing the project options, you should invoke "make make clean" or "rebuild all" to compile your project with the new options. +Please note that debugging debugging is only available if the project options are set to create debugging debugging information, and the amount can be set with the debug level (0-3). +If you add functions that belong to a library that is not included in the Linker Linker flags, your program will not link correctly if those are not updated, so keep track of your library linking. +For a release build of your application or for distributing the sourcecode package, you should watch the following standard settings: + + + + disable debugging debugging + + + enable optimization and set optimization level to + + + set the compiler warnings compiler warnings to + + + for each new release, increase the version number and update the project.lsm file for version and requirements. + + + + + General Options + + The first page of the Project Options dialog sets the general options for your project. These are project name and number, the handbook sgml file which is used for generating a set of HTML HTML files that are included in the project, and specific information about the author. The short description field is for additional information that you want to include such as the program's purpose and the like. + + + + Compiler Options + + The compiler options compiler options page sets the compiler flags for your target, debugging debugging and additional options as described below. + + + Target + + The target box contains two options that can be set: + + + Target Machine + You have the choice to set the target machine option here, by choosing between your machine (default), and i386v, which is the option if you configureconfigured your Compiler Compiler as a cross-compiler for an Intel 386 compatible machine running System V. This option sets the flag for the Compiler Compiler. Usually you would leave this to the default. + + + + Optimize + You can enable optimization for your build process by this option, by setting the flag. If not checked, the flag is set to , so no optimization will be used. If you enable optimization by checking this option, you can also specify the optimization level below to a value between 1 and 3. + For a release version of your application, enable optimization and set the level to 2. + + + + + + + Debugging + + Right of the Target box, you can see the debugging debugging-section. This means that you can set your Compiler Compiler to include information for debuggers within the final binary, so the programmer can follow the execution of the application with the debugger in direct context of the sourcecode. + + + Enable debugging debugging + Sets the flag; the debugging debugging level specifies the amount of information to be included in the binary. Available are levels 1 to 3 to choose from. Mind that the binary execution will be slower by setting any debugging debugging option, and that the binary size will increase by the debugging debugging level. + + + + Generate extra information for gprof +Sets the flag, causing the Compiler Compiler to include information for the gprof program that displays caller graphs of your program's function. + + + + Store temporary intermediate files + Sets the flag. This will result in storing the (usually temporary) files produced by the preprocessor and the assembler. A compilation of a sourcefile will therefore produce three output output files: an *.o file which is the final output output of the CompilerCompiler, an *.i file produced by the preprocessor and an *.s file as the output output of the assembler. + + + + For a release of your project, disable any debugging debugging. + + + + Additional Options + + The text entry field on the bottom is intended for you to manually set any flags for the Compiler Compiler by setting the CXXFLAGS environment variable variable in the MakefileMakefiles, so that make sets the flags before the build process, and resets them afterwards. For a complete description of all available Compiler Compiler flags you should see your Compiler Compiler documentation; for gcc and egcs this can be done by man gcc. man g++ will show you information about the c++ script that is used to lead the Compiler Compiler. + + + + + Compiler Warnings + + The following gives a description about the Compiler Compiler warning options that can be set on page 3 of the project options dialog. The explanations are taken from the man page for GCC, egcs version 1.1.1. The warnings warnings themselves are diagnostic messages that indicate that constructions may cause errors errors. + + + + + + Standard `' options combined. + + + + + + Compile with . This option sets options not included in which are very specific. Please read GCC-Info for more information. + + + + + + Warn about certain constructs that behave differently in traditional and ANSI C. + + + + + + Warn if an undefined identifier is evaluated in an `#if' directive. + + + + + + Warn whenever a local variable variable shadows another local variable variable. + + + + + + Warn whenever two distinct identifiers match in the first len characters. This may help you prepare a program that will compile with certain obsolete, brain-damaged Compilers Compilers. + + + + + + Warn whenever an object of larger than LEN bytes is defined. + + + + + + Warn about anything that depends on the size of a function type or of void. GNU C assigns these types a size of 1, for convenience in calculations with void * pointers and pointers to functions. + + + + + + Warn whenever a function call is cast to a non-matching type. For example, warn if int malloc() is cast to anything *. + + + + + + Warn whenever a pointer is cast so as to remove a type qualifier from the target type. For example, warn if a const char * is cast to an ordinary char *. + + + + + + Warn whenever a pointer is cast such that the required alignment of the target is increased. For example, warn if a char * is cast to an int * on machines where integers can only be accessed at two- or four-byte boundaries. + + + + + + Give string constants the type const char[length] so that copying the address of one into a non-const char * pointer will get a warning. These warnings warnings will help you find at compile time code that can try to write into a string constant, but only if you have been very careful about using const in declaration declarations and prototypes. Otherwise, it will just be a nuisance; this is why we did not make request these warnings warnings. + + + + + + Warn if a prototype causes a type conversion that is different from what would happen to the same argument in the absence of a prototype. This includes conversions of fixed point to floating and vice versa, and conversions changing the width or signedness of a fixed point argument except when the same as the default promotion. + + + + + + Warn when a comparison between signed and unsigned values could produce an incorrect result when the signed value is converted to unsigned. + + + + + + Warn if any functions that return structures or unions are defined or called. (In languages where you can return an array, this also elicits a warning.) + + + + + + Warn if a global function is defined without a previous prototype declaration declaration. This warning is issued even if the definition itself provides a prototype. The aim is to detect global functions that fail to be declared in header files. + + + + declarations + + Warn if a global function is defined without a previous declaration declaration. Do so even if the definition itself provides a prototype. Use this option to detect global functions that are not declared in header files. + + + + + Warn if anything is declared more than once in the same scope, even in cases where multiple declaration declaration is valid and changes nothing. + + + + + + Warn if anything is declared more than once in the same scope, even in cases where multiple declaration declaration is valid and changes nothing. + + + + + + Warn if an extern declaration declaration is encountered within an function. + + + + + + Warn if a function can not be inlined, and either it was declared as inline, or else the -fin*line-functions option was given. + + + + + + Warn if an old-style (C-style) cast is used within a program + + + + + + (C++ only.) In a derived class, the definitions of virtual functions must match the type signature of a virtual function declared in the base class. Use this option to request warnings warnings when a derived class declares a function that may be an erroneous attempt to define a virtual function: that is, warn when a function with the same name as a virtual function in the base class, but with a type signature that doesn't match any virtual functions from the base class. + + + + + + Warn when g++'s synthesis behavior does not match that of cfront. + + + + + + Make all warnings warnings into errorserrors. Treat warnings warnings as errors errors; abort compilation after any warning. + + + + For a release of your project, it is recommended to enable . + + + + Linker <indexterm><primary>Linker</primary></indexterm> Options + + linker optionsThe Linker Linker Options for your current project can be set on the last page of the project options dialog. You have to enable those libraries that your application uses, to link them to your binary with the Linker Linker, e.g. your application uses the class +KFileDialogKFileDialog. As the class KFileDialogKFileDialog is part of the KFile library, you have to enable kfile. For classes classes or functions that are not listed as checkboxes, use the "additional libraries" field. + + + Linker <indexterm><primary>Linker</primary></indexterm> Flags + + linker flags + + + remove all symbol table and relocation information from the executable: + + This means that all redundant information will be removed from the object files and the binary, and that debugging debugging will not be possible. For as long as your application is in a development stage, and not released as final, you should leave this option disabled. + + + + prevent using shared libraries: + + This option disables the use of shared libraries on systems that support this. On systems using no shared libraries, this option will have no effect. + + + + additional flags: + + Here, you can enter additional flags for the Linker Linker, setting the LDFLAGS environment variable variable used by makemake. The available options can be taken from the man page for ld or your Compiler Compiler man page. + + + + + + + Libraries + + The libraries section contains checkboxes for the most needed libraries in conjuction with Qt/KDE KDE application development. You have to enable those libraries that your application uses, otherwise the Linker Linker will complain about unresolved symbol tables. + + + X11X11 + + The X11 library. Recommended for all X-Window programs. + + + + XextXext + + The X11 extension library. Also most X-Window programs depend on Xext. + + + + qtqt + + The Qt-library Qt-library. Recommended for Qt and KDE KDE applications. + + + + kdecorekdecore + + The KDE Core library; contains the classes classes for KDE Application frameworks. + + + + kdeuikdeui + + The KDE User Interface library; contains KDE-specific widgets widgets. + + + + khtmlwkhtmlw + + The KHTML Widget library. + + + + kfmkfm + + The KFM library containing classes classes for KFM functions. + + + + kfilekfile + + The KFile library. Contains file dialogs etc. + + + + kspellkspell + + The KSpell library. Contains an interface for programs to use Ispell for spell-checking. + + + + kabkab + + The KAdressBook library. Needed for access to the addressbook as well as providing addressbook widgets widgets + + + + additional libraries: + Here you can enter additional libraries that your application needs, e.g. the KOM library. Set the libraries with the option; for the example . + + + + + + + Make <indexterm><primary>Make</primary></indexterm> Options + + As GNU make make supports some useful options, the Project Options dialog contains a page called "Make-Options", where those can be en/disabled. + The available settings are: + + + + Print debug information + + prints out all information about the project files project files and what makemake determines for rebuilding them. + + + + Continue after errors errors + + tries to continue with the compilation after an error occurred (e.g. a file couldn't be compiled due to an error) + + + + Print the data base + + prints out the makemake database for the current process, which contains the changes from the last build-run. + + + + Environment variables + + give the current environment variables a higher priority than the currently used variables in the MakefileMakefile. + + + + No built-in rules + + doesn't use built-in rules for make make. + + + + Touch files + + don't run the Compiler Compiler on changed files; instead only touches them. This sets them as already processed by make make. + + + + Ignore all errors errors + + Ignores all errors errors that occur + + + + Silent operation + + doesn't print out any information about the build-process + + + + Print working directory + + prints the current directory during the make make process. + + + + job number + + sets the amount of parallel processes for make make. For a single-CPU system we recommend setting this to one or two. + + + + set modified + + sets the selected file modified. Choose the file by clicking the folder button on the right. Setting a file modified means that the file will be processed by make make and compiled if it is a source file. + + + + additional options + + set additional options to make make; those can be found in your local man page for "GNU Make". + + + + Rebuild behavior on run + + Sets the actions taken when you choose run. There are three options you can choose from: + + + Always rebuild + Always rebuild, without checking for modified files + + + Warning on modification + Warn if source files have been modified, and ask if the project should be rebuilt + + + Only on modification + Check if sources have changed, and rebuild if they have + + The default is to rebuild always. + + + + + + + + The Class Browser + + + The Classviewer + + classbrowserThe KDevelop Classviewer is one of the most useful and important tools that the IDE provides a developer for managing his project sources. When a project is loaded, a class parser reads all project sources for functions, classesclasses etc., then displays the results in the CVCV treeview. This chapter shows you how to use the Classviewer and the provided functionality, and how it can improve your work. + +Classes and their methods can also be accessed by the browser toolbar. There, the left combobox selects the class and the right lets you choose the methods of the selected class. When you select a method, the classbrowser will automatically bring you to the implementation implementation file, and sets the cursor to the method. Finally, the class-assistant button on the right of the method combo, will bring you to the declaration declaration of the method on one click and on a second click to the definition. The delayed popup menu, displayed by the down-arrow on the button, offers additional functionality that is also available in the classviewer's context menus, such as: + + + + Goto Declaration + + browses to the declaration declaration of the method + + + + Goto Definition + browses to the definition of the method + + + + Goto Class Declaration + Goto Class Declaration: browses to the class declaration declaration + + + + New Class New Class + Opens the New Class New Class dialog to construct a new class + + + + Add Method + Adds a method to the selected class + + + + Add Attribute + Adds an attribute to the selected class + + + + Show graphical classview + Show graphical classview: Opens the graphical inheritance tree + + + + + + Available Objects + + C++ code can be seen as a collection of objects: classesclasses, their members, global functions, and more. The classtree displays these objects logically, and orders them by character, so they are easy to locate in the tree, as well by their icon. + The classtree contains a "Classes" and a "Globals" folder. + The "Classes" folder generally contains the project's classes classes. If your project contains subfolders to manage your sourcefiles, these are also displayed by their original folder name and contain all classes classes that are stored in the files located in the subfolder. + When popping up a class, the classtree displays the class contents by separating methods and attributesattributes. As these can have attributes attributessuch as public, private, and protected, these are displayed by modified icons. You will see that a class displayed in the Class Browser contains all the objects that are present in the class declaration declaration. + Classes classes are a very common thing when programming in C++ and will contain most of the code. But applications also contain objects that have a "Global" appearance to the program. These would be structs, functions etc. Especially the main() function, which appears in every application, and you sometimes need to modify it in one or another. +To access these objects, the Classviewer provides the "Globals" folder, containing sub-folders for the following object types: + + + Structs + + + Functions + + + Variables + + + As the icons displaying these items are similar to those used in the class-viewer, their meaning is easy to guess, and to remember. + Finally, it can be said that the classviewer classviewer displays your project graphically by their objects, related to their appearance in the code. + In the following section you will learn how to use the classviewer classviewer and it's tools, in conjunction with your code. + + + + Browsing Object Declarations and Implementations + + The Classviewer's strength is providing a fast and easy access to his code and the code's contents, independent of the location within files. Selections by a mouse click will result in the following actions: + + + On a classname + Switches to the class declarationdeclaration + + + On a class method + Switches to the method implementationimplementation + + + On a class attribute + Switches to the attribute's declaration declaration in the class declaration declaration + + + On a struct + Switches to the struct's declaration declaration + + + + On a global function + Switches to the function's implementation implementation + + + This provides you the most direct access to code objects. + Sometimes, it may be needed to change a method's header, with the result that you have to change it's declaration declaration in the class, as well as the implementationimplementation. The classviewer classviewer supports this by providing right button context menus over items. + On a method or function, this means that you can select where to go: + + + Go to definition + Switches to the implementation implementation- this is the default for a left click as described above + + + Go to declaration + Switches to the declaration declaration of the method or function. + + + By this behavior, the Class Browser offers you access to every place you need to go for coding your C++ application. + The following sections give you a description of the other tools that the Class Browser offers. You will find them very useful when working with large projects, as they enhance working object-oriented on C++ programs. + + + + + The Classtools + + classtoolsThe classtools are dialogs that makes it even easier for the developer to get more information about his project's classesclasses. + The classviewer classviewer displays all objects by their occurrence in the code, but you sometimes want to get more information about classes classes without having to look inside the code. Therefore, the classtool dialogs are specialized on displaying specific class attributesattributes. + The classtool dialog is invoked by the popup menu over a class in the classviewer classviewer. Select "Classtool", and the dialog will appear. To get information about a class, select the class in the combo box on top. Then the buttons in the toolbar provide functions that give you specific trees for your class. These are: + + + + Parents: + + The parents of the selected class, which means the class it inherits. This is useful for multiple inheritance, as well as to see why a class behaves in one or the other way. For example, for a dialog, your parent class could be QWidgetQWidget or QDialogQDialog. + + + + Children: + + Displays the child classes classes that inherit the current class. + + + + Clients: + + Classes that make use of the selected class through an attribute in their class declaration declaration + + + + Suppliers: + + The suppliers that give attributes attributes to the selected class. + + + + Attributes: + + The attributes attributes of the class by their name + + + + Methods: + + The Methods of the selected class + + + + Further, the selection of the attribute public, protected, private, or all, shows Attributes, Methods and Virtual Methods by their attribute value. + + + + Managing Classes + + The Class Browser also allows adding methods and attributes attributes directly by dialogs. This means you don't have to type the classdeclaration classdeclaration and the implementation implementation header yourself. After adding a method, you only have to set the formal parameters to the implementation implementation header, and, if the method requires an attribute, to the declarationdeclaration. + + How to add a method to a class + select the class you want to add a method + press the right mouse button; the popup menu appears + select "Add member function". + the "Add member function" dialog appears. + insert the type, declaration declaration and documentation for the method + specify the access and the modifiers for the method + press OK to exit the dialog + + To add a variable variable, is the same procedure, just select "Add member variable variable" in the popup menu. + The difference between the actions of these dialogs, is that the adding of a variable variable will add the variable variable to the classdeclaration classdeclaration, while the adding of a method will instead add the method's declaration declaration and the method's implementation implementation header to the sources. + As the classviewer classviewerdirectly updates itself, you have immediate access to the new method implementation implementation, so you only have to fill out the code for the actual purpose of the method. + + + + + The Dialog Editor + + The KDevelop integrated dialog editor dialog editor allows the easy construction of the widgets widgets and dialogs your application uses, all by graphical means. + You see the direct appearance of your dialog as it will be presented to the user. Using the dialog editor dialog editor is usually the first step you would take after creating a new project with the kappwiz;KAppWizard. Here you can create your main view, the user interaction dialogs and, after finishing the graphical work, the code generation. This way, your project will contain all the usually considered "difficult" parts that normally would take a long time to implement. Then, the "rest" of your work is implementing the functionality in the generated code. + This chapter deals with how to use the dialog editor dialog editor to create your project widgetswidgets, as well as what to do in case you see your widgets widgets need corrections or additions during the further development process. + You can switch to the dialog editor dialog editor either by selecting "Dialog Editor" from the "ViewView" menu or by the corresponding toolbar icon. +To switch back to the Project Editor, select "KDevelop" from the dialog editordialog editor's "ViewView" menu, or the icon in the toolbar. + What else does the dialog editordialog editor's interface offer you? Mainly, that its appearance is almost the same as the project editor, in term of the main view separation as well as the menu and toolbars. This allows you to get accustomed to the dialog editor dialog editor very quickly, and, as it completely interacts with the project management, stay in the dialog editor dialog editor if you want to control your build-process. Actions that require to switch back to KDevelop will do that automatically for you, for example, accessing the documentation browser. Just select the menu commands, and KDevelop reacts to your will. +The following sections give you an overview of the dialog editor dialog editor interface, how to create a new dialog initially and how set up the properties of the child widgets widgets that your dialog contains. + + + The Dialog Editor View + + + The Mainview + + The dialog editor dialog editor's view is logically separated by: + + + The Widgets Tab, containing the "Widgets", "Dialogs" and "Items" tabs. These are described in Adding Widgets. + + + The Widget-Editor, representing the editing view for creating your dialog. See The Widget Editor + + + The Properties window, containing a list of properties and their values, dependent on the currently selected widget in the widget editor. See Setting Properties for information how to specialize the widget's behavior and look. + + + + + + Menubar <indexterm><primary>Menubar</primary></indexterm>, Toolbar <indexterm><primary>Toolbar</primary></indexterm> and Statusbar <indexterm><primary>Statusbar</primary></indexterm> differences to <application>KDevelop</application> + +In Dialogeditor mode, KDevelop changes the menubar, toolbar and statusbar slightly, to provide the functionality you need for creating widgets widgets. +The differences are: + + + Menubar <indexterm><primary>Menubar</primary></indexterm> + + + "File" Menu + "Open" allows you to open a dialog definition file. + + + "View" Menu + replaces "Tree-View" with "Widgets-View", en/disabling the Widgets-View tabs; adds "Properties-View" to en/disable the Properties-View and "Grid Size" to let you specify the grid size in pixels for horizontal and vertical values. + + + "Build" Menu + replaces "Compile FileCompile File" with "Generate Sources". This lets you actually generate the sources for yourdialog. + + + + + + Toolbar <indexterm><primary>Toolbar</primary></indexterm> + + The toolbar contains a new icon for "New Dialog" as well as the replacement of "Compile FileCompile File" with "Generate Sources". + + + + Statusbar <indexterm><primary>Statusbar</primary></indexterm> + + The statusbar now provides information about the currently selected widget, especially displaying the values for X and Y size in the coordinate system. For Statusbar Statusbar help, you are provided the same functionality as in Project-editing mode. + + While changing widget size, the statusbar shows the current values for width and height of the selected widget. + + + + + + Creating a New Dialog + + After creating your project skeleton, you are provided a ready-to-run application, according to your preferences. As KDevelop provides the project types KDE, and Qt application, the dialog editor dialog editor recognizes this and offers widget construction by the widgets widgets that are provided in the used libraries. To save time, you already should have a design in mind for the intended actions. For information about widget design, see The KDevelop Programming Handbook. + + To create a new dialog, select "New" from the "File" menu "File"-menu or select "New" from the context menu in the "Dialogs" tab. The New File Dialog appears where you can select the item Qt/KDE Dialog(*.kdevdlg). Enter the file name for your dialog to save the layout to. Then press OK and a new dialog will appear. When finished with the new dialog, select "Generate Complete Sources" from the "Build" Menu. The dialog to generate the widgets source file will appear. There you have to give KDevelop the dialog-specific information about the base class, the source file names and destination. + + + Dialog Class + + The dialog class you can select, is the class that is inherited by your new widget, which is technically represented by a class itself. + Therefore, you have the following options: + + + QWidget + the base class for all user interaction widgets widgets provided by Qt. Used for main views and top-level widgets widgets. + + + QFrame + inherits QWidgetQWidget and is used by numerous widgets widgets as a base class. This is useful for widgets widgets that want to have a QFrameQFrame functionality in addition to QWidgetQWidget methods. + + + Custom + inherits a custom class that has to be set in the "Custom Properties". This could be an already designed class provided by your project or the libraries. + + + QDialog + the base class for dialogs that you would inherit for user interaction like setting properties or changing values. + + + QTabDialog + inherits QDialogQDialog and provides a dialog with predefined buttons and a set of tabs, which you will provide by the widgets widgets that you create. + + + Custom Properties + For the inheritance of a custom class as selected in the dialog class field, you have to specify the classname, which goes to "Custom Class". The dialog editor dialog editor uses this for the code-generation; therefore, you also have to insert the "Custom Header", where the header filename of the custom class has to be set. + + + + + + Files + + In the "Files" section, you have to enter the widget's specific information. This is the classname (which would be e.g. KColorSelectDlg for a dialog that allows selecting the color of a pen), the header, C++, and Data filenames. When inserting the Classname, the filenames are given by the dialog editor dialog editor, but you can change the filenames. + Now, what about the files? When you are ready with constructing the widget visually, you will have to generate the files that contain the implementation implementation for your widget. As this will be a class, the dialog will exist by the header file containing the classdeclaration classdeclaration, and a C++ file containing the method implementation implementation for your widget's methods and slots. The Data file is the file that will contain a function that is called by the constructor of your widget, the initDialog() method. This file itself shouldn't be changed as it will contain the generated code from the dialog editor dialog editor to create the widget on the screen. + If you ever have to change values, you should do this by the constructor, or be sure that you won't change the dialog during the development process, as the Data file will be overwritten each time the code is generated for your widget. The header and C++ file contain sections, where the dialog editor dialog editor writes and these are marked by comments. After file generation, you can change any values and settings, but only outside these sections, otherwise your changes will get lost by the next code-creation. + + + + Location + + For generating the widget's sources, the dialog editor dialog editor needs to know the location these will go. The default value for the output output directory is the current project subdirectory containing the sources, already present. + After pressing "OK", your default values are generated and an empty Widget constructor is opened. Then you are ready to go for creating +your own widget. Mind that the dialog editor dialog editor currently only supports static widgets widgets without geometry management. If you're about to use geometry management for your widgets widgets, you should make yourself accustomed with the classes classes that Qt provides for this, create a new class with the classgenerator, and write your widget by hand. For more information, see The KDevelop Programming Handbook. + + + + + Adding Widgets + + After specifying the dialogs or widgets widgets class and filenames, you are ready to start creating the widget and filling it with contents. + Adding low-level widgets widgets to your dialog is a very easy task. Just select the widget you want to add from the "Widgets" tab on the left by a single click on the according widget icon. The widget will then be laid on the left upper corner of the currently opened main widget. + An added widget then gets the default size of 100x30 pixels on the editor editor view. To move a widget, click over it to activate the drawing frame, which is displayed in dark grey with hot spots on the corners and on the center of each of the top, bottom, left and right sides of the widget. A cross-cursor indicates that the widget can be moved. To move it, press the left mouse button and keep it pressed. then move the widget with your mouse to the place you want to have it displayed later. + To resize a widget, move your mouse cursor over one of the hot spots of the already activated item. The mouse cursor then changes to a double-arrow indicating the directions, in which resizing can be done. Press the left mouse button and hold it pressed. The widget item will change it's size when the mouse is moved to the direction indicated by the cursor. + Further, the widget editor contains a lot of context menus to help you coordinate your work. Those are available over all items in the widgets widgets tab and give you a quick help message window that shows the class name of the selected widget with a short description. +Over a selected widget, the context menu shows the class name of the selected item and offers: + + + Raise + + + Lower + + + Raise to top + + + Lower to bottom + + + Cut + + + Delete + + + Copy + + + Paste + + + Help + + + After setting the size and position, you can edit the preferences for the selected item on the Preferences window. + + + The Widgets Tab + + dialog editor widgetsThe widgets widgets tab represents the available widgets widgets you can place on the dialog. If you want information about a certain widget, press the right mouse button over a widget icon and select "Quick-Help" from the popup-menu. Mind that the dialog editor dialog editor automatically determines, if your project type is Qt-only or KDE. This prevents you from using KDE-widgets widgets in a Qt only application. + After you selected a widget item, it is placed with default sizes and values on the editing window and marked selected by a frame and darkened corners. To resize a widget, move your mouse over one of the dark spots and your cursor will change to display which resizing directions are possible. Then press the mousebutton and move the mouse while holding it. When you're finished with resizing the widget, release the mouse. While resizing, the statusbar displays the current position of the item by X and Y values and the current size by W(Width) and H(Height) values. + + + + The Dialogs Tab + + project dialogsThe dialogs tab is intended to let you open your project's dialogs by a mouseclick. As the dialog's structure is saved in a *.kdevdlg file within the directory that contains the generated files, only those dialog definition files are shown. Mind that you don't delete these definition files. + On selecting a dialog, it will be shown as by the state it was saved in the last editing step in the Widget-Editor view. + + + + The Items Tab + + dialog itemsThe Items tab lets you have a hierarchal overview over the currently present widget items of the dialog. This means, that, as your background represents the parent of all widgets widgets within the dialog, it is shown on top of the tree. The children of the main dialog are then listed in the next tree-level. +On selecting an item, it gets marked in the editor view, and the properties are shown in the properties window. Using the items view is sometimes important if your widgets widgets behavior depends on the parent-child relationship. + + + + + The Widget Editor + + The Widget Editor is the main view that is placed in the middle, and is where you construct your widget. After adding items, they can be selected and resized, as well as moved to the place you need them. On all items, popup menus provide a quick access to functions like cut, copy and insert. + + + + Setting Properties + + setting widget propertiesThe properties window on the right is the place where you set the default behavior for the widget and its items. It displays the pre-set values for each selected item right away; changing values will result in direct changes on the Widget Editor view, e.g. naming labels or buttons. + + To separate certain property values by their effect, the properties window contains four folders; selecting a folder will pop up all values for the properties group. All possible values are described below. Mind that the properties are dependent on the widget, e.g. a label and button will have a property for their on-screen name, while lineedits will have properties for methods like setText(). + For a complete list of the available values per item, you should see the class-reference of the widget which explains the used methods and all possible values. Note that most values are implemented in QWidgetQWidget and are used for all widgets widgets that inherit +QWidgetQWidget. Also mind that the final code does not contain any method calls that are unchanged by the user, and therefore use the default values as given in the widget's constructors. + + + + Generating Files + + dialog sourcecode generation + After creating a widget, you have to generate the sourcecode to make it available in your project. This can be done either with the "Generate Sources" from the "Build" menu or by the corresponding icon in the dialog editor dialog editor toolbar. Your MakefileMakefile files will be updated automatically to include the new widget in the compiling process; therefore, after calling "Generate Sources", you can build your project again within the dialog editor dialog editor. The output output window pops up below the Widget-Editor window, as in Project Editor mode. + Now that your project contains a new widget, your work as a programmer is to implement functionality to the used slots and eventually add other methods you may need. See The KDevelop Programming Handbook, The Dialogeditor for more information about widget properties and sourcecode generation. + + + + + The Internal Debugger + + + Setup + + The default setup for KDevelop is to use the internal debugger. You can change this under "Options" selected from the "KDevelop setup" menu item, and then the Debugger tab. +Click on "Use external debugger" if you wish to use a different debugger and enter the name of the debugger to use. See your debuggers documentation on how to run it. +Selecting the internal debugger enables an additional set of options you can choose from: + + + + Display static members + Displaying static members makes gdb slower in producing data within kde and qt. It may change the "signature" of the data which QString and friends rely on. If you need to debug into these values, then check this option. + + + + Display mangled names + When displaying the disassembled code you can select to see the methods mangled names. However, non-mangled names are easier to read. + + + + Try setting BPs on lib load + Try setting BPs on lib load: This will try to set pending breakpoints on loading a library. If gdb hasn't seen a library that will be loaded via "dlopen" then it will refuse to set a breakpoint in that code. We can get gdb to stop on a library load and hence try to set the pending breakpoints. See Shared libraries and breakpoints for more details and a "gotcha" relating to this behaviour. If you are not "dlopen"ing libs, leave this off. + + + + Enable floating toolbar + Enable floating toolbar: This will allow you to use the floating toolbar to control the debugger in addition to the menu and buttons. The toolbar is most useful for debugging GUI applications. For details see The floating toolbar. + + + + Enable separate terminal for application I/O + This allows you to enter terminal input when your application contains terminal input code (e.g. cin, fgets etc.). If you use terminal input in your app, then tick this option. Otherwise leave this off. + + Tip: This option is most useful if you use it in combination with the floating toolbar, because this way, the terminal window won't be hidden behind the KDevelop window when you control the debugger. + + + + + + + + Using the internal debugger + + + Changes made in the tree and output view window + + If you choose the internal debugger, four tabs are added to your tree and output view windows. + + + On the tree view window + + + + VAR tab + A tree view of the local variables at the current place in the program you have stopped at. You can also see local variables in the function that called this functions. The VAR tab also contains a watch window. This allows you to see the value of global variables, or perhaps you may want to see only one local variable rather than the variable in a large list of local variables. + + + + + + + On the output view window + + + breakpoint + A list of breakpoints set, and their current state + + + framestack + The calling stack + + + disassemble + A machine instruction view of the code, showing the current instruction to be executed + + + + + + + Changes made in the Debug menu and on the panel + + + On the panel + + Two normal and two dropdown buttons to control the debugger functions will be accessible as soon as you start the debugger. + + + + In the Debug menu + + When you start debugging, ten items to control the debugger will be enabled. + + Available functions: + + + DebugRun + Continue the program from the current point + + + DebugRun to cursor + Execute the program up to the current cursor position + + + DebugStep over + Execute one line of code, stopping in the next line of code in the same source file. This will run any functions encountered until the above condition is met + + + DebugStep over i(nstruction) + Execute one machine instruction, as above + + + DebugStep in + Execute exactly one line of source code. This means you will "step into" the current function, if necessary + + + DebugStep in i(nstruction) + Execute one machine instruction as above + + + DebugStep out + Run to the end of the current stack frame (function) + + + DebugViewers + Allows a variety of views into the data. + Currently implemented views are: + + + Memory address + + + Disassemble code + + + Current registers + + + Current libraries + + + + + + DebugInterrupt + Stop the application executing + + + DebugStop + Stop the application executing, and exit the debugger + + + + + + + Details + + + Breakpoints + + Breakpoints can be set against source lines in a file (referred to as breakpoints) or on variables in the source (referred to as watchpoints). Both types of breakpoints can be set at anytime, however watchpoints on local variables only have meaning in the variables local scope. Watchpoints have more meaning when you are dealing with global variables. + + + + Set/Unset breakpoints + + Simple one click set/unset. Click on the "icon" border to the left of the text in the editor at the line you want the breakpoint. Click again on this line to unset the breakpoint. + + + + Alternative beakpoint manipulating via menus + + By right clicking on a breakpoint in the breakpoint list or on a breakpoint in the editors icon border you will get a menu of breakpoint options. This allows you to remove this breakpoint, clear all breakpoints, or edit the breakpoint. + + + + Editing breakpoints + + Use the above menu to display the edit breakpoint dialog. This contains the following fields : + + + Conditional + Enter the condition that must be met before gdb will interrupt the program execution + + + Ignore count + How many times you want the code to pass through this breakpoint before gdb interrupts the program execution + + + Enable + When enabled, gdb will break at this breakpoint. When disabled gdb will not break here + + + + + + Clear all breakpoints + + Removes all the breakpoints for this program. + + + + Set/Unset watchpoints + + In the VAR view click with the Right Mouse button on a variable. A popup menu will be displayed allowing you to set a watchpoint on the local variable. This functionality is limited to the scope that the local variable is in. As the variable goes out of scope, the program breaks, and the watchpoint is deleted. + + WARNING: This is known to be problematic, so use caution when setting watchpoints on local variables. + + The watchpoint can also be set by a right mouse click on a previously entered watch variable, and selecting "toggle watchpoint" + + + + Set/Unset Watch variables + + At the bottom of the VAR view there is the "Watch" field where you can enter the variable name you wish to see display in the watch list. Enter the variable name and type enter or click on the "Add" button alongside the field. Right Mouse clicking on the watch variable in the treeview will bring up a menu so that you can remove the variable from the list. + + You can also enter a watch variable by right mouse clicking on a variable name in the editor window. This displays a popup menu with "watch: variable name" on it. + + + + Changing variable values + + This is done via the watch variable. If you have a variable "test" then to set "test" to 5, type "test=5" in the watch field and add it to the list. Note that "test" will be set to "5" every time the program stops at a breakpoint, so once you have set the variable, usually you should remove the item from the watch view. + + + + + + The floating toolbar + + The floating toolbar is a feature of the internal debugger, which greatly improves your comfort in debugging GUI applications. The toolbar is either on top of all windows displayed, or docked into the panel. When docked you can run your code by clicking on the docked icon. The function this performs is the "step over" function. Right clicking on the docked item allows you to restore the toolbar and optionally place focus on Kdevelop. + Besides the functions available from the Debug Menu, the floating toolbar offers two additional +functions: + + + Set focus on KDevelop + + Set the focus on KDevelop + + + + Set focus on app + + Set focus on app : This sets the focus on the window that had focus +when you pressed the "set focus on KDevelop" button. This is a compromise, it should set the focus on the application being debugged, but this is difficult to do. If anyone has a better solution than the current functionality then please let us know. + + + + + When gdb interrupts the program, probably because a breakpoint has been triggered, we highlight the "Set focus on KDevelop". We do not automatically switch focus to KDevelop so that you can view the application window at this point. Click on the "set focus" button to switch to KDevelop or press a button on the toolbar to perform your selected function. + + + + Shared libraries and breakpoints + + Shared libraries and breakpoints have a problem but that problem has a reasonable solution. The problem is that gdb will not accept breakpoints in source that is in a shared library which has not yet been opened, but will be opened via a dlopen. + The solution is to get gdb to tell us when a shared library has been opened. We do so by setting "stop-on 1". This means that when the user sets a breakpoint, we flag this breakpoint as pending, try to set the breakpoint and if gdb says it succeeded then flag it as active. If gdb is not successful then we leave the breakpoint as pending. The next instruction will always be "continue" . + This is known as "lazy breakpoints" + However, this can lead to a problem when you use the "step over" command and step over code that will load a library. This will trigger a break on the library load, and, normally the debugger would do a "continue" (i.e. run to the next breakpoint or the end of the code). The user, however, is expecting the program to stop at the next line, so in this situation we do not continue, but leave it at that point (which will be somewhere inside a dlopen command). This is disconcerting but cannot be helped. + + + + + CVS Integration + + KDevelop also takes care of managing your project via CVS repositories. The goal behind CVS (concurrent version control) is to enable groups of developers to work on the same source-tree independently and to merge changes into the repository. + Usually, the repository is located on a server. The initial repository contains the base set of files that the project includes; directories and files are then added or removed to the CVS by the developers. Locally, the developer works on his own copy of the CVS tree. He writes his changes into his local files and tests if his project still works, at least to the extent where incomplete sources don't prevent other developers from still working on the CVS repository if they receive the changes. + + + Creating a Repository + + When creating a new project with KDevelop, you can directly import the project as a CVS module. To enable this, you have to have CVS installed (which should be already, if not, revise your system installation or contact your system administrator). + + On the third page of the kappwiz; (VCS support), choose "CVS". Then the editing fields of this page become active and you can specify the import parameters, see below for the given options. The kappwiz; will then import the project source tree as a module into the CVS root directory and create your new project as a local copy of the CVS source tree that you will be working on. + Attention: to create an initial repository, you have to have write access to the CVS root directory! Also the CVS root directory has to be on the same machine where youre running KDevelop at the time of it's creation! If you want to have the repository on a dedicated CVS server either contact this servers system administrator to create the project with KDevelop on the server machine or do the following steps: + + create your project locally + import the project source tree as a module on the CVS server + delete local project source tree + check out the project source tree from CVS + enable CVS support in the project options dialog as described below after loading the project file of your CVS copy you checked out. + + + + For more details on CVS commands, please revise your system help on cvs, e.g. by doing a man cvs. + In the following we will discuss the options when creating a repository with the kappwiz; + + + + VCS Location: + + This is the CVS root directory where the project source tree will be imported and where commits, checkouts and updates take place. + + + + Repository in CVS + + This is the module name given for your project. As this is the same as your project directory you cant change that. + + + + Vendor Tag + + this is a tag for the entire branch + + + + Log Message + + is the first log message entry of the new module. When adding or commiting to the repository, you will be asked for a log message each time to document your changes to the repository source tree. + + + + Release Tag + + this specifies the tag under which your project source tree can be found, meaning that you can create several projects with the same module name in the CVS root which differ in the tag, so you can work on different branches of the same project. Example: KDE 2 is developed under the tag HEAD (default tag), KDE 1.1.2. can be found in the tag KDE_1_1_2_RELEASE. + + + + + After creating your project with the kappwiz;, the CVS support option is already set for your project, so you can commit and add changes in the way described below in the section "Using CVS Commands". + + + + Enabling <abbrev>CVS</abbrev> Support + + As CVS support is most often only needed by professionals or companies as well as by KDE developers maintaining their project over the KDE CVS server, using the CVS commands of KDevelop is optional. To enable the CVS commands, open the Project-Options dialog and change the option for Version Control to "CVS". + + + + Using CVS Commands + + The following commands are available in the LFV and RFV through context menus: + +Over a file not included in the repository: + + + Add to Repository + Adds the file to the repository. The file is set up to be added and will be introduced to the repository on the next commit command that includes the directory where the added file is located locally. + + + + Over a file included in the repository: + + + Update + Update the selected file with the CVS version + + + + Commit + Commit the selected file to the CVS repository + + + + Remove from Repository + Remove the file from the repository + + + + + Over a folder: + + + Add + Adds the folder to the repository + + + + Remove + removes the folder from the repository + + + + Update + Update the folder recursively to be in sync with the repository + + + + Commit + Commit any changes recursively to the repository + + + + The CVS commands all require a working network connection to the CVS server. When invoking a command, you will be shown a dialog with the command sent to the CVS server and the retrieved output. Thereby you can control what actually happens and if the command was successful or not. + As the CVS commands of KDevelop only work with the cvs system command and its commandline options, you should have no trouble to use the CVS features. + + + + + General Configuration + + This chapter describes how you can set your individual preferences about how KDevelop works. All settings addressed below can be found by the according entry in the "Options" menu. + + + Configuring the <guimenu>"Tools"</guimenu> Menu + + configuring the Tools menu"Options"-menu + As KDevelop supports the use of third-party programs within it's user interface, you are able to configure configure any program that suits your application development needs. This can be done by adding programs to the pre-defined ones in the "Tools" menu "Tools"-menu. + To change the "Tools" menu, select "ToolsTools" from the "Options" menu. This dialog allows you to specify the entry name, program, and any additional command line options you want to pass on execution. + To add a program, specify the menu entry, where an ampersand (&) is used as a menu-accelerator; you may compare with the already configured entries with the entry list. Select the binary and pass your commandline options. Then hit "Add" and the entry is added to the list. + To remove a program from the menu, select the entry name, and choose "Delete". + After leaving the configuration dialog configuration dialog, the "Tools" menu updates itself, so the new configuration is already usable without restarting KDevelop. + + + + File Viewer Options + + file viewers + + The Logical File Viewer can be configured by context menus completely. As it's intention is to separate files logically, to give a better overview over complex projects, one of the most used configurations is to create file groups. These can be set by opening the context menu with a right mouse button click over the project icon displayed at the root of the tree. The menu offers: + + + New File + Opens the New File New File dialog.Equal to the menubar command FileNew + + + New Class + Opens the Classgenerator to create a new class.>Equals to the menubar command ProjectNew ClassNew Class"Project"-menu + + + New Group + Opens a dialog to create a new group. There, set the group name and the file filter for the project files project files that will be displayed in this group. + + + Show relative path + Displays the files with their path name starting from the main project directory if checked; otherwise only the filename is shown. + + + Over a group folder, the according context menu offers: + + + New Group + Opens the New Group dialog as in the context menu described above. + + + Remove Group + removes the group from the LFVLFV. + + + Properties + Opens the properties of the group. There, you can edit the file filters as a list of wildcards, separated by commas. + + + + + + <application>KDevelop</application> Setup <indexterm><primary>KDevelop Setup</primary></indexterm> + + + Make-commandMake-command: + The General Options dialog lets you configure KDevelop's general settings. First, you should set the make-command make-command to that available on your system (generally make or gmake.) If the selected program does not exist, KDevelop will warn you the next time you invoke a make command. + + + + AutosaveAutosave: + If Autosave is checked, KDevelop will save all changed files periodically. The autosaving time range can be set to 3, 5, 15, or 30 minutes. + + + + AutoswitchAutoswitch: + If Autoswitch is enabled, the KDevelop windows will switch on and off according to the usage context, e.g. if you switch to documentation in the "Help" menu, the Documentation browser will be opened, together with the documentation tree, and the output outputwindow will be turned off. + + + + Startup Startup: + For starting KDevelop, you have the option to enable/disable the start-logostart-logo, normally shown during the time KDevelop is loading. Further, if you don't like the last project to be opened on startup, you can disable this default behavior. + + + + + + + Changing Keyboard Shortcuts <indexterm><primary>Keyboard Shortcuts</primary></indexterm> + + The Configure Keys dialog lets you configure the KDevelop key bindings. A key function can be configured by first choosing the menu entry, then the configuration can be changed by checking values like the Alt / Ctrlkeys etc. + Note that global keys can be configured in the KDE Control Center, such as open file and print. + + + + Documentation + + + Directories<indexterm><primary>documentation path</primary></indexterm> + + For setting up the documentation browser documentation browser to work correctly, KDevelop needs some information about where the HTML HTMLdocumentation is placed on the system. Therefore, the Documentation Path properties dialog needs the path of the Qt online documentation in HTML HTML as well as the path to the KDE-Library documentation. + Usually, the Qt-Documentation Qt-Documentation is placed in the same directory where Qt is installed; e.g. if Qt resides in /usr/local/qt, the path you have to enter is /usr/local/qt/html. For the KDE Documentation, you have to set the directory to the root of the documentation, assumed all KDE-Libs documentation resides in the same directory. Both paths can be selected by pressing the appropriate buttons, displaying a path-selection. If your system doesn't contain the documentation for the KDE-libs, you should first enter the next configuration dialog configuration dialog, Update KDE-DocumentationKDE-Documentation. This will create the documentation to a path of your choice, and also sets the KDE Library Doc path automatically. + + + + Options + + + Update KDE-Documentation <indexterm><primary>KDE-Documentation</primary></indexterm> + + For those users who don't have a recent copy of the KDE-libraries KDE-libraries documentation, especially the documentation for the files installed on the system, the "Update KDE-Documentation" KDE-Documentation dialog creates a new one or updates existing documentation. This function requires your system to have KDoc KDoc and qt2kdoc installed, included in the KDE-SDK KDE-SDK package. First you have to set up the path to your recent kdelibs sources, which is not the include-path for KDE! Just enter the path to the sources, like: /home/rnolden/kdelibs-1.1/. + Next, you can choose from three different installation modes, as: + + + Delete old Documentation and install to recent Documentation-path + this assumes that you already have documentation installed and it is placed in the path the entered in the Documentation Path-dialog. This will delete all documentation and install the newly generated documentation into the same path. + + + Delete old Documentation and install to new Documentation-path + this will result in deleting the old documentation as above, but gives you the choice to set up a new documentation path. + + + Leave old Documentation untouched and install to new Documentation path + + This is recommended for a new generation of the kdelibs documentation for users who didn't have one before, and for those who want to keep the previous documentation for an older kdelibs version. + + + + The "new KDE Libs Documentation path" needs to be set for options 2 and 3 of the installation mode. This is also recommended for users who generate a new documentation from scratch. + + After pressing the OK button, KDevelop will create a subdirectory KDocKDoc-reference in the documentation path containing the KDoc KDoc reference files. First, the qt library documentation classes classes will be indexed, to connect the Qt documentation with the documentation to be generated for the kdelibs. So it is important that you have set up the Qt documentation path first to ensure that it can be found by qt2kdoc. Finally, the KDE libs will be indexed and the documentation will be built with cross-references, to give browsing the most functionality. + NOTE: When using KDoc 2, you can additionally add a set of documentation for the the libraries in the KDE-Base and KOffice package. To do this, create the KDE-Libs documentation as described above. Then reopen the dialog and choose the path to the kdoc.rules file in the kdebase package or the koffice package respectively. For kdebase, this is located in kdebase/, in the root directory of the sources, for KOffice in koffice/lib. Select option 3 (Leave old Documentation untouched) and leave the output path below that option as it is. This will keep the kdelibs documentation and generate the kdebase-libraries (resp. the koffice-libraries) documentation to the same location, with cross-references to the kdelibs documentation. After generating the documentation the libraries are available in the documentation tree automatically. For further KDE packages coming with additional libraries you should look for the kdoc.rules file to generate additional documentation, in the same way as with the KDE-Base and KOffice packages. + + + + Create Search Database + + The Create Search Database dialog, accessed via the create button, allows the programmer to create a database, used to search for a keyword interactively. To create and use the documentation search function, you must have the program glimpse glimpse 4.0 or ht://Dig installed. + Preset are the options to index the given KDE-Library documentation, as well as the Qt DocumentationQt-Documentation, assuming the path to the documentation files were set in the "Documentation Path" dialog of the "Options menu. Additionally, the index can include directories the user has set up himself in the "additional directories to index" field. + After setting a path to an additional directory, the "Add" button must be pushed, to set the path. A path, once set, can be removed from the index by selecting the path in the path field, and pushing "Remove". Furthermore, the user is offered three different modes for the index size: tiny, small and medium. The higher the index size, obviously the more the index files will grow. On the other hand, a search in a bigger search-database will be faster and more successful, so we suggest choosing a "medium" size. For help on using the search function, see section Using the Documentation Browser. + + + + Create also KDOC-reference of your project + + This option allows you to create a cross-reference file for your project when generating the API documentation with KDoc. The cross-reference file will be placed in the references directory, and will make your project available in the documentation tree. If you dont have write access to the directory containing the reference files, you have to uncheck this option to generate the API documentation without errors. + + + + + + Debugger + + The default setup for KDevelop is to use the internal debugger. Click on "Use external debugger" if you wish to use a different debugger, and enter the name of the debugger to use. See your debuggers documentation for help on how to run it. + Selecting the internal debugger enables an additional set of options you can choose from: + + + Display static members + Displaying static members makes gdb slower in producing data within KDE and Qt. It may change the "signature" of data which Qstring and friends rely on. Check this option if you need to debug into these values. + + + + Display mangled names + When displaying the disassembled code, you can select to see the method's mangled names. Non-mangled names are, however, easier to read. + + + + Try setting BPs on lib load + This will try to set pending breakpoints on loading a library. If gdb hasn't seen a library that will be loaded via "dlopen" then it will refuse to set a breakpoint in that code. We can get gdb to stop on a library load and hence try to set the pending breakpoints. See Shared libraries and breakpoints for more details, and a "gotcha" relating to this behaviour. If you are not "dlopen"ing libs, leave this off. + + + + Enable floating toolbar + + This will allow you to use the floating toolbar to control the debugger, in addition to the menu and buttons. The toolbar is most useful for debugging GUI applications. For details see The floating toolbar. + + + + Enable separate terminal for application I/O + This allows you to enter terminal input when your application contains terminal input code (eg cin, fgets etc.). If you use terminal input in your app, then tick this option. Otherwise leave this off. + + + + + + + Setting Paths + + On the paths tab you can enter the paths to your Qt 2.x and KDE 2 installations, as well as where to create new projects. + To learn more about installing Qt 2.x / KDE 2 and configuring KDevelop for Qt 2.x and KDE 2 read the KDE Application Tutorials. + The default location for KDevelop to create new projects, is in the user's home directory. If you want to change this behaviour you can enter the desired location into the default project path field. + + + + + Questions and Answers + + This section addresses questions by users that were answered by the KDevelop Team or by their supporters on the KDevelop mailing list during experiences with the current versions of KDevelop, as well as bug reporting in general. + + + Bug Reporting <indexterm><primary>Bug Reporting</primary></indexterm> + + Another innovation of KDevelop is the integrated bug-reporting system via email. If you experience a bug, you have the option to send the KDevelop development team a bug report either by your email client or by the bug-report dialog. All bug-reports are collected on the KDevelop web site and can be reviewed on http://bugs.kde.org//db/pa/lkdevelop.html. + + To send bug reports, please use the email address submit@bugs.kde.org. If you want to use KDevelop for direct bug-reporting, choose "Bug Report" from the Help-menuHelp-menu. You are presented a report dialog that lets you enter all necessary information about the bug you found. After pressing "OK", the dialog's contents are sent automatically to the correct place. + + + + Where to get Information + + + + I have a question which is not addressed in the FAQ file, nor in the manuals of KDevelop. Where should I turn to? + Send all requests that are regarding KDevelop to the KDevelop mailing list. You can subscribe by sending an email with empty headers, and "subscribe youremailaddress" to kdevelop-request@barney.cs.uni-potsdam.de. All questions should go there and will be addressed there as well. If you stick to that, you will get the most help by the developers and all users having the same problems, as well as helping to keep the FAQ up to date. + The KDevelop Homepage KDevelop Homepage at http://www.kdevelop.org/ also contains a mailing-list mailing-list archive that allows you to browse the emails already sent by the subscribers. You should look there first as most problems should have been addressed already by the team or other users. + + + + Library and System Problems + + + + Wrong JPEG library version: library is 61, caller expects 62 + There are 2 possible fixes. + + When the kdelibs are installed it installs header files for the jpeg libraries, these are version 6.1, however most distributions (Redhat) use version 6.2 libraries. To fix this just remove jpeglib.hfrom /opt/kde/include. The pukka include file for version 6.2 should then be picked up. However looking at the error message above it may be the other way round. In any case ensure you only have one version of the header file, the library and that they are consistent. + It is useful to use the locate command to verify that you have the correct version of a library and header files e.g. +updatedb +locate libjpeg +locate jpeglib + + + You must recompiled kdesupport without jpeg library (./configure configure ). + + + + + + I get an error message that "AM_PROG_INSTALL is obsolete". What do I do? + If this is what you're seeing: + +make[2]: entering directory `/usr/local/src/kdevelop-0.3/po' +cd .. && automake --gnu --include-deps po/Makefile +aclocal.m4: 2709: `AM_PROG_INSTALL' is obsolete; use `AC_PROG_INSTALL' +make[2]: *** [Makefile.in] Error 1 + +then the workaround for automake-1.4/automake-2.13 users: Just run aclocal manually, then it will compile. + + + + What must I do, if configure configure said that I need giflib23. + Try a newer snap of kdesupport, or maybe you have another giflib installed? + + + How can I convert a KDevelop 0.2 project to a 0.3 one? + Please change the in the configureconfigure.in to a oneline version + + for example: +old version: + +AC_OUTPUT(Makefile \ +kdevelop/kwrite/Makefile \ +kdevelop/templates/Makefile +) + +new version: + +AC_OUTPUT(Makefile kdevelop/kwrite/Makefile kdevelop/templates/Makefile) + + + + + + I get the following Linker Linker errors errors when using SuSE Linux with KDE 1.1, what do I have to do to get KDevelop linked ? + +/usr/lib/libqt.so: +warning: multiple common of `QArrayT<char> type_info node' +ckdevelop.o: warning: previous common is here +ckdevelop.o: In function `CKDevelop::slotFileSaveAll(void)': +ckdevelop.o(.text+0x784): undefined reference to `kdebug(unsigned short, +unsigned short, char const *,...)' +ckdevelop.o(.text+0x839): undefined reference to `kdebug(unsigned short, +unsigned short, char const *,...)' +ckdevelop.o(.text+0x89d): undefined reference to `kdebug(unsigned short, +unsigned short, char const *,...)' +ckdevelop.o: In function `CKDevelop::slotFileSaveAs(void)': +ckdevelop.o(.text+0xd28): undefined reference to `kdebug(unsigned short, +unsigned short, char const *,...)' +ckdevelop.o: In function `CKDevelop::slotFileClose(void)': +ckdevelop.o(.text+0x1216): undefined reference to `kdebug(unsigned short, +unsigned short, char const *,...)' +ckdevelop.o(.text+0x1263): more undefined references to `kdebug(unsigned +short, unsigned short, char const *,...)' follow collect2: ld returned 1 +exit status make[2]: *** +[kdevelop] Error 1 make[2]: Leaving directory +'/home/LinuXDaten/Programme_Updates_Packete/KDE_Updates/Kdevelop_actual_snapshot/kdevelop-0.3/kdevelop' +make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory +`/home/LinuXDaten/Programme_Updates_Packete/KDE_Updates/Kdevelop_actual_snapshot/kdevelop-0.3' +make: *** [all-recursive-am] Error 2 + + If you have the SuSE rpms of KDE-1.1, you must recompile the kdelibs without the patch commited by SuSE, and reinstall them, or get an updated rpm of the kdelibs from ftp://ftp.suse.com + + + + + + + Usage Questions + + + + I see the KDevelop does not allow for usage of the delete key (or backspace deleting when text is marked). + Go to OptionsEditor and make sure that "Delete on Input" is enabled, then backspace and delete will work. + + + If I add files to my project, will they be automatically included and compiled? + Yes, they are included in the Makefile.amMakefile.am files then, and if you make a "Rebuild All" (./configure configure updates the MakefileMakefile files), your new added files will be included as well. + + + If I removed a file, I get some weird Linker Linker messages. What is wrong with my project? + If the removed file is a header file, that is automatically processed by automoc (running the Qt-Meta-Object-Compiler automatically on all headers), your removed header is still present as a moc-generated *.moc.cpp file and compiled. Remove the appropriate *.moc.cpp file and rebuild the project. + + + Configure complains about not being able to compile a small KDE application. Examining config.log reveals that it can't find the library libXext. + Install the package xdevel + + + Im developing an application where I need to set options to the preprocessor. If I add these in KDevelop to my project options, everything is ok, but when I distribute my package, the options set in KDevelop are not used. What do I have to do to make this work ? + Edit the file configure.in in your top level source directory. Here, you have to enter somewhere at the beginning: + + +CXXFLAGS=$(CXXFLAGS) " -DYOURDEFINE" +AC_SUBST(CXXFLAGS) + + + + Im already running a KDE 2 snapshot and I want to use KDevelop under KDE 2. What is the best way to do this ? + As KDevelop for KDE 2 is currently under development, you should consider using the current stable 1.x release of KDevelop for production usage. Running KDevelop 1.x under KDE 2 can be done by creating a shell-script: + + +#/bin/bash +QTDIR=/usr/lib/qt-1.44 export QTDIR +KDEDIR=/opt/kde export KDEDIR +exec /opt/kde/bin/kdevelop + + Save this file as e.g. kdevelop1 and set this file to executable with + + chmod 755 kdevelop1 + + + Then you can run KDevelop 1.x under KDE 2 by calling kdevelop1. +For developing KDE 2 applications with KDevelop 1.x you have to set the correct path in the KDevelop Setup even if youre running KDevelop under KDE 2. + + + + + + + + Authors + + Authors + + Main Developers + + Sandy Meier - Maintainer, Development co-ordinator, and homepage provider smeier@kdevelop.deMain development of: frame structure, IDE look'n feel, project management. + Stefan Heidrich sheidric@rz.uni-potsdam.deMain development of: kappwiz; KAppWizard, printing printing functionality + Ralf Nolden rnolden@kdevelop.deMain development of: KDevelop<->Dialog Editor interface, configuration functionality, online-help and handbooks + Jonas Nordin jonas.nordin@cenacle.seMain development of: Classviewer and -parser + Pascal Krahmer pascal@beast.deMain development of: Dialog Editor + Bernd Gehrmann bernd@physik.hu-berlin.deMain development of: Grep Dialog, CVS integration, new DOC tree + Jrgen Olsson jorgen@cenacle.netMain development of: Visual Classtree + Stefan Bartel bartel@rz.uni-potsdam.deMain development of: Real File Viewer + Walter Tasin tasin@kdevelop.deMain development of: Enhancements and Bug fixing + John Birch jbb@ihug.co.nzMain development of: Integrated Debugger + + + + Translation Co-ordination + + Martin Piskernig mpiskernig@kdevelop.de + + + + + + + + + Additions, patches, and bugfixes + + Pau Estalella Fernandez pef@upcnet.upc.es + Jost Schenk jost@schenk.de + David Barth dbarth@videotron.ca + Matthias Hipp matthias.hipp@gmx.de + Martin Piskernig martin.piskernig@stuwo.at + Jochen Wilhelmy digisnap@cs.tu-berlin.de + Matthias Hoelzer-Kluepfel mh@caldera.de + Matt Koss koss@napri.sk + Torsten Uhlmann tulmann@debis.com + Stefan Mars mars@lysator.liu.se + Nikolay Liber nikolay_liber@mail.ru + Gordon Tyler gtyler@iafrica.com + Huy Cuong Nguyen huyc@iquebec.com + John R. Zedlewski zedlwski@princeton.edu + Stephan Uhlmann suhlmann@gmx.de + Charles Egan cega@oklahoma.net + Andrew Morton morton@nortelnetworks.com + p_george p_george@club-internet.fr + Lubos Lunak l.lunak@sh.cvut.cz + Armin L. Schneider armin@uumail.de.uu.net + Martin Spirk spirk@kla.pvt.cz + Ralf Palsa rpalsa@eso.org + Richard Dale richard_dale@tipitina.demon.co.uk + Holger Schurig holger@holger.om.org + Dag Andersen dandersen@c2i.net + Alexis Mikhailov alexis@abc.cap.ru + Nils Ulltveit-Moe nils.ulltveit-moe@hia.no + Nick Hudson nick@nthcliff.demon.co.uk + R. Imura imura@cs.titech.ac.jp + Falk Brettschneider gigafalk@yahoo.com + Ralf Funken rfunken@kdevelop.de + + + + Other Contributions + Kdevelop contains sourcecode from the following applications: + + KWrite 0.98 © by Jochen Wilhelmy digisnaps@cs.tu-berlin.de + KDE Help © by Martin R. Jones mjones@kde.org + KSwallow © by Matthias Hoelzer hoelzer@physik.uni-wuerzburg.de + kcmlocale © by Matthias Hoelzer hoelzer@physik.uni-wuerzburg.de + + + Proofread and converted to Docbook SGML by Lauri Watts vampyr@atconnex.net + + + + + + Thanks + + We would like to express special thanks to all of our family members and friends, who supported us in several ways to let us construct and improve KDevelop. + + Further, we thank Jochen Wilhelmy for offering his program KWrite, and his help on integrating it into KDevelop. + + Thanks also to the KDE team, and Stephan Kulow, who gave us the possibility to work on KDevelop via CVS + + We hope that our free work on this product will lead to a better acceptance of Free Software and it's development. Without the help and idealism of many, the KDevelop IDE would never have been realized in such a short period of time, and we're proud that so many users already have reported good experiences and brought KDevelop to it's destiny: helping free software programmers to build a better world where users have the freedom of choice. + + + +Copyright + + +KDevelop Copyright 1998, 1999, 2000 The KDevelop Team. + +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., 675 Mass Ave, Cambridge, MA 02139, USA. + + + + +
+ diff -Nru kdevelop-3.9.98/doc/manual/Makefile.am kdevelop-4.0.1/doc/manual/Makefile.am --- kdevelop-3.9.98/doc/manual/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/manual/Makefile.am 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,4 @@ +EXTRA_DIST = index.docbook + +KDE_LANG = en +KDE_DOCS = AUTO diff -Nru kdevelop-3.9.98/doc/programming/index.cvlog kdevelop-4.0.1/doc/programming/index.cvlog --- kdevelop-3.9.98/doc/programming/index.cvlog 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/programming/index.cvlog 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,2639 @@ +=== LinuxDoc conversion errors =================== +-> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 3 `BOOK' 0 `book' +! Normally this should not be a problem, but check anyway ... + 9 `HTMLURL' 0 `
' + 10 `' 0 `' +! Check the authorname ( instead of ?) + 10 `INST' 0 `corpauthor' +! Use affiliation, only corpauthor, or leave this out + 13 `REF' 0 `' + 17 `TOC' 0 `' + 30 `HTMLURL' 0 `' + 52 `BF' 0 `' +! Check and correct manually + 58 `BF' 0 `' +! Check and correct manually + 75 `URL' 0 `' + 77 `HTMLURL' 0 `' + 78 `URL' 0 `' + 82 `URL' 0 `' + 83 `URL' 0 `' + 84 `URL' 0 `' + 85 `URL' 0 `' + 92 `HTMLURL' 0 `' + 101 `URL' 0 `' + 101 `BF' 0 `' +! Check and correct manually + 101 `BF' 0 `' +! Check and correct manually + 101 `BF' 0 `' +! Check and correct manually + 109 `URL' 0 `' + 141 `TT' 0 `' +! Check and correct manually + 146 `TSCREEN' 0 `' + 161 `CODE' 0 `' +! Because it is in TSCREEN + 163 `TT' 0 `' +! Check and correct manually + 163 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 163 `TT' 0 `' +! Check and correct manually + 166 `TT' 0 `' +! Check and correct manually + 166 `TT' 0 `' +! Check and correct manually + 166 `TT' 0 `' +! Check and correct manually + 169 `TT' 0 `' +! Check and correct manually + 169 `TT' 0 `' +! Check and correct manually + 169 `TT' 0 `' +! Check and correct manually + 169 `TT' 0 `' +! Check and correct manually + 169 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 169 `TT' 0 `' +! Check and correct manually + 169 `TT' 0 `' +! Check and correct manually + 169 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 169 `TT' 0 `' +! Check and correct manually + 177 `TT' 0 `' +! Check and correct manually + 177 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 177 `TT' 0 `' +! Check and correct manually + 183 `TT' 0 `' +! Check and correct manually + 183 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 190 `TT' 0 `' +! Check and correct manually + 190 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 193 `TT' 0 `' +! Check and correct manually + 193 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 194 `TT' 0 `' +! Check and correct manually + 195 `TT' 0 `' +! Check and correct manually + 201 `TT' 0 `' +! Check and correct manually + 201 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 204 `TT' 0 `' +! Check and correct manually + 205 `TT' 0 `' +! Check and correct manually + 205 `TT' 0 `' +! Check and correct manually + 205 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 208 `TT' 0 `' +! Check and correct manually + 208 `TT' 0 `' +! Check and correct manually + 213 `TT' 0 `' +! Check and correct manually + 213 `TT' 0 `' +! Check and correct manually + 213 `TT' 0 `' +! Check and correct manually + 213 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 213 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 213 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 213 `TT' 0 `' +! Check and correct manually + 213 `TT' 0 `' +! Check and correct manually + 213 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 213 `TT' 0 `' +! Check and correct manually + 213 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 213 `TT' 0 `' +! Check and correct manually + 213 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 213 `TT' 0 `' +! Check and correct manually + 221 `TT' 0 `' +! Check and correct manually + 223 `TT' 0 `' +! Check and correct manually + 223 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 223 `TT' 0 `' +! Check and correct manually + 224 `TT' 0 `' +! Check and correct manually + 224 `TT' 0 `' +! Check and correct manually + 224 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 227 `TT' 0 `' +! Check and correct manually + 233 `TT' 0 `' +! Check and correct manually + 233 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 233 `HTMLURL' 0 `' + 237 `BF' 0 `' +! Check and correct manually + 239 `TT' 0 `' +! Check and correct manually + 239 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 239 `TT' 0 `' +! Check and correct manually + 239 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 239 `TT' 0 `' +! Check and correct manually + 239 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 244 `User Interaction' 0 `User-Interaction' +! Reference changed: check if still unique + 244 `' 0 `' +! check if reference ID User-Interaction was meant for a section (if not, eg for an anchor, change manually) + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 257 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 257 `TT' 0 `' +! Check and correct manually + 257 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 257 `TT' 0 `' +! Check and correct manually + 257 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 257 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 257 `TT' 0 `' +! Check and correct manually + 263 `BF' 0 `' +! Check and correct manually + 265 `TT' 0 `' +! Check and correct manually + 265 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 269 `TT' 0 `' +! Check and correct manually + 269 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 269 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 270 `TT' 0 `' +! Check and correct manually + 270 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 270 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 273 `BF' 0 `' +! Check and correct manually + 275 `TT' 0 `' +! Check and correct manually + 275 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 275 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 276 `TT' 0 `' +! Check and correct manually + 276 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 276 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 279 `BF' 0 `' +! Check and correct manually + 281 `TT' 0 `' +! Check and correct manually + 281 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 282 `TT' 0 `' +! Check and correct manually + 282 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 283 `TT' 0 `' +! Check and correct manually + 283 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 286 `BF' 0 `' +! Check and correct manually + 288 `TT' 0 `' +! Check and correct manually + 288 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 289 `TT' 0 `' +! Check and correct manually + 289 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 290 `TT' 0 `' +! Check and correct manually + 290 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 293 `BF' 0 `' +! Check and correct manually + 295 `TT' 0 `' +! Check and correct manually + 295 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 296 `TT' 0 `' +! Check and correct manually + 296 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 297 `TT' 0 `' +! Check and correct manually + 297 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 301 `TT' 0 `' +! Check and correct manually + 301 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 301 `TT' 0 `' +! Check and correct manually + 301 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 307 `TT' 0 `' +! Check and correct manually + 314 `TT' 0 `' +! Check and correct manually + 314 `TT' 0 `' +! Check and correct manually + 316 `TT' 0 `' +! Check and correct manually + 316 `TT' 0 `' +! Check and correct manually + 318 `TT' 0 `' +! Check and correct manually + 319 `TT' 0 `' +! Check and correct manually + 319 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 319 `BF' 0 `' +! Check and correct manually + 321 `TT' 0 `' +! Check and correct manually + 321 `TT' 0 `' +! Check and correct manually + 325 `TT' 0 `' +! Check and correct manually + 325 `TT' 0 `' +! Check and correct manually + 325 `TT' 0 `' +! Check and correct manually + 333 `TT' 0 `' +! Check and correct manually + 333 `TT' 0 `' +! Check and correct manually + 341 `TSCREEN' 0 `' + 359 `CODE' 0 `' +! Because it is in TSCREEN + 361 `TT' 0 `' +! Check and correct manually + 361 `TT' 0 `' +! Check and correct manually + 361 `TT' 0 `' +! Check and correct manually + 361 `TT' 0 `' +! Check and correct manually + 365 `TT' 0 `' +! Check and correct manually + 371 `HTMLURL' 0 `' + 407 `TSCREEN' 0 `' + 425 `CODE' 0 `' +! Because it is in TSCREEN + 427 `TT' 0 `' +! Check and correct manually + 427 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 427 `TT' 0 `' +! Check and correct manually + 427 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 427 `TT' 0 `' +! Check and correct manually + 427 `TT' 0 `' +! Check and correct manually + 427 `TT' 0 `' +! Check and correct manually + 427 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 436 `TT' 0 `' +! Check and correct manually + 436 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 436 `TT' 0 `' +! Check and correct manually + 436 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 436 `TT' 0 `' +! Check and correct manually + 436 `TT' 0 `' +! Check and correct manually + 436 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 436 `HTMLURL' 0 `' + 438 `TT' 0 `' +! Check and correct manually + 438 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 438 `TT' 0 `' +! Check and correct manually + 438 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 441 `Creating new 0 `Creating-new-Applications' +! Reference changed: check if still unique + 441 `' 0 `' +! check if reference ID Creating-new-Applications was meant for a section (if not, eg for an anchor, change manually) + 479 `TT' 0 `' +! Check and correct manually + 483 `TT' 0 `' +! Check and correct manually + 494 `BF' 0 `' +! Check and correct manually + 495 `BF' 0 `' +! Check and correct manually + 497 `BF' 0 `' +! Check and correct manually + 498 `BF' 0 `' +! Check and correct manually + 498 `BF' 0 `' +! Check and correct manually + 498 `BF' 0 `' +! Check and correct manually + 498 `BF' 0 `' +! Check and correct manually + 499 `BF' 0 `' +! Check and correct manually + 501 `BF' 0 `' +! Check and correct manually + 502 `BF' 0 `' +! Check and correct manually + 503 `BF' 0 `' +! Check and correct manually + 556 `BF' 0 `' +! Check and correct manually + 558 `BF' 0 `' +! Check and correct manually + 558 `BF' 0 `' +! Check and correct manually + 559 `BF' 0 `' +! Check and correct manually + 559 `BF' 0 `' +! Check and correct manually + 560 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 560 `BF' 0 `' +! Check and correct manually + 561 `BF' 0 `' +! Check and correct manually + 564 `BF' 0 `' +! Check and correct manually + 566 `BF' 0 `' +! Check and correct manually + 566 `BF' 0 `' +! Check and correct manually + 567 `BF' 0 `' +! Check and correct manually + 567 `BF' 0 `' +! Check and correct manually + 568 `BF' 0 `' +! Check and correct manually + 568 `BF' 0 `' +! Check and correct manually + 569 `BF' 0 `' +! Check and correct manually + 569 `BF' 0 `' +! Check and correct manually + 572 `TT' 0 `' +! Check and correct manually + 576 `TSCREEN' 0 `' + 611 `CODE' 0 `' +! Because it is in TSCREEN + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 613 `TT' 0 `' +! Check and correct manually + 627 `TT' 0 `' +! Check and correct manually + 627 `TT' 0 `' +! Check and correct manually + 627 `TT' 0 `' +! Check and correct manually + 627 `TT' 0 `' +! Check and correct manually + 627 `TT' 0 `' +! Check and correct manually + 627 `TT' 0 `' +! Check and correct manually + 627 `TT' 0 `' +! Check and correct manually + 627 `TT' 0 `' +! Check and correct manually + 627 `TT' 0 `' +! Check and correct manually + 627 `TT' 0 `' +! Check and correct manually + 627 `TT' 0 `' +! Check and correct manually + 627 `TT' 0 `' +! Check and correct manually + 641 `TT' 0 `' +! Check and correct manually + 641 `TT' 0 `' +! Check and correct manually + 641 `TT' 0 `' +! Check and correct manually + 656 `TT' 0 `' +! Check and correct manually + 656 `The main() 0 `The-main-Function' +! Reference changed: check if still unique + 656 `' 0 `' +! check if reference ID The-main-Function was meant for a section (if not, eg for an anchor, change manually) + 658 `TT' 0 `' +! Check and correct manually + 658 `TT' 0 `' +! Check and correct manually + 658 `TT' 0 `' +! Check and correct manually + 662 `TSCREEN' 0 `' + 682 `CODE' 0 `' +! Because it is in TSCREEN + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 684 `TT' 0 `' +! Check and correct manually + 684 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 684 `TT' 0 `' +! Check and correct manually + 684 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 684 `TT' 0 `' +! Check and correct manually + 684 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 684 `TT' 0 `' +! Check and correct manually + 689 `TT' 0 `' +! Check and correct manually + 689 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 689 `TT' 0 `' +! Check and correct manually + 689 `TT' 0 `' +! Check and correct manually + 689 `TT' 0 `' +! Check and correct manually + 689 `TT' 0 `' +! Check and correct manually + 689 `TT' 0 `' +! Check and correct manually + 694 `TT' 0 `' +! Check and correct manually + 699 `TT' 0 `' +! Check and correct manually + 699 `TT' 0 `' +! Check and correct manually + 699 `TT' 0 `' +! Check and correct manually + 699 `TT' 0 `' +! Check and correct manually + 703 `TT' 0 `' +! Check and correct manually + 703 `TT' 0 `' +! Check and correct manually + 703 `TT' 0 `' +! Check and correct manually + 703 `TT' 0 `' +! Check and correct manually + 703 `TT' 0 `' +! Check and correct manually + 703 `TT' 0 `' +! Check and correct manually + 703 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 703 `TT' 0 `' +! Check and correct manually + 703 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 703 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 703 `TT' 0 `' +! Check and correct manually + 703 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 703 `TT' 0 `' +! Check and correct manually + 703 `TT' 0 `' +! Check and correct manually + 703 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 703 `TT' 0 `' +! Check and correct manually + 703 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 719 `TSCREEN' 0 `' + 746 `CODE' 0 `' +! Because it is in TSCREEN + 748 `TT' 0 `' +! Check and correct manually + 748 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 755 `BF' 0 `' +! Check and correct manually + 756 `BF' 0 `' +! Check and correct manually + 757 `BF' 0 `' +! Check and correct manually + 758 `BF' 0 `' +! Check and correct manually + 760 `BF' 0 `' +! Check and correct manually + 761 `BF' 0 `' +! Check and correct manually + 762 `BF' 0 `' +! Check and correct manually + 772 `TT' 0 `' +! Check and correct manually + 772 `TT' 0 `' +! Check and correct manually + 772 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 775 `TT' 0 `' +! Check and correct manually + 775 `TT' 0 `' +! Check and correct manually + 775 `TT' 0 `' +! Check and correct manually + 785 `TSCREEN' 0 `' + 788 `VERB' 0 `' +! Because it is in TSCREEN + 790 `TT' 0 `' +! Check and correct manually + 790 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 790 `TT' 0 `' +! Check and correct manually + 790 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 794 `TSCREEN' 0 `' + 796 `VERB' 0 `' +! Because it is in TSCREEN + 796 `TSCREEN' 0 `' + 800 `VERB' 0 `' +! Because it is in TSCREEN + 802 `TT' 0 `' +! Check and correct manually + 802 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 806 `TT' 0 `' +! Check and correct manually + 806 `TT' 0 `' +! Check and correct manually + 806 `TT' 0 `' +! Check and correct manually + 806 `TT' 0 `' +! Check and correct manually + 806 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 806 `TT' 0 `' +! Check and correct manually + 806 `TT' 0 `' +! Check and correct manually + 806 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 810 `TSCREEN' 0 `' + 812 `VERB' 0 `' +! Because it is in TSCREEN + 814 `TT' 0 `' +! Check and correct manually + 814 `TT' 0 `' +! Check and correct manually + 818 `TT' 0 `' +! Check and correct manually + 822 `TT' 0 `' +! Check and correct manually + 828 `TT' 0 `' +! Check and correct manually + 832 `TT' 0 `' +! Check and correct manually + 832 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 835 `TT' 0 `' +! Check and correct manually + 835 `TT' 0 `' +! Check and correct manually + 835 `TT' 0 `' +! Check and correct manually + 835 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 838 `TSCREEN' 0 `' + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 840 `VERB' 0 `' +! Because it is in TSCREEN + 842 `TT' 0 `' +! Check and correct manually + 842 `TT' 0 `' +! Check and correct manually + 842 `TT' 0 `' +! Check and correct manually + 848 `TT' 0 `' +! Check and correct manually + 848 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 848 `TT' 0 `' +! Check and correct manually + 851 `TT' 0 `' +! Check and correct manually + 851 `TT' 0 `' +! Check and correct manually + 851 `TT' 0 `' +! Check and correct manually + 851 `TT' 0 `' +! Check and correct manually + 856 `TT' 0 `' +! Check and correct manually + 856 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 856 `TT' 0 `' +! Check and correct manually + 856 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 856 `TT' 0 `' +! Check and correct manually + 856 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 856 `TT' 0 `' +! Check and correct manually + 856 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 856 `REF' 0 `' + 864 `TT' 0 `' +! Check and correct manually + 864 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 867 `TSCREEN' 0 `' + 869 `VERB' 0 `' +! Because it is in TSCREEN + 871 `TT' 0 `' +! Check and correct manually + 871 `TT' 0 `' +! Check and correct manually + 877 `TT' 0 `' +! Check and correct manually + 877 `TT' 0 `' +! Check and correct manually + 877 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 880 `BF' 0 `' +! Check and correct manually + 882 `TT' 0 `' +! Check and correct manually + 882 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 882 `TT' 0 `' +! Check and correct manually + 882 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 882 `REF' 0 `' + 892 `TT' 0 `' +! Check and correct manually + 892 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 896 `TT' 0 `' +! Check and correct manually + 896 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 896 `TT' 0 `' +! Check and correct manually + 903 `TT' 0 `' +! Check and correct manually + 903 `TT' 0 `' +! Check and correct manually + 903 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 903 `TT' 0 `' +! Check and correct manually + 903 `TT' 0 `' +! Check and correct manually + 903 `REF' 0 `' + 923 `TT' 0 `' +! Check and correct manually + 923 `TT' 0 `' +! Check and correct manually + 923 `TT' 0 `' +! Check and correct manually + 923 `TT' 0 `' +! Check and correct manually + 923 `TT' 0 `' +! Check and correct manually + 973 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 981 `TT' 0 `' +! Check and correct manually + 981 `TT' 0 `' +! Check and correct manually + 981 `TT' 0 `' +! Check and correct manually + 981 `TT' 0 `' +! Check and correct manually + 981 `TT' 0 `' +! Check and correct manually + 981 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 981 `TT' 0 `' +! Check and correct manually + 981 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 981 `TT' 0 `' +! Check and correct manually + 981 `TT' 0 `' +! Check and correct manually + 990 `TT' 0 `' +! Check and correct manually + 990 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 990 `TT' 0 `' +! Check and correct manually + 992 `TT' 0 `' +! Check and correct manually + 992 `TT' 0 `' +! Check and correct manually + 992 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + 992 `TT' 0 `' +! Check and correct manually + 993 `TT' 0 `' +! Check and correct manually + 994 `TT' 0 `' +! Check and correct manually + 995 `TT' 0 `' +! Check and correct manually +1003 `TT' 0 `' +! Check and correct manually +1003 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1003 `TT' 0 `' +! Check and correct manually +1003 `TT' 0 `' +! Check and correct manually +1003 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1003 `TT' 0 `' +! Check and correct manually +1003 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1003 `TT' 0 `' +! Check and correct manually +1003 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1003 `TT' 0 `' +! Check and correct manually +1003 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1003 `TT' 0 `' +! Check and correct manually +1014 `TSCREEN' 0 `' +1054 `CODE' 0 `' +! Because it is in TSCREEN +1058 `TSCREEN' 0 `' + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1060 `VERB' 0 `' +! Because it is in TSCREEN +1062 `TT' 0 `' +! Check and correct manually +1062 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1062 `TT' 0 `' +! Check and correct manually +1062 `TT' 0 `' +! Check and correct manually +1062 `TT' 0 `' +! Check and correct manually +1062 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1079 `TT' 0 `' +! Check and correct manually +1079 `TT' 0 `' +! Check and correct manually +1079 `TT' 0 `' +! Check and correct manually +1079 `TT' 0 `' +! Check and correct manually +1079 `TT' 0 `' +! Check and correct manually +1079 `TT' 0 `' +! Check and correct manually +1079 `TT' 0 `' +! Check and correct manually +1079 `TT' 0 `' +! Check and correct manually +1091 `TT' 0 `' +! Check and correct manually +1091 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1091 `TT' 0 `' +! Check and correct manually +1091 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1095 `TSCREEN' 0 `' +1097 `VERB' 0 `' +! Because it is in TSCREEN +1099 `TT' 0 `' +! Check and correct manually +1099 `TT' 0 `' +! Check and correct manually +1099 `TT' 0 `' +! Check and correct manually +1102 `TT' 0 `' +! Check and correct manually +1102 `TT' 0 `' +! Check and correct manually +1106 `TT' 0 `' +! Check and correct manually +1106 `TT' 0 `' +! Check and correct manually +1106 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1106 `TT' 0 `' +! Check and correct manually +1117 `TT' 0 `' +! Check and correct manually +1117 `TT' 0 `' +! Check and correct manually +1117 `TT' 0 `' +! Check and correct manually +1117 `TT' 0 `' +! Check and correct manually +1117 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1117 `TT' 0 `' +! Check and correct manually +1117 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1117 `TT' 0 `' +! Check and correct manually +1117 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1117 `TT' 0 `' +! Check and correct manually +1117 `TT' 0 `' +! Check and correct manually +1117 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1117 `TT' 0 `' +! Check and correct manually +1117 `TT' 0 `' +! Check and correct manually +1117 `TT' 0 `' +! Check and correct manually +1126 `TT' 0 `' +! Check and correct manually +1129 `REF' 0 `' +1129 `TT' 0 `' +! Check and correct manually +1135 `TT' 0 `' +! Check and correct manually +1135 `TSCREEN' 0 `' +1144 `VERB' 0 `' +! Because it is in TSCREEN +1146 `REF' 0 `' +1146 `TT' 0 `' +! Check and correct manually +1150 `TT' 0 `' +! Check and correct manually +1150 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1152 `TSCREEN' 0 `' +1160 `VERB' 0 `' +! Because it is in TSCREEN +1162 `TT' 0 `' +! Check and correct manually +1162 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1162 `TT' 0 `' +! Check and correct manually +1162 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1162 `TT' 0 `' +! Check and correct manually +1162 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1162 `TT' 0 `' +! Check and correct manually +1162 `TT' 0 `' +! Check and correct manually +1162 `TT' 0 `' +! Check and correct manually +1162 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1162 `TT' 0 `' +! Check and correct manually +1162 `TT' 0 `' +! Check and correct manually +1162 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1162 `TT' 0 `' +! Check and correct manually +1162 `TT' 0 `' +! Check and correct manually +1174 `TSCREEN' 0 `' +1197 `VERB' 0 `' +! Because it is in TSCREEN +1197 `TT' 0 `' +! Check and correct manually +1197 `TT' 0 `' +! Check and correct manually +1197 `TT' 0 `' +! Check and correct manually +1204 `BF' 0 `' +! Check and correct manually +1223 `TT' 0 `' +! Check and correct manually +1223 `TT' 0 `' +! Check and correct manually +1223 `TT' 0 `' +! Check and correct manually +1233 `TT' 0 `' +! Check and correct manually +1277 `TT' 0 `' +! Check and correct manually +1277 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1277 `TT' 0 `' +! Check and correct manually +1277 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1277 `TT' 0 `' +! Check and correct manually +1277 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1277 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1277 `TT' 0 `' +! Check and correct manually +1277 `TT' 0 `' +! Check and correct manually +1296 `TT' 0 `' +! Check and correct manually +1296 `TT' 0 `' +! Check and correct manually +1296 `TT' 0 `' +! Check and correct manually +1307 `TT' 0 `' +! Check and correct manually +1307 `TT' 0 `' +! Check and correct manually +1320 `TT' 0 `' +! Check and correct manually +1320 `TT' 0 `' +! Check and correct manually +1323 `TT' 0 `' +! Check and correct manually +1323 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1323 `TT' 0 `' +! Check and correct manually +1325 `TT' 0 `' +! Check and correct manually +1327 `TT' 0 `' +! Check and correct manually +1327 `TT' 0 `' +! Check and correct manually +1329 `TT' 0 `' +! Check and correct manually +1332 `TT' 0 `' +! Check and correct manually +1342 `TT' 0 `' +! Check and correct manually +1342 `TT' 0 `' +! Check and correct manually +1342 `TT' 0 `' +! Check and correct manually +1348 `TT' 0 `' +! Check and correct manually +1348 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1349 `TT' 0 `' +! Check and correct manually +1349 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1349 `TT' 0 `' +! Check and correct manually +1349 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1349 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1351 `TT' 0 `' +! Check and correct manually +1351 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1351 `TT' 0 `' +! Check and correct manually +1351 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1353 `TT' 0 `' +! Check and correct manually +1353 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1353 `TT' 0 `' +! Check and correct manually +1353 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1356 `TT' 0 `' +! Check and correct manually +1361 `Creating your own 0 `Creating-your-own-Views' +! Reference changed: check if still unique +1361 `' 0 `' +! check if reference ID Creating-your-own-Views was meant for a section (if not, eg for an anchor, change manually) +1366 `TT' 0 `' +! Check and correct manually +1369 `TT' 0 `' +! Check and correct manually +1369 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1376 `BF' 0 `' +! Check and correct manually +1378 `TT' 0 `' +! Check and correct manually +1378 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1382 `TT' 0 `' +! Check and correct manually +1382 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1382 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1383 `TT' 0 `' +! Check and correct manually +1383 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1383 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1386 `BF' 0 `' +! Check and correct manually +1388 `TT' 0 `' +! Check and correct manually +1388 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1388 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1389 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1389 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1389 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1392 `BF' 0 `' +! Check and correct manually +1394 `TT' 0 `' +! Check and correct manually +1394 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1394 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1395 `TT' 0 `' +! Check and correct manually +1395 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1395 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1396 `TT' 0 `' +! Check and correct manually +1396 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1396 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1399 `BF' 0 `' +! Check and correct manually +1401 `TT' 0 `' +! Check and correct manually +1401 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1401 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1402 `TT' 0 `' +! Check and correct manually +1402 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1402 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1403 `TT' 0 `' +! Check and correct manually +1403 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1403 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1406 `BF' 0 `' +! Check and correct manually +1408 `TT' 0 `' +! Check and correct manually +1408 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1408 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1409 `TT' 0 `' +! Check and correct manually +1409 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1409 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1410 `TT' 0 `' +! Check and correct manually +1410 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1410 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1417 `BF' 0 `' +! Check and correct manually +1425 `Configuring 0 `Configuring-Menubars-and-Toolbars' +! Reference changed: check if still unique +1425 `' 0 `' +! check if reference ID Configuring-Menubars-and-Toolbars was meant for a section (if not, eg for an anchor, change manually) +1439 `TT' 0 `' +! Check and correct manually +1454 `CODE' 0 `' +! Because it contains a newline character +1467 `CODE' 0 `' +! Because it contains a newline character +1469 `COMMENT' 0 `note' +! Too conspicuous for an ex-comment. Find a better element! (note that does not render its content in HTML)! +1469 `TT' 0 `' +! Check and correct manually +1469 `TT' 0 `' +! Check and correct manually +1469 `TT' 0 `' +! Check and correct manually +1480 `TT' 0 `' +! Check and correct manually +1480 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1480 `TT' 0 `' +! Check and correct manually +1483 `TT' 0 `' +! Check and correct manually +1483 `TT' 0 `' +! Check and correct manually +1483 `TT' 0 `' +! Check and correct manually +1485 `TT' 0 `' +! Check and correct manually +1485 `TT' 0 `' +! Check and correct manually +1491 `TT' 0 `' +! Check and correct manually +1494 `TT' 0 `' +! Check and correct manually +1494 `TT' 0 `' +! Check and correct manually +1494 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1494 `TT' 0 `' +! Check and correct manually +1494 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1494 `TT' 0 `' +! Check and correct manually +1505 `TT' 0 `' +! Check and correct manually +1508 `TT' 0 `' +! Check and correct manually +1508 `TT' 0 `' +! Check and correct manually +1508 `TT' 0 `' +! Check and correct manually +1515 `TT' 0 `' +! Check and correct manually +1515 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1519 `TT' 0 `' +! Check and correct manually +1519 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1523 `TT' 0 `' +! Check and correct manually +1523 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1523 `TT' 0 `' +! Check and correct manually +1523 `TT' 0 `' +! Check and correct manually +1529 `TT' 0 `' +! Check and correct manually +1529 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1529 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1529 `TT' 0 `' +! Check and correct manually +1529 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1529 `TT' 0 `' +! Check and correct manually +1529 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1529 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1548 `BF' 0 `' +! Check and correct manually +1550 `BF' 0 `' +! Check and correct manually +1550 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1552 `BF' 0 `' +! Check and correct manually +1554 `BF' 0 `' +! Check and correct manually +1555 `BF' 0 `' +! Check and correct manually +1556 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1557 `BF' 0 `' +! Check and correct manually +1557 `TT' 0 `' +! Check and correct manually +1557 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1560 `BF' 0 `' +! Check and correct manually +1560 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1562 `BF' 0 `' +! Check and correct manually +1563 `BF' 0 `' +! Check and correct manually +1564 `BF' 0 `' +! Check and correct manually +1565 `BF' 0 `' +! Check and correct manually +1566 `BF' 0 `' +! Check and correct manually +1567 `BF' 0 `' +! Check and correct manually +1568 `BF' 0 `' +! Check and correct manually +1571 `BF' 0 `' +! Check and correct manually +1574 `BF' 0 `' +! Check and correct manually +1576 `BF' 0 `' +! Check and correct manually +1578 `BF' 0 `' +! Check and correct manually +1578 `TT' 0 `' +! Check and correct manually +1578 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1579 `BF' 0 `' +! Check and correct manually +1580 `BF' 0 `' +! Check and correct manually +1580 `TT' 0 `' +! Check and correct manually +1581 `BF' 0 `' +! Check and correct manually +1583 `BF' 0 `' +! Check and correct manually +1584 `BF' 0 `' +! Check and correct manually +1585 `BF' 0 `' +! Check and correct manually +1585 `TT' 0 `' +! Check and correct manually +1585 `TT' 0 `' +! Check and correct manually +1586 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1586 `TT' 0 `' +! Check and correct manually +1588 `BF' 0 `' +! Check and correct manually +1588 `TT' 0 `' +! Check and correct manually +1590 `BF' 0 `' +! Check and correct manually +1590 `TT' 0 `' +! Check and correct manually +1596 `TT' 0 `' +! Check and correct manually +1596 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1596 `TT' 0 `' +! Check and correct manually +1596 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1596 `TT' 0 `' +! Check and correct manually +1596 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1604 `REF' 0 `' +1606 `REF' 0 `' +1608 `REF' 0 `' +1609 `REF' 0 `' +1610 `REF' 0 `' +1612 `REF' 0 `' +1613 `REF' 0 `' +1615 `REF' 0 `' +1616 `REF' 0 `' +1617 `REF' 0 `' +1618 `REF' 0 `' +1619 `REF' 0 `' +1621 `REF' 0 `' +1623 `REF' 0 `' +1624 `REF' 0 `' +1626 `REF' 0 `' +1627 `REF' 0 `' +1630 `REF' 0 `' +1631 `REF' 0 `' +1632 `REF' 0 `' +1636 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1636 `' 0 `' +! check if reference ID QWidget was meant for a section (if not, eg for an anchor, change manually) +1638 `TT' 0 `' +! Check and correct manually +1638 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1638 `TT' 0 `' +! Check and correct manually +1638 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1642 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1644 `BF' 0 `' +! Check and correct manually +1645 `BF' 0 `' +! Check and correct manually +1646 `BF' 0 `' +! Check and correct manually +1647 `BF' 0 `' +! Check and correct manually +1648 `BF' 0 `' +! Check and correct manually +1649 `BF' 0 `' +! Check and correct manually +1650 `BF' 0 `' +! Check and correct manually +1652 `BF' 0 `' +! Check and correct manually +1654 `BF' 0 `' +! Check and correct manually +1656 `BF' 0 `' +! Check and correct manually +1657 `BF' 0 `' +! Check and correct manually +1658 `BF' 0 `' +! Check and correct manually +1659 `BF' 0 `' +! Check and correct manually +1660 `BF' 0 `' +! Check and correct manually +1662 `BF' 0 `' +! Check and correct manually +1664 `BF' 0 `' +! Check and correct manually +1665 `BF' 0 `' +! Check and correct manually +1666 `BF' 0 `' +! Check and correct manually +1668 `BF' 0 `' +! Check and correct manually +1670 `BF' 0 `' +! Check and correct manually +1671 `BF' 0 `' +! Check and correct manually +1672 `BF' 0 `' +! Check and correct manually +1673 `BF' 0 `' +! Check and correct manually +1674 `BF' 0 `' +! Check and correct manually +1675 `BF' 0 `' +! Check and correct manually +1676 `BF' 0 `' +! Check and correct manually +1677 `BF' 0 `' +! Check and correct manually +1678 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1679 `BF' 0 `' +! Check and correct manually +1680 `BF' 0 `' +! Check and correct manually +1685 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1685 `' 0 `' +! check if reference ID QButton was meant for a section (if not, eg for an anchor, change manually) +1687 `TT' 0 `' +! Check and correct manually +1687 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1689 `REF' 0 `' +1691 `REF' 0 `' +1691 `REF' 0 `' +1691 `REF' 0 `' +1692 `TT' 0 `' +! Check and correct manually +1692 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1696 `BF' 0 `' +! Check and correct manually +1698 `BF' 0 `' +! Check and correct manually +1700 `BF' 0 `' +! Check and correct manually +1702 `BF' 0 `' +! Check and correct manually +1703 `BF' 0 `' +! Check and correct manually +1705 `BF' 0 `' +! Check and correct manually +1711 `' 0 `' +! check if reference ID QCheckBox was meant for a section (if not, eg for an anchor, change manually) +1713 `REF' 0 `' +1713 `REF' 0 `' +1716 `BF' 0 `' +! Check and correct manually +1718 `BF' 0 `' +! Check and correct manually +1723 `' 0 `' +! check if reference ID QPushButton was meant for a section (if not, eg for an anchor, change manually) +1725 `REF' 0 `' +1725 `REF' 0 `' +1728 `BF' 0 `' +! Check and correct manually +1730 `BF' 0 `' +! Check and correct manually +1731 `BF' 0 `' +! Check and correct manually +1731 `TT' 0 `' +! Check and correct manually +1731 `TT' 0 `' +! Check and correct manually +1733 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1735 `BF' 0 `' +! Check and correct manually +1737 `BF' 0 `' +! Check and correct manually +1742 `' 0 `' +! check if reference ID QRadioButton was meant for a section (if not, eg for an anchor, change manually) +1744 `REF' 0 `' +1744 `REF' 0 `' +1747 `BF' 0 `' +! Check and correct manually +1749 `BF' 0 `' +! Check and correct manually +1754 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +1754 `' 0 `' +! check if reference ID QComboBox was meant for a section (if not, eg for an anchor, change manually) +1756 `REF' 0 `' +1762 `' 0 `' +! check if reference ID QFrame was meant for a section (if not, eg for an anchor, change manually) +1764 `REF' 0 `' +1769 `BF' 0 `' +! Check and correct manually +1777 `' 0 `' +! check if reference ID QGroupBox was meant for a section (if not, eg for an anchor, change manually) +1779 `REF' 0 `' +1779 `REF' 0 `' +1782 `BF' 0 `' +! Check and correct manually +1784 `BF' 0 `' +! Check and correct manually +1789 `' 0 `' +! check if reference ID QLCDNumber was meant for a section (if not, eg for an anchor, change manually) +1791 `REF' 0 `' +1791 `REF' 0 `' +1794 `BF' 0 `' +! Check and correct manually +1796 `BF' 0 `' +! Check and correct manually +1797 `BF' 0 `' +! Check and correct manually +1803 `' 0 `' +! check if reference ID QLabel was meant for a section (if not, eg for an anchor, change manually) +1805 `REF' 0 `' +1805 `REF' 0 `' +1808 `BF' 0 `' +! Check and correct manually +1813 `BF' 0 `' +! Check and correct manually +1815 `BF' 0 `' +! Check and correct manually +1817 `BF' 0 `' +! Check and correct manually +1819 `BF' 0 `' +! Check and correct manually +1820 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1827 `' 0 `' +! check if reference ID QProgressBar was meant for a section (if not, eg for an anchor, change manually) +1829 `REF' 0 `' +1829 `REF' 0 `' +1832 `BF' 0 `' +! Check and correct manually +1834 `BF' 0 `' +! Check and correct manually +1840 `' 0 `' +! check if reference ID QScrollView was meant for a section (if not, eg for an anchor, change manually) +1842 `REF' 0 `' +1842 `REF' 0 `' +1844 `REF' 0 `' +1849 `' 0 `' +! check if reference ID QListView was meant for a section (if not, eg for an anchor, change manually) +1851 `REF' 0 `' +1851 `REF' 0 `' +1851 `REF' 0 `' +1853 `REF' 0 `' +1857 `BF' 0 `' +! Check and correct manually +1859 `BF' 0 `' +! Check and correct manually +1860 `BF' 0 `' +! Check and correct manually +1861 `BF' 0 `' +! Check and correct manually +1862 `BF' 0 `' +! Check and correct manually +1862 `REF' 0 `' +1863 `BF' 0 `' +! Check and correct manually +1864 `BF' 0 `' +! Check and correct manually +1865 `BF' 0 `' +! Check and correct manually +1866 `BF' 0 `' +! Check and correct manually +1866 `REF' 0 `' +1868 `BF' 0 `' +! Check and correct manually +1870 `BF' 0 `' +! Check and correct manually +1871 `BF' 0 `' +! Check and correct manually +1875 `' 0 `' +! check if reference ID QSpinBox was meant for a section (if not, eg for an anchor, change manually) +1877 `REF' 0 `' +1877 `REF' 0 `' +1880 `BF' 0 `' +! Check and correct manually +1882 `BF' 0 `' +! Check and correct manually +1883 `BF' 0 `' +! Check and correct manually +1884 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1885 `BF' 0 `' +! Check and correct manually +1886 `BF' 0 `' +! Check and correct manually +1887 `BF' 0 `' +! Check and correct manually +1892 `' 0 `' +! check if reference ID QTableView was meant for a section (if not, eg for an anchor, change manually) +1894 `REF' 0 `' +1894 `REF' 0 `' +1894 `REF' 0 `' +1896 `REF' 0 `' +1896 `REF' 0 `' +1899 `' 0 `' +! check if reference ID QListBox was meant for a section (if not, eg for an anchor, change manually) +1901 `REF' 0 `' +1901 `REF' 0 `' +1901 `REF' 0 `' +1904 `BF' 0 `' +! Check and correct manually +1906 `BF' 0 `' +! Check and correct manually +1907 `BF' 0 `' +! Check and correct manually +1908 `BF' 0 `' +! Check and correct manually +1909 `BF' 0 `' +! Check and correct manually +1910 `BF' 0 `' +! Check and correct manually +1911 `BF' 0 `' +! Check and correct manually +1912 `BF' 0 `' +! Check and correct manually +1914 `BF' 0 `' +! Check and correct manually +1916 `BF' 0 `' +! Check and correct manually +1922 `' 0 `' +! check if reference ID QMultiLineEdit was meant for a section (if not, eg for an anchor, change manually) +1924 `REF' 0 `' +1924 `REF' 0 `' +1924 `REF' 0 `' +1927 `BF' 0 `' +! Check and correct manually +1929 `BF' 0 `' +! Check and correct manually +1930 `BF' 0 `' +! Check and correct manually +1931 `BF' 0 `' +! Check and correct manually +1932 `BF' 0 `' +! Check and correct manually +1933 `BF' 0 `' +! Check and correct manually +1935 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1937 `BF' 0 `' +! Check and correct manually +1943 `' 0 `' +! check if reference ID QLineEdit was meant for a section (if not, eg for an anchor, change manually) +1945 `REF' 0 `' +1948 `BF' 0 `' +! Check and correct manually +1950 `BF' 0 `' +! Check and correct manually +1951 `BF' 0 `' +! Check and correct manually +1952 `BF' 0 `' +! Check and correct manually +1953 `BF' 0 `' +! Check and correct manually +1954 `BF' 0 `' +! Check and correct manually +1959 `' 0 `' +! check if reference ID QScrollBar was meant for a section (if not, eg for an anchor, change manually) +1961 `REF' 0 `' +1961 `TT' 0 `' +! Check and correct manually +1964 `BF' 0 `' +! Check and correct manually +1966 `BF' 0 `' +! Check and correct manually +1967 `BF' 0 `' +! Check and correct manually +1968 `BF' 0 `' +! Check and correct manually +1969 `BF' 0 `' +! Check and correct manually +1970 `BF' 0 `' +! Check and correct manually +1970 `TT' 0 `' +! Check and correct manually +1976 `' 0 `' +! check if reference ID QSlider was meant for a section (if not, eg for an anchor, change manually) +1978 `REF' 0 `' +1978 `TT' 0 `' +! Check and correct manually +1981 `BF' 0 `' +! Check and correct manually +1983 `BF' 0 `' +! Check and correct manually +1984 `BF' 0 `' +! Check and correct manually +1985 `BF' 0 `' +! Check and correct manually +1986 `BF' 0 `' +! Check and correct manually +1986 `TT' 0 `' +! Check and correct manually +1987 `BF' 0 `' +! Check and correct manually +1987 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1998 `REF' 0 `' +2000 `REF' 0 `' +2002 `REF' 0 `' +2004 `REF' 0 `' +2005 `REF' 0 `' +2008 `REF' 0 `' +2010 `REF' 0 `' +2012 `REF' 0 `' +2014 `REF' 0 `' +2015 `REF' 0 `' +2016 `REF' 0 `' +2017 `REF' 0 `' +2018 `REF' 0 `' +2020 `REF' 0 `' +2021 `REF' 0 `' +2024 `REF' 0 `' +2026 `REF' 0 `' +2029 `REF' 0 `' +2032 `' 0 `' +! check if reference ID KColorButton was meant for a section (if not, eg for an anchor, change manually) +2035 `REF' 0 `' +2040 `BF' 0 `' +! Check and correct manually +2044 `' 0 `' +! check if reference ID KKeyButton was meant for a section (if not, eg for an anchor, change manually) +2047 `' 0 `' +! check if reference ID KCombo was meant for a section (if not, eg for an anchor, change manually) +2050 `REF' 0 `' +2055 `BF' 0 `' +! Check and correct manually +2056 `BF' 0 `' +! Check and correct manually +2057 `BF' 0 `' +! Check and correct manually +2061 `' 0 `' +! check if reference ID KDatePicker was meant for a section (if not, eg for an anchor, change manually) +2067 `BF' 0 `' +! Check and correct manually +2071 `' 0 `' +! check if reference ID KLedLamp was meant for a section (if not, eg for an anchor, change manually) +2074 `' 0 `' +! check if reference ID KProgress was meant for a section (if not, eg for an anchor, change manually) +2077 `' 0 `' +! check if reference ID KSeparator was meant for a section (if not, eg for an anchor, change manually) +2083 `BF' 0 `' +! Check and correct manually +2087 `' 0 `' +! check if reference ID KDateTable was meant for a section (if not, eg for an anchor, change manually) +2090 `' 0 `' +! check if reference ID KTreeList was meant for a section (if not, eg for an anchor, change manually) +2096 `BF' 0 `' +! Check and correct manually +2097 `BF' 0 `' +! Check and correct manually +2098 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2099 `BF' 0 `' +! Check and correct manually +2100 `BF' 0 `' +! Check and correct manually +2101 `BF' 0 `' +! Check and correct manually +2102 `BF' 0 `' +! Check and correct manually +2106 `BF' 0 `' +! Check and correct manually +2107 `BF' 0 `' +! Check and correct manually +2113 `' 0 `' +! check if reference ID KRestrictedLine was meant for a section (if not, eg for an anchor, change manually) +2116 `' 0 `' +! check if reference ID KLed was meant for a section (if not, eg for an anchor, change manually) +2119 `REF' 0 `' +2124 `BF' 0 `' +! Check and correct manually +2141 `TT' 0 `' +! Check and correct manually +2141 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2144 `TT' 0 `' +! Check and correct manually +2144 `TT' 0 `' +! Check and correct manually +2144 `TT' 0 `' +! Check and correct manually +2162 `TT' 0 `' +! Check and correct manually +2162 `TT' 0 `' +! Check and correct manually +2162 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2174 `BF' 0 `' +! Check and correct manually +2183 `TT' 0 `' +! Check and correct manually +2183 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2183 `TT' 0 `' +! Check and correct manually +2183 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2201 `TT' 0 `' +! Check and correct manually +2201 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2201 `TT' 0 `' +! Check and correct manually +2204 `TT' 0 `' +! Check and correct manually +2204 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2206 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2206 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2206 `TT' 0 `' +! Check and correct manually +2206 `TT' 0 `' +! Check and correct manually +2206 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2216 `TT' 0 `' +! Check and correct manually +2217 `TT' 0 `' +! Check and correct manually +2218 `TT' 0 `' +! Check and correct manually +2224 `TT' 0 `' +! Check and correct manually +2226 `TT' 0 `' +! Check and correct manually +2226 `TT' 0 `' +! Check and correct manually +2226 `TT' 0 `' +! Check and correct manually +2226 `TT' 0 `' +! Check and correct manually +2226 `TT' 0 `' +! Check and correct manually +2226 `TT' 0 `' +! Check and correct manually +2233 `TT' 0 `' +! Check and correct manually +2239 `TT' 0 `' +! Check and correct manually +2239 `TT' 0 `' +! Check and correct manually +2239 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2239 `TT' 0 `' +! Check and correct manually +2241 `TT' 0 `' +! Check and correct manually +2241 `TT' 0 `' +! Check and correct manually +2241 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2244 `TT' 0 `' +! Check and correct manually +2245 `TT' 0 `' +! Check and correct manually +2245 `TT' 0 `' +! Check and correct manually +2246 `TT' 0 `' +! Check and correct manually +2246 `TT' 0 `' +! Check and correct manually +2246 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2246 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2246 `TT' 0 `' +! Check and correct manually +2255 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2255 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2255 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2255 `TT' 0 `' +! Check and correct manually +2255 `TT' 0 `' +! Check and correct manually +2264 `TT' 0 `' +! Check and correct manually +2264 `TT' 0 `' +! Check and correct manually +2264 `TT' 0 `' +! Check and correct manually +2269 `TT' 0 `' +! Check and correct manually +2269 `TT' 0 `' +! Check and correct manually +2298 `TT' 0 `' +! Check and correct manually +2298 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2307 `TSCREEN' 0 `' +2309 `VERB' 0 `' +! Because it is in TSCREEN +2309 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2309 `TT' 0 `' +! Check and correct manually +2309 `TT' 0 `' +! Check and correct manually +2309 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2314 `TT' 0 `' +! Check and correct manually +2314 `TT' 0 `' +! Check and correct manually +2314 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2317 `TSCREEN' 0 `' +2319 `VERB' 0 `' +! Because it is in TSCREEN +2319 `TT' 0 `' +! Check and correct manually +2319 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2331 `TT' 0 `' +! Check and correct manually +2331 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2331 `TT' 0 `' +! Check and correct manually +2331 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2337 `TSCREEN' 0 `' +2339 `VERB' 0 `' +! Because it is in TSCREEN +2344 `TT' 0 `' +! Check and correct manually +2344 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2344 `HTMLURL' 0 `' +2344 `TT' 0 `' +! Check and correct manually +2344 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2350 `TT' 0 `' +! Check and correct manually +2350 `TT' 0 `' +! Check and correct manually +2360 `TSCREEN' 0 `' +2364 `VERB' 0 `' +! Because it is in TSCREEN +2366 `TT' 0 `' +! Check and correct manually +2366 `TT' 0 `' +! Check and correct manually +2366 `TT' 0 `' +! Check and correct manually +2366 `TT' 0 `' +! Check and correct manually +2366 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2366 `TT' 0 `' +! Check and correct manually +2383 `TT' 0 `' +! Check and correct manually +2384 `TT' 0 `' +! Check and correct manually +2384 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2384 `TT' 0 `' +! Check and correct manually +2384 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2384 `TT' 0 `' +! Check and correct manually +2384 `TT' 0 `' +! Check and correct manually +2387 `TT' 0 `' +! Check and correct manually +2387 `TSCREEN' 0 `' +2395 `VERB' 0 `' +! Because it is in TSCREEN +2395 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2397 `TSCREEN' 0 `' + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2404 `VERB' 0 `' +! Because it is in TSCREEN +2425 `URL' 0 `' +2425 `TT' 0 `' +! Check and correct manually +2425 `TT' 0 `' +! Check and correct manually +2438 `LIST' 0 `' +! Would be better? (uses !) +2442 `TT' 0 `' +! Check and correct manually +2442 `TT' 0 `' +! Check and correct manually +2456 `TT' 0 `' +! Check and correct manually +2467 `TT' 0 `' +! Check and correct manually +2467 `TT' 0 `' +! Check and correct manually +2473 `TT' 0 `' +! Check and correct manually +2473 `TT' 0 `' +! Check and correct manually +2473 `TT' 0 `' +! Check and correct manually +2473 `TT' 0 `' +! Check and correct manually +2501 `VERB' 0 `' +! Check and correct manually +2511 `TT' 0 `' +! Check and correct manually +2512 `TT' 0 `' +! Check and correct manually +2514 `TT' 0 `' +! Check and correct manually +2515 `TT' 0 `' +! Check and correct manually +2516 `TT' 0 `' +! Check and correct manually +2518 `TT' 0 `' +! Check and correct manually +2519 `TT' 0 `' +! Check and correct manually +2520 `TT' 0 `' +! Check and correct manually +2533 `TT' 0 `' +! Check and correct manually +2533 `TT' 0 `' +! Check and correct manually +2533 `TT' 0 `' +! Check and correct manually +2533 `TT' 0 `' +! Check and correct manually +2554 `CODE' 0 `' +! Because it contains a newline character +2556 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2556 `TT' 0 `' +! Check and correct manually +2556 `TT' 0 `' +! Check and correct manually +2556 `TT' 0 `' +! Check and correct manually +2578 `LIST' 0 `' +! Would be better? (uses !) +2585 `TT' 0 `' +! Check and correct manually +2585 `TT' 0 `' +! Check and correct manually +2585 `TT' 0 `' +! Check and correct manually +2585 `TT' 0 `' +! Check and correct manually +2592 `TT' 0 `' +! Check and correct manually +2592 `TT' 0 `' +! Check and correct manually +2592 `TT' 0 `' +! Check and correct manually +2596 `TT' 0 `' +! Check and correct manually +2596 `TT' 0 `' +! Check and correct manually +2599 `TT' 0 `' +! Check and correct manually +2599 `TT' 0 `' +! Check and correct manually +2613 `TSCREEN' 0 `' +2615 `VERB' 0 `' +! Because it is in TSCREEN +2617 `TT' 0 `' +! Check and correct manually +2617 `TT' 0 `' +! Check and correct manually +2624 `TT' 0 `' +! Check and correct manually +2624 `TT' 0 `' +! Check and correct manually +2624 `TT' 0 `' +! Check and correct manually +2658 `BF' 0 `' +! Check and correct manually +2663 `TSCREEN' 0 `' +2667 `VERB' 0 `' +! Because it is in TSCREEN +2672 `BF' 0 `' +! Check and correct manually +2672 `HTMLURL' 0 `' +2685 `CODE' 0 `' +! Because it contains a newline character +2686 `TSCREEN' 0 `' +2689 `VERB' 0 `' +! Because it is in TSCREEN +2696 `TSCREEN' 0 `' + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2706 `VERB' 0 `' +! Because it is in TSCREEN +2708 `TSCREEN' 0 `' +2720 `VERB' 0 `' +! Because it is in TSCREEN +2722 `TSCREEN' 0 `' +2726 `VERB' 0 `' +! Because it is in TSCREEN +2727 `TT' 0 `' +! Check and correct manually +2747 `TT' 0 `' +! Check and correct manually +2754 `TT' 0 `' +! Check and correct manually +2754 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2756 `TT' 0 `' +! Check and correct manually +2756 `TT' 0 `' +! Check and correct manually +2756 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2757 `TT' 0 `' +! Check and correct manually +2757 `TT' 0 `' +! Check and correct manually +2757 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2760 `TT' 0 `' +! Check and correct manually +2760 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2765 `TT' 0 `' +! Check and correct manually +2765 `NCDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2772 `TT' 0 `' +! Check and correct manually +2780 `TSCREEN' 0 `' +2785 `VERB' 0 `' +! Because it is in TSCREEN +2787 `TT' 0 `' +! Check and correct manually +2787 `TT' 0 `' +! Check and correct manually +2787 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2787 `TT' 0 `' +! Check and correct manually +2787 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2787 `TT' 0 `' +! Check and correct manually +2787 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +2791 `TSCREEN' 0 `' + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2795 `VERB' 0 `' +! Because it is in TSCREEN +2811 `URL' 0 `' +2818 `HTMLURL' 0 `' +2819 `HTMLURL' 0 `' +2821 `HTMLURL' 0 `' +2831 `HTMLURL' 0 `' +2831 `HTMLURL' 0 `' +2835 `HTMLURL' 0 `' +2838 `HTMLURL' 0 `' +2841 `HTMLURL' 0 `' +2844 `HTMLURL' 0 `' +2844 `URL' 0 `' +2844 `HTMLURL' 0 `' +2847 `URL' 0 `' +2850 `HTMLURL' 0 `' +2853 `HTMLURL' 0 `' +2856 `HTMLURL' 0 `' +2856 `URL' 0 `' +2856 `HTMLURL' 0 `' +2862 `HTMLURL' 0 `' +2865 `HTMLURL' 0 `' +2868 `HTMLURL' 0 `' +2868 `URL' 0 `' +2868 `HTMLURL' 0 `' +2873 `HTMLURL' 0 `' +2876 `HTMLURL' 0 `' +2879 `HTMLURL' 0 `' +2879 `URL' 0 `' +2883 `HTMLURL' 0 `' +2883 `HTMLURL' 0 `' +2883 `HTMLURL' 0 `' +2883 `HTMLURL' 0 `' +2883 `HTMLURL' 0 `' +2883 `HTMLURL' 0 `' +2892 `HTMLURL' 0 `' +2895 `HTMLURL' 0 `' +2898 `HTMLURL' 0 `' +2901 `HTMLURL' 0 `' +2904 `HTMLURL' 0 `' +2907 `HTMLURL' 0 `' +2910 `HTMLURL' 0 `' +2913 `HTMLURL' 0 `' +2916 `HTMLURL' 0 `' +2919 `HTMLURL' 0 `' +2922 `HTMLURL' 0 `' +2922 `HTMLURL' 0 `' +2927 `HTMLURL' 0 `' +2930 `HTMLURL' 0 `' +2933 `HTMLURL' 0 `' +2936 `HTMLURL' 0 `' +2939 `HTMLURL' 0 `' +2965 `BF' 0 `' +! Check and correct manually +2965 `HTMLURL' 0 `' +2971 `BF' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +2977 `BF' 0 `' +! Check and correct manually +3000 `TSCREEN' 0 `' +3003 `CODE' 0 `' +! Because it is in TSCREEN +3006 `BF' 0 `' +! Check and correct manually +3008 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +3014 `BF' 0 `' +! Check and correct manually +3022 `BF' 0 `' +! Check and correct manually +3024 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +3048 `URL' 0 `' +3048 `HTMLURL' 0 `' +3051 `BF' 0 `' +! Check and correct manually +3068 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +3192 `TSCREEN' 0 `' +3202 `VERB' 0 `' +! Because it is in TSCREEN +3244 `TT' 0 `' +! Check and correct manually +3244 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +3244 `TT' 0 `' +! Check and correct manually +3244 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +3244 `TT' 0 `' +! Check and correct manually +3244 `TT' 0 `' +! Check and correct manually +3244 `TT' 0 `' +! Check and correct manually +3252 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +3255 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +3255 `TSCREEN' 0 `' +3273 `VERB' 0 `' +! Because it is in TSCREEN +3273 `TT' 0 `' +! Check and correct manually +3273 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +3273 `TT' 0 `' +! Check and correct manually +3273 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +3273 `TT' 0 `' +! Check and correct manually +3278 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +3280 `TSCREEN' 0 `' +3283 `VERB' 0 `' +! Because it is in TSCREEN +3283 `TT' 0 `' +! Check and correct manually +3283 `TT' 0 `' +! Check and correct manually +3283 `TT' 0 `' +! Check and correct manually +3290 `TSCREEN' 0 `' +3292 `VERB' 0 `' +! Because it is in TSCREEN +3294 `TT' 0 `' +! Check and correct manually +3294 `TT' 0 `' +! Check and correct manually +3294 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +3300 `TT' 0 `' +! Check and correct manually +3300 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +3311 `TT' 0 `' +! Check and correct manually +3311 `CDX' 0 `' +! Check if element literal is appropriate (e.g. command, envar, etc. could be better). +3313 `TSCREEN' 0 `' +3348 `VERB' 0 `' +! Because it is in TSCREEN +3350 `TT' 0 `' +! Check and correct manually +3387 `BF' 0 `' +! Check and correct manually +3388 `BF' 0 `' +! Check and correct manually +3389 `BF' 0 `' +! Check and correct manually +3390 `BF' 0 `' +! Check and correct manually +3391 `BF' 0 `' +! Check and correct manually +3392 `BF' 0 `' +! Check and correct manually +3407 `TT' 0 `' +! Check and correct manually +3437 `TSCREEN' 0 `' +3449 `VERB' 0 `' +! Because it is in TSCREEN +3461 `TT' 0 `' +! Check and correct manually +3461 `TT' 0 `' +! Check and correct manually +3475 `TT' 0 `' +! Check and correct manually +3483 `TSCREEN' 0 `' +3496 `VERB' 0 `' +! Because it is in TSCREEN + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +3502 `TSCREEN' 0 `' +3504 `VERB' 0 `' +! Because it is in TSCREEN +3506 `HTMLURL' 0 `' +3514 `URL' 0 `' +3529 `BF' 0 `' +! Check and correct manually +3529 `TT' 0 `' +! Check and correct manually +3531 `TT' 0 `' +! Check and correct manually +3533 `TT' 0 `' +! Check and correct manually +3533 `TT' 0 `' +! Check and correct manually +3533 `TT' 0 `' +! Check and correct manually +3539 `TT' 0 `' +! Check and correct manually +3539 `TT' 0 `' +! Check and correct manually +3544 `TT' 0 `' +! Check and correct manually +3544 `TT' 0 `' +! Check and correct manually +3550 `TT' 0 `' +! Check and correct manually +3551 `TT' 0 `' +! Check and correct manually +3551 `TT' 0 `' +! Check and correct manually +3551 `TT' 0 `' +! Check and correct manually +3556 `TT' 0 `' +! Check and correct manually +3556 `HTMLURL' 0 `' +3556 `TT' 0 `' +! Check and correct manually +3561 `TT' 0 `' +! Check and correct manually +3562 `TT' 0 `' +! Check and correct manually +3562 `TT' 0 `' +! Check and correct manually +3562 `TSCREEN' 0 `' +3572 `VERB' 0 `' +! Because it is in TSCREEN +3577 `REF' 0 `' +3577 `TT' 0 `' +! Check and correct manually +3585 `TSCREEN' 0 `' +3594 `VERB' 0 `' +! Because it is in TSCREEN +3596 `TT' 0 `' +! Check and correct manually +3598 `TSCREEN' 0 `' + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +3607 `VERB' 0 `' +! Because it is in TSCREEN +3609 `TT' 0 `' +! Check and correct manually +3609 `TT' 0 `' +! Check and correct manually +3616 `TT' 0 `' +! Check and correct manually +3621 `TT' 0 `' +! Check and correct manually +3622 `TT' 0 `' +! Check and correct manually +3622 `TT' 0 `' +! Check and correct manually +3622 `TT' 0 `' +! Check and correct manually +3622 `TT' 0 `' +! Check and correct manually +3622 `TT' 0 `' +! Check and correct manually +3622 `TT' 0 `' +! Check and correct manually +3626 `TSCREEN' 0 `' +3630 `VERB' 0 `' +! Because it is in TSCREEN +3632 `TT' 0 `' +! Check and correct manually +3632 `TT' 0 `' +! Check and correct manually +3635 `TT' 0 `' +! Check and correct manually +3635 `TT' 0 `' +! Check and correct manually +3636 `TT' 0 `' +! Check and correct manually +3636 `TT' 0 `' +! Check and correct manually +3636 `TT' 0 `' +! Check and correct manually +3640 `TSCREEN' 0 `' +3653 `VERB' 0 `' +! Because it is in TSCREEN +3655 `TSCREEN' 0 `' +3663 `VERB' 0 `' +! Because it is in TSCREEN +3678 `TT' 0 `' +! Check and correct manually +3819 `BF' 0 `' +! Check and correct manually +3819 `HTMLURL' 0 `' +3821 `BF' 0 `' +! Check and correct manually +3821 `HTMLURL' 0 `' +3823 `BF' 0 `' +! Check and correct manually +3823 `HTMLURL' 0 `' + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +3825 `BF' 0 `' +! Check and correct manually +3825 `HTMLURL' 0 `' +3827 `BF' 0 `' +! Check and correct manually +3827 `HTMLURL' 0 `' +3829 `BF' 0 `' +! Check and correct manually +3829 `HTMLURL' 0 `' +3834 `' 0 `' +! check if reference ID Copyright was meant for a section (if not, eg for an anchor, change manually) +3836 `TSCREEN' 0 `' +3853 `VERB' 0 `' +! Because it is in TSCREEN +3855 `APPENDIX' 0 `appendix' +! Make of all the *following* chapters appendices ( -> ) and remove the generated tags. +3860 `TSCREEN' 0 `' +3891 `VERB' 0 `' +! Because it is in TSCREEN +=== NIF conversion errors ======================== +=== Finalising errors =========================== diff -Nru kdevelop-3.9.98/doc/programming/index.docbook kdevelop-4.0.1/doc/programming/index.docbook --- kdevelop-3.9.98/doc/programming/index.docbook 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/programming/index.docbook 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,5503 @@ +kdevelop"> + LaTeX"> + TeX"> + + + ]]> +]> + + + +The KDevelop Programming Handbook +The User Guide to C++ Application Design for the K Desktop Environment (KDE) with the KDevelop IDE, Version 1.2 + + +Ralf +Nolden + +The KDevelop Team +
Ralf.Nolden@post.rwth-aachen.de
+
+
+
+21/03/2000 +1.02.00 + +This handbook itself is part of the KDevelop Integrated Development Environment and is therefore also licensed under the GNU General +Public License; see Copyright for more information. + + +KDE +KDevelop +programming +application design + +
+ + +Introduction + +As Unix Systems are becoming more and more popular to even beginners working with computer machines due to its advantages in regards of +stability and functionality, most are somehow disappointed, because those applications don't have a consistent look and each one +behaves different from another. With KDE, developers have an almost perfect way to create first-class applications for Unix desktop +systems to get a wider user community by the mere quality their applications have to offer. Therefore, KDE becomes more and more +popular as a base for programming design, and developers want to take advantage of the possibilities that the system has to offer. + + +What you should know already + +For making the best use of this programming handbook, we assume that you already know about the C++ programming language; if not, you +should make yourself familiar with that first. Information about C++ is available through various sources either in printed form at +your local bookstore or by tutorials found on the Internet. Knowledge about the design of Graphical User Interfaces is not required, as +this handbook tries to cover the application design for KDE programs, which also includes an introduction into the Qt Qt toolkit as well +as the KDE libraries KDE libraries and the design of User Interfaces. Also, you should have made yourself comfortable with KDevelop by reading +The User Manual to KDevelop, which contains a descriptive review of the functionality provided by +the IDE. + + + +About this Handbook + +This handbook has been written to give developers an introduction into KDE application development by using the KDevelop +Integrated Development Environment. + +The following chapters therefore give an introduction on how to create projects, explains the sourcecodes already generated and shows +how to extend the given sources on various topics such as toolbar toolbars, menu bars and view areas. + +Then the dialogeditor is discussed in detail, explaining how widgets are created and covers widget properties settings in detail +for all provided widgets. + +Finally, you will learn about several topics that will complete your knowledge in regards of project design and helps you work out +additional issues besides coding such as adding API API documentation and extending online-manuals. + +In the next chapter + +we'll take a look at the Qt Qt and KDE libraries KDE libraries, showing basic concepts and why things are the way they are. +Also, we will discuss how to create the tutorial applications provided with the Qt Qt toolkit by using KDevelop, so beginners can already +see first results with a few steps, and thereby will learn how to make use of some of KDevelop's best features. + +In the following chapters you will learn: + + +how to create an application with the KAppWizard, + + +what the project skeleton already provides, + + +what the code already created means, + + +how to create your own views, + + +how to extend your application's functionality by dialog, menu bars and toolbar toolbars + + +how to make your application user friendly by providing help functions and + + +how to write SGML SGML online documentation. + + + + + + +Additional Information + +Additional information about Qt Qt/KDE programming is available by various sources: + + + +Programming with Qt Qt by Matthias Kalle Dalheimer, published by O'Reilly (see \|\|, covering +almost all aspects of the Qt Qt GUI toolkit and contains examples as well. + + +The User Manual to KDevelop, provided with the KDevelop IDE, + + +Online-Reference to the Qt Qt-library, provided with your copy of the Qt Qt toolkit in +HTML and available as PostScript on \|\| + + +On the Internet, see + + +the Troll Tech web site at \|\|, + + +the KDE web site at \|\|, + + +the KDE developer web site at \|\| + + +the KDevelop home page at \|\| + + + + + + + +Additionally, you should look for help by subscribing to the various mailing lists, whose addresses are available on the mentioned +web sites, and on the Usenet newsgroups dedicated to users of KDE and Unix Systems as well as about the C and C++ programming language. + +For obtaining help about the KDevelop IDE, you should send requests to our mailinglist at kdevelop@fara3.cs.uni-potsdam.de. Mind that the KDevelop team is dedicated to +provide the means to enable you to program applications and therefore is not intended as a technical support team in cases where the +applications you're developing don't work due to implementation errors or misconfigurations of your operating system. By this, we ask +all users to take advantage of the mailinglist in any case you're running into problems with the use of the IDE itself, as well as for +bug reports and suggestions for improving the functionality of the development environment. + + + + +The KDE and Qt <indexterm remap="idx"><primary>Qt</primary></indexterm> Libraries + +The Norwegian company Troll Tech (\|\|) provides a so-called GUI toolkit, named Qt Qt. Thereby, GUI means +"Graphical User Interface", and therefore, Qt Qt-based applications represent themselves with buttons, windows etc, +allowing user input by visualizing the functions an application provides. Such a toolkit is needed for developing graphical +applications that run on the X-Window interface on Unix Systems, because X does not contain a pre-defined user interface itself. +Although other toolkits are also available to create User Interfaces, Qt Qt offers some technical advantages that make application design +very easy. Additionally, the Qt Qt toolkit is also available for Microsoft Windows systems, which allows developers to provide their +applications for both platforms. + +The KDE Team (\|\|) joined together with the goal to make using Unix +Systems more friendly, and decided to use the Qt Qt toolkit for the development of a window manager on X-Window, plus a variety of tools +included with the KDE packages. The K Desktop Environment therefore contains the window manager kwm, the file manager kfm and +the launch panel kpanel as the main components plus a variety of first-class utilities and applications. After KDE was out, a lot +of developers turned their eyes towards the new environment and what it has to offer them. The KDE libraries KDE libraries are providing essential +methods and classes that make all applications designed with them look similar and consistent, so the user has the great advantage that +he only has to get accustomed with an application's specific usage, not with handling dialogs or buttons. Also, KDE programs integrate +themselves into the desktop and are able to interact with the file manager via drag'n drop drag'n drop, offer session management and many more, +if all features offered by the KDE libraries KDE libraries are used. + +Both, the Qt Qt toolkit and the KDE libraries KDE libraries, are implemented in the C++ programming language; therefore applications that make use of +these libraries are also mostly written in C++. In the following chapter, we'll make a short trip through the libraries to see what +already is provided and how Qt Qt and KDE applications KDE applications are created in general. + + +The Qt <indexterm remap="idx"><primary>Qt</primary></indexterm> GUI Toolkit + +As said, the Qt Qt library is a toolkit that offers graphical elements that are used for creating GUI applications and are needed for +X-Window programming. Additionally, the toolkit offers: + + + +A complete set of classes and methods ready to use even for non-graphical programming issues, + + +A good solution towards user interaction by virtual methods and the signal/slot mechanism, + + +A set of predefined GUI-elements, called "widgets", that can be used easily for creating the visible elements + + +Additional completely pre-defined dialogs that are often used in applications such as progress and file dialogs. + + + + +Therefore knowing the Qt Qt classes is very essential, even if you only want to program KDE-applications. To have an impression on the +basic concept how GUI-applications are constructed and compiled, we'll first have a look at a sample Qt Qt-only program; then we'll extend +it to a KDE program. + + +The first Qt <indexterm remap="idx"><primary>Qt</primary></indexterm> Application + +As usual, programs in C++ have to contain a main() function, which is the starting point for application execution. As we want +them to be graphically visible in windows and offering user interaction, we first have to know, how they can show themselves to the +user. For an example, we'll have a look at the first tutorial included with the Qt Qt Online Reference Documentation and explain the basic +execution steps; also why and how the application window appears: + +#include <qapplication.h> +#include <qpushbutton.h> + +int main( int argc, char **argv ) +{ +QApplication a( argc, argv ); + +QPushButton hello( "Hello world!" ); +hello.resize( 100, 30 ); + +a.setMainWidget( &&;hello ); +hello.show(); +return a.exec(); +} + + + +This application merely paints a window containing a button with "Hello world" as its text. As for all Qt Qt-based applications, you first +have to create an instance of the class QApplicationQApplication, represented by a. + +Next, the program creates an instance of the class QPushButton called hello, this will be the button. The constructor of +hello gets a string as a parameter, which is the contents of the widget visible as the buttons text. + +Then the resize() method is called on the hello button. This changes the default size a widget (which is in this +case the QPushButton) has when created to the length of 100 pixels and the height of 30 pixels. Finally, the setMainWidget() +method is called for a and the show() method for hello. The QApplicationQApplication is finally executed by a.exec(), +enters the main event loop and waits until it has to return an integer value to the overlaying Operating System signaling that the +application is exited. + + + +The Reference Documentation for Qt <indexterm remap="idx"><primary>Qt</primary></indexterm> + +Now, let's have a quick look at the reference documentation of the Qt Qt library. To do this, start KDevelop and select "Qt Qt-library" from +the "Help"-menu in the menubar. The documentation browser opens and shows you the start page of the Qt Qt reference. This will be your +first place to get information about Qt Qt, it's classes and the available functions they provide. Also, the above program is the first +that is included in the tutorials section. To get to the classes we want to have a look at, QApplicationQApplication and QPushButton, +select "Alphabetical Class List" and search for the according names. Follow either of them to have a look at the class documentation class documentation. + +For QApplicationQApplication, you will see the constructor and all other methods that this class provides. If you follow a link, you will get +more information about the usage and meaning of the methods, which is very useful when you sometimes can't detect the correct use or +want to have an example. This also counts for the KDE library documentation, which uses a similar documentation type; therefore this is +almost all you have to know about using the class-references with the documentation browser. + + + +Interpretation of the Sample + +Starting with QApplicationQApplication, you will find all the methods used in our first example: + + + +the constructor QApplicationQApplication(), + + +the setMainWidget() method and + + +the exec() method. + + + + +The interpretation why we use these methods is very simple: + + +first create an instance of the class QApplicationQApplication with the constructor, so we can make use of the GUI elements provided by +Qt Qt, + + +create a widget which will be the contents of our program window, + + +set the widget as the main widget for a, + + +execute the a instance of QApplicationQApplication. + + + + +The second object of our program is the pushbutton, an instance of the class QPushButton. From the two constructors given to +create an instance, we used the second: this accepts a text, which is the label contents of the button; here, it is the string "Hello +world!". Then we called the resize() method to change the size of the button according to it's contents- the button has to be +larger to make the string completely visible. + +But what about the show() method ? Now, you see that like most other widgets, QPushButton is based on a single-inheritance- +here, the documentation says, Inherits QButtonQButton. Follow the link to the QButtonQButton class. This shows you a lot of other +methodss that are inherited by QPushButton, which we'll use later to explain the signal/slot mechanism. Anyway, the show() method +is not listed, therefore, it must be a method that is provided by inheritance as well. The class that QButtonQButton inherits, is +QWidgetQWidget. Just follow the link again, and you will see a whole bunch of methods that the QWidgetQWidget class provides; including the +show() method. Now we understand what was done in the sample with the button: + + +create an instance of QPushButton, use the second constructor to set the buttons text, + + +resize the widget to it's contents, + + +set the widget as the main widget of the QApplicationQApplication instance a, + + +tell the widget to display itself on the screen by calling show(), an inherited method from QWidgetQWidget. + + + + +After calling the exec() method, the application is visible to the user, showing a window with the button showing "Hello world!". +Now, GUI programs behave somewhat differently than procedural applications. The main thing here is that the application enters a +so-called "main event loop". This means that the program has to wait for user actions and then react to it, also that for a Qt Qt +application, the program has to be in the main event loop to start the event handling. The next section tells you in short what this +means to the programmer and what Qt Qt offers to process user events. + +(For already advanced users: The button has no parent declared in the constructor, therefore it is a top-level widget alone and runs in +a local event loop which doesn't need to wait for the main event loop, see the QWidgetQWidget class documentation class documentation and The KDE Library Reference Guide) + +Summary: + +A Qt Qt application always has to have one instance of the class QApplicationQApplication. This provides that we can create windows that are the +graphical representation of programs to the user and allow interaction. The window contents itself is called a "Main Widget", meaning +that all graphical elements are based on the class QWidgetQWidget and can be any type of widget that fits the needs of the application to +communicate with the user. Therefore, all user elements somehow have to inherit QWidgetQWidget to be visible. + + + +User Interaction + +After reading the last sections, you should already know: + + +What the Qt Qt-library provides in terms of GUI applications, + + +how a program using Qt Qt is created and + + +where and how to find information about classes that you want to use with the documentation browser + + + + +Now we'll turn to give the application "life" by processing user events. Generally, the user has two ways to interact with a program: +the mouse and the keyboard. For both ways, a graphical user interface has to provide methods that detect actions and methods that do +something as a reaction to these actions. + +The Window system therefore sends all interaction events to the according application. The QApplicationQApplication then sends them to the active +window as a QEventQEvent and the widgets themselves have to decide what to do with them. A widget receives the event and processes +QWidgetQWidget::event(QEventQEvent*)/, which then decides which event has been executed and how to react; event() is therefore the main event +handler. Then, the event() function passes the event to so-called event filters, that determine what happened and what to do with +the event. If no filter signs responsible for the event, the specialized event handlers are called. Thereby we can decide between: + +a) Keyboard events --TAB and Shift-TAB keys: + +changes the keyboard input focus from the current widget to the next widget in the focus order. The focus can be set to widgets by +calling setFocusPolicysetFocusPolicy()() and process the following event handlers: + + + +virtual void focusInEventfocusInEvent() ( QFocusEventQFocusEvent * ) + + +virtual void focusOutEventfocusOutEvent() ( QFocusEventQFocusEvent * ) + + + + +b) all other keyboard input: + + +virtual void keyPressEventkeyPressEvent() ( QKeyEventQKeyEvent * ) + + +virtual void keyReleaseEventkeyReleaseEvent() ( QKeyEventQKeyEvent * ) + + + + +c) mouse movements: + + +virtual void mouseMoveEvent ( QMouseEventQMouseEvent * ) + + +virtual void enterEvent ( QEventQEvent * ) + + +virtual void leaveEvent ( QEventQEvent * ) + + + + +d) mouse button actions: + + +virtual void mousePressEvent ( QMouseEventQMouseEvent * ) + + +virtual void mouseReleaseEvent ( QMouseEventQMouseEvent * ) + + +virtual void mouseDoubleClickEvent ( QMouseEventQMouseEvent * ) + + + + +e) window events containing the widget: + + +virtual void moveEvent ( QMoveEventQMoveEvent * ) + + +virtual void resizeEvent ( QResizeEventQResizeEvent * ) + + +virtual void closeEvent ( QCloseEventQCloseEvent * ) + + + + +Note that all event functions are virtual and protected; therefore you can re-implement the events that you need in your own +widgets and specify how your widget has to react. QWidgetQWidget also contains some other virtual methods that can be useful in your +programs; anyway, it is sufficient to know about QWidgetQWidget very well generally. + + + +Object Interaction by Signals and Slots + +Now we're coming to the most obvious advantages of the Qt Qt toolkit: the signal/slot mechanism. This offers a very handy and useful +solution to object interaction, which usually is solved by callback functions for X-Window toolkits. As this communication +requires a strict programming and sometimes makes user interface creation very difficult (as referred by the Qt Qt documentation and +explained in Programming with Qt Qt by K.Dalheimer), Troll Tech invented a new system where objects can emit signals that can be +connected to methods declared as slots. For the C++ part of the programmer, he only has to know some things about this mechanism: + + +the class declaration of a class using signals/slots has to contain the Q&_;OBJECT macro at the beginning (without the +semicolon); and have to be derived from the QObject class, + + +a signal can be emitted by the keyword emit, e.g. emit signal(parameters); from within any member function +of a class that allows signals/slots, + + +all signals used by the classes that are not inherited have to be added to the class declaration by a signals: section, + + +all methods that can be connected with a signal are declared in sections with the additional keyword slot, e.g. +public slots: within the class declaration, + + +the meta-object compiler moc has to run over the header file to expand the macros and to produce the implementation (which +is not needed to know.). The output files of moc are compiled as well by the C++ compiler. + + + + +Another way to use signals without deriving from QObject is to use the QSignal class- see the reference documentation for +more information and example usage. In the following, we assume you're deriving from QObject. + +This way, your class is able to send signals anywhere and to provide slots that signals can connect to. By using the signals, you don't +have to care about who's receiving it- you just have to emit the signal and whatever slot you want to connect to it can react to the +emission. Also the slots can be used as normal methods during implementation. + +Now, to connect a signal to a slot, you have to use the connect() methods that are provided by QObject or, where available, +special methods that objects provide to set the connection for a certain signal. + + +Sample Usage + +To explain the way how to set up object-interaction, we'll take our first example again and extend it by a simple connection: + +#include <qapplication.h> +#include <qpushbutton.h> + +int main( int argc, char **argv ) +{ +QApplication a( argc, argv ); + +QPushButton hello( "Hello world!" ); +hello.resize( 100, 30 ); + +a.setMainWidget( &&;hello ); + +connect(&&;hello, SIGNAL( clicked() ), &&;a, SLOT( quit() )); + +hello.show(); +return a.exec(); +} + + + +You see, the only addition to give the button more interaction is to use a connect() method: +connect(&&;hello, SIGNAL( clicked() ), &&;a, SLOT( quit() )); is all you have to add. What is the meaning now ? The class +declaration of QObject says about the connect() method: + +bool connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member ) + +This means, you have to specify a QObject instance pointer that is the sender of the signal, meaning that it can emit this signal as +first parameter; then you have to specify the signal that you want to connect to. The last two parameters are the receiver object that +provides a slot, followed by the member function which actually is the slot that will be executed on signal emission. + +By using signals and slots, your program's objects can interact with each other easily without explicitely depending on the type of +the receiver object. You will learn more about using this mechanism for productive usage later in this handbook. More information about +the Signals/Slot mechanism can also be found in The KDE Library Reference Guide and the +Qt Qt online reference. + + + + + +What KDE provides + + +The KDE 1.1.x libraries + +For the time of this writing and due to the fact that KDevelop uses KDE 1.1, I'm referring to the state of the KDE libraries KDE libraries at that +release. The main KDE libraries KDE libraries you'll be using for creating your own KDE applications KDE applications are: + + + +the KDE-Core library, containing all classes that are non-visible elements and provide functionality your application may use. + + +the KDE-UI library, containing user interface elements like menu bars, toolbar toolbars and the like, + + +the KFile library, containing the file selection dialogs, + + + + +Additionally, for specific solutions KDE offers the following libraries: + + + +the KHTMLW library, offering a complete HTML-interpreting widget that is used by various programs like KDEHelp KDEHelp, KFM, KDevelop, + + +the KFM library, allowing to use the KDE file manager from within your application. + + +the KAb library, the KAddressBook. Provides address-book access for e.g. email applications + + +the KSpell library, offering widgets and functionality to integrate the use of Ispell, the common spell-checker, in applications +like editors; used for the KEdit application. + + + + +Next, we'll have a look at what is needed to turn our first Qt Qt application into a KDE one. + + + +Example KDE Application + +In the following, you will see that writing a KDE application is not much more difficult than a Qt Qt application. For the use of KDE's +features, you just have to use some other classes, and you're almost done. As an example, we'll discuss the changed version of the Qt Qt +example from above: + +#include <kapp.h> +#include <qpushbutton.h> + +int main( int argc, char **argv ) +{ +KApplication a( argc, argv ); + +QPushButton hello( "Hello world!" ); +hello.resize( 100, 30 ); + +a.setTopWidget( &&;hello ); + +connect(&&;hello, SIGNAL( clicked() ), &&;a, SLOT( quit() )); + +hello.show(); +return a.exec(); +} + + + +You see that first we have changed from QApplicationQApplication to KApplicationKApplication. Further, we had to change the previously used +setMainWidget() method to setTopWidget, which KApplicationKApplication uses to set the main widget. That's it ! Your first KDE +application is ready- you only have to tell the compiler the KDE include path and the linker to link in the KDE-Core library with +-lkdecore. + +As you now know what at least the main() function provides generally and how an application gets visible and allows user and object +interaction, we'll go on with the next chapter, where our first application is made with KDevelop- there you can also test everything +which was mentioned before and see the effects. + +What you should have looked into additionally until now is the reference documentation for Qt Qt, especially the QApplicationQApplication, +QWidgetQWidget and QObject class and the KDE-Core library documentation for the KApplicationKApplication class. The KDE Library Reference handbook also covers a complete description about the invocation of the +QApplicationQApplication and KApplicationKApplication constructors including command-line argument processing. + + + + + +Creating new Applications + +The KAppWizard, or also called the KDE Application Wizard, is intended to let you start working on new projects with KDevelop. +Therefore, all your projects are first created by the wizard; then you can start building them and extend the already provided source +skeleton. KAppWizard also allows to choose between several project types according to your project's goals: + + + +Normal KDE Application: includes source code for a complete frame structure of a standard KDE application with support for the +Document-View-Controller model, a menubar, toolbar toolbar and statusbar as well as a set of standard documentation based on SGML SGML, KDE-links +and application icons. This is the application type usually needed for a new KDE project. + + +Mini KDE Application: contains the same general structure as the Normal KDE Application type but with the difference that the +application's code only provides a widget as a window. + + +Normal Qt Qt Application: works like the normal KDE application by it's code with the difference that the project is based on the Qt Qt +library only and doesn't contain KDE support. This is intended for projects that have to be portable to Windows platforms or that don't +want to require KDE libraries KDE libraries by the end-user. + + +C Application: Is based on the C compiler only and runs in a console. + + +C++ Application: Is based on the C++ compiler only and runs in a console like the C application, therefore doesn't require +X-Window. + + +Custom project: creates an empty project without any sourcecode. This is intended for already existing projects to port +to KDevelop or for projects where you want to start from scratch. Mind that you have to take care for makefiles and configure scripts +all by yourself. + + + + +In this chapter we'll see how the KAppWizard can be invoked and what has to be done to generate a KDE application project. This will +also be the initial step of our coverage, where we will create the initial version of a sample project. For all other project types the +steps are usually the same, just you may not have certain options available. + + +Invoking KAppWizard and Project Generation + + +Starting KAppWizard and the First Page + +To start with your first KDE application, open KDevelop. Then select "New..." from the "Project"-menu. The KAppWizard starts, and you +see a tree on the first page, containing the project types. When a type is selected, you see a preview how it will look like after the +initial build process. Choose the KDE subtree, Normal type. Then press the "Next" button on the bottom of the first wizard page. This +will switch to the next page, where you have to set the general project options. + + + +The Generate Settings Page + +For our sample application, we choose the project name KScribble; therefore insert this in the field "Projectname". Then select +the directory you want to have your project build in; the default is your home directory. You can enter the path manually or you can as +well press the button on the right to select the directory by a dialog. + +Next, you have to enter the Version number. For the first version, set this to 0.1. It is usual to number new applications that are +in development for the first release lower than 1, and as the initial version will only contain the standard framework, we'll name this +the 0.1 version. + +Finally, add your name to the "Author" field and your email address. You can leave all other options to their default settings. + +To give you some information about all other options, you can press the right mouse button over the options, and you will get a quick-help +window that describes the option's purpose. + +These are: + + +generate sources and headers: generates the application source code + + +GNU-Standard-Files: adds a copy of the GNU-General Public License to the project as well as some standard files for user +information when distributing the package. + + +User-Documentation: the user handbook in SGML SGML, already prepared for your project. + + +API API-Documentation: creates an initial HTML documentation set for the Application Programming Interface. + + +lsm-File: the Linux Software Map, used by distribution sites and contains short information about the project's purpose and +requirements. + + +.kdelnk .kdelnk-File: a KDE link that will install your application in the "Applications" tree of the KDE-Panel. + + +Program-Icon: an Icon that represents your project and can be used to create a link on the desktop. + + +Mini-Icon: a Mini-version of the program icon that represents your application besides its name in the KDE-Panel and is +shown in your application's dialogs and main-window in the left upper corner. + + + + +Now we'll switch to the next page by pressing the "Next" button again to set the template for the header files of your project. + + + +The Header and Source Templates + +The header template page allows you to automatically include a preface for your header files, containing the filename, the construction +date, the year of the copyright, also your name and your email address. You don't have to change those uppercase parts yourself, as +KAppWizard does this automatically and stores the template for this project, so it can be used later again for creating new files. + +The second part of the default header template contains a license information. By default, your project is set under the GNU General +Public License, which is also included in the package. This license is used to protect your source code against any person that just +copies your sources for his own purpose. The General Public License offers you this license for free and thereby protects your rights +as the author, and is common for distributing free software. To get more information about the license, you should read the COPYING +file in the base directory of your new project later which is a copy of the GPL and ships with your application already. + +Anyway, you may want to choose another license or another header template you're already using for your projects. Therefore you can +either edit the given default template directly. To do this, you're given the template in an editing window. To clear the default page, +select "New", to use another template, select "Load...", which lets you choose the template file. + +When you're done, go to the next page by entering "Next". This is the template page for your source files and is generally the same as +the header template page. The only difference is that this template is used for your implementation files. + + + +Creating the Project + +Now that you've set all options for KScribble, select "Next" and press the "Generate" button on the bottom of the wizard window. +If the button is not available, you haven't set all options correctly. To correct any errors, step back in the Wizard with "Back". + +Then you'll see what KAppWizard does- he copies all templates to your project directory and creates the new project. After KAppWizard +is finished, the "Cancel" button changes to an "Exit" button to leave the wizard. + +After this last step, you're finished with creating a new project. KDevelop then loads it and the tree-views let you browse through the +project's files and classes. + +In the next section, we'll discuss how to build and run your first version of KScribble and how the source code is organized. + + + + +The First Build + +After our project is generated, we'll first make a trip through the source code to get a general understanding how the application frame +works. This won't only help to get started but we'll know where to change what in later steps. + +When opening the LFV (Logical File Viewer) page on the tree-view, you see some folders that already sort the project files relevant to +the developer. The first two folders are "Header" and "Sources". The Header-folder therefore logically contains all header files of the +project, the Sources-folder all sourcecodes. All other folders are of no interest right now, so we'll turn back here later to see what +they contain. + +The two folders then contain the following files: + +Headers: + + +kscribble.h : contains the class declaration for the class KScribbleApp. + + +kscribbledoc.h : contains the class declaration for the class KScribbleDoc. + + +kscribbleview.h : contains the class declaration for the class KScribbleView. + + +resource.h : contains a macro collection for the menu-ID's + + + + +Sources: + + +kscribble.cpp : contains the implementation of the class KScribbleApp. + + +kscribbledoc.cpp : contains the implementation of the class KScribbleDoc. + + +kscribbleview.cpp : contains the implementation of the class KScribbleView. + + +main.cpp : contains the main() function implementation. + + + + +Before diving into the sources, we'll let KDevelop build and run our new application. To do this, select "Make" from the "Build"-menu +or hit the according button on the toolbar toolbar. The output window opens from the bottom of KDevelop and lets you see what make does by +the messages it gives us: + +1 Making all in docs +2 make[1]: Entering directory `/home/rnolden/Tutorial/kscribble1/kscribble/docs' +3 Making all in en +4 make[2]: Entering directory `/home/rnolden/Tutorial/kscribble1/kscribble/docs/en' +5 make[2]: Nothing to be done for `all'. +6 make[2]: Leaving directory `/home/rnolden/Tutorial/kscribble1/kscribble/docs/en' +7 make[2]: Entering directory `/home/rnolden/Tutorial/kscribble1/kscribble/docs' +8 make[2]: Nothing to be done for `all-am'. +9 make[2]: Leaving directory `/home/rnolden/Tutorial/kscribble1/kscribble/docs' +10 make[1]: Leaving directory `/home/rnolden/Tutorial/kscribble1/kscribble/docs' +11 make[1]: Entering directory `/home/rnolden/Tutorial/kscribble1/kscribble' +12 g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/opt/kde/include -I/usr/lib/qt/include -I/usr/X11R6/include -O0 -g -Wall -c + kscribbleview.cpp +13 g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/opt/kde/include -I/usr/lib/qt/include -I/usr/X11R6/include -O0 -g -Wall -c + kscribbledoc.cpp +14 g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/opt/kde/include -I/usr/lib/qt/include -I/usr/X11R6/include -O0 -g -Wall -c + kscribble.cpp +15 g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/opt/kde/include -I/usr/lib/qt/include -I/usr/X11R6/include -O0 -g -Wall -c + main.cpp +16 /usr/bin/moc ./kscribble.h -o kscribble.moc.cpp +17 g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/opt/kde/include -I/usr/lib/qt/include -I/usr/X11R6/include -O0 -g -Wall -c + kscribble.moc.cpp +18 /usr/bin/moc ./kscribbledoc.h -o kscribbledoc.moc.cpp +19 g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/opt/kde/include -I/usr/lib/qt/include -I/usr/X11R6/include -O0 -g -Wall -c + kscribbledoc.moc.cpp +20 /usr/bin/moc ./kscribbleview.h -o kscribbleview.moc.cpp +21 g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/opt/kde/include -I/usr/lib/qt/include -I/usr/X11R6/include -O0 -g -Wall -c + kscribbleview.moc.cpp + +22 /bin/sh ../libtool --silent --mode=link g++ -O0 -g -Wall -o kscribble -L/opt/kde/lib -L/usr/X11R6/lib -rpath /opt/kde/lib + -rpath /usr/X11R6/lib kscribbleview.o kscribbledoc.o kscribble.o main.o kscribble.moc.o kscribbledoc.moc.o kscribbleview.moc.o + -lkfile -lkfm -lkdeui -lkdecore -lqt -lXext -lX11 + +23 make[1]: Leaving directory `/home/rnolden/Tutorial/kscribble1/kscribble' + + + +As you see, we've put line numbers in front of each line, which won't appear in your output; it just makes it easier to describe what +happened during the build now. First of all, make works recursively. That means, it starts from the directory it is invoked in and +then goes into the subdirectories first, returns and processes the next directory. Finally, the directory it was started is processed +and make finishes. Therefore, make started in the main project directory containing the sources first. In line 1 and 2, you +see how the make process goes into the docs directory, then into the en subdirectory. As there isn't anything to do, it +leaves these directories until it returns to the source-directory kscribble in line 11. Then, the real work starts: make +invokes the compiler, here g++ to compile the source-file kscribbleview.cpp. The macro -DHAVE&_;CONFIG&_;H says that the file +config.h should be used. This is a file containing macros for the specific platform and application and is located in the main +project directory. The following -I commands add the include path where g++ can find the includes it needs. These are the +current directory, the main project directory (by -I..) and the include path for the KDE, Qt Qt and X11 library header files. The +directories for these include files were determined by the configure script and set in the Makefiles, therefore, the compiler +knows where these are located. Finally, -O0 sets the optimization to zero (no optimization), -g enables debugging, -Wall +sets the compiler warnings to all and -c tells the compiler to produce an object file, so only compile the file. + +This is done for the other source files of our project as well in lines 13-15. Obviously, our sources are compiled, but instead of +linking the object files of the sources to the final binary, we see some other commands. In line 16, you see that the program "moc" is +called to process the header file kscribble.h, with its output in kscribble.moc.cpp. Then, in line 17, this source file is +compiled as well. The same happens with the other project header files until line 21. Now, as the Qt Qt toolkit contains the signal/slot +mechanism, but still stays a C++ implementation, you're using certain keywords that are not originally C++ language, such as the +signals: and slots: declaration in your classes. This gives you the ability to easily allow object communication for all +class objects that inherit the class QObject, so you can avoid the usual callback pointer functions. Therefore, the application +needs the sources that implement this functionality, and that is why moc is called. Moc is the Meta Object Compiler of the Qt Qt +toolkit and builds the implementation for signals and slots mechanisms by parsing the header file and producing a source output that +has to be compiled in the binary. As KDevelop projects use automoc to determine, which header file needs to be processed, you +don't have to take care for any call on moc and the C++ compiler on the moc output files. Just remember the rules that make a +class use the signals and slots- inheritance from QObject or any class that inherits QObject itself, inclusion of the +Q&_;OBJECT macro (without semicolon !) at the beginning of the class declaration and the declarations for signals and slots. + +Finally, your binary is built by the compiler. The output binary is called kscribble, the linker includes the path for the KDE and +X11 libraries and links the sources against the libraries kfile, kfm, kdeui, kdecore, qt, Xext and X11. Then you're done and +make exits. + + + +The Source Skeleton + +To gain a concept of how a KDE application works, we'll first have a very close look at the source skeleton already provided by the +Application Wizard. As we already saw, we're having a set of source and header files that build the initial code for the application +and make it ready-to-run. Therefore, the easiest way to explain the code is to follow the implementation line by line as it is +processed during executing the program until it enters the main event loop and is ready to accept user input. Then, we'll have a look +at the functionality that enables user interaction and how certain things work. This is probably the best way to explain the framework +and, as it is similar to almost all KDE applications KDE applications, will enable you to read source codes from other projects as well; additionally, +you will know where to change what part of the code to make your applications behave the way they are designed for. + + +The <literal remap="tt">main()</literal> Function + +As the application begins its execution with entering the main() function, this will be the start for our code examination. The +main() function of KScribble is implemented in the file main.cpp and can also be found using the Class Browser by +selecting the "Globals" folder, sub-folder "Functions": + +1 #include "kscribble.h" +2 +3 int main(int argc, char* argv[]) { +4 KApplication app(argc,argv,"KScribble"); +5 +6 if (app.isRestored()) +7 { +8 RESTORE(KScribbleApp); +9 } +10 else +11 { +12 KScribbleApp* kscribble = new KScribbleApp; +13 kscribble->show(); +14 if(argc > 1){ +15 kscribble->openFile(argv[1]); +16 } +17 } +18 return app.exec(); +19 } + + + +Now, what happens first is the usual creation of a KApplicationKApplication object, which gets our application name KScribble as a third +parameter. When creating a new KApplicationKApplication, a new KConfigKConfig instance is created as well which is connected to a configuration +file in $HOME/.kde/share/config/appname + rc which stores all information we want to use when starting application windows. The name we +passed the constructor of app will be used as the window title later. + +Despite of the example code for turning the first Qt Qt application into a KDE one, the following code is somewhat different. After the +KApplicationKApplication object is present, we're testing if the application is started by the session management of kwm or manually by +the user. This can be found out when calling isRestored() on the app object, which returns true for session management +and false for a normal start. + +As session management is a main feature of KDE applications KDE applications and widely used by the framework but a lot more to explain, we'll follow +the else&{;&}; section first; then we'll come back and explain the session functionality in a later step. + + + +User Application Start + +The else&{;&}; section now creates an instance of the class KScribbleApp in line 12. This object is called to show itself in line +13 as usual; line 14 determines if a command-line argument has been passed and, as this is usually the name of a file, calls the +kscribble object to open it with openFile(). + +Note that we didn't call the method setTopWidget(kscribble) for our application- this is already done by the class that KScribbleApp +inherits. Now we'll have a look at our KScribbleApp object- what is it and what does it provide already ? The only thing we know +until now is that it has to be a Widget to represent the user interface in the main window. Let's turn to the class implementation of +KScribbleApp, which can be found in the file kscribble.cpp or by a click on the class icon in the Class Browser. As the +instance is created by the constructor. +First of all, we see that it inherits the class KTMainWindowKTMainWindow, which is a part of the kdeui library. This class itself +inherits QWidgetQWidget, so, as usual, we have a normal widget as the top-level window. KTMainWindowKTMainWindow contains a lot of functionality +that the class KScribbleApp makes use of. It provides a menubar, toolbar toolbar, statusbar and session management support. The only thing +we have to do when sub-classing KTMainWindowKTMainWindow is to create all the objects we need and create another widget that is managed by our +KTMainWindowKTMainWindow instance as the main view in the center of the window; usually this is the place where the user works like a +text-editing view. + + +The Constructor + +Let's have a look at the code for the constructor and see how the instance is created: + +1 KScribbleApp::KScribbleApp() +2 { +3 config=kapp->getConfig(); +4 +5 +6 /////////////////////////////////////////////////////////////////// +7 // call inits to invoke all other construction parts +8 initMenuBar(); +9 initToolBar(); +10 initStatusBar(); +11 initKeyAccel(); +12 initDocument(); +13 initView(); +14 +15 readOptions(); +16 +17 /////////////////////////////////////////////////////////////////// +18 // disable menu and toolbar items at startup +19 disableCommand(ID_FILE_SAVE); +20 disableCommand(ID_FILE_SAVE_AS); +21 disableCommand(ID_FILE_PRINT); +22 +23 disableCommand(ID_EDIT_CUT); +24 disableCommand(ID_EDIT_COPY); +25 disableCommand(ID_EDIT_PASTE); +26 } + + + +We see that our config instance of KConfigKConfig now points to the applications configuration, so we can operate +with the configuration file entries later. + +Then, all parts of the application that are needed are created by their according member functions that are specific to our main +window: + + + +initMenuBar(): constructs the menubar, + + +initToolBar(): constructs the toolbar toolbar, + + +initStatusBar(): creates the statusbar, + + +initKeyAccel(): sets all keyboard acceleratoraccelerators for our application by the global and application specific keyboard +configuration + + +initDocument(): creates the document object for the application window + + +initView(): creates the main widget for our view within the main window + + +readOptions(): reads all application specific settings from the configuration file and initializes the rest of the +application such as the recent file list, the bar positions and the window size. + + + + +Finally, we disable some commands that the user can do, because they should not be available in the current application state. +As we now have a general overview how the application window is created, we will look into the details of how the user elements are +constructed by following the above methods. + + + +The Menubar + +As shown above, the menubar of KScribble is created by the method initMenuBar(). There, we create a set of +QPopupMenuQPopupMenus that pop up if the user selected a menuentry. Then, we insert them into the menubar and connect to the entries. + +First, we create our recent&_;file&_;menu, which will contain the names of the last 5 opened files. We have to do this first, because +this menu is inserted into the file&_;menu. Then we add the connection directly- we just retrieve the signal that is emitted by the +menuentry with its entry number and call the slotFileOpenRecent( int ), which then calls the right file from the recent file list +to be opened. + +Then we create our "File"-menu. This will be the menu that will be visible in the menubar. The standard actions are then inserted into +the popup-menu one by one- first the commands for creating a new file, open a file, close a file etc., finally "E&&;xit" to close the +application. All menu entries have to be created in the order as they appear later, so we have to keep an eye on which we want to have +at what place. As an example, we look at the following entries: + +file_menu->insertItem(Icon("fileopen.xpm"), i18n("&&;Open..."), ID_FILE_OPEN ); +file_menu->insertItem(i18n("Open &&;recent"), recent_files_menu, ID_FILE_OPEN_RECENT ); + + + +The first one inserts the "Open..." entry. As we want to have it with an icon, we use the insertItem() method with the icon's +name. To understand the icon loading process, we need to know what or where Icon() is declared- in fact, it is a macro provided by +the class KApplicationKApplication: + +#define Icon(x) kapp->getIconLoader()->loadIcon(x) + + +Additionally, it uses the following macro internally to get access to the application object: +#define kapp KApplication::getKApplication() + + + +This means that the KApplicationKApplication object already contains an Icon loader instance- we only have to get access to it; then it will +load the according icon. As our icons are all from the KDE libraries KDE libraries, we don't have to take care for anything else- they are installed +on the system automatically, therefore we also don't have to include them into our application package to use them. + +After the icon parameter (which is optional), we insert the menuentry name by i18n("&&;Open..."). There, we have to watch two +things: first, the entry is inserted with the i18n() method. Like the Icon() entry, it is a macro defined in kapp.hkapp.h as +well and calls the KLocale object of KApplicationKApplication to translate the entry to the currently used language: + +#define i18n(X) KApplication::getKApplication()->getLocale()->translate(X) + + + +Hereby, it should be mentioned that one could think "I don't want to use macros"- you can do that in most cases. But here it is +immanent to use i18n() because for internationalization the according language files have to be build. As this build process +depends on the i18n string, you have to use the macro. + +As you might have already guessed, the ampersand within menu entries is later interpreted as a line under the following letter in the +menuentry. This allows fast access to the menu command via the keyboard when the user presses the Alt-key in conjuction with the +underlined letter. + +Finally, we're giving the menuentry an ID, which is an integer value by which we can find the entry later. To keep +an overview over the used values, these are defined by macros and are collected in the file resource.h within your project. For +consistency, these macros are all uppercase and begin with ID&_;, then the menu name followed by the entry. This makes it very easy to +remember the sense of each entry anywhere within the code, so you don't have to turn to the menubar implementation again to look up the +entries. + +The second example entry shows another variant of the insertItem() method. Here, we add the recent&_;files&_;menu popup menu as a +menuitem. This means, that the entry shows itself with the given string "Open recent", followed by a right arrow. On selection, the +recent file popup menu appears and the user can choose the last file. + +Last but not least there are a lot of other ways to insert menu items- the framework keeps this as simple as possible. More information +can be obtained in the Qt Qt documentation about the QMenuDataQMenuData class. + +Now, after we created the popup menus file&_;menu, edit&_;menu and view&_;menu, we have to include a "Help"-menu as well. We could +do this like the others as well, but the KApplicationKApplication class offers a nice and quick method to cover this: + +help_menu = kapp->getHelpMenu(true, i18n("KScribble\n" VERSION )); + + + +This is all we have to do to get a help menu that contains an entry for the help contents with the F1 keyboard shortcutshortcuts, an about-box +for the application and an about-box for the KDE (which can be disabled by calling getHelpMenu(false,...);). The contents for our +applications about-box is set with the i18n() string again- VERSION takes the macro that is defined for the project version number +in the file config.h, so we don't have to change this every time manually when we want to give out a new release. Feel free to add +any information about your application here, e.g. your name, email address, copyright and the like. + +Now we only have to insert the pop-ups into the menubar. As KTMainWindowKTMainWindow already constructs a menubar for us, we just insert them +by calling menuBar()->insertItem();. + +What is left to do is to connect the menu-entries with the methods they will execute. Therefore, we connect each popup menu by its +signal activated( int ) to a method commandCallback( int ), which contains a switch statement that calls the according +methods for the menu entries. Additionally, we connect the pop-ups by their signal highlighted( int ) to provide statusbar help on +each entry. Whenever the user moves his mouse or keyboard focus keyboard focus to an entry, the statusbar then shows the according help message. + +After we finished with the menubar, we can continue with the toolbar toolbar in the following section. Mind that an instance of a +KTMainWindowKTMainWindow can only have one menubar visible at a time; therefore if you want to construct several menu bars, you have to create +them separately with instances of KMenuBarKMenuBar and set one of them by the according methods of KTMainWindowKTMainWindow as the current +menubar. See the class documentation class documentation of KMenuBarKMenuBar for more detailed information about how to extend the features, also see Configuring Menubars and Toolbars. + + + +The Toolbar + +The creation of toolbar toolbars now is even simpler than that of menubars. As KTMainWindowKTMainWindow already provides toolbar toolbars, which are created +by the first insertion, you are free to create several ones. Just add the buttons for the functions you want to provide: + +toolBar()->insertButton(Icon("filenew.xpm"), ID_FILE_NEW, true, i18n("New File") ); + + + +This adds a left-aligned button with the icon "filenew.xpm" with the according ID to the toolbar toolbar. The third parameter decides if the +button should be enabled or not; by default we set this to true, because our disableCommand() methods at the end of the +constructor do this for us automatically for both menu and toolbar toolbar entries. Finally, the last parameter is uses as a so-called +"Quick-Tip"- when the user moves the mouse pointer over the button so that it gets highlighted, a small window appears that contains a +short help message, whose contents can be set here. + +Finally, all toolbar toolbar buttons are connected to our commandCallback() method again by their signal clicked(). On the signal +pressed(), we let the user receive the according help message in the statusbar. + +Additional Information: + +As toolbar toolbars are created using the class KToolBarKToolBar, you should have a look at the according documentation. With +KToolBarKToolBar, a lot of things needed in a toolbar toolbar can be realized such as delayed pop-ups if your button wants to pop up a menu +when the button keeps being pressed or even widgets like combos. Also, by default, the toolbar toolbar fills the complete width of the +window, which makes it look nice for using a single bar. When using more than one, you should also think about setting the bar +size to end at the most right button, so other bars can be displayed in the same row below the menubar. We will discuss certain +techniques about designing and extending toolbar toolbars in section Configuring Menubars and Toolbars. + + + +The Statusbar + +The statusbar is, as well as the other bars, already provided by the KTMainWindowKTMainWindow instance, so we just have to insert our items as +we want to. By default, the framework contains only one entry that displays statusbar help. For a lot of applications this may not +last; then you would add the entries you need for displaying e.g. coordinates and the like. + +Also, an application can only have one statusbar at a time like a menubar. If you want to construct several ones, you should create +them separately and set the current bar by the according method of KTMainWindowKTMainWindow. The statusbar also offers to insert widgets, +which can be used to produce nice habits for displaying progress-bars like KDevelop does. Refer to the class documentation class documentation of +KStatusBar. + + + +Keyboard Accelerators + +With reaching the method initKeyAccel(), we already constructed the standard items of an application main window- the menubar, +toolbar toolbar and statusbar. Indeed, we didn't set any keyboard acceleratoraccelerators by which advanced users that only want +to work with the keyboard have a quick access to certain commands that are used most often during work with our program. To do this, we +could have inserted the acceleratoraccelerator keys by the insertion of the menu-items for example, but KDE offers a good +solution to construct and maintain keyboard acceleratoraccelerators. A lot of users want to have them configurable on one hand +and on the other standard acceleratoraccelerators should be the same over all applications. Therefore, the KDE control center +offers configuring standard keyboard acceleratoraccelerators globally by using the KAccelKAccel class. Additionally, the +KDE libraries KDE libraries contain a widget that lets users configure application specific keyboard shortcutshortcutss easily. As the +application framework only uses menu-items that have standard actions such as "New" or "Exit", these are set by the method +initKeyAccel(). Standard actions just have to be connected, for your application specific keyboard values, you have to insert them +first by specifying the keyboard acceleratoraccelerator name and then connect them. As our acceleratoraccelerators are +all present in the menubar, we have to change the acceleratoraccelerators for the popup entries. Finally we call +readSettings(), which reads the current settings from the root window of KDE containing the configuration of standard +acceleratoraccelerators, then the settings for acceleratoraccelerators specified in the application's config file. When +we're going further into our example project, we will also talk about how to configure our application specific +acceleratoraccelerators by a configuration dialog, see Configuring Menubars and Toolbars for that part of the development process. + + + +The Document-View Model + +The next two member function calls, initDocument() and initView(), are finally building the part that the application windows +are supposed to provide to the user: an interface to work with data that the application is supposed to manipulate; and that is also +the reason why the application framework contains three classes, an *App, *View and *Doc class. To understand, why this +structure is helpful, we'll look a bit aside the actual code and introduce some theory, then we'll switch to the program again to see +how the KDevelop frameworks support such a model. + +Basically, all what has been explained about the framework is that we need an application instance that contains a main window. This +window is responsible to provide the basic interface for the user- it contains the menubar, toolbar toolbars and statusbar and the event +controlling for user interaction. Also, it contains an area, that is described as a "view". Now, the purpose of a view is generally, to +display the data that the user can manipulate, e.g. a part of a text file. Although the text file is probably larger than the view is +able to display on the screen, it offers the user to go to the part that he wants to see (therefore it is a view), and there the user +can as well change the data of the file contents. To give the programmer a better way to separate parts of the application by code, the +Document-View Model has been invented. Although not a standard, it provides a structure how an application should work: + + + + The application contains a controller object, + + + a View object that displays the data the user works with + + + and a Document object that actually contains the data to manipulate. + + + + +Back to the example of working with a text file- there, this model would work the way that the Document would read the file contents and +provides methods to change the data as well as to save the file again. The view then processes the events that the user produces by the +keyboard and the mouse and uses the document object's methods to manipulate the document data. + +Finally, the controller object is responsible for user interaction by providing the document and the view objects as well as the +interfaces to send commands like opening and saving. Additionally, certain methods of the view object can be provided by commands that +can be accessed via keyboard acceleratoraccelerators or the mouse on menubars and toolbar toolbars. + +This Document-View model has some advantages- it separates the program's code more object-oriented and by this offers more flexibility +in general, e.g. the same document object could be displayed by two views at the same time; either by a new view in a new window or by +tiling the current one that then contains two view object that build the actual window view region. + +Now, if you're coming from MS-Windows systems you may have some experience with that- the MFC already provide a document model that is +ready to use. For KDE and Qt Qt applications, things are a bit different. Qt Qt is a powerful toolkit as it provides the most +needed classes, widgets etc. But there wasn't any intention to take care of the document-view model, and as KDE is inheriting Qt Qt, +there weren't any tendencies to introduce such a model either. This somehow has its reason in the fact that usually X-applications +don't work with an MDI (Multiple Document Interface). Each main window is responsible for its data and that reduces the need of a +document model to the fact that methods to work on documents are always implied into widgets. The only exception from this currently is +the KOffice project that is intended to provide a complete office suite of applications like a word processor, a spreadsheet etc. +Technically, this is realized by two changes two the normal usage of Qt Qt and KDE: + + + +KOffice uses KOM and the free MICO implementation of CORBA for object communication, + + +the KOffice applications use a document-view model to allow all applications to work with any KOffice data objects + + + + +But as KDevelop currently targets on using the current libraries of KDE 1.1.x and Qt Qt 1.4x, we can't use this model by default- +this will come in further releases of a KDE 2, which will (hopefully) contain two new major changes in relation to the current +situation: + +an MDI interface for KTMainWindowKTMainWindow + + +the KOM libraries that provide a document model + + + + +Therefore, the current way for application developers can be to either implement all needed document methods within their view or to +try to reproduce a document model by themselves. KDevelop therefore contains such a reproduction by providing the needed classes and +the basic methods that are generally used for a Document-View model with the application frameworks for Qt Qt and KDE. + +Back to the code, you now can imagine the purpose of the two methods we mentioned at the beginning of this section: the +initDocument() and initView() functions. The initDocument() constructs the document object that represents the +application window data and initializes the basic attributes like setting the modification bit that indicates if the data currently +used has been changed by the user. Then, the initView() method constructs the *View widget, connects it to the document and +calls the setView() method of KTMainWindowKTMainWindow to tell the *App window to use the *View widget as it's center view. + +For the developer, it is important to know that during the development process he has to: + + + +re-implement the virtual methods for mouse and keyboard events provided by QWidgetQWidget in the *View object to provide the +means to manipulate data, + + +re implement the paintEvent() of QWidgetQWidget in the *View object to repaint() the view after changes, + + +complete the implementation for printing the document via the printing method of the *View object, + + +add the serialization for the *Doc object to provide file loading and saving, + + +add the document data structure implementation to the *Doc object that is representing the document data logically in the +memory. + + +add any methods that have to be accessible by the user via acceleratoraccelerator keys and menus/toolbar toolbars. + + + + + + +Application Configuration + +Now, after we created all instances of the KTMainWindowKTMainWindow instance of our application to create the first window, we have to +initialize certain values that influence the look of the program. For this, we call readOptions(), which gets all values and calls +the methods needed to set the according attributes. The KDE-Core library contains the class KConfigKConfig that provides a good +possibility to store values in configuration files as well as to read them in again. Also, as each KApplicationKApplication instance +creates it's resource file already, we only have to access this file and create our values. As KConfigKConfig provides us the file +object, we have to use the class KConfigBaseKConfigBase to read and write all entries. As writing is very easy to do with +writeEntry() methods, reading depends on the attribute type which we want to initialize. Generally, an entry in the configuration +file contains a value name and a value. Values that belong together in some context can be collected in groups, therefore we have to +set the group name before we access the value afterwards; the group has to be set only once for reading a set of attributes that are in +the same group. Let's have a look at what we want to read in: + +1 void KScribbleApp::readOptions() +2 { +3 +4 config->setGroup("General Options"); +5 +6 // bar status settings +7 bool bViewToolbar = config->readBoolEntry("Show Toolbar", true); +8 view_menu->setItemChecked(ID_VIEW_TOOLBAR, bViewToolbar); +9 if(!bViewToolbar) +10 enableToolBar(KToolBar::Hide); +11 +12 bool bViewStatusbar = config->readBoolEntry("Show Statusbar", true); +13 view_menu->setItemChecked(ID_VIEW_STATUSBAR, bViewStatusbar); +14 if(!bViewStatusbar) +15 enableStatusBar(KStatusBar::Hide); +16 +17 // bar position settings +18 KMenuBar::menuPosition menu_bar_pos; +19 menu_bar_pos=(KMenuBar::menuPosition)config->readNumEntry("MenuBar Position", KMenuBar::Top); +20 +21 KToolBar::BarPosition tool_bar_pos; +22 tool_bar_pos=(KToolBar::BarPosition)config->readNumEntry("ToolBar Position", KToolBar::Top); +23 +24 menuBar()->setMenuBarPos(menu_bar_pos); +25 toolBar()->setBarPos(tool_bar_pos); +26 +27 // initialize the recent file list +28 recent_files.setAutoDelete(TRUE); +29 config->readListEntry("Recent Files",recent_files); +30 +31 uint i; +32 for ( i =0 ; i < recent_files.count(); i++){ +33 recent_files_menu->insertItem(recent_files.at(i)); +34 } +35 +36 QSize size=config->readSizeEntry("Geometry"); +37 if(!size.isEmpty()) +38 resize(size); +39 } + + + +As we have seen in one of the above code parts, the first action our constructor does was: + +config=kapp->getConfig(); + + + +which sets the KConfigKConfig pointer config to the application configuration. Therefore, we don't have to care for the location of +the configuration file. Indeed, the file is, according to the KDE File System Standard (KDE FSS), located in +&$;HOME/.kde/share/config/; we will have a closer look about the KDE FSS in a later step when we're setting installation +locations for project files. As the config file is placed in the user's home directory, each user has it's own appearance of his +application except for values that are located in a system wide configuration file that can optionally be created and installed by the +programmer in the KDE directory. But, although this could help in some cases, we should avoid any dependency of our application towards +the existing of file entries. Therefore, all read methods provided by KConfigBaseKConfigBase allow to add a default value to be used +when the entry doesn't exist. Another thing important to a programmer is that the configuration file is stored in plain text, and this +is for some reasons as well as you have to watch some criteria: + + + +the user is able change the configuration file by a plain text editor + + +if the user wants to change values by hand, the entries should be very transparent to determine their purpose + + +for entries that have to be saved, but are critical in terms of security like passwords, you have to look for a proper solution +to ensure the security. + + + + +Now that we know the basics, we're going to analyze the code. As said, we only have to use our config pointer to access the values. +First, in line 4, we set the current group to "General Options". This indicates that the values used are somewhat general attributes +for the application. Then we read the values for the toolbar toolbar and statusbar- these have to be saved when the application closes to +restore their status again when the user restarts the program. As the bars can only be on or off, we use a boolean value, therefore, +our method is readBoolEntry(). The process is identical for both bars, so we only have a look at the lines 7-10 to watch what's +happening for the toolbar toolbar. First, we read the value into the temporary variable bViewToolbar at line 7. The value name in +the file is "Show Toolbar" and, if the value is not present (which would be the case the first time the application starts), the +default value is set to true. Next, we set the checkmark for the menuentry for en-/disabling the toolbar toolbar by this value: we +call setItemChecked() on the view menu, entry ID&_;VIEW&_;TOOLBAR with our attribute. Finally, we set the toolbar toolbar to use +the value. By default, the toolbar toolbar is visible, therefore, we only have to do something if bViewToolbar is false. With +enableToolBar() (line 10) we're setting the bar to hide itself if it is disabled. + +Next, we have to read the bar positions. As the user might have changed the bar position by dragging a bar with the mouse to another +view area, these have to be saved as well and their status restored. Looking at the classes KToolBarKToolBar and +KMenuBarKMenuBar, we see that the bar positions can be: + +enum BarPosition {Top, Left, Bottom, Right, Floating, Flat} + + + +As this value has been written in a numeric value, we have to read it with readNumEntry() and convert it to a position value. With +setMenuBarPos() and setBarPos() we tell the bars where to show up. + +Now you probably have noticed that our "File" menu contains a menu for recently used files. The filenames are stored in a list of +strings, which has to be saved on application closing and now has to be read in to restore the menu. First, we initialize the list with +the entries stored by using the readListEntry(). Then, in a for-loop, we create a menu entry for each list item. + +Finally, we only have to take care for the geometry of our window. We read in the appearance by a QSize variable containing an x +and y value for width and height of the window. As the window is initialized by KTMainWindowKTMainWindow, we don't have to take care for +a default value and only will use resize() if the entry is not empty. + +What is left to explain on application construction is that we initially have to disable available user commands that shouldn't be +available if some instances don't match the needed criteria. These are file saving and operations that are using the clipboard. During +the application's lifetime, we have to take care of these several times, but which is quite easy. The framework only gives us two +methods to enable/disable menubar and toolbar toolbar items with one method call at the same time. + + + +Executing + +During the past section, we have only monitored what happens during the constructor call of our KScribbleApp instance providing us +the main window. After returning to the main() function, we have to call show() to display the window. What is different from +any KApplicationKApplication or QApplicationQApplication here is that when we're using KTMainWindowKTMainWindow as the instance for our +main widget, we don't have to set it with setMainWidget(). This is done by KTMainWindowKTMainWindow itself and we don't have to +take care of that. +The only thing left then is to interpret the command-line. We get the command-line option and ask, if int argc is > 1, which +indicates that the user called our application with kscribble filename&_;to&_;open. Our window is then asked to open the file by it's +name and calls openDocumentFile() with the filename. + +The last line of the main() function does the known job: it executes the application instance and the program enters the event +loop. + +Now, in section The main() Function, we started to separate the execution process by +if( app.isRestored() ) and described the usual invocation process. The following now gives an introduction to session +management and how our application makes use of this. + + + + +Invocation by Session Management + +As we said, the main() function tests, if the application is invoked by the session manager. The session manager is responsible to +save the current status of all open application windows on the user's desktop and has to restore them when the user logs in the next +time, which means that the application is not started by the user but automatically invoked. The part of the code which is executed +was: +6 if (app.isRestored()) +7 { +8 RESTORE(KScribbleApp); +9 } + + + +In The main() Function, we stated that we test the invocation by asking +app.isRestored(). Then line 8 gets executed. It looks like a simple statement, but in fact this will result in a complex execution +process which we want to follow in this section. + +RESTORE() itself is a macro provided by KTMainWindowKTMainWindow. It expands to the following code: + +if (app.isRestored()){ + int n = 1; + while (KTMainWindow::canBeRestored(n)){ + (new KScribbleApp)->restore(n); + n++; + } +} + + + +This will restore all application windows of the class KScribbleApp by creating the instances and calling restore() to the +new window. It is important to realize that if your application uses several different widgets that inherit KTMainWindowKTMainWindow, you have +to expand the macro and determine the type of the top widgets by using KTMainWindowKTMainWindow::classNameOfToplevel(n) instead of the class +KScribbleApp. +The restore() method then reads the part of the session file that contains the information about the window. As KTMainWindowKTMainWindow +stores all of this for us, we don't have to care for anything else. Only information that belong to our specific instance of +KScribbleApp has to be found then. Usually this would be a temporary file that we created to store the document or other +initialization that we might need. To get to this restoration information, we only have to overwrite two virtual methods of +KTMainWindowKTMainWindow, saveProperties() and readProperties(). The information we have to save on session end is if the currently +opened document is modified or not and the filename. If the file is modified, we will get a temporary filename to save it to. On +session beginning, this information now is used to restore the document contents: + +void KScribbleApp::readProperties(KConfig*) +{ + QString filename = config->readEntry("filename",""); + bool modified = config->readBoolEntry("modified",false); + if( modified ){ + bool b_canRecover; + QString tempname = kapp->checkRecoverFile(filename,b_canRecover); + + if(b_canRecover){ + doc->openDocument(tempname); + doc->setModified(); + QFileInfo info(filename); + doc->pathName(info.absFilePath()); + doc->title(info.fileName()); + QFile::remove(tempname); + } + } + else if(!filename.isEmpty()){ + doc->openDocument(filename); + } + setCaption(kapp->appName()+": "+doc->getTitle()); +} + + +Here, the line kapp->checkRecoverFile() seems a bit strange, as b&_;canRecover is not initialized. This is done by the method +which sets it to true, if there is a recover file. As we only saved a document in a recover file if it was modified, we set the +modified bit directly to indicate that the information hasn't been saved to the belonging file. Also we have to take care that the +recover file has another filename than the original file which was opened. Therefore, we have to reset the filename and path to the old +filename. Finally, we have the information we wanted to recover and we can delete the temporary file by the session manager. + +Summary: + +During this chapter, you got to know how the application starts either by normal user invocation or by the session manager. We went +through the code to learn how the parts of the visual interface of the application are constructed as well as how to initialize +attributes by configuration file entries. Now you can execute the framework application to test these functions and see how the +program window reacts. + + + + +Additional Contents of KDevelop Projects + +Besides the source code provided, KDevelop projects contain a lot of other additional parts that are of interest to the developer. These +are: + + +a program icon + + +a program mini-icon + + +a .kdelnk .kdelnk file + + +a sample SGML SGML-documentation file + + +a set of API API-documentation generated from the framework source + + + + +Except the API API-documentation, these elements of the project will be installed together with the application binary. As the project +framework has to be as open as possible, you have to adapt these parts towards your project goals. These are first to edit the icons +provided. This will give your application a unique identifier by which the user can determine your application visually in window +manager menus. The .kdelnk .kdelnk file then is a file that installs your application into kpanel in the Applications menu. This has +to be edited by setting the installation path which will be discussed later in this handbook. Finally, the documentation that you will +provide to the user is written in SGML SGML. This makes it very easy to create several different output from the same source. By default, +KDevelop offers to create a set of HTML files from this source, for KDE-projects this will automatically use the ksgml2html ksgml2html +program to add a consistent KDE look and feel to the documentation. In a later section, we will see how the SGML SGML source is edited and +what we have to watch for installation on the end-user. + +Finally, the API API (Application Programming Interface) documentation allows you and other developers to quickly get into the code and use +the classes without having to guess what purpose each class is for. We will learn how to extend the API API documentation in a later step, +for now it lasts to know that the documentation is generated by the KDoc KDoc program, which processes the header files and creates the +HTML output, therefore all documentation is placed in the headers. + + + + +Application View Design + +When developing an application with a graphical user interface, the main work takes place in providing a so-called "view" for the +application. A view generally is a widget that displays the data of a document and provides methods to manipulate the document +contents. This can be done by the user via the events he emits by the keyboard or the mouse; more complex operations are often +processed by toolbar toolbars and menubars which interact with the view and the document. The statusbar then provides information about the +document, view or application status. As an example, we look at how an editor is constructed and where we can find which part. + +An editor generally is supposed to provide an interface to view and/or change the contents of a text document for the user. If you +start KEdit, you see the visual interface as the following: + + + +The menubar: providing complex operations as well as opening, saving and closing files and exiting the application. + + +The toolbar toolbar: offers icons which allow quicker access for most needed functions, + + +The statusbar: displays the status of the cursor position by the current row and column, + + +The view in the center of the window, displaying a document and offering a cursor connected to the keyboard and the mouse +to operate on the data. + + + + +Now it's easy to understand, that a view is the most unique part of the application and the design of the view decides about the +usability and acceptability of an application. This means that one of the first steps in development is to determine the purpose of the +application and what kind of view design would match best to allow any user to work with the application with a minimum of work +learning how to handle the user interface. + +For some purposes like text editing and displaying HTML files, views are provided by the Qt Qt and KDE libraries KDE libraries; we will discuss certain +aspects of these high-level widgets in the next section. But for most applications new widgets have to be designed and implemented. It +is that what makes a programmer also a designer and where his abilities on creativity are asked. Nevertheless, you should watch for +intuitivity first. Remember that a lot of users won't accept an application that isn't + + + +graphically nice, + + +offering a lot of features, + + +easy to handle, + + +fast to learn how to use it. + + + +Needless to say that stability is a major design goal. Nobody can prevent bugs, but a minimum can be reached at least by clever design +goals and wide use of object-oriented design. C++ makes programming a joy if you know how to exploit it's capabilities- inheritance, +information hiding and reusablitity of already existing code. + +When creating a KDE or Qt Qt project, you always have to have a view that inherits QWidgetQWidget, either by direct inheritance or because +the library widget you want to use inherits QWidgetQWidget. Therefore, the Application Wizard already constructed a view that is an +instance of a class &<;yourapp&>;View, which inherits QWidgetQWidget already. The application creates your view in the method +initView(), where an instance is created and connected to the main widget as it's view with KTMainWidget::setView(). + +This chapter therefore describes how to use library widgets for creating views of KDE or Qt Qt applications that are generated with +KDevelop, then we're looking at the libraries and what kind of views are already offered. + + +Using Library Views + +When your application design has been set up, you first should look for already existing code that will make your life a lot easier. A +part of this search is to look for a widget that can be used as a view or at least as a part of it; either directly or by inheritance. +The KDE and Qt Qt libraries already contain a set of widgets that can be used for this purpose. To use them, you have two options: + + + remove the new view class and create an instance of a library widget; then set this as the view, + + + change the inheritance of the provided view class to the class of the library widget to use. + + + + +In either way, it is important to know that if the application framework is currently not linked against the library that contains the +widget, the linker will fail. After you decided to use a certain widget, look for the library to link to; then open +"Project"->"Options" from the KDevelop menubar. Switch to the "Linker Options" page and look for the checkmarks indicating the +libraries that are currently used. If the library of your view widget is already checked, you can leave the project options untouched +and start doing the necessary changes due to your choice. If not, and the linker options offer to add the library by a check box, +check it and press "OK" to leave the project options dialog again. In any other case, add the library in the edit line below with the +-l option. For libraries that your application has to search for before preparing the Makefiles by the configure script on +the end-user machine, add the according search macro to the configure.in file located at the root directory of your project and +add the macro to the edit line. Mind that you have to run "Build"->"Autoconf and automake" and "Build"->"Configure" before the +Makefiles contain the correct expansion for the library macro. + +Also, if the include files for the library to add are not in the current include path (which can be seen by the -I options in the +output window on "Make"), you have to add the path to the Project Options dialog -"Compiler Options" page with the -I +option or the according automake macro at the edit line for "Additional Options". + + +Qt <indexterm remap="idx"><primary>Qt</primary></indexterm> Views + +Looking at the first page of the Qt Qt online documentation, you will find a link to "Widget Screenshots" where you can have a look at +how the widgets Qt Qt contains look like. These are ready to use and can be combined together to form complex widgets to create +application views or dialogs. In the following, we'll discuss some of these which are very usable for creating application views, but +keep in mind that the KDE libraries KDE libraries sometimes contain other widgets for the same purpose; those will be reviewed in the next section. + +Here are a set of hints for what purpose you could use which Qt Qt component: + +if your view area isn't big enough to display all your data, the user must be enabled to scroll over the document with bars on +the left and bottom of the view. For this, Qt Qt provides the class QScrollView, which offers a scrollable child area. As explained, +you could inherit your own widget from QScrollView or use an instance to manage your document's view widget. + + +to create a ScrollView yourself, inherit the View widget from QWidgetQWidget and add vertical and horizontal QScrollBars. +(this is done by KDE`s KHTMLView widget). + + +for text processing, use QMultiLineEdit. This class provides a complete text editor widget that is already capable to cut, +copy and paste text and is managed by a scrollview. + + +use QTableView to display data that is arranged in a table. As QTableView is managed by scrollbars as well, it offers a +good solution for table calculation applications. + + +to display two different widgets or two widget instances at the same time, use QSplitter. This allows to tile views by +horizontal or vertical dividers. Netscape's Mail window is a good example how this would look like- the main view is separated by a +splitter vertically, the right window then is divided again horizontally. + + +QListView displays information in a list and tree. This is useful for creating file trees or any other hierarchical +information you want to interact with. + + + + +You see that Qt Qt alone offers a whole set of widgets which are ready to use so you don't have to invent new solutions if these match +your needs. The sideffect when using standard widgets is that users already know how to handle them and only have to concentrate on +the displayed data. + + + +KDE Views + +The KDE libraries KDE libraries were invented to make designing applications for the K Desktop Environment easier and capable of more functionality +than what Qt Qt alone is offering. To see what's available, we have a look at the documentation tree in KDevelop. You see that the KDE +libraries start with kdecore, which is a base for all KDE applications KDE applications. Then,kdeui offers user interface elements. This is +where we will find some useful things first. For creating new applications, the kdeui library offers: + + +KTabListBoxKTabListBox: offers a multi-column list box where the user can change the rows with drag'n drop drag'n drop. + + +KTreeListKTreeList: inherited from QTableViewQTableView, offering a collapsible tree. This could be used instead of +QListView. In KDE 2.0, this class will disappear. + + +KEditKEdit: the base classes for the KEdit application offered with KDE. This could be used instead of +QMultiLineEditQMultiLineEdit. + + +KNewPannerKNewPanner: manage two child widgets like QSplitterQSplitter. In KDE 2.0, this class will disappear. + + + + +The khtmlw library on the other hand offers a complete HTML-interpreting widget that is ready to use. It is scrollable already, +so you don't even have to take care for that. A possible use could be to integrate it as a preview widget for an HTML editor; used by +applications such as KFM, KDEHelp KDEHelp and KDevelop to display HTML files. + + + + +Creating your own Views + +Now that you have a general overview of what is already provided, you may notice that for a lot of purposes already existing widgets +can be used or combined together. KMail is an example as well as KDevelop itself makes use of library view components to display data. + +For applications that use a special file format or have to deal with graphics, you are probably forced to create your own view widget +to allow data manipulation. This is realized in our sample by the class KScribbleView, already providing a base for a view area. + +The inheritance from QWidgetQWidget is necessary to overwrite the virtual methods to process user events, this is probably the most work +besides providing popup menus for easier access of certain functions. Also it is likely that you have to implement a set of slots which +can be accessed by toolbar toolbar buttons or menu bar commands to connect to as well as methods to manipulate variables such as e.g. a painter +color. + +For completeness, we will repeat the necessary methods: + +a) Keyboard events --TAB and Shift-TAB keys: + +changes the keyboard input focus from the current widget to the next widget in the focus order. The focus can be set to widgets by +calling setFocusPolicysetFocusPolicy()() and process the following event handlers: + + + +virtual void focusInEventfocusInEvent() ( QFocusEventQFocusEvent * ) + + +virtual void focusOutEventfocusOutEvent() ( QFocusEventQFocusEvent * ) + + + + +b) all other keyboard input: + + +virtual void keyPressEventkeyPressEvent() ( QKeyEventQKeyEvent * ) + + +virtual void keyReleaseEventkeyReleaseEvent() ( QKeyEventQKeyEvent * ) + + + + +c) mouse movements: + + +virtual void mouseMoveEvent ( QMouseEventQMouseEvent * ) + + +virtual void enterEvententerEvent() ( QEventQEvent * ) + + +virtual void leaveEventleaveEvent() ( QEventQEvent * ) + + + + +d) mouse button actions: + + +virtual void mousePressEventmousePressEvent() ( QMouseEventQMouseEvent * ) + + +virtual void mouseReleaseEventmouseReleaseEvent() ( QMouseEventQMouseEvent * ) + + +virtual void mouseDoubleClickEventmouseDoubleClickEvent() ( QMouseEventQMouseEvent * ) + + + + +e) window events containing the widget: + + +virtual void moveEventmoveEvent() ( QMoveEventQMoveEvent * ) + + +virtual void resizeEventresizeEvent() ( QResizeEventQResizeEvent * ) + + +virtual void closeEventcloseEvent() ( QCloseEventQCloseEvent * ) + + + + +When re-implementing these functions, you should watch certain issues to avoid implementation mistakes that will make it almost +impossible to change the widget's behavior afterwards: + + +declare your virtual methods as virtual as well and keep the access to protected. This allows code-reuse by inheritance and +is consistent. + + +don't hard-code any event-processing which should be made configurable. This counts most for keyboard events which should be +realized with keyboard acceleratoraccelerators if any function is called. This even counts for text processing ! (Imagine that a lot of users are +familiar with their favorite editor's behavior. If this is configurable, they can use the behavior they like and are used to) + + +forward popup menu highlighting signals to the main widget to enable statusbar help + + + + + + + +Configuring Menubars and Toolbars + +Menubars and toolbar toolbars are one of the most important parts of an application to provide methods to work with a document structure. As a +general rule, you should make all functions available by the menubar. Those methods that should not be available at a current stage of +the application process should be disabled. + +Further, an application can only contain one menubar, but several toolbar toolbars. Toolbars on the other hand should contain only the most +frequently used commands by pixmap icons or provide quick access methods like combos to select values. + + +How does it work ? + +Each entry, may it be a menuentry or a toolbar toolbar item, has a resource ID which is an integer value. As these values can't be used twice, +those are set by macros, where the numeric values are replaced by a descriptive ID name that can be used in your sources then. + +All resource ID's are collected in the file resource.h, where you can keep an overview over the used values. Anyway, the compiler +will inform you if you've used a value twice for constructing entries. Also, the resource file should contain all menu acceleratoraccelerators by +IDK macro replacements. An example: + +(resource.h) + +#define ID_VIEW_TOOLBAR 12010 + + +(kscribble.cpp) + +// menu entry Toolbar in the "view" menubar menu +view_menu->insertItem(i18n("&&;Toolbar"), ID_VIEW_TOOLBAR); + + + +This inserts the entry Toolbar to the View popup menu of the menubar in the kscribble application. The resource ID's name is held to +contain the menu name and the action's name visible. The ampersand is set in front of the letter that functions as a keyboard +acceleratoraccelerator and the entry itself is embraced by the i18n() internationalization macro. + +On activating the menu item, the commandCallback() switch is called with the ID number. There, you have to add an according comparator +value with the method you want to execute on activating the menuentry: + + case ID_VIEW_TOOLBAR: + slotViewToolBar(); + break; + + +Note: you don't have to use the ID system. If no ID is given, the menu gets numbered automatically. The KDevelop framework +uses this as it allows accessing menu and toolbar toolbar ID's to create switch statements that select the slot to call on +activated() for menus, clicked() for toolbar toolbar buttons. The connection can also be made directly using the provided methods of +the classes providing menus and toolbar toolbars. + + + +Adding a new menu + +A new menubar is added to an application by the following: + + +add a pointer to the new menu in the App-class header + + +call the constructor of QPopupMenuQPopupMenu to the pointer in initMenuBar() at the location where your menubar should appear +later. + + +insert the according menu-items into the popup menu and set their resource ID's in the resource file + + +add connects for commandCallback() and statusCallback() to the menu at the end of initMenuBar() + + +add the methods you want to call by the menu-entries in the header and implementation file. + + +add the switch statements for the entries to the commandCallback() and statusCallback() methods + + + + + + +Integrating Toolbar buttons + +Toolbar buttons can be added like menu-entries with the difference that the used method is insertButton() and takes a button +pixmap and tool-tip text instead of a menu text. + +The icons you want to use can be loaded by KIconLoader, where KApplicationKApplication offers the macros ICON() and Icon() to +access the icon loader and load the icon. These macros take the filename of the pixmap as their parameter to load the icon from the KDE +file system in a certain order (see KIconLoader for the search order). + +The KDE libraries KDE libraries also offer a set of toolbar toolbar buttons that can be used for standard actions. In cases where they don't meet your needs, +you will have to paint your own pixmaps. KDevelop supports this by selecting "New" from the "File" menu, then select Pixmap as the file +type. Usually you will place your toolbar toolbar pixmaps in a project subdirectory "toolbar toolbar" and install them into your application specific +toolbar toolbar directory. + + + +Configuring Statusbars + +The KDevelop projects already make use of the statusbar by providing statusbar messages for menu-entries and toolbar toolbar buttons. When +adding a menuentry, also add your status message in the method statusCallback(). + +statusCallback() uses the method slotStatusHelpMsg() to display a statusbar message for two seconds. When executing a +command, you should use the method slotStatusMsg() at the beginning with the string describing what your application does; before +a return or method end, you should reset the statusbar message with a "Ready." string calling the same method. + + + +Keyboard Accelerator Configuration + +A very professional thing you should always add to your application are keyboard acceleratoraccelerators. Those are mainly used by experienced +users that want to work fast with their applications and are willing to learn shortcutshortcutss. For this, the KDE libraries KDE libraries provide the class +KAccelKAccel, which provides the keyboard acceleratoraccelerator keys and access to global configured standard keyboard acceleratoraccelerators. + +By default, frame applications generated by KDevelop only use standard keyboard acceleratoraccelerators such as F1 for accessing online-help, +Ctrl+N for New File etc. You should look for the keyboard acceleratoraccelerators already set in KAccelKAccel first before adding a new +acceleratoraccelerator. + +If your application contains a lot of acceleratoraccelerators, you should make them configurable by an Options-menu; either it could be combined +with other application configuration in a QWidgetQWidget or stand alone. The KDE library already provides a KKeyChooser for use +in tab dialogs, whereas KKeyDialog provides a ready-to use key-configuration dialog. + +See the following classes for more information: + +KAccelKAccel(kdecorekdecore), KKeyChooserKKeyChooser, KKeyDialogKKeyDialog (kdeuikdeui) + + + + +The Dialogeditor: Where your Dialogs are Build + + +What the Dialogeditor provides + +The built-In dialogeditor of KDevelop is designed to help you construct widgets and dialogs that fit your application's purpose and +reduces the time rapidly to extend the GUI of your application. The only limitation for now is that the dialogeditor does not support +geometry management that is provided by Qt Qt; therefore the dialogs are static in their size and this may lead to certain circumstances +where e.g. the label width is not long enough to support the full length of a translation. + +On the other hand, the current state of the editor in conjunction with KDevelop's project management offers the fastest way to create +full-featured applications for the K Desktop Environment. + + + +Qt <indexterm remap="idx"><primary>Qt</primary></indexterm> and KDE Widgets + +Currently provided widgets are: + +QT-Widgets: + + +QWidgetQWidget - a widget that can be specified by yourself and can contain other widgets as well. This allows creating a widget +hierarchy within your dialog. + + +QLabel QLabel - a label that represents text information on the widget. Use QLabel QLabel e.g. in front of lineedits to signal what the +purpose of the line-edit is or which variable e.g. a combo box allows to set. + + +QPushButton - a button that allows to e.g. call another dialog like QFileDialog for selecting a filename. + + +QCheckBox - a check box for e.g. enabling/disabling options. QCheckBox is widely used for configuration dialogs. + + +QLCDNumber - displays numbers in LCD style. Often used for clocks. + + +QRadioButton - like QCheckBox often used to let the user set any options. QRadioButton specializes the options setting when more +of them depend on each other, e.g. you have three radio-buttons, but you want the user to choose one of three offered options. See +QButtonGroupQButtonGroup for additional information. + + +QComboBoxQComboBox - a combo box lets the user set a value by selecting it from a +drop-down menu or by inserting the value, if the box is write enabled. + + +QListBox - provides a single-column list of items that can be scrolled. + + +QListView - creates a multi-column list view that can be used to display e.g. file trees etc. in tree and table view. + + +QMultiLineEdit - offers a multi-line editor. + + +QProgressBar - displays the progress of an action that takes a longer time to be finished. + + +QSpinBox - allows choosing numeric values by up- and down buttons or insertion if write enabled. + + +QSlider - sets a value in a program-defined range by a slider. + + +QScrollBar - indicates the range of a value and sets the current value by a slider as well as up- and down buttons; often +used for widgets whose contents is larger than the actually visible view area. By using the scrollbar, the visible area can be changed +to another part of the widgets' contents. + + +QGroupBox - provides a group box frame with title to indicate that child widgets within the box belong together. + + + + +KDE-Widgets: + + +KColorButton - a pushbutton displaying a selected color. On a button press, the KDE Color dialog is shown where the user can +select another color. Often used for drawing applications or in any case where color values can be set. + + +KCombo - similar to QComboBoxQComboBox. Lets the user choose a value by a drop-down list box. + + +KDatePicker - a complete widget to get a date value by the user. + + +KDateTable - a calendar table to select a date of a month. Used by KDatePicker to build the date picker dialog. + + +KKeyButton - a button to select a key value. If the button is selected, it gets activated. Pressing a keyboard button will +change the key value for the button which can be used to configure key-bindings. + + +KLed - and LED (Light Emitting Diode) widget to display a certain state. + + +KLedLamp - and LED lamp that also supports click actions + + +KProgress - similar to QProgressBar, KProgress supports certain other values. + + +KRestrictedLine - a QLineEdit that only accepts certain user input. This can be used to restrict access to certain data +by password dialogs. + + +KSeparator - a separator widget to be used in all cases where KDE applications KDE applications require a separator to provide a unique look. +Often used in dialogs to separate logical parts where QGroupBox doesn't fit. + + +KTreeList - a collapsible list view to display trees similar to QListView. + + + + + + +Properties of Qt <indexterm remap="idx"><primary>Qt</primary></indexterm> supported Widgets + +The following chapter gives a complete overview over the currently supported widgets of the Qt Qt toolkit. To achieve a better +understanding of the properties, these are separated to their inheritance. As all of them inherit QWidgetQWidget, this class is described +first. All QWidgetQWidget properties are available for all other widgets as well, so these are not listed for them again. For widget groups +that inherit an abstract subclass of QWidgetQWidget as their base-class, the base-classes' properties are listed first (though this class does +not provide a widget in the dialogeditor itself). Then the widget properties for the available widget of the group contains the +properties that are specific to it. For a better understanding the inheritance tree of the available widgets is listed below: + + + +QWidget + + +QButton (abstract) + + +QCheckBox + + +QPushButton + + +QRadioButton + + + + + +QComboBox + + +QFrame (abstract for now) + + +QGroupBox + + +QLCDNumber + + +QLabel + + +QProgressBar + + +QScrollView (abstract for now) + + +QListView + + + + + +QSpinBox + + +QTableView (abstract) + + +QListBox + + +QMultiLineEdit + + + + + + + + +QLineEdit + + +QScrollBar + + +QSlider + + + + + + + + +<indexterm remap="cdx"><primary><literal>QWidget</literal></primary></indexterm>QWidget Properties + +QWidgetQWidget is the base class for almost all widgets in Qt Qt and KDE. Therefore widgets that inherit QWidgetQWidget will allow to use the same +settings in most cases. + + + +Appearance: + + +BgColor: Background color of the widget + + +BgMode: Background mode of the widget + + +BgPalColor: Color pallette for the background + + +BgPixmap: filename for a background pixmap + + +Cursor: Cursor over the widget + + +Font: Font for the widget + + +MaskBitmap: filename for a masking bitmap. + + + + + +C++ Code: + + +AcceptsDrops: if set to true, the widget item will accept drops by drag'n drop drag'n drop mechanisms (Qt Qt drag'n drop drag'n drop +protocol, not KDE 1.x !) + + +Connections: connects the item's signals to slots + + +FocusProxy: the item that gives its focus to this widget. + + +HasFocus: sets if the item has the focus by default. Mind that only one item per dialog can have this value as true + + +ResizeToParent: resizes the widget to its parent's size (not visible in editing mode) + + +VarName: Variable name of the item. Change this to names that describe the item's purpose. + + + + + +General: + + +IsEnabled: sets if the widget will accept user events + + +IsHidden: sets the item to be visible(false) or hidden(true) + + +Name: sets the name of the widget. Mind that the name is different from the VarName in C++ Code. + + + + + +Geometry: + + +Height: height of the item + + +IsFixedSize: + + +MaxHeight: maximum value for Height + + +MaxWidth: maximum value for Width + + +MinHeight: minimum value for Height + + +MinWidth: minimum value for Width + + +SizeIncX: pixel steps for resize actions to X direction + + +SizeIncY: pixel steps for resize actions to Y direction + + +Width: width of the item + + +X: position horizontal, counted from the left corner + + +Y: position vertical, counted up to down + + + + + + + + + +<indexterm remap="cdx"><primary><literal>QButton</literal></primary></indexterm>QButton inherited widgets + +QButtonQButton is an abstract widget class that provides properties common to buttons. + +Inherits QWidget + +Inherited by QCheckBox, QPushButton and QRadioButton inherit QButtonQButton. + + + +Appearance: + + +setPixmap: sets the pixmap filename to use + + + + + +General: + + +setText: the text on labels, buttons and boxes, also pre-set text for lineedits. + + +setAutoRepeat: if enabled, the clicked() signal is emitted at regular intervals while the button is down. No effect on +toggle buttons. + + +setAutoResize: Enables auto-resizing if TRUE. When auto-resize is enabled, the button will resizes itself +whenever the contents changes. + + + + + + + + +QCheckBox Properties + +Inherits QWidget and QButton + + + +General: + + +isChecked: (setChecked) defines is the checkbox is set checked on construction + + + + + + + + + +QPushButton Properties + +Inherits QWidget and QButton + + + +General: + + +isAutoDefault: (setAutoDefault) the auto-default button becomes the default push button if it receives the keyboard input focus. + + +isDefault: (setDefault) there can be only one default button and it is only allowed to use in a dialog (see QDialog). The +default button emits clicked() if the user presses the Enter key. + + +isMenuButton: (setIsMenuButton) tells the button to draw +a menu indication triangle if enabled. The menu has to be inserted separately. + + +isToggleButton::(setToggleButton) makes a push button a toggle button, so the button has a similar state as check +boxes. + + +isToggledOn: (setOn) (public slot) switches a toggle button on. + + + + + + + + + +QRadioButton Properties + +Inherits QWidget and QButton + + + +General: + + +isChecked: (setChecked) defines is the radio button is set checked on construction + + + + + + + + + + +<indexterm remap="cdx"><primary><literal>QComboBox</literal></primary></indexterm>QComboBox Properties + +Inherits QWidget + +( no additional properties for now) + + + +QFrame inherited widgets + +Inherits QWidget + +For now only used as an abstract class. + + + +Appearance: + + +Margin (setMargin): sets the margin, which is the distance from the innermost pixel of the frame and the outermost pixel of the +contents. + + + + + + + + +QGroupBox Properties + +Inherits QWidget and QFrame + + + +General: + + +Title: (setTitle) sets the group box title that is displayed in the box frame. + + + + + + + + + +QLCDNumber Properties + +Inherits QWidget and QFrame + + + +General: + + +NumDigits:(setNumDigits) sets the number of digits displayed in QLCDNumber + + +Value: (display) (public slot) sets the initial value for QLCDNumber + + + + + + + + + +QLabel <indexterm remap="idx"><primary>QLabel</primary></indexterm> Properties + +Inherits QWidget and QFrame + + + +Appearance: + + +Margin (setMargin): sets the margin, which is for QLabel QLabel the distance from the frame to the first letter of the label text, +depending on the alignment of the label. + + + + + +C++ Code: + + +Buddy: (setBuddy) sets the buddy widget of the label. + + + + + +General: + + +Text: (setText) sets the label text. + + +isAutoResize: (setAutoResize) if TRUE, the label will resize itself if the contents changes. The top left corner is not +moved. + + + + + + + + + +QProgressBar Properties + +Inherits QWidget and QFrame + + + +General: + + +TotalSteps: (setTotalSteps) (public slot) sets the total steps of the progress bar. During the iteration of your action to +display the progress, you have to call setProgress(int) to advance the progress step displayed to (int). + + + + + + + + + +QScrollView + +Inherits QWidget and QFrame + +Inherited by QListBox +(abstract for now) + +Provides a scrollable widget that manages the display of a child widget by a vertical and horizontal scrollbar. + + +QListView + +Inherits QWidget, QFrame and QListView + +Provides a list view to display hierarchical data either in a table or a tree. Manages itself by scrollbars through QScrollView. + + + +Appearance: + + +ListViewFont: (setFont()) Sets the font of the ListView items + + +ListViewPalette: (setPalette()) Sets the palette of the list view items + + +TreeStepSize: (setTreeStepSize(int)) Offset of pixels of a child item to its parent item + + +hScrollBarMode: Scrollbar mode provided by QScrollView for the horizontal scrollbar + + +isAllColumnsShowFocus: (setAllColumnsShowFocus(bool)) displays focus on all columns of an item. + + +isMultiSelection: enables multi-selection of list items + + +isRootDecorated: enables the + and - decoration to open and close trees + + +vScrollBarMode:Scrollbar mode provided by QScrollView for the vertical scrollbar + + + + + +General: + + +Entries: lets you insert a list of entries that are pre-set as QListViewItems. + + +isAutoUpdate: + + + + + + + + + + +QSpinBox Properties + +Inherits QWidget and QFrame + + + +General: + + +MaxValue: the maximum value the user can choose + + +MinValue: the minimum value the user can choose + + +Prefix: + + +Suffix: + + +Value: the pre-set value when the widget is shown + + +isWrapping: + + + + + + + + + +QTableView inherited widgets + +Inherits QWidget, QFrame and QTableView + +Inherited by QListBox and QMultiLineEdit + + +QListBox Properties + +Inherits QWidget, QFrame and QTableView + + + +General: + + +isAutoBottomScrollBar: (setAutoBottomScrollBar) + + +isAutoScroll: (setAutoScroll) + + +isAutoScrollBar: (setAutoScrollBar) + + +isAutoUpdate: (setAutoUpdate) + + +isBottomScrollBar: (setBottomScrollBar) + + +isDragSelect: (setDragSelect) + + +isSmoothScrolling: (setSmoothScrolling) + + + + + +Geometry: + + +setFixedVisibleLines: sets a fixed height for the widget so that the given number of text lines are displayed using the +current font. + + + + + + + + + +QMultiLineEdit Properties + +Inherits QWidget, QFrame and QTableView + + + +General: + + +Text: (setText) (public slot) sets the text of the widget. + + +isAutoUpdate: (setAutoUpdate) used to avoid flicker during large changes; the view is not updated if disabled. + + +isOverWriteMode: (setOverwriteMode) (public slot) sets overwrite enabled or disabled. + + +isReadOnly: (setReadOnly) (public slot) sets the widget text to read only; disables text input. + + +isTextSelected: (selectAll)(public slot) marks the whole text selected + + + + + +Geometry: + + +setFixedVisibleLines: sets a fixed height for the widget so that the given number of text lines are displayed using the current font. + + + + + + + + + + + +QLineEdit Properties + +Inherits QWidget + + + +General: + + +CursorPosition: (setCursorPosition) sets the default cursor position. + + +MaxLength: (setMaxLength) sets the maximum string length + + +Text: (setText) (public slot) sets the contents displayed on construction + + +hasFrame: (setFrame) draws the line edit within a two-pixel frame if enabled. + + +isTextSelected: (selectAll) (public slot) sets the text to be selected. + + + + + + + + + +QScrollBar Properties + +Inherits QWidget and QRangeControl. + + + +General: + + +MaxValue: sets the maximum slider value; used in constructor (optional) + + +MinValue: sets the minimum slider value; used in constructor (optional) + + +Orientation: (setOrientation) sets the orientation of the scrollbar to horizontal or vertical. + + +Value: sets the initial value of the scrollbar in the constructor (optional) + + +isTracking: (setTracking) if enabled, the scrollbar emits valueChanged() whenever the bar is dragged; otherwise only on +mouse release. + + + + + + + + + +QSlider Properties + +Inherits QWidget and QRangeControl. + + + +General: + + +MaxValue: sets the maximum slider value; used in constructor (optional) + + +MinValue: sets the minimum slider value; used in constructor (optional) + + +Orientation: (setOrientation) sets the orientation of the slider to horizontal or vertical. + + +Value: (setValue) (public slot) uses QRangeControl::setValue() to set the value. + + +isTracking:(setTracking) if enabled, the slider emits valueChanged() whenever the slider is dragged; otherwise only on +mouse release. + + + + + + + + + + + +Properties of KDE supported Widgets + + + +QWidget + + +QButton (abstract) + + +QPushButton + + +KColorButton + + +KKeyButton + + + + + + + + +QComboBox + + +KCombo + + + + + +QFrame (abstract for now) + + +KDatePicker + + +KLedLamp + + +KProgress + + +KSeparator + + +QTableView (abstract) + + +KDateTable + + +KTreeList + + + + + + + + +QLineEdit + + +KRestrictedLine + + + + + + + + +KLed + + + + + +KColorButton + +Inherits QPushButton + + + +General + + +DisplayedColor (setColor()) the displayed color on the button + + + + + + + + + +KKeyButton + + + + +KCombo + +Inherits: QComboBox + + + +General + + +Entries the string list of entries displayed in the combo box + + +Text the text displayed in the combo box currently + + +isAutoResize resizes the combo box to the current item + + + + + + + + + +KDatePicker + + + +Appearance + + +FontSize the font size for the date picker + + + + + + + + + +KLedLamp + + + + +KProgress + + + + +KSeparator + + + +General + + +Orientation sets the orientation of the separator to horizontal or vertical; default is horizontal + + + + + + + + + +KDateTable + + + + +KTreeList + + + +Appearance + + +TreeListBgColor + + +TreeListPalette + + +isBottomScrollbar + + +isScrollBar + + +isShowItemText + + +isSmoothScrolling + + +isTreeDrawing + + + + + +General + + +Entries + + +isAutoUpdate + + + + + + + + + +KRestrictedLine + + + + +KLed + +Inherits QWidget + + + +Appearance + + +LedColor: (setColor()) sets the displayed LED color + + + + + + + + + + +Constructing a new Dialog + +Constructing a new dialog is very easy if you already have experience with graphical construction applications. KDevelop offers to +create a widget visually and displays the look as it will be shown to the user directly. Further, you can have a preview of your widget +by selecting "Preview" from the "View" menu. + +To begin constructing a dialog or any other widget, switch to the Dialogeditor and select "New" from the "File" menu. Select "Qt/KDE Dialgo (*.kdevdlg) +from the New File dialog and enter the dialog filename. Construct your dialog and when youre finished, select "Generate all Sources" from the "Build"-menu. + +Then enter all needed information to the appearing dialog. Those are: + + +The Dialog inheritance. This is necessary because any widget is at least derived from QWidgetQWidget. Besides the widget types +provided by Qt Qt, you can inherit e.g. form an abstract base class you constructed yourself within your project. In this case, select +"custom" and enter the header file path to the line edit below. + + +The Dialog name. This sets the class name of the generated dialog. Select a classname that is descriptive for what the dialog +does; in cases of inheritance from QDialog, you may enter a name that ends with Dlg to remember yourself it's a dialog. +Naming convention should match that of KDE and Qt Qt: Use uppercase letters for your classname. For e.g. a grid-size selection dialog, you +would enter GridSizeDlg. + + +The generated filenames. Those are preset when entering the dialog name, but can be changed afterwards. If you want to use other +filenames, the naming convention should also match that of KDE and Qt Qt: the filenames are all lowercase and contain the classname to +remember what class is kept where. The data file that has to be set will later contain the generated code that will build up your +dialog. You should not edit this file manually afterwards; use the implementation file for any additions towards dialog construction +code and method implementations. + + + + +The dialog will then show itself as a widget with a grid. As the dialogeditor uses the grid to snap any child widgets to the geometry, +you can change the grid size with the "Grid Size" entry in the "View" menu, if the preset values don't match your needs. + +Then select the "Widgets" tabulator on the left pane and press the button for the widget item you want to add to the main widget. It +directly appears on the main widget's left upper corner and gets selected by a resizable frame. Then move or resize the widget with the +mouse. The cursor will change to indicate which action can be done at the current position. + +After having finished the construction, select "Generate Files" from the "Build" menu or hit the according toolbar toolbar button. The files +will then be generated at the preset location and included into your project sources. A rebuild or make will compile all generated +files within your project and you can add the according constructor call to the application to invoke the dialog or widget. For KDE +projects, all widget properties that will be visible later, e.g. label texts, are set with the i18n() macro of kapp.hkapp.h to +support internationalization. Therefore you should do a "Make Messages and merge" when finished with construction and implementation. + +When creating a dialog or widget, you should watch the following guidelines: + + +Always try to be consistent! This is probably the most important rule when constructing GUI elements. Mind that the user will +only accept an application that is easy to understand no matter how complex it's purpose may be. + + +Add help wherever you can by tool-tips, What's this..? help or Quick-help. This allows getting direct information about the +purpose of the GUI elements. + + +watch the keyboard focus keyboard focus ! The generator does not take care of that- this has to be watched when constructing any widget; +otherwise you have to reorder your initialization code by hand which is a very unthankful job. The keyboard focus keyboard focus on any widget means +the oder on which items get the keyboard input focus when the user presses the tab and shift+tab button. It would be very annoying if +the focus changes everywhere but not to the next widget visible below or to the right of the current widget. Therefore start +constructing your widget top down from left to right to ensure the consistency of the focus. + + + + + + +Setting Widget Properties + +widget propertiesdialogeditorproperties window +Widget properties can be set easily with the properties window entries. When a widget gets selected, the properties window +automatically updates to the properties of the current widget. As all widgets are derived from QWidgetQWidget, you can set the +QWidgetQWidget properties plus an amount of properties that are specific to the selected widget. Properties can be: + + + +Integer values, such as the geometry of a widget or the font size + + +Boolean values to enable/disable certain parameters of the widget. Set with combos containing true and false + + +enumerable values of a widget, e.g. the palette. Set with combos containing all possible values + + +Color values for e.g. the displayed color. Set with the KDE Color Dialog + + +Font values for e.g. labels. Be careful to set Font values other than the default because this may prevent KDE from updating the +font. Set with the KDE Font Dialog + + +File names for e.g. background pixmaps. Do not use gif images here as these may get +unsupported by further Qt Qt versions > 1.42 + + + + + + +Integrating the Dialog + +Whenever you created a widget, you probably want to add it to the project to execute the action it is designed for. As a widget can be +constructed for several purposes, we will watch for two cases: a QWidgetQWidget inherited widget and a QDialog one. + + +<literal remap="tt"><indexterm remap="cdx"><primary><literal>QWidget</literal></primary></indexterm>QWidget</literal> inherited + +Let's say you created a widget that will be part of the main view. If it fills the whole view area, you have to add an instance pointer +to the header declaration of your KTMainWindowKTMainWindow instance replacing the currently set view widget. Then change the code in the +initView method to set this widget the main view. Additionally, you could remove the View class of the generated project, but mind +that the document instance and the App instance depends on the view class. In this case, it is technically a much better way to create +a mini-KDE application and construct your KTMainWindowKTMainWindow instance yourself. + +More often the widget is intended to be a part of the view area, which means it is combined with other widgets. This can be done by +using one of the following classes that provide a divider to separate two widgets: + + +QSplitter + + +KPanner + + +KNewPanner + + + + +If the main view shall contain more than two widgets, you have to use another instance of the divider as one of the two managed widgets +by the first one. Then add the according widgets to each panner and set the first panner the view area. + + + +<literal remap="tt">QDialog</literal> inherited + +If your widget inherits QDialog, it is probably intended to change one or more values; often this is used to set the application +preferences. To invoke the dialog, you have to add a slot to the App class by adding the method declaration and the implementation +body. Then add the constructor call to the method as well as a call to show() or exec() the dialog. Finally, you should take +care for processing the results of the dialog; this can either be done by the dialog who changes values of the parent widget itself or +by retrieving the values from the dialog (which would make your dialog a lot more reusable in other projects). Mind that you should call +delete if you called the dialog instance with new to avoid memory leaks. + +Finally, you have to connect a menuentry (with according statusbar help) to the new slot invoking the dialog; optionally a keyboard +acceleratoraccelerator and a toolbar toolbar icon. For this, add a resource ID to the file resource.h with a define. Then add +an according menuentry to one of the popup menus already present in the menubar or create a new popup to add your menuentry. The +menuentry consists of: + + + +an optional icon pixmap. Call this with the Icon("iconname.xpm") macro of KApplicationKApplication to use the provided +KIconLoader instance. + + +the menuentry name. Add this with the i18n("&&;entryname") macro of KApplicationKApplication to allow +internationalization. The ampersand should be in front of the letter that will be displayed underlined to access the entry directly by +keyboard acceleration. + + +the member instance to call. Normally this would be the this pointer. + + +the member slot to call. Use SLOT(yourmethod() to call the slot on the signal activated(). + + +the acceleratoraccelerator key. This should be set to zero as this is done by an entry in initKeyAccel() where you +have to introduce an acceleratoraccelerator key together with the slot to call. Then call changeMenuAccel() to change the +menu item's acceleratoraccelerator. This will make it configurable by a key-chooser dialog later. For standard actions, use the +enumerable values given by KAccelKAccel. + + +the menu ID as set in resource.h + + + + + + + + +Printing Support + +QPrinterQPainterQPrintdialogprinting +Printing is usually provided by your application to let the user create a printed version of the document he created with the +application; therefore only needed for those programs that are used to produce something the user may want to print out, e.g. text or +pictures. In any case, this requires an interface that is provided by the Qt Qt library by two classes: the QPrintDialog class, +offering the printing dialog, and the QPainter class that is also used to draw the widget's contents usually. As the view-class of +an application is responsible for displaying a document, it also is responsible for printing. + + +The Qt <indexterm remap="idx"><primary>Qt</primary></indexterm> Print Dialog + +The Qt Qt Printer dialog can be used including qprintdialog.h. When using the KDE framework application, this is already used by the +view class, so you only have to complete the implementation of the method print() by using QPainter. + + + +The QPainter Class + +Independent of the printer's capabilities, you can use QPainter to draw your document onto the printer provided by QPrinter +like you would when drawing onto a widget. The only difficulty would be where you have to implement the way things have to be printed. + + + + +Help Functions + +A very important part of the development process is to provide help functionality to the user wherever possible. Most developers tend +to delay this, but you should remember that a normal user isn't necessarily a Unix-expert. He may come from the the dark side of +computer software usage offering all sweets that a user may need to work himself into using an application even without ever touching +the manuals. Therefore, the KDE and Qt Qt library provide all means usually considered making an application professional in the eyes of +the normal user by help functions that are ready to use. Within the application, those are: + + + +Tool-Tips + + +Quick-Help + + +Statusbar help + + +What's this...? buttons + + + + +Additionally, the application should provide means to access a HTML-based online manual directly using the standard help key F1. + +As KDevelop also offers all types of help as well as the KDE framework generated by the application wizard already contains support for +this, this chapter will help you find out where and how to add your help functionality. + +During the development of your application you should try to be consistent whatever you're doing; therefore you should do the necessary +steps directly while extending the code. This will prevent you from diving into the code again and figuring out what your application +does or what you intended by certain parts of the code. + + +Tool-Tips + +A very easy mean of providing help are tool-tips. Those are small help messages popping up while the user moves the mouse over a widget +that provides a tool-tip and disappears when the mouse moves away. The most popular usage of tool-tips is made in toolbar toolbars where your +tool-tips should be kept as small as possible because toolbar toolbars can be configured to display their contents in various ways: either +displaying the button, button with text on the right, button with text below, text only. This possibility should be made configurable +by the user, but isn't a must-be. The text is shown as a tool-tip anyway and a toolbar toolbar usually consists of buttons and other widgets +like lineedits and combo boxes. For a complete reference, see the KToolBarKToolBar class reference located in the KDE-UI library. + +As an example, we have a look at the the "New File" button in a generic application: + +toolBar()->insertButton(Icon("filenew.xpm"), ID_FILE_NEW, true, i18n("New File") ); + + +toolBar()KToolBar +There, the part i18n("New File") provides a tool-tip message. It is enclosed by the i18n() macro provided by kapp.hkapp.h to +translate the tool-tip towards the currently selected language. + +Tool-tips can also be added to any custom widget by using the classes QToolTip and QToolTipGroupQToolTipGroup provided by Qt Qt. +An example of that would be: + +QToolTip::add( yourwidget, i18n("your Tip") ); + + +For more information, see the Qt Qt-Online Reference, class QToolTipQToolTip. + + + +Adding Quick-help + +Quick-Help windows are another good example of providing help. The user can access the quick-help over a widget that it is connected to +by pressing the right mousebutton and selecting "Quick-Help" in the context menu. Therefore, Quick-Help can be placed somewhere in +between a detailed handbook reference help and tool-tips- the documentation would be too extensive and a tool-tip would not provide +enough information. To see how Quick-Help works, open any dialog within KDevelop and press the right mouse button over a dialog item. +Then select the Quick-Help menuentry and you're offered the help message. Additionally, those messages can be formatted by color, font +and even can be used for containing URL's to refer a certain webpage (and therefore can refer to the documentation handbook as well). + +To make use of Quick-Help, add the include file kquickhelp.hkquickhelp.h to your sourcefile containing quick-help. As the +KQuickHelpKQuickHelp class is part of the KDE-UI library, it should already be used by your application; if not, set the linker flags +of your project to use kdeui. + +An example would be: + +KQuickHelp::add( yourwidget, i18n("your Tip") ); + + + +which is almost the same as with QToolTip. When constructing a dialog with the KDevelop dialogeditor, add your tool-tips and Quickhelp +in the implementation file- NOT within the data sourcefile as this is rebuild by the dialogeditor every time you edit the widget. + +The KQuickHelpKQuickHelp class provides also formatting text by using tags. It allows hyperlinks including Internet protocols, colors, +font types and sizes. See the KDE Library Reference Guide and the class +documentation class +documentation for KQuickTipKQuickTip for more information. + + + +Extending the Statusbar Help + +As the frame applications provided by KDevelop contain a statusbar as well, it also offers a set of statusbar messages already for all +menu and toolbar toolbar items. A statusbar help message is a short message that extends the meaning of a tool-tip or can be seen as a +replacement for a tool-tip over menubar items and is (as the name suggests) displayed in the statusbar when the user enters a menu and +highlights the menu entry; therefore all menu items connect their signal highlighted(int) to the method statusCallback(int) +which selects the according message in a switch statement. Whenever you add a menuitem to already existing menus or a toolbar toolbar +item, add an according entry in this method with a short description of the action the user will cause when activating the button or +menuentry. + +Example: + + case ID_FILE_NEW: + slotStatusHelpMsg(i18n("Creates a new document")); + break; + + + +This will display a statusbar message by calling the method slotStatusHelpMsg() with the according translated help string whenever +the user highlights a menu or toolbar toolbar item with the id ID&_;FILE&_;NEW that is connected to the statusCallback() method. +Toolbars connect to this method by their signal pressed(int), which allows the user to press the toolbar toolbar button and move away the +mouse when he doesn't want to invoke the command. KToolBarKToolBar also offers the signal highlighted(int, bool) which can be used to +display the message whenever the user highlights the button instead of the preset signal used. + + + +The "What's This...?" Button + +The "What's This...?" "What's This...?" button provides help windows like QuickhelpKQuickHelp, but with the intention that the user wants to +get help about a certain widget within the working view or a toolbar toolbar item. It is placed in the toolbar toolbar and gets activated +once the user hits the button. The cursor changes to an arrow cursor with a question mark like the button itself looks like. The the +user can press on a visible widget item and gets a help window. As an exercise, you could try this behavior with the What's this...? +button within KDevelop. +To add the What's This...? button, do the following: + + +include qwhatsthis.h into your sourcecode + + +add a private member QWhatsThisQWhatsThis whats&_;this/ or with another member name to your KTMainWindowKTMainWindow derived class +declaration + + +define a resource id for your what's this button into the resource.h file,e.g. &#;define ID&_;HELP&_;WHATS&_;THIS +10100 + + +in your method to create the toolbar toolbar (usually initToolBar()), add at the location you want to have the button +displayed: + whats_this = new QWhatsThis; + QToolButton *btnwhat = whats_this->whatsThisButton(toolBar()); + QToolTip::add(btnwhat, i18n("What's this...?")); + toolBar()->insertWidget(ID_HELP_WHATS_THIS, btnwhat->sizeHint().width(), btnwhat); + btnwhat->setFocusPolicy(QWidget::NoFocus); + + +setFocusPolicy() + + +finally, add the messages you want to have on a click over a certain widget like this: +whats_this->add(class_tree, i18n("Class Viewer\n\n" + "The class viewer shows all classes, methods and variables " + "of the current project files and allows switching to declarations " + "and implementations. The right button popup-menu allows more specialized " + "functionality.")); + + + + + + + + + +Extending the Documentation with SGML <indexterm remap="idx"><primary>SGML</primary></indexterm> + +Due to the fact that projects often lack a complete set of user documentation, all KDevelop projects contain a pre-build handbook that +can be easily adapted; therefore fulfilling another goal of KDE: providing enough online-help to support users that are not familiar +with an application. This chapter therefore introduces you on how to extend the provided documentation template and what you have to do +to make it available to the user. + + +Why SGML ? + +SGML SGML (Standard Generalized Markup Language) itself is a language with which one can write specifications of a markup language, +but not a markup language itself. The specification for that markup language is called a DTD (Document Type Definition) which contains +the structure of a document and the valid tags to use. Then, an SGML system provides a set of replacement files that translate the DTD +tags into the desired output - and this is the way it works. The most used output is probably HTML to provide online help through +web-browsers in a time where Internet standards are available even on single-desktop systems. KDE makes extensive use of HTML +documentation by it's KDEHelp KDEHelp application where all KDE applications KDE applications are listed and give access to their user manuals as +well as by a helpmenu where the user can access the online-help directly from within the application. + +Now, KDE (and therefore KDevelop) use the SGML-Tools 1.x package (see \|\|), which was formerly known +as the LinuxDoc package. It contains a DTD called LinuxDoc, and a set of mapping files for various output transformations and the +necessary tools that actually do the replacement of LinuxDoc tags. The LinuxDoc DTD is based on the Qwertz DTD which itself was +written to provide a good mapping (replacement of tags) especially for the &latex; text system, therefore is very usable to produce a +good printed output. The package then got it's name from the usage for writing documentation for the LDP (Linux Documentation Project) +and has only changed it's name due to the fact that it is an sgml-system that does not necessarily have a direct connection with the +Linux project but can be used on any Unix-System; you can as well write your own DTD and mappings if you ever like to. + +In the meantime, another DTD as been made up to fit the same purpose: the "DocBook DTD". DocBook has obviously some advantages over the +LinuxDoc DTD mostly in providing better tags and mappings for tables and the inclusion of graphics, but that is possible with LinuxDoc +as well. The SGML-Tools therefore switched to provide support for the DocBook DTD in the 2.x version series, which also includes a +converter to produce a DocBook sgml from a LinuxDoc master. + +The current state of KDE development is that we're still using the LinuxDoc DTD for some reasons: + +writing LinuxDoc documentation is easy + + +installing the SGML-Tools 1.x for using LinuxDoc is even much easier + + +KDE provides an additional tool called ksgml2html which adds the KDE documentation style to the output produced by the +SGML-Tools' 1.x sgml2html converter to produce HTML output. + + + +I personally have encountered that while writing the KDevelop handbooks using the LinuxDoc DTD is very easy and lasts for the +requirements I need for writing the documentation. The learning curve is very high, so you will be a sgml-tools/LinuxDoc DTD guru +within days and that will save you a lot of time to work yourself into any formatting system such as &tex; for printed output for your +documentation or a markup language for HTML output. + +One major reason for still using the sgml-tools 1.x is that most distributions ship with the package and all additional tools you need +for other output formats. This makes the installation as easy as possible and the writing itself isn't very complicated as you will +see. The output formats you can achieve witht the sgml-tools are: + + + +HTML output, with KDE look'n feel when using ksgml2html additionally + + +plain text + + +GNU info, + + +Lyx format + + +&tex;, DVI, PostScript and PDF format + + +Rich Text Format (RTF) + + + + + + +What the Documentation already contains + +When creating a KDevelop project, the subdirectory docs/en already contains the english index.sgml documentation file and +the already produced output HTML files. Those are already included into the project as well as their installation destination is preset +to the KDE HTML directory. The documentation is already adapted to your project name, version number and the programmer's information. +Further, the output covers the index.html file containing the table of contents (which is opened by KDE Help when the user requests +help); an installation introduction and a copyright information with regards to the GPL license. + +Therefore, when extending the documentation, you only have to add the information that is specifically to your project. Mind that for +KDE projects you have to run "Make Doc-Handbook" from the "Project" menu again after the project is created. The index.sgml file is +again processed by ksgml2html ksgml2html and the KDE-Style is added to the HTML output. Open the docs/en directory in the RFV +and add the logotp3.gif file to the project by the context-menu; then set the file properties correctly to install the logo file +into the same location the HTML files will go - to $(kde&_;htmldir)/en/&<;your&_;project&>;/logotp3.gif. + + + +Writing SGML Documentation + +This section has been added because SGML (or to be more precise: the LinuxDoc DTD) still seems to be difficult for beginners that want +to write documentation. When looking at some KDE applications, I have seen some that contain an sgml file which is the template - but +the author went over to edit the html output instead of the sgml file. This results in problems that translators have - if they want to +provide documentation for your application in their native language, they will have to edit each file as well in HTML and this makes it +impossible to reuse the documetation for other formats not only in the english version but all internationalized versions as well. You +see that this is very short-thinking and a bad situation; personally I think that this results from the author's knowledge of HTML but +not of SGML. As most will try to avoid learning a new formatting language, they will use the HTML output as the template that they +edit. If you once find out how easy (and useful) SGML with LinuxDoc is, you will know that it's worth to learn a few more tags that +built the SGML formatting. + +The following sections will therefore introduce you to the most important parts of an LinuxDoc sgml file and how to extend your +documentation. + + +The DTD Declaration + +An SGML file, whatever DTD it may use, always has to start with the DTD declaration. This tells the SGML parser about which DTD to use. +Therefore, the first tag (a bracketed expression like &<;yourtag&>; your contents &<;/yourtag&>;) is always the DOCTYPE: + +&<;!doctype linuxdoc system&>; + +That tells your sgml formatter that it shall use the LinuxDoc DTD. + + +The Document Structure + +Now, when using the LinuxDoc, the next tag is the start tag for the document style type. The LinuxDoc DTD offers a whole set of types +that you can select from, dependent on the purpose of your document or it's legth. Available formats are: + + + +&<;notes&>; for short explanations + + +&<;article&>; for writing articles with abt. 10-20 pages (suggested). This is used by the templates of KDevelop and most KDE +applications. + + +&<;report&>; for articles that are longer than an &<;article&>; type + + +&<;book&>; for writing large books - the KDevelop handbooks have been written using this document type + + +&<;slides&>; for slideshows. This is useful for presentations. You will use &latex; as output format in most cases, of +course. + + +&<;letter&>; for normal letters + + +&<;telefax&>; for a telefax + + +&<;manpage&>; for a manpage + + + + +Mind that these are only describing how the document structure will look like in general - not the actual output. As mentionend, the +KDevelop default generated template is using the &<;article&>; structure. This is used by most applications except KDevelop itself +which uses the &<;book&>; format. In the HTML output this doesn't really matter much - but for &latex; e.g. this makes much difference. +The handbooks are really "books" with separate pages for each chapter as the main difference. + +What follows is that the end of the sgml file must have an end-tag for the document structure type - for &<;article&>; this would be +&&etago;;article&>;. + + + + +Titlepages + +Now, after the document structure follows a section that describes all entries usually found on a titlepage. The predefined template +doesn't use this explicitely but only sets the information for &<;title&>;, &<;author&>; and &<;date&>; as this +lasts for most purposes. Especially when using a &<;book&>; structure, you probably want to define a complete titlepage. The +following lists the according tags for this, taken from the sgml source of this handbook: + +&<;!doctype linuxdoc system&>; +&<;book&>; +&<;titlepag&>; +&<;title&>;The KDevelop Programming Handbook +&<;subtitle&>;The User Guide to C++ Application Design for the K Desktop Environment (KDE) with the KDevelop IDE, Version 1.2 +&<;author&>; +&<;name&>;Ralf Nolden &<;htmlurl url="mailto:Ralf.Nolden@post.rwth-aachen.de" + name = "&<;Ralf.Nolden@post.rwth-aachen.de&>;"&>; +&<;inst&>;The KDevelop Team +&<;date&>;Version 1.2 , March 21, 2000 +&<;abstract&>; +This handbook itself is part of the KDevelop Integrated Development Environment +and is therefore also licensed under the GNU General Public License; +see &<;ref id="Copyright" name="Copyright"&>; for more information. +&&etago;;abstract&>; + + +This covers all a normal titlepage usually contains. The &<;author&>; tag can also include a &<;thanks&>; tag to insert +some thanks to co-authors, lecturers etc. &<;inst&>; represents the institute or company for which the author wrote the +documentation; you could also use your team-name here like I did. &<;abstract&>; now covers an short description that is placed +on the titlepage as well. This is somewhat annoying on a printed version where this section would be printed on the back of the title +page where the copyright notice etc. are collected; this can be changed for &latex; output when editing the &tex; file. + + + +Indices + +The LinuxDoc DTD defines a set of tags for various indices as they occur in usual documents. Those are: + + + +&<;toc&>; for the table of contents + + +&<;lof&>; for the list of figures + + +&<;lot&>; for the list of tables + + + + +The according start-tags don't necessarily require an end-tag; they're inserted just after the titlepage before the actual beginning of +the document with the according sections or chapters. + +Now, when it comes to indexing keywords for an index that is placed at the end of the document, you are provided four different tags; +two which leave the indexed phrase within the page and two for index entries that are not displayed: + + +&<;idx&>; for a normal index entry + + +&<;cdx&>; for a true-type index entry + + +&<;nidx&>; for an index entry not appearing in the text document + + +&<;ncdx&>; as before for a tt-index entry + + + +These tags are ignored by all backends (the tool that does the mapping of the sgml-tags to their document format) except +sgml2latex, which generates an index file index.idx that can be turned to a &tex;-index with makeindex index.idx. The +index itself can be inserted into the &tex; output file afterwards with \printindex. I patched my mapping for the &latex; output to do +this automatically (but still don't know how to include the index into the table of contents...). + + + +The Document Contents + +Now, after explaining most details of the general structure, we're coming to the actual document contents. Dependent on the document +structure type, has to start with a &<;sect&>; tag, when using &<;book&>; you have to start with &<;chapt&>; +for the chapters. + +After the start tag, you can structurize each chapter with &<;sect1&>;, &<;sect2&>; etc. up to the allowed level of +sub-sections (4). + +The chapter start tag is followed by the chapter's title. There, you have the additional choice to use &<;title&>; and +&&etago;;title&>; for the chapter's title (optional). Now, afte the title of the chapter, you have to add a &<;p&>; tag to actually +start with the subsection's contents. Within that, you have almost all means to format your document with list, enumerations, +itemizations and description lists. Further, quotations, code snippets and the like can be inserted by tags; see you sgmltools +documentation guide for a complete list. What you should look for is the "special characters" section. This contains all valid +replacements for characters that are different from the usual alphabet like brackets, slashes and symbols like trademark etc. With the +given tags you can structurize your text contents as you application documentation requires. + + + + +How to call Help in Dialogs + +help functions +Calling help in dialogs is often done by adding a Help-button; then you add a slot that is called when the button gets pressed. Within +the slot implementation, call + +kapp->invokeHTMLHelp( QString aFilename, QString aTopic ); + + + +where aFilename is the the filename to be called within your HTML documentation directory of the application; e.g index-3.html. +aTopic then is the topic that is to be called. The hash prefix is automatically added; just enter the chapter you want to have on +this page, actually this would be a subsection's name. + + + + +Class Documentation with KDoc <indexterm remap="idx"><primary>KDoc</primary></indexterm> + +Another important part of the documentation is including a descriptive help for your class interfaces. This will allow you and other +programmers to use your classes by reading the HTML class documentation class documentation that can be created with KDoc KDoc. KDevelop supports the use +of KDoc KDoc completely by creating the KDE-library documentation, also your application frameworks are already documented. To work +yourself into the provided code, it would be a good start to read the included documentation online. The following describes what to do +to get the API API documentation, where KDevelop helps you add it and what kind of special tags KDoc KDoc provides additionally. + + +How to use KDevelop's Documentation features + +To create the API API documentation after you generated a project, select "Make API API-Doc" from the "Project" menu. This will process all +header files and create the HTML output. Then you can access the documentation by selecting "API API-Documentation" from the Help-menu or +the according book symbol in the Documentation tree, folder "Current Project". + +The documentation is already cross-referenced to the KDE and Qt Qt online-class documentation class documentation, so you can follow the inheritance easily +with the inheritance overview. This may help you getting started with the KDE and Qt Qt documentation as well. + + + +Adding Class and Member Documentation + +As KDevelop provides all means to add code automatically, it also offers direct documentation. Whenever you're using the Class +Generator by choosing "Project"->"New Class", add a descriptive help message to the documentation field. This will add the +documentation to the class header. + +When adding class member functions and attributes with the classtools classtools, add the member documentation to the according documentation +fields as well. + +You may think that documentation is a part of the development process that isn't very necessary. But remember that the more your +project grows and the more people take part on the development process, class documentation class documentation is the best help to save time. If +developers have to guess by method names what exactly the method does, it is even more likely that the meaning is misunderstood and the +method apparently doesn't do the job a developer guessed it would do. Therefore keep track of your documentation and rebuild it as +often as possible. + +Besides this, the documentation files are NOT included into the project, nor do they have any internationalization support. Therefore +all API API documentation should be held in English to allow international development groups to work with your sources. + +Whenever you may want to add documentation by hand into the header file, just add the documentation above the method or class in a +C-comment style with the difference that the first line has to begin with a slash and a double asterisk. + +Example: + + /** enables menuentries/toolbar items + */ + void enableCommand(int id_); + + + + + +Special Tags + +NOTE: The following documentation of this chapter is taken from the KDoc KDoc documentation provided with KDoc KDoc by +Sirtaj S. Kang taj@.kde.org), author of KDoc KDoc; Copyright (c) 1997 + +The documentation is a mixture of: + + + +Normal text. Paragraphs must be separated by at least one blank line. + + + +text of the form +&<;pre&>; +.....code fragments.... +&<;/pre&>; + + + +Various tags of the form: +@tagname [tag parameters] + + + + + + +The valid tags for each type of source code entity are: + + + +Classes + @short [one sentence of text] + A short description of the class + @author [one sentence of text] + Class author + @version [once sentence of text] + Class version (I normally set this to the RCS/CVS tag "Id") + @see [one or more references to classes or methods] + References to other related documentation. + + + + + +Methods + + @see + as above + @return [one sentence] + A sentence describing the return value + @param [param name identifier] [param description] + Describe a parameter. The param description can span multiple + lines and will be terminated by a blank line, the end of the + comment, or another param entry. For this reason, param entries + should normally be the last part of the doc comment. + + + + + +Constants, Enums, Properties + @see + as above + + + + +ALSO @ref +As a departure from the javadoc format, the metatag "@ref" has the same format as @see, but can appear anywhere in the documentation +(all other tags must appear on a line by themselves). + + + + + + + +Internationalization + + +What is i18n ? + +i18n is an internationalization system that is used to offer internationalized versions of an application or project. The difficulty +with writing applications is that they only support the language they originally are composed with; visually this can be seen on +labels, menu entries and the like. Goal of the internationalization is to provide applications and library functions in the language of +the user; therefore enabling users that are not capable of the original language to make use of the provided functionality and feel +more comfortable. + + + +How KDE supports Internationalization + +KDE, as one of the most modern desktop environments, has set one of its numerous goals to provide applications for users in their +native languages, and simplifies the work for developers to provide their application in any of the supported language. + +Technically, this is realized by the KDE File System KDE File System Standard which contains localization support for languages in terms of +documentation and by providing application internationalization through the use of the KDE-core library class KLocale. This class +does all the translation, dependent on the preferred language set in the KDE Control Center. + +The developer on the other hand only has to know two things to make his application able to use this feature: + + +include kapp.hkapp.h into your sourcecode wherever a visible text appears in your application, e.g. in source files that contain +QLabel QLabels. + + +wherever you set the visual string, embrace it with the i18n() macro provided by kapp.hkapp.h to enable translation. + + +whenever you have to access a locale object, use the klocale macro provided by kapp.hkapp.h + + + + +That is almost all you have to watch for while coding. Mind that you should not internationalize any configuration strings that are +used by KConfigKConfig, because this is not necessary on one hand and doesn't work for reading in values on the other. + + + +Adding a Language to your Project + +KDevelop also takes part on making life easier for developers to include native language support to their applications. Whenever you +create a new KDE project, a po directory is added to the main project directory. There, your &<;application&>;.pot file +will be placed after the generation is complete. The .pot file already contains all strings that are set up with the i18n() macro, +therefore you only have to write your code using the macro again. From time to time, you should do a "Project"-"Make messages and +merge", which will automatically extract all macros again and rebuilds the potfile. +"Project"-menuPO-filestranslationsKLocale + +To add a language to your application, choose "Project"-"Add translation file", which opens the language selection dialog. Select the +desired language and press OK. Then, the according &<;lang&>;.po file will be build in the po directory. Then start +translating the po file by selecting it from the po directory in the Real File Viewer or from the LFV, folder "Translations". If you +have KTranslator KTranslator installed, it will be opened in the "Tools" window with KTranslator KTranslator, otherwise as a text file in the header/resource +window. +KTranslator KTranslator makes it very easy to translate strings by scanning the existing translations of your local KDE installation, so they can +be used already. + +For editing by hand, we'll have a look at an example: +#: kscribble.cpp:619 +msgid "Opens an existing document" +msgstr "" + + + +The above shows a string that was extracted from the file kscribble.cpp at line 619. msgidmsgid and msgstrmsgstr are the tags which +give the information for the translation; msgstrmsgstr will contain the translated string. There, you have to watch escape sequences +such as \n or \t, which have to be included into the translation string. A German translation would therefore look like this: + +#: kscribble.cpp:619 +msgid "Opens an existing document" +msgstr "ffnet ein existierendes Dokument" + + + +That would be all to watch for translation; after you're done, save the file. When make is run within the po directory, the message +files will be processed and errors may occur if strings are not translated consistently, e.g. escape sequences are missing. Then edit +the according message string again and make sure that make runs without errors. + +Additionally, you should be very careful when translating ampersands within text strings. The letters after ampersands are used as +keyboard acceleratoraccelerators in conjunction with the ALT key to access menubar or popup menu items to change the keyboard focus keyboard focus to the +selected item more quickly. Now, if the same acceleratoraccelerator letter appears in the same keyboard focus keyboard focus area (which would be the main widget +on one time, and a dialog at another), each widget after the first one cannot be accessed by the supposed keyboard acceleratoraccelerator. So even +translators have a responsibility for the usage of the application under their language. There is also no guarantee that the original +letter will occur in the translation, so translators have to choose very carefully and should test the application under their language +after they installed the translation to ensure it runs without these malfunctions. + + + +Translation Team Contacts + +The KDE Team also provides numerous contacts to developers that are contributing to the KDE project as translators. Those are organized +in language teams and coordinate the translation work. +For an actual list and information who to ask for translating your application, see \|\|. + +The information below is taken from the KDE web site and contains the current contact addresses as of March 06, 1999. If you want to join +a team please write directly to one of the team coordinators. + +The translation of the KDE is organized by Juraj Bednar mailto:bednar@rak.isternet.sk and Matthias Elter me@kde.org + +You can subscribe KDE internationalization mailing list kde-i18n-doc@kde.org by sending a mail to kde-i18n-doc-request@kde.org with the word "subscribe" in the +subject line. + +Before starting any translation work, please contact the according translation team leaders for coordination to avoid double work. + + + +br Breton translation team: + +team coordinators: Ja-Mai DRAPIER jdrapier@club-internet.fr +website: http://perso.club-internet.fr/jdrapier + + + +ca Catalan translation team: + +team coordinators: Sebasti Pla sastia@redestb.es + + + +cs Czech translation team: + +team coordinators: Miroslav Fldr flidr@kky.zcu.cz + + + +da Danish translation team: + +team coordinators: Erik Kjr Pedersen erik@binghamton.edu + + + +de German translation team: + +team coordinators: Thomas Diehl th.diehl@gmx.net +website: \|\| +mailing list: send a mail with 'subscribe' in the subject line to: kde-i18n-de-request@kde.org Webforum for discussions and user feedback: \|\| + + + +el Greek translation team: + +team coordinators: Theodore J. Soldatos theodore@eexi.gr + + + +eo Esperanto translation team: + +team coordinators: Wolfram Diestel diestel@rzaix340.rz-uni-leipzig.de + + + +es Spanish translation team: + +team coordinators: Boris Wesslowski, Alonso Lara Boris@Wesslowski.com +website: \|\| +mailing list: send a mail with 'subscribe' in the subject line to kde-es@kde.org + + + +et Estonian translation team: + +team coordinators: Hasso C. Tepper hasso@ewsound.estnet.ee + + + +fi Finnish translation team: + +team coordinators: Kim Enkovaara kim.enkovaara@iki.fi + + + +fr French translation team: + +team coordinators: Francois-Xavier Duranceau Francois-Xavier.Duranceau@loria.fr +website: \|\| +mailing list: send an empty mail to: kde-traduc-fr-subscribe@egroups.com + + + +he Hebrew translation team: + +team coordinators: Erez Nir erez-n@actcom.co.il + + + +hr Croatian translation team: + +team coordinators: Vladimir Vuksan vuksan@veus.hr + + + +hu Hungarian translation team: + +team coordinators: Marcell Lengyel miketkf@yahoo.com +website:\|\| + + + +is Icelandic translation team: + +team coordinators: +Logi Ragnarsson, logir@imf.au.dk +Thorarinn R. Einarsson, thori@mindspring.com +Bjarni R. Einarsson, bre@netverjar.is +Hrafnkell Eiriksson, hkelle@rhi.hi.is +Gudmundur Erlingsson, gudmuner@lexis.hi.is +Richard Allen ra@hp.is + + + +it Italian translation team: + +team coordinators: Andrea Rizzi rizzi@kde.org + + + +ko Korean translation team: + +team coordinators: LinuxKorea Co. kde@linuxkorea.co.kr + + + +mk Macedonian translation team: + +team coordinators: Sasha Konecni sasha@msi-uk.com + + + +nl Dutch translation team: + +team coordinators: flidr@CyberGate.zcu.cz flidr@CyberGate.zcu.cz + + + +no Norwegian translation team: + +team coordinators: Hans Petter Bieker zerium@webindex.no + + + +pl Polish translation team: + +team coordinators: Piotr Roszatycki dexter@fnet.pl + + + +pt Portuguese translation team: + +team coordinators: Pedro Morais pmmm@camoes.rnl.ist.utl.pt + + + +pt&_;BR Brazil Portuguese translation team: + +team coordinators: Elvis Pftzenreuter epx@netville.com.br + + + +ro Romanian translation team: + +team coordinators: Paul Ionescu ipaul@romsys.ro + + + +ru Russian translation team: + +team coordinators: Denis Y. Pershin dyp@inetlab.com + + + +sk Slovak translation team: + +team coordinators: Juraj Bednar bednar@isternet.sk +mailling list: send a mail with 'subscribe' in the subject line to: sk-i18n@rak.isternet.sk + + + +sl Slovenian translation team: + +team coordinators: blazzupancic@hotmail.com blazzupancic@hotmail.com + + + +sv Swedish translation team: + +team coordinators: Anders Widell d95-awi@nada.kth.se + + + +tr Turkish translation team: + +team coordinators: Gorkem Cetin gorkem@linux.org.tr + + + +zh&_;GB2312 Simplified Chinese translation team: + +team coordinators: Wang Jian larkw@263.net + + + +zh&_;TW&_;Big5 Chinese BIG5 translation team: + +team coordinators: Chou Yeh-Jyi ycchou@ccca.nctu.edu.tw + + + + + + + + +Finding Errors + +debugging macros + + +Debugging Macros provided by Qt <indexterm remap="idx"><primary>Qt</primary></indexterm> + +The Debugging Macros provided by the Qt Qt library can be read on the debug.html page of your Qt Qt Online Reference +Documentation, acessable on the link "Debugging Techniques" at the Qt Qt Documentation index page. + +The most recently used macros are + + + +ASSERT(b) + + +CHECK&_;PTR(p) + + + + +Thereby, b is a boolean expression. Gives out a debugging warning if b is false; p is a pointer which is checked and gives out a +warning, if p is null. + +Details can be found in the Qt Qt Online Reference. + + + +KDE Macros + +NOTE: This chapter is a copy of Kalle Dalheimer's kalle@kde.org explanation document +about the KDEBUG KDEBUG macros included with the KDE libs package as kdebug.html + +Last modified: Sat Sep 13 11:56:01 CEST 1997 + +What is KDebug + +KDebug is a system of macros and functions that makes using diagnostic messages in your code more efficient. You can give a message +one out of four severity level and an area. You can choose at runtime where diagnostic messages should go and which of them should be +printed at all. How to use KDebug in your code + +The macro KDEBUG KDEBUG + +Using KDebug is very simple. All you have to do is to &#;include &<;kdebug.h&>; at the beginning of every source file in which you want +to use diagnostic messages and output the messages by calling the macro KDEBUG KDEBUG. This macro expects three parameters. The first is the +severity level. Use one of the following constants: + + + +KDEBUG&_;INFO KDEBUG&_;INFO + + +KDEBUG&_;WARN KDEBUG&_;WARN + + +KDEBUG&_;ERROR KDEBUG&_;ERROR + + +KDEBUG&_;FATAL KDEBUG&_;FATAL + + + + +The second parameter is the area. An area is a part of KDE that you define yourself. You can then at runtime choose from which areas +diagnostic messages should be printed. Please see the file kdelibs/kdecore/kdebugareas.txt for a list of already allocated area ranges. +Choose an area within the range allocated for your application. If your application is not yet in here and you have CVS access, you can +allocate a range for your application here, otherwise just mail me. It is probably a good idea to define symbolic constants for the +areas you want to use, but this is completely up to you. The third parameter, finally, is the text you want to output. KDebug +automatically prepends the logical application name if you output to a file, to stderr or to syslog. A newline is always appended, you +need not (and should not) use one yourself. If you need parameters, you can use one of the macros KDEBUG1, ..., KDEBUG9. These allow +for one to nine additional arguments. The syntax is exactly the same as with printf, i.e. you have to include format specifiers in your +message which get replaced by the additional parameters. An example: + +KDEBUG3( <idx/KDEBUG_INFO/, kmail_composer, "Message no. %d to %s has %d bytes", + message_no, aMessage.to(), aMessage.length() ); + + + +KASSERT KASSERT + +There are also the macros KASSERT, KASSERT1, ..., KASSERT9 which work just like their KDEBUG KDEBUG-counterparts, except that they have an +additional bool as their first parameter. Only if this evaluates to false will the message be output. Note: You should not use neither +KDEBUG KDEBUG nor KASSERT KASSERT before the KApplicationKApplication object is constructed. Note 2: KDebug provides no means for internationalization because it +is meant strictly for developers only. If you want to inform the user about an erroneous condition (like "this file is not writable"), +use KMsgBox. + +Compiler switches + +You do not need any special compiler switches in order to use KDebug. But when you ship your +product (this mainly applies to people who create distributions like .rpm or .deb packages), you should compile with the switch +-DNDEBUG. This will simply remove all the debugging code from your application and make it smaller and faster (e.g. it uses 256K less +non-shareable memory). + +How to manage diagnostic messages at runtime + +You can press Ctrl-Shift-F12 in every KApplicationKApplication at any time, and the "Debug Settings"-Dialog will appear. Here you can define +separately for every severity level what should be done with the diagnostic messages of that level. The following settings are +available: + + + +Output: In this Combobox, you can choose where the messages should be output. The choices are: "File", "Message Box", "Shell" +(meaning stderr) and "syslog". Please do not direct fatal messages to syslog unless you are the system administrator yourself. The +default is "Message Box". + + +File: This is only meaningful when you have chosen "File" as the output and provides the name of that file (which is interpreted +relatively to the current directory). The default is kdebug.dbg. + + + +Area: The areas which should only be output. Every message that is not mentioned here will simply not be output (unless this +field remains empty which is the default and means that all messages should be output). Your can enter several areas separated by +commas here, and you can also use area ranges with the syntax start-end. Thus a valid entry could be: 117,214-289,356-359,221. Please +do not use whitespace. + + + + +Apart from this, you can also tick the checkbox "Abort on fatal errors". In this case, if a diagnostic message with the severity level +"KDEBUG&_;FATAL KDEBUG&_;FATAL" is output, the application aborts with a SIGABRT after outputting the message. When you close the dialog with OK, your +entries apply immediately and saved in your application's configuration file. Please note that these settings are specific for one +singular application! When you press cancel, your entries are discarded and the old ones are restored. + + + + +The KDE File System Standard + +This chapter is a copy of the KDE-File System Standard as published on the KDE website at \|\|, written by +Richard Moore rich@kde.org + +KDE File System Standard + +This file documents the directory structure that KDE and all KDE compliant applications should use. This is version 0.0.4 of the +standard. + + +Introduction + +The purpose of the KDE FSSTD KDE FSSTD is to ensure that all resources (icons, mimetypes etc.) needed for KDE applications KDE applications are stored in a +consistent directory structure. Following this structure allows applications to make use of tools such as the KIconLoader class and +allows separation of the platform specific data needed by KDE from platform independent data (making installations on multiple +architectures possible). In this document directory names have been suffixed with a `/` character. Where the word 'appname' appears in +angle brackets &<;like this&>; it means that there should be an entry corresponding to every installed KDE application. The word +'lang' is used in the same way to indicate that there should be an entry for every supported language named according to the standard +two letter language codes eg. 'fr' for French, 'de' for German etc. + + + +Directory Layout + +The KDE directory structure is as shown below, the top of the KDE installation tree is usually '/opt/kde' and can be found at run time +by using the kdedir() method of KApplicationKApplication (this replaces the KDEDIR environment variable the use of which is now deprecated). This +document will refer to this directory as kdedir(). +KDE File System.kdelnk files + + + +kdedir()/ + + +bin/ + + +Application binaries + + + + + +lib/ + + +standard kde libraries (libkdecore etc.) + + +&<;appname&>;/ + + +Application specific data that is platform dependent + + + + + + + + +include/ + + +standard kde header files + + + + + +parts/ + + +cgi-bin/ + + +CGI programs for kdehelp + + + + + +share/ + + +doc/ + + +HTML/ + + +default --> Link to kdedir()/share/doc/HTML/en + + +&<;lang&>;/ + + +&<;appname&>;/ + + +index.html + + +other application help files + + + + + + + + + + + + + + +config/ + + +applnk/ + + +System/ + + +Utilities/ + + +Applications/ + + +Games/ + + +kfind.kdelnk .kdelnk + + +khelp.kdelnk .kdelnk + + +khome.kdelnk .kdelnk + + +krefresh.kdelnk .kdelnk + + + + + +mimelnk/ + + +magic + + +text/ + + +audio/ + + + + + +partlnk/ + + +&<;partname&>;.kdelnk .kdelnk + + + + + +icons/ + + +Icons used in kdelnk files + + +&<;appname&>;.xpm + + +mini/ + + +Mini Icons for kpanel + + + + + + + + +toolbar toolbar/ + + +Standard toolbar toolbar pixmaps (eg. fileopen.xpm) + + + + + +wallpapers/ + + +Wallpapers used by kdisplay + + + + + +apps/ + + +&<;appname&>;/ + + +toolbar toolbar/ + + +Toolbar pixmaps + + + + + +pics/ + + +Other application pixmaps + + + + + +application specific data (must be platform independent) + + + + + +&<;libname&>;/ + + +pics/ + + + + + + + + +locale/ + + +&<;lang&>;/ + + +LC&_;MESSAGES/ + + +&<;appname&>;.mo + + + + + + + + + + + + + + + + + + + + + +What does this mean to application developers? + +A standard KDE application will install files into several places in the above structure. The only required items are the application +binary, the application kdelnk file, the application icon and the application help files - all others are optional. The most common +things that are installed are: + +Type of file Location + +Application binary (required) kdedir()/bin/ +Application kdelnk file (required) kdedir()/share/applnk/ +Application icon (required) kdedir()/share/icons/&<;appname&>;.xpm +Application help files (required) kdedir()/share/doc/default/HTML/&<;appname&>;/&<;index&>;.html +Application toolbar pixmaps kdedir()/share/apps/&<;appname&>;/toolbar/ +Application platform independent data kdedir()/share/apps/&<;appname&>;/ +Application platform specific data kdedir()/lib/&<;appname&>;/ + + +KDE File System + + + +Application Documentation + +I've suggested making putting at least a single page in + +kdedir()/doc/default/HTML/&<;appname&>;/&<;appname&>;.html + +a requirement for KDE compliance. The application is free to use the directory to store any help data it requires. + +Applications that support more than one language would place the other languages inkdedir()/doc/&<;lang&>;/HTML/&<;appname&>;/&<;appname&>;.html +with there being one 'lang' directory for each language code as usual. Arranging the files like this would allow links between the help +files of two different applications that both support a given language. + +I am not 100&%; happy with the solution I've suggested as it does not allow any way to fall back to the default language if a required +translation is not available. + + + +What does this mean to library developers? + + + +kdedir()/share/apps/&<;libname&>;/toolbar toolbar + + + +Toolbar icons for library widgets. + + + +kdedir()/share/apps/&<;libname&>;/pics + + + +Any other bitmaps for library widgets. + + + + +File System Usage for KDevelop Projects + +As the last chapter covered the KDE File System Standard, this chapter deals with what you have to do to use the file system. A KDE +project uses the file system at least for installation routines; therefore we will discuss setting installation properties for your +project files. Your application may make use of files that are installed afterwards, where it is important to know how to get the +relative pathname by the standard. This enables your application to work wherever the KDE file system may be and prevents hard-coding +any file information. + + +Accessing Files during Runtime + +After the installation of your project by end-users, your application may require file information during runtime. During the +development process, you will experience at least one error which is caused when running your application within the KDevelop IDE and +requiring the application manual by "Help"-"Contents" or pressing the F1 key. This will result in a message box, saying that the +index.html file could not be found- if you haven't installed your application on your local KDE file system. Your application asks +KDEHelp KDEHelp to open your index page with detecting the installation directory first through KApplicationKApplication's methods to access the file +system, therefore, we will have a look at what KApplicationKApplication offers and make some example usage. Also other classes of +KDE-Core make use of the KDE File System like KIconLoader and KLocale, which will be reviewed afterwards. + + + +<indexterm remap="cdx"><primary><literal>KApplication</literal></primary></indexterm>KApplication Methods + +The KApplicationKApplication class offers the following methods to access the KDE File System: +void invokeHTMLHelp ( QString aFilename, QString aTopic ) const +static const QString& kde_htmldir () +static const QString& kde_appsdir () +static const QString& kde_icondir () +static const QString& kde_datadir () +static const QString& kde_localedir () +static const QString& kde_cgidir () +static const QString& kde_sounddir () +static const QString& kde_toolbardir () +static const QString& kde_wallpaperdir () +static const QString& kde_bindir () +static const QString& kde_configdir () +static const QString& kde_mimedir () +static QString localkdedir () +static QString localconfigdir () +static QString findFile ( const char *file ) + + +KDE File System +The methods are generally used with the KApplicationKApplication object of your application, where KApplicationKApplication offers the macro +kapp to receive the pointer: + +&#;define kapp KApplicationKApplication::getKApplication() + +Therefore, the methods are generally used like this: +QString sounddir=kapp->kde_sounddir(); + + +This example stores the path of the KDE sounddirectory under a QString, where you would append e.g. the sound filename. Then you +can process this information and play a sound file that is located there. You should always test for the existence of a file by using +QFileInfo's exists() method. + +Within these methods, + +void invokeHTMLHelp( QString aFilename, QString aTopic ) const [public] + + + +takes a special position to invoke the KDE help. Generally, you should use it everywhere a user needs to access information, e.g. when +he is presented a modal dialog. The F1 key will not work to invoke the help contents, also the user should be presented the according +help page. To make a good use of it, add a "Help" button to your dialog and create a slot that is used to connect on signal +pressed(). In this method, use invokeHTMLHelp()invokeHTMLHelp() with the according page and subject; in case your application's documentation +isn't written completely yet, leave this open to complete it after the documentation is in sync with the application. + +The documentation of KApplicationKApplication says: + +Invoke the kdehelp HTML help viewer. + +Parameters: aTopic +This allows context-sensitive help. Its value will be appended to the filename, prefixed with a "&#;" (hash) character. + +aFilename: The filename that is to be loaded. Its location is computed automatically according to the KFSSTND. If aFilename is empty, +the logical appname with .html appended to it is used. + +The methods of KApplicationKApplication will retrieve the following path's. + +kde_htmldir() kdedir()/share/doc/HTML Returns the directory where KDE stores + its HTML documentation + +kde_appsdir() kdedir()/share/applnk Returns the directory where KDE applications + store their .kdelnk file + +kde_icondir() kdedir()/share/icons Returns the directory where KDE icons are stored + +kde_datadir() kdedir()/share/apps Returns the directory where KDE applications + store their specific data + +kde_localedir() kdedir()/share/locale Returns the directory where locale-specific + information (like translated on-screen messages) are stored + +kde_cgidir() kdedir()/cgi-bin Returns the directory where cgi scripts are stored + +kde_sounddir() kdedir()/share/sounds Returns the directory where sound data are stored. + This directory is for KDE specific sounds. + Sound data of Applications should go + into kde_datadir() + +kde_toolbardir() kdedir()/share/toolbar Returns the directory where toolbar icons are stored + +kde_wallpaperdir() kdedir()/share/wallpapers Returns the directory where KDE wallpaper files are stored + +kde_bindir() kdedir()/bin Returns the directory where KDE application binaries are stored + +kde_configdir() kdedir()/share/config Returns the directory where config files are stored + +kde_mimedir() kdedir()/share/mimelnk Returns the directory where mimetypes are stored + +localkdedir() $HOME/.kde Get the local KDE base dir + +localconfigdir() $HOME/.kde/share/config Get the local KDE config dir + + + +To search for a specific file, use findFile(const char *file) which will search several path's of the KDE File System: + + +$KDEDIR, + + +$KDEPATH, + + +"&[;KDE Setup&];:Path=" entry in a config file. + + + + +If the file is not found, the QString method isEmpty() will return True + + + +KIconLoader Methods + +QPixmap loadIcon ( const QString &&;name, int w = 0, int h = 0 ) + +QPixmap reloadIcon ( const QString &&;name, int w = 0, int h = 0) + +QPixmap loadMiniIcon ( const QString &&;name , int w = 0, int h = 0 ) + +QPixmap loadApplicationIcon ( const QString &&;name, int w = 0, int h = 0 ) + +QPixmap loadApplicationMiniIcon ( const QString &&;name, int w = 0, int h = 0 ) + +bool insertDirectory ( int index, const QString &&;dir&_;name ) + + + +Setting File Installation Properties + +As the above explained where KDE applications KDE applications should place their files and how to access them at runtime, the following will explain +how to set the file properties correctly to ensure the files get installed at the right place. The Makefiles support a set of macros to +install your files into the KDE File System and which have to be used for setting the file installation properties. + +To set the properties, open your project and select "Project"-"File Properties" which opens the File Properties dialog. +The file properties are displayed if you select a filename currently included in the project. First of all, a file has a type property, +which can be one of the following: + + + +HEADER: specifies a file as a header file + + +SOURCE: specifies a file as a source file + + +SCRIPT: specifies a file as a script file + + +DATA: specifies a file as a data file that usually gets installed like pixmaps or HTML documentation files + + +PO: specifies a file as a translation file + + +KDEV&_;DIALOG: specifies a file as a dialog file to be interpreted by the dialog library + + + + +Further, a file is included in the project, if "Include in Distribution" is checked. This ensures that the file is included in the +distribution tarball or package. + +If a file has to be installed, you have to enable "Install". This will allow setting the Installation path for the selected file, where +the filename is already inserted. + +Now, as said above, the Makefile already is capable of a set of macros for the KDE File System Standard. These are used to set the +installation path and ensure that the files actually will land in the KDE file system and not somewhere else. Macros that can be used, +have to be embraced in round brackets and are marked with the dollar sign in front of the macro. When configure builds the Makefiles on +the end-user's system, it will determine values for these macros that match the real directory name and will expand the Makefile.am +macro towards the actual destination. + +When looking a standard KDE application project, you will see on the file property of your index.html file that it already uses a +macro to determine where it should go: + +$(kde&_;htmldir)/en/kscribble/index.html + +This says, that make should install the file index.html in the kde-html directory, subdirectory en for English, the application +subdirectory and the filename. You could as well use another filename if you like to rename the file on the installation destination. + +For the destination of your binary you currently have to edit the project's Makefile.am if your destination should be different form +the "Applications" section of kpanel: + +APPSDIR = $(kde&_;appsdir)/Applications + +Possible values are (as the KDE-File System Standard says): + + + +Applications + + +Games + + +Graphics + + +Internet + + +Multimedia + + +Settings + + +System + + +Utilities + + + + +Setting no directory will end your applnk directly in kpanel's root. + +The following list contains the macros that can be used in the installation setup for files: + +kde_htmldir Where your docs should go to. (contains lang subdirs) +kde_appsdir Where your application file (.kdelnk) should go to. +kde_icondir Where your icon should go to. +kde_minidir Where your mini icon should go to. +kde_datadir Where you install application data. (Use a subdir) +kde_locale Where translation files should go to.(contains lang subdirs) +kde_cgidir Where cgi-bin executables should go to. +kde_confdir Where config files should go to. +kde_mimedir Where mimetypes should go to. +kde_toolbardir Where general toolbar icons should go to. +kde_wallpaperdir Where general wallpapers should go to. + + + +Use these macros in conjunction with the according necessary subdirectories and the filename for setting the installation properties. +By default, the currently created HTML documentation files, the kdelnk file, Icon, Miniicon and the translation files (also newly +create ones) are already set up for their destination; therefore you don't have to make any changes for your default installation +routine that has been set up by the application wizard of KDevelop. + + + +Organizing Project Data + +Another issue in creating projects often appears to the programmer if he has or wants to include additional data that have to be +installed with the project. You already know where to install it, but what about organizing it in the source tree ? + +A good advice here may be to collect all data in directories that more or less match the KDE File System Standard, e.g. your +application needs additional toolbar toolbar icons. Creating these icons in the main project directory is potentially not a good idea as they +will be difficult to locate in the real file viewer and a removal will result in much work for each icon. Therefore, create your icon +with "File"- "New" and choose a subdirectory toolbar toolbar; if it doesn't exist, it can be easily created with the "select directory" +dialog. Existing icons can be copied and included into the project with "Project"-"Add existing file(s)", where you have to choose the +files and the destination. When selecting the destination directory, you can create the toolbar toolbar subdirectory first within the +selection dialog. After being finished, press OK and the files will be copied as well as included in the project. + +As an example, a toolbar toolbar icon should go to the following: + +$(kde&_;datadir)/&<;appname&>;/toolbar toolbar/&<;youricon&>;.xpm + +Pictures or additional icons that are not used as toolbar toolbar icons should go to a subdirectory pics instead of toolbar toolbar. + + + +The <literal remap="tt">kdelnk</literal> File + +The &<;appname&>;.kdelnk .kdelnk file currently included in your project will install itself in KDE's kpanel structure. You should think +it is already created and complete, therefore shouldn't require any further notification. Despite of KDevelop's advanced qualities to +help you with creating, programming and designing applications, it cannot determine the exact purpose of your application- and that is +the information you have to add to the kdelnk file. As this is a text file, select it from the RFV or the LFV; it will be opened in the +Header/Resource window. + +The sample kdelnk file would look like this: +# KDE Config File +&[;KDE Desktop Entry&]; +Type=Application +Exec=kscribble +Icon=kscribble.xpm +DocPath=kscribble/index.html +Comment= +Comment&[;de&];= +Terminal=0 +Name=kscribble +Name&[;de&];=kscribble + + + +This already contains the basic configuration for the application specific data such as the icon, binary name, application name etc. +You see that the section Comment is still empty. There you have to insert the Quick-Tip that will be displayed when the mouse cursor +moves over the kdelnk file icon on the desktop or in kpanel. If scribble would be a small drawing program, you would enter e.g. + +Comment=A simple drawing program + + + +Each comment line afterwards will contain the same description translated in the language the brackets symbolize. Ask translators to +insert a good translation in their native language or include the kdelnk file when asking for translating the application's po file; +the same applies to the name of the application set in the Name lines. + +for more information about the purpose of the .kdelnk .kdelnk file, especially its use for commandline processing, see +The KDE Library Reference Guide + + + + + + +Programming Guidelines + +Close to the end of this handbook, I want to summarize several issues that programmers should watch out while coding. These are mostly +C++ programming tips that relate to KDE and Qt programming especially and are partly taken from the KDE +Developer's Center which can be found on the Internet at \|\|, some have been added +by my own experience. + + +General Rules + + + +Filenames + +First of all, when creating sourcefiles, you should always use lowercase filenames. KDevelop supports +this guideline already if you stick to its filename aut-suggestion. This makes it easier for other developers to remember what source +files to look for when they have to debug your application. + + + +Classnames + +The classnaming for KDE projects is recommended to be: + + +class names should begin with a prefixed K followed by the name of the class by purpose (your choice). This would be e.g. +KMyWidget for an application specific widget. + + +the class members should always begin with lowercase letters, followed by uppercase beginnings for the next word, e.g. +myWidgetPointer() + + +methods that return a private members value shouldn't use the get-prefix. You should prefer using a descriptive name for +those types of classmembers. Example: b&_;myboolean is a private member. The method returning the current value would be e.g. +myBoolean(). + + + + + + +File access within code + +Hardcoding any path should be avoided by using the KDE File System Standard. You only have to watch the installation path for your +files by the according macros of the Makefile.am as described in this handbook. Within the code, you should use the methods of +KApplication to retrieve the actual path. + + + +Class documentation + +Another thing already mentionend is class documentation. You should stick to use KDoc formatting rules as they are used by all KDE +developers to document their classes. You should at least add a single line to all of your classmembers for yourself to remember the +prurpose and for others to reuse code. The code-reuse by the GPL makes much more sense if you know where to find an already existing +solution if classes are documented. The Qt library referece is a good example of well-documented interfaces, though it doesn't use +KDoc. + + + +Use new to create widgets + +Within your implementation, you should always prefer to create widgets on the heap with new. The Qt library has a nice habbit to +automatically delete all child widgets you created with new, so you don't ever have to use delete again in those cases. This +is one of the most important practical features of the Qt library and you should make wide use of this. + + + +Debugging + +When it comes to debugging, you should make use of the macros KDebug provides. Those are similar to the Qt macros, but can be +retrieved by the keycode STRG+ALT+F12. See the KDE Library Reference Guide for +more information about the event filtering of these Macros. You could as well use assert(), but should try to be consistent with +your debugging code. + + + +const-declarations + +Further, you should use const declarations for member functions that should or do not change any private member. This would be the +case for all methods that only return the current value of a private member. This avoids changing the value accidently and will catch +those logical errors at compile time. Now, towards initializing const members you should stick to do that together with using +static in the declaration and initialize the value outside the constructor like this: +class foo { + static const int value; +}; + +const foo::value = 10; + + +ANSI C++ allows to initialize the member inside the constructor but you should avoid this as a few compilers are not capable of this +feature. + + + +Virtual methods + +As explained in section User Interaction, you should stick to the access rights and the declaration +by virtual when overwriting virtual methods. At least you shouldn't reduce the access of a virtual method from protected to +private. + + + +Forward declarations + +Class-headers should be included where you dereference any object or instance of a class in your sourcecode. That means if your class +uses a member of another class, replace the &#;include directive with a forward declaration of the class, e.g instead of: +#include <qpushbutton.h> + +class KMyWidget:public QWidget +{ + +private: + QPushButton* ok_button; +}; + + +you should prefer to only declaring the class QPushButton in the header file: +class QPushButton; + +class KMyWidget:public QWidget +{ + +private: + QPushButton* ok_button; +}; + + +and place the include directive into the according sourcefile where e.g. the instance ok&_;button is dereferenced with any method of +the class QPushButton. This saves compile time at any rate, especially if you're using instances of classes that your're working +on. The compiler will recompile all souces that include the header file if you made any changes on the interface of the class, +therefore a simple addition of a method that only returns an internal value will lead to a recompilation of all sources tha include +the header file of the class. + + + +Unused Parmeter Warnings and default arguments + +Also you should leave out formal parameters of methods that don't necessarily require the actual parameter to work. This avoids the +unused parameter warnings of your compiler when he sees a method that retrieves a formal parameter but doesn't use it in its +implementation. Usually, you will set some default arguments for several methods. Those should always be placed in the declaration of +the class member instead of setting them in the member implementation. + + + +Using config.h + +KDevelop projects as well as any other project that is using autoconf to create a configure-script produce a file +config.h after executing the configure-script on the target machine. The values found by configure are listed there and +can be used within the sourcecode. The directive to include the config.h file is: +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + + +One of the most recently used entries of config.h is probably the type-definition of bool for compilers that don't comply +with the newest ANSI C++ draft. + + + +Use 0 instead of NULL + +You should stickt to using 0 directly instead of NULL for preset values like the Qt and KDE libraries already do. This +increases portablility of your applications towards different compilers that have problems with NULL. + + + +Temporaries + +You should declare temporary instances always before using them. This is generally considered better than direct use. Example: +// Don't: +for( int i=0; i<n; i++){ + //do something + }; + +// Do: +int i; + +for(i=0; i<n; i++){ + //do something + }; + + +This also counts on using temporaries in function calls: +// Don't: +setColor( &&;(QColor(black)) ); + +// Do: +QColor color(black); +setColor( &&;color ); + + + + + + + + + +Operating System Dependencies + +As KDevelop projects use the GNU tools to create projects, it is ensured that your application will run on +almost every Unix system. However, you may encounter problems when actually compiling your application under +another Unix, because header files are located somewhere different or you need another implementation +especially when it comes to using OS-specific low-level functions which can differ from system to system. + +When programming with C++ and Qt/KDE you should also notice that the Qt collection classes have a rich set of +functionality that is already compiler/OS independend and makes things much easier, starting with strings +(QString) to file reading/writing (QFile); so using Qt will make using OS defines almost obsolete in most +cases. + +Anyway, when using Qt and you still have to use &#;defines for your application, you should include +qglobal.h and make use of the already predefined defines for various Operating Systems and compilers +which preselects the below defines already. + +Instead of letting the packagers of OS-Vendors applying any patches to your application (like most do where +necessary e.g. for building rpms or packages/ports), you should use defines for those sections that are +operating-system specific (but you dont have to use -D for compiling, the Operating System defines are +handled automatically). The following lists the available systems and their defines (additional defines in +brackets): + + + +AIX: + +&#;ifdef &_;AIX + + + +BSDI Unix: + +&#;if defined(bsdi) &|;&|; defined(&_;&_;bsdi&_;&_;) + + + +Dec Ultrix: + +&#;if defined (ultrix) &|;&|; defined(&_;&_;ultrix) &|;&|; defined(&_;&_;ultrix&_;&_;) + + + +DG Unix: + +&#;if defined(DGUX) + + + +FreeBSD: + +&#;ifdef &_;&_;FreeBSD&_;&_; + + + +GNU Hurd: + +&#;if defined(&_;&_;GNU&_;&_;) + + + +HP-UX: + +&#;if defined (hpux) &|;&|; defined (&_;&_;hpux) &|;&|; defined (&_;&_;hpux&_;&_;) + + + +Linux: + +&#;if defined(linux) &|;&|; defined(&_;&_;linux) &|;&|; defined(&_;&_;linux&_;&_;) + + + +NetBSD: + +&#;ifdef &_;&_;NetBSD&_;&_; + + + +OpenBSD: + +&#;ifdef &_;&_;OpenBSD&_;&_; + + + +OSF Unix: + +&#;if defined(&_;&_;osf&_;&_;) + + + +QNX: + +&#;if defined(&_;&_;QNX&_;&_;) + + + +SCO UnixWare: + +&#;if defined(&_;UNIXWARE) + + + +SCO UnixWare 7: + +&#;if defined(sco) &|;&|; defined(&_;UNIXWARE7) + + + +SCO: + +&#;if defined(&_;SCO&_;DS) &|;&|; defined(M&_;UNIX) &|;&|; defined(M&_;XENIX) + + + +SGI Irix: + +&#;if defined(sgi) &|;&|; defined(&_;&_;sgi) + + + +SunOS: + +&#;if defined (sun) &|;&|; defined (&_;&_;sun) &|;&|; defined (&_;&_;sun&_;&_;) + + + +Sun Solaris: + +&#;if defined (&_;OS&_;SUN&_;) &|;&|; defined (&_;&_;SVR4) + + + + + + + + +Licensing + +This section deals with questions that come up in regards to licensing applications that are created with the KDevelop IDE. First, we +will have a look at the default behavior, discuss adavantages of licensing your applications under the GPL and finally will cover +issues that come up when developing commercial applications. + + +The GPL License + +The KDevelop IDE itself is licensed under the GNU General Public License. This license ensures that any user can copy, modify and +redistribute the KDevelop sourcecode package under the terms of this license. The license itself guarantees this as well as the rights +of the KDevelop Team members as the authors of this product. + +Out of this reason and the dedication to help free software authors developing their products, all KDevelop generated frameworks +contain a GPL licensing reference as well as a copy of the license as well. Developers on the other hand can use this license as a +base for distributing their product but are in no way bound to do so. + +The author, when using the GPL as the license for his product, also takes advantage out of this: + + + +you can use any existing code also licensed under the GPL and include it into your package (as long as there are no restrictions +that interfere to any code-reuse due to the limitations of the used software's licensing), + + +your code has a copyright license that protects your rights as the original author, + + +the re-use of your code by other authors improve the general development of free applications. + + + + + + +KDE and Qt Licensing Issues + +Especially the Qt licensing caused a lot of trouble for the KDE development community until Qt 2.0 which comes with the new QPL +license. The Troll Tech company, as the owner and creator of Qt, delivers the Unix version of the library free of charge, but with the +restriction that you cannot change the delivered code and redistribute it without an explicit agreement on their side. This was the +reason why many free software developers tended to condemn this licensing, as it wasn't absolutely free, especially to do any changes. +On the other hand, the Qt library offers a lot of advantages that make it also very attractive for developing commercial applications: + + + +By buying a commercial license, you can write portable applications for Unix and Windows platforms + + +The provided classes and application framework are providing a good solution for easy application design + + +You can develop for Unices without being dependend on the GPL licensing when holding a commercial license + + + + +The KDE project on the other hand chose the Qt library as a base for developing a desktop environment for Unix systems as well as an +extended application framework enhancing the facilities of the capabilities Qt provides. Developers can make use of KDE's advantages by +using the provided libraries, distributed as the KDE libraries. + +The KDE libraries themselves are distributed under the LGPL, the GNU Library General Public License. What does this mean to application +developers ? + + +Non-commercial Development + +For non-commercial development, the Qt library is provided free of charge. Your application can make use of the library as far as it +does not change the library and the developer delivers his application sourcecode free of charge as well. + +The LGPL of the KDE libraries ensures using the KDE libraries as well for non-commercial development. You can make use of the KDE +libraries as you like to or your application may require. + + + +Commercial Development + +For commercial developement, the Troll Tech company offers buying a commercial license. This allows using the Qt library for +development purposes as your application or project may require. You can ship your application in any form, as binaries only or by +sourcecode, independed of any GPL licensing. + +When using the KDE libraries, you have to watch the LGPL license, which explicitely allows commercial development using the library +distributed under the LGPL. You just have to watch the rules of the license to know the restrictions that may arise when using the KDE +libraries as a base for commercial application development based on KDE. + + + + +Your Product License + +Hereby, the KDevelop Team, as the authors of the KDevelop Integrated Development Environment, allows you to distribute any application +that has been created by and with using the KDevelop IDE under a license of your choice; only depending on licensing terms that arise +from the restrictions that are given by the use of code that is placed in libraries the final product uses. These are: + + + +For Qt applications: The restrictions of the Qt license that apply to the status of your distribution, whether it may be for +non-commercial (free) software or commercial purpose. + + +For KDE applications: The restrictions of the Qt license according to the status of your distribution plus the restrictions +of the LGPL (GNU Library General Public License) as shipped with your copy of the used KDE libraries. + + +for all other pre-generated sourcecode you are free to choose the license + + + + +Therefore you can change the default licensing as it is included with any KDevelop generated application framework or base application +towards your choice, only by watching the restrictions that arise from any library that is linked to your application. + +If you have any additional questions about licensing, feel free to ask the KDevelop Team. + + + + +References + +The KDevelop Programming Handbook contains information that are taken from various sources on the Internet and by mails to various +mailing lists, as: + +KDoc KDoc documentation: Sirtaj S. Kang taj@.kde.org + +KDE Developer's Center maintained by Sirtaj S. Kang taj@.kde.org + +KDE Internationalization: Matthias Elter me@kde.org + +KDebug documentation: Kalle Dalheimer kalle@kde.org + +The KDE File System Standard: Richard Moore rich@kde.org + +KDE-Developer's mini-HOWTO: David Sweet <dsweet@chaos.umd.edu> + +The contents of the according chapters are copyright of the original authors. + + + +Copyright + + +KDevelop Copyright 1998, 1999, 2000 The KDevelop Team. + +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., 675 Mass Ave, Cambridge, MA 02139, USA. + + + + +Additional Information + + +Example Makefile.am for a Shared Library + +# Example Makefile.am for a shared library. It makes a library +# called "example" as libexample.so.2.1.2 +# This Makefile.am was taken from the kdelibs distribution and modified +# to serve as an example. +# +# David Sweet +# + +INCLUDES= $(all_includes) + +lib_LTLIBRARIES = libexample.la + +# Note: If you specify a:b:c as the version in the next line, +# the library that is made has version (a-c).c.b. In this +# example, the version is 2.1.2. +libexample_la_LDFLAGS = -version-info 3:2:1 $(all_libraries) + +include_HEADERS = header1.h header2.h\ + header3.h + +# Which headers shouldn't be installed when a make install is done? +noinst_HEADERS = version.h + +libexample_la_SOURCES = code1.cpp code2.cpp + code3.cpp + +# USE_AUTOMOC is great. This takes care of all of your moc'ing +# dependencies. +# (You still need to include, for example, header1.moc in code1.cpp.) +libexample_la_METASOURCES = USE_AUTOMOC + + + + + +
+ diff -Nru kdevelop-3.9.98/doc/programming/Makefile.am kdevelop-4.0.1/doc/programming/Makefile.am --- kdevelop-3.9.98/doc/programming/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/programming/Makefile.am 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,4 @@ +EXTRA_DIST = index.docbook + +KDE_LANG = en +KDE_DOCS = AUTO \ No newline at end of file diff -Nru kdevelop-3.9.98/doc/tip.database kdevelop-4.0.1/doc/tip.database --- kdevelop-3.9.98/doc/tip.database 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/tip.database 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,30 @@ +...that KDevelop offers Quickhelp by a right button click on items ? +...that can select your autosaving time in the setup dialog ? +If you want to specify additional command-line options to your make program, you can set them in the setup dialog. +If you use functions of other libraries than the application is currently linked with, you can specify them in the project options dialog. +If you want to change your applications version number, you can change it in the project options dialog, automatically updating your project. +If you want to create a new project, choose "Project"->"Application Wizard" from the menubar. +If you don't have a KDE-library documentation, create it by choosing "Update" from the Documentation tab in the KDevelop Setup dialog. +If you changed your applications's classes, you should update your API documentation by selecting "Make API-Doc" from the Build-menu. +You can save time if you select "Compile File" from the build menu or the toolbar to only compile your current implementation file. +If you're searching for information on classes or classmembers, select "Search for Help on..." from the Help-menu. +If you want to have info about something in the KDevelop window, select the "What's this ?" button in the toolbar and click on the item you don't know about. +Hint: You can search the documentation for a keyword by marking the word and select "look up" in the right button popup menu. +The KDevelop Team wishes you a nice day ! +If you've found a bug in KDevelop, please let us know. Contact adresses are in the KDevelop Handbook. +If you want to add your own documentations to the documentation tree, click with the right mouse button on the "Others" entry in the tree. Then configure the path and entry name. +...that you can create a new class with "new class" from the Project menu ? +that you can print your files either with a2ps or enscript from within KDevelop ? +To open a project, select "Open" from the Project-menu. +If you compile your project and get an error, you can click on the error message to switch to the file and line the error occured. +...that you can use keyboard shortcuts for turning the output and tree window on and off ? +...that you can debug your programs within KDevelop by selecting "Debug" in the Build-menu or by choosing the Debug icon ? +...that you can switch between classes by selecting the class combo in the toolbar ? +...that you can edit xpm's with kiconedit by selecting them in the file viewer's trees ? +...that you can set the compiler warnings in the project options dialog ? +...that you can even search for marked text even from within the documentation browser with a right button menu ? +...that you can copy text from the documentation browser to the clipboard with a right button menu and insert it into your sources ? +...that you should keep your library documentations up to date after installing new libraries ? +...that you can configure the syntax-highlighting of the editor ? +...that you can undo and redo your actions and set the amount of steps in the editor dialog ? + diff -Nru kdevelop-3.9.98/doc/tutorial/index.cvlog kdevelop-4.0.1/doc/tutorial/index.cvlog --- kdevelop-3.9.98/doc/tutorial/index.cvlog 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/tutorial/index.cvlog 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,750 @@ +=== LinuxDoc conversion errors =================== +-> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 3 `BOOK' 0 `book' +! Normally this should not be a problem, but check anyway ... + 7 `HTMLURL' 0 `
' + 8 `' 0 `' +! Check the authorname ( instead of ?) + 8 `INST' 0 `corpauthor' +! Use affiliation, only corpauthor, or leave this out + 11 `REF' 0 `' + 16 `TOC' 0 `' + 42 `HTMLURL' 0 `' + 42 `HTMLURL' 0 `' + 57 `TT' 0 `' +! Check and correct manually + 64 `HTMLURL' 0 `' + 79 `TT' 0 `' +! Check and correct manually + 95 `TT' 0 `' +! Check and correct manually + 107 `TT' 0 `' +! Check and correct manually + 107 `TT' 0 `' +! Check and correct manually + 107 `TT' 0 `' +! Check and correct manually + 111 `TT' 0 `' +! Check and correct manually + 111 `TT' 0 `' +! Check and correct manually + 111 `TT' 0 `' +! Check and correct manually + 117 `TT' 0 `' +! Check and correct manually + 127 `TT' 0 `' +! Check and correct manually + 132 `TT' 0 `' +! Check and correct manually + 134 `TSCREEN' 0 `' + 137 `VERB' 0 `' +! Because it is in TSCREEN + 161 `TT' 0 `' +! Check and correct manually + 162 `TT' 0 `' +! Check and correct manually + 163 `TT' 0 `' +! Check and correct manually + 163 `TT' 0 `' +! Check and correct manually + 179 `TT' 0 `' +! Check and correct manually + 179 `TT' 0 `' +! Check and correct manually + 179 `TT' 0 `' +! Check and correct manually + 179 `TT' 0 `' +! Check and correct manually + 179 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 184 `TT' 0 `' +! Check and correct manually + 184 `TT' 0 `' +! Check and correct manually + 184 `TT' 0 `' +! Check and correct manually + 193 `TT' 0 `' +! Check and correct manually + 193 `TT' 0 `' +! Check and correct manually + 193 `TT' 0 `' +! Check and correct manually + 193 `TT' 0 `' +! Check and correct manually + 193 `TT' 0 `' +! Check and correct manually + 200 `TT' 0 `' +! Check and correct manually + 221 `TT' 0 `' +! Check and correct manually + 221 `TT' 0 `' +! Check and correct manually + 221 `TT' 0 `' +! Check and correct manually + 224 `TT' 0 `' +! Check and correct manually + 233 `TT' 0 `' +! Check and correct manually + 233 `TT' 0 `' +! Check and correct manually + 233 `TT' 0 `' +! Check and correct manually + 233 `TT' 0 `' +! Check and correct manually + 240 `TT' 0 `' +! Check and correct manually + 283 `TT' 0 `' +! Check and correct manually + 294 `HTMLURL' 0 `' + 295 `TT' 0 `' +! Check and correct manually + 295 `TT' 0 `' +! Check and correct manually + 319 `HTMLURL' 0 `' + 320 `TT' 0 `' +! Check and correct manually + 324 `TT' 0 `' +! Check and correct manually + 326 `TT' 0 `' +! Check and correct manually + 326 `TT' 0 `' +! Check and correct manually + 331 `TSCREEN' 0 `' + 335 `VERB' 0 `' +! Because it is in TSCREEN + 340 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 340 `TT' 0 `' +! Check and correct manually + 340 `BF' 0 `' +! Check and correct manually + 340 `TT' 0 `' +! Check and correct manually + 349 `TT' 0 `' +! Check and correct manually + 349 `TT' 0 `' +! Check and correct manually + 349 `HTMLURL' 0 `' + 353 `TSCREEN' 0 `' + 360 `VERB' 0 `' +! Because it is in TSCREEN + 369 `TT' 0 `' +! Check and correct manually + 369 `TT' 0 `' +! Check and correct manually + 369 `TT' 0 `' +! Check and correct manually + 369 `TT' 0 `' +! Check and correct manually + 380 `TT' 0 `' +! Check and correct manually + 380 `TT' 0 `' +! Check and correct manually + 393 `HTMLURL' 0 `' + 393 `HTMLURL' 0 `' + 402 `TT' 0 `' +! Check and correct manually + 402 `TT' 0 `' +! Check and correct manually + 404 `TT' 0 `' +! Check and correct manually + 404 `TT' 0 `' +! Check and correct manually + 407 `TT' 0 `' +! Check and correct manually + 407 `TT' 0 `' +! Check and correct manually + 421 `TT' 0 `' +! Check and correct manually + 421 `TT' 0 `' +! Check and correct manually + 421 `TT' 0 `' +! Check and correct manually + 421 `TT' 0 `' +! Check and correct manually + 421 `TT' 0 `' +! Check and correct manually + 432 `TSCREEN' 0 `' + 435 `VERB' 0 `' +! Because it is in TSCREEN + 437 `TT' 0 `' +! Check and correct manually + 437 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 437 `TT' 0 `' +! Check and correct manually + 437 `TT' 0 `' +! Check and correct manually + 445 `TT' 0 `' +! Check and correct manually + 445 `BF' 0 `' +! Check and correct manually + 456 `BF' 0 `' +! Check and correct manually + 456 `BF' 0 `' +! Check and correct manually + 456 `BF' 0 `' +! Check and correct manually + 468 `BF' 0 `' +! Check and correct manually + 468 `BF' 0 `' +! Check and correct manually + 490 `TSCREEN' 0 `' + 496 `VERB' 0 `' +! Because it is in TSCREEN + 506 `TT' 0 `' +! Check and correct manually + 554 `TT' 0 `' +! Check and correct manually + 554 `TT' 0 `' +! Check and correct manually + 554 `TT' 0 `' +! Check and correct manually + 554 `TT' 0 `' +! Check and correct manually + 554 `TT' 0 `' +! Check and correct manually + 554 `TT' 0 `' +! Check and correct manually + 570 `TT' 0 `' +! Check and correct manually + 570 `TT' 0 `' +! Check and correct manually + 580 `TT' 0 `' +! Check and correct manually + 580 `TT' 0 `' +! Check and correct manually + 580 `TT' 0 `' +! Check and correct manually + 580 `TT' 0 `' +! Check and correct manually + 580 `TT' 0 `' +! Check and correct manually + 586 `TT' 0 `' +! Check and correct manually + 586 `TT' 0 `' +! Check and correct manually + 615 `CODE' 0 `' +! Because it contains a newline character + 617 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 617 `TT' 0 `' +! Check and correct manually + 624 `TT' 0 `' +! Check and correct manually + 624 `TT' 0 `' +! Check and correct manually + 638 `CODE' 0 `' +! Because it contains a newline character + 640 `TT' 0 `' +! Check and correct manually + 677 `CODE' 0 `' +! Because it contains a newline character + 679 `TT' 0 `' +! Check and correct manually + 679 `TT' 0 `' +! Check and correct manually + 679 `TT' 0 `' +! Check and correct manually + 679 `TT' 0 `' +! Check and correct manually + 679 `TT' 0 `' +! Check and correct manually + 679 `TT' 0 `' +! Check and correct manually + 679 `TT' 0 `' +! Check and correct manually + 679 `TT' 0 `' +! Check and correct manually + 679 `BF' 0 `' +! Check and correct manually + 679 `TT' 0 `' +! Check and correct manually + 689 `TT' 0 `' +! Check and correct manually + 689 `TT' 0 `' +! Check and correct manually + 703 `TT' 0 `' +! Check and correct manually + 703 `TT' 0 `' +! Check and correct manually + 703 `TT' 0 `' +! Check and correct manually + 738 `CODE' 0 `' +! Because it contains a newline character + 744 `HTMLURL' 0 `' + 745 `TT' 0 `' +! Check and correct manually + 745 `TT' 0 `' +! Check and correct manually + 767 `CODE' 0 `' +! Because it contains a newline character + 769 `TT' 0 `' +! Check and correct manually + 780 `CODE' 0 `' +! Because it contains a newline character + 782 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 782 `TT' 0 `' +! Check and correct manually + 812 `CODE' 0 `' +! Because it contains a newline character + 814 `TT' 0 `' +! Check and correct manually + 814 `TT' 0 `' +! Check and correct manually + 814 `TT' 0 `' +! Check and correct manually + 814 `TT' 0 `' +! Check and correct manually + 814 `TT' 0 `' +! Check and correct manually + 814 `TT' 0 `' +! Check and correct manually + 814 `TT' 0 `' +! Check and correct manually + 814 `TT' 0 `' +! Check and correct manually + 814 `TT' 0 `' +! Check and correct manually + 814 `TT' 0 `' +! Check and correct manually + 814 `TT' 0 `' +! Check and correct manually + 832 `TT' 0 `' +! Check and correct manually + 832 `BF' 0 `' +! Check and correct manually + 847 `CODE' 0 `' +! Because it contains a newline character + 869 `CODE' 0 `' +! Because it contains a newline character + 871 `TT' 0 `' +! Check and correct manually + 871 `TT' 0 `' +! Check and correct manually + 871 `TT' 0 `' +! Check and correct manually + 871 `TT' 0 `' +! Check and correct manually + 875 `TT' 0 `' +! Check and correct manually + 899 `CODE' 0 `' +! Because it contains a newline character + 899 `TT' 0 `' +! Check and correct manually + 913 `TT' 0 `' +! Check and correct manually + 933 `TT' 0 `' +! Check and correct manually + 933 `TT' 0 `' +! Check and correct manually + 933 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 956 `CODE' 0 `' +! Because it contains a newline character + 958 `TT' 0 `' +! Check and correct manually + 980 `CODE' 0 `' +! Because it contains a newline character + 982 `TT' 0 `' +! Check and correct manually + 982 `TT' 0 `' +! Check and correct manually + 982 `TT' 0 `' +! Check and correct manually + 982 `TT' 0 `' +! Check and correct manually + 982 `TT' 0 `' +! Check and correct manually + 982 `TT' 0 `' +! Check and correct manually +1017 `CODE' 0 `' +! Because it contains a newline character +1030 `TT' 0 `' +! Check and correct manually +1030 `TT' 0 `' +! Check and correct manually +1043 `TT' 0 `' +! Check and correct manually +1066 `CODE' 0 `' +! Because it contains a newline character +1066 `TT' 0 `' +! Check and correct manually +1072 `TT' 0 `' +! Check and correct manually +1072 `TT' 0 `' +! Check and correct manually +1072 `TT' 0 `' +! Check and correct manually +1086 `TT' 0 `' +! Check and correct manually +1100 `BF' 0 `' +! Check and correct manually +1105 `BF' 0 `' +! Check and correct manually +1109 `BF' 0 `' +! Check and correct manually +1109 `TT' 0 `' +! Check and correct manually +1114 `TT' 0 `' +! Check and correct manually +1124 `TT' 0 `' +! Check and correct manually +1124 `TT' 0 `' +! Check and correct manually +1137 `CODE' 0 `' +! Because it contains a newline character +1139 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1143 `TT' 0 `' +! Check and correct manually +1143 `TT' 0 `' +! Check and correct manually +1143 `TT' 0 `' +! Check and correct manually +1143 `TT' 0 `' +! Check and correct manually +1143 `TT' 0 `' +! Check and correct manually +1152 `CODE' 0 `' +! Because it contains a newline character +1154 `TT' 0 `' +! Check and correct manually +1154 `TT' 0 `' +! Check and correct manually +1158 `TT' 0 `' +! Check and correct manually +1174 `CODE' 0 `' +! Because it contains a newline character +1183 `TT' 0 `' +! Check and correct manually +1183 `TT' 0 `' +! Check and correct manually +1214 `CODE' 0 `' +! Because it contains a newline character +1218 `TT' 0 `' +! Check and correct manually +1218 `TT' 0 `' +! Check and correct manually +1218 `TT' 0 `' +! Check and correct manually +1224 `TT' 0 `' +! Check and correct manually +1224 `TT' 0 `' +! Check and correct manually +1227 `TT' 0 `' +! Check and correct manually +1235 `CODE' 0 `' +! Because it contains a newline character +1237 `TT' 0 `' +! Check and correct manually +1256 `CODE' 0 `' +! Because it contains a newline character +1258 `TT' 0 `' +! Check and correct manually +1284 `CODE' 0 `' +! Because it contains a newline character +1284 `TT' 0 `' +! Check and correct manually +1292 `CODE' 0 `' +! Because it contains a newline character +1294 `TT' 0 `' +! Check and correct manually +1294 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1294 `TT' 0 `' +! Check and correct manually +1316 `TT' 0 `' +! Check and correct manually +1316 `TT' 0 `' +! Check and correct manually +1316 `TT' 0 `' +! Check and correct manually +1316 `TT' 0 `' +! Check and correct manually +1316 `TT' 0 `' +! Check and correct manually +1330 `TT' 0 `' +! Check and correct manually +1330 `TT' 0 `' +! Check and correct manually +1330 `TT' 0 `' +! Check and correct manually +1330 `TT' 0 `' +! Check and correct manually +1330 `TT' 0 `' +! Check and correct manually +1330 `TT' 0 `' +! Check and correct manually +1339 `TT' 0 `' +! Check and correct manually +1339 `TT' 0 `' +! Check and correct manually +1339 `TT' 0 `' +! Check and correct manually +1339 `TT' 0 `' +! Check and correct manually +1339 `TT' 0 `' +! Check and correct manually +1339 `TT' 0 `' +! Check and correct manually +1339 `TT' 0 `' +! Check and correct manually +1339 `TT' 0 `' +! Check and correct manually +1339 `TT' 0 `' +! Check and correct manually +1360 `TT' 0 `' +! Check and correct manually +1360 `TT' 0 `' +! Check and correct manually +1361 `TT' 0 `' +! Check and correct manually +1362 `TT' 0 `' +! Check and correct manually +1362 `TT' 0 `' +! Check and correct manually +1370 `TT' 0 `' +! Check and correct manually +1370 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1370 `TT' 0 `' +! Check and correct manually +1386 `CODE' 0 `' +! Because it contains a newline character +1388 `TT' 0 `' +! Check and correct manually +1388 `TT' 0 `' +! Check and correct manually +1423 `CODE' 0 `' +! Because it contains a newline character +1425 `TT' 0 `' +! Check and correct manually +1425 `TT' 0 `' +! Check and correct manually +1425 `TT' 0 `' +! Check and correct manually +1457 `CODE' 0 `' +! Because it contains a newline character +1459 `TT' 0 `' +! Check and correct manually +1459 `TT' 0 `' +! Check and correct manually +1459 `TT' 0 `' +! Check and correct manually +1483 `CODE' 0 `' +! Because it contains a newline character +1485 `TT' 0 `' +! Check and correct manually +1485 `TT' 0 `' +! Check and correct manually +1485 `TT' 0 `' +! Check and correct manually +1485 `TT' 0 `' +! Check and correct manually +1485 `TT' 0 `' +! Check and correct manually +1485 `TT' 0 `' +! Check and correct manually +1493 `BF' 0 `' +! Check and correct manually +1493 `TT' 0 `' +! Check and correct manually +1495 `TT' 0 `' +! Check and correct manually +1495 `TT' 0 `' +! Check and correct manually +1503 `CODE' 0 `' +! Because it contains a newline character +1503 `TT' 0 `' +! Check and correct manually +1503 `TT' 0 `' +! Check and correct manually +1512 `TT' 0 `' +! Check and correct manually +1512 `TT' 0 `' +! Check and correct manually + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1512 `TT' 0 `' +! Check and correct manually +1512 `TT' 0 `' +! Check and correct manually +1512 `TT' 0 `' +! Check and correct manually +1512 `TT' 0 `' +! Check and correct manually +1512 `TT' 0 `' +! Check and correct manually +1541 `CODE' 0 `' +! Because it contains a newline character +1543 `TT' 0 `' +! Check and correct manually +1543 `TT' 0 `' +! Check and correct manually +1543 `TT' 0 `' +! Check and correct manually +1547 `TT' 0 `' +! Check and correct manually +1547 `TT' 0 `' +! Check and correct manually +1547 `TT' 0 `' +! Check and correct manually +1547 `TT' 0 `' +! Check and correct manually +1547 `TT' 0 `' +! Check and correct manually +1547 `TT' 0 `' +! Check and correct manually +1563 `CODE' 0 `' +! Because it contains a newline character +1575 `TT' 0 `' +! Check and correct manually +1575 `TT' 0 `' +! Check and correct manually +1583 `TT' 0 `' +! Check and correct manually +1583 `TT' 0 `' +! Check and correct manually +1587 `TT' 0 `' +! Check and correct manually +1589 `TT' 0 `' +! Check and correct manually +1591 `TT' 0 `' +! Check and correct manually +1593 `TT' 0 `' +! Check and correct manually +1600 `TT' 0 `' +! Check and correct manually +1600 `TT' 0 `' +! Check and correct manually +1600 `TT' 0 `' +! Check and correct manually +1611 `CODE' 0 `' +! Because it contains a newline character + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1611 `TT' 0 `' +! Check and correct manually +1611 `TT' 0 `' +! Check and correct manually +1624 `TT' 0 `' +! Check and correct manually +1624 `TT' 0 `' +! Check and correct manually +1624 `TT' 0 `' +! Check and correct manually +1624 `TT' 0 `' +! Check and correct manually +1624 `TT' 0 `' +! Check and correct manually +1645 `CODE' 0 `' +! Because it contains a newline character +1647 `TT' 0 `' +! Check and correct manually +1647 `TT' 0 `' +! Check and correct manually +1653 `TT' 0 `' +! Check and correct manually +1653 `TT' 0 `' +! Check and correct manually +1653 `TT' 0 `' +! Check and correct manually +1672 `CODE' 0 `' +! Because it contains a newline character +1674 `TT' 0 `' +! Check and correct manually +1674 `TT' 0 `' +! Check and correct manually +1705 `CODE' 0 `' +! Because it contains a newline character +1711 `TT' 0 `' +! Check and correct manually +1711 `TT' 0 `' +! Check and correct manually +1711 `TT' 0 `' +! Check and correct manually +1711 `TT' 0 `' +! Check and correct manually +1711 `TT' 0 `' +! Check and correct manually +1719 `TT' 0 `' +! Check and correct manually +1719 `TT' 0 `' +! Check and correct manually +1719 `TT' 0 `' +! Check and correct manually +1737 `CODE' 0 `' +! Because it contains a newline character +1746 `HTMLURL' 0 `' +1747 `TT' 0 `' +! Check and correct manually +1755 `' 0 `' +! check if reference ID Copyright was meant for a section (if not, eg for an anchor, change manually) + -> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag +1756 `TSCREEN' 0 `' +1772 `VERB' 0 `' +! Because it is in TSCREEN +1774 `APPENDIX' 0 `appendix' +! Make of all the *following* chapters appendices ( -> ) and remove the generated tags. +1780 `TT' 0 `' +! Check and correct manually +1785 `HTMLURL' 0 `' +1858 `CODE' 0 `' +! Because it contains a newline character +2118 `CODE' 0 `' +! Because it contains a newline character +3129 `CODE' 0 `' +! Because it contains a newline character +3285 `CODE' 0 `' +! Because it contains a newline character +3540 `CODE' 0 `' +! Because it contains a newline character +3661 `CODE' 0 `' +! Because it contains a newline character +4053 `CODE' 0 `' +! Because it contains a newline character +4120 `CODE' 0 `' +! Because it contains a newline character +4165 `CODE' 0 `' +! Because it contains a newline character +4215 `CODE' 0 `' +! Because it contains a newline character +4315 `CODE' 0 `' +! Because it contains a newline character +=== NIF conversion errors ======================== +=== Finalising errors =========================== diff -Nru kdevelop-3.9.98/doc/tutorial/index.docbook kdevelop-4.0.1/doc/tutorial/index.docbook --- kdevelop-3.9.98/doc/tutorial/index.docbook 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/tutorial/index.docbook 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,5167 @@ +KDevelop"> + + ]]> +]> + + +KDE Application Tutorials + +The KDE Application Tutorials Handbook for the KDevelop Integrated Development Environment + + + +Ralf +Nolden + +The KDevelop Team +
Ralf.Nolden@post.rwth-aachen.de
+
+
+
+ +21/03/2000 +1.02.00 + + +KDE +KDevelop +application tutorials + + + +The KDE Application Tutorials Handbook for the KDevelop Integrated +Development Environment, a tutorial collection on how to create KDE applications +through examples. This handbook itself is part of the KDevelop Integrated Development +Environment and is therefore also licensed under the GNU General Public License; +see Copyright for more information. + + +
+ + +Introduction + +As KDE is currently becoming a standard for Unix System desktops, more and +more developers want to take advantage of the well-written API +that the KDE project includes, to create new applications that offer a +GUI as well as an easy use of the classes provided with +Qt/KDE. The &kdevelop; project therefore intends to provide an +IDE which enables developers to create and extend their +applications rapidly with the main focus on KDE.As beginners always have +difficulties getting started, this handbook tries to explain certain aspects of +application creation for KDE, by describing how to create running applications +with the sample code included with the Qt library, using the &kdevelop; +IDE as well as creating KDE applications by examples. + +The next chapter will explain to you how to create a project with +&kdevelop; that is already a complete application. Then we'll walk through the Qt +online documentation, containing the sources for examples on how to use the Qt +library. + +This will give you a first understanding of how the underlying Qt library +functions, and how to use the classes provided with it. Qt is our starting +point, as KDE is on top of the Qt library classes, and KDE applications make a +wide use of the QT classes. + +Later, we will cover how to create a KDE application with &kdevelop;'s +application wizard. From the minimum framework provided, we will create a +running example KDE application that makes use of the KDE libraries, and will +explain the different parts of a KDE application in detail. + +The &kdevelop; Team wishes you success in learing about KDE and Qt with +this handbook, and hope that it will enable you to become another programmer +contributing to the KDE project. + + +What you should know already + +This handbook requires a base knowledge about the C++ programming language +as a minimum to understand the code examples and their functionality. Further, +it is assumed that you have read The User Manual to +&kdevelop; as well as The &kdevelop +Programming Handbook and know how the &kdevelop IDE +works in general, and what generated projects are. + + + + +Getting Started + +Before you start the tutorial, you should have set up &kdevelop; to work correctly. Ensure you have +access to the Qt online reference documentation in the "Help" +menu or the corresponding book in the documentation tree. When looking at the +first page of the Ot documentation, you will see that it contains a link to a +section "Tutorials" and "Examples". Under "Tutorials", you will find a 14-step +introduction into using the Qt library to build applications. +"Examples" will lead you to a list of example programs that Qt includes, and +show for example, usage reference in certain classes. Now, if you are an +absolute beginner, you should make yourself comfortable with the idea behind Qt - providing a +library that offers: + + + +a base application class (QApplication) + + +a widget library for graphical user interfaces + + +a set of additional helper classes for graphics, file, and data handling + + +the signal-slot mechanism for object communication + + +event controlling through event loops and virtual methods + + + +If the above list doesn't make sense to you right now, you should read about the Qt +library in The &kdevelop; Programming +Handbook where the basics for a Qt application are described in +detail. There, you will also find an introduction about the difference between +a Qt and a KDE application, which is not covered much at the first level of the +Qt tutorial step. + +To learn about Qt first is a good start for programming KDE +applications as well, so we will create a project that will produce the tutorial +applications after editing. + +To do this, start with opening &kdevelop; and select +"Project""New" +from the menubar. The application wizard opens and you have to select which type +of project you want to build. For Qt applications, you would choose the Qt +application, but we will use the mini-KDE project to build our examples. The +reason is simple: the Qt tutorials don't contain much code, and by choosing the +Qt application in the application wizard, we would have to do a lot of changing +in the provided code, to create "true" examples. + +But as the mini-KDE application only consists of an empty main window but +also checks for the Qt library and header files, it will fit for our purposes +and doesn't require much change. + +When entering the next wizard page, we have to enter the project-specific +information. There, we can leave out any KDE-specific additions such as a +mini-icon and a main icon, documentation etc. We just fill in the information +that will be useful for building a suitable base for the tutorials. As the +structure of the tutorial steps builds the next step on the previously created +code, we can start with "MyWidget" as the project name. This will already build +us the base class that is needed in chapter 4, so we don't have to take care of +that later. As we want to start with the first tutorial step, we will use '1' as +the project number, which we can increase later when moving to the next +step. + +Then, fill in the other required information such as your name, email +address, and project directory. That would be all we need, and we can flip to +the next page. Insert your header for the project's header file here or use the +given example. The same is done with the fourth page, where the same has to be +set for the source files. Finally, the last page is entered, where you have to +press "Create" to build the project. If the button is not +available, start at the first page again and make sure you didn't miss inserting +any required information. + +If everything went OK, the project has been build and the messages window +in the application wizard will have "READY" at it's last line. Select +"Close" to finish the wizard. + +When looking at the treeview on the left, you will see that the project +alreay includes a class "MyWidget" - this is because we +chose this to be the application name. Further, when opening +"Functions" in the classviewer's +"Globals" folder, you will see that the application already +contains a main() function where the execution will +start. + +Now the application is already set up. You could do an +"Execute" or "Make", but +as we want to create the tutorial applications, we can go ahead and change the +code first to create our tutorial examples, which we'll do in the next +step. + + + +Building the Qt Tutorials + + +Step One: Hello World! + +As the previous chapter explains, we created a project called "MyWidget". +Now, when looking at the first tutorial page of the Qt documentation, you will +see that the first application only uses a main() +function. Therefore, we only have to change the given main() +function of our generated project to get the first tutorial step running. + +To access the main() function, select it from the +classviewer's "Globals" folder, which contains a subfolder +for "Functions" where all non-class functions are +listed. This will open the file main.cpp in the +"C/C++ Files" window and the editing cursor is already set +in front of the first line of main(). + + +What to change first + +We could start changing the given code towards the desired result which is +listed in the tutorial, but it can be even easier. Select the contents of the +main() function with the mouse, or by holding the +Shift key pressed while selecting the +lines with the down-arrow key. Then select +"Cut" from the "Edit" menu or +press the DEL key to remove the selected +code. This will clear the main function and we can start from scratch to build +our first tutorial. + + + + +Entering the tutorial code + +Now, to insert the code from the tutorial, you could first read it +carefully and try to remember which line contained which code. Then, +after reading the tutorial's line-by-line description, you could use it as an +example to write the tutorial by yourself. + +Those who want to go the easy way: select the contents of the listed +main() function in the documentation browser and press the +"Copy" icon from the toolbar. Optionally, you could use the +context-menu or the according entry in the "Edit" menu. This +will copy the selection into the clipboard and, after switching back to the +sourcecode window, can be inserted with "Paste" +(either from the context menu, the toolbar icon, or the according entry in the +"Edit" menu). + +Finally, add the according header files outside the +main() function: + + +#include <qapplication.h> +#include <qpushbutton.h> + + +That's it! The source code is done for your first tutorial +application. + + + + +Building Hello World! + +To build the first tutorial, select "Make" from +the "Build" menu or press the corresponding toolbar +icon. Optionally, you could choose "Execute" as well, +which results in running the application after the build was successful. + +If the build stops due to an error, be assured the fault was on the +programmer's side, not on the tutorial! It would be sad to have to +search for an error, just when you decided to program for KDE and/or Qt, but you +can use this to train yourself to use &kdevelop;. + + To find an error, you have two options: either select the according error +message in the output window, which will bring you to the line the error +occured, or press the F4 key. If there is +more than one error, you could use the "Next Error" +entry in the "View" menu. + + + + +Exercises + +You may ask "Exercises? This one was so simple, I don't need to +excercise!", but be assured, things will get more complicated. This one was the +easiest example, and the more complex they get, the more thinking is asked +on your side, to understand and follow the tutorial steps. Also the excercises +will enable you to learn how to actually use &kdevelop; and it's +features. + +To teach yourself more with the first tutorial, you should try to do the +following changes to the given code and see how this will influence the +application behaviour: + + +change the pushbutton to a +QLabel. use +setText() instead of directly setting the text in the +pushbutton's constructor use +QPushButton::resize ( const QSize & s ) instead of setting +the size by width and height directly. Create a QSize +instance first that contains the size play +with the sizes to see which is width and which is height + + + + + + +Step 2 and 3: Extensions + +The tutorial steps 2 and 3 are extending the facilities of the first +tutorial. Here, you will learn about signals and slots, as well as parent-child +relationships between widgets. + +Why is it important to learn about that? Well, the signals and slots +are building the technology which make the difference when comparing the Qt +library to other widget library. Whenever you will hit an implementation +problem where you want to communicate between objects, this will make your work +incredibly short, and nothing serious will happen if something went wrong, even +misconnections do not lead to a segmentation fault. This is the strength of the +Qt library and a lot of KDE/Qt developers will not want to miss it's +it's flexibility. Understanding the signal/slot mechanism therefore, +is essential to create any KDE/Qt application. + +Another thing to watch out for is the fact that the button terminates the QApplication instance by calling quit(). You will meet quit() again when working with QApplication's KDE-pendant, KApplication + + + +Writing your own Widgets + +Now, after having successfully modified and extended the +main() function, you will hit the point where you need to +create a new widget. A unique widget, that only can be constructed with the class +you're about to write in step 4. Actually, the class has been created by the +application wizard for you, so there is not much to add. You have to insert the +code that lesson 4 places in the main.cpp file into the +MyWidget classes' header and implementation +file. Fortunately, you only have to add the implementation to the constructor +code. + +To access the constructor, select it from the classviewer. This will +automatically bring you to the implementation where you have to add the +code. + +Here, you only have to watch out for the include of +qfont.h. QFont is only used in the +constructor code of MyWidget. Therefore, add +#include <qfont.h> to the top of the +mywidget.cpp file. + +To run the new application, just hit +"Execute". This will result in compling the changes +after an autosaving. + + + +Extending the Widget Class + +Now, in lesson 5 the target is to extend the widget class, and you will +learn about virtual functions as well. Here, the +resizeEvent() is reimplemented. What is important to learn +here (besides extending a class,) is that Qt works with user events by virtual +functions that take an event as a parameter. Therefore, you should make yourself +comfortable with the following classes of the Qt library: + + + +QEvent + + +QChildEvent + + +QCloseEvent + + +QFocusEvent + + +QKeyEvent + + +QMouseEvent + + +QMoveEvent + + +QPaintEvent + + +QResizeEvent + + +QTimerEvent + + + + +Whenever writing custom widgets, especially view areas of applications, +you will have to overwrite the default implementation of the widget's +event-methods with your own for certain events that have to be processed. Those +would be e.g. + +virtual void mousePressEvent ( QMouseEvent * +) for processing a mouse event to pop +up a context menu. In the implementation, you have to insert a formal parameter +into the function header, most developers either use +event or just e as the parameter +name. + +Then, you can process the event's parameters. For a +QMouseEvent, you have to ask if the +right, middle or +left mouse button was the one that caused the +event. + + + +Adding a new Class + +In lesson 6, you will have to add a class to the tutorial +application. Now, normally you would think "I just will create a header file and +an implementation file, then I'm done". &kdevelop; will make it easier for you! +When adding a class, you should always use the Classgenerator. This will do all +the work for you, so you just will have to add the specific code. + +To add a class with the Classgenerator, choose +"Project""New +Class", which will open a dialog to enter all needed +values for the class you want to add. The first thing we have to insert is the +classname. The tutorial name this LCDRange, so this has +to be inserted first. Then proceed to the baseclass. The baseclass is the one +that the new class inherits. Looking at the tutorial (Qt 1.42), this is +QWidget. Now, as most GUI classes to +add would inherit QWidget, the Classgenerator makes it +even easier. Leave the baseclass empty, and instead check "QWidget +child class" in the "Additional Options" +section. This will automatically add the required Q_OBJECT macro to the headerfile, to add slots and signals +later (which is required in chapter 7). + +As the filenames are automatically inserted, you don't have to take care +of that. The only thing that we would suggest adding is the documentation. It is +always a good style to add a desciptive documentation to the class, especially +as the classname LCDRange doesn't inform you specifically +about the purpose of the widget. + + + +Step 7-14 + +For the rest of the tutorial steps, you are prepared and you already know +everything you have to know about adding the classes required, and doing the +changes. + +After each change you should do a new build, and check your code for +errors. Run the application, and follow it's execution. Additionally, you should +play with &kdevelop;'s options for "Build". Try executing the +application with a commandline argument such as , and +debugging it with KDbg in the Tools-window. Then you +should be able to proceed with the Qt examples that are provided with Qt. + + In the next chapter, you will be introduced into development for KDE 2, +by an example application KScribble, which is a small +drawing application that will show you the concepts of application design, and +how to implement you own program. + + + + + +Creating KDE Applications + +This handbook will try to teach you KDE/Qt application design by creating +an example application step-by-step. The major intention is to gain a certain +understanding how two of the most important ideas of graphical user interface +programming work: the document-view model, and the multiple document interface +(MDI) model. + +You will also get a good idea of concepts that are coming up ahead. These +include the KDE 2 and the Qt 2.1 libraries, bringing new enhancements and +technology to the programmer's hands, that will improve application design and +widen the possibilities that are open to use. Keywords such as "widget themes", +"Inter-Process Communication" and "embedded applications" are talked about and +will allow even more than you can imagine right now. + +&kdevelop; 1.1, still based on KDE 1.1.x, provides developers some of the +most exciting possibilities, including the ability to begin developing +applications for KDE 2, while still running a stable desktop environment. For this reason, +this tutorial will be based on a KDE 2 application that +already makes use of Qt-2.1, offering a solution for the mentioned +MDI model, which we provide as a ready-to-go frame +application. During this tutorial you will get a clear insight on how it works +and this will also make it much easier to understand the document-view model, +which is hard to understand even for advanced programmers. That will help you +create other type of applications, which uses the document-view model, even if +they only contain one window and you can't see an obvious need for +it. + +But let's just move on - you will see what's coming up on you and how +easy it actually is. + +The upcoming chapters of the tutorial cover the following several +steps: + + +installing KDE 2 (libraries) and setting up &kdevelop; to create +KDE 2 applications. +understanding the basic concepts of MDI and +document-view model. +creating the generic framework for +KScribble, and explaining the concept of the +framework. +implementing the document class, which will provide the +interface to read and write the document data, as well as maintaining the +document. +implementing the view class, to visualize the data. This class +also takes over the interaction with the user. +adding dialogs to set the pen width, and color of the pen to +draw with, including their integration into the toolbar and +menubar +changing the view from the default +QWidget inheritance to a scrollable +view. + + +The tutorial example itself is based on the code found in the scribble example application that comes with the Qt +library. The source of the original example can also be found within the Qt documentation, in the examples section. + + + +Installing KDE 2 + +In this chapter we will first go through a couple of steps that will help +you set up &kdevelop; for creating KDE 2 / Qt 2.x applications. The requirements +are: + + + +a current Qt-2.1 snapshot, available at http://www.troll.no + + +a current KDE 2 snapshot of the packages kdesupport and kdelibs + + + +Both the Qt-2.1 and KDE 2 libraries are currently under development but +are you may consider them close to final. Changes to be expected for the final +versions are minimal, and may not even affect your application. This means +you are getting to know the newest libraries available - and you have got a +valuable time-saving, enabling you to create your application even before the libraries are +completed. + +The following sections describe what to do in detail within three steps: + + +installing the Qt library +installing the KDE libraries +setting up &kdevelop; + + +Then you are ready to go, and we will proceed with creating the first step +of the example program KScribble in the next +chapter. + + +Setting up Qt-2.1 + +This first step will give you the minimum requirement to follow our +example. There is a possibility to avoid installing KDE 2 if +you're only interested in creating Qt-only programs. As Qt-2.1 contains all +needed classes, and &kdevelop; provides a project template for multiple document +interface applications for Qt-2.1, (as well based on the same framecode that is +used in the KDE 2 template), you should have no problem at all following the +example with a Qt-only application. + +To get the newest Qt library, get a recent version from the Troll + Tech website at http://www.troll.no, + in the download section. Then change user to root, and copy the tarball to the + directory where your currently used Qt version is placed as well - on a SuSE + Linux system this would be /usr/lib, where you should + have a directory for either qt-1.44 or qt-2.0.2, depending on the distribution + version. Untar the library sources with + +tar zxvf qtxxx.tar.gz + +depending on the name of the tarball. Then set the environment variable +QTDIR to point to the directory where your new Qt-2.1 library is +placed with e.g. +setenv QTDIR=/usr/lib/qt-2.1 + + Another solution would be to move the qt-1.44 directory, usually just +named qt, to qt-1.44 and create a +symlink that for now has to point to qt-2.1. After the +library is built, change it back to point to the +qt-1.44directory. + +Change to the Qt-2.1 directory and type: + +./configure +make + + +You can now change back your QTDIR variable to point to +your qt-1.44 installation, after successfully compiling the Qt-2.1 +library. + +Now switch to the directory /usr/lib/qt-2.1/lib and +copy the created libraries to /usr/lib +exept the symbolic link +libqt.so. + +Then you are done with Qt, and you can proceed to the next step, setting +up KDE 2 libraries. If you want to develop for Qt only, proceed directly to the +section Setting up &kdevelop;. + + + +Setting up KDE 2 Libraries + +The second step leads you through installing the needed KDE +libraries. Download a recent snapshot of the library packages kdesupport and kdelibs from +http://www.kde.org/. Then things will +go a bit easier than for the Qt library. Just untar the sources to your +directory, and change to the new kdesupport directory first. There, type: + + +./configure +make + +and as root: + +make install + + +This will install the kdesupport package to the directory given in the + option and compile using the new build Qt-2.1 library, +to which you give the path to configure by the option +. + +The same applies to the kdelibs package, just change to the kdelibs +directory, and type the same as you did above for the kdesupport package. + +You are now done with setting up the requirements for the required +libraries to build a KDE 2 application. + +As a note aside, the KDE library package contains support for +automatic HTML documentation generation, which you can easily +get by installing KDoc, version 2.x. Then type +makekdedoc in your kdelibs directory and +KDoc will create the HTML +documentation in a subdirectory srcdoc. In &kdevelop; you +can access the KDE library documentation online with setting the KDE library +documentation path in the &kdevelop; Setup dialog to point to +kdelibs/srcdoc. In the same way, set your Qt-Online +documentation path in &kdevelop; to point to +/usr/lib/qt-2.1/html, so you can access the documentation +right away from within &kdevelop;. + +If you successfully installed the Qt-2.1 and KDE 2 libraries, you're just +one step away from creating your first KDE 2 application. You just need to give +&kdevelop; the information as to where you installed the libraries - which we'll +do in the next section. + + + +Setting up KDevelop + +This part is somewhat the easiest in the whole configuration process for +KDE 2 development: Setting up &kdevelop;. Just open &kdevelop;, then select +"Options""KDevelop +Setup" to access the &kdevelop; configuration. There, +change to the last page, titled "Path". This page contains +two entry fields, one for the Qt library, and one for the KDE 2 libraries. As +you have successfully installed everything, select +/usr/lib/qt-2.1 for the Qt-2.x library path and +/opt/kde2 for the KDE 2 library path. Press the +"OK" button and you're done. + +Users that only want to develop for Qt-2.x (including the current Qt-2.0.2 +version) just have to set the Qt-2.x library path. + +Now we can proceed to the next chapter where we will create the first step +of the KScribble example. + + + + +Application Concepts + +This chapter now introduces you into the ideas of the application models +mentioned already: the MDI (Multiple Document Interface) and +the Document-View model. A basic introduction into the Document-View model and +the generating of a project with &kdevelop; is already given in The &kdevelop; Programming Handbook, but +based on a Single Document Interface (SDI). In any case, you +should be familiar with the basics of the KDE and Qt classes that are explained +in The KDE Library Reference +Guide. There, the base classes of the underlying libraries are explained +in detail, and how to use them, with an additional description of the Qt +signal-slot mechanism and event handling. + +As a guideline, you should know already: + + +that every KDE application needs one instance of +KApplication (for a Qt application one instance of +QApplication) + + +generally a main window is inherited from +KTMainWindow for KDE (for a Qt application inherited from +QMainWindow) + + +that events (e.g., keyboard presses or mouse movements) +are sent to the application by the underlying window system + + +that QWidget as the base class for all visible +Graphical User Interface (GUI) components provides specialized +event handlers by virtual functions that filter out the according events by +reimplementing QObject::event() + + +that the Qt signal-slot mechanism means basically that a component can +send out signals and a receiver can connect to those signals to process some +actions + + +that this mechanism avoids inheriting classes for GUI +components because the signals inform you about e.g. mouse +presses where appropriate for a wiget + + + + +The Document-View Model + +The Document-View Model is one of the most basic concepts in the design of +applications that rely on graphical user interfaces. Therefore, a certain +understanding of the why this is, helps you understand that although the +programmer has other possibilities, it makes sense to make use of the +Document-View Model. + + But first let's follow the usual design of a typical KDE / Qt +application: + +Your application instance provides the first connection to your +application and is the starting point of the event handling for a program. The +program itself represents itself to the user by a Graphical User Interface which +is most often called a main-window. The main window then provides the +appropriate functions for the user such as key accelerators, a menubar, toolbar +and a statusbar. In the center, it contains a so-called "view-area" which means +that this part is an instance of another class, usually called a "View". The +view instance is created when the main window is constructed at program start, +and has to be set as the view area component with a method provided by the main +window: setView(your_view) for KDE applications using +KTMainWindow, +setCentralWidget(your_view) for a Qt application using +QMainWindow. Now, the view obviously is the area that is +responsible for interacting with the user to manipulate the data that it +represents. As an example, you could use a QMultiLineEdit +as a view and you will have an editor. Then you can use the provided slots of +the view for connections to menubar or toolbar command like this: + +While creating the menubar, you want to provide a method for the command +"cut" in the "Edit" menu: + + + +pEditMenu->insertItem(BarIcon("editcut"), i18n("Cu&t"),view, SLOT(cut()),KAccel::Cut, ID_EDIT_CUT); + + + +This creates a menu item in the "Edit" menu, that, when +activated, directly calls the slot cut() of the instance +view. We are assuming here, that you have created +this instance as a QMultiLineEdit and set it as the view +area. The Multiline-edit's slot is called, and cuts out the selected text as a +result. The functionality is already provided by the class itself, and so there +is no need to inherit from QMultiLineEdit to create a +view area that is capable of such actions. They are ready to use, and make +application development very fast- you just need the application instance and +the main window, including the connections to your view area, and you're +done! + +That means, a simple editor can be written by creating one single class +that defines the main window behavoir and how to save and read files into the +editor - just some basic slots your main view has to implement itself. + +But here is the reason why we're now introducing this mysterious +Document-View model: You have to provide methods of your own, to read and write +the actual files you want to edit with the QMultiLineEdit +view-area within the main window's interface. +Yes, this is obviously the easiest thing to do in this case, and the most +logical. + +Now, if we have a look at the files and their contents as a so-called +"Document", which we can subscribe with the attribute of an "Object" in C++ +terminology, the next step is just a little one: If I have a document, a view +and a main window, why don't I separate these three objects from each other? We +could easily create a small class that is responsible for reading in a file into +a text stream, and then call the view to draw the text visible to the user. The +same applies to saving the file again - the document class should then provide a +saving method that retrieves the text from the view again and saves it as a +file. In the example these two methods would be the only actions that are needed +to be done by a document class, because the edit-view already provides all +methods basically needed for and editor by slots and you can manipulate the +content of the view by them directly. + +The main idea behind the need for this separation into three objects +(document, view, main window) instead of the minimum of two, the view and the +main window, is this: what if I want to give the user the possibility to work +with a file in two or even more views? Such things can +even be done within one main window by splitters or deviders, containing two +view instances which shall both display one file. The +solution can only be that if the user manipulates the file contents in one view, +the other view has to be notified about that and to actualize its +contents. Otherwise a bad scenario will occur: if the user closes one view where +he added something at the end of the file, which he had cut out at the beginning +of the file in the other view, the file will be saved later +still containing the cut section, because if the second and last view did not +recognize this, it still contains the text without modification from the +beginning, plus the inserted one. This means that both views have to be +synchronized in the contents they are displaying, and that can be done if all +views get notified about each action that the user does, which view he actually +uses should be irrelevant. So finally a document class is needed to be the one +and only holder of the true contents of the document and is providing the views +the possibility to manipulate the contents. + +I hope this has given some insight into this model, although in most cases +it seems that the programmer can live without it - equally by just using a +provided class as the view area, or writing a widget on his own to handle user +interaction, as long as you represent one +document or file by one view area, the view can +be responsible for the data as well and only provide methods to retrieve or set +the document contents for actions like reading a file or saving it. The next +model to describe, the Multiple Document Interface, will make a difference at +this point- there you will see the actual need and the functionality the +Document-View model provides. + + + +The Multiple Document Interface (MDI) + +As the last section described the Document-View model, you will probably +guess what MDI means. Users that come from other Operating +Systems than Unix/Linux are used to it, as are programmers developing for those +platforms. X-Window applications traditionally are more targeted towards +functionality and stability, Unix users are used to single windows that provide +functionality, therefore even the Document-View model is often not needed to +create applications. With Qt as a multi-platform toolkit, developers are having +even more choice - developing for MS Windows(tm) as well as for +Unix systems. While on Windows the difficult of creating applications that are +capable of handling so-called child windows has been getting to some kind of +standard, this is adressed by the Qt 2.1 library, but on the other hand Unix +users can profit from this architecture as well. + +What is the meaning of MDI? An MDI +application generally has the same concept of a usual application that has, as +described above, one application instance and a main window. The view area now +make the difference: you don't directly use a view that represents data and +provides interaction to manipulate that data but a view that handles other +windows looking like top-level windows. These windows are now representing the +former view area and the main difference is that the interaction chain changes +from + + +application instance -> main window -> view + +to + +application instance -> main window -> view -> active child window + + +The view now is capable of several actions: + + +creating as many child windows as the user requests, + + +providing methods to retrieve the currently active child window, + + +maintaining a list of open views, + + +managing the child window behaviour for maximize, minimize, as a window manager does for top-level windows. + + + +Now, you can use "complete" widgets like the +QMultiLineEdit as child windows, for example for an +application that only provides one window and each child window is responsible +for it's own data. That could be described as "Multiple Document Interface", +whereby each child window is equal to a single document. The application then +manages the usual actions such as providing methods for the child window +interaction such as cut or copy. + +Extending this concept with the document-view model enhances the +possibilities by far: imagine that you can open as many windows as you like +within the main window, and that a new child window can be a new view of a +document that is already shown by another child window. The management for this +requires a separation into the already described three objects model, but +doesn't limit the actual number of instances of the documents as well as the +views. + +Fortunately, Qt 2.1 contains the possibility to create such applications, +and &kdevelop; provides you with the corresponding application frameworks for +both Qt-only programs, as well as KDE 2 applications, both with the same +interface methods. So &kdevelop; is appropriate wether you want to develop for +either one of these. Using KDE 2 interfaces will offer you still more +possibilites through library functions as well as inter-process communication, +but those are special aspects that we are to cover by separate introductions to +these techniques. + +Now you are prepared for following the development for KDE 2 - just follow +the next chapter to get a first look at the functionality already provided by +&kdevelop; when creating applications. There, we will generate the framework for +our tutorial application KScribble and describe the +practical aspects of programming MDI applications. + + + + + +The MDI Framework + +If you're already familiar with previous versions of &kdevelop;, you will +know that your IDE uses so-called "frameworks" as a starting +point of application development. These frameworks by default contain a support +for a generic document-view model, but were limited to SDI +(Single Document Interface, one window with one view area) model +structures. From &kdevelop; 1.1 on, the application wizard is capable of a lot +more than the previous versions. It now offers some new project types especially +for those developers that want to stay up-to-date with the upcoming KDE 2, as +well as for Qt 2.1. + +One major extension are MDI application frameworks for +both, KDE 2 and Qt 2.1. These frameworks differ only in the use of some library +functions such as file dialogs or message boxes as well as the used toolbar and +statusbar classes - the KDE version uses KDE 2 methods, the Qt version the +according Qt functions. + +To create the fist step of this tutorial application +KScribble, be sure that you have followed the +instructions in chapter 2 of this tutorial handbook: setting up KDE 2. If that +went all right, nothing can go wrong. If you couldn't set up the KDE 2 +libraries, be sure that you have Qt-2.1 installed and set up &kdevelop; for that +at least. You can follow this tutorial by choosing the according Qt framework as +well (which has the differences as mentioned above: other method calls for +dialogs and GUI components). + + +Creating an <abbrev>MDI</abbrev> Framework + +Now we will start jumping into development by creating the frame + application for KScribble. + + Start &kdevelop; and choose +"Project""New" +from the menubar, to invoke the application wizard. On the first page, you will +be shown a tree of project types. These contain KDE and Qt projects. There, +select "KDE 2 MDI" from the KDE section. If you only have +Qt 2.1 installed, choose "Qt 2.1 MDI" from the Qt +section. Then select "Next", enter "KScribble" as project +name and "1.0" as version number. Add your name and email address into the +according fields and you're done. Click on the "Create" +button and &kdevelop; will generate our first version of +KScribble, while you can watch the output in the last +page of the wizard. Finally, press "Exit" to return to +&kdevelop;. In the output window you will see an additional message showing that +the messages file has been set up for your project, which will be important to +translate KScribble into other languages. + + + + +Overview + +It is important to have an understanding "where to find what" in the +generated sources, and where your place as a programmer can be found to make +KScribble a unique KDE application. + +First of all, in the Classviewer you will see three already created +classes, KScribbleApp, +KScribbleDoc and KScribbleView. As +explained above, each of them has a certain part within the application; the App +class builds the main window and coordinates user interaction, the Doc class +maintains the documents that an application can manipulate, and finally the View +class is responsible for user interaction with the child windows and +communicates with the document connected to it. This has several +consequences. To make a good use of the provided functionality, the programmer +is bound to use the given View class. By default, the View inherits +QWidget as a minimum requirement, but you are not limited +to that at all. Inheriting from another class is not too much work and there is +also the possibility to use a QMainWindow, or +KTMainWindow for example, as the class to inherit and use +another class that manages the view. + +In the next chapter we'll continue with extending +KScribble to manage it's documents. After that we'll +implement the user interaction and you will see the first functionality that is +unique to our application: we can draw pictures, load and save them. + + + + + +Defining the Documents + +The first step when creating an application based on the Document-View +model should always be to think what kind of data the application has to +manage. This decides how the view class will look, and especially how the +document clas will read and write data to and from files, and offer methods to +manipulate the data. As KScribble will be a simple +drawing application that operates on graphical data, we will use the Qt class +QPixmap for storing our paintings while it is +edited. + +QPixmap also offers simple methods to read +and write pictures into files, so the serialization of the document data is done +in just two lines, one for reading and one for writing. Further, we need to +define a pen that draws into a document, set it's width and color and make it +available for the view class to retrieve the pen. Actually you want the view +offering the drawing methods, but the document as the central element for all +views has to hold the pen originally, because two views of the same document +would otherwise use different pens! + +Therefore to define how our document class should work, we will add one +instance of QPixmap, one of QPen +and edit the methods newDocument(), +openDocument() and +saveDocument(). + + +Adding the Instances + +Open the file kscribbledoc.h, by selecting it in one +of the fileviewers, or by a click on the classviewer over the class +KScribbleDoc. + +Then add the lines marked with -> from the following code snippet: + +-> #include <qpixmap.h> +-> #include <qpen.h> + + class KScribbleDoc + { + +-> protected: + +-> QPen currentPen(){ return pen;}; + +-> int penWidth() +-> { return pen.width(); } + + public slots: + void updateAllViews(KScribbleView *sender); + + protected: + +-> QPixmap buffer; + + private: +-> QPen pen; + /** the modified flag of the current document */ + bool modified; + +As you see, we added pen and buffer, as well as +currentPen() and penWidth(). As pen is +declared private, we offer a possibility to retrive the pen as well as the pen +width. As these are already implemented within the classdeclaration, we don't +have to add them to the implementation file, where we're turning to now. + + + +Initialization of the Document + +Select the method newDocument() in the +KScribbleDoc class to jump to the method declaration. Here, +we're only adding one line, marked with the arrow: + + kscribbledoc.cpp + + bool KScribbleDoc::newDocument() + { + ///////////////////////////////////////////////// + // TODO: Add your document initialization code here +-> pen=QPen( Qt::black, 3 ); + ///////////////////////////////////////////////// + modified=false; + return true; + } + +This initializes the pen with the color black and width of 3 pixels; the +QPen class has some more constructors, but this one suits +our needs here. + + + +Implementing the Serialization + +What is left to do is to define how to open and save our pictures. This is +done in the according methods: + + +bool KScribbleDoc::openDocument(const QString &filename, const char *format /*=0*/) + { + + QFile f( filename ); +-> //if ( !f.open( IO_ReadOnly ) ) +-> // return false; + ///////////////////////////////////////////////// + // TODO: Add your document opening code here +-> if(!buffer.load( filename, "PNG" )) +-> return false; + ///////////////////////////////////////////////// +-> //f.close(); + + + bool KScribbleDoc::saveDocument(const QString &filename, const char *format /*=0*/) + { + QFile f( filename ); +-> // if ( !f.open( IO_WriteOnly ) ) +-> // return false; + + ///////////////////////////////////////////////// + // TODO: Add your document saving code here +-> if(!buffer.save( filename, "PNG" )) +-> return false; + ///////////////////////////////////////////////// + +-> //f.close(); + + +Add the lines marked with the arrow again to your code. What we did here +is to comment out the passages where the file filename is +opened, because that is done automatically by the load and save methods of +QPixmap, which we add instead. Other documents may open a +file and read in its contents such as text lines or whatever, so the +QFile methods are already present in the codeframe. As +save() and load() return a boolean +value if the operation was successful, we're returning false +if not, so the rest of the framework gets a return value and can give out +warnings if the operation was not successful. + +The load() and save() methods +now are already provided in QPixmap. They require the +filename and the format as argument. The source framework on the other hand +does not call the document methods with the format yet. If +only one format is used, it sets the format here. Other methods could detect the +format, but we will turn to this later. For now, we're using "PNG" as +format. See QImageIO for more details about the image +formats that can be opened. + +Now we're already finished defining our document structure. The +QPixmap buffer serves us as a buffer, storing the +original picture contents while we're working on it. The pen is a valid pen for +all views connected to the document. Note that the initialization of the pen is +done in newDocument(). This method is always called after +the constructor within the framework internally, so you should add document +instances initializations there as we did with the pen. + +In the next chapter we will turn to the view class to define how the view +shall cooperate with the user as well as how it accesses the +document - and then we'll be ready to paint! + + + + +Defining the View + + +Interactivity with the User + +In this chapter we'll turn to the view class of +KScribble to define how the child windows shall +work. First of all, we notice that KScribbleView is +derived from QWidget by default. That is the minimum +requirement for a child window, but it already fulfils our needs. + +When it comes to defining a new +widget's behaviour, we need to know how the user shall interact with the +window. In our example, this would be obviously the mouse. Therefore, we have to +overwrite some virtual methods from QWidget that process +mouse events the widget receives. What we need is to know when the user presses +a mouse button, because the drawing shall only take place +when the mouse is pressed. Then we need to know when the mouse is moved (to know +where it moves to) as well as when it is released-to +finish the stroke the user has drawn. Further we want our picture to be painted +on the window and resized if the user decides to resize +the window he draws into. As members we will also add a +QPointArray polyline and a boolean value +mousePressed. Add the code with the +arrow to your include file for the class KScribbleView: + + kscribbleview.h + +-> #include <qpointarray.h> + + class KScribbleView + { + . + . + protected: + virtual void closeEvent(QCloseEvent* ); + +-> virtual void mousePressEvent( QMouseEvent * ); +-> virtual void mouseReleaseEvent( QMouseEvent * ); +-> virtual void mouseMoveEvent( QMouseEvent * ); +-> virtual void resizeEvent( QResizeEvent * ); +-> virtual void paintEvent( QPaintEvent * ); + + KScribbleDoc *doc; + +-> private: +-> bool mousePressed; +-> QPointArray polyline; + + } + + + +Reimplementing Event Handlers + +Now we're coming to the actual implementation of the event handlers. As +explained in The KDE Library Reference +Guide, Qt has a good way of handling user events, especially when they +target on to widgets. QWidget as a baseclass preselects +the events, and provides basic event handlers which, as they are declared as +virtual, we can overwrite to define how our widget shall react on user +actions. One is already overwritten: the closeEvent() +method. This is needed because our main window, represented in the App class, +already preselects closing child windows and handles this. Therefore the default +event handler, which just accepts the closing, must be overwritten to prevent +that happening, and let the App class do the job. + +First of all, we have to declare the widget default behavoir in the +constructor, by initializing members and setting predefined values: + + kscribbleview.cpp + + + KScribbleView::KScribbleView(KScribbleDoc* pDoc, QWidget *parent, const char* name, int wflags) + : QWidget(parent, name, wflags) + { + doc=pDoc; + +-> setBackgroundMode( QWidget::NoBackground ); +-> setCursor( Qt::crossCursor ); +-> mousePressed=false; +-> polyline=QPointArray(3); + } + +We're setting the background to NoBackground, a cursor +(crossCursor), and initialize mousePressed +and polyline. Then we'll start implementing our first event +handler, mousePressEvent(), to recognize when the user +presses the mouse and where: + +Note: the following implementations have to be inserted completely, so the +lines to add are not marked with an arrow! + +void KScribbleView::mousePressEvent( QMouseEvent *e ) +{ + mousePressed = TRUE; + polyline[2] = polyline[1] = polyline[0] = e->pos(); +} + +Here, we're setting mousePressed to true, so we have +stored this event somehow. The second line is not so obvious: we're storing the +position where the mouse was pressed into our array's first three elements. As +the array is a QPointArray, it can store values of the +type QPoint (which contain an x and y value +themselves). What we will do with this array is to store positions of the mouse +and create the drawing routine from there in the mouseMoveEvent: + +void KScribbleView::mouseMoveEvent( QMouseEvent *e ) +{ + if ( mousePressed ) { + + QPainter painter; + painter.begin( &doc->buffer ); + painter.setPen( doc->currentPen() ); + polyline[2] = polyline[1]; + polyline[1] = polyline[0]; + polyline[0] = e->pos(); + painter.drawPolyline( polyline ); + painter.end(); + + QRect r = polyline.boundingRect(); + r = r.normalize(); + r.setLeft( r.left() - doc->penWidth() ); + r.setTop( r.top() - doc->penWidth() ); + r.setRight( r.right() + doc->penWidth() ); + r.setBottom( r.bottom() + doc->penWidth() ); + + doc->setModified(); + bitBlt( this, r.x(), r.y(), &doc->buffer, r.x(), r.y(), r.width(), r.height() ); + } +} + +This event handler is probably the most difficult, so we will do a +step-by-step walkthrough to understand what's been done. + +First of all, the event handler receives all mouse movements over the +widget. But as we're only interested in the move if the mouse is pressed, +because that is the time to draw, we have to ask if mousePressed is true. That +has been done by the mousePressEvent() event handler before, +so we don't have to take care of it anymore. + + Now we're starting the painting action. First we create a +QPainter and let it draw into the buffer of the +document. This is important, because the document's buffer contains the real +contents, the view only acts as a communicator between the document and the +user. We get the pen from the document instance as well by calling +currentPen(). + + The next three lines assign the values inside the polyline +QPoint array, setting point 2 to 1, 1 to 0 and 0 to the +point to where the move went (this is the contents of the event we're interested +in). Assuming we've just pressed the mouse (so all three values of the array +contain the pressing position) and the first mouse move event appears that +contains the first position to draw a line to; this value is moved into the +first position in the array again. You may wonder why we need three points in +the array then, if we're only interested to draw a line from one position to the +next. + + The following lines explain that: after drawing into our buffer is +finished (with drawPolyline() and +painter.end()), we create a rectangle r +and use boundingRect() from +QPointArray to get a QRect that +contains all three points. Therefore we need three values to have a +most-complete rectangle. + + Then we use normalize() to have the leftmost and +topmost values the smallest (as coordinates are counted from top->bottom and +left->right). The next thing to do is adapt the size of the rectangle by the +size of the pen, because the pen has a thickness we get with +penWidth() and widen the rectangle by the width of the +pen. (Imagine the mouse movement was only two pixels away but the pen thickness +is set to ten- then the rectangle wouldn't contain the whole painted +area). + +Finally, we set the document modified, and use the +bitBlt() function to copy the rectangle out of the buffer +into the widget. bitBlt operates bitwise, and is very fast, +so that it is a good method to copy the painted area from the buffer on the +widget instead of repainting the whole window. It's arguments are: first the +object to draw to (the destination), here it is our widget, so we have to use +the pointer this. + +The next two arguments give the destination topleft position to start +copying to, then follows the source to draw from with it's coordinates now +including the width and height. As the pixmap coordinates are the same as the +coordinates that the widget uses (because our pixmap is drawn into the topleft +corner), the coordinates for the source and destination topleft point are the +same. This is something to watch out for in some of the next step, so it may be +mentioned here already. + +Next comes what happens if we release the mouse button. Then the drawing +has to stop when we move the mouse again, so we set mousePressed to false here: + +void KScribbleView::mouseReleaseEvent( QMouseEvent * ) { + mousePressed = FALSE; +} + +Now we have finished implementing the user interaction when it comes to +the actual drawing operations. The example shows it's not too complicated to use +a document-view model. Just create your document instance so that it contains +the contents and copy the contents to your view. + + + +Painting and Resizing the Document + +What is left to do are two other virtual event handlers that need a +reimplementation. First of all, we have to take care that our picture gets +painted into the window when something else happens: when you open another +window that obscures the painting - then you change to your painting again, but +it won't be there, unless your paint event gets processed to redraw the +picture: + +void KScribbleView::paintEvent( QPaintEvent *e ) +{ + QWidget::paintEvent( e ); + + QRect r = e->rect(); + + bitBlt( this, r.x(), r.y(), &doc->buffer, r.x(), r.y(), r.width(), r.height() ); +} + +This method also uses bitBlt() to draw the picture from +the buffer into the widget. Here, we only need the rectangle that gets +repainted, so we retrieve the geometry from the event ( +e->rect() ) and use the coordinates for +bitBlt(), just as we did in the +mouseMoveEvent(). + +The only thing where we didn't do anything about is the size of the +pixmap. We didn't set it anywhere - we did not even use the pixmap in the +document class except for loading and saving - but these methods aren't called +when creating a new picture. So it seems our pixmap doesn't have a size nor a +predefined background at all (even if we would have set the size, the contents +would be random colors because it is uninitialized). On the other hand we have +the fact that the KScribbleView instances get resized +when they show up - at least with the minimum size. This is the point where we +can add the initialization as well, because the user can change the size +manually and the widget will receive a resize event as well. For reasons of +simplicity, we want to set the pixmap size the same size the widget has. All +this is done in the event handler resizeEvent(): + +void KScribbleView::resizeEvent( QResizeEvent *e ) +{ + QWidget::resizeEvent( e ); + + int w = width() > doc->buffer.width() ? + width() : doc->buffer.width(); + int h = height() > doc->buffer.height() ? + height() : doc->buffer.height(); + + QPixmap tmp( doc->buffer ); + doc->buffer.resize( w, h ); + doc->buffer.fill( Qt::white ); + bitBlt( &doc->buffer, 0, 0, &tmp, 0, 0, tmp.width(), tmp.height() ); +} + +Here, we first call the resizeEvent handler of +QWidget. Then we calculate the size of our picture - +because we can resize a window to make it smaller or bigger, we have to separate +these two cases: if we resize to a smaller geometry, the picture shall still +contain it's contents. On the other hand, if we resize to a bigger widget, we +have to resize the pixmap as well to that bigger size. The calculated values are +stored in w and h. But before the resize takes place, we create a copy of our +pixmap, in the document in tmp. Then we resize the buffer (the document), fill it +with white color and then copy back the contents from tmp into buffer. This +resizes our pixmap always syncronous with the widget that displays it but +doesn't lose contents which are outside the visible area, if the resizing +makes the widget smaller. + +Now our first application has gained a step where we can test it's +functionality. Just hit "Run" in &kdevelop; and after +KScribble shows up, you're ready to paint your first +picture with it! + + + + + +Extending the GUI + +As we have seen, we have already provided +KScribble the ability to open and save pictures with +the document class, and enabled user interaction by overwriting virtual methods +in the view class. Next we gained the first functionaliy - we can draw +pictures. But when we created the QPen instance in the +document class, we set some pre-defined values for the pen; the color is black +and the pen width set to 3 pixels. As you usually want to change these values in +a drawing application, we have to enhance the main GUI by +providing ways to set these, according to the currently active window and +document connected to it. This chapter will therefore introduce you to: + + + +adding a new menu to the menubar + + +extending the toolbar with icons for the actions defined in the menubar + + +creating a new dialog with the &kdevelop; Dialogeditor + + +connecting the new commands of the menubar and toolbar to calling the dialogs + + +enabling the document class to let us change the pen values + + + +Further, we also add a method to delete the document contents at all with +a menubar command. + + +Adding the "Pen" Menu + +As the title of this section says, we will add a menu for setting the pen +values of the documents here. Menus that are inserted into +the menubar are instances of QPopupMenu, and you can have +a look at how the current menubar is created when you switch to the +KScribbleApp class, method +initMenubar(). + + You will see that the menubar items are created in the order they appear +on the menubar - but this isn't necessary. There are two things important to how +the menubar will look like: + + + +in the menus the order of the menu-items + + +in the menubar the order of inserting the popup menus. + + + +Last but not least you have to create menus by calling the +constructor. The class declaration already contains the pointers to +the popup menus, so we will have to add our "Pen" menu here first: + +kscribbleapp.h + +class KScribbleApp +{ +. +. + private: + QPopupMenu* pPenMenu; + +} + +Now we are going to create the menu itself. Change to the implementation +of the method KScribbleApp::initMenuBar() and add the +lines marked with an arrow: + +void KScribbleApp::initMenuBar() +{ +.. + +-> /////////////////////////////////////////////////////////////////// +-> // menuBar entry pen-Menu +-> pPenMenu = new QPopupMenu(); +-> pPenMenu->insertItem(i18n("&Color"), ID_PEN_COLOR); +-> pPenMenu->insertItem(i18n("&Brush"), ID_PEN_BRUSH); + + menuBar()->insertItem(i18n("&Edit"), pEditMenu); +-> menuBar()->insertItem(i18n("&Pen"), pPenMenu); + menuBar()->insertItem(i18n("&View"), pViewMenu); + + +-> connect(pPenMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); +-> connect(pPenMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); +} + +You see that we first create the menu with new +QPopupMenu(). Then we use the insertItem methods +to add two menu entries, Color and +Brush. The visible commands are inserted with the +method i18n(), which ensures that you can internationalize +your appliction. So as a general rule, you would declare all visual text that +will appear later by the method i18n(). Qt-only programs using Qt > 2.0 would use the corresponding method tr() instead of i18n(), as Qt has it's own ways of +internationalizing applications. + +The second argument is a macro, the ID of the +menubar item. This ID is a number that we have to set +using #define in the file resource.h, where you will see all other already +used ID's declared. There are also other ways to insert menus by directly +connecting a slot to the inserted entry, but the application framework uses ID's +to select which action has been activated - and highlighted. Therefore each menu +entry, independent of the popup menu it appears, has to be a unique number, and +as we can hardly remember numbers later, setting a #define for the ID is a +nice solution. The popup menu is now inserted into the menubar with +insertItem() as well, and with the pointer to the menu as +second argument. + +Note that we inserted the popup menu after the "Edit" +menu and before the "View" menu, so it will appear between +those menus later in the menubar. What is also important when creating menus is +that they should be available to the user with shortcuts; ususally in menus you +will see underlined characters that the user can jump to directly by pressing +Altand the appropriate underlined letter of the menuitem. As a +programmer, you have to set this character by a leading ampersand, so the +"Pen" menu will later be accessible via the keyboard by +pressing AltP. Within the +menu, the user can press another button to go directly to the command he wants +to, so in the menu all items should have this kind of shortcuts as well. + +Note that you should write item insertions together in groups that +have the same visible access, so you can keep a better overview of the +characters you already used so that there are no menu accelerators used +twice. (this is also important for your translators: in other languages the used +accelerator may not be available in the translated word, so they have to set +some accelerators again.) + +In the last two lines we're connecting the pen menu with two slots: one +for when the menu signals that it is activated and the action should be +executed, and one for when it is highlighted. That allows making a statusbar +help message available for the user. You can have a look at the methods the menu +is connected to, they contain switch statements where the sent menu +ID is compared and the following action called. + +What is left to do is to add the #define statements to the file +resource.h: + +resource.h + +/////////////////////////////////////////////////////////////////// +// Pen-menu entries +#define ID_PEN_COLOR 14010 +#define ID_PEN_BRUSH 14020 + +You will see that the numbers are unique for these entries - you have to +watch out not to set the same number for two entries. If it happens by +accident, there's still the compiler to inform you about redefining. + +This is currently all you have to do to add a new menu for your +menubar. The actions they will execute are: "Color" will call a color +selection dialog, "Brush" will call a dialog (which we still have to create) to +select the brush width. + +But first we'll extend the toolbar as well by two icons for these actions +in the next section. + + + +Adding Toolbar Buttons + +Whenever you think that some new commands should be made available by +toolbar buttons as well because they are often used and you want to offer +additional functionality, you can easily do that by adding buttons in the +framework's initToolBar() method of the +App class. Here, we decide to add a button for both menu +entries in the Pen menu, but those need icons - which you can +either find in the KDE directory /toolbar or, when you +don't find an icon that matches your action, have to create yourself. + +KIconEdit is very suitable to paint icons, so +we will first create them. Choose "New" from the +KDevelop"File" menu and select +"Icon" as the filetype. The first icon will be +named "pencolor.xpm". Now we have to select where we want +to have the icon created in our project directory. Press the directory selection +button and change to your project directory containing the +KScribble sources. Then create a new directory +"toolbar". Change to that directory and press +"OK". The new icon will then be created in the new +directory "toolbar" and will be opened by +KIconEdit within &kdevelop; automatically. Paint +something that will signalize the user what the button is intended to do, save +the pixmap and then switch to the RFV / LFV in +&kdevelop;. Select the icon by a right mouse button +press and select "Properties" from the popup +menu. You will see that the icon is included in the distribution, but for your +program to find the icon again later, you have to set the installation +destination as well. Check the "install" option and enter +into the line now active below: + +$(kde_datadir)/kscribble/toolbar/pencolor.xpm + +This will install the pixmap in the KDE file system hierarchy's data +directory, where each application has its subdirectory containing additional +files needed by the application. Icons have to be installed into another +subdirectory "toolbar", so the application's icon loader +can find the pixmaps for your program. + +After you're finished, repeat all these above steps with the second icon +for selecting the pen width. Name this pixmap +"penwidth.xpm". + +Now we only have to insert the buttons into the toolbar; add the lines +marked with the arrow into your code: + +void KScribbleApp::initToolBar() +{ +.. + toolBar()->insertButton(BarIcon("editcopy"), ID_EDIT_COPY, true, i18n("Copy")); + toolBar()->insertButton(BarIcon("editpaste"), ID_EDIT_PASTE, true, i18n("Paste")); + toolBar()->insertSeparator(); +-> toolBar()->insertButton(BarIcon("pencolor"), ID_PEN_COLOR, true, i18n("Color") ); +-> toolBar()->insertButton(BarIcon("penwidth"), ID_PEN_BRUSH, true, i18n("Width") ); +-> toolBar()->insertSeparator(); + toolBar()->insertButton(BarIcon("help"), ID_HELP_CONTENTS, SIGNAL(clicked()), +.. +} + +Here, we use the methods of KToolBar to insert +buttons. The first argument, BarIcon(), tells the method to +load the icon for the button. What seems unusual is that we don't have to care +for the file extension. The preferred format for KDE 2 is +*.PNG, but it works with xpm's as well. (You could use +ImageMagick for that as well which can do that- or +use KScribble in a later step to convert your icons +to PNG!) + +The second argument is again the ID. The commands are +then automatically activated, as the toolBar() is already +connected to the same methods as the menubar is for signal +activated(). The third argument stands for "available" when +true, "deactivated" when false; as we want to have these available, we set this +to true. At last, we add a tooltip for the the buttons, which we also embrace +with i18n() to allow internationalization. + +You're done for now, the GUI is extended at least +visually. You can compile and run KScribble again and +see how it looks. Of course the new items in the menubar and toolbar can't +execute any action, that is what we're going to add in the next section. You +will also note that the toolbar icons we added are not displayed - which is +because we didn't install KScribble and so they can't +be found. All other used icons are already shipped with the KDE libraries, so +these are already visible. + + + + +Creating the Pen Width Dialog + +As weve already created the according menubar and toolbar commands, we +now have to build the first dialog to set the pen width. For this, select +"New" from the KDevelop "File" +menu and select "Qt/KDE Dialog". Then enter the dialog file +name as kpenbrushdlg. The extension will be automatically +added. Enter "OK" and the dialogeditor opens an empty +widget that will be our dialog background. + +When constructing a dialog, we have to think about what is really needed +by the user. Here, we need a label to display what will be set, a spinbox with +up and down buttons to set the pen width value, and three buttons: one for +resetting the pen width to the default value, one to cancel the dialog, and one +for taking over the new value - the OK button. In this +order we will add the items to the dialog - which is important because the +tab-focus follows the order by which the widgets are created. So if youre +starting with the OK button, then the spinbox and then +the cancel button, the input focus will change from the +ok button to the spinbox, and then to the +cancel button - which is not what the user +expects. + +The tab focus should follow the widgets items top down, from left to +right, so we have to construct the dialog in this order as well. To add items to +the dialog, select the "Widgets" tab on the left +pane. There you have all available widgets present as icons to construct your +dialog. Pressing a widget button will create the new item and place it at the +top-left corner of the widget. From there, you can place it with the mouse to +the position you would like it to show up. Further, when a widget item is +selected, you can set the according values in the "Widget +Properties" pane on the right. + + + +The Label press the "QLabel" +button on the "Widgets" tab and place it at position x:50, +y:20. Then select the "General" section in the widget +properties pane. Change the text in properity "Text" from +"Label" to "Pen Width:". Adjust the +width of the label to a width that matches the label contents in x-direction; a +width of 120 should be fine. You can do this either by using the mouse or set +the value in the "Geometry" section of the +properties. + + + + +The Spinbox +Press the +"QSpinBox" button on the "Widgets" tab +and place it at the right of the label we created in the last step. Now set the +variable name in section "C++Code" to +"width_spbox". The minimum and maximum values are 1 and +100, which should be fine for setting the brush width. + + + + +The Buttons +Finally, we need the mentioned three +buttons. The leftmost button will be the default button. Create a +QPushbutton and place it somewhere nicely on the bottom of +the dialog, set the variable name to "default_btn" and the +button text to "Default". Proceed with the +OK button with variable name +"ok_btn" and the cancel button with variable name +"cancel_btn" and set the button text to +"&OK" and "&Cancel". + + + + +If youre fine with the layout of the dialog, choose "Generate +complete sources" from the Build menu and set the classname to +"KPenBrushDlg", the inheritance to +QDialog. After pressing "OK", the +sources for the dialog are created and added to the project. Now +you can return to the editor view in &kdevelop; and we can add the code needed +to give the dialog some execution purpose. + + + + +Connections and Setting Up + +After we have created the GUI of the dialog, we have to +add some functionality to the buttons and provide ways to set and retrieve the +selected value of the spinbox - because we want the dialog to display the +current value when it gets called, and to access the selected value when the user +pressed the OK button to quit the dialog. + +In the generated class for the dialog, +KPenBrushDlg, you can see one method besides the +constructor and the destructor, initDialog(). This method implements the whole +GUI construction, so we dont have to care for that anymore and +we can go directly to add the usual connections for the push buttons first. Add +the lines marked by arrows to the constructor of the dialog: + +KPenBrushDlg::KPenBrushDlg(int curr, QWidget *parent, const char *name) : QDialog(parent,name,true){ + initDialog(); + +-> connect(default_btn, SIGNAL(clicked()), this, SLOT(slotDefault())); +-> connect(ok_btn, SIGNAL(clicked()), this, SLOT(accept())); +-> connect(cancel_btn, SIGNAL(clicked()), this, SLOT(reject())); +} + +This provides the functionality for the buttons on the bottom of the +dialog when the user clicks the button. First, we set the default button to +execute a slot called slotDefault(). This slot is still to be +implemented below, where we will set the default value of the spinbox +directly. + +The second connect() call connects the ok button to +call the slot accept() provided by +QDialog, as well as the cancel +button gets connected to QDialogs slot +reject(). This will both close the dialog and will set the +result value which we will use later when we implement the method that calls the +dialog to determine if we want to use the value set or to ignore any +changes. + +Now we have to add two methods to set and retrieve the spinbox value: + +void setCurrent(int curr){ width_spbox->setValue(curr); } +int width() { return width_spbox->value(); }; + +Add these methods to the class declaration with the modifier "public", as +we want to set and retrieve the values when we call the dialog to show up. The +setCurrent() method will be used to set the current value the +pen has, the width() method returns us the selected with when +the user presses OK and we want to know which value has been chosen. + +Last but not least, we need to implement the slotDefault() method: + +//kpenbrushdlg.h: +//method declaration: + +public slots: + void slotDefault(); + +//kpenbrushdlg.cpp: +//method implementation: + +void KPenBrushDlg::slotDefault() +{ + width_spbox->setValue(3); +} + +This will set the default value to 3 pixels for the pen. + +Now were ready with our first dialog and we can turn to over to the other +application classes to adapt some things and add the method calls to invoke the +dialog. + + + +Calling the Dialogs + +As you may guess, calling the dialogs means that we will not only +implement calling our width selection dialog but also add the method for +selecting the pen color, but one after another. First, create a method +slotPenBrush() in the class +KScribbleApp: + +void KScribbleApp::slotPenBrush() +{ + slotStatusMsg(i18n("Setting brush width...")); + + // get one window with document for a current pen width + QWidgetList windows = pWorkspace->windowList(); + KScribbleView* m = (KScribbleView*)windows.at(0); + KScribbleDoc* pDoc = m->getDocument(); + int curr_width=pDoc->penWidth(); + + // create the dialog, get the new width and set the pen width for all documents + KPenBrushDlg* dlg= new KPenBrushDlg(this); + dlg->setCurrent(curr_width); + if(dlg->exec()){ + int width=dlg->width(); + for ( int i = 0; i < int(windows.count()); ++i ) + { + m = (KScribbleView*)windows.at(i); + if ( m ) + { + pDoc = m->getDocument(); + pDoc->setPenWidth(width); + } + } + } + slotStatusMsg(i18n("Ready.")); +} + +Here, we first have to access the window list and retrieve a pointer to a +document - which can be a document of any window, because all documents should +have the same current pen width. Then we create an integer variable +curr_width that stores the current pen width. + +Now we can call the dialog by creating the dlg instance of +KPenBrushDlg. Then we set the current pen width by +calling dlg->setCurrent(), which method we added to the +dialog. By calling dlg->exec() we invoke the dialog. The +if(m) statement ensures that the following code is only +executed when the result code of the dialog has the accept flag set - which +means, the code is executed if the user pressed the OK +button on the dialog. + +Assuming the user changed the value and pressed OK, +we have to set all documents to use the new pen width. For that we use the +for() loop and set every documents pen width to the width +variable we retrieved before with dlg->width(). + +We dont have implemented the method setPenWidth() in +the document class, so well do this right now: + + +kscribbledoc.h: + +public: + void setPenWidth( int w ){ pen.setWidth( w ); } + + +What is missing to execute any action is to add the methods that shall be +called when the menu items are activated or the toolbar buttons pressed. For +this, we have to add the IDs to the slot +commandCallback(), which selects and executes the according +methods we want to call if a menu or toolbar item was chosen: + +void KScribbleApp::commandCallback(int id_) +{ + switch (id_) + { + case ID_PEN_BRUSH: + slotPenBrush(); + break; + + case ID_PEN_COLOR: + slotPenColor(); + break; +.... + } +} + +This addition also adds the slotPenColor() method to +the execution list to set the pen color, which we will implement now: + +void KScribbleApp::slotPenColor() +{ + slotStatusMsg(i18n("Selecting pen color...")); + + QColor myColor; + int result = KColorDialog::getColor( myColor, this ); + if ( result == KColorDialog::Accepted ) + { + QWidgetList windows = pWorkspace->windowList(); + KScribbleDoc* pDoc; + KScribbleView* m; + for ( int i = 0; i < int(windows.count()); ++i ) + { + m = (KScribbleView*)windows.at(i); + if ( m ) + { + pDoc = m->getDocument(); + pDoc->setPenColor(myColor); + } + } + } + slotStatusMsg(i18n("Ready.")); +} + +When looking at the code, we see that we use another new method of +KScribbleDoc to set the pen color. This one has to be +implemented as well: + + +kscribbledoc.h: + + /** sets the pen color */ + void setPenColor( const QColor &c ){ pen.setColor( c ); } + +Watch out for adding the declaration of the two new methods +slotPenBrush() and slotPenColor() to the +class KScribbleApp, so our class knows about these +methods. + +Now youre ready! Lets summarize what weve done in this chapter: + + + we first added menubar and toolbar commands/items for two dialogs +that we want to call; + then we created the first dialog to set the pen width with the +KDevelop dialogeditor + after that we created the methods we want to call by the +menubar/toolbar items which invoke the dialogs and set the poperties we +wanted to change + finally, we added the needed set functions to the document so we +are able to change the values after the dialogs get executed. + + +By this structure, you are provided the general way how to extend your +application with more functionality and manipulating settings +that influence the behavoir of the document and view interaction. + + + + +Extended Views + +In this chapter were going to extend the functionality of our view widget +by two enhancements: syncronized views and scrollviews. + + +Syncronizing Views + +Lets first explain what this will bring us, and then how were going to +do it. While playing with KScribble, you may have +noticed, that if you open another view of a document by calling +"Window""New +Window", this new view works with the same data as +the first view, and does like any other view you create with that command. But +when it comes to painting into the document, you can only do that in one view - +the other views are not displaying the document contents at the same time. If +you obscure one view that doesnt contain the actual contents with another +window and then bring it up to the front again, it will display the acutal +contents. That comes because after a widget has been obscured and then activated +again, it receives a paint event from the window system, which will call +KScribbleView::paintEvent() again and that finally redraws +the contents of the area that has been obscured. What we want to achieve is that +all views should paint syncronous with the one the user actually paints to. In +fact, you will see that this enhancement is a really easy task. The document +class already provides us a method updateAllViews(), which +calls the update() method on each view in the documents +view list. This makes it very easy to syncronize the document contents - every +time the contents is changed, here by mouse movements (where we copy the +changings to the buffer with bitBlt()), we just have to +call updateAllViews(this). The this pointer is needed, because the calling view +doesnt need a repaint and the update() method is only +executed if the sender view is not the same as its own. + +What youve got to do here is only to call updateAllViews(this) at the end +of the virtual methods mousePressEvent(), +mouseMoveEvent() and +mouseReleaseEvent() - and youre done! Take this as a +general rule in your applications: each time the contents of the document is +changed by a view, call updateAllViews(). How the update +has to be executed has to be implemented in the widgets +update() method; one may be content by setting e.g. the +changed text in an editor, in our application we just call +repaint(), which generates a paint event and copies the +contents of the document into the view again. + + + +Scrolled Views + +In this section we will add a functionality that is most often a thread to +developers - if you cant use an already implemented widget that provides the +scrolling already. What does scrolling mean? In our context, the problem begins +where we want to open a picture that is bigger than a view can +display. therefore, the result will be that you can only see as much as the view +provides, beginning from the topleft corner; the rest will be cut away from the +users view. A scrollview on the other hand is a widget that provides a +scrollbar on the right side and on the bottom of the widget by which the user +can "move" the contents. In fact, it shows the same size of the document +contents, but the view area can be moved within the document, so each part can +be displayed if the user wants to by moving the scrollbar sliders up and down, +left and right. Fortunately, Qt provides a class +QScrollView that itself inherits from +QWidget and offers the same base functionality as an +ordinary widget but manages the contents by scrollbars automatically - with the +additional option that the programmer can either just use an instance of the +QScrollView, create the child widgets to manage with the +scrollview as parent and add them to the scrollview with +addChild() or create a view by inheriting +QScrollView and draw into the viewport, which is a +defined area inside the scrollview, instead of directly to the widget. The +difference here is that QScrollView provides a set of +event handlers similar to the QWidget event handlers +especially for the viewport. So what was formerly a +mousePressEvent() in our view will become a +viewportMousePressEvent, a paintEvent() will become a +viewportPaintEvent etc. The second possibility will suite our needs to make +KScribbleView a scrollable widget and so we will have +to make the following modifications: + + +first we have to make the document use a size of its contents. This +can be done by getting the size for an opened picture, for a +new picture we have to define a default start size. In other painting +applications, this size can be changed most often by a command +provided by the user interface, e.g. a dialog that asks for the new width and +height as well as a method to shrink the picture +contents to fit into that new size. +changing the inheritance of KScribbleView +from QWidget to +QScrollView +renaming the virtual methods to the according viewport methods of +QScrollView +adapt the virtual event handlers to act on the geometry of the +viewport. This means that the old implementation relies on the +geometries of QWidget starting at the topleft corner of a +widget. If the view is scrolled and the topleft corner is not visible, we +have to ensure the positions retrieved from the QWidget +coordinates are translated to viewport coordinates + + + +Sizing the Document Contents + +As already mentioned, we have to set a size to the document contents as +well as to initialize this size and provide a method to +retrieve the size by the views. For this, we add a variable QSize +size to KScribbleDoc as well as the method +docSize(): + +kscribbledoc.h: + +#include <qsize.h> + +... +public: + const QSize docSize(){ return size;}; + +private: + QSize size; + + +Now we have to modify all methods that deal with initializing and opening +the document contents - newDocument() and +openDocument(): + + bool KScribbleDoc::newDocument() + { + ///////////////////////////////////////////////// + // TODO: Add your document initialization code here +-> size=QSize(300,200 ); + pen=QPen( Qt::black, 3 ); +-> buffer.resize(size); +-> buffer.fill( Qt::white ); + ///////////////////////////////////////////////// + modified=false; + return true; + } + + bool KScribbleDoc::openDocument(const QString &filename, const char *format /*=0*/) + { + + QFile f( filename ); + // if ( !f.open( IO_ReadOnly ) ) + // return false; + ///////////////////////////////////////////////// + // TODO: Add your document opening code here + if(!buffer.load( filename, format )) + return false; +-> size=buffer.size(); + ///////////////////////////////////////////////// + // f.close(); + + modified=false; + m_filename=filename; + m_title=QFileInfo(f).fileName(); + return true; + } + +In newDocument(), we initialize the size with a default +value of 300 pixels wide and 200 pixels high. This is enough for a +small picture for now and we could add a dialog for resizing as well if we want. +When it comes to opening a picture, we have to set the size to the size of the picture. This can be done by calling +QPixmap::size(), which we used in openDocument(). Then were done with setting the sizes and we can move on to reimplementing KScribbleView and make it a scrollview. + + + + +Adapting the View + +As said above, we first have to change some things in the interface of +KScribbleView. The following code shows these +changings: + +#include <qscrollview.h> + +class KScribbleView : public QScrollView +{ + Q_OBJECT + + protected: + /** changed from mousePressEvent() overwriting QScrollView method */ + virtual void viewportMousePressEvent( QMouseEvent* ); + /** changed from mouseReleaseEvent() overwriting QScrollView method */ + virtual void viewportMouseReleaseEvent( QMouseEvent* ); + /** changed from mouseMoveEvent() overwriting QScrollView method */ + virtual void viewportMouseMoveEvent( QMouseEvent* ); + + /** commeted out because we have a document size defined */ +// resizeEvent( QResizeEvent* ); + + /** changed from paintEvent() overwriting QScrollView method */ + virtual void viewportPaintEvent( QPaintEvent* ); +} + +Here, we changed the inheritance from QWidget to +QScrollView first and added the according include file we +need. Also we changed all implemented event handlers that deal with interaction +on the contents of the scrollview to the according methods +QScrollView provides for this purpose and commented out +the resizeEvent. Now we can go over to the implementation of these methods and +make use of the size our picture has. As a view is always created after the +document exists, we can resize the widget directly in the constructor to fit +this size and as well resize the contents (which is the viewport size): + +#include <qsize.h> + +KScribbleView::KScribbleView(KScribbleDoc* pDoc, QWidget *parent, const char* name, int wflags) + : QScrollView(parent, name, wflags | WPaintClever | WNorthWestGravity | WRepaintNoErase) +{ + doc=pDoc; + mousePressed=false; + polyline=QPointArray(3); + +-> setResizePolicy ( QScrollView::ResizeOne ); +-> viewport()->setCursor( Qt::crossCursor ); + +-> QSize size=doc->docSize(); + // resize the viewport - this makes the resizeEvent obsolete +-> resizeContents(size.width(), size.height()); + // resize the widget to show up with the document size +-> resize(size); +} + +Note that formerly, the resizeEvent() took +care of resizing the drawing area to the same as the widget size. At the same +time, this changed the document size as well, so the document picture had always +the same size as the widget. With the already initialized size of the document (which we set in newDocument() and openDocument()), we just resize the contents by calling +resizeContents() provided by +QScrollView with the size of the document. You may also +notice that we changed the cursor over the widget from the overall widget to the +viewport widget, which we can retrieve with viewport(). Now +we can reimplement the event handlers. At first, we should take care for the +paintEvent, as this is one of the most important ones, because it gets called +whenever the widget shows up or is resized. + +Attention: take care to comment out the resizeEvent() implementation! + +Now, the paint event will have to copy the pixmap in the buffer to the +corresponding position in the view. For this, we have to change the +destination of bitBlt() from this to +viewport(), set the topleft position to 0,0 and set the +target (the buffer) to copy from the contentsX and contentsY position on into +the viewport: + +void KScribbleView::viewportPaintEvent( QPaintEvent *e ) +{ + bitBlt( viewport(),0,0, &doc->buffer,contentsX() ,contentsY() ); +} + +The contentsX() is the position in the +x-direction of the scrollviews contents - which goes to position 0 in the +viewports absolute position, which is the topleft point visible in the +scrollview. The same applies to the y-direction. This part is +sometimes hard to understand and you may have to do a bit "trial and error" when +implementing your own scrollviews. The other possible +call of bitBlt() would be to switch the values of the +positions and inverting the contents values: + +bitBlt( viewport(), -contentsX(), -contentsY(), &doc->buffer, 0, 0 ); + +The last changes we need to do are changing the mouse event +handlers. First, the mouseMoveEvent(), which +changes to viewportMouseMoveEvent(), has a +bitBlt() call as well. Here, we have to apply the same chages +as in the paint event. + +Further, in the mousePressEvent() and the +mouseMoveEvent(), we have retrieved the position of the mouse +events with e->pos(). This position now will deliver us a +widget position - not the contents position, so we have to translate this to +draw into the correct position of the document with +viewportToContents(): + + void KScribbleView::viewportMousePressEvent( QMouseEvent *e ) + { + mousePressed = TRUE; +-> doc->polyline[2] = doc->polyline[1] = doc->polyline[0] = viewportToContents(e->pos()); + doc->updateAllViews(this); + } + + void KScribbleView::viewportMouseMoveEvent( QMouseEvent *e ) + { + if ( mousePressed ) { + .... + doc->polyline[1] = doc->polyline[0]; +-> doc->polyline[0] = viewportToContents(e->pos()); + painter.drawPolyline( doc->polyline ); + .... + r.setBottom( r.bottom() + doc->penWidth() ); + + doc->setModified(); +-> bitBlt(viewport(), r.x()-contentsX(), r.y()-contentsY() , +-> &doc->buffer, r.x(), r.y(), r.width(), r.height() ); + doc->updateAllViews(this); + } + } + +In the viewportMouseMoveEvent(), we had to change the +destination again from this to viewport(), and +with that translate the positions. This time, we used the second version of the +call we used in viewportPaintEvent(), with subtracting the +contentsX and contentsY values to copy the rectangle containing the current +painting into the correct position of the viewport. + +At last, we will apply a small change in conjunction with the update() method: why should we repaint the whole widget every time? +This will reduce performance and lead to a so-called "flicker" +effect. This effect sometimes occurs with widgets, but there are some ways to reduce this behavior. Instead of calling repaint(), we could call repaint(false) as well. This +will not erase the widget contents before redrawing it. As we copy the document +contents directly into the widget, we dont need to erase it anyway, because all +the data will be overwritten anyway. In conjunction with +QScrollView, we will reduce the painting +even more: we limit the update method to call repaint() on +the viewport() widget, because that will call +viewportPaintEvent(). On the other hand, the painting area we +use is the rectangle containing the document contents, when the +document size is smaller than the viewport size. So we can limit the paint event +to the rectangle of the viewport where the document +is displayed, whose visible width and height we can retrieve and compose to the +rectangle. Additionally, we use the erase parameter with false, +so the document area does not get erased: + +void KScribbleView::update(KScribbleView* pSender){ + if(pSender != this) + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} + +Now youre ready! This chapter has been one of the hardest to implement, +and to understand, especially when it comes to the geometries that change. On +the other hand, we gave our application a whole new functionality through the new +scrollview, and the syncronized views. + +With that, were moving on to the last chapter of our tutorial. There we +will apply only a few changes, making use of some new methods of the KDE2 +libraries, but as usual, this will bring us some interesting functionality. +KScribble will soon be able to open and save a whole range +of picture formats, as we will remove the restriction of operating only +on the png file format. + + + + + +Using KImageIO with KScribble + +When it comes to images, the Qt and KDE libraries offer a wide variety of +operations. Besides actual drawing routines, the libraries support a whole set +of image formats which they can read and write - all without any cost on our +view. The main class for these operations is QImageIO, +which has a support library by KDE: KImageIO. As a +preparation before we can make use of these nice methods, we have to add the +according library to KScribble: +libkimgio. + + Open +"Project""Options" +in &kdevelop; and add the line -lkimgio to the additional +libraries to link KScribble with. + + +Preparing the Document + +Now we can go on and apply our changes. First, we have to remove the +current restriction in the document class to only read and write +PNG files. Just replace "PNG" in the following methods with format, as given by +the openDocument() and saveDocument() +methods: + +In method KScribbleDoc::openDocument(): + + if(!buffer.load( filename, format )) + +In method KScribbleDoc:: saveDocument(): + + if(!buffer.save( filename, format )) + +Then we have a default behavior of these methods. For now we dont +have all available file formats. This will be our next task, together with +adapting the slots in KScribble that deliver us +filenames. + + + + +Registering File Formats + +To use KImageIO, we have to initialize the library +first. For this, we add a call for registerFormats() in our +main() function: + + +main.cpp: + +............ + KApplication app; + KImageIO::registerFormats(); + + if (app.isRestored()) +............ + +Note that this call is after the application is instanciated with +KApplication app - without the application instance, our program will +not run, as KImageIO then doent know on which +application to register the formats. The include file for this call will be +added to kscribble.h, as were going to use some of its methods in KScribbleApp: + + +kscribble.h: + +#include <kimgio.h> + + + +Opening Images + +Now that we can make use of KImageIO, we have to +apply the first change to the most important method of KScribbleApp: +openDocumentFile(). This method opens us any +document, but until now only with a filename. It just leaves out the +extension, as the format is not required by the document class by default. But +as we have changed that, we just need a format - and have to adapt the call for +KScribbleDoc::openDocument() in the method openDocumentFile(): + +kscribble.cpp: + + void KScribbleApp::openDocumentFile(const char* file) + { + ........... + + else + { +-> QString format=KImageIO::type(file); +-> if(!doc->openDocument(file,format)) + KMessageBox::error (this,i18n("Could not open document !"), i18n("Error !")); + addRecentFile(file); + } + ............ + } + +Of course, this works the same as using QString +format=QImageIO::imageFormat(file);. Here, KImageIO +delivers us the format of the image, and we can call the document to open the +file by filename and format. Another possiblity would be to detect the format +in the document class as well. + + + + +Setting File Filters with KImageIO + +Here, we are finishing our tutorial with the last section - we will adapt +the file dialogs of KScribble to make use of file filters. +For these, KImageIO provides nice methods to give us the +needed strings for all image file formats that are available for opening and +saving. The following implementation replaces the default file filter (which is +in fact none - you have to change your own applications file filter to your +mime type accordingly) with the pattern() method +of KImageIO: + + void KScribbleApp::slotFileOpen() + { + slotStatusMsg(i18n("Opening file...")); + +-> QString fileToOpen=KFileDialog::getOpenFileName(QDir::currentDirPath(), +-> KImageIO::pattern(KImageIO::Reading), this, i18n("Open File...")); + if(!fileToOpen.isEmpty()) + { + openDocumentFile(fileToOpen); + } + + slotStatusMsg(i18n("Ready.")); + } + +Here, the mode in pattern() is set to Reading - which +may differ from the patterns that are retrieved when set to writing. Now +we have finished opening files by its filename and format completely. What is +missing to complete this structure, is setting the patterns as well for saving a +file. For that, the slotFileSaveAs() is called, +which itself invokes the file dialog that retrieves a file name. There, we will +set the pattern mode to Writing: + +void KScribbleApp::slotFileSaveAs() +{ + slotStatusMsg(i18n("Saving file with a new filename...")); + +-> QString newName=KFileDialog::getSaveFileName(QDir::currentDirPath(), +-> KImageIO::pattern(KImageIO::Writing), this, i18n("Save as...")); + if(!newName.isEmpty()) + { + KScribbleView* m = (KScribbleView*)pWorkspace->activeWindow(); + if( m ) + { + KScribbleDoc* doc = m->getDocument(); + QString format=QFileInfo(newName).extension(); + format=format.upper(); + if(!doc->saveDocument(newName,format)) + { + KMessageBox::error (this,i18n("Could not save the current document !"), i18n("I/O Error !")); + return; + } + doc->changedViewList(); + setWndTitle(m); + } + } + slotStatusMsg(i18n("Ready.")); +} + + + + + +Adding Printing Functionality + +In this chapter we will show you how easy it is to implement printing +functions using Qt. Its actually just one line of code for us to +do here, but we will start understanding who is actually doing the printing +job. When the user presses the print button in KScribble or chooses "Print" from the "File" menu, the slotFilePrint() method is called in KScribbleApp. + + +This method detects which child window is currently active, and creates a printer +instance of the class QPrinter. Then it calls the widgets +printing method, KScribbleView::print(). Here, the framework +already contains the base implementation - which already shows you that for +printing you just have to use QPainter which then +draws on the printer. This method also calls the printing dialog. + +What we have to do here is to use QPainter methods +to draw the pixmap of the document connected to the view. As +QPainter already offers a whole set of methods +drawPixmap(), we will of course use one of them: + +void KScribbleView::print(QPrinter *pPrinter) +{ + if (pPrinter->setup(this)) + { + QPainter p; + p.begin(pPrinter); + + /////////////////////////////// + // TODO: add your printing code here +-> p.drawPixmap(0,0,doc->buffer); + /////////////////////////////// + p.end(); + } +} + +Here, we paint into the offset of the printer page at 0,0 with our buffer pixmap of the document. Thats all! + +You can just go ahead and test it - now you can print any graphics file that +KScribble is able to open. + +This is now the end of our tour through creating a KDE 2 application. You +can find the source package of KScribble complete with an extension that adds cut, copy, paste, and undo functions, as well as dragn drop here: + +$(KDEDIR)/share/apps/kdevelop/examples/kscribble-1.0.tar.gz + +The example tarball is locally installed and can be downloaded to your +home directory, where you can untar it and test it. After untarring the tarball with tar kscribble-1.0.tar.gz, load the project and call "Automake and autoconf" from the +"Build" menu in &kdevelop;, then call +"./configure" from the same menu. The configure +options are those of my installtion of the KDE 2 and Qt 2.1, so you have to +change them manually to match your installation path for these options. + +The appendix also contains the complete sourcecode for this package to read through online. + + + +Copyright + + KDevelop Copyright 1998,1999,2000 The KDevelop Team. + +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., 675 Mass Ave, Cambridge, MA 02139, USA. + + + + + + + + +KScribble-1.0 Example Sourcecode + + +Project Tarball + +The example tarball is locally installed and can be downloaded to your +home directory, where you can untar it and test it. +After untarring the tarball with tar +kscribble-1.0.tar.gz, load the project and call "Automake and +autoconf" from the +"Build" menu in &kdevelop;, then call +"./configure" from the same menu. The configure +options are those of my installtion of the KDE 2 and Qt 2.1, so you have to +change them manually to match your installation path for these options. + +$(KDEDIR)/share/apps/kdevelop/examples/kscribble-1.0.tar.gz + + + +main.cpp + + +/*************************************************************************** + main.cpp - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ +#include <kcmdlineargs.h> +#include <kaboutdata.h> +#include <klocale.h> + +#include "kscribble.h" + +static const char *description = + I18N_NOOP("KDE 2 example application"); + +static KCmdLineOptions options[] = +{ + { "+[File]", I18N_NOOP("image file to open"), 0 }, + { 0, 0, 0 } +}; + + +int main(int argc, char *argv[]) +{ + KAboutData aboutData( "kscribble", I18N_NOOP("KScribble"), + VERSION, description, KAboutData::License_GPL, + "(c) 2000, Ralf Nolden"); + aboutData.addAuthor("Ralf Nolden",0, "rnolden@kdevelop.de"); + KCmdLineArgs::init( argc, argv, &aboutData ); + KCmdLineArgs::addCmdLineOptions( options ); // Add our own options. + + KApplication app; + KImageIO::registerFormats(); + + if (app.isRestored()) + { + RESTORE(KScribbleApp); + } + else + { + KScribbleApp *kscribble = new KScribbleApp(); + kscribble->show(); + + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + if (args->count()) + for(int i=0;i<args->count();i++) + kscribble->openDocumentFile(args->arg(i)); + else + kscribble->openDocumentFile(); + + args->clear(); + } + + return app.exec(); +} + + + +kscribble.h + +/*************************************************************************** + kscribble.h - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef KSCRIBBLE_H +#define KSCRIBBLE_H + + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +// include files for Qt +#include <qstrlist.h> +#include <qworkspace.h> + +// include files for KDE +#include <kapp.h> +#include <ktmainwindow.h> +#include <kaccel.h> +#include <kimgio.h> + +// forward declaration of the KScribble classes +class KScribbleDoc; +class KScribbleView; + +/** + * The base class for KScribble application windows. It sets up the main + * window and reads the config file as well as providing a menubar, toolbar + * and statusbar. In initView(), your main view is created as the MDI child window manager. + * Child windows are created in createClient(), which gets a document instance as it's document to + * display whereby one document can have several views.The MDI child is an instance of KScribbleView, + * the document an instance of KScribbleDoc. + * KScribbleApp reimplements the methods that KTMainWindow provides for main window handling and supports + * full session management as well as keyboard accelerator configuration by using KAccel. + * @see KTMainWindow + * @see KApplication + * @see KConfig + * @see KAccel + * + * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team. + * @version KDevelop version 1.1 code generation + */ +class KScribbleApp : public KTMainWindow +{ + Q_OBJECT + + public: + /** construtor of KScribbleApp, calls all init functions to create the application. + * @see initMenuBar initToolBar + */ + KScribbleApp(); + ~KScribbleApp(); + /** enables menuentries/toolbar items + */ + void enableCommand(int id_); + /** disables menuentries/toolbar items + */ + void disableCommand(int id_); + /** opens a file specified by commandline option + */ + void openDocumentFile(const char *file=0); + + protected: + /** queryClose is called by KTMainWindow on each closeEvent of a window. Against the + * default implementation (only returns true), this overridden function retrieves all modified documents + * from the open document list and asks the user to select which files to save before exiting the application. + * @see KTMainWindow#queryClose + * @see KTMainWindow#closeEvent + */ + virtual bool queryClose(); + /** queryExit is called by KTMainWindow when the last window of the application is going to be closed + * during the closeEvent(). + * Against the default implementation that just returns true, this calls saveOptions() to save the + * settings of the last window's properties. + * @see KTMainWindow#queryExit + * @see KTMainWindow#closeEvent + */ + virtual bool queryExit(); + /** saves the window properties for each open window during session end to the session config file, + * including saving the currently opened file by a temporary filename provided by KApplication. + * @see KTMainWindow#saveProperties + */ + virtual void saveProperties(KConfig *_cfg); + /** reads the session config file and restores the application's state including the last + * opened files and documents by reading the temporary files saved by saveProperties() + * @see KTMainWindow#readProperties + */ + virtual void readProperties(KConfig *_cfg); + /** event filter to catch close events for MDI child windows and is installed in createClient() on every + * child window. Closing a window calls the eventFilter first which removes the view from the connected + * documents' view list. If the last view is going to be closed, the eventFilter() tests if the document + * is modified; if yes, it asks the user to save the document. If the document title contains "Untitled", + * slotFileSaveAs() gets called to get a save name and path. + */ + virtual bool eventFilter(QObject* object, QEvent* event); + /** creates a new child window. The document that will be connected to it + * has to be created before and the instances filled, with e.g. openDocument(). + * Then call createClient() to get a new MDI child window. + * @see KScribbleDoc#addView + * @see KScribbleDoc#openDocument + * @param doc pointer to the document instance that the view will + * be connected to. + */ + void createClient(KScribbleDoc* doc); + /** accepts drag events for images */ + virtual void dragEnterEvent( QDragEnterEvent* ); + /** accepts drops and opens a new document + * for each drop */ + virtual void dropEvent( QDropEvent* ); + + private slots: + /** sets the main application window title each time the active MDI child window changes. */ + void setWndTitle(QWidget*); + /** switch argument for slot selection by menu or toolbar ID */ + void commandCallback(int id_); + /** switch argument for Statusbar help entries on slot selection. Add your ID's help + * here for toolbars and menubar entries. */ + void statusCallback(int id_); + /** add a opened file to the recent file list and update recent file menu*/ + void addRecentFile(const QString &file); + /** clears the document in the actual view to reuse it as the new document */ + void slotFileNew(); + /** open a file and load it into the document*/ + void slotFileOpen(); + /** opens a file from the recent files menu */ + void slotFileOpenRecent(int id_); + /** save a document */ + void slotFileSave(); + /** save a document by a new filename*/ + void slotFileSaveAs(); + /** asks for saving if the file is modified, then closes the actual file and window*/ + void slotFileClose(); + /** print the actual file */ + void slotFilePrint(); + /** closes all documents and quits the application.*/ + void slotFileQuit(); + /** reverts the last user action for the active window */ + void slotEditUndo(); + /** put the marked text/object into the clipboard and remove + * it from the document + */ + void slotEditCut(); + /** put the marked text/object into the clipboard + */ + void slotEditCopy(); + /** paste the clipboard into the document + */ + void slotEditPaste(); + /** clears the current document */ + void slotEditClearAll(); + /** sets the pen width */ + void slotPenBrush(); + /** sets the pen color */ + void slotPenColor(); + /** toggles the toolbar + */ + void slotViewToolBar(); + /** toggles the statusbar + */ + void slotViewStatusBar(); + /** creates a new view for the document in the active child window and adds the new view to the + * list of views the document maintains. + */ + void slotWindowNewWindow(); + /** changes the statusbar contents for the standard label permanently, used to indicate current actions. + * @param text the text that is displayed in the statusbar + */ + void slotStatusMsg(const QString &text); + /** changes the status message of the whole statusbar for two seconds, then restores the last status. + * This is used to display statusbar messages that give information about actions for + * toolbar icons and menuentries. + * @param text the text that is displayed in the statusbar + */ + void slotStatusHelpMsg(const QString &text); + /** gets called when the window menu is activated; recreates the window menu with all opened window titles. */ + void windowMenuAboutToShow(); + /** activates the MDI child widget when it gets selected from the window menu. */ + void windowMenuActivated( int id ); + + private: + /** save general Options like all bar positions and status as well as the geometry and + * the recent file list to the configuration file + */ + void saveOptions(); + /** read general Options again and initialize all variables like the recent file list + */ + void readOptions(); + /** initKeyAccel creates the keyboard accelerator items for the available slots and changes the menu accelerators. + * @see KAccel + */ + void initKeyAccel(); + /** initMenuBar creates the menubar and inserts the menupopups as well as creating the helpMenu. + */ + void initMenuBar(); + /** this creates the toolbars. + */ + void initToolBar(); + /** sets up the statusbar for the main window by initialzing a statuslabel. + */ + void initStatusBar(); + + /** Creates the main view of the KTMainWindow instance and initializes the MDI view area including any needed + * connections. + */ + void initView(); + + /** contains the recently used filenames */ + QStrList recentFiles; + + /** the configuration object of the application */ + KConfig *config; + /** the key accelerator container */ + KAccel *keyAccel; + /** the recent file menu containing the last five opened files */ + QPopupMenu *pRecentFileMenu; + /** the file menu */ + QPopupMenu* pFileMenu; + /** the edit menu */ + QPopupMenu* pEditMenu; + /** the pen menu */ + QPopupMenu* pPenMenu; + /** the view menu */ + QPopupMenu* pViewMenu; + /** the window menu */ + QPopupMenu *pWindowMenu; + /** pWorkspace is the MDI frame widget that handles MDI child widgets. Inititalized in + * initView() + */ + QWorkspace *pWorkspace; + /** the printer instance */ + QPrinter *printer; + /** a counter that gets increased each time the user creates a new document with "File"->"New" */ + int untitledCount; + /** a list of all open documents. If the last window of a document gets closed, the installed eventFilter + * removes this document from the list. The document list is checked for modified documents when the user + * is about to close the application. */ + QList<KScribbleDoc> *pDocList; + +}; + +#endif // KSCRIBBLE_H + + + + +kscribble.cpp + +/*************************************************************************** + kscribble.cpp - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +// include files for QT +#include <qdir.h> +#include <qprinter.h> +#include <qvbox.h> +#include <qwhatsthis.h> +#include <qtooltip.h> +#include <qtoolbutton.h> +#include <qimage.h> +#include <qdragobject.h> + + +// include files for KDE +#include <kiconloader.h> +#include <kmessagebox.h> +#include <kfiledialog.h> +#include <kcolordlg.h> +#include <kmenubar.h> +#include <klocale.h> +#include <kconfig.h> + +// application specific includes +#include "kscribble.h" +#include "kscribbleview.h" +#include "kscribbledoc.h" +#include "resource.h" +#include "kpenbrushdlg.h" + + +KScribbleApp::KScribbleApp() +{ + config=kapp->config(); + printer = new QPrinter; + untitledCount=0; + pDocList = new QList<KScribbleDoc>(); + pDocList->setAutoDelete(true); + setAcceptDrops(true); + + /////////////////////////////////////////////////////////////////// + // call inits to invoke all other construction parts + initMenuBar(); + initToolBar(); + initStatusBar(); + initKeyAccel(); + initView(); + + readOptions(); + + /////////////////////////////////////////////////////////////////// + // disable menu and toolbar items at startup + disableCommand(ID_EDIT_UNDO); +} + +KScribbleApp::~KScribbleApp() +{ + delete printer; +} + +void KScribbleApp::initKeyAccel() +{ + keyAccel = new KAccel(this); + + // fileMenu accelerators + keyAccel->connectItem(KStdAccel::New, this, SLOT(slotFileNew())); + keyAccel->connectItem(KStdAccel::Open, this, SLOT(slotFileOpen())); + keyAccel->connectItem(KStdAccel::Save, this, SLOT(slotFileSave())); + keyAccel->connectItem(KStdAccel::Close, this, SLOT(slotFileClose())); + keyAccel->connectItem(KStdAccel::Print, this, SLOT(slotFilePrint())); + keyAccel->connectItem(KStdAccel::Quit, this, SLOT(slotFileQuit())); + // editMenu accelerators + keyAccel->connectItem(KStdAccel::Cut, this, SLOT(slotEditCut())); + keyAccel->connectItem(KStdAccel::Copy, this, SLOT(slotEditCopy())); + keyAccel->connectItem(KStdAccel::Paste, this, SLOT(slotEditPaste())); + + keyAccel->connectItem(KStdAccel::Help, this, SLOT(appHelpActivated())); + + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_NEW, KStdAccel::New); + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_OPEN, KStdAccel::Open); + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_SAVE, KStdAccel::Save); + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_CLOSE, KStdAccel::Close); + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_PRINT, KStdAccel::Print); + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_QUIT, KStdAccel::Quit); + + keyAccel->changeMenuAccel(pEditMenu, ID_EDIT_CUT, KStdAccel::Cut); + keyAccel->changeMenuAccel(pEditMenu, ID_EDIT_COPY, KStdAccel::Copy); + keyAccel->changeMenuAccel(pEditMenu, ID_EDIT_PASTE, KStdAccel::Paste); + + keyAccel->readSettings(); +} + +void KScribbleApp::initMenuBar() +{ + /////////////////////////////////////////////////////////////////// + // MENUBAR + pRecentFileMenu = new QPopupMenu(this); + connect(pRecentFileMenu, SIGNAL(activated(int)), SLOT(slotFileOpenRecent(int))); + + /////////////////////////////////////////////////////////////////// + // menuBar entry file-Menu + pFileMenu = new QPopupMenu(this); + pFileMenu->insertItem(BarIcon("filenew"), i18n("&New"), ID_FILE_NEW); + pFileMenu->insertItem(BarIcon("fileopen"), i18n("&Open..."), ID_FILE_OPEN); + pFileMenu->insertItem(i18n("Open &recent"), pRecentFileMenu, ID_FILE_OPEN_RECENT); + + pFileMenu->insertItem(i18n("&Close"), ID_FILE_CLOSE); + pFileMenu->insertSeparator(); + pFileMenu->insertItem(BarIcon("filefloppy") ,i18n("&Save"), ID_FILE_SAVE); + pFileMenu->insertItem(i18n("Save &As..."), ID_FILE_SAVE_AS); + pFileMenu->insertSeparator(); + pFileMenu->insertItem(BarIcon("fileprint"), i18n("&Print..."), ID_FILE_PRINT); + pFileMenu->insertSeparator(); + pFileMenu->insertItem(i18n("E&xit"), ID_FILE_QUIT); + + /////////////////////////////////////////////////////////////////// + // menuBar entry edit-Menu + pEditMenu = new QPopupMenu(this); + pEditMenu->insertItem(BarIcon("undo"), i18n("&Undo"), ID_EDIT_UNDO); + pEditMenu->insertSeparator(); + pEditMenu->insertItem(BarIcon("editcut"), i18n("Cu&t"), ID_EDIT_CUT); + pEditMenu->insertItem(BarIcon("editcopy"), i18n("&Copy"), ID_EDIT_COPY); + pEditMenu->insertItem(BarIcon("editpaste"), i18n("&Paste"), ID_EDIT_PASTE); + pEditMenu->insertItem(BarIcon("delete"),i18n("&Clear All"), ID_EDIT_CLEAR_ALL); + + /////////////////////////////////////////////////////////////////// + // menuBar entry pen-Menu + pPenMenu = new QPopupMenu(); + pPenMenu->insertItem(i18n("&Color"), ID_PEN_COLOR); + pPenMenu->insertItem(i18n("&Brush"), ID_PEN_BRUSH); + + /////////////////////////////////////////////////////////////////// + // menuBar entry view-Menu + pViewMenu = new QPopupMenu(this); + pViewMenu->setCheckable(true); + pViewMenu->insertItem(i18n("&Toolbar"), ID_VIEW_TOOLBAR); + pViewMenu->insertItem(i18n("&Statusbar"), ID_VIEW_STATUSBAR); + + /////////////////////////////////////////////////////////////////// + // menuBar entry window-Menu + pWindowMenu = new QPopupMenu(this); + pWindowMenu->setCheckable(true); + + + /////////////////////////////////////////////////////////////////// + // menuBar entry helpMenu + QPopupMenu* pHelpMenu = helpMenu(i18n("KScribble" VERSION "\n\n(c) 2000 by\n" + "Ralf Nolden\nRalf.Nolden@post.rwth-aachen.de")); + + /////////////////////////////////////////////////////////////////// + // MENUBAR CONFIGURATION + // insert your popup menus with the according menubar entries in the order + // they will appear later from left to right + menuBar()->insertItem(i18n("&File"), pFileMenu); + menuBar()->insertItem(i18n("&Edit"), pEditMenu); + menuBar()->insertItem(i18n("&Pen"), pPenMenu); + menuBar()->insertItem(i18n("&View"), pViewMenu); + menuBar()->insertItem(i18n("&Window"), pWindowMenu ); + menuBar()->insertItem(i18n("&Help"), pHelpMenu); + + /////////////////////////////////////////////////////////////////// + // CONNECT THE MENU SLOTS WITH SIGNALS + // for execution slots and statusbar messages + connect(pFileMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); + connect(pFileMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); + + connect(pEditMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); + connect(pEditMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); + + connect(pPenMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); + connect(pPenMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); + + connect(pViewMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); + connect(pViewMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); + + connect(pWindowMenu, SIGNAL(aboutToShow() ), SLOT( windowMenuAboutToShow() ) ); + connect(pWindowMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); + connect(pWindowMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); + +} + +void KScribbleApp::initToolBar() +{ + + /////////////////////////////////////////////////////////////////// + // TOOLBAR + toolBar()->insertButton(BarIcon("filenew"), ID_FILE_NEW, true, i18n("New File")); + toolBar()->insertButton(BarIcon("fileopen"), ID_FILE_OPEN, true, i18n("Open File")); + toolBar()->insertButton(BarIcon("filefloppy"), ID_FILE_SAVE, true, i18n("Save File")); + toolBar()->insertButton(BarIcon("fileprint"), ID_FILE_PRINT, true, i18n("Print")); + toolBar()->insertSeparator(); + toolBar()->insertButton(BarIcon("editcut"), ID_EDIT_CUT, true, i18n("Cut")); + toolBar()->insertButton(BarIcon("editcopy"), ID_EDIT_COPY, true, i18n("Copy")); + toolBar()->insertButton(BarIcon("editpaste"), ID_EDIT_PASTE, true, i18n("Paste")); + toolBar()->insertSeparator(); + toolBar()->insertButton(BarIcon("pencolor"), ID_PEN_COLOR, true, i18n("Color") ); + toolBar()->insertButton(BarIcon("penwidth"), ID_PEN_BRUSH, true, i18n("Width") ); + toolBar()->insertSeparator(); + toolBar()->insertButton(BarIcon("help"), ID_HELP_CONTENTS, SIGNAL(clicked()), + this, SLOT(appHelpActivated()), true,i18n("Help")); + + QToolButton *btnwhat = QWhatsThis::whatsThisButton(toolBar()); + QToolTip::add(btnwhat, i18n("What's this...?")); + toolBar()->insertWidget(ID_HELP_WHATS_THIS, btnwhat->sizeHint().width(), btnwhat); + + /////////////////////////////////////////////////////////////////// + // INSERT YOUR APPLICATION SPECIFIC TOOLBARS HERE WITH toolBar(n) + + + /////////////////////////////////////////////////////////////////// + // CONNECT THE TOOLBAR SLOTS WITH SIGNALS - add new created toolbars by their according number + // connect for invoking the slot actions + connect(toolBar(), SIGNAL(clicked(int)), SLOT(commandCallback(int))); + // connect for the status help on holing icons pressed with the mouse button + connect(toolBar(), SIGNAL(pressed(int)), SLOT(statusCallback(int))); + +} + +void KScribbleApp::initStatusBar() +{ + /////////////////////////////////////////////////////////////////// + // STATUSBAR + // TODO: add your own items you need for displaying current application status. + statusBar()->insertItem(i18n("Ready."), ID_STATUS_MSG); +} + + +void KScribbleApp::initView() +{ + //////////////////////////////////////////////////////////////////// + // here the main view of the KTMainWindow is created by a background box and + // the QWorkspace instance for MDI view. + QVBox* view_back = new QVBox( this ); + view_back->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken ); + pWorkspace = new QWorkspace( view_back ); + connect(pWorkspace, SIGNAL(windowActivated(QWidget*)), this, SLOT(setWndTitle(QWidget*))); + setView(view_back); +} + +void KScribbleApp::setWndTitle(QWidget*){ + setCaption(pWorkspace->activeWindow()->caption()); +} + +void KScribbleApp::enableCommand(int id_) +{ + /////////////////////////////////////////////////////////////////// + // enable menu and toolbar functions by their ID's + menuBar()->setItemEnabled(id_, true); + toolBar()->setItemEnabled(id_, true); +} + +void KScribbleApp::disableCommand(int id_) +{ + /////////////////////////////////////////////////////////////////// + // disable menu and toolbar functions by their ID's + menuBar()->setItemEnabled(id_, false); + toolBar()->setItemEnabled(id_, false); +} + +void KScribbleApp::addRecentFile(const QString &file) +{ + if(recentFiles.contains(file)) + return; // it's already there + + if( recentFiles.count() < 5) + recentFiles.prepend(file); + else{ + recentFiles.remove(recentFiles.last()); + recentFiles.prepend(file); + } + + pRecentFileMenu->clear(); + + for ( int i =0 ; i < (int)recentFiles.count(); i++){ + pRecentFileMenu->insertItem(recentFiles.at(i)); + } + +} + +void KScribbleApp::createClient(KScribbleDoc* doc) +{ + KScribbleView* w = new KScribbleView(doc, pWorkspace,0,WDestructiveClose); + w->installEventFilter(this); + doc->addView(w); + w->setIcon(kapp->miniIcon()); + if ( pWorkspace->windowList().isEmpty() ) // show the very first window in maximized mode + w->showMaximized(); + else + w->show(); +} + +void KScribbleApp::openDocumentFile(const char* file) +{ + slotStatusMsg(i18n("Opening file...")); + KScribbleDoc* doc; + // check, if document already open. If yes, set the focus to the first view + for(doc=pDocList->first(); doc > 0; doc=pDocList->next()) + { + if(doc->pathName()==file) + { + KScribbleView* view=doc->firstView(); + view->setFocus(); + return; + } + } + doc = new KScribbleDoc(); + pDocList->append(doc); + doc->newDocument(); + // Creates an untitled window if file is 0 + if(!file) + { + untitledCount+=1; + QString fileName=QString(i18n("Untitled%1")).arg(untitledCount); + doc->setPathName(fileName); + doc->setTitle(fileName); + } + // Open the file + else + { + QString format=QImageIO::imageFormat(file); + if(!doc->openDocument(file,format)) + KMessageBox::error (this,i18n("Could not open document !"), i18n("Error !")); + addRecentFile(file); + } + // create the window + createClient(doc); + + slotStatusMsg(i18n("Ready.")); +} + + +void KScribbleApp::saveOptions() +{ + config->setGroup("General Options"); + config->writeEntry("Geometry", size()); + config->writeEntry("Show Toolbar", toolBar()->isVisible()); + config->writeEntry("Show Statusbar",statusBar()->isVisible()); + config->writeEntry("ToolBarPos", (int) toolBar()->barPos()); + config->writeEntry("Recent Files", recentFiles); +} + + +void KScribbleApp::readOptions() +{ + + config->setGroup("General Options"); + + // bar status settings + bool bViewToolbar = config->readBoolEntry("Show Toolbar", true); + menuBar()->setItemChecked(ID_VIEW_TOOLBAR, bViewToolbar); + if(!bViewToolbar) + { + enableToolBar(KToolBar::Hide); + } + + bool bViewStatusbar = config->readBoolEntry("Show Statusbar", true); + menuBar()->setItemChecked(ID_VIEW_STATUSBAR, bViewStatusbar); + if(!bViewStatusbar) + { + enableStatusBar(KStatusBar::Hide); + } + + // bar position settings + KToolBar::BarPosition toolBarPos; + toolBarPos=(KToolBar::BarPosition) config->readNumEntry("ToolBarPos", KToolBar::Top); + toolBar()->setBarPos(toolBarPos); + + // initialize the recent file list + config->readListEntry("Recent Files",recentFiles); + + for (int i=0; i < (int) recentFiles.count(); i++) + { + pRecentFileMenu->insertItem(recentFiles.at(i)); + } + + QSize size=config->readSizeEntry("Geometry"); + if(!size.isEmpty()) + { + resize(size); + } + else + resize(400,350); + +} + +void KScribbleApp::saveProperties(KConfig *_cfg) +{ + +} + + +void KScribbleApp::readProperties(KConfig* _cfg) +{ +} + +bool KScribbleApp::queryClose() +{ + + QStringList saveFiles; + KScribbleDoc* doc; + if(pDocList->isEmpty()) + return true; + + for(doc=pDocList->first(); doc!=0;doc=pDocList->next()){ + if(doc->isModified()) + saveFiles.append(doc->title()); + } + if(saveFiles.isEmpty()) + return true; + + switch (KMessageBox::questionYesNoList(this, + i18n("One or more documents have been modified.\nSave changes before exiting?"),saveFiles)) + { + case KMessageBox::Yes: + for(doc=pDocList->first(); doc!=0;doc=pDocList->next()){ + if(doc->title().contains(i18n("Untitled"))) + slotFileSaveAs(); + else + { + if(!doc->saveDocument(doc->pathName())){ + KMessageBox::error (this,i18n("Could not save the current document !"), i18n("I/O Error !")); + return false; + } + } + } + return true; + case KMessageBox::No: + default: + return true; + } +} + +bool KScribbleApp::queryExit() +{ + saveOptions(); + return true; +} + +bool KScribbleApp::eventFilter(QObject* object, QEvent* event){ + if(event->type() == QEvent::Close) + { + QCloseEvent* e=(QCloseEvent*)event; + KScribbleView* pView=(KScribbleView*)object; + KScribbleDoc* pDoc=pView->getDocument(); + if(pDoc->canCloseFrame(pView)) + { + pDoc->removeView(pView); + if(!pDoc->firstView()) + pDocList->remove(pDoc); + + e->accept(); + ////////////// + if(pWorkspace->windowList().count()==1) + setPlainCaption(kapp->caption()); + else + setCaption(pWorkspace->activeWindow()->caption()); + ////////////// + } + else + e->ignore(); + } + return QWidget::eventFilter( object, event ); // standard event processing +} + +///////////////////////////////////////////////////////////////////// +// SLOT IMPLEMENTATION +///////////////////////////////////////////////////////////////////// + + +void KScribbleApp::slotFileNew() +{ + slotStatusMsg(i18n("Creating new document...")); + + openDocumentFile(); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileOpen() +{ + slotStatusMsg(i18n("Opening file...")); + + QString fileToOpen=KFileDialog::getOpenFileName(QDir::currentDirPath(), + KImageIO::pattern(KImageIO::Reading), this, i18n("Open File...")); + if(!fileToOpen.isEmpty()) + { + openDocumentFile(fileToOpen); + } + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileOpenRecent(int id_) +{ + slotStatusMsg(i18n("Opening file...")); + + openDocumentFile(pRecentFileMenu->text(id_)); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileSave() +{ + slotStatusMsg(i18n("Saving file...")); + KScribbleView* m = (KScribbleView*)pWorkspace->activeWindow(); + if( m ) + { + KScribbleDoc* doc = m->getDocument(); + if(doc->title().contains(i18n("Untitled"))) + slotFileSaveAs(); + else + if(!doc->saveDocument(doc->pathName())) + KMessageBox::error (this,i18n("Could not save the current document !"), i18n("I/O Error !")); + } + + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileSaveAs() +{ + slotStatusMsg(i18n("Saving file with a new filename...")); + + QString newName=KFileDialog::getSaveFileName(QDir::currentDirPath(), + KImageIO::pattern(KImageIO::Writing), this, i18n("Save as...")); + if(!newName.isEmpty()) + { + KScribbleView* m = (KScribbleView*)pWorkspace->activeWindow(); + if( m ) + { + KScribbleDoc* doc = m->getDocument(); + QString format=QFileInfo(newName).extension(); + format=format.upper(); + if(!doc->saveDocument(newName,format)) + { + KMessageBox::error (this,i18n("Could not save the current document !"), i18n("I/O Error !")); + return; + } + doc->changedViewList(); + setWndTitle(m); + } + + } + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileClose() +{ + slotStatusMsg(i18n("Closing file...")); + + KScribbleView* m = (KScribbleView*)pWorkspace->activeWindow(); + if( m ) + { + KScribbleDoc* doc=m->getDocument(); + doc->closeDocument(); + } + + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFilePrint() +{ + slotStatusMsg(i18n("Printing...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ) + m->print( printer ); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileQuit() +{ + slotStatusMsg(i18n("Exiting...")); + saveOptions(); + // close the first window, the list makes the next one the first again. + // This ensures that queryClose() is called on each window to ask for closing + KTMainWindow* w; + if(memberList) + { + for(w=memberList->first(); w!=0; w=memberList->first()) + { + // only close the window if the closeEvent is accepted. If the user + // presses Cancel on the saveModified() dialog, + // the window and the application stay open. + if(!w->close()) + break; + } + } + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotEditUndo() +{ + slotStatusMsg(i18n("Reverting last action...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ) +// m->undo(); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotEditCut() +{ + slotStatusMsg(i18n("Cutting selection...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ) + m->cutSelection(); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotEditCopy() +{ + slotStatusMsg(i18n("Copying selection to clipboard...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ) + m->copySelection(); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotEditPaste() +{ + slotStatusMsg(i18n("Inserting clipboard contents...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ) + m->pasteSelection(); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotEditClearAll() +{ + slotStatusMsg(i18n("Clearing the document contents...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ){ + KScribbleDoc* pDoc = m->getDocument(); + pDoc->editClearAll(); + } + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotPenBrush() +{ + slotStatusMsg(i18n("Setting brush width...")); + + // get one window with document for a current pen width + QWidgetList windows = pWorkspace->windowList(); + KScribbleView* m = (KScribbleView*)windows.at(0); + KScribbleDoc* pDoc = m->getDocument(); + int curr_width=pDoc->penWidth(); + + // create the dialog, get the new width and set the pen width for all documents + KPenBrushDlg* dlg= new KPenBrushDlg(curr_width,this); + if(dlg->exec()){ + int width=dlg->width(); + for ( int i = 0; i < int(windows.count()); ++i ) + { + m = (KScribbleView*)windows.at(i); + if ( m ) + { + pDoc = m->getDocument(); + pDoc->setPenWidth(width); + } + } + } + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotPenColor() +{ + slotStatusMsg(i18n("Selecting pen color...")); + + QColor myColor; + int result = KColorDialog::getColor( myColor, this ); + if ( result == KColorDialog::Accepted ) + { + QWidgetList windows = pWorkspace->windowList(); + KScribbleDoc* pDoc; + KScribbleView* m; + for ( int i = 0; i < int(windows.count()); ++i ) + { + m = (KScribbleView*)windows.at(i); + if ( m ) + { + pDoc = m->getDocument(); + pDoc->setPenColor(myColor); + } + } + } + slotStatusMsg(i18n("Ready.")); +} + + +void KScribbleApp::slotViewToolBar() +{ + slotStatusMsg(i18n("Toggle the toolbar...")); + /////////////////////////////////////////////////////////////////// + // turn Toolbar on or off + if( menuBar()->isItemChecked(ID_VIEW_TOOLBAR)) + { + menuBar()->setItemChecked(ID_VIEW_TOOLBAR, false); + enableToolBar(KToolBar::Hide); + } + else + { + menuBar()->setItemChecked(ID_VIEW_TOOLBAR, true); + enableToolBar(KToolBar::Show); + } + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotViewStatusBar() +{ + slotStatusMsg(i18n("Toggle the statusbar...")); + /////////////////////////////////////////////////////////////////// + //turn Statusbar on or off + if( menuBar()->isItemChecked(ID_VIEW_STATUSBAR)) + { + menuBar()->setItemChecked(ID_VIEW_STATUSBAR, false); + enableStatusBar(KStatusBar::Hide); + } + else + { + menuBar()->setItemChecked(ID_VIEW_STATUSBAR, true); + enableStatusBar(KStatusBar::Show); + } + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotWindowNewWindow() +{ + slotStatusMsg(i18n("Opening a new application window...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ){ + KScribbleDoc* doc = m->getDocument(); + createClient(doc); + } + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotStatusMsg(const QString &text) +{ + /////////////////////////////////////////////////////////////////// + // change status message permanently + statusBar()->clear(); + statusBar()->changeItem(text, ID_STATUS_MSG); +} + + +void KScribbleApp::slotStatusHelpMsg(const QString &text) +{ + /////////////////////////////////////////////////////////////////// + // change status message of whole statusbar temporary (text, msec) + statusBar()->message(text, 2000); +} + +void KScribbleApp::windowMenuAboutToShow() +{ + pWindowMenu->clear(); + + pWindowMenu->insertItem(i18n("&New Window"), ID_WINDOW_NEW_WINDOW); + pWindowMenu->insertItem(i18n("&Cascade"), + pWorkspace, SLOT(cascade() ),0 , ID_WINDOW_CASCADE ); + pWindowMenu->insertItem(i18n("&Tile"), + pWorkspace, SLOT(tile() ),0 , ID_WINDOW_TILE ); + + if ( pWorkspace->windowList().isEmpty() ) { + disableCommand(ID_WINDOW_NEW_WINDOW); + disableCommand(ID_WINDOW_CASCADE); + disableCommand(ID_WINDOW_TILE); + } + + pWindowMenu->insertSeparator(); + + QWidgetList windows = pWorkspace->windowList(); + for ( int i = 0; i < int(windows.count()); ++i ) { + int id = pWindowMenu->insertItem(QString("&%1 ").arg(i+1)+windows.at(i)->caption(), + this, SLOT( windowMenuActivated( int ) ) ); + pWindowMenu->setItemParameter( id, i ); + pWindowMenu->setItemChecked( id, pWorkspace->activeWindow() == windows.at(i) ); + } +} + +void KScribbleApp::windowMenuActivated( int id ) +{ + QWidget* w = pWorkspace->windowList().at( id ); + if ( w ) + w->setFocus(); +} + + +void KScribbleApp::commandCallback(int id_) +{ + switch (id_) + { + case ID_FILE_NEW: + slotFileNew(); + break; + + case ID_FILE_OPEN: + slotFileOpen(); + break; + + case ID_FILE_SAVE: + slotFileSave(); + break; + + case ID_FILE_SAVE_AS: + slotFileSaveAs(); + break; + + case ID_FILE_CLOSE: + slotFileClose(); + break; + + case ID_FILE_PRINT: + slotFilePrint(); + break; + + case ID_FILE_QUIT: + slotFileQuit(); + break; + + case ID_EDIT_CUT: + slotEditCut(); + break; + + case ID_EDIT_COPY: + slotEditCopy(); + break; + + case ID_EDIT_PASTE: + slotEditPaste(); + break; + + case ID_EDIT_CLEAR_ALL: + slotEditClearAll(); + break; + + case ID_PEN_BRUSH: + slotPenBrush(); + break; + + case ID_PEN_COLOR: + slotPenColor(); + break; + + case ID_VIEW_TOOLBAR: + slotViewToolBar(); + break; + + case ID_VIEW_STATUSBAR: + slotViewStatusBar(); + break; + + case ID_WINDOW_NEW_WINDOW: + slotWindowNewWindow(); + break; + + default: + break; + } +} + +void KScribbleApp::statusCallback(int id_) +{ + switch (id_) + { + case ID_FILE_NEW: + slotStatusHelpMsg(i18n("Creates a new document")); + break; + + case ID_FILE_OPEN: + slotStatusHelpMsg(i18n("Opens an existing document")); + break; + + case ID_FILE_OPEN_RECENT: + slotStatusHelpMsg(i18n("Opens a recently used file")); + break; + + case ID_FILE_SAVE: + slotStatusHelpMsg(i18n("Saves the currently active document")); + break; + + case ID_FILE_SAVE_AS: + slotStatusHelpMsg(i18n("Saves the currently active document as under a new filename")); + break; + + case ID_FILE_CLOSE: + slotStatusHelpMsg(i18n("Closes the currently active document")); + break; + + case ID_FILE_PRINT: + slotStatusHelpMsg(i18n("Prints out the actual document")); + break; + + case ID_FILE_QUIT: + slotStatusHelpMsg(i18n("Quits the application")); + break; + + case ID_EDIT_UNDO: + slotStatusHelpMsg(i18n("Reverts the last editing action")); + break; + + case ID_EDIT_CUT: + slotStatusHelpMsg(i18n("Cuts the selected section and puts it to the clipboard")); + break; + + case ID_EDIT_COPY: + slotStatusHelpMsg(i18n("Copies the selected section to the clipboard")); + break; + + case ID_EDIT_PASTE: + slotStatusHelpMsg(i18n("Pastes the clipboard contents to actual position")); + break; + + case ID_EDIT_CLEAR_ALL: + slotStatusHelpMsg(i18n("Clears the document contents")); + break; + + case ID_PEN_BRUSH: + slotStatusHelpMsg(i18n("Sets the pen width")); + break; + + case ID_PEN_COLOR: + slotStatusHelpMsg(i18n("Sets the current pen color")); + break; + + case ID_VIEW_TOOLBAR: + slotStatusHelpMsg(i18n("Enables/disables the toolbar")); + break; + + case ID_VIEW_STATUSBAR: + slotStatusHelpMsg(i18n("Enables/disables the statusbar")); + break; + + case ID_WINDOW_NEW_WINDOW: + slotStatusHelpMsg(i18n("Opens a new view for the current document")); + break; + + case ID_WINDOW_CASCADE: + slotStatusHelpMsg(i18n("Cascades all windows")); + break; + + case ID_WINDOW_TILE: + slotStatusHelpMsg(i18n("Tiles all windows")); + break; + + default: + break; + } +} +/** accepts drops and opens a new document +for each drop */ +void KScribbleApp::dropEvent( QDropEvent* e){ + + QImage img; + if ( QImageDrag::decode(e, img) ) + { + KScribbleDoc* doc = new KScribbleDoc(); + untitledCount+=1; + QString fileName=QString(i18n("Untitled%1")).arg(untitledCount); + doc->setPathName(fileName); + doc->setTitle(fileName); + doc->newDocument(); + pDocList->append(doc); + KPixmap tmp; + tmp.resize(img.size()); + tmp.convertFromImage(img); + doc->setPixmap(tmp); + doc->resizeDocument(tmp.size()); + doc->setModified(); + createClient(doc); + } +} +/** accepts drag events for images */ +void KScribbleApp::dragEnterEvent( QDragEnterEvent* e){ + e->accept(QImageDrag::canDecode(e)); +} + + + + +kscribbledoc.h + +/*************************************************************************** + kscribbledoc.h - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef KSCRIBBLEDOC_H +#define KSCRIBBLEDOC_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +// include files for QT +#include <qobject.h> +#include <qstring.h> +#include <qlist.h> + +#include <qsize.h> +#include <qpen.h> +#include <qpoint.h> +//#include <qpixmap.h> +#include <qpointarray.h> + +#include <kpixmap.h> + + +// forward declaration of the KScribble classes +class KScribbleView; + +/** KScribbleDoc provides a document object for a document-view model. + * + * The KScribbleDoc class provides a document object that can be used in conjunction with the classes + * KScribbleApp and KScribbleView to create a document-view model for MDI (Multiple Document Interface) + * KDE 2 applications based on KApplication and KTMainWindow as main classes and QWorkspace as MDI manager widget. + * Thereby, the document object is created by the KScribbleApp instance (and kept in a document list) and contains + * the document structure with the according methods for manipulating the document + * data by KScribbleView objects. Also, KScribbleDoc contains the methods for serialization of the document data + * from and to files. + * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team. + * @version KDevelop version 1.1 code generation + */ +class KScribbleDoc : public QObject +{ + Q_OBJECT + + friend KScribbleView; + + public: + /** Constructor for the fileclass of the application */ + KScribbleDoc(); + /** Destructor for the fileclass of the application */ + ~KScribbleDoc(); + + /** adds a view to the document which represents the document contents. Usually this is your main view. */ + void addView(KScribbleView *view); + /** removes a view from the list of currently connected views */ + void removeView(KScribbleView *view); + /** gets called if a view is removed or added */ + void changedViewList(); + /** returns the first view instance */ + KScribbleView* firstView(){ return pViewList->first(); }; + /** returns true, if the requested view is the last view of the document */ + bool isLastView(); + /** This method gets called when the user is about to close a frame window. It checks, if more than one view + * is connected to the document (then the frame can be closed), if pFrame is the last view and the document is + * modified, the user gets asked if he wants to save the document. + */ + bool canCloseFrame(KScribbleView* pFrame); + /** sets the modified flag for the document after a modifying action on the view connected to the document.*/ + void setModified(bool _m=true){ modified=_m; }; + /** returns if the document is modified or not. Use this to determine if your document needs + * saving by the user on closing. + */ + bool isModified(){ return modified; }; + /** deletes the document's contents */ + void deleteContents(); + /** initializes the document generally */ + bool newDocument(); + /** closes the acutal document */ + void closeDocument(); + /** loads the document by filename and format and emits the updateViews() signal */ + bool openDocument(const QString &filename, const char *format=0); + /** saves the document under filename and format.*/ + bool saveDocument(const QString &filename, const char *format=0); + /** sets the path to the file connected with the document */ + void setPathName(const QString &name); + /** returns the pathname of the current document file*/ + const QString& pathName() const; + + /** sets the filename of the document */ + void setTitle(const QString &title); + /** returns the title of the document */ + const QString& title() const; + /** get the current Pen */ + const QPen currentPen(){ return pen;}; + /** returns the pen width */ + const int penWidth() { return pen.width(); } + /** returns the pen color */ + const QColor penColor(){ return pen.color(); } + /** sets the pen width */ + void setPenWidth( int w ){ pen.setWidth( w ); } + /** sets the pen color */ + void setPenColor( const QColor &c ){ pen.setColor( c ); } + /** sets the pen style by a second toolbar */ + void setPenStyle( PenStyle s){ pen.setStyle(s);} + /** clears the document contents */ + void editClearAll(); + + /** get the document size */ + const QSize docSize(){ return size;}; + /** sets the pixmap contents. Used by KScribbleApp + to create a new document by drop events */ + void setPixmap(KPixmap pix) { buffer=pix;}; + void resizeDocument(QSize m_size) { size=m_size; }; + public slots: + /** calls repaint() on all views connected to the document object and is called by the view by + * which the document has been changed. + * As this view normally repaints itself, it is excluded from the paintEvent. + */ + void updateAllViews(KScribbleView *sender); + + protected: + + QPen pen; + QPointArray polyline; + KPixmap buffer; + + private: + /** the modified flag of the current document */ + bool modified; + QString m_title; + QString m_filename; + /** the list of the views currently connected to the document */ + QList<KScribbleView> *pViewList; + QSize size; +}; + +#endif // KSCRIBBLEDOC_H + + + + + +kscribbledoc.cpp + +/*************************************************************************** + kscribbledoc.cpp - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +// include files for Qt +#include <qdir.h> +#include <qfileinfo.h> +#include <qwidget.h> + +// include files for KDE +#include <klocale.h> +#include <kmessagebox.h> +#include <kfiledialog.h> + +// application specific includes +#include "kscribbledoc.h" +#include "kscribble.h" +#include "kscribbleview.h" + + +KScribbleDoc::KScribbleDoc() +{ + pViewList = new QList<KScribbleView>; + pViewList->setAutoDelete(false); +} + +KScribbleDoc::~KScribbleDoc() +{ + delete pViewList; +} + +void KScribbleDoc::addView(KScribbleView *view) +{ + pViewList->append(view); + changedViewList(); +} + +void KScribbleDoc::removeView(KScribbleView *view) +{ + pViewList->remove(view); + if(!pViewList->isEmpty()) + changedViewList(); + else + deleteContents(); +} + +void KScribbleDoc::changedViewList(){ + + KScribbleView *w; + if((int)pViewList->count() == 1){ + w=pViewList->first(); + w->setCaption(m_title); + } + else{ + int i; + for( i=1,w=pViewList->first(); w!=0; i++, w=pViewList->next()) + w->setCaption(QString(m_title+":%1").arg(i)); + } +} + +bool KScribbleDoc::isLastView() { + return ((int) pViewList->count() == 1); +} + + +void KScribbleDoc::updateAllViews(KScribbleView *sender) +{ + KScribbleView *w; + for(w=pViewList->first(); w!=0; w=pViewList->next()) + { + w->update(sender); + } + +} + +void KScribbleDoc::setPathName(const QString &name) +{ + m_filename=name; + m_title=QFileInfo(name).fileName(); +} + +const QString& KScribbleDoc::pathName() const +{ + return m_filename; +} + +void KScribbleDoc::setTitle(const QString &title) +{ + m_title=title; +} + +const QString &KScribbleDoc::title() const +{ + return m_title; +} + + +void KScribbleDoc::closeDocument() +{ + KScribbleView *w; + if(!isLastView()) + { + for(w=pViewList->first(); w!=0; w=pViewList->next()) + { + if(!w->close()) + break; + } + } + if(isLastView()) + { + w=pViewList->first(); + w->close(); + } +} + +bool KScribbleDoc::newDocument() +{ + ///////////////////////////////////////////////// + // TODO: Add your document initialization code here + size=QSize(300,200 ); + pen=QPen( Qt::black, 3 ); + polyline=QPointArray(3); + buffer.resize(size); + buffer.fill( Qt::white ); + ///////////////////////////////////////////////// + modified=false; + return true; +} + +bool KScribbleDoc::openDocument(const QString &filename, const char *format /*=0*/) +{ + + QFile f( filename ); +// if ( !f.open( IO_ReadOnly ) ) +// return false; + ///////////////////////////////////////////////// + // TODO: Add your document opening code here + if(!buffer.load( filename, format )) + return false; + size=buffer.size(); + ///////////////////////////////////////////////// +// f.close(); + + modified=false; + m_filename=filename; + m_title=QFileInfo(f).fileName(); + return true; +} + +bool KScribbleDoc::saveDocument(const QString &filename, const char *format /*=0*/) +{ + QFile f( filename ); +// if ( !f.open( IO_WriteOnly ) ) +// return false; + + ///////////////////////////////////////////////// + // TODO: Add your document saving code here + if(!buffer.save( filename, format )) + return false; + ///////////////////////////////////////////////// + +// f.close(); + + modified=false; + m_filename=filename; + m_title=QFileInfo(f).fileName(); + return true; +} + +void KScribbleDoc::deleteContents() +{ + ///////////////////////////////////////////////// + // TODO: Add implementation to delete the document contents + buffer.fill( Qt::white ); + ///////////////////////////////////////////////// + +} + +bool KScribbleDoc::canCloseFrame(KScribbleView* pFrame) +{ + if(!isLastView()) + return true; + + bool ret=false; + if(isModified()) + { + QString saveName; + switch(KMessageBox::warningYesNoCancel(pFrame, i18n("The current file has been modified.\n" + "Do you want to save it?"),title())) + { + case KMessageBox::Yes: + if(title().contains(i18n("Untitled"))) + { + saveName=KFileDialog::getSaveFileName(QDir::currentDirPath(), + i18n("*|All files"), pFrame, i18n("Save as...")); + if(saveName.isEmpty()) + return false; + } + else + saveName=pathName(); + + if(!saveDocument(saveName)) + { + switch(KMessageBox::warningYesNo(pFrame,i18n("Could not save the current document !\n" + "Close anyway ?"), i18n("I/O Error !"))) + { + case KMessageBox::Yes: + ret=true; + case KMessageBox::No: + ret=false; + } + } + else + ret=true; + break; + case KMessageBox::No: + ret=true; + break; + case KMessageBox::Cancel: + default: + ret=false; + break; + } + } + else + ret=true; + + return ret; +} + +void KScribbleDoc::editClearAll() +{ + deleteContents(); + setModified(); + updateAllViews(0); +} + + + + + +kscribbleview.h + +/*************************************************************************** + kscribbleview.h - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef KSCRIBBLEVIEW_H +#define KSCRIBBLEVIEW_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +// include files for Qt +#include <qscrollview.h> +#include <kpixmap.h> + +class KScribbleDoc; + +/** The KScribbleView class provides the view widget for the document instance connected to it and is displayed + * as a MDI child window in the main view area of the KScribbleApp class instance. The KScribbleApp + * class also has an eventFilter() method that gets installed on every KScribbleView instance to + * control events of the type QEvent::Close.The document connected to the view instance keeps a list + * of all view that represent the document contents as there can be more than one view. Views get created in + * KScribbleApp::createClient() and automatically added to the list of views. + * The KScribbleView class inherits QWidget as a base. Another possible inheritance besides specialized + + widgets could be QMainWindow so that you can easily set up the main area of your view by setting another view + * as main widget (QMainWindow::setMainWidget() ). + * NOTE: The close event always has to be empty (DON`T CALL QWidget::closeEvent(e) in closeEvent()) + * because the installed event filter can only manage a forward implementation. If the QCloseEvent + * is received by the KScribbleView, the overwritten event handler has to do nothing as the eventFilter + * has set accept() or ignore() already. If QWidget::closeEvent() is called again, the default event + * handler will accept the close event and the window gets destroyed even if the installed eventFilter + * has set the event to be ignored. + * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team. + * @version KDevelop version 1.1 code generation + */ +class KScribbleView : public QScrollView +{ + Q_OBJECT + + friend KScribbleDoc; + + public: + /** Constructor for the view + * @param pDoc your document instance that the view represents. Create a document + * before calling the constructor or connect an already existing document to a new MDI child widget.*/ + KScribbleView(KScribbleDoc* pDoc, QWidget* parent, const char *name, int wflags); + /** Destructor for the main view */ + ~KScribbleView(); + /** returns a pointer to the document connected to the view*/ + KScribbleDoc *getDocument() const; + /** gets called to redraw the document contents if it has been modified */ + void update(KScribbleView* pSender); + /** contains the implementation for printing functionality and gets called by KScribbleApp::slotFilePrint() */ + void print(QPrinter *pPrinter); + /** cuts out a selection */ + void cutSelection(); + /** copies a selection to the clipboard */ + void copySelection(); + /** pastes the clipboard contents to a selection that can be inserted into the picture */ + void pasteSelection(); + + protected: + + /** overwritten QWidget::closeEvent() to catch closing views. Does nothing, as the closeEvents for + * KScribbleView's are processed by KScribbleApp::eventFilter(), so this overwitten closeEvent is necessary + * and has to be empty. Don't overwrite this method ! + */ + virtual void closeEvent(QCloseEvent* ); + /** overwritten to interpret key events for scrollbars */ + virtual void keyPressEvent( QKeyEvent* ); + /** changed from mousePressEvent() overwriting QScrollView method */ + virtual void viewportMousePressEvent( QMouseEvent* ); + /** changed from mouseReleaseEvent() overwriting QScrollView method */ + virtual void viewportMouseReleaseEvent( QMouseEvent* ); + /** On paste actions inserts the pasted clipboard contents */ + virtual void viewportMouseDoubleClickEvent(QMouseEvent* e); + /** changed from mouseMoveEvent() overwriting QScrollView method */ + virtual void viewportMouseMoveEvent( QMouseEvent* ); + /** changed from resizeEvent() overwriting QScrollView method */ +// virtual void viewportResizeEvent( QResizeEvent* ); + /** changed from paintEvent() overwriting QScrollView method */ + virtual void viewportPaintEvent( QPaintEvent* ); + + virtual void viewportDragEnterEvent ( QDragEnterEvent * ); + + virtual void viewportDragMoveEvent ( QDragMoveEvent * ); + + virtual void viewportDragLeaveEvent ( QDragLeaveEvent * ); + + virtual void viewportDropEvent ( QDropEvent * ); + + /** the document instance */ + KScribbleDoc *doc; + + private: + KPixmap tmp; + QRect select; + QClipboard *cb; + enum Action{IDLE=0, DRAW, SELECT, PASTE, DRAG} action; +}; + +#endif // KSCRIBBLEVIEW_H + + + + + +kscribbleview.cpp + +/*************************************************************************** + kscribbleview.cpp - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ +#include <iostream.h> + +// include files for Qt +#include <qprinter.h> +#include <qpainter.h> +#include <qdir.h> +#include <qsize.h> +#include <qclipboard.h> +#include <qimage.h> +#include <qdragobject.h> + +// include files for KDE +#include <kiconloader.h> + +// application specific includes +#include "kscribbleview.h" +#include "kscribbledoc.h" +#include "kscribble.h" + + +KScribbleView::KScribbleView(KScribbleDoc* pDoc, QWidget *parent, const char* name, int wflags) + : QScrollView(parent, name, wflags | WPaintClever | WNorthWestGravity | WRepaintNoErase) +{ + cb = QApplication::clipboard(); + viewport()->setAcceptDrops(true); + setDragAutoScroll(true); + doc=pDoc; + action=IDLE; + viewport()->setCursor( Qt::crossCursor ); + QSize size=doc->docSize(); + resizeContents(size.width(), size.height()); + resize(size); +} + +KScribbleView::~KScribbleView() +{ +} + +KScribbleDoc *KScribbleView::getDocument() const +{ + return doc; +} + +void KScribbleView::update(KScribbleView* pSender){ + if(pSender != this) + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} + +void KScribbleView::print(QPrinter *pPrinter) +{ + if (pPrinter->setup(this)) + { + QPainter p; + p.begin(pPrinter); + + /////////////////////////////// + // TODO: add your printing code here + p.drawPixmap(0,0,doc->buffer); + /////////////////////////////// + p.end(); + } +} + +/** cuts out a selection */ +void KScribbleView::cutSelection(){ + select=select.normalize(); + QPixmap cb_pix; + cb_pix.resize(select.size()); + // copy selection to cb_pix and copy to clipboard + bitBlt(&cb_pix, 0, 0, + &doc->buffer, select.x()+contentsX(), select.y()+contentsY(), cb_pix.width(), cb_pix.height()); + cb->setPixmap(cb_pix); + // fill cb_pix with white and copy to selection area + cb_pix.fill(Qt::white); + bitBlt(&doc->buffer, select.x()+contentsX(), select.y()+contentsY(), + &cb_pix, 0, 0, cb_pix.width(), cb_pix.height()); + action = IDLE; + doc->setModified(); + doc->updateAllViews(this); + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} +/** copies a selection to the clipboard */ +void KScribbleView::copySelection(){ + select=select.normalize(); + QPixmap cb_pix; + cb_pix.resize(select.size()); + // copy selection to cb_pix and copy to clipboard + bitBlt(&cb_pix, 0, 0, + &doc->buffer, select.x()+contentsX(), select.y()+contentsY(),cb_pix.width(), cb_pix.height()); + cb->setPixmap(cb_pix); + action = IDLE; + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} +/** pastes the clipboard contents to a selection that can be inserted into the picture */ +void KScribbleView::pasteSelection(){ + select=cb->pixmap().rect(); + action = PASTE; + viewport()->setCursor( Qt::sizeAllCursor ); +} + +void KScribbleView::closeEvent(QCloseEvent* e){ + +// DO NOT CALL QWidget::closeEvent(e) here !! +// This will accept the closing by QCloseEvent::accept() by default. +// The installed eventFilter() in KScribbleApp takes care for closing the widget +// or ignoring the close event + +} + +void KScribbleView::keyPressEvent( QKeyEvent *e ) +{ + switch (e->key()) + { + case Key_Right: + scrollBy( 10, 0 ); + break; + case Key_Left: + scrollBy( -10,0); + break; + case Key_Up: + scrollBy( 0, -10 ); + break; + case Key_Down: + scrollBy( 0, 10 ); + break; + case Key_Home: + setContentsPos(0,0); + break; + case Key_End: + setContentsPos(0,viewport()->height()-viewport()->height()); + break; + case Key_PageUp: + scrollBy( 0, -viewport()->height() ); + break; + case Key_PageDown: + scrollBy( 0, viewport()->height() ); + break; + } + +} + +void KScribbleView::viewportMousePressEvent( QMouseEvent *e ) +{ + if ( e->button() == LeftButton && action == IDLE) + { + action=DRAW; + doc->polyline[2] = doc->polyline[1] = doc->polyline[0] = viewportToContents(e->pos()); + doc->updateAllViews(this); + } + else if ( e->button() == RightButton && action == IDLE) + { + action = SELECT; + QPoint pt=e->pos(); + int x = pt.x() > contentsWidth() ? contentsWidth() : pt.x(); + int y = pt.y() > contentsHeight() ? contentsHeight() : pt.y(); + select.setLeft(x-1); + select.setTop(y-1); + select.setRight(x-1); + select.setBottom(y-1); + } + else if( action == SELECT ) + { + action = IDLE; + select=select.normalize(); + // drag + if(select.contains(e->pos(), true)) // point inside the selection + { + tmp.resize(select.size()); + bitBlt(&tmp, 0, 0, + &doc->buffer, select.x()+contentsX(), select.y()+contentsY(), tmp.width(), tmp.height()); + QImage img =tmp.convertToImage(); + QDragObject *d = new QImageDrag( img, viewport() ); + d->setPixmap(BarIcon("filenew")); + d->drag(); + } + // remove selection + else + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + } + else if( action == PASTE ) + { + if ( e->button() == RightButton ) + { + action = IDLE; + viewport()->setCursor( Qt::crossCursor ); + } + QPoint mv_pt (viewport()->height(), viewport()->width()); + if(QRect(0,0,mv_pt.x(),mv_pt.y()).contains(e->pos())) + select.moveCenter(e->pos()); + else + { + select.moveBottomRight(mv_pt); + } + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + } +} + +void KScribbleView::viewportMouseReleaseEvent( QMouseEvent *e ) +{ + if ( action == DRAW ) + { + action = IDLE; + doc->updateAllViews(this); + } + if ( action == SELECT) + { + QPoint pt=e->pos(); + int x = pt.x() > 0 ? pt.x() : 0; + int y = pt.y() > 0 ? pt.y() : 0; + select.setRight(x); + select.setBottom(y); + QSize size=doc->docSize(); + select = select.intersect(QRect(0,0,size.width(), size.height())); + } +} + +/** On paste actions inserts the pasted clipboard contents + */ +void KScribbleView::viewportMouseDoubleClickEvent(QMouseEvent* e) +{ + if( action == PASTE ) + { + action = IDLE; + select.moveCenter(e->pos()); + viewport()->setCursor( Qt::crossCursor ); + QPixmap cb_pix; + cb_pix.resize(cb->pixmap().size()); + cb_pix=cb->pixmap(); + bitBlt( &doc->buffer, contentsX()+select.x(), contentsY()+select.y(), + &cb_pix, 0,0 , select.width(),select.height() ); + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + doc->setModified(); + doc->updateAllViews(this); + } + +} + +void KScribbleView::viewportMouseMoveEvent( QMouseEvent *e ) +{ + if ( action == DRAW ) + { + QPainter painter; + painter.begin( &doc->buffer ); + painter.setPen( doc->currentPen() ); + doc->polyline[2] = doc->polyline[1]; + doc->polyline[1] = doc->polyline[0]; + doc->polyline[0] = viewportToContents(e->pos()); + painter.drawPolyline( doc->polyline ); + painter.end(); + + QRect r = doc->polyline.boundingRect(); + r = r.normalize(); + r.setLeft( r.left() - doc->penWidth() ); + r.setTop( r.top() - doc->penWidth() ); + r.setRight( r.right() + doc->penWidth() ); + r.setBottom( r.bottom() + doc->penWidth() ); + + bitBlt(viewport(), r.x()-contentsX(), r.y()-contentsY() , + &doc->buffer, r.x(), r.y(), r.width(), r.height() ); + doc->setModified(); + doc->updateAllViews(this); + } + if ( action == SELECT ) + { + QPoint pt=e->pos(); + select.setWidth(select.x()+pt.x()); + select.setHeight(select.y()+pt.y()); + select.setRight(pt.x()); + select.setBottom(pt.y()); + QSize size=doc->docSize(); + select = select.intersect(QRect(0,0,size.width(), size.height())); + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + } + if( action == PASTE ) + { + QPoint mv_pt (viewport()->height(), viewport()->width()); + if(QRect(0,0,mv_pt.x(),mv_pt.y()).contains(e->pos())) + select.moveCenter(e->pos()); + else + { + select.moveBottomRight(mv_pt); + } + QRect pm_rect=cb->pixmap().rect(); + select.setWidth(pm_rect.width()); + select.setHeight(pm_rect.height()); + QSize size=doc->docSize(); + select = select.intersect(QRect(0,0,size.width(), size.height())); + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + doc->setModified(); + doc->updateAllViews(this); + } +} + +//void KScribbleView::viewportResizeEvent( QResizeEvent *e ) +//{ +//} + +void KScribbleView::viewportPaintEvent( QPaintEvent *e ) +{ + bitBlt( viewport(),0,0, &doc->buffer,contentsX() ,contentsY() ); + + if( action == PASTE ) + { + tmp.resize(cb->pixmap().size()); + tmp=cb->pixmap(); + } + if( action == PASTE || action == DRAG ) + { + QSize size=doc->docSize(); + select = select.intersect(QRect(0,0,size.width(), size.height())); + if(select.intersects(e->rect())) + bitBlt(viewport(), select.x(), select.y(), &tmp, 0, 0, select.width(), select.height()); + } + if( action == PASTE || action == DRAG || action == SELECT ) + { +// if(select.intersects(e->rect())) +// { + QPainter paint_area; + paint_area.begin(viewport()); + paint_area.setPen(QPen(Qt::black, 0, DashLine)); + paint_area.drawRect( select ); + paint_area.end(); +// } + } + QScrollView::viewportPaintEvent(e); +} + +void KScribbleView::viewportDragEnterEvent ( QDragEnterEvent * e) +{ + e->accept(QImageDrag::canDecode(e)); + action = DRAG; +} + +void KScribbleView::viewportDragMoveEvent ( QDragMoveEvent * e) +{ + QImage img; + if ( QImageDrag::decode(e, img) ){ + tmp.resize(img.size()); + tmp.convertFromImage(img); + select.setWidth(tmp.width()); + select.setHeight(tmp.height()); + select.moveCenter(e->pos()); + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + } +} + +void KScribbleView::viewportDragLeaveEvent ( QDragLeaveEvent * ) +{ + action = IDLE; + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} + +void KScribbleView::viewportDropEvent ( QDropEvent * e) +{ + QImage img; + if ( QImageDrag::decode(e, img) ) + { + tmp.resize(img.size()); + tmp.convertFromImage(img); + select.setWidth(tmp.width()); + select.setHeight(tmp.height()); + select.moveCenter(e->pos()); + bitBlt(&doc->buffer, select.x()+contentsX(), select.y()+contentsY(), + &tmp, 0, 0, tmp.width(), tmp.height()); + doc->setModified(); + doc->updateAllViews(this); + } + action = IDLE; + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} + + + + + +kpenbrushdlg.h + +/*************************************************************************** + kpenbrushdlg.h - description + ------------------- + begin : Fri Jul 23 1999 + copyright : (C) 1999 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + + +#ifndef KPENBRUSHDLG_H +#define KPENBRUSHDLG_H + +//Generated area. DO NOT EDIT!!!(begin) +#include <qwidget.h> +#include <qspinbox.h> +#include <qlabel.h> +#include <qpushbutton.h> +//Generated area. DO NOT EDIT!!!(end) + +#include <qdialog.h> +#include <klocale.h> + +/** + *@author Ralf Nolden + */ + +class KPenBrushDlg : public QDialog { + Q_OBJECT +public: + KPenBrushDlg(int curr, QWidget *parent=0, const char *name=0); + ~KPenBrushDlg(); + + int width() { return width_spbox->value(); }; + +protected slots: + void slotDefault(); + +protected: + void initDialog(); + //Generated area. DO NOT EDIT!!!(begin) + QSpinBox *width_spbox; + QLabel *width_label; + QPushButton *default_btn; + QPushButton *ok_btn; + QPushButton *cancel_btn; + //Generated area. DO NOT EDIT!!!(end) + +private: +}; + +#endif + + + + + + +kpenbrushdlg.cpp + +/*************************************************************************** + kpenbrushdlg.cpp - description + ------------------- + begin : Fri Jul 23 1999 + copyright : (C) 1999 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "kpenbrushdlg.h" +#include <qwhatsthis.h> +#include <kapp.h> + +KPenBrushDlg::KPenBrushDlg(int curr, QWidget *parent, const char *name) + : QDialog(parent,name,true,WStyle_ContextHelp) +{ + initDialog(); + QWhatsThis::add(width_spbox,i18n("Select brush width")); + + width_spbox->setValue(curr); + connect(default_btn, SIGNAL(clicked()), this, SLOT(slotDefault())); + connect(ok_btn, SIGNAL(clicked()), this, SLOT(accept())); + connect(cancel_btn, SIGNAL(clicked()), this, SLOT(reject())); +} + +KPenBrushDlg::~KPenBrushDlg(){ +} + +void KPenBrushDlg::slotDefault(){ + width_spbox->setValue(3); +} + + + + + +kpenbrushdlgdata.cpp + +/********************************************************************** + --- KDevelop (KDlgEdit) generated file --- + + Last generated: Fri Jul 23 10:43:10 1999 + + DO NOT EDIT!!! This file will be automatically + regenerated by KDevelop. All changes will be lost. + +**********************************************************************/ +#include <kapp.h> +#include "kpenbrushdlg.h" + +void KPenBrushDlg::initDialog(){ + this->resize(370,210); + this->setMinimumSize(0,0); + width_spbox= new QSpinBox(this,"width_spbox"); + width_spbox->setGeometry(150,50,100,25); + width_spbox->setMinimumSize(0,0); + width_spbox->setValue(1); + width_spbox->setRange(1,99); + + width_label= new QLabel(this,"width_label"); + width_label->setGeometry(20,50,120,25); + width_label->setMinimumSize(0,0); + width_label->setText(i18n("Pen Width:")); + + default_btn= new QPushButton(this,"default"); + default_btn->setGeometry(30,160,100,30); + default_btn->setMinimumSize(0,0); + default_btn->setText(i18n("Default")); + default_btn->setAutoDefault(true); + + ok_btn= new QPushButton(this,"ok"); + ok_btn->setGeometry(140,160,100,30); + ok_btn->setMinimumSize(0,0); + ok_btn->setText(i18n("OK")); + ok_btn->setAutoDefault(true); + + cancel_btn= new QPushButton(this,"cancel"); + cancel_btn->setGeometry(250,160,100,30); + cancel_btn->setMinimumSize(0,0); + cancel_btn->setText(i18n("Cancel")); + cancel_btn->setAutoDefault(true); + +} + + + + +resource.h + +/*************************************************************************** + resource.h - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef RESOURCE_H +#define RESOURCE_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +/////////////////////////////////////////////////////////////////// +// resource.h -- contains macros used for commands + + +/////////////////////////////////////////////////////////////////// +// COMMAND VALUES FOR MENUBAR AND TOOLBAR ENTRIES + + +/////////////////////////////////////////////////////////////////// +// File-menu entries +#define ID_FILE_NEW 10010 +#define ID_FILE_OPEN 10020 +#define ID_FILE_OPEN_RECENT 10030 +#define ID_FILE_CLOSE 10040 + +#define ID_FILE_SAVE 10050 +#define ID_FILE_SAVE_AS 10060 + +#define ID_FILE_PRINT 10070 + +#define ID_FILE_QUIT 10080 + +/////////////////////////////////////////////////////////////////// +// Edit-menu entries +#define ID_EDIT_UNDO 11010 +#define ID_EDIT_COPY 11020 +#define ID_EDIT_CUT 11030 +#define ID_EDIT_PASTE 11040 +#define ID_EDIT_CLEAR_ALL 11050 + +/////////////////////////////////////////////////////////////////// +// Pen-menu entries +#define ID_PEN_COLOR 14010 +#define ID_PEN_BRUSH 14020 + +/////////////////////////////////////////////////////////////////// +// Draw-menu entries +#define ID_DRAW_FIND 15010 +#define ID_DRAW_FREEHAND 15020 +#define ID_DRAW_LINE 15030 +#define ID_DRAW_RECT 15040 +#define ID_DRAW_RECT_FILL 15050 +#define ID_DRAW_CIRCLE 15060 +#define ID_DRAW_CIRCLE_FILL 15070 +#define ID_DRAW_ELLIPSE 15080 +#define ID_DRAW_ELLIPSE_FILL 15090 +#define ID_DRAW_SPRAY 15100 +#define ID_DRAW_FILL 15110 +#define ID_DRAW_ERASE 15120 + +/////////////////////////////////////////////////////////////////// +// View-menu entries +#define ID_VIEW_TOOLBAR 12010 +#define ID_VIEW_STATUSBAR 12020 + +/////////////////////////////////////////////////////////////////// +// Window-menu entries +#define ID_WINDOW_NEW_WINDOW 13010 +#define ID_WINDOW_CASCADE 13020 +#define ID_WINDOW_TILE 13030 + +/////////////////////////////////////////////////////////////////// +// Help-menu entries +#define ID_HELP_CONTENTS 1002 +#define ID_HELP_WHATS_THIS 1003 +/////////////////////////////////////////////////////////////////// +// General application values +#define ID_STATUS_MSG 1001 +#define TOOLS_TOOLBAR 1 +#endif // RESOURCE_H + + + + + + +
+ + diff -Nru kdevelop-3.9.98/doc/tutorial/index.docbook.eric kdevelop-4.0.1/doc/tutorial/index.docbook.eric --- kdevelop-3.9.98/doc/tutorial/index.docbook.eric 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/tutorial/index.docbook.eric 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,4511 @@ +kdevelop"> + + ]]> +]> + + + +KDE Application Tutorials +The KDE Application Tutorials Handbook for the KDevelop Integrated Development Environment + + +Ralf +Nolden + +The KDevelop Team +
Ralf.Nolden@post.rwth-aachen.de
+
+
+
+21/03/2000 +1.02.00 + +The KDE Application Tutorials Handbook for the KDevelop Integrated Development Environment, a tutorial collection on how to create KDE +applications by examples. This handbook itself is part of the KDevelop Integrated Development Environment and is therefore also +licensed under the GNU General Public License; see Copyright for more information. + + +KDE +KDevelop +tutorials + +
+ + +Introduction + +As KDE is currently becoming a standard for Unix System's desktops, more and more developers want to take advantage of the well-written +API that the KDE project includes to create new applications that offer a GUI as well as an easy use of the classes provided with +Qt/KDE. The KDevelop project therefore intends to provide an IDE which enables developers to create and extend their applications +rapidly with the main focus on KDE. As beginners always have difficulties to get started, this handbook tries to explain certain +aspects of application creation for KDE by describing how to create running applications with the sample code included with the Qt +library by using the KDevelop IDE as well as creating KDE applications by examples. + +Therefore, the next chapter will explain you how to create a project with KDevelop that is already a complete application; then we'll +walk on to the Qt online documentation containing the sources for examples on how to use the Qt library. + +This will give you a first understanding how the underlying Qt library functions and how to use the classes provided with it; Qt is the +point where to get started as KDE is on top of the Qt library classes and KDE applications make a wide use of them. + +Further, we'll cover on how to create a KDE application with KDevelop's application wizard. From the minimum framework provided, +we will create a running example KDE application that makes use of the KDE libraries and will explain the different parts of a KDE +application in detail. + +The KDevelop Team wishes you success in learing about KDE and Qt with this handbook and hope it will enable you to become another +programmer contributing to the KDE project. + + +What you should know already + +This handbook requires a base knowledge about the C++ programming language as a minimum to understand the code examples and their +functionality. Further, it is assumed that you have read The User Manual to KDevelop as well as +The KDevelop Programming Handbook and know how the KDevelop IDE works in general and what +generated projects are. + + + + +Getting Started + +Getting Started- that means, you should have set up KDevelop to work correctly first. Ensure you have access to the Qt online reference +documentation by the "Help" menu or the according book in the documentation tree. When looking a the first page of the Ot +documentation, you will see that it contains a link to a section "Tutorials" and "Examples". Under "Tutorials", you will find a 14-step +introduction into using the Qt library to build applications. On the other hand, "Examples" will lead you to a list of example +programs that Qt includes and takes for example usage reference in certain classes. Now, if you are an absolute beginner, you should be +comfortable with the idea behind Qt- providing a library that offers: + + + +a base application class (QApplication) + + +a widget library for graphical user interfaces + + +a set of additional helper classes for graphics, file and data handling + + +the signal-slot mechanism for object communication + + +event controlling by event loops and virtual methods + + + + +If that doesn't tell you anything right now, you should read about the Qt library in The KDevelop Programming Handbook where the basics for a Qt application are described in detail. There, you will also find and +introduction about the difference between a Qt and a KDE application, which is not much at the first level of the Qt tutorial step. + +Now, to learn about Qt first would be a good start for programming KDE applications as well, so we will create a project that will +produce the tutorial applications after editing. + +To do this, start with opening KDevelop and select "Project"-"New" from the menubar. The application wizard opens and you have to +select which type of project you want to build. For Qt applications, you would choose the Qt application, but we will use the mini-KDE +project to build our examples. The reason is simple: the Qt tutorials don't contain much code, and by choosing the Qt application in +the application wizard, we would have to do a lot of changing on the provided code to create the "true" examples. + +But as the mini-KDE application only consists of an empty main window but also checks for the Qt library and header files, it will fit +for our purposes and doesn't require much changes. + +When entering the next wizard page, we have to enter the project-specific information. There, we can leave out any KDE-specific +additions such as a mini-icon and a main icon, documentation etc. We just fill in the information that will be useful for building a +suitable base for the tutorials. As the structure of the tutorial steps builds the next step on the previously created code, we can +start with MyWidget as the project name. This will already build us the base class that is needed in chapter 4, so we don't have +to care for that later. As we want to start with the first tutorial step, we will use '1' as the project number, which we can increase +later when moving to the next step. + +Then, fill in the other required information such as your name, email address and project directory. That would be all we need and we +can flip to the next page. Insert your header for the project's header file here or use the given example. The same is done with the +4th page, where the same has to be set for the source files. Finally, the last page is entered, where you have to press "Create" to +build the project. If the button is not available, start at the first page again and make sure you didn't miss to insert any required +information. + +If everything went OK, the project has been build and the messages window in the application wizard will have "READY" at it's last +line. Select "Close" to finish the wizard. + +When looking at the treeview on the left, you will see that the project alreay includes a class "MyWidget"- this is because we chose +this to be the application name. Further, when opening "Functions" in the classviewer's "Globals" folder, you will see that the +application already contains a main() function where the execution will start. + +Now the application is already set up. You could do an "Execute" or "Make", but as we want to create the tutorial applications, we can +go ahead and change the code first to create our tutorial examples- which we'll do in the next step. + + + +Building the Qt Tutorials + + +Step One: Hello World! + +As the previous chapter explains, we created a project called MyWidget- now, when looking at the first tutorial page of the Qt +documentation, you will see that the first application only uses a main() function. Therefore, we only have to change the given +main() function of our generated project to get the first tutorial step running. + +To access the main() function, select it from the classviewer's "Globals" folder, which contains a subfolder for "Functions" where +all non-class functions are listed. This will open the file main.cpp in the "C/C++ Files" window and the editing cursor is already +set in front of the first line of main(). + + +What to change first + +We could start changing the given code towards the desired one which is listed in the tutorial- but it can be even easier. Select the +contents of the main() function with the mouse or by holding the Shift-key pressed while selecting the lines with the down-arrow +key. Then select "Cut" from the "Edit" menu or press the DEL-key to remove the selected code. This will clear the main function and we +can start from scratch to build our first tutorial. + + + +Entering the tutorial code + +Now, to insert the code from the tutorial, you could first read it carefully and try to remember which line contained which code. Then, +after reading the tutorial's line-by-line description, you could use it as an example to write the tutorial by yourself. + +Those who want to go the easy way: select the contents of the listed main() function in the documentation browser and press the +"Copy"-icon from the toolbar. Optionally, you could use the context-menu or the according entry in the "Edit" menu. This will copy the +selection into the clipboard and, after switching back to the sourcecode window, can be inserted with "Paste" (either from the context +menu, the toolbar icon or the according entry in the "Edit" menu). + +Finally, add the according header files outside the main() function: + +#include <qapplication.h> +#include <qpushbutton.h> + + + +That's it ! The source code is done for your first tutorial application. + + + +Building Hello World! + +To build the first tutorial, select "Make" from the "Build" menu or press the according toolbar icon. Optionally, you could choose +"Execute" as well, which results in running the application after the build was successful. + +If the build stops due to an error, be assured the fault was on the programmer's side, not on the tutorial ! This would be sad to +search for an error just when you decided to program for KDE and/or Qt, but you can use this to train yourself to use KDevelop. Now, to +find an error, you have two options: either select the according error message in the output window, which will bring you to the +according line the error occured, or press the F4 key; optionally you could use the "Next Error" entry in the "View" menu. + + + +Exercises + +You may ask "Exercises ? This one was so simple, I don't need to excercise !", but be assured, things will get more complicated. This +one was the easiest example, but the more complex they will get the more thinking is asked on your side to understand and follow the +tutorial steps. Also the excercises will enable you to learn how to acutally use KDevelop and it's features. + +To teach yourself more with the first tutorial, you should try to do the following changes to the given code and see how this will +influence the application behavoir: + + +change the pushbutton to a QLabel. + + +use setText() instead of directly setting the text in the pushbutton's constructor + + +use QPushButton::resize ( const QSize & s ) instead of setting the size by width and height directly. Create a QSize +instance first that contains the size + + +play with the sizes to see which is width and heigth + + + + + + + +Step 2 and 3: Extensions + +The tutorial steps 2 and 3 are extending the facilities of the first tutorial. There, you will learn about signals and slots as well as +parent-child relationships between widgets. + +Now, why is it important to learn about that ? Well, the signals and slots are building the technology which make the difference when +comparing the Qt library to other widget library. Whenever you will hit an implementation problem where you want to communicate +between objects, this will make your work incredible short and nothing serious will happen if something went wrong, even misconnections +don't lead to a segmentation fault. This is the strength of the Qt library and a lot of KDE/Qt developer's won't want to miss it +anymore because of it's flexibility. Understanding the signal/slot mechanism therefore is essential to create any KDE/Qt application. + +Another thing to watch out for is the fact that the button terminates the QApplication instance by calling quit(). You will +meet quit() again when working with QApplication's KDE-pendant, KApplication + + + +Writing your own Widgets + +Now, after having successfully modified and extended the main() function, you will hit the point to create a new widget- a unique +widget that only can be constructed with the class you're about to write in step 4. Actually, the class has been created by the +application wizard for you, so there is not much to add- just that you have to insert the code that lesson 4 places in the +main.cpp file into the MyWidget classes' header and implementation file. Fortunately, you only have to add the implementation +to the constructor code. + +To access the constructor, select it from the classviewer. This will automatically bring you to the implementation where you have to +add the code. + +Here, you only have to watch out for the include of qfont.h- QFont is only used in the constructor code of MyWidget. +Therefore, add #include <qfont.h> to the top of the mywidget.cpp file. + +To run the new application, just hit "Execute". This will result in compling the changes after an autosaving. + + + +Extending the Widget Class + +Now, in lesson 5 the target is to extend the widget class. Therefore, you will learn about virtual functions as well. Here, the +resizeEvent() is reimplemented. What is important to learn here (besides extending a class) is that Qt works with user events by +virtual functions that take an event as a parameter. Therefore, you should make yourself comfortable with the following classes of the +Qt library: + + + +QEvent + + +QChildEvent + + +QCloseEvent + + +QFocusEvent + + +QKeyEvent + + +QMouseEvent + + +QMoveEvent + + +QPaintEvent + + +QResizeEvent + + +QTimerEvent + + + + +Whenever writing custom widgets, especially view areas of applications, you will have to overwrite the default implementation of the +widget's event-methods by your own for certain events that have to be processed. Those would be e.g. + +virtual void mousePressEvent ( QMouseEvent * ) for processing a mouse event to pop up a context menu. In the implementation, you +have to insert a formal parameter into the function header, most developers either use event or just e as the parameter name. + +Then, you can process the event's parameters. For a QMouseEvent, you have to ask if the right, middle or left mouse button was the +one that caused the event. + + + +Adding a new Class + +With lesson 6, you will have to add a class to the tutorial application. Now, normally you would think "I just will create a header +file and an implementation file- then I'm done"- but KDevelop will make it easier for you. When adding a class, you should always use +the Classgenerator. This will do all the work for you so you just will have to add the specific code. + +To add a class with the Classgenerator, choose "Project"-"New Class", which will open a dialog to enter all needed values for the class +you want to add. The first thing we have to insert is the classname. The tutorial name this LCDRange, so this has to be inserted +first. Then proceed to the baseclass. The baseclass is the one that the new class inherits. Looking at the tutorial (Qt 1.42), this is +QWidget. Now, as most GUI classes to add would inherit QWidget, the Classgenerator makes it even easier. Leave the baseclass +empty and instead check "QWidget child class" in the "Additional Options" section. This will automatically add the required +Q_OBJECT macro to the headerfile to add slots and signals later (which is required in chapter 7). + +As the filenames are automatically inserted, you don't have to care for that. The only thing that we would suggest adding is the +documentation. It is always a good style to add a desciptive documentation to the class, especially as the classname LCDRange +doesn't inform you specifically about the purpose of the widget. + + + +Step 7-14 + +For the rest of the tutorial steps, you are prepared and know everything you have to know- adding the classes required and doing the +changes. + +After each change you should do a new build and check your code for errors. Run the application and follow it's execution; +additionally, you should play with KDevelop's options for "Build"- execute the application with a commandline argument such as +--geometry and debug it with KDbg in the Tools-window. Then you should be able to proceed with the Qt examples that are provided with +Qt. In the next chapter, you will be introduced into development for KDE 2 by an example application KScribble, which is a small +drawing application that will show you the concepts of application design and how to implement you own program. + + + + +Creating KDE Applications + +This handbook will try to teach you KDE/Qt application design by creating an example application step-by-step. The major intention is +to gain a certain understanding how two of the most important ideas of graphical user interface programming work: the document-view +model and the multiple document interface (MDI) model. + +By this, you will also get a good idea of concepts that are coming up ahead: KDE 2 and the Qt 2.1 library, bringing new enhancements +and technology to the programmer's hands that will improve application design and widen the possibilities that are open to use. +Keywords such as widget themes, Inter-Process Communication and embedded applications are popularly talked about and will allow even +more than one can think about right now. + +Therefore, KDevelop 1.1, still based on KDE 1.1.x, provides developers some of the most requested possibilities: developing +applications for KDE 2, while still running a stable desktop environment. This also implies that this tutorial will be based on a KDE 2 +application that already makes use of Qt-2.1, offering a solution for the mentioned MDI model - which we provide as a ready-to-go frame +application. During this tutorial you will get a clear insight on how it works and this will also make it much easier to understand the +document-view model as well - which is hard to understand even for advanced programmers. That will help you create other type of +applications, which use the document-view model even if they only contain one window and you wouldn't obviously see a need for it. But +let's just go inside it - you will see what's coming up on you and how easy it actually is. + +The further chapters of the tutorial cover the following several steps: + + +installing KDE 2 (libraries) and setting up KDevelop to create KDE 2 applications. + + +understanding the basic concepts of MDI and document-view model. + + +creating the generic framework for KScribble and explaining the concept of the framework. + + +implementing the document class, who will provide the interface to read and write the document data as well as maintaining the +document. + + +implementing the view class to visualize the data. This class also takes over the interaction with the user. + + +adding dialogs to set the pen width and color of the pen to draw with, including their integration into the toolbar and menubar + + +changing the view from the default QWidget inheritance to a scrollable view. + + + + +The tutorial example itself is based on the code found in the scribble example application that comes with the Qt library. The source +of the original example can also be found within the Qt documentation, section examples. + + + +Installing KDE 2 + +In this chapter we will first go through a couple of steps that will help you set up KDevelop for creating KDE 2 / Qt 2.x +applications. The requirements are: + + +a current Qt-2.1 snapshot available at http://www.troll.no + + +a current KDE 2 snapshot of the packages kdesupport and kdelibs + + + + +Both the Qt-2.1 and KDE 2 libraries are currently under development but are to be expected as final and changes to be expected for the +final versions are marginal and may not even affect your application. This means you're getting to know the newest libraries coming up- +and you're in charge of a valuable time-saving to create your application even before the libraries are completed. + +The following sections describe what to do in detail within three steps: + + +installing the Qt library + + +installing the KDE libraries + + +setting up KDevelop + + + + +Then you're ready to go and we'll proceed with creating the first step of the example program KScribble in the next chapter. + + +Setting up Qt-2.1 + +This first step will lead you to the minimum requirement to follow our example- which implies that there is a possibility to avoid +installing KDE 2 if you're only interested in creating Qt-only programs. As Qt-2.1 contains all needed classes and KDevelop providing a +project template for multiple document interface applications for Qt-2.1 as well based on the same framecode that is used in the KDE 2 +template, you should have no problem at all following the example with a Qt-only application. + +Now, to get the newest Qt library, get a recent version from the Troll Tech website at http://www.troll.no, section download. Then change to root and copy the tarball to the directory where your currently used Qt +version is placed as well - on a SuSE Linux system this would be /usr/lib, where you should have a directory for either +qt-1.44 or qt-2.0.2, depending on the distribution version. Untar the library sources with + +tar zxvf qtxxx.tar.gz + +depending on the name of the tarball. Then set the environment variable QTDIR to point to the directory where your new Qt-2.1 +library is placed with e.g. setenv QTDIR=/usr/lib/qt-2.1. Another solution would be to move the qt-1.44 directory, usually +just named qt, to qt-1.44 and create a symlink that for now has to point to qt-2.1, after the library is build, change it back to +point to the qt-1.44 directory. + +Change to the Qt-2.1 directory and type: +./configure +make + + + +You can change back your QTDIR variable to point to your qt-1.44 installation after successfully +compiling the Qt-2.1 library. + +Now switch to the directory /usr/lib/qt-2.1/lib and copy the created libraries to /usr/lib exept the +symbolic link libqt.so. + +Then you're done with Qt and you can proceed to the next step, setting up KDE 2 libraries. If you want to develop for Qt only, proceed +to section Setting up KDevelop. + + + +Setting up KDE 2 Libraries + +The second step leads you to install the needed KDE libraries. Download a recent snapshot of the library packages kdesupport +and kdelibs from http://www.kde.org. Then things will go a bit easier than for the +Qt library. Just untar the sources to your directory and change to the kdesupport directory first. There, type: + +./configure --with-qt-dir=/usr/lib/qt-2.1 --prefix=/opt/kde2 +make + +and as root: + +make install + + + +This will install the kdesupport package to the directory given in the --prefix option and compile using the new build Qt-2.1 library, +to which you give the path to configure by the option --with-qt-dir. + +The same applies to the kdelibs package, just change to the kdelibs directory and type the same as above for the kdesupport package. + +Then you're done with setting up the requirements for the needed libraries to build a KDE 2 application. + +As a note aside, the KDE library package contains support for automatic HTML documentation generation, which you can easily get by +installing KDoc, version 2.x. Then type makekdedoc in your kdelibs directory and KDoc will create the HTML documentation in a +subdirectory srcdoc. In KDevelop you can access the KDE library documentation online with setting the KDE library +documentation path in the KDevelop Setup dialog to point to kdelibs/srcdoc. On the same way set your Qt-Online documentation +path in KDevelop to point to /usr/lib/qt-2.1/html, so you can access the documentation right away from within KDevelop. + +If you successfully installed the Qt-2.1 and KDE 2 libraries, you're just one step away from creating your first KDE 2 application, you +just need to give KDevelop the needed information where you installed the libraries - which we'll do in the next section. + + + +Setting up KDevelop + +This part is somewhat the easiest in the whole configuration process for KDE 2 development: Setting up KDevelop. Just open KDevelop, +then select "Options"->"KDevelop Setup" to access the KDevelop configuration. There, change to the last page, titled "Path". This page +contains two entry fields, one for the Qt library and one for the KDE 2 libraries. As you have successfully installed everything, +select /usr/lib/qt-2.1 for the Qt-2.x library path and /opt/kde2 for the KDE 2 library path. Press the "OK" button +and you're done. + +Users that only want to develop for Qt-2.x (including the current Qt-2.0.2 version) just have to set the Qt-2.x library path. + +Now we can proceed to the next chapter where we will create the first step of the KScribble example. + + + + +Application Concepts + +This chapter now introduces you into the ideas of the application models mentioned already: the MDI (Multiple Document Interface) and +the Document-View model. A basic introduction into the Document-View model and the generating of a project with KDevelop is already +given in The KDevelop Programming Handbook, but based on a Single Document Interface +(SDI). In any case, you should be familiar with the basics of the KDE and Qt classes that are explained in The KDE Library Reference Guide, there the base classes of the underlying libraries are +explained in detail and how to use them, with an additional description of the Qt signal-slot mechanism and event handling. + +As a guideline, you should know already: + + +that every KDE application needs one instance of KApplication (for a Qt application one instance of +QApplication) + + +generally a main window is inherited from KTMainWindow for KDE (for a Qt application inherited from +QMainWindow) + + +that events (e.g. keyboard presses or mouse movements) are sent to the application by the underlying window system + + +that QWidget as the base class for all visible Graphical User Interface (GUI) components provides specialized event +handlers by virtual functions that filter out the according events by reimplementing QObject::event() + + +that the Qt signal-slot mechanism means basically that a component can send out signals and a receiver can connect to those +signals to process some actions + + +that this mechanism avoids inheriting classes for GUI components because the signals inform you about e.g. mouse presses where +appropriate for a wiget + + + + + +The Document-View Model + +The Document-View Model is one of the most basic concepts in application design that rely on graphical user interfaces. Therefore, a +certain understanding of the why is needed to see that although the programmer has other possibilities, it makes sense to make use of +it. But first let's follow the usual design of a typical KDE / Qt application: + +Your application instance provides the first connection to your application and is the starting point of the event handling for a +program. The program itself represents itself to the user by a Graphical User Interface which is most often called a main-window. The +main window then provides the appropriate functions for the user such as key accelerators, a menubar, toolbar and a statusbar. In the +center it contains a so-called "view-area" which means that this part is an instance of another class, usually called a "View". The +view instance is created when the main window gets constructed at program start and has to be set as the view area component with a +method provided by the main window: setView(your_view) for KDE applications using KTMainWindow, +setCentralWidget(your_view) for a Qt application using QMainWindow. Now, the view obviously is the area that is +responsible for interacting with the user to manipulate the data that it represents. As an example, you could use a +QMultiLineEdit as a view and you will have an editor. Then you can use the provided slots of the view for connections to +menubar or toolbar command like this: + +While creating the menubar, you want to provide a method for the command "cut" in the "Edit" menu: + pEditMenu->insertItem(BarIcon("editcut"), i18n("Cu&t"),view, SLOT(cut()),KAccel::Cut, ID_EDIT_CUT); + + + +This creates a menu item in the "Edit" menu, that, when activated, directly calls the slot cut() of the instance +view, whereby we suppose you have created this instance as a QMultiLineEdit and set as the view area. The +multilineedit's slot gets called and cuts out the selected text as a reaction, the functionality is already provided by the class +itself and so there is no need to inherit from QMultiLineEdit to create a view area that is capable of such actions. They are +ready to use and make application development very fast- you just need the application instance and the main window including the +connections to your view area and you're done ! That means, a simple editor can be written by creating one single class that defines +the main window behavoir and how to save and read files into the editor - just some basic slots your main view has to implement itself. + +But here is the reason why we're now introducing this mysterious Document-View model: You have to provide methods by your own to read +and write the actual files you want to edit with the QMultiLineEdit view-area within the main window's interface. +Yes, this is obviously the easiest thing to do in this case, and the most logic. Now, if we have a look at the files and their contents +as a so-called "Document", which we can subscribe with the attribute of an "Object" in C++ terminology, the next step is just a little +one: If I have a document, a view and a main window- why don't I separate these three objects from each other ? We could easily create +a small class that is responsible for reading in a file into a text stream and then call the view to draw the text visible to the user. +The same applies to saving the file again- the document class should then provide a saving method that retrieves the text from the view +again and saves it as a file. In the example these two methods would be the only actions that are needed to be done by a document +class, because the edit-view already provides all methods basically needed for and editor by slots and you can manipulate the content +of the view by them directly. + +Now, the main idea behind the need for this separation into three objects (document, view, main window) instead of the minimum of two, +the view and the main window, is the question: what if I want to give the user the possibility to work with a file by two or +even more views ? Such things can even be done within one main window by splitters or deviders containing two view instances which +shall both display one file. There it is: the solution can only be that if the user manipulates the file contents in one view, +the other view has to be notified about that and to actualize its contents. Otherwise a bad scenario will occur: if the user closes one +view where he added something at the end of the file which he cutted out at the beginning of the file in the other view, the +file will be saved later by still containing the cutted section, because if the second and last view did not recognize this, it still +contains the text without modification from the beginning plus the inserted one. This means that both views have to be synchronized by +their contents they are displaying and that can be done if all views get notified about each action that the user does, which view he +actually uses should be equal. That means that finally a document class is needed to be the one and only holder of the true contents of +the document and is providing the views the possibility to manipulate the contents. + +I hope this has given some insight into this model, although in most cases it seems that the programmer can live without it - equally +to just using a provided class as the view area or writing a widget on his own to handle user interaction, as long as you represent +one document or file by one view area, the view can be responsible for the data as well and only provide methods to +retrieve or set the document contents for actions like reading a file or saving it. The next model to describe, the Multiple Document +Interface, will make a difference at this point- there you will see the actual need and the functionality the Document-View model +provides. + + + +The Multiple Document Interface (MDI) + +As the last section described the Document-View model, you will probably guess what MDI means. Users that come from other Operating +Systems than Unix/Linux are used to it as well as programmers developing for those platforms. While X-Window applications traditionally +are more targeting towards functionality and stability, Unix users are used to single windows that provide functionality, therefore +even the Document-View model is often not needed to create applications. With Qt as a multi-platform toolkit, developers are having +even more choice - developing for MS Windows(tm) as well as for Unix systems. While on Windows the lack of creating applications that +are capable of handling so-called child windows has been getting to some kind of standard, this is adressed by the Qt 2.1 library, but +on the other hand Unix users can profit from this architecture as well. + +What is now the meaning of MDI ? An MDI application generally has the same concept of a usual application that has, as described above, +one application instance and a main window. The view area now make the difference: you don't directly use a view that represents data +and provides interaction to manipulate that data but a view that handles other windows looking like top-level windows. These windows +are now representing the former view area and the main difference is that the interaction chain changes from + +application instance -> main window -> view + +to + +appliation instance -> main window -> view -> active child window + + + +The view now is capable of several actions: + + +creating as much child windows as the user requests + + +providing methods to retrieve the currently active child window + + +maintaining a list of open views + + +managing the child window behavoir for maximize, minimize such as a window manager does for top-level windows + + + + +Now, you can use "complete" widgets like the QMultiLineEdit as child windows like for an application that only provides one +window and each child window is responsible for it's own data. That could be described as "Multiple Document Interface", whereby each +child window is equal to a single document. The application then manages the usual actions such as providing methods for the child +window interaction such as cut or copy. Extending this concept with the document-view model enhances the possibilities by far: imagine +that you can open as much windows as you like within the main window and that a new child window can be a new view of a document that +is already shown by another child window. The management for this requires a separation into the already described three objects model, +but doesn't limit the actual number of instances of the documents as well as the views. + +Fortunately, Qt 2.1 contains the possibility to create such applications and KDevelop provides you with the according application +frameworks for both, Qt-only programs as well as KDE 2 applications with the same interface methods- so it is adequate wether you want +to develop for one of these. Using KDE 2 interfaces will offer you still more possibilites by library functions as well as +inter-process communication, but those are special aspects that are to cover by separate introductions to these techniques. + +Now you are prepared for following the development for KDE 2 - just follow the next chapter to get a first look at the functionality +already provided by KDevelop when creating applications. There, we will generate the framework for our tutorial application +KScribble and describe the practical aspects of programming MDI applications. + + + + +The MDI Framework + +If you're already familiar with previous versions of KDevelop, you will know that your IDE uses so-called "frameworks" as a starting +point of application development. These frameworks by default contain a support for a generic document-view model, but were limited to +SDI (Single Document Interface, one window with one view area) model structures. From KDevelop 1.1 on, the application wizard is +capable of a lot more than the previous versions: it offers some new project types especially for those developers that want to stay +up-to-date with the upcoming KDE 2 as well as for Qt 2.1. One major extension are MDI application frameworks for both, KDE 2 and Qt +2.1. These frameworks differ only in the use of some library functions such as file dialogs or message boxes as well as the used +toolbar and statusbar classes - the KDE version uses KDE 2 methods, the Qt version the according Qt functions. + +To create the fist step of this tutorial application KScribble, be sure that you have followed the instructions in chapter 2 +of this tutorial handbook: setting up KDE 2. If that went all right, nothing can go wrong. If you couldn't set up the KDE 2 libraries, +be sure that you have Qt-2.1 installed and set up KDevelop for that at least. You can follow this tutorial by choosing the according Qt +framework as well (which has the differences as mentioned above: other method calls for dialogs and GUI components). + + +Creating an MDI Framework + +Now we will start jumping into development by creating the frame application for KScribble. Start KDevelop and choose +"Project"-"New" from the menubar to invoke the application wizard. On the first page, you will be shown a tree of project types. These +contain KDE and Qt projects. There, select "KDE 2 MDI" from the KDE section. If you only have Qt 2.1 installed, choose "Qt 2.1 MDI" +from the Qt section. Then select "Next", enter "KScribble" as project name and "1.0" as version number. Add your name +and email address into the according fields and you're done. Click on the "Create" button and KDevelop will generate our first version +of KScribble while you can watch the output in the last page of the wizard. Finally, press "Exit" to return to KDevelop. In +the output window you will see an additional message showing that the messages file has been set up for your project, which will be +important to translate KScribble into other languages. + + + +Overview + +Now it is important to have an understanding where to find what in the generated sources and where your place as a programmer can be +found to make KScribble a unique KDE application. + +First of all, in the Classviewer you will see three already created classes, KScribbleApp, KScribbleDoc and +KScribbleView. As explained above, each of them has a certain part within the application; the App class builds the main +window and coordinates user interaction, the Doc class maintains the documents that an application can manipulate; finally the View +class is responsible for user interaction with the child windows and communicates with the document connected to it. This has several +consequences: to make a good use of the provided functionality, the programmer is bound to use the given View class. By default, the +View inherits QWidget as a minimum requirement, but you're by far not limited to that. But inheriting from another class is +not too much work and finally there is also the possibility to use a QMainWindow or KTMainWindow for example as the +class to inherit and use another class that manages the view. + +In the next chapter we'll continue with extending KScribble to manage it's documents. After that we'll implement the user +interaction and you will see the first functionality that is unique to our application: we can draw pictures, load and save them. + + + + +Defining the Documents + +The first step when creating an application based on the Document-View model should always be to think what kind of data the +application has to manage. This decides how the view class will look like but especially how the document clas will read and write data +to and from files and offer methods to manipulate the data. As KScribble will be a simple drawing application that operates on +graphical data, we will use the Qt class QPixmap for storing our paintings while it is edited. QPixmap also offers +simple methods to read and write pictures into files, so the serialization of the document data is done in just two lines, one for +reading and one for writing. Further, we need to define a pen that draws into a document, set it's width and color and make it +available for the view class to retrieve the pen - actually you want the view offering the drawing methods, but the document as the +central element for all views has to hold the pen originally, because two views of the same document would otherwise use different +pens! + +Therefore to define how our document class should work, we will add one instance of QPixmap, one of QPen and edit the +methods newDocument(), openDocument() and saveDocument(). + + +Adding the Instances + +Open the file kscribbledoc.h by selecting it in one of the fileviewers or by a click on the classviewer over the class +KScribbleDoc. Then add the lines marked with -> from the following code snippet: + +-> #include <qpixmap.h> +-> #include <qpen.h> + + class KScribbleDoc + { + +-> protected: + +-> QPen currentPen(){ return pen;}; + +-> int penWidth() +-> { return pen.width(); } + + public slots: + void updateAllViews(KScribbleView *sender); + + protected: + +-> QPixmap buffer; + + private: +-> QPen pen; + /** the modified flag of the current document */ + bool modified; + + +As you see, we added pen and buffer as well as currentPen() and penWidth(). As pen is declared private, we offer a +possibility to retrive the pen as well as the pen width. As these are already implemented within the classdeclaration, we don't have to +add them to the implementation file, where we're turning to now. + + + +Initialization of the Document + +Select the method newDocument() in the KScribbleDoc class to jump to the method declaration. Here, we're only adding +one line, marked with the arrow: + kscribbledoc.cpp + + bool KScribbleDoc::newDocument() + { + ///////////////////////////////////////////////// + // TODO: Add your document initialization code here +-> pen=QPen( Qt::black, 3 ); + ///////////////////////////////////////////////// + modified=false; + return true; + } + + +This initializes the pen with the color black and width of 3 pixels; the QPen class has some more constructors, but this one lasts our +needs here. + + + +Implementing the Serialization + +What is left to do is to define how to open and save our pictures. This is done in the according methods: + + bool KScribbleDoc::openDocument(const QString &filename, const char *format /*=0*/) + { + + QFile f( filename ); +-> //if ( !f.open( IO_ReadOnly ) ) +-> // return false; + ///////////////////////////////////////////////// + // TODO: Add your document opening code here +-> if(!buffer.load( filename, "PNG" )) +-> return false; + ///////////////////////////////////////////////// +-> //f.close(); + + + bool KScribbleDoc::saveDocument(const QString &filename, const char *format /*=0*/) + { + QFile f( filename ); +-> // if ( !f.open( IO_WriteOnly ) ) +-> // return false; + + ///////////////////////////////////////////////// + // TODO: Add your document saving code here +-> if(!buffer.save( filename, "PNG" )) +-> return false; + ///////////////////////////////////////////////// + +-> //f.close(); + + + +Add the lines marked with the arrow again to your code. What we did here is to comment out the passages where the file +filename is opened, because that is done automatically by the load and save methods of QPixmap, which we add instead. Other +documents may open a file and read in its contents such as text lines or whatever, so the QFile methods are already present in the +codeframe. As save() and load() return a boolean value if the operation was successful, we're returning false if not, +so the rest of the framework gets a return value and can give out warnings if the operation was not successful. +The load() and save() methods now are already provided in QPixmap. They require the filename and the format as +argument; the source framework on the other hand does not call the document methods with the format yet. If only one format is +used, it lasts to set the format here. other methods could detect the format for example- but we will turn to this later. For now, +we're using "PNG" as format; see QImageIO for more details about the image formats that can be opened. + +Now we're already finished defining our document structure. The QPixmap buffer serves us as a buffer storing the original picture +contents while we're working on it, the pen is a valid pen for all views connected to the document. Note that the initialization of the +pen is done in newDocument(). This method is always called after the constructor within the framework internally, so you +should add document instances initializations there as we did with the pen. + +In the next chapter we will turn to the view class to define how the view shall cooperate with the user as well as how it accesses the +document- and then we'll be ready to paint ! + + + + +Defining the View + + +Interactivity with the User + +In this chapter we'll turn to the view class of KScribble to define how the child windows shall work. First of all, we notice that +KScribbleView is derived from QWidget by default. That is the minimum requirement for a child window, but it lasts already to fullfill +our needs. When it comes to defining a new widget's behavoir, we need to know how the user shall interact with the window. In our +example, this would be obviously the mouse. Therefore, we have to overwrite some virtual methods from QWidget that process mouse +events the widget receives. What we need is to know when the user presses a mouse button, because the drawing shall only take place +when the mouse is pressed. Then we need to know when the mouse is moved (to know where it moves to) as well as when it is released-to +finish the stroke the user has drawn. Further we want our picture to be painted on the window and resized if the user decides to resize +the window he draws into. As members we will also add a QPointArray polyline and a boolean value mousePressed. Add the code with the +arrow to your include file for the class KScribbleView: + + kscribbleview.h + +-> #include <qpointarray.h> + + class KScribbleView + { + . + . + protected: + virtual void closeEvent(QCloseEvent* ); + +-> virtual void mousePressEvent( QMouseEvent * ); +-> virtual void mouseReleaseEvent( QMouseEvent * ); +-> virtual void mouseMoveEvent( QMouseEvent * ); +-> virtual void resizeEvent( QResizeEvent * ); +-> virtual void paintEvent( QPaintEvent * ); + + KScribbleDoc *doc; + +-> private: +-> bool mousePressed; +-> QPointArray polyline; + + } + + + + +Reimplementing Event Handlers + +Now we're coming to the actual implementation of the event handlers. As explained in The KDE Library Reference Guide, Qt has a good way of handling user events, especially when they target on to widgets. QWidget as a +baseclass preselects the events and provides basic event handlers which, as they are declared as virtual, we can overwrite to define +how our widget shall react on user actions. One is already overwritten: the closeEvent() method. This is needed, because our +main window, represented in the App class, already preselects closing child windows and handles this; therefore the default event +handler, which just accepts the closing, must be overwritten to prevent that and let the App class do the job. + +First of all, we have to declare the widget default behavoir in the constructor by initializing members and setting predefined values: + + kscribbleview.cpp + + + KScribbleView::KScribbleView(KScribbleDoc* pDoc, QWidget *parent, const char* name, int wflags) + : QWidget(parent, name, wflags) + { + doc=pDoc; + +-> setBackgroundMode( QWidget::NoBackground ); +-> setCursor( Qt::crossCursor ); +-> mousePressed=false; +-> polyline=QPointArray(3); + } + + +We're setting the background to NoBackground, a cursor (crossCursor) and initialize mousePressed and polyline. Then we'll start +implementing our first event handler, mousePressEvent(), to recognize when the user presses the mouse and where: + +Note: the following implementations have to be inserted completely, so the lines to add are not marked with an arrow ! + +void KScribbleView::mousePressEvent( QMouseEvent *e ) +{ + mousePressed = TRUE; + polyline[2] = polyline[1] = polyline[0] = e->pos(); +} + + +Here, we're setting mousePressed to true, so we have stored this event somehow. The second line is not so obvious: we're storing the +position where the mouse was pressed into our array's first three elements. As the array is a QPointArray, it can store values of the +type QPoint (which contain an x and y value themselves). What we will do with this array is to store positions of the mouse and create +the drawing routine from there in the mouseMoveEvent: + +void KScribbleView::mouseMoveEvent( QMouseEvent *e ) +{ + if ( mousePressed ) { + + QPainter painter; + painter.begin( &doc->buffer ); + painter.setPen( doc->currentPen() ); + polyline[2] = polyline[1]; + polyline[1] = polyline[0]; + polyline[0] = e->pos(); + painter.drawPolyline( polyline ); + painter.end(); + + QRect r = polyline.boundingRect(); + r = r.normalize(); + r.setLeft( r.left() - doc->penWidth() ); + r.setTop( r.top() - doc->penWidth() ); + r.setRight( r.right() + doc->penWidth() ); + r.setBottom( r.bottom() + doc->penWidth() ); + + doc->setModified(); + bitBlt( this, r.x(), r.y(), &doc->buffer, r.x(), r.y(), r.width(), r.height() ); + } +} + + +This event handler is probably the most difficult, so we will do a step-by-step walkthrough to understand what's been done. First of +all, the event handler receives all mouse movements over the widget. But as we're only interested in the move if the mouse is pressed, +because that is the time to draw, we have to ask if mousePressed is true. That has been done by the mousePressEvent() event +handler before, so we don't have to take care for more. Now we're starting the painting action. First we create a QPainter and let it +draw into the buffer of the document. This is important, because the document's buffer contains the real contents, the view only acts +as a communicator between the document and the user. We get the pen from the document instance as well by calling +currentPen(). The next three lines assign the values inside the polyline QPoint array, setting point 2 to 1, 1 to 0 and 0 to +the point to where the move went (this is the contents of the event we're interested in). Assuming we've just pressed the mouse (so all +three values of the array contain the pressing position) and the first mouse move event appears that contains the first position to +draw a line to; this value is moved into the first position in the array again. You may wonder why we need three points in the array +then, if we're only interested to draw a line from one position to the next. The following lines explain that: after drawing into our +buffer is finished (with drawPolyline() and painter.end()), we create a rectangle r and use boundingRect() +from QPointArray to get a QRect that contains all three points. Therefore we need three values to have a most-complete rectangle. Then +we use normalize() to have the leftmost and topmost values the smallest (as coordinates are counted from top->bottom and +left->right). The next thing to do is adapt the size of the rectangle by the size of the pen, because the pen has a thickness we get +with penWidth() and widen the rectangle by the width of the pen. (Imagine the mouse movement was only two pixels away but the +pen thickness is set to ten- then the rectangle wouldn't contain the whole painted area). + +Finally, we set the document modified and use the bitBlt() function to copy the rectangle out of the buffer into the widget. +bitBlt operates bitwise and is very fast, so that it is a good method to copy the painted area from the buffer on the widget instead of +repainting the whole window. It's arguments are: first the object to draw to (the destination), here it is our widget, so we have to +use the pointer this. The next two arguments give the destination topleft position to start copying to, then follows the +source to draw from with it's coordinates now including the width and height. As the pixmap coordinates are the same as the coordinates +that the widget uses (because our pixmap is drawn into the topleft corner), the coordinates for the source and destination topleft +point are the same. This is something to watch out for in some of the next step, so it may be mentioned here already. + +Next comes what happens if we release the mouse button. Then the drawing has to stop when we move the mouse again, so we set +mousePressed to false here: + +void KScribbleView::mouseReleaseEvent( QMouseEvent * ) { + mousePressed = FALSE; +} + + +Now we have finished implementing the user interaction when it comes to the actual drawing operations. The example shows it's not too +complicated to use a document-view model. Just create your document instance so that it contains the contents and copy the contents to +your view. + + + +Painting and Resizing the Document + +What is left to do are two other virtual event handlers that need a reimplementation. First of all, we have to take care that our +picture gets painted into the window when something else happens: when you open another window that obscures the painting - then you +change to your painting again, but it won't be there, unless your paint event gets processed to redraw the picture: + +void KScribbleView::paintEvent( QPaintEvent *e ) +{ + QWidget::paintEvent( e ); + + QRect r = e->rect(); + + bitBlt( this, r.x(), r.y(), &doc->buffer, r.x(), r.y(), r.width(), r.height() ); +} + + +This method also uses bitBlt() to draw the picture from the buffer into the widget. Here, we only need the rectangle that gets +repainted, so we retrieve the geometry from the event ( e->rect() ) and use the coordinates for bitBlt(), just as we +did in the mouseMoveEvent(). + +The only thing where we didn't do anything about is the size of the pixmap. We didn't set it anywhere - we did not even use the pixmap +in the document class except for loading and saving - but these methods aren't called when creating a new picture. So it seems our +pixmap doesn't have a size nor a predefined background at all (even if we would have set the size, the contents would be random colors +because it is uninitialized). +On the other hand we have the fact that the KScribbleView instances get resized when they show up- at least with the minimum size. This +is the point where we can add the initialization as well, because the user can change the size manually and the widget will receive a +resize event as well. For reasons of simplicity, we want to set the pixmap size the same size the widget has. All this is done in the +event handler resizeEvent(): + +void KScribbleView::resizeEvent( QResizeEvent *e ) +{ + QWidget::resizeEvent( e ); + + int w = width() > doc->buffer.width() ? + width() : doc->buffer.width(); + int h = height() > doc->buffer.height() ? + height() : doc->buffer.height(); + + QPixmap tmp( doc->buffer ); + doc->buffer.resize( w, h ); + doc->buffer.fill( Qt::white ); + bitBlt( &doc->buffer, 0, 0, &tmp, 0, 0, tmp.width(), tmp.height() ); +} + +Here, we first call the resizeEvent handler or QWidget. Then we calculate the size of our picture - because we can resize a window to +make it smaller or bigger, we have to separate these two cases: if we resize to a smaller geometry, the picture shall still contain +it's contents. On the other hand, if we resize to a bigger widget, we have to resize the pixmap as well to that bigger size. The +calculated values are stored in w and h. But before the resize takes place, we create a copy of our pixmap in the document in tmp. Then +we resize the buffer (the document), fill it with white color and then copy back the contents from tmp into buffer. This resizes our +pixmap always syncronous with the widget that displays it but doesn't loose contents which is outside the visible area if the resizing +makes the widget smaller. + +Now our first application has gained a step where we can test it's functionality. Just hit "Run" in KDevelop and after KScribble shows +up, you're ready to paint your first picture with it ! + + + + +Extending the GUI + +As we have seen, we have already provided KScribble the ability to open and save pictures with the document class and enabled user +interaction by overwriting virtual methods in the view class and we gained the first functionaliy - we can draw pictures as well. But +when we created the QPen instance in the document class, we set some pre-defined values for the pen; the color is black and the pen +width set to 3 pixels. As you usually want to change these values in a drawing application, we have to enhance the main GUI by +providing ways to set these, according to the currently active window and document connected to it. This chapter will therefore +introduce you to: + + + +adding a new menu to the menubar + + +extending the toolbar with icons for the actions defined in the menubar + + +creating a new dialog with the KDevelop Dialogeditor + + +connecting the new commands of the menubar and toolbar to calling the dialogs. + + +enabling the document class to let us change the pen values + + + + +Further, we also add a method to delete the document contents at all with a menubar command. + + +Adding the "Pen" Menu + +As the title of this section says, we will add a menu for setting the pen values of the documents here. Menus that are inserted into +the menubar are instances of QPopupMenu, and you can have a look at how the current menubar is created when you switch to the +KScribbleApp class, method initMenubar(). You will see that the menubar items are created in the order they appear on the +menubar - but this isn't necessary. There are two things important on how the menubar will look like: + + +in the menus the order of the menuitems + + +in the menubar the order of inserting the popup menus. + + + + +Last but not least you have to create menus first with calling the constructor. The class declaration already contains the pointers to +the popup menus, so we will have to add our "Pen" menu here first: + +kscribbleapp.h + +class KScribbleApp +{ +. +. + private: + QPopupMenu* pPenMenu; + +} + + +Now we are going to create the menu itself. Change to the implementation of the method KScribbleApp::initMenuBar() and add the +lines marked with an arrow: + +void KScribbleApp::initMenuBar() +{ +.. + +-> /////////////////////////////////////////////////////////////////// +-> // menuBar entry pen-Menu +-> pPenMenu = new QPopupMenu(); +-> pPenMenu->insertItem(i18n("&Color"), ID_PEN_COLOR); +-> pPenMenu->insertItem(i18n("&Brush"), ID_PEN_BRUSH); + + menuBar()->insertItem(i18n("&Edit"), pEditMenu); +-> menuBar()->insertItem(i18n("&Pen"), pPenMenu); + menuBar()->insertItem(i18n("&View"), pViewMenu); + + +-> connect(pPenMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); +-> connect(pPenMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); +} + + +You see that we first create the menu with new QPopupMenu(). Then we use the insertItem methods to add two menu entries, Color +and Brush. The visible commands are inserted with the method i18n(), which ensures that you can internationalize your +appliction. So as a general rule, you would declare all visual text that will appear later by the method i18n(). Qt-only +programs using Qt > 2.0 would use the according method tr() instead of i18n(), as Qt has it's own ways of +internationalizing applications. The second argument is a macro, the ID of the menubar item. This ID is a number that we have to set +using #define in the file resource.h, where you will see all other already used ID's declared. There are also other ways to insert +menus by directly connecting a slot to the inserted entry, but the application framework uses ID's to select which action has been +activated- and highlighted. Therefore each menu entry, independent of the popup menu it appears, has to be a unique number, and as we +can hardly remember numbers later, setting a #define for the ID is a nice solution. The popup menu is now inserted into the menubar +with insertItem() as well, and with the pointer to the menu as second argument. + +Note that we inserted the popup menu after the "Edit" menu and before the "View" menu, so it will appear between those menus later in +the menubar. What is also important when creating menus is that they should be available to the user with shortcuts; ususally in menus +you will see underlined characters that the user can jump to directly by pressing ALT and the according underlined letter of the +menuitem. As a programmer, you have to set this character by a leading ampersand, so the "Pen" menu will later be accessible via the +keyboard by pressing ALT+P. Within the menu, the user can press another button to go directly to the command he wants to, so in the +menu all items should have this kind of shortcuts as well. Note that you should write item insertions together in groups that have the +same visible access, so you can keep a better overview of the characters you already used so that there are no menu accelerators used +twice. (this is also important for your translators: in other languages the used accelerator may not be available in the translated +word, so they have to set some accelerators again.) + +In the last two lines we're connecting the pen menu with two slots: one for when the menu signals that it is activated and the action +should be executed, and one for when it is highlighted. That allows making a statusbar help message available for the user. You can +have a look at the methods the menu is connected to, they contain switch statements where the sent menu ID is compared and the +following action called. + +What is left to do is to add the #define statements to the file resource.h: + +resource.h + +/////////////////////////////////////////////////////////////////// +// Pen-menu entries +#define ID_PEN_COLOR 14010 +#define ID_PEN_BRUSH 14020 + + +You will see that the numbers are unique for these entries- you have to watch out not to set the same number for two entries- but if it +happens by accident, there's still the compiler that informs you about redefining. + +This is currently all you have to do to add a new menu for your menubar. The actions they will execute are: "Color" will call a color +selection dialog, "Brush" will call a dialog (which we still have to create) to select the brush width. + +But first we'll extend the toolbar as well by two icons for these actions in the next section. + + + +Adding Toolbar Buttons + +Whenever you think that some new commands should be made available by toolbar buttons as well because they are often used and you want +to offer additional functionality, you can easily do that by adding buttons in the framework's initToolBar() method of the +App class. Here, we decide to add a button for both menu entries in the Pen-menu, but those need icons - which you can either +find in the KDE directory /toolbar or, when you don't find an icon that matches your action, have to create yourself. KIconEdit is very +suitable to paint icons, so we will first create them. Choose "New" from the KDevelop "File" menu and select "Icon" as the filetype. +The first icon will be named "pencolor.xpm". Now we have to select where we want to have the icon created in our project directory. +Press the directory selection button and change to your project directory containing the KScribble sources. Then create a new +directory "toolbar". Change to that directory and press "OK". The new icon will then be created in the new directory "toolbar" and will +be opened by KIconEdit within KDevelop automatically. Paint something that will signalize the user what the button is intended to do, +save the pixmap and then switch to the RFV / LFV in KDevelop. Select the icon by a right mouse button press and select "Properties" +from the popup menu. You will see that the icon is included in the distribution, but for your program to find the icon again later, you +have to set the installation destination as well. Check the "install" option and enter into the line now active below: + +$(kde_datadir)/kscribble/toolbar/pencolor.xpm + +This will install the pixmap in the KDE file system hierarchy's data directory, where each application has its subdirectory containing +additional files needed by the application. Icons have to be installed into another subdirectory "toolbar", so the application's icon +loader can find the pixmaps for your program. + +After you're finished, repeat all these above steps with the second icon for selecting the pen width. Name this pixmap "penwidth.xpm". + +Now we only have to insert the buttons into the toolbar; add the lines marked with the arrow into your code: + +void KScribbleApp::initToolBar() +{ +.. + toolBar()->insertButton(BarIcon("editcopy"), ID_EDIT_COPY, true, i18n("Copy")); + toolBar()->insertButton(BarIcon("editpaste"), ID_EDIT_PASTE, true, i18n("Paste")); + toolBar()->insertSeparator(); +-> toolBar()->insertButton(BarIcon("pencolor"), ID_PEN_COLOR, true, i18n("Color") ); +-> toolBar()->insertButton(BarIcon("penwidth"), ID_PEN_BRUSH, true, i18n("Width") ); +-> toolBar()->insertSeparator(); + toolBar()->insertButton(BarIcon("help"), ID_HELP_CONTENTS, SIGNAL(clicked()), +.. +} + +Here, we use the methods of KToolBar to insert buttons. The first argument, BarIcon(), tells the method to load the icon for +the button. What seems unusual is that we don't have to care for the file extension. The preferred format for KDE 2 is *.PNG, but it +works with xpm's as well. (You could use ImageMagick for that as well which can do that- or use KScribble in a later step to +convert your icons to PNG !) + +The second argument is again the ID. The commands are then automatically activated, as the toolBar() is already connected to +the same methods as the menubar is for signal activated(). The third argument stands for "available" when true, "deactivated" +when false; as we want to have these available, we set this to true. At last, we add a tooltip for the the buttons, which we also +embrace with i18n() to allow internationalization. + +Now you're done for now- the GUI is extended at least visually. You can compile and run KScribble again and see how it looks like- of +course the new items in the menubar and toolbar can't execute any action - that is what we're going to add in the next section. +You will also note that the toolbar icons we added are not displayed - which is because we didn't install KScribble and so they can't +be found. All other used icons are already shipped with the KDE libraries, so these are already visible. + + + +Creating the Pen Width Dialog + +As weve already created the according menubar and toolbar commands, we now have to build the first dialog to set the pen width. For +this, select "New" from the KDevelop "File" menu and select "Qt/KDE Dialog". Then enter the dialog file name as kpenbrushdlg, +the extension will be automatically added. Enter "OK" and the dialogeditor opens an empty widget that will be our dialog background. +When constructing a dialog, we have to think about what is really needed by the user; here, we need a label to display what will be +set; a spinbox with up and down buttons to set the pen width value and three buttons, one for resetting the pen width to the default +value, one to cancel the dialog and one for taking over the new value - the OK button. In this order we will add the items to the +dialog - which is important because the tab-focus follows the order by which the widgets are created. So if youre starting with the OK +button, then the spinbox and then the cancel button, the input focus will change from the ok button to the spinbox and then to the +cancel button - which is not what the user expects. The tab focus should follow the widgets items top-down from left to right, so we +have to construct the dialog in this order as well. To add items to the dialog, select the "Widgets" tab on the left pane. There you +have all available widgets present by icons to construct your dialog. Pressing a widget button will create the new item and place it at +the top-left corner of the widget. From there, you can place it with the mouse to the position you would like it to show up. Further, +when a widget item is selected, you can set the according values in the "Widget Properties" pane on the right. + +The Label: press the "QLabel" button on the "Widgets" tab and place it at position x:50, y:20. Then select the "General" +section in the widget properties pane. Change the text in properity "Text" from "Label" to "Pen Width:". Adjust the width of the label +to a width that matches the label contents in x-direction; a width of 120 should last. You can do this either by using the mouse or set +the value in the "Geometry" section of the properties. + +The Spinbox: press the "QSpinBox" button on the "Widgets" tab and place it at the right of the label we created in the last +step. Now set the variable name in section "C++Code" to "width_spbox". The minimum and maximum values are 1 and 100, which should last +for setting the brush width. + +The Buttons: finally, we need the mentioned three buttons. The leftmost button will be the default button. Create a +QPushbutton and place it somewhere nicely on the bottom of the dialog, set the variable name to "default_btn" and the button text to +"Default". Proceed with the OK button with variable name "ok_btn" and the cancel button with variable name "cancel_btn" and set the +button text to "&OK" and "&Cancel". + +If youre fine with the layout of the dialog, choose "Generate complete sources" from the Build menu and set the classname to +"KPenBrushDlg", the inheritance to QDialog. After pressing "OK", the sources for the dialog are created and added to the project. Now +you can return to the editor view in KDevelop and we can add the code needed to give the dialog some execution purpose. + + + +Connections and Setting Up + +After we have created the GUI of the dialog, we have to add some functionality to the buttons and provide ways to set and retrieve the +selected value of the spinbox - because we want the dialog to display the current value when it gets called and to access the selected +value when the user pressed the OK button to quit the dialog. + +In the generated class for the dialog, KPenBrushDlg, you can see one method besides the constructor and the destructor, +initDialog(). This method implements the whole GUI construction, so we dont have to care for that anymore and we can go +directly to add the usual connections for the push buttons first. Add the lines marked by arrows to the constructor of the +dialog: + +KPenBrushDlg::KPenBrushDlg(int curr, QWidget *parent, const char *name) : QDialog(parent,name,true){ + initDialog(); + +-> connect(default_btn, SIGNAL(clicked()), this, SLOT(slotDefault())); +-> connect(ok_btn, SIGNAL(clicked()), this, SLOT(accept())); +-> connect(cancel_btn, SIGNAL(clicked()), this, SLOT(reject())); +} + + +This provides the functionality for the buttons on the bottom of the dialog when the user clicks the button. First, we set the default +button to execute a slot called slotDefault(). This slot is still to be implemented below, where we will set the default value +of the spinbox directly. + +The second connect() call connects the ok button to call the slot accept() provided by QDialog, as well as the cancel +button gets connected to QDialogs slot reject(). This will both close the dialog and will set the result value which we will +use later when we implement the method that calls the dialog to determine if we want to use the value set or to ignore any changes. + +Now we have to add two methods to set and retrieve the spinbox value: + +void setCurrent(int curr){ width_spbox->setValue(curr); } +int width() { return width_spbox->value(); }; + + +Add these methods to the class declaration with the modifier "public", as we want to set and retrieve the values when we call the +dialog to show up. The setCurrent() method will be used to set the current value the pen has, the width() method +returns us the selected with when the user presses OK and we want to know which value has been chosen. + +Last but not least, we need to implement the slotDefault() method: + +//kpenbrushdlg.h: +//method declaration: + +public slots: + void slotDefault(); + +//kpenbrushdlg.cpp: +//method implementation: + +void KPenBrushDlg::slotDefault() +{ + width_spbox->setValue(3); +} + + +This will set the default value to 3 pixels for the pen. + +Now were ready with our first dialog and we can turn to over to the other application classes to adapt some things and add the method +calls to invoke the dialog. + + + +Calling the Dialogs + +As you may guess, calling the dialogs means that we will not only implement calling our width selection dialog but also add the method +for selecting the pen color, but one after another. First, create a method slotPenBrush() in the class KScribbleApp: + +void KScribbleApp::slotPenBrush() +{ + slotStatusMsg(i18n("Setting brush width...")); + + // get one window with document for a current pen width + QWidgetList windows = pWorkspace->windowList(); + KScribbleView* m = (KScribbleView*)windows.at(0); + KScribbleDoc* pDoc = m->getDocument(); + int curr_width=pDoc->penWidth(); + + // create the dialog, get the new width and set the pen width for all documents + KPenBrushDlg* dlg= new KPenBrushDlg(this); + dlg->setCurrent(curr_width); + if(dlg->exec()){ + int width=dlg->width(); + for ( int i = 0; i < int(windows.count()); ++i ) + { + m = (KScribbleView*)windows.at(i); + if ( m ) + { + pDoc = m->getDocument(); + pDoc->setPenWidth(width); + } + } + } + slotStatusMsg(i18n("Ready.")); +} + +Here, we first have to access the window list and retrieve a pointer to a document - which can be a document of any window, because all +documents should have the same current pen width. Then we create an integer variable curr_width that stores the current pen width. + +Now we can call the dialog by creating the dlg instance of KPenBrushDlg. Then we set the current pen width by calling +dlg->setCurrent(), which method we added to the dialog. +By calling dlg->exec() we invoke the dialog. The if() statement ensures that the following code is only executed when +the result code of the dialog has the accept flag set - which means, the code is executed if the user pressed the OK button on the +dialog. + +Assuming the user changed the value and pressed OK, we have to set all documents to use the new pen width. For that we use the +for() loop and set every documents pen width to the width variable we retrieved before with dlg->width(). + +We dont have implemented the method setPenWidth() in the document class, so well do this right now: + + +kscribbledoc.h: + +public: + void setPenWidth( int w ){ pen.setWidth( w ); } + + +What is missing to execute any action is to add the methods that shall be called when the menu items are activated or the toolbar +buttons pressed. For this, we have to add the IDs to the slot commandCallback(), which selects and executes the according +methods we want to call if a menu or toolbar item was chosen: + +void KScribbleApp::commandCallback(int id_) +{ + switch (id_) + { + case ID_PEN_BRUSH: + slotPenBrush(); + break; + + case ID_PEN_COLOR: + slotPenColor(); + break; +.... + } +} + + +This addition also adds the slotPenColor() method to the execution list to set the pen color, which we will implement now: + +void KScribbleApp::slotPenColor() +{ + slotStatusMsg(i18n("Selecting pen color...")); + + QColor myColor; + int result = KColorDialog::getColor( myColor, this ); + if ( result == KColorDialog::Accepted ) + { + QWidgetList windows = pWorkspace->windowList(); + KScribbleDoc* pDoc; + KScribbleView* m; + for ( int i = 0; i < int(windows.count()); ++i ) + { + m = (KScribbleView*)windows.at(i); + if ( m ) + { + pDoc = m->getDocument(); + pDoc->setPenColor(myColor); + } + } + } + slotStatusMsg(i18n("Ready.")); +} + +When looking at the code, we see that we use another new method of KScribbleDoc to set the pen color. This one has to be implemented as +well: +kscribbledoc.h: + + /** sets the pen color */ + void setPenColor( const QColor &c ){ pen.setColor( c ); } + + +Watch out for adding the declaration of the two new methods slotPenBrush() and slotPenColor() to the class +KScribbleApp, so our class knows about these methods. + +Now youre ready ! Lets summarize what weve done in this chapter: + + + we first added menubar and toolbar commands/items for two dialogs that we want to call; + + + then we created the first dialog to set the pen width with the KDevelop dialogeditor + + + after that we created the methods we want to call by the menubar/toolbar items which invoke the dialogs and set the poperties we +wanted to change + + + finally, we added the needed set functions to the document so we are able to change the values after the dialogs get executed. + + + + +By this structure, you are provided the general way how to extend your application with more functionality and manipulating settings +that influence the behavoir of the document and view interaction. + + + + +Extended Views + +In this chapter were going to extend the functionality of our view widget by two enhancements: syncronized views and scrollviews. + + +Syncronizing Views + +Lets first explain what this will bring us and how were going to do it. While playing with KScribble, you may have noticed, that if +you open another view of a document by calling "Window"->"New Window", this new view works with the same data as the first view, and +does like any other view you create with that command. But when it comes to painting into the document, you can only do that in one +view - the other views are not displaying the document contents at the same time. If you obscure one view that doesnt contain the +actual contents with another window and then bring it up to the front again, it will display the acutal contents. That comes because +after a widget has been obscured and then activated again, it receives a paint event from the window system, which will call +KScribbleView::paintEvent() again and that finally redraws the contents of the area that has been obscured. What we want to +achieve is that all views should paint syncronous with the one the user actually paints to. In fact, you will see that this enhancement +is a really easy task. The document class already provides us a method updateAllViews(), which calls the update() +method on each view in the documents view list. This makes it very easy to syncronize the document contents - every time the contents +is changed, here by mouse movements (where we copy the changings to the buffer with bitBlt()), we just have to call +updateAllViews(this). The this pointer is needed, because the calling view doesnt need a repaint and the update() method is +only executed if the sender view is not the same as its own. + +What youve got to do here is only to call updateAllViews(this) at the end of the virtual methods mousePressEvent(), +mouseMoveEvent() and mouseReleaseEvent() - and youre done ! Take this as a general rule in your applications: each +time the contents of the document is changed by a view, call updateAllViews(). How the update has to be executed has to be +implemented in the widgets update() method; one may be content by setting e.g. the changed text in an editor, in our +application we just call repaint(), which generates a paint event and copies the contents of the document into the view again. + + + +Scrolled Views + +In this section we will add a functionality that is most often a thread to developers - if you cant use an already implemented widget +that provides the scrolling already. What does scrolling mean ? In our context, the problem begins where we want to open a picture that +is bigger than a view can display. therefore, the result will be that you can only see as much as the view provides, beginning from the +topleft corner; the rest will be cut away from the users view. A scrollview on the other hand is a widget that provides a scrollbar on +the right side and on the bottom of the widget by which the user can "move" the contents. In fact, it shows the same size of the +document contents, but the view area can be moved within the document, so each part can be displayed if the user wants to by moving the +scrollbar sliders up and down, left and right. Fortunately, Qt provides a class QScrollView that itself inherits from +QWidget and offers the same base functionality as an ordinary widget but manages the contents by scrollbars automatically - +with the additional option that the programmer can either just use an instance of the QScrollView, create the child widgets +to manage with the scrollview as parent and add them to the scrollview with addChild() or create a view by inheriting +QScrollView and draw into the viewport, which is a defined area inside the scrollview, instead of directly to the widget. The +difference here is that QScrollView provides a set of event handlers similar to the QWidget event handlers especially for the +viewport. So what was formerly a mousePressEvent() in our view will become a viewportMousePressEvent, a paintEvent() +will become a viewportPaintEvent etc. The second possibility will suite our needs to make KScribbleView a scrollable widget and so we +will have to make the following modifications: + + + +first we have to make the document use a size of its contents. This can be done by getting the size for an opened picture, for a +new picture we have to define a default start size. In other painting applications, this size can be changed most often by a command +provided by the user interface, e.g. a dialog that asks for the new width and height as well as a method to shrink the picture +contents to fit into that new size. + + +changing the inheritance of KScribbleView from QWidget to QScrollView + + +renaming the virtual methods to the according viewport methods of QScrollView + + +adapt the virtual event handlers to act on the geometry of the viewport. This means that the old implementation relies on the +geometries of QWidget starting at the topleft corner of a widget. If the view is scrolled and the topleft corner is not visible, we +have to ensure the positions retrieved from the QWidget coordinates are translated to viewport coordinates + + + + + +Sizing the Document Contents + +As already mentioned, we have to set a size to the document contents as well as to initialize this size and provide a method to +retrieve the size by the views. For this, we add a variable QSize size to KScribbleDoc as well as the method +docSize(): + +kscribbledoc.h: + +#include <qsize.h> + +... +public: + const QSize docSize(){ return size;}; + +private: + QSize size; + + + +Now we have to modify all methods that deal with initializing and opening the document contents - newDocument() and +openDocument(): + bool KScribbleDoc::newDocument() + { + ///////////////////////////////////////////////// + // TODO: Add your document initialization code here +-> size=QSize(300,200 ); + pen=QPen( Qt::black, 3 ); +-> buffer.resize(size); +-> buffer.fill( Qt::white ); + ///////////////////////////////////////////////// + modified=false; + return true; + } + + bool KScribbleDoc::openDocument(const QString &filename, const char *format /*=0*/) + { + + QFile f( filename ); + // if ( !f.open( IO_ReadOnly ) ) + // return false; + ///////////////////////////////////////////////// + // TODO: Add your document opening code here + if(!buffer.load( filename, format )) + return false; +-> size=buffer.size(); + ///////////////////////////////////////////////// + // f.close(); + + modified=false; + m_filename=filename; + m_title=QFileInfo(f).fileName(); + return true; + } + + +In newDocument(), we initialize the size with a default value of 300 pixels wide and 200 pixels high. This is enough for a +small picture for now and we could add a dialog for resizing as well if we want. +When it comes to opening a picture, we have to set the size to the size of the picture. This can be done by calling +QPixmap::size(), which we used in openDocument(). Then were done with setting the sizes and we can move on to +reimplementing KScribbleView and make it a scrollview. + + + + +Adapting the View + +As said above, we first have to change some things in the interface of KScribbleView. The following code shows these changings: + +#include <qscrollview.h> + +class KScribbleView : public QScrollView +{ + Q_OBJECT + + protected: + /** changed from mousePressEvent() overwriting QScrollView method */ + virtual void viewportMousePressEvent( QMouseEvent* ); + /** changed from mouseReleaseEvent() overwriting QScrollView method */ + virtual void viewportMouseReleaseEvent( QMouseEvent* ); + /** changed from mouseMoveEvent() overwriting QScrollView method */ + virtual void viewportMouseMoveEvent( QMouseEvent* ); + + /** commeted out because we have a document size defined */ +// resizeEvent( QResizeEvent* ); + + /** changed from paintEvent() overwriting QScrollView method */ + virtual void viewportPaintEvent( QPaintEvent* ); +} + + +Here, we changed the inheritance from QWidget to QScrollView first and added the according include file we need. Also we changed all +implemented event handlers that deal with interaction on the contents of the scrollview to the according methods QScrollView provides +for this purpose and commented out the resizeEvent. Now we can go over to the implementation of these methods and make use of the size +our picture has. As a view is always created after the document exists, we can resize the widget directly in the constructor to fit +this size and as well resize the contents (which is the viewport size): +#include <qsize.h> + +KScribbleView::KScribbleView(KScribbleDoc* pDoc, QWidget *parent, const char* name, int wflags) + : QScrollView(parent, name, wflags | WPaintClever | WNorthWestGravity | WRepaintNoErase) +{ + doc=pDoc; + mousePressed=false; + polyline=QPointArray(3); + +-> setResizePolicy ( QScrollView::ResizeOne ); +-> viewport()->setCursor( Qt::crossCursor ); + +-> QSize size=doc->docSize(); + // resize the viewport - this makes the resizeEvent obsolete +-> resizeContents(size.width(), size.height()); + // resize the widget to show up with the document size +-> resize(size); +} + + +Note that formerly, the resizeEvent() took care of resizing the drawing area to the same as the widget size. At the same time, +this changed the document size as well, so the document picture had always the same size as the widget. With the already initialized +size of the document (which we set in newDocument() and openDocument()), we just resize the contents by calling +resizeContents() provided by QScrollView with the size of the document. You may also notice that we changed the +cursor over the widget from the overall widget to the viewport widget, which we can retrieve with viewport(). Now we can +reimplement the event handlers. At first, we should take care for the paintEvent, as this is one of the most important ones, because it +gets called whenever the widget shows up or is resized. + +Attention: take care to comment out the resizeEvent() implementation! + +Now, the paint event will have to copy the pixmap in the buffer to the according position in the view. For this, we have to change the +destination of bitBlt() from this to viewport(), set the topleft position to 0,0 and set the target (the buffer) to +copy from the contentsX and contentsY position on into the viewport: +void KScribbleView::viewportPaintEvent( QPaintEvent *e ) +{ + bitBlt( viewport(),0,0, &doc->buffer,contentsX() ,contentsY() ); +} + +The contentsX() thereby is the position in x-direction of the scrollviews contents - which goes to position 0 in the +viewports absolute position, which is the topleft point visible in the scrollview. The same applies to the y-direction. This part is +sometimes hard to understand and you may have to do a bit "try and error" when implementing your own scrollviews. The other possible +call of bitBlt() would be to switch the values of the positions and inverting the contents values: + +bitBlt( viewport(), -contentsX(), -contentsY(), &doc->buffer, 0, 0 ); + +The last changes we need to do are changing the mouse event handlers. First, the mouseMoveEvent(), which changes to +viewportMouseMoveEvent(), has a bitBlt() call as well. Here, we have to apply the same chages as in the paint event. +Further, in the mousePressEvent() and the mouseMoveEvent(), we have retrieved the position of the mouse events with +e->pos(). This position now will deliver us a widget position - not the contents position, so we have to translate this to +draw into the correct position of the document with viewportToContents(): + void KScribbleView::viewportMousePressEvent( QMouseEvent *e ) + { + mousePressed = TRUE; +-> doc->polyline[2] = doc->polyline[1] = doc->polyline[0] = viewportToContents(e->pos()); + doc->updateAllViews(this); + } + + void KScribbleView::viewportMouseMoveEvent( QMouseEvent *e ) + { + if ( mousePressed ) { + .... + doc->polyline[1] = doc->polyline[0]; +-> doc->polyline[0] = viewportToContents(e->pos()); + painter.drawPolyline( doc->polyline ); + .... + r.setBottom( r.bottom() + doc->penWidth() ); + + doc->setModified(); +-> bitBlt(viewport(), r.x()-contentsX(), r.y()-contentsY() , +-> &doc->buffer, r.x(), r.y(), r.width(), r.height() ); + doc->updateAllViews(this); + } + } + + +In the viewportMouseMoveEvent(), we had to change the destination again from this to viewport() - and with that +translate the positions. This time, we used the second version of the call we used in viewportPaintEvent(), with subtracting +the contentsX and contentsY values to copy the rectangle containing the current painting into the correct position of the viewport. + +At last, we will apply a small change in conjunction with the update() method: why should we repaint the whole widget every +time ? This will reduce performance most often and lead to a so-called "flicker" effect. This effect sometimes occurs with widgets, but +there are some ways to reduce this behavoir. Instead of calling repaint(), we could call repaint(false) as well. This +will not erase the widget contents before redrawing it. As we copy the document contents directly into the widget, we dont need to +erase it anyway, because all the data will be overwritten anyway. In conjunction with QScrollView, we will reduce the painting +even more: we limit the update method to call repaint() on the viewport() widget, because that will call +viewportPaintEvent(). On the other hand, the painting area we use is the rectangle containing the document contents, which, when the +document size is smaller than the viewport size. So we can limit the paint event to the rectangle of the viewport where the document +is displayed, whose visible width and height we can retrieve and compose to the rectangle. Additionally, we use the erase parameter with false, +so the document area doesnt get erased: + +void KScribbleView::update(KScribbleView* pSender){ + if(pSender != this) + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} + + +Now youre ready ! This chapter has been one of the hardest to implement and understand - especially when it comes to the geometries +that change. But on the other hand, we gave our application a whole new functionality by the new scrollview and the syncronized views. + +With that, were moving on to the last chapter of our tutorial. There, we will apply only a few changes by making use of some new +methods of the KDE2 libraries, but as usual, this will bring us some interesting functionality - KScribble will be able to open and +save a whole range of picture formats and thereby we will remove the restriction of operating only on the png file format. + + + + +Using KImageIO with KScribble + +When it comes to images, the Qt and KDE libraries offer a wide variety of operations. Besides actual drawing routines, the libraries +support a whole set of image formats which they can read and write - all without any cost on our view. The main class for these +operations is QImageIO, which has a support library by KDE: KImageIO. As a preparation before we can make use of these nice methods, we +have to add the according library to KScribble: libkimgio. Open "Project"->"Options" in KDevelop and add the line -lkimgio to the +additional libraries to link KScribble with. + + +Preparing the Document + +Now we can go on and apply our changes. First, we have to remove the current restriction in the document class to only read and write +PNG files. Just replace "PNG" in the following methods with format, as given by the openDocument() and saveDocument() +methods: + +In method KScribbleDoc::openDocument(): + + if(!buffer.load( filename, format )) + +In method KScribbleDoc:: saveDocument(): + + if(!buffer.save( filename, format )) + +Then we have a default behavoir of these methods. Now, for now we dont have all available file formats yet. This will be our next +task, together with adapting the slots in KScribble that deliver us filenames. + + + +Registering File Formats + +To use KImageIO, we have to initialize the library first. For this, we add a call for registerFormats() in our +main() function: + +main.cpp: + +............ + KApplication app; + KImageIO::registerFormats(); + + if (app.isRestored()) +............ + +Note that this call is after the application is instanciated with KApplication app - without the application instance, our program will +not run, as KImageIO then doent know on which application to register the formats. The include file for this call will be added to +kscribble.h, as were going to use some of its methods in KScribbleApp: + +kscribble.h: + +#include <kimgio.h> + + + +Opening Images + +Now that we can make use of KImageIO, we have to apply the first change to the most important method of KScribbleApp: +openDocumentFile(). This method opens us any document until now only on the behalf of the filename. It just leaves out the +extension, as the format is not required by the document class by default. But as we have changed that, we just need a format - and +have to adapt the call for KScribbleDoc::openDocument() in the method openDocumentFile(): + +kscribble.cpp: + + void KScribbleApp::openDocumentFile(const char* file) + { + ........... + + else + { +-> QString format=KImageIO::type(file); +-> if(!doc->openDocument(file,format)) + KMessageBox::error (this,i18n("Could not open document !"), i18n("Error !")); + addRecentFile(file); + } + ............ + } + + +Of course, this works the same as using QString format=QImageIO::imageFormat(file);. Here, KImageIO delivers us the format of +the image and we can call the document to open the file by filename and format. (Another possiblity would be to detect the format in +the document class as well). + + + +Setting File Filters with KImageIO + +Here, were finishing our tutorial with the last section - we will adapt the file dialogs of KScribble to make use of file filters. +For these, KImageIO provides nice methods to give us the needed strings for all image file formats that are available for opening and +saving. The following implementation replaces the default file filter (which is in fact none - you have to change your own +applications file filter to your mime type accordingly) with the pattern() method of KImageIO: + + void KScribbleApp::slotFileOpen() + { + slotStatusMsg(i18n("Opening file...")); + +-> QString fileToOpen=KFileDialog::getOpenFileName(QDir::currentDirPath(), +-> KImageIO::pattern(KImageIO::Reading), this, i18n("Open File...")); + if(!fileToOpen.isEmpty()) + { + openDocumentFile(fileToOpen); + } + + slotStatusMsg(i18n("Ready.")); + } + + +Here, the mode in pattern() is set to Reading - which may differ from the patterns that are retrieved when set to writing. Now +we have finished opening files by its filename and format completely. What is missing to complete this structure, is setting the +patterns as well for saving a file. For that, the slotFileSaveAs() is called, which itself invokes the file dialog that +retrieves a file name. There, we will set the pattern mode to Writing: + +void KScribbleApp::slotFileSaveAs() +{ + slotStatusMsg(i18n("Saving file with a new filename...")); + +-> QString newName=KFileDialog::getSaveFileName(QDir::currentDirPath(), +-> KImageIO::pattern(KImageIO::Writing), this, i18n("Save as...")); + if(!newName.isEmpty()) + { + KScribbleView* m = (KScribbleView*)pWorkspace->activeWindow(); + if( m ) + { + KScribbleDoc* doc = m->getDocument(); + QString format=QFileInfo(newName).extension(); + format=format.upper(); + if(!doc->saveDocument(newName,format)) + { + KMessageBox::error (this,i18n("Could not save the current document !"), i18n("I/O Error !")); + return; + } + doc->changedViewList(); + setWndTitle(m); + } + } + slotStatusMsg(i18n("Ready.")); +} + + + + + +Adding Printing Functionality + +In this chapter we will show you how easy it is to implement printing functions using Qt. Its actually just one line of code for us to +do here, but we will start understanding who is actually doing the printing job. When the user presses the print button in +KScribble or chooses "Print" from the "File" menu, the slotFilePrint() method is called in KScribbleApp. +This method detects which child window is currently activ and creates a printer instance of the class QPrinter. Then it calls +the widgets printing method, KScribbleView::print(). Here, the framework already contains the base implementation - which +already shows you that for printing you just have to use QPainter which then draws on the printer. This method also calls the +printing dialog. + +What we have to do here is to use QPainter methods to draw the pixmap of the document connected to the view. As +QPainter already offers a whole set of methods drawPixmap(), we will of course use one of them: + +void KScribbleView::print(QPrinter *pPrinter) +{ + if (pPrinter->setup(this)) + { + QPainter p; + p.begin(pPrinter); + + /////////////////////////////// + // TODO: add your printing code here +-> p.drawPixmap(0,0,doc->buffer); + /////////////////////////////// + p.end(); + } +} + + +Here, we paint into the offset of the printer page at 0,0 with our buffer pixmap of the document. Thats all ! + +You can just go ahead and test it - now you can print any graphics that KScribble is able to open. + +This is now the end of our trour through creating a KDE 2 application. You can find the source package of KScribble +completely with an extension that adds cut, copy, paste and undo functions as well as dragn drop here: + +$(KDEDIR)/share/apps/kdevelop/examples/kscribble-1.0.tar.gz +The example tarball is locally installed and can be downloaded to your home directory, where you can untar it and test it. +After untarring the tarball with tar zxvf kscribble-1.0.tar.gz, load the project and call "Automake and autoconf" from the +"Build" menu in KDevelop, then call "./configure" from the same menu. The configure options are those of my installtion of the KDE 2 +and Qt 2.1, so you have to change them manually to match your installation path for these options. + +The appendix also contains the complete sourcecode for this package to read through online. + + + +Copyright + + KDevelop Copyright 1998,1999,2000 The KDevelop Team. + +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., 675 Mass Ave, Cambridge, MA 02139, USA. + + + + +KScribble-1.0 Example Sourcecode + + +Project Tarball + +The example tarball is locally installed and can be downloaded to your home directory, where you can untar it and test it. +After untarring the tarball with tar zxvf kscribble-1.0.tar.gz, load the project and call "Automake and autoconf" from the +"Build" menu in KDevelop, then call "./configure" from the same menu. The configure options are those of my installtion of the KDE 2 +and Qt 2.1, so you have to change them manually to match your installation path for these options. + +$(KDEDIR)/share/apps/kdevelop/examples/kscribble-1.0.tar.gz + + + +main.cpp + +/*************************************************************************** + main.cpp - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ +#include <kcmdlineargs.h> +#include <kaboutdata.h> +#include <klocale.h> + +#include "kscribble.h" + +static const char *description = + I18N_NOOP("KDE 2 example application"); + +static KCmdLineOptions options[] = +{ + { "+[File]", I18N_NOOP("image file to open"), 0 }, + { 0, 0, 0 } +}; + + +int main(int argc, char *argv[]) +{ + KAboutData aboutData( "kscribble", I18N_NOOP("KScribble"), + VERSION, description, KAboutData::License_GPL, + "(c) 2000, Ralf Nolden"); + aboutData.addAuthor("Ralf Nolden",0, "rnolden@kdevelop.de"); + KCmdLineArgs::init( argc, argv, &aboutData ); + KCmdLineArgs::addCmdLineOptions( options ); // Add our own options. + + KApplication app; + KImageIO::registerFormats(); + + if (app.isRestored()) + { + RESTORE(KScribbleApp); + } + else + { + KScribbleApp *kscribble = new KScribbleApp(); + kscribble->show(); + + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + if (args->count()) + for(int i=0;i<args->count();i++) + kscribble->openDocumentFile(args->arg(i)); + else + kscribble->openDocumentFile(); + + args->clear(); + } + + return app.exec(); +} + + + + +kscribble.h + +/*************************************************************************** + kscribble.h - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef KSCRIBBLE_H +#define KSCRIBBLE_H + + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +// include files for Qt +#include <qstrlist.h> +#include <qworkspace.h> + +// include files for KDE +#include <kapp.h> +#include <ktmainwindow.h> +#include <kaccel.h> +#include <kimgio.h> + +// forward declaration of the KScribble classes +class KScribbleDoc; +class KScribbleView; + +/** + * The base class for KScribble application windows. It sets up the main + * window and reads the config file as well as providing a menubar, toolbar + * and statusbar. In initView(), your main view is created as the MDI child window manager. + * Child windows are created in createClient(), which gets a document instance as it's document to + * display whereby one document can have several views.The MDI child is an instance of KScribbleView, + * the document an instance of KScribbleDoc. + * KScribbleApp reimplements the methods that KTMainWindow provides for main window handling and supports + * full session management as well as keyboard accelerator configuration by using KAccel. + * @see KTMainWindow + * @see KApplication + * @see KConfig + * @see KAccel + * + * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team. + * @version KDevelop version 1.1 code generation + */ +class KScribbleApp : public KTMainWindow +{ + Q_OBJECT + + public: + /** construtor of KScribbleApp, calls all init functions to create the application. + * @see initMenuBar initToolBar + */ + KScribbleApp(); + ~KScribbleApp(); + /** enables menuentries/toolbar items + */ + void enableCommand(int id_); + /** disables menuentries/toolbar items + */ + void disableCommand(int id_); + /** opens a file specified by commandline option + */ + void openDocumentFile(const char *file=0); + + protected: + /** queryClose is called by KTMainWindow on each closeEvent of a window. Against the + * default implementation (only returns true), this overridden function retrieves all modified documents + * from the open document list and asks the user to select which files to save before exiting the application. + * @see KTMainWindow#queryClose + * @see KTMainWindow#closeEvent + */ + virtual bool queryClose(); + /** queryExit is called by KTMainWindow when the last window of the application is going to be closed + * during the closeEvent(). + * Against the default implementation that just returns true, this calls saveOptions() to save the + * settings of the last window's properties. + * @see KTMainWindow#queryExit + * @see KTMainWindow#closeEvent + */ + virtual bool queryExit(); + /** saves the window properties for each open window during session end to the session config file, + * including saving the currently opened file by a temporary filename provided by KApplication. + * @see KTMainWindow#saveProperties + */ + virtual void saveProperties(KConfig *_cfg); + /** reads the session config file and restores the application's state including the last + * opened files and documents by reading the temporary files saved by saveProperties() + * @see KTMainWindow#readProperties + */ + virtual void readProperties(KConfig *_cfg); + /** event filter to catch close events for MDI child windows and is installed in createClient() on every + * child window. Closing a window calls the eventFilter first which removes the view from the connected + * documents' view list. If the last view is going to be closed, the eventFilter() tests if the document + * is modified; if yes, it asks the user to save the document. If the document title contains "Untitled", + * slotFileSaveAs() gets called to get a save name and path. + */ + virtual bool eventFilter(QObject* object, QEvent* event); + /** creates a new child window. The document that will be connected to it + * has to be created before and the instances filled, with e.g. openDocument(). + * Then call createClient() to get a new MDI child window. + * @see KScribbleDoc#addView + * @see KScribbleDoc#openDocument + * @param doc pointer to the document instance that the view will + * be connected to. + */ + void createClient(KScribbleDoc* doc); + /** accepts drag events for images */ + virtual void dragEnterEvent( QDragEnterEvent* ); + /** accepts drops and opens a new document + * for each drop */ + virtual void dropEvent( QDropEvent* ); + + private slots: + /** sets the main application window title each time the active MDI child window changes. */ + void setWndTitle(QWidget*); + /** switch argument for slot selection by menu or toolbar ID */ + void commandCallback(int id_); + /** switch argument for Statusbar help entries on slot selection. Add your ID's help + * here for toolbars and menubar entries. */ + void statusCallback(int id_); + /** add a opened file to the recent file list and update recent file menu*/ + void addRecentFile(const QString &file); + /** clears the document in the actual view to reuse it as the new document */ + void slotFileNew(); + /** open a file and load it into the document*/ + void slotFileOpen(); + /** opens a file from the recent files menu */ + void slotFileOpenRecent(int id_); + /** save a document */ + void slotFileSave(); + /** save a document by a new filename*/ + void slotFileSaveAs(); + /** asks for saving if the file is modified, then closes the actual file and window*/ + void slotFileClose(); + /** print the actual file */ + void slotFilePrint(); + /** closes all documents and quits the application.*/ + void slotFileQuit(); + /** reverts the last user action for the active window */ + void slotEditUndo(); + /** put the marked text/object into the clipboard and remove + * it from the document + */ + void slotEditCut(); + /** put the marked text/object into the clipboard + */ + void slotEditCopy(); + /** paste the clipboard into the document + */ + void slotEditPaste(); + /** clears the current document */ + void slotEditClearAll(); + /** sets the pen width */ + void slotPenBrush(); + /** sets the pen color */ + void slotPenColor(); + /** toggles the toolbar + */ + void slotViewToolBar(); + /** toggles the statusbar + */ + void slotViewStatusBar(); + /** creates a new view for the document in the active child window and adds the new view to the + * list of views the document maintains. + */ + void slotWindowNewWindow(); + /** changes the statusbar contents for the standard label permanently, used to indicate current actions. + * @param text the text that is displayed in the statusbar + */ + void slotStatusMsg(const QString &text); + /** changes the status message of the whole statusbar for two seconds, then restores the last status. + * This is used to display statusbar messages that give information about actions for + * toolbar icons and menuentries. + * @param text the text that is displayed in the statusbar + */ + void slotStatusHelpMsg(const QString &text); + /** gets called when the window menu is activated; recreates the window menu with all opened window titles. */ + void windowMenuAboutToShow(); + /** activates the MDI child widget when it gets selected from the window menu. */ + void windowMenuActivated( int id ); + + private: + /** save general Options like all bar positions and status as well as the geometry and + * the recent file list to the configuration file + */ + void saveOptions(); + /** read general Options again and initialize all variables like the recent file list + */ + void readOptions(); + /** initKeyAccel creates the keyboard accelerator items for the available slots and changes the menu accelerators. + * @see KAccel + */ + void initKeyAccel(); + /** initMenuBar creates the menubar and inserts the menupopups as well as creating the helpMenu. + */ + void initMenuBar(); + /** this creates the toolbars. + */ + void initToolBar(); + /** sets up the statusbar for the main window by initialzing a statuslabel. + */ + void initStatusBar(); + + /** Creates the main view of the KTMainWindow instance and initializes the MDI view area including any needed + * connections. + */ + void initView(); + + /** contains the recently used filenames */ + QStrList recentFiles; + + /** the configuration object of the application */ + KConfig *config; + /** the key accelerator container */ + KAccel *keyAccel; + /** the recent file menu containing the last five opened files */ + QPopupMenu *pRecentFileMenu; + /** the file menu */ + QPopupMenu* pFileMenu; + /** the edit menu */ + QPopupMenu* pEditMenu; + /** the pen menu */ + QPopupMenu* pPenMenu; + /** the view menu */ + QPopupMenu* pViewMenu; + /** the window menu */ + QPopupMenu *pWindowMenu; + /** pWorkspace is the MDI frame widget that handles MDI child widgets. Inititalized in + * initView() + */ + QWorkspace *pWorkspace; + /** the printer instance */ + QPrinter *printer; + /** a counter that gets increased each time the user creates a new document with "File"->"New" */ + int untitledCount; + /** a list of all open documents. If the last window of a document gets closed, the installed eventFilter + * removes this document from the list. The document list is checked for modified documents when the user + * is about to close the application. */ + QList<KScribbleDoc> *pDocList; + +}; + +#endif // KSCRIBBLE_H + + + + +kscribble.cpp + +/*************************************************************************** + kscribble.cpp - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +// include files for QT +#include <qdir.h> +#include <qprinter.h> +#include <qvbox.h> +#include <qwhatsthis.h> +#include <qtooltip.h> +#include <qtoolbutton.h> +#include <qimage.h> +#include <qdragobject.h> + + +// include files for KDE +#include <kiconloader.h> +#include <kmessagebox.h> +#include <kfiledialog.h> +#include <kcolordlg.h> +#include <kmenubar.h> +#include <klocale.h> +#include <kconfig.h> + +// application specific includes +#include "kscribble.h" +#include "kscribbleview.h" +#include "kscribbledoc.h" +#include "resource.h" +#include "kpenbrushdlg.h" + + +KScribbleApp::KScribbleApp() +{ + config=kapp->config(); + printer = new QPrinter; + untitledCount=0; + pDocList = new QList<KScribbleDoc>(); + pDocList->setAutoDelete(true); + setAcceptDrops(true); + + /////////////////////////////////////////////////////////////////// + // call inits to invoke all other construction parts + initMenuBar(); + initToolBar(); + initStatusBar(); + initKeyAccel(); + initView(); + + readOptions(); + + /////////////////////////////////////////////////////////////////// + // disable menu and toolbar items at startup + disableCommand(ID_EDIT_UNDO); +} + +KScribbleApp::~KScribbleApp() +{ + delete printer; +} + +void KScribbleApp::initKeyAccel() +{ + keyAccel = new KAccel(this); + + // fileMenu accelerators + keyAccel->connectItem(KStdAccel::New, this, SLOT(slotFileNew())); + keyAccel->connectItem(KStdAccel::Open, this, SLOT(slotFileOpen())); + keyAccel->connectItem(KStdAccel::Save, this, SLOT(slotFileSave())); + keyAccel->connectItem(KStdAccel::Close, this, SLOT(slotFileClose())); + keyAccel->connectItem(KStdAccel::Print, this, SLOT(slotFilePrint())); + keyAccel->connectItem(KStdAccel::Quit, this, SLOT(slotFileQuit())); + // editMenu accelerators + keyAccel->connectItem(KStdAccel::Cut, this, SLOT(slotEditCut())); + keyAccel->connectItem(KStdAccel::Copy, this, SLOT(slotEditCopy())); + keyAccel->connectItem(KStdAccel::Paste, this, SLOT(slotEditPaste())); + + keyAccel->connectItem(KStdAccel::Help, this, SLOT(appHelpActivated())); + + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_NEW, KStdAccel::New); + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_OPEN, KStdAccel::Open); + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_SAVE, KStdAccel::Save); + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_CLOSE, KStdAccel::Close); + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_PRINT, KStdAccel::Print); + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_QUIT, KStdAccel::Quit); + + keyAccel->changeMenuAccel(pEditMenu, ID_EDIT_CUT, KStdAccel::Cut); + keyAccel->changeMenuAccel(pEditMenu, ID_EDIT_COPY, KStdAccel::Copy); + keyAccel->changeMenuAccel(pEditMenu, ID_EDIT_PASTE, KStdAccel::Paste); + + keyAccel->readSettings(); +} + +void KScribbleApp::initMenuBar() +{ + /////////////////////////////////////////////////////////////////// + // MENUBAR + pRecentFileMenu = new QPopupMenu(this); + connect(pRecentFileMenu, SIGNAL(activated(int)), SLOT(slotFileOpenRecent(int))); + + /////////////////////////////////////////////////////////////////// + // menuBar entry file-Menu + pFileMenu = new QPopupMenu(this); + pFileMenu->insertItem(BarIcon("filenew"), i18n("&New"), ID_FILE_NEW); + pFileMenu->insertItem(BarIcon("fileopen"), i18n("&Open..."), ID_FILE_OPEN); + pFileMenu->insertItem(i18n("Open &recent"), pRecentFileMenu, ID_FILE_OPEN_RECENT); + + pFileMenu->insertItem(i18n("&Close"), ID_FILE_CLOSE); + pFileMenu->insertSeparator(); + pFileMenu->insertItem(BarIcon("filefloppy") ,i18n("&Save"), ID_FILE_SAVE); + pFileMenu->insertItem(i18n("Save &As..."), ID_FILE_SAVE_AS); + pFileMenu->insertSeparator(); + pFileMenu->insertItem(BarIcon("fileprint"), i18n("&Print..."), ID_FILE_PRINT); + pFileMenu->insertSeparator(); + pFileMenu->insertItem(i18n("E&xit"), ID_FILE_QUIT); + + /////////////////////////////////////////////////////////////////// + // menuBar entry edit-Menu + pEditMenu = new QPopupMenu(this); + pEditMenu->insertItem(BarIcon("undo"), i18n("&Undo"), ID_EDIT_UNDO); + pEditMenu->insertSeparator(); + pEditMenu->insertItem(BarIcon("editcut"), i18n("Cu&t"), ID_EDIT_CUT); + pEditMenu->insertItem(BarIcon("editcopy"), i18n("&Copy"), ID_EDIT_COPY); + pEditMenu->insertItem(BarIcon("editpaste"), i18n("&Paste"), ID_EDIT_PASTE); + pEditMenu->insertItem(BarIcon("delete"),i18n("&Clear All"), ID_EDIT_CLEAR_ALL); + + /////////////////////////////////////////////////////////////////// + // menuBar entry pen-Menu + pPenMenu = new QPopupMenu(); + pPenMenu->insertItem(i18n("&Color"), ID_PEN_COLOR); + pPenMenu->insertItem(i18n("&Brush"), ID_PEN_BRUSH); + + /////////////////////////////////////////////////////////////////// + // menuBar entry view-Menu + pViewMenu = new QPopupMenu(this); + pViewMenu->setCheckable(true); + pViewMenu->insertItem(i18n("&Toolbar"), ID_VIEW_TOOLBAR); + pViewMenu->insertItem(i18n("&Statusbar"), ID_VIEW_STATUSBAR); + + /////////////////////////////////////////////////////////////////// + // menuBar entry window-Menu + pWindowMenu = new QPopupMenu(this); + pWindowMenu->setCheckable(true); + + + /////////////////////////////////////////////////////////////////// + // menuBar entry helpMenu + QPopupMenu* pHelpMenu = helpMenu(i18n("KScribble" VERSION "\n\n(c) 2000 by\n" + "Ralf Nolden\nRalf.Nolden@post.rwth-aachen.de")); + + /////////////////////////////////////////////////////////////////// + // MENUBAR CONFIGURATION + // insert your popup menus with the according menubar entries in the order + // they will appear later from left to right + menuBar()->insertItem(i18n("&File"), pFileMenu); + menuBar()->insertItem(i18n("&Edit"), pEditMenu); + menuBar()->insertItem(i18n("&Pen"), pPenMenu); + menuBar()->insertItem(i18n("&View"), pViewMenu); + menuBar()->insertItem(i18n("&Window"), pWindowMenu ); + menuBar()->insertItem(i18n("&Help"), pHelpMenu); + + /////////////////////////////////////////////////////////////////// + // CONNECT THE MENU SLOTS WITH SIGNALS + // for execution slots and statusbar messages + connect(pFileMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); + connect(pFileMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); + + connect(pEditMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); + connect(pEditMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); + + connect(pPenMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); + connect(pPenMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); + + connect(pViewMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); + connect(pViewMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); + + connect(pWindowMenu, SIGNAL(aboutToShow() ), SLOT( windowMenuAboutToShow() ) ); + connect(pWindowMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); + connect(pWindowMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); + +} + +void KScribbleApp::initToolBar() +{ + + /////////////////////////////////////////////////////////////////// + // TOOLBAR + toolBar()->insertButton(BarIcon("filenew"), ID_FILE_NEW, true, i18n("New File")); + toolBar()->insertButton(BarIcon("fileopen"), ID_FILE_OPEN, true, i18n("Open File")); + toolBar()->insertButton(BarIcon("filefloppy"), ID_FILE_SAVE, true, i18n("Save File")); + toolBar()->insertButton(BarIcon("fileprint"), ID_FILE_PRINT, true, i18n("Print")); + toolBar()->insertSeparator(); + toolBar()->insertButton(BarIcon("editcut"), ID_EDIT_CUT, true, i18n("Cut")); + toolBar()->insertButton(BarIcon("editcopy"), ID_EDIT_COPY, true, i18n("Copy")); + toolBar()->insertButton(BarIcon("editpaste"), ID_EDIT_PASTE, true, i18n("Paste")); + toolBar()->insertSeparator(); + toolBar()->insertButton(BarIcon("pencolor"), ID_PEN_COLOR, true, i18n("Color") ); + toolBar()->insertButton(BarIcon("penwidth"), ID_PEN_BRUSH, true, i18n("Width") ); + toolBar()->insertSeparator(); + toolBar()->insertButton(BarIcon("help"), ID_HELP_CONTENTS, SIGNAL(clicked()), + this, SLOT(appHelpActivated()), true,i18n("Help")); + + QToolButton *btnwhat = QWhatsThis::whatsThisButton(toolBar()); + QToolTip::add(btnwhat, i18n("What's this...?")); + toolBar()->insertWidget(ID_HELP_WHATS_THIS, btnwhat->sizeHint().width(), btnwhat); + + /////////////////////////////////////////////////////////////////// + // INSERT YOUR APPLICATION SPECIFIC TOOLBARS HERE WITH toolBar(n) + + + /////////////////////////////////////////////////////////////////// + // CONNECT THE TOOLBAR SLOTS WITH SIGNALS - add new created toolbars by their according number + // connect for invoking the slot actions + connect(toolBar(), SIGNAL(clicked(int)), SLOT(commandCallback(int))); + // connect for the status help on holing icons pressed with the mouse button + connect(toolBar(), SIGNAL(pressed(int)), SLOT(statusCallback(int))); + +} + +void KScribbleApp::initStatusBar() +{ + /////////////////////////////////////////////////////////////////// + // STATUSBAR + // TODO: add your own items you need for displaying current application status. + statusBar()->insertItem(i18n("Ready."), ID_STATUS_MSG); +} + + +void KScribbleApp::initView() +{ + //////////////////////////////////////////////////////////////////// + // here the main view of the KTMainWindow is created by a background box and + // the QWorkspace instance for MDI view. + QVBox* view_back = new QVBox( this ); + view_back->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken ); + pWorkspace = new QWorkspace( view_back ); + connect(pWorkspace, SIGNAL(windowActivated(QWidget*)), this, SLOT(setWndTitle(QWidget*))); + setView(view_back); +} + +void KScribbleApp::setWndTitle(QWidget*){ + setCaption(pWorkspace->activeWindow()->caption()); +} + +void KScribbleApp::enableCommand(int id_) +{ + /////////////////////////////////////////////////////////////////// + // enable menu and toolbar functions by their ID's + menuBar()->setItemEnabled(id_, true); + toolBar()->setItemEnabled(id_, true); +} + +void KScribbleApp::disableCommand(int id_) +{ + /////////////////////////////////////////////////////////////////// + // disable menu and toolbar functions by their ID's + menuBar()->setItemEnabled(id_, false); + toolBar()->setItemEnabled(id_, false); +} + +void KScribbleApp::addRecentFile(const QString &file) +{ + if(recentFiles.contains(file)) + return; // it's already there + + if( recentFiles.count() < 5) + recentFiles.prepend(file); + else{ + recentFiles.remove(recentFiles.last()); + recentFiles.prepend(file); + } + + pRecentFileMenu->clear(); + + for ( int i =0 ; i < (int)recentFiles.count(); i++){ + pRecentFileMenu->insertItem(recentFiles.at(i)); + } + +} + +void KScribbleApp::createClient(KScribbleDoc* doc) +{ + KScribbleView* w = new KScribbleView(doc, pWorkspace,0,WDestructiveClose); + w->installEventFilter(this); + doc->addView(w); + w->setIcon(kapp->miniIcon()); + if ( pWorkspace->windowList().isEmpty() ) // show the very first window in maximized mode + w->showMaximized(); + else + w->show(); +} + +void KScribbleApp::openDocumentFile(const char* file) +{ + slotStatusMsg(i18n("Opening file...")); + KScribbleDoc* doc; + // check, if document already open. If yes, set the focus to the first view + for(doc=pDocList->first(); doc > 0; doc=pDocList->next()) + { + if(doc->pathName()==file) + { + KScribbleView* view=doc->firstView(); + view->setFocus(); + return; + } + } + doc = new KScribbleDoc(); + pDocList->append(doc); + doc->newDocument(); + // Creates an untitled window if file is 0 + if(!file) + { + untitledCount+=1; + QString fileName=QString(i18n("Untitled%1")).arg(untitledCount); + doc->setPathName(fileName); + doc->setTitle(fileName); + } + // Open the file + else + { + QString format=QImageIO::imageFormat(file); + if(!doc->openDocument(file,format)) + KMessageBox::error (this,i18n("Could not open document !"), i18n("Error !")); + addRecentFile(file); + } + // create the window + createClient(doc); + + slotStatusMsg(i18n("Ready.")); +} + + +void KScribbleApp::saveOptions() +{ + config->setGroup("General Options"); + config->writeEntry("Geometry", size()); + config->writeEntry("Show Toolbar", toolBar()->isVisible()); + config->writeEntry("Show Statusbar",statusBar()->isVisible()); + config->writeEntry("ToolBarPos", (int) toolBar()->barPos()); + config->writeEntry("Recent Files", recentFiles); +} + + +void KScribbleApp::readOptions() +{ + + config->setGroup("General Options"); + + // bar status settings + bool bViewToolbar = config->readBoolEntry("Show Toolbar", true); + menuBar()->setItemChecked(ID_VIEW_TOOLBAR, bViewToolbar); + if(!bViewToolbar) + { + enableToolBar(KToolBar::Hide); + } + + bool bViewStatusbar = config->readBoolEntry("Show Statusbar", true); + menuBar()->setItemChecked(ID_VIEW_STATUSBAR, bViewStatusbar); + if(!bViewStatusbar) + { + enableStatusBar(KStatusBar::Hide); + } + + // bar position settings + KToolBar::BarPosition toolBarPos; + toolBarPos=(KToolBar::BarPosition) config->readNumEntry("ToolBarPos", KToolBar::Top); + toolBar()->setBarPos(toolBarPos); + + // initialize the recent file list + config->readListEntry("Recent Files",recentFiles); + + for (int i=0; i < (int) recentFiles.count(); i++) + { + pRecentFileMenu->insertItem(recentFiles.at(i)); + } + + QSize size=config->readSizeEntry("Geometry"); + if(!size.isEmpty()) + { + resize(size); + } + else + resize(400,350); + +} + +void KScribbleApp::saveProperties(KConfig *_cfg) +{ + +} + + +void KScribbleApp::readProperties(KConfig* _cfg) +{ +} + +bool KScribbleApp::queryClose() +{ + + QStringList saveFiles; + KScribbleDoc* doc; + if(pDocList->isEmpty()) + return true; + + for(doc=pDocList->first(); doc!=0;doc=pDocList->next()){ + if(doc->isModified()) + saveFiles.append(doc->title()); + } + if(saveFiles.isEmpty()) + return true; + + switch (KMessageBox::questionYesNoList(this, + i18n("One or more documents have been modified.\nSave changes before exiting?"),saveFiles)) + { + case KMessageBox::Yes: + for(doc=pDocList->first(); doc!=0;doc=pDocList->next()){ + if(doc->title().contains(i18n("Untitled"))) + slotFileSaveAs(); + else + { + if(!doc->saveDocument(doc->pathName())){ + KMessageBox::error (this,i18n("Could not save the current document !"), i18n("I/O Error !")); + return false; + } + } + } + return true; + case KMessageBox::No: + default: + return true; + } +} + +bool KScribbleApp::queryExit() +{ + saveOptions(); + return true; +} + +bool KScribbleApp::eventFilter(QObject* object, QEvent* event){ + if(event->type() == QEvent::Close) + { + QCloseEvent* e=(QCloseEvent*)event; + KScribbleView* pView=(KScribbleView*)object; + KScribbleDoc* pDoc=pView->getDocument(); + if(pDoc->canCloseFrame(pView)) + { + pDoc->removeView(pView); + if(!pDoc->firstView()) + pDocList->remove(pDoc); + + e->accept(); + ////////////// + if(pWorkspace->windowList().count()==1) + setPlainCaption(kapp->caption()); + else + setCaption(pWorkspace->activeWindow()->caption()); + ////////////// + } + else + e->ignore(); + } + return QWidget::eventFilter( object, event ); // standard event processing +} + +///////////////////////////////////////////////////////////////////// +// SLOT IMPLEMENTATION +///////////////////////////////////////////////////////////////////// + + +void KScribbleApp::slotFileNew() +{ + slotStatusMsg(i18n("Creating new document...")); + + openDocumentFile(); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileOpen() +{ + slotStatusMsg(i18n("Opening file...")); + + QString fileToOpen=KFileDialog::getOpenFileName(QDir::currentDirPath(), + KImageIO::pattern(KImageIO::Reading), this, i18n("Open File...")); + if(!fileToOpen.isEmpty()) + { + openDocumentFile(fileToOpen); + } + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileOpenRecent(int id_) +{ + slotStatusMsg(i18n("Opening file...")); + + openDocumentFile(pRecentFileMenu->text(id_)); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileSave() +{ + slotStatusMsg(i18n("Saving file...")); + KScribbleView* m = (KScribbleView*)pWorkspace->activeWindow(); + if( m ) + { + KScribbleDoc* doc = m->getDocument(); + if(doc->title().contains(i18n("Untitled"))) + slotFileSaveAs(); + else + if(!doc->saveDocument(doc->pathName())) + KMessageBox::error (this,i18n("Could not save the current document !"), i18n("I/O Error !")); + } + + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileSaveAs() +{ + slotStatusMsg(i18n("Saving file with a new filename...")); + + QString newName=KFileDialog::getSaveFileName(QDir::currentDirPath(), + KImageIO::pattern(KImageIO::Writing), this, i18n("Save as...")); + if(!newName.isEmpty()) + { + KScribbleView* m = (KScribbleView*)pWorkspace->activeWindow(); + if( m ) + { + KScribbleDoc* doc = m->getDocument(); + QString format=QFileInfo(newName).extension(); + format=format.upper(); + if(!doc->saveDocument(newName,format)) + { + KMessageBox::error (this,i18n("Could not save the current document !"), i18n("I/O Error !")); + return; + } + doc->changedViewList(); + setWndTitle(m); + } + + } + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileClose() +{ + slotStatusMsg(i18n("Closing file...")); + + KScribbleView* m = (KScribbleView*)pWorkspace->activeWindow(); + if( m ) + { + KScribbleDoc* doc=m->getDocument(); + doc->closeDocument(); + } + + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFilePrint() +{ + slotStatusMsg(i18n("Printing...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ) + m->print( printer ); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileQuit() +{ + slotStatusMsg(i18n("Exiting...")); + saveOptions(); + // close the first window, the list makes the next one the first again. + // This ensures that queryClose() is called on each window to ask for closing + KTMainWindow* w; + if(memberList) + { + for(w=memberList->first(); w!=0; w=memberList->first()) + { + // only close the window if the closeEvent is accepted. If the user + // presses Cancel on the saveModified() dialog, + // the window and the application stay open. + if(!w->close()) + break; + } + } + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotEditUndo() +{ + slotStatusMsg(i18n("Reverting last action...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ) +// m->undo(); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotEditCut() +{ + slotStatusMsg(i18n("Cutting selection...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ) + m->cutSelection(); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotEditCopy() +{ + slotStatusMsg(i18n("Copying selection to clipboard...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ) + m->copySelection(); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotEditPaste() +{ + slotStatusMsg(i18n("Inserting clipboard contents...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ) + m->pasteSelection(); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotEditClearAll() +{ + slotStatusMsg(i18n("Clearing the document contents...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ){ + KScribbleDoc* pDoc = m->getDocument(); + pDoc->editClearAll(); + } + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotPenBrush() +{ + slotStatusMsg(i18n("Setting brush width...")); + + // get one window with document for a current pen width + QWidgetList windows = pWorkspace->windowList(); + KScribbleView* m = (KScribbleView*)windows.at(0); + KScribbleDoc* pDoc = m->getDocument(); + int curr_width=pDoc->penWidth(); + + // create the dialog, get the new width and set the pen width for all documents + KPenBrushDlg* dlg= new KPenBrushDlg(curr_width,this); + if(dlg->exec()){ + int width=dlg->width(); + for ( int i = 0; i < int(windows.count()); ++i ) + { + m = (KScribbleView*)windows.at(i); + if ( m ) + { + pDoc = m->getDocument(); + pDoc->setPenWidth(width); + } + } + } + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotPenColor() +{ + slotStatusMsg(i18n("Selecting pen color...")); + + QColor myColor; + int result = KColorDialog::getColor( myColor, this ); + if ( result == KColorDialog::Accepted ) + { + QWidgetList windows = pWorkspace->windowList(); + KScribbleDoc* pDoc; + KScribbleView* m; + for ( int i = 0; i < int(windows.count()); ++i ) + { + m = (KScribbleView*)windows.at(i); + if ( m ) + { + pDoc = m->getDocument(); + pDoc->setPenColor(myColor); + } + } + } + slotStatusMsg(i18n("Ready.")); +} + + +void KScribbleApp::slotViewToolBar() +{ + slotStatusMsg(i18n("Toggle the toolbar...")); + /////////////////////////////////////////////////////////////////// + // turn Toolbar on or off + if( menuBar()->isItemChecked(ID_VIEW_TOOLBAR)) + { + menuBar()->setItemChecked(ID_VIEW_TOOLBAR, false); + enableToolBar(KToolBar::Hide); + } + else + { + menuBar()->setItemChecked(ID_VIEW_TOOLBAR, true); + enableToolBar(KToolBar::Show); + } + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotViewStatusBar() +{ + slotStatusMsg(i18n("Toggle the statusbar...")); + /////////////////////////////////////////////////////////////////// + //turn Statusbar on or off + if( menuBar()->isItemChecked(ID_VIEW_STATUSBAR)) + { + menuBar()->setItemChecked(ID_VIEW_STATUSBAR, false); + enableStatusBar(KStatusBar::Hide); + } + else + { + menuBar()->setItemChecked(ID_VIEW_STATUSBAR, true); + enableStatusBar(KStatusBar::Show); + } + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotWindowNewWindow() +{ + slotStatusMsg(i18n("Opening a new application window...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ){ + KScribbleDoc* doc = m->getDocument(); + createClient(doc); + } + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotStatusMsg(const QString &text) +{ + /////////////////////////////////////////////////////////////////// + // change status message permanently + statusBar()->clear(); + statusBar()->changeItem(text, ID_STATUS_MSG); +} + + +void KScribbleApp::slotStatusHelpMsg(const QString &text) +{ + /////////////////////////////////////////////////////////////////// + // change status message of whole statusbar temporary (text, msec) + statusBar()->message(text, 2000); +} + +void KScribbleApp::windowMenuAboutToShow() +{ + pWindowMenu->clear(); + + pWindowMenu->insertItem(i18n("&New Window"), ID_WINDOW_NEW_WINDOW); + pWindowMenu->insertItem(i18n("&Cascade"), + pWorkspace, SLOT(cascade() ),0 , ID_WINDOW_CASCADE ); + pWindowMenu->insertItem(i18n("&Tile"), + pWorkspace, SLOT(tile() ),0 , ID_WINDOW_TILE ); + + if ( pWorkspace->windowList().isEmpty() ) { + disableCommand(ID_WINDOW_NEW_WINDOW); + disableCommand(ID_WINDOW_CASCADE); + disableCommand(ID_WINDOW_TILE); + } + + pWindowMenu->insertSeparator(); + + QWidgetList windows = pWorkspace->windowList(); + for ( int i = 0; i < int(windows.count()); ++i ) { + int id = pWindowMenu->insertItem(QString("&%1 ").arg(i+1)+windows.at(i)->caption(), + this, SLOT( windowMenuActivated( int ) ) ); + pWindowMenu->setItemParameter( id, i ); + pWindowMenu->setItemChecked( id, pWorkspace->activeWindow() == windows.at(i) ); + } +} + +void KScribbleApp::windowMenuActivated( int id ) +{ + QWidget* w = pWorkspace->windowList().at( id ); + if ( w ) + w->setFocus(); +} + + +void KScribbleApp::commandCallback(int id_) +{ + switch (id_) + { + case ID_FILE_NEW: + slotFileNew(); + break; + + case ID_FILE_OPEN: + slotFileOpen(); + break; + + case ID_FILE_SAVE: + slotFileSave(); + break; + + case ID_FILE_SAVE_AS: + slotFileSaveAs(); + break; + + case ID_FILE_CLOSE: + slotFileClose(); + break; + + case ID_FILE_PRINT: + slotFilePrint(); + break; + + case ID_FILE_QUIT: + slotFileQuit(); + break; + + case ID_EDIT_CUT: + slotEditCut(); + break; + + case ID_EDIT_COPY: + slotEditCopy(); + break; + + case ID_EDIT_PASTE: + slotEditPaste(); + break; + + case ID_EDIT_CLEAR_ALL: + slotEditClearAll(); + break; + + case ID_PEN_BRUSH: + slotPenBrush(); + break; + + case ID_PEN_COLOR: + slotPenColor(); + break; + + case ID_VIEW_TOOLBAR: + slotViewToolBar(); + break; + + case ID_VIEW_STATUSBAR: + slotViewStatusBar(); + break; + + case ID_WINDOW_NEW_WINDOW: + slotWindowNewWindow(); + break; + + default: + break; + } +} + +void KScribbleApp::statusCallback(int id_) +{ + switch (id_) + { + case ID_FILE_NEW: + slotStatusHelpMsg(i18n("Creates a new document")); + break; + + case ID_FILE_OPEN: + slotStatusHelpMsg(i18n("Opens an existing document")); + break; + + case ID_FILE_OPEN_RECENT: + slotStatusHelpMsg(i18n("Opens a recently used file")); + break; + + case ID_FILE_SAVE: + slotStatusHelpMsg(i18n("Saves the currently active document")); + break; + + case ID_FILE_SAVE_AS: + slotStatusHelpMsg(i18n("Saves the currently active document as under a new filename")); + break; + + case ID_FILE_CLOSE: + slotStatusHelpMsg(i18n("Closes the currently active document")); + break; + + case ID_FILE_PRINT: + slotStatusHelpMsg(i18n("Prints out the actual document")); + break; + + case ID_FILE_QUIT: + slotStatusHelpMsg(i18n("Quits the application")); + break; + + case ID_EDIT_UNDO: + slotStatusHelpMsg(i18n("Reverts the last editing action")); + break; + + case ID_EDIT_CUT: + slotStatusHelpMsg(i18n("Cuts the selected section and puts it to the clipboard")); + break; + + case ID_EDIT_COPY: + slotStatusHelpMsg(i18n("Copies the selected section to the clipboard")); + break; + + case ID_EDIT_PASTE: + slotStatusHelpMsg(i18n("Pastes the clipboard contents to actual position")); + break; + + case ID_EDIT_CLEAR_ALL: + slotStatusHelpMsg(i18n("Clears the document contents")); + break; + + case ID_PEN_BRUSH: + slotStatusHelpMsg(i18n("Sets the pen width")); + break; + + case ID_PEN_COLOR: + slotStatusHelpMsg(i18n("Sets the current pen color")); + break; + + case ID_VIEW_TOOLBAR: + slotStatusHelpMsg(i18n("Enables/disables the toolbar")); + break; + + case ID_VIEW_STATUSBAR: + slotStatusHelpMsg(i18n("Enables/disables the statusbar")); + break; + + case ID_WINDOW_NEW_WINDOW: + slotStatusHelpMsg(i18n("Opens a new view for the current document")); + break; + + case ID_WINDOW_CASCADE: + slotStatusHelpMsg(i18n("Cascades all windows")); + break; + + case ID_WINDOW_TILE: + slotStatusHelpMsg(i18n("Tiles all windows")); + break; + + default: + break; + } +} +/** accepts drops and opens a new document +for each drop */ +void KScribbleApp::dropEvent( QDropEvent* e){ + + QImage img; + if ( QImageDrag::decode(e, img) ) + { + KScribbleDoc* doc = new KScribbleDoc(); + untitledCount+=1; + QString fileName=QString(i18n("Untitled%1")).arg(untitledCount); + doc->setPathName(fileName); + doc->setTitle(fileName); + doc->newDocument(); + pDocList->append(doc); + KPixmap tmp; + tmp.resize(img.size()); + tmp.convertFromImage(img); + doc->setPixmap(tmp); + doc->resizeDocument(tmp.size()); + doc->setModified(); + createClient(doc); + } +} +/** accepts drag events for images */ +void KScribbleApp::dragEnterEvent( QDragEnterEvent* e){ + e->accept(QImageDrag::canDecode(e)); +} + + + + +kscribbledoc.h + +/*************************************************************************** + kscribbledoc.h - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef KSCRIBBLEDOC_H +#define KSCRIBBLEDOC_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +// include files for QT +#include <qobject.h> +#include <qstring.h> +#include <qlist.h> + +#include <qsize.h> +#include <qpen.h> +#include <qpoint.h> +//#include <qpixmap.h> +#include <qpointarray.h> + +#include <kpixmap.h> + + +// forward declaration of the KScribble classes +class KScribbleView; + +/** KScribbleDoc provides a document object for a document-view model. + * + * The KScribbleDoc class provides a document object that can be used in conjunction with the classes + * KScribbleApp and KScribbleView to create a document-view model for MDI (Multiple Document Interface) + * KDE 2 applications based on KApplication and KTMainWindow as main classes and QWorkspace as MDI manager widget. + * Thereby, the document object is created by the KScribbleApp instance (and kept in a document list) and contains + * the document structure with the according methods for manipulating the document + * data by KScribbleView objects. Also, KScribbleDoc contains the methods for serialization of the document data + * from and to files. + * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team. + * @version KDevelop version 1.1 code generation + */ +class KScribbleDoc : public QObject +{ + Q_OBJECT + + friend KScribbleView; + + public: + /** Constructor for the fileclass of the application */ + KScribbleDoc(); + /** Destructor for the fileclass of the application */ + ~KScribbleDoc(); + + /** adds a view to the document which represents the document contents. Usually this is your main view. */ + void addView(KScribbleView *view); + /** removes a view from the list of currently connected views */ + void removeView(KScribbleView *view); + /** gets called if a view is removed or added */ + void changedViewList(); + /** returns the first view instance */ + KScribbleView* firstView(){ return pViewList->first(); }; + /** returns true, if the requested view is the last view of the document */ + bool isLastView(); + /** This method gets called when the user is about to close a frame window. It checks, if more than one view + * is connected to the document (then the frame can be closed), if pFrame is the last view and the document is + * modified, the user gets asked if he wants to save the document. + */ + bool canCloseFrame(KScribbleView* pFrame); + /** sets the modified flag for the document after a modifying action on the view connected to the document.*/ + void setModified(bool _m=true){ modified=_m; }; + /** returns if the document is modified or not. Use this to determine if your document needs + * saving by the user on closing. + */ + bool isModified(){ return modified; }; + /** deletes the document's contents */ + void deleteContents(); + /** initializes the document generally */ + bool newDocument(); + /** closes the acutal document */ + void closeDocument(); + /** loads the document by filename and format and emits the updateViews() signal */ + bool openDocument(const QString &filename, const char *format=0); + /** saves the document under filename and format.*/ + bool saveDocument(const QString &filename, const char *format=0); + /** sets the path to the file connected with the document */ + void setPathName(const QString &name); + /** returns the pathname of the current document file*/ + const QString& pathName() const; + + /** sets the filename of the document */ + void setTitle(const QString &title); + /** returns the title of the document */ + const QString& title() const; + /** get the current Pen */ + const QPen currentPen(){ return pen;}; + /** returns the pen width */ + const int penWidth() { return pen.width(); } + /** returns the pen color */ + const QColor penColor(){ return pen.color(); } + /** sets the pen width */ + void setPenWidth( int w ){ pen.setWidth( w ); } + /** sets the pen color */ + void setPenColor( const QColor &c ){ pen.setColor( c ); } + /** sets the pen style by a second toolbar */ + void setPenStyle( PenStyle s){ pen.setStyle(s);} + /** clears the document contents */ + void editClearAll(); + + /** get the document size */ + const QSize docSize(){ return size;}; + /** sets the pixmap contents. Used by KScribbleApp + to create a new document by drop events */ + void setPixmap(KPixmap pix) { buffer=pix;}; + void resizeDocument(QSize m_size) { size=m_size; }; + public slots: + /** calls repaint() on all views connected to the document object and is called by the view by + * which the document has been changed. + * As this view normally repaints itself, it is excluded from the paintEvent. + */ + void updateAllViews(KScribbleView *sender); + + protected: + + QPen pen; + QPointArray polyline; + KPixmap buffer; + + private: + /** the modified flag of the current document */ + bool modified; + QString m_title; + QString m_filename; + /** the list of the views currently connected to the document */ + QList<KScribbleView> *pViewList; + QSize size; +}; + +#endif // KSCRIBBLEDOC_H + + + + + +kscribbledoc.cpp + +/*************************************************************************** + kscribbledoc.cpp - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +// include files for Qt +#include <qdir.h> +#include <qfileinfo.h> +#include <qwidget.h> + +// include files for KDE +#include <klocale.h> +#include <kmessagebox.h> +#include <kfiledialog.h> + +// application specific includes +#include "kscribbledoc.h" +#include "kscribble.h" +#include "kscribbleview.h" + + +KScribbleDoc::KScribbleDoc() +{ + pViewList = new QList<KScribbleView>; + pViewList->setAutoDelete(false); +} + +KScribbleDoc::~KScribbleDoc() +{ + delete pViewList; +} + +void KScribbleDoc::addView(KScribbleView *view) +{ + pViewList->append(view); + changedViewList(); +} + +void KScribbleDoc::removeView(KScribbleView *view) +{ + pViewList->remove(view); + if(!pViewList->isEmpty()) + changedViewList(); + else + deleteContents(); +} + +void KScribbleDoc::changedViewList(){ + + KScribbleView *w; + if((int)pViewList->count() == 1){ + w=pViewList->first(); + w->setCaption(m_title); + } + else{ + int i; + for( i=1,w=pViewList->first(); w!=0; i++, w=pViewList->next()) + w->setCaption(QString(m_title+":%1").arg(i)); + } +} + +bool KScribbleDoc::isLastView() { + return ((int) pViewList->count() == 1); +} + + +void KScribbleDoc::updateAllViews(KScribbleView *sender) +{ + KScribbleView *w; + for(w=pViewList->first(); w!=0; w=pViewList->next()) + { + w->update(sender); + } + +} + +void KScribbleDoc::setPathName(const QString &name) +{ + m_filename=name; + m_title=QFileInfo(name).fileName(); +} + +const QString& KScribbleDoc::pathName() const +{ + return m_filename; +} + +void KScribbleDoc::setTitle(const QString &title) +{ + m_title=title; +} + +const QString &KScribbleDoc::title() const +{ + return m_title; +} + + +void KScribbleDoc::closeDocument() +{ + KScribbleView *w; + if(!isLastView()) + { + for(w=pViewList->first(); w!=0; w=pViewList->next()) + { + if(!w->close()) + break; + } + } + if(isLastView()) + { + w=pViewList->first(); + w->close(); + } +} + +bool KScribbleDoc::newDocument() +{ + ///////////////////////////////////////////////// + // TODO: Add your document initialization code here + size=QSize(300,200 ); + pen=QPen( Qt::black, 3 ); + polyline=QPointArray(3); + buffer.resize(size); + buffer.fill( Qt::white ); + ///////////////////////////////////////////////// + modified=false; + return true; +} + +bool KScribbleDoc::openDocument(const QString &filename, const char *format /*=0*/) +{ + + QFile f( filename ); +// if ( !f.open( IO_ReadOnly ) ) +// return false; + ///////////////////////////////////////////////// + // TODO: Add your document opening code here + if(!buffer.load( filename, format )) + return false; + size=buffer.size(); + ///////////////////////////////////////////////// +// f.close(); + + modified=false; + m_filename=filename; + m_title=QFileInfo(f).fileName(); + return true; +} + +bool KScribbleDoc::saveDocument(const QString &filename, const char *format /*=0*/) +{ + QFile f( filename ); +// if ( !f.open( IO_WriteOnly ) ) +// return false; + + ///////////////////////////////////////////////// + // TODO: Add your document saving code here + if(!buffer.save( filename, format )) + return false; + ///////////////////////////////////////////////// + +// f.close(); + + modified=false; + m_filename=filename; + m_title=QFileInfo(f).fileName(); + return true; +} + +void KScribbleDoc::deleteContents() +{ + ///////////////////////////////////////////////// + // TODO: Add implementation to delete the document contents + buffer.fill( Qt::white ); + ///////////////////////////////////////////////// + +} + +bool KScribbleDoc::canCloseFrame(KScribbleView* pFrame) +{ + if(!isLastView()) + return true; + + bool ret=false; + if(isModified()) + { + QString saveName; + switch(KMessageBox::warningYesNoCancel(pFrame, i18n("The current file has been modified.\n" + "Do you want to save it?"),title())) + { + case KMessageBox::Yes: + if(title().contains(i18n("Untitled"))) + { + saveName=KFileDialog::getSaveFileName(QDir::currentDirPath(), + i18n("*|All files"), pFrame, i18n("Save as...")); + if(saveName.isEmpty()) + return false; + } + else + saveName=pathName(); + + if(!saveDocument(saveName)) + { + switch(KMessageBox::warningYesNo(pFrame,i18n("Could not save the current document !\n" + "Close anyway ?"), i18n("I/O Error !"))) + { + case KMessageBox::Yes: + ret=true; + case KMessageBox::No: + ret=false; + } + } + else + ret=true; + break; + case KMessageBox::No: + ret=true; + break; + case KMessageBox::Cancel: + default: + ret=false; + break; + } + } + else + ret=true; + + return ret; +} + +void KScribbleDoc::editClearAll() +{ + deleteContents(); + setModified(); + updateAllViews(0); +} + + + + + +kscribbleview.h + +/*************************************************************************** + kscribbleview.h - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef KSCRIBBLEVIEW_H +#define KSCRIBBLEVIEW_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +// include files for Qt +#include <qscrollview.h> +#include <kpixmap.h> + +class KScribbleDoc; + +/** The KScribbleView class provides the view widget for the document instance connected to it and is displayed + * as a MDI child window in the main view area of the KScribbleApp class instance. The KScribbleApp + * class also has an eventFilter() method that gets installed on every KScribbleView instance to + * control events of the type QEvent::Close.The document connected to the view instance keeps a list + * of all view that represent the document contents as there can be more than one view. Views get created in + * KScribbleApp::createClient() and automatically added to the list of views. + * The KScribbleView class inherits QWidget as a base. Another possible inheritance besides specialized + + widgets could be QMainWindow so that you can easily set up the main area of your view by setting another view + * as main widget (QMainWindow::setMainWidget() ). + * NOTE: The close event always has to be empty (DON`T CALL QWidget::closeEvent(e) in closeEvent()) + * because the installed event filter can only manage a forward implementation. If the QCloseEvent + * is received by the KScribbleView, the overwritten event handler has to do nothing as the eventFilter + * has set accept() or ignore() already. If QWidget::closeEvent() is called again, the default event + * handler will accept the close event and the window gets destroyed even if the installed eventFilter + * has set the event to be ignored. + * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team. + * @version KDevelop version 1.1 code generation + */ +class KScribbleView : public QScrollView +{ + Q_OBJECT + + friend KScribbleDoc; + + public: + /** Constructor for the view + * @param pDoc your document instance that the view represents. Create a document + * before calling the constructor or connect an already existing document to a new MDI child widget.*/ + KScribbleView(KScribbleDoc* pDoc, QWidget* parent, const char *name, int wflags); + /** Destructor for the main view */ + ~KScribbleView(); + /** returns a pointer to the document connected to the view*/ + KScribbleDoc *getDocument() const; + /** gets called to redraw the document contents if it has been modified */ + void update(KScribbleView* pSender); + /** contains the implementation for printing functionality and gets called by KScribbleApp::slotFilePrint() */ + void print(QPrinter *pPrinter); + /** cuts out a selection */ + void cutSelection(); + /** copies a selection to the clipboard */ + void copySelection(); + /** pastes the clipboard contents to a selection that can be inserted into the picture */ + void pasteSelection(); + + protected: + + /** overwritten QWidget::closeEvent() to catch closing views. Does nothing, as the closeEvents for + * KScribbleView's are processed by KScribbleApp::eventFilter(), so this overwitten closeEvent is necessary + * and has to be empty. Don't overwrite this method ! + */ + virtual void closeEvent(QCloseEvent* ); + /** overwritten to interpret key events for scrollbars */ + virtual void keyPressEvent( QKeyEvent* ); + /** changed from mousePressEvent() overwriting QScrollView method */ + virtual void viewportMousePressEvent( QMouseEvent* ); + /** changed from mouseReleaseEvent() overwriting QScrollView method */ + virtual void viewportMouseReleaseEvent( QMouseEvent* ); + /** On paste actions inserts the pasted clipboard contents */ + virtual void viewportMouseDoubleClickEvent(QMouseEvent* e); + /** changed from mouseMoveEvent() overwriting QScrollView method */ + virtual void viewportMouseMoveEvent( QMouseEvent* ); + /** changed from resizeEvent() overwriting QScrollView method */ +// virtual void viewportResizeEvent( QResizeEvent* ); + /** changed from paintEvent() overwriting QScrollView method */ + virtual void viewportPaintEvent( QPaintEvent* ); + + virtual void viewportDragEnterEvent ( QDragEnterEvent * ); + + virtual void viewportDragMoveEvent ( QDragMoveEvent * ); + + virtual void viewportDragLeaveEvent ( QDragLeaveEvent * ); + + virtual void viewportDropEvent ( QDropEvent * ); + + /** the document instance */ + KScribbleDoc *doc; + + private: + KPixmap tmp; + QRect select; + QClipboard *cb; + enum Action{IDLE=0, DRAW, SELECT, PASTE, DRAG} action; +}; + +#endif // KSCRIBBLEVIEW_H + + + + + +kscribbleview.cpp + +/*************************************************************************** + kscribbleview.cpp - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ +#include <iostream.h> + +// include files for Qt +#include <qprinter.h> +#include <qpainter.h> +#include <qdir.h> +#include <qsize.h> +#include <qclipboard.h> +#include <qimage.h> +#include <qdragobject.h> + +// include files for KDE +#include <kiconloader.h> + +// application specific includes +#include "kscribbleview.h" +#include "kscribbledoc.h" +#include "kscribble.h" + + +KScribbleView::KScribbleView(KScribbleDoc* pDoc, QWidget *parent, const char* name, int wflags) + : QScrollView(parent, name, wflags | WPaintClever | WNorthWestGravity | WRepaintNoErase) +{ + cb = QApplication::clipboard(); + viewport()->setAcceptDrops(true); + setDragAutoScroll(true); + doc=pDoc; + action=IDLE; + viewport()->setCursor( Qt::crossCursor ); + QSize size=doc->docSize(); + resizeContents(size.width(), size.height()); + resize(size); +} + +KScribbleView::~KScribbleView() +{ +} + +KScribbleDoc *KScribbleView::getDocument() const +{ + return doc; +} + +void KScribbleView::update(KScribbleView* pSender){ + if(pSender != this) + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} + +void KScribbleView::print(QPrinter *pPrinter) +{ + if (pPrinter->setup(this)) + { + QPainter p; + p.begin(pPrinter); + + /////////////////////////////// + // TODO: add your printing code here + p.drawPixmap(0,0,doc->buffer); + /////////////////////////////// + p.end(); + } +} + +/** cuts out a selection */ +void KScribbleView::cutSelection(){ + select=select.normalize(); + QPixmap cb_pix; + cb_pix.resize(select.size()); + // copy selection to cb_pix and copy to clipboard + bitBlt(&cb_pix, 0, 0, + &doc->buffer, select.x()+contentsX(), select.y()+contentsY(), cb_pix.width(), cb_pix.height()); + cb->setPixmap(cb_pix); + // fill cb_pix with white and copy to selection area + cb_pix.fill(Qt::white); + bitBlt(&doc->buffer, select.x()+contentsX(), select.y()+contentsY(), + &cb_pix, 0, 0, cb_pix.width(), cb_pix.height()); + action = IDLE; + doc->setModified(); + doc->updateAllViews(this); + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} +/** copies a selection to the clipboard */ +void KScribbleView::copySelection(){ + select=select.normalize(); + QPixmap cb_pix; + cb_pix.resize(select.size()); + // copy selection to cb_pix and copy to clipboard + bitBlt(&cb_pix, 0, 0, + &doc->buffer, select.x()+contentsX(), select.y()+contentsY(),cb_pix.width(), cb_pix.height()); + cb->setPixmap(cb_pix); + action = IDLE; + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} +/** pastes the clipboard contents to a selection that can be inserted into the picture */ +void KScribbleView::pasteSelection(){ + select=cb->pixmap().rect(); + action = PASTE; + viewport()->setCursor( Qt::sizeAllCursor ); +} + +void KScribbleView::closeEvent(QCloseEvent* e){ + +// DO NOT CALL QWidget::closeEvent(e) here !! +// This will accept the closing by QCloseEvent::accept() by default. +// The installed eventFilter() in KScribbleApp takes care for closing the widget +// or ignoring the close event + +} + +void KScribbleView::keyPressEvent( QKeyEvent *e ) +{ + switch (e->key()) + { + case Key_Right: + scrollBy( 10, 0 ); + break; + case Key_Left: + scrollBy( -10,0); + break; + case Key_Up: + scrollBy( 0, -10 ); + break; + case Key_Down: + scrollBy( 0, 10 ); + break; + case Key_Home: + setContentsPos(0,0); + break; + case Key_End: + setContentsPos(0,viewport()->height()-viewport()->height()); + break; + case Key_PageUp: + scrollBy( 0, -viewport()->height() ); + break; + case Key_PageDown: + scrollBy( 0, viewport()->height() ); + break; + } + +} + +void KScribbleView::viewportMousePressEvent( QMouseEvent *e ) +{ + if ( e->button() == LeftButton && action == IDLE) + { + action=DRAW; + doc->polyline[2] = doc->polyline[1] = doc->polyline[0] = viewportToContents(e->pos()); + doc->updateAllViews(this); + } + else if ( e->button() == RightButton && action == IDLE) + { + action = SELECT; + QPoint pt=e->pos(); + int x = pt.x() > contentsWidth() ? contentsWidth() : pt.x(); + int y = pt.y() > contentsHeight() ? contentsHeight() : pt.y(); + select.setLeft(x-1); + select.setTop(y-1); + select.setRight(x-1); + select.setBottom(y-1); + } + else if( action == SELECT ) + { + action = IDLE; + select=select.normalize(); + // drag + if(select.contains(e->pos(), true)) // point inside the selection + { + tmp.resize(select.size()); + bitBlt(&tmp, 0, 0, + &doc->buffer, select.x()+contentsX(), select.y()+contentsY(), tmp.width(), tmp.height()); + QImage img =tmp.convertToImage(); + QDragObject *d = new QImageDrag( img, viewport() ); + d->setPixmap(BarIcon("filenew")); + d->drag(); + } + // remove selection + else + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + } + else if( action == PASTE ) + { + if ( e->button() == RightButton ) + { + action = IDLE; + viewport()->setCursor( Qt::crossCursor ); + } + QPoint mv_pt (viewport()->height(), viewport()->width()); + if(QRect(0,0,mv_pt.x(),mv_pt.y()).contains(e->pos())) + select.moveCenter(e->pos()); + else + { + select.moveBottomRight(mv_pt); + } + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + } +} + +void KScribbleView::viewportMouseReleaseEvent( QMouseEvent *e ) +{ + if ( action == DRAW ) + { + action = IDLE; + doc->updateAllViews(this); + } + if ( action == SELECT) + { + QPoint pt=e->pos(); + int x = pt.x() > 0 ? pt.x() : 0; + int y = pt.y() > 0 ? pt.y() : 0; + select.setRight(x); + select.setBottom(y); + QSize size=doc->docSize(); + select = select.intersect(QRect(0,0,size.width(), size.height())); + } +} + +/** On paste actions inserts the pasted clipboard contents + */ +void KScribbleView::viewportMouseDoubleClickEvent(QMouseEvent* e) +{ + if( action == PASTE ) + { + action = IDLE; + select.moveCenter(e->pos()); + viewport()->setCursor( Qt::crossCursor ); + QPixmap cb_pix; + cb_pix.resize(cb->pixmap().size()); + cb_pix=cb->pixmap(); + bitBlt( &doc->buffer, contentsX()+select.x(), contentsY()+select.y(), + &cb_pix, 0,0 , select.width(),select.height() ); + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + doc->setModified(); + doc->updateAllViews(this); + } + +} + +void KScribbleView::viewportMouseMoveEvent( QMouseEvent *e ) +{ + if ( action == DRAW ) + { + QPainter painter; + painter.begin( &doc->buffer ); + painter.setPen( doc->currentPen() ); + doc->polyline[2] = doc->polyline[1]; + doc->polyline[1] = doc->polyline[0]; + doc->polyline[0] = viewportToContents(e->pos()); + painter.drawPolyline( doc->polyline ); + painter.end(); + + QRect r = doc->polyline.boundingRect(); + r = r.normalize(); + r.setLeft( r.left() - doc->penWidth() ); + r.setTop( r.top() - doc->penWidth() ); + r.setRight( r.right() + doc->penWidth() ); + r.setBottom( r.bottom() + doc->penWidth() ); + + bitBlt(viewport(), r.x()-contentsX(), r.y()-contentsY() , + &doc->buffer, r.x(), r.y(), r.width(), r.height() ); + doc->setModified(); + doc->updateAllViews(this); + } + if ( action == SELECT ) + { + QPoint pt=e->pos(); + select.setWidth(select.x()+pt.x()); + select.setHeight(select.y()+pt.y()); + select.setRight(pt.x()); + select.setBottom(pt.y()); + QSize size=doc->docSize(); + select = select.intersect(QRect(0,0,size.width(), size.height())); + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + } + if( action == PASTE ) + { + QPoint mv_pt (viewport()->height(), viewport()->width()); + if(QRect(0,0,mv_pt.x(),mv_pt.y()).contains(e->pos())) + select.moveCenter(e->pos()); + else + { + select.moveBottomRight(mv_pt); + } + QRect pm_rect=cb->pixmap().rect(); + select.setWidth(pm_rect.width()); + select.setHeight(pm_rect.height()); + QSize size=doc->docSize(); + select = select.intersect(QRect(0,0,size.width(), size.height())); + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + doc->setModified(); + doc->updateAllViews(this); + } +} + +//void KScribbleView::viewportResizeEvent( QResizeEvent *e ) +//{ +//} + +void KScribbleView::viewportPaintEvent( QPaintEvent *e ) +{ + bitBlt( viewport(),0,0, &doc->buffer,contentsX() ,contentsY() ); + + if( action == PASTE ) + { + tmp.resize(cb->pixmap().size()); + tmp=cb->pixmap(); + } + if( action == PASTE || action == DRAG ) + { + QSize size=doc->docSize(); + select = select.intersect(QRect(0,0,size.width(), size.height())); + if(select.intersects(e->rect())) + bitBlt(viewport(), select.x(), select.y(), &tmp, 0, 0, select.width(), select.height()); + } + if( action == PASTE || action == DRAG || action == SELECT ) + { +// if(select.intersects(e->rect())) +// { + QPainter paint_area; + paint_area.begin(viewport()); + paint_area.setPen(QPen(Qt::black, 0, DashLine)); + paint_area.drawRect( select ); + paint_area.end(); +// } + } + QScrollView::viewportPaintEvent(e); +} + +void KScribbleView::viewportDragEnterEvent ( QDragEnterEvent * e) +{ + e->accept(QImageDrag::canDecode(e)); + action = DRAG; +} + +void KScribbleView::viewportDragMoveEvent ( QDragMoveEvent * e) +{ + QImage img; + if ( QImageDrag::decode(e, img) ){ + tmp.resize(img.size()); + tmp.convertFromImage(img); + select.setWidth(tmp.width()); + select.setHeight(tmp.height()); + select.moveCenter(e->pos()); + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + } +} + +void KScribbleView::viewportDragLeaveEvent ( QDragLeaveEvent * ) +{ + action = IDLE; + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} + +void KScribbleView::viewportDropEvent ( QDropEvent * e) +{ + QImage img; + if ( QImageDrag::decode(e, img) ) + { + tmp.resize(img.size()); + tmp.convertFromImage(img); + select.setWidth(tmp.width()); + select.setHeight(tmp.height()); + select.moveCenter(e->pos()); + bitBlt(&doc->buffer, select.x()+contentsX(), select.y()+contentsY(), + &tmp, 0, 0, tmp.width(), tmp.height()); + doc->setModified(); + doc->updateAllViews(this); + } + action = IDLE; + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} + + + + + +kpenbrushdlg.h + +/*************************************************************************** + kpenbrushdlg.h - description + ------------------- + begin : Fri Jul 23 1999 + copyright : (C) 1999 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + + +#ifndef KPENBRUSHDLG_H +#define KPENBRUSHDLG_H + +//Generated area. DO NOT EDIT!!!(begin) +#include <qwidget.h> +#include <qspinbox.h> +#include <qlabel.h> +#include <qpushbutton.h> +//Generated area. DO NOT EDIT!!!(end) + +#include <qdialog.h> +#include <klocale.h> + +/** + *@author Ralf Nolden + */ + +class KPenBrushDlg : public QDialog { + Q_OBJECT +public: + KPenBrushDlg(int curr, QWidget *parent=0, const char *name=0); + ~KPenBrushDlg(); + + int width() { return width_spbox->value(); }; + +protected slots: + void slotDefault(); + +protected: + void initDialog(); + //Generated area. DO NOT EDIT!!!(begin) + QSpinBox *width_spbox; + QLabel *width_label; + QPushButton *default_btn; + QPushButton *ok_btn; + QPushButton *cancel_btn; + //Generated area. DO NOT EDIT!!!(end) + +private: +}; + +#endif + + + + + + +kpenbrushdlg.cpp + +/*************************************************************************** + kpenbrushdlg.cpp - description + ------------------- + begin : Fri Jul 23 1999 + copyright : (C) 1999 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "kpenbrushdlg.h" +#include <qwhatsthis.h> +#include <kapp.h> + +KPenBrushDlg::KPenBrushDlg(int curr, QWidget *parent, const char *name) + : QDialog(parent,name,true,WStyle_ContextHelp) +{ + initDialog(); + QWhatsThis::add(width_spbox,i18n("Select brush width")); + + width_spbox->setValue(curr); + connect(default_btn, SIGNAL(clicked()), this, SLOT(slotDefault())); + connect(ok_btn, SIGNAL(clicked()), this, SLOT(accept())); + connect(cancel_btn, SIGNAL(clicked()), this, SLOT(reject())); +} + +KPenBrushDlg::~KPenBrushDlg(){ +} + +void KPenBrushDlg::slotDefault(){ + width_spbox->setValue(3); +} + + + + + +kpenbrushdlgdata.cpp + +/********************************************************************** + --- KDevelop (KDlgEdit) generated file --- + + Last generated: Fri Jul 23 10:43:10 1999 + + DO NOT EDIT!!! This file will be automatically + regenerated by KDevelop. All changes will be lost. + +**********************************************************************/ +#include <kapp.h> +#include "kpenbrushdlg.h" + +void KPenBrushDlg::initDialog(){ + this->resize(370,210); + this->setMinimumSize(0,0); + width_spbox= new QSpinBox(this,"width_spbox"); + width_spbox->setGeometry(150,50,100,25); + width_spbox->setMinimumSize(0,0); + width_spbox->setValue(1); + width_spbox->setRange(1,99); + + width_label= new QLabel(this,"width_label"); + width_label->setGeometry(20,50,120,25); + width_label->setMinimumSize(0,0); + width_label->setText(i18n("Pen Width:")); + + default_btn= new QPushButton(this,"default"); + default_btn->setGeometry(30,160,100,30); + default_btn->setMinimumSize(0,0); + default_btn->setText(i18n("Default")); + default_btn->setAutoDefault(true); + + ok_btn= new QPushButton(this,"ok"); + ok_btn->setGeometry(140,160,100,30); + ok_btn->setMinimumSize(0,0); + ok_btn->setText(i18n("OK")); + ok_btn->setAutoDefault(true); + + cancel_btn= new QPushButton(this,"cancel"); + cancel_btn->setGeometry(250,160,100,30); + cancel_btn->setMinimumSize(0,0); + cancel_btn->setText(i18n("Cancel")); + cancel_btn->setAutoDefault(true); + +} + + + + +resource.h + +/*************************************************************************** + resource.h - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef RESOURCE_H +#define RESOURCE_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +/////////////////////////////////////////////////////////////////// +// resource.h -- contains macros used for commands + + +/////////////////////////////////////////////////////////////////// +// COMMAND VALUES FOR MENUBAR AND TOOLBAR ENTRIES + + +/////////////////////////////////////////////////////////////////// +// File-menu entries +#define ID_FILE_NEW 10010 +#define ID_FILE_OPEN 10020 +#define ID_FILE_OPEN_RECENT 10030 +#define ID_FILE_CLOSE 10040 + +#define ID_FILE_SAVE 10050 +#define ID_FILE_SAVE_AS 10060 + +#define ID_FILE_PRINT 10070 + +#define ID_FILE_QUIT 10080 + +/////////////////////////////////////////////////////////////////// +// Edit-menu entries +#define ID_EDIT_UNDO 11010 +#define ID_EDIT_COPY 11020 +#define ID_EDIT_CUT 11030 +#define ID_EDIT_PASTE 11040 +#define ID_EDIT_CLEAR_ALL 11050 + +/////////////////////////////////////////////////////////////////// +// Pen-menu entries +#define ID_PEN_COLOR 14010 +#define ID_PEN_BRUSH 14020 + +/////////////////////////////////////////////////////////////////// +// Draw-menu entries +#define ID_DRAW_FIND 15010 +#define ID_DRAW_FREEHAND 15020 +#define ID_DRAW_LINE 15030 +#define ID_DRAW_RECT 15040 +#define ID_DRAW_RECT_FILL 15050 +#define ID_DRAW_CIRCLE 15060 +#define ID_DRAW_CIRCLE_FILL 15070 +#define ID_DRAW_ELLIPSE 15080 +#define ID_DRAW_ELLIPSE_FILL 15090 +#define ID_DRAW_SPRAY 15100 +#define ID_DRAW_FILL 15110 +#define ID_DRAW_ERASE 15120 + +/////////////////////////////////////////////////////////////////// +// View-menu entries +#define ID_VIEW_TOOLBAR 12010 +#define ID_VIEW_STATUSBAR 12020 + +/////////////////////////////////////////////////////////////////// +// Window-menu entries +#define ID_WINDOW_NEW_WINDOW 13010 +#define ID_WINDOW_CASCADE 13020 +#define ID_WINDOW_TILE 13030 + +/////////////////////////////////////////////////////////////////// +// Help-menu entries +#define ID_HELP_CONTENTS 1002 +#define ID_HELP_WHATS_THIS 1003 +/////////////////////////////////////////////////////////////////// +// General application values +#define ID_STATUS_MSG 1001 +#define TOOLS_TOOLBAR 1 +#endif // RESOURCE_H + + + + + +
+ diff -Nru kdevelop-3.9.98/doc/tutorial/Makefile.am kdevelop-4.0.1/doc/tutorial/Makefile.am --- kdevelop-3.9.98/doc/tutorial/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/tutorial/Makefile.am 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,4 @@ +EXTRA_DIST = index.docbook + +KDE_LANG = en +KDE_DOCS = AUTO diff -Nru kdevelop-3.9.98/doc/tutorial.docbook kdevelop-4.0.1/doc/tutorial.docbook --- kdevelop-3.9.98/doc/tutorial.docbook 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/tutorial.docbook 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,5944 @@ + + KDevelop"> + IDE"> + GUI"> + kiconedit"> + + + + %ents; +]> + + + + +The &kdevelop; &kde; application Tutorial + + + +Ralf +Nolden + +
Ralf.Nolden@post.rwth-aachen.de
+
+
+ +
+ + +20002001 +Ralf Nolden + + + + +&FDLNotice; + +01/03/2001 +1.40.00 + + + +&kdevelop;is an integrated and easy to use environment for C/C++ programmers. + + +The &kde; Application Tutorials Handbook for the &kdevelop; Integrated +Development Environment, a tutorial collection on how to create &kde; +applications by examples. + + + + +KDE +kdevelop +programming +IDE +development + + +
+ + +Introduction + + +As &kde; is becoming a standard for &UNIX; system desktops, more and more +developers want to take advantage of the mature and well-written +API that the &kde; project provides. This +API allows developers to easily create &GUI; applications, +and make using the classes provided by &Qt; and &kde; easy. + + + +The &kdevelop; project intends to provide an &IDE; that enables developers to +create and extend their applications rapidly, with the main focus on building +&kde; applications, although you are not tied to this. + + +To help beginners get off the ground, this handbook tries to explain +certain aspects of application creation for &kde; by describing how to create +running applications. This is achieved by combining the sample code included +with the &Qt; library, and the functionality of the &kdevelop; &IDE;, so you are +creating &kde; applications in a minimum of time by following the examples. + + + +The goal of this book is that you should by the time you have completed it have +a broad understanding of how the underlying &Qt; library functions, the classes +it provides, how &kde; works with this. + + + +The &kdevelop; team wishes you success in learning about &kde; and &Qt;, +and we hope &kdevelop; and this handbook will enable you to join the ranks of +the programmers who contribute to the &kde; project. + + + + + +Getting Started + + +Things you should know before you begin + + +This handbook requires a certain base knowledge about the C++ programming +language. You will need this to understand the code examples and their +functionality. It is further assumed you have read the +&kdevelop; user manual, as well as the +&kdevelop; programming handbook. If this is the case, you will already have an +understanding how the &kdevelop; &IDE; works in general, and what generated +projects are. These things will not be covered again in this handbook. + + + +If you've already gone through the User Manual , you +should have &kdevelop; set up to your satisfaction. To follow this tutorial, +you should check that you have access to the &Qt; online reference +documentation, through either the Help menu, or that you can +see this book in the documentation tree. + + + +When looking a the first page of the &Qt; documentation, you will see that it +contains a link to a section Tutorials and +Examples. Under Tutorials, you will +find a 14-step introduction into using the &Qt; library to build +applications. Examples will lead you to a list of example +programs that &Qt; includes which show you example usage reference for certain +classes. + + + + If you are an absolute beginner, you should be at least comfortable with the +idea behind &Qt;. That is, providing a library that offers: + + + + + +A base application class (QApplication). + + + + +A widget library for graphical user interfaces. + + + + +A set of additional helper classes for graphics, file, and data handling. + + + + +The signal-slot mechanism for object communication. + + + + +Event controlling through event loops and virtual methods. + + + + + +If that list is meaningless to you, you should start with the &Qt; library in +the Programming handbook, where the basics +of a &Qt; application are described in detail. There you will also find an +introduction to the difference between a pure &Qt; application and a &kde; +application. + + + + + +The first steps + + +To learn about &Qt; will give you a good start in programming &kde; applications +as well, so we will be creating a project that will produce the tutorial +applications (after some editing, of course). + + + +To do this, start by opening &kdevelop; and select +Project New + from the menu. The application wizard will open and you can +select the type of project you wish to build. For &Qt; applications you would +choose the Qt application option, but we will be using the +Mini-KDE project to build our examples. The reason is +simple, the &Qt; examples don't contain much code, and by choosing the &Qt; +application in the application wizard, we would have to heavily edit the +provided code to create true examples. As the Mini-KDE +consists of only an empty main window and some checks for the &Qt; library and +header files, it will fit our purposes with the least amount of changes. + + + +When entering the next wizard page, you should enter the project specific +information. You can leave out any &kde; specific additions such as a +mini-icon, and a main icon, documentation, &etc;. We just fill in the +information that will be useful for building a suitable base for the tutorials. + + +As the structure of the tutorial steps builds each stage on the previously +created code, we can start with MyWidget as the project +name. This will then build us the base class that is needed in . As we want to start with the first tutorial +step, use 1 as the project number. We +can increase this later, when moving to the next step. + + + +Next fill in any other required information, such as your name, email address, +and project directory. These are all that are required for our purposes, so we +can flip to the next page, where you can insert any header information you want +to include in the project header files (or you can use the example provided). +The same is done for the next page, which sets header information to be included +in the source files. Finally the last page, where you press +Create to build the project. If the +Create is not available, start at the first page again, +and make sure you didn't miss any required information. + + + +If everything went Ok, the project has been built, and +the message window in the application wizard will have +READY as it's final line. Select +Close to exit the wizard. + + + +When looking at the tree view on the left, you will see that the project already +includes a class MyWidget. This is because we chose this +to be the application name. Further when opening Functions +in the class viewer Globals folder, you will see the +application already contains a main() function where the +execution will start. + + + +Now the application is set up. You could do an +Execute or Make already, +but as we want to create the tutorial applications, we will instead go ahead and +change the code to create the tutorial examples. + + + + + + +Building the &Qt; Tutorials + + +Hello World! + + +As the previous chapter explains, we have created a project called MyWidget. +When looking at the first tutorial page of the &Qt; documentation, you will see +that the first application uses only the main(). +Therefore, we have only to change the already created +main() of our generated project to get the first tutorial +step running. + + + +To access the main() function, select it from the +classviewer's Globals folder, which contains a subfolder +for Functions where all non-class functions are +listed. This will open the file main.cpp in the +C/C++ Files window with the editing cursor already set in +front of the first line of main(). + + + + + +What to change first + + +We could start by just changing the already given code to the desired code as +listed in the tutorial. There is however an even easier way. Select the +contents of the main() with the mouse, or by holding the +Shift key while selecting the lines with the Down +Arrow. Then select Cut from the +Edit menu, or press the Delete key. This +removes the selected code, clearing the main() and leaving +the way clear to start from scratch. + + + +to insert the code from the tutorial, you could first read it carefully and try +to remember which line contained which code. Then, after reading the tutorial's +line by line description, you could use it as an example to write the tutorial +example by yourself. + + + +Or, you could do it the easy way. Select the contents of the listed +main() in the documentation browser, and press the +Copy from the toolbar (or use the context menu, or the +appropriate entry in the Edit menu). This will copy the +selection to the clipboard, and, after switching back to the sourcecode window, +can be inserted with Paste, either from the context +menu, the toolbar, or the Paste entry in the +Edit menu. + + + +Whichever method you choose, you need to add the appropriate header files, +outside the main(): + + + +Headers for the first Tutorial example + + +#include <qapplication.h> +#include <qpushbutton.h> + + + + +That's it! The source code is done for your first tutorial application. + + + + + +Building Hello World + + +To build the first tutorial, you can simply choose +Make from the Build menu, or press +the appropriate toolbar button. You could choose instead +Execute, which results in running the application +after the build was successful. + + + +If the build stops due to an error, you can rest assured the fault was on the +programmer's side, not the tutorial. It would be sad to be stopped in your +tracks just when you're taking your first steps towards programming for &kde; +(and/or &Qt;), but you can use it as an opportunity to learn more about +&kdevelop;! + + + +To find an error, you have two options. Either select the appropriate error +message in the output window, which will take you to the line of source code +where the error occurred, or press the F4 key. If you are +unfortunate enough to have more than one error, you can use the +Next Error in the View menu, to +work your way through the list. + + + + + +Excercises + + +You may be asking Excercises? This was so simple, I don't need to do any +exercises!, but be assured, things will be getting more complicated. +This was the easiest example, and the more complex they become, the more +thinking is required on your side to understand and follow the tutorial steps. +The exercises will additionally show you how to actually use &kdevelop; and it's +features. + + + +To teach yourself more with the first tutorial, you should try the following +changes to the source code, and see how this influences the application +behaviour: + + + + + +Change the pushbutton to a QLabel + + + + +Use setText() instead of directly setting the text in the +pushbutton's constructor + + + + +Use QPushButton::resize ( const QSize & s ) instead +of setting the size by width and height directly. Create a +QSize instance first that contains the size. + + + + +Play with the sizes, to see which is the width, and which the height. + + + + + + + +Extensions + + +The tutorial steps 2 and 3 are extending the facilities of the first tutorial. +Here you will learn about signals and slots, as well as the parent-child +relationships between widgets. + + + +Why are these things important? Well, signals and slots are the building blocks +of the technology which differentiates &Qt; from other widget libraries. +Whenever you hit an implementation problem where you want to communicate between +objects, this mechanism will make your work incredibly short, and nothing +serious can happen even if something goes wrong - misconnections don't lead to a +segmentation fault. This is one of the major strengths of the &Qt; library, and +a lot of &kde;/&Qt; developers wouldn't want to do without it's flexibility. +Understanding the signal/slot mechanism is therefor essential to creating a +&kde;/&Qt; application. + + + + +Watch out for the fact that the button terminates the +QApplication instance by calling +quit(). You will be meeting quit() +again when working with QApplication's KDE equivalent, +KApplication + + + + + + +Writing your own Widgets + + +After having successfully followed the tutorial steps, modifying and extending +the main(), you will hit the point where you want to create +a new widget. A unique widget, that can only be constructed with the class +you're about to write in step 4. Actually, the +class has been created by the application wizard for you, so there is not much +to add. Just insert the code that lesson 4 places in the +main.cpp into the MyWidget header +and implementation file. Fortunately, you have only to add the implementation +to the constructor code. + + + +To access the constructor, select it from the class viewer. This will +automatically take you to the implementation where you can add the code. + + + +Here you have only to watch out for the include of +qfont.h. QFont is only used in the +constructor code of MyWidget. Therefore, add +#include <qfont.h> to the top of the +mywidget.cpp file. + + + +To run your new application, just hit the Execute icon. +&kdevelop; will first save and then compile your changes, and finally your +applicaiton will be run. + + + + + +Extending the Widget Class + + +In tutorial lesson 5, the target is to extend the widget class. You'll also be +learning here about virtual functions. Here the +resizeEvent() function is reimplemented. What is important +to learn here, besides extending a class, is that &Qt; works with user events +through virtual functions that take an event as a parameter. + + + +You should make yourself comfortable with the following classes of the &Qt; +library: + + + + + +QEvent + + + + +QChildEvent + + + + +QCloseEvent + + + + +QFocusEvent + + + + +QKeyEvent + + + + +QMouseEvent + + + + +QMoveEvent + + + + +QPaintEvent + + + + +QResizeEvent + + + + +QTimerEvent + + + + + +Whenever writing custom widgets, especially the view areas of applications, you +will may to overwrite the default implementation of the widget's event-methods +with your own. + + + +An example of this could be virtual void mousePressEvent ( +QMouseEvent * ), for processing a mouse event to pop up a +context menu. In the implementation, you have to insert a formal parameter into +the function header. Most developers use either event or +e as the parameter name. + + + +After this you can process the event's parameters. For a +QMouseEvent, you have to ask if the &RMB;, &MMB; or &LMB; +mouse button was the one that caused the event. + + + + + +Adding a new class + + +In lesson 6, you will have to add a class to the tutorial application. Now +normally you might think I will just create a header file, and an +implementation file, and then I'm done!. &kdevelop; once again makes it +easier for you. When adding a class, you should always use the class generator. +This will do all the hard work for you, so you will just have to add the +specific code. + + + +To add a class with the class generator, choose +Project New +Class.... A dialog will open for you to enter the +values for the class you wish to add. The first thing you need to add is the +classname, which is LCDRange in the tutorial. + + + +Next add the baseclass. The baseclass is the one that the new class inherits. +Looking at the tutorial, this is QWidget. As most +GUI classes to add will be inheriting +QWidget, &kdevelop; has a shortcut for you. Simply leave +the Baseclass field empty, and instead check +generate a QWidget-Childclass in the Additional +Options section. This will automatically add the required +Q_OBJECT macro to the headerfile, to later add slots and +signals. Slots and signals will be required in step 7. + + + +As the filenames are automatically inserted, you don't have to worry about +that. The only thing we would suggest (strongly!) adding here is +documentation. It is always good style to add descriptive documentation to the +class, especially as a classname such as LCDRange may not +inform you specifically about the purpose of the widget. + + + + + +Steps 7 through 14 + + +For the rest of the tutorial steps, you are now prepared, and know everything +you need to know, so far as using the &kdevelop; IDE to aid +your way with such things as adding classes and editing sources. + + +After each change you should do a new build and check your code for +errors. Run the application and follow it's execution. You should additionally +play with &kdevelop;'s options for Build. Execute +the application with a commandline argument such as , +for example, or run the debugger. + + + +When you are comfortable, you should be able to proceed with the rest of the +provided &Qt; examples. + + + +In the following chapter, you will be introduced to development for &kde; 2.x, +through an example application, KScribble. This will +be a small drawing application, which will show you the concepts of application +design, and how to implement your own program. + + + + + + + +Creating &kde; applications + + +This part of the tutorial will be teaching you about &kde;/&Qt; aplication +design by creating an example application step by step. The major intention +here is to help you gain an understanding of how the two most important ideas of +a graphical user interface programming work: the Document View model and the +Multiple Document Interface (MDI) model. + + + +You will also gain a good idea of concepts that are new in &kde; 2.x and the +&Qt; 2.x library. These bring new enhancements and technology to the +programmers hands, improving application design and widening the possibilities +for your use. Key concepts include widget themes, inter-process communication, +and embedded applications. + + + +During this tutorial you will gain a clear insight into how the +MDI model works, and also into the Document View model, which +is difficult to understand for even seasoned programmers. This will help you +create other types of application, which use the document view model even if +they only contain one window, and you can't see an obvious need for it. + + + +The following chapters of the tutorial cover these steps: + + + + + +Understanding the basic concepts of the MDI and document view +models. + + + + +Creating the generic framework for KScribble, and +explaining the concepts of that framework. + + + + +Implementing the document class, which will provide the interface to read and +write the document data, as well as maintaining the document. + + + + +Implementing the view class to visualize the data. This class also takes over +the user interaction. + + + + +Adding dialogs to set such things as pen width, and the color of the pen to draw +with, including their integration into the toolbar and menubar. + + + + +Changing the view from the default QWidget +inheritance to a scrollable view. + + + + + +The tutorial itself is based on the code found in the +Scribble example application that comes with the &Qt; +library. The source of the original example can also be found within the &Qt; +documentation, in the examples section. + + + + + +Application Concepts + + +This chapter now introduces you the the ideas of the application models +mentioned already: The MDI (Multiple Document Interface) and +the document view models. A basic introduction into the document view model and +the generating of such a project with &kdevelop; is also covered in the &kdevelop; Programming Manual, but based on a +Single Document Interface (SDI). In any case, you should be +familiar already with the basics of the &kde; and &Qt; classes that are +explained in the &kde; Library Reference Guide. There +the base classes of the underlying libraries are explained in detail, and how to +use them, with additional description of the &Qt; signal/slot mechanism and +event handling. + + + +As a general guideline you should already know: + + + + + +That every &kde; application needs one instance of +KApplication (for a &Qt; application, one instance of +QApplication). + + + + +That generally a main window is inherited from +KTMainWindow for &kde; and +QMainWindow for &Qt;. + + + + +That events (⪚ keyboard presses, or mouse movements) are sent to the +application by the underlying window system. + + + + +That QWidget, as the base class for all visible Graphical +User Interface (GUI) components, provices specialized event +handlers through virtual functions. These filter out the appropriate events by +reimplementing the QObject::event(). + + + + +That the &Qt; signal/slot mechanism means basically that a component can send +out signals, and a reciever can connect to those signals to process some +actions. + + + + +That this mechanism avoids inheriting classes for GUI +components, because the signals inform you about things like mouse presses, as +appropriate for a widget. + + + + + +The document view model + + +The document view model is one of the most basic concept sin application design +for those applications that rely on graphical user interfaces. Therefore, a +certain understanding of it's purpose is needed before the programmer can see +it's possibilities, and the many ways to make use of it. + + + +First, lets take a look at the usual design of a typical +&kde;/&Qt; application: + + + + + +Your application instance provides the first connection to your application, and +is the starting point of the event handling for a program. The program +represents itself to the user through a graphical user interface, which is most +often called a main window. The main window then provides the appropriate +functions for the user, such as key accelerators, a menubar, a toolbar, and a +statusbar. In the center, it contains a so called view area, +which means that this part is an instance of another class, usually called a +View. + + + +The view instance is created when the main window is constructed at program +start, and then has to be set as the view area component with a method provide +by the main window: setView(your_view) for &kde; +applications using the KTMainWindow class, +setCentralWidget(your_view) for a &Qt; application using +the QMainWindow class. + + + +Now the view is obviously the area that is responsible for interacting with the +user, to manipulate the data that it represents. As an example, you could use a +QMultiLineEdit as a view, and you will have an editor. +Then you can use the provided slots of the view for connections to the menubar +or toolbar command, like this: + + + + pEditMenu->insertItem(BarIcon("editcut"), i18n("Cu&t"),view, SLOT(cut()),KAccel::Cut, ID_EDIT_CUT); + + + +This creates a menu item in the Edit menu, that, when +activated, directly calls the slot cut() of the instance +view. We suppose you have already created this instance as a +QMultiLineEdit and set this as the view area. + + + +The multi line edit's slot gets called, and cuts out the selected text as a +reaction. The functionality is already provided by the class itself, and so +there is no need to inherit from QMultiLineEdit to create +a view area that is capable of such actions. They are ready to use, and make +application development very fast, you just need the application instance and +the main window, including the connections to your view area, and you're done! + + +That mean a simple editor can be written by creating one single class that +defines the main window behaviour, and how to save and read files into the +editor, just a few basic slots that your main view has to implement itself. + + + + + +Here is the reason we're now introducing this mysterious document view model: +You have to provide the methods on your own to read and write the actual files +you want to edit, with this method of using +QMultiLineEdit view area within the +main window's interface. + + + +Yes this is obviously the easiest thing to do in this case, and perhaps the most +logical. Yet, take a look at the files and their contents as a so-called +Document, to which we can apply the attribute of an +Object in C++ terminology. Then the next step is just a little +one: If I have a document, a view, and a main window, why don't I separate +these three objects from each other? + + + +We can easily create a small class that is responsible for reading a file into a +text stream, and then call the view to draw the text visible to the user. The +same applies to saving the file again. The document class could then provide a +saving method that retrieves the text from the view again, and saves it as a +file. + + + +In the example, these two methods would be the only actions that are necessary +in the document class, because the edit view already provides all the methods +basically needed for an editor, through slots, and you can manipulate the +content of the view through these slots directly. + + + +The main idea for this separation into three objects (document, view and main +window) instead of the usual two (view and main window) is the answer to this +question: What if I want to give the user the possibility to work with the file +in two, or even more windows? + + + +Such things could even be done within one main window, through splitters or +dividers, containing two (or more) view instances which both display +one file. + + + +There it is then, the solution can only be that if the user manipulates +the file contents in one view, the other view must be notified about this and +refresh it's contents. Otherwise a bad scenario will occur if the user closes +one view where he added something to the end of the file which he had cut out at +the beginning, but from the other view, the file would be saved later still +containing the cut section. This is because if the second and final view did +not recognize the cutting, it still contains the text without modification from +the beginning, plus the newly inserted text. + + + +This means that both views have to be synchronized, and this can be done if all +views are notified about each action that the user does. In that case, which +view he actually uses is immaterial. + + + +So finally, a document class is needed to be the one and only holder of the true +contents of the document, and it then is providing the views the possibility to +manipulate those contents. + + + +I hope this has given some insight into this model, although in most cases the +programmer can live without it, whether by just using a provided class as the +view area, or by writing a widget on his own to handle user interaction. Just +so long as you represent one document or file by +one view area, then the view can be responsible for the +data as well as the display, and only provide the methods to retrive or set the +document contents for actions such as reading a file or saving it. + + + +The next model to describe, the MDI, will make a +difference at this point. There you will see the actual necessity for the +document view model, and the extra functionality it provides. + + + + + +The multiple document interface (<acronym>MDI</acronym>) + + +As the last section described the document view model, you will probably have +long since guessed what the MDI means. Users coming from +other operating systems than &UNIX;/&Linux; are used to it, as well as +programmers developing for those platforms. + + + +X-Window applications traditionally are more targeted towards functionality and +stability, and &UNIX; users are used to single windows that provide +functionality, so the document view model is often not required to create +applications. + + + +With &Qt; as a multi-platform toolkit, developers have even more choice, +developing for &Microsoft; &Windows; as well as for &UNIX; systems. On windows, +the lack of &IDE;'s that are capable of handling so called child windows has +been getting to some kind of standard, so this is well addressed by the &Qt; 2.x +library. So, &UNIX; users can profit from this architecture as well. + + + +What then is the real meaning of MDI? An +MDI application generally has the same concept as any other +application. As described above, this is one application instance and a main +window. The view area contains the difference: you don't directly use a view +that represents data and provides interaction to manipulate that data, but +instead you use a view that handles other windows that look like top level +windows. These windows are now representing the former view area, and the main +difference is the interaction changes from: + + +aplication instance -> main window -> view + + +to + + +application instance -> main window -> view -> active child window + + + + +The view now is capable of several actions: + + + + + +Creating as many child windows as the user requests. + + + +Providing methods to retrieve the currently active child window. + + + + +Maintaining a list of open views. + + + + +Managing the child window behavior for maximize, minimize, much as a window +manager does for top level windows. + + + + + +You can use complete widgets, such as +QMultiLineEdit as child windows just as you do for an +application that only provides one window, and have each child window +responsible for it's own data. This could be described as Multiple +Document Interface, where each child window is equal to a single +document. The application then manages the usual actions such as providing +methods for the child window interactions like cut or copy. + + + +Extending this concept with the document view model inhances the possibilities +by far: Imagine that you can open as many windows as you like within the main +window, and that a new child window can be a new view of a document that is +already shown by another child window. The management for this requires a +separation into the already described three objects model, but doesn't limit the +actual number of instances of the documents as well as the views. + + + +Fortunately, &Qt; 2.x contains the possibility to create such applications, and +&kdevelop; provides you with the appropriate application framework for both &Qt; +only programs and for &kde; applications. Using &kde; interfaces will offer you +still more possiblilities, through library functions, as well as inter-process +communication, but these are specail aspects that are covered in more specific +introductions to these techniques + + + +Now you are prepared for following the development of such an application for +&kde; 2.x. Just follow the next chapter to get a first look at the +functionality already provided by &kdevelop; when creating applications. There +we will generate the framework for our tutorial application, +KScribble, and describe the practical aspects of +programming MDI applications. + + + + + + + +The <acronym>MDI</acronym> framework + + +If you're already familiar with previous versions of &kdevelop;, then you will +know that your &IDE; uses so-called frameworks as a starting +point for application development. These frameworks by default contain support +for a generic document-view model, but were previously limited to +SDI (Single Document Interface, one window with one view +area) model structures. + + + +&kdevelop;'s application wizard is now capable of a lot more than previous +versions. It offers new project types, including the major extensions we're +interested in, MDI application frameworks for both &kde; 2.x +and &Qt; 2.x. These frameworks differ only in the use of some library +functions, such as file dialogs or message boxes, as well as the choice of +toolbar and statusbar classes. The &kde; version uses &kde; 2.x methods, the +&Qt; version the corresponding &Qt; functions. + + + +Creating an <acronym>MDI</acronym> framework + + +We're going to jump right into development, by creating the frame application +for KScribble. + + + +Start &kdevelop; and choose Project +New from the menubar, to invoke the +application wizard. + + + +On the first page, you will be shown a tree of project types. These contain +&kde; and &Qt; projects, and from this list, select KDE 2 +MDI from the KDE section. If you want to make a +&Qt; application instead, choose the corresponding option, Qt 2.x +MDI. Then choose Next to continue. + + + +On this page, enter KScribble as the project name, and +1.0 as the version number. Add your name and email +address in the appropriate fields, and you're done. + + + +Click on the Create button, and &kdevelop; will generate +our first version of KScribble. You can watch the +output in the last page of the wizard. Notice the messages telling you that the +messages file has been set up for your project, this will later +allow you to have KScribble translated into other +languages. When everything is done, you can finally press +Exit to return to the &kdevelop; &IDE;. + + + + + +Overview + + +It's important at this point to have some understanding of where in the newly +generated sources things are located, and what you as a programmer can now do to +make KScribble into a unique &kde; application. + + + +First of all, in the Classes viewer, you will see three +already created classes, KScribbleApp, +KScribbleDoc, and KScribbleView. +As previously explained, each of them has a certain part to play within the +application. The App class builds the main window, and coordinates user +interaction. The Doc class maintains the documents that an application can +manipulate. Finally the View class is responsible for user interaction with the +child windows, and communicates with the document connected to it. + + + +These facts have several consequences. To make best use of the provided +functionality, the programmer is bound to use the given View class. By default, +the View inherits QWidget as a minimum, but you're far +from limited to this. Inheriting from another class is not too much work, and +there is also the possibility to use ⪚ a QMainWindow or +KTMainWindow as the class to inherit from, and use +another class to manage the view. + + + +In the next chapter we'll begin extending KScribble +to manage it's documents. After that we'll implement the user interaction, and +you will see the first functionality that is unique to our application: we can +draw pictures, load pictures and save them too! + + + + + + + +Defining the documents + + +The first step when creating an application based on the document view model +should always be to think about what kind of data the application has to +manage. This decides for you what the view class will look like, but more +especially it decides how the document class will read and write data to and +from files, and how it will offer methods to manipulate that data. + + + +As KScribble will be a simple drawing application +that operates on graphical data, we will use the &Qt; class +QPixmap for storing our paintings while they are being +edited. QPixmap also offers simple methods to read and +write pictures into files, so the serialization of the document data is done in +just two lines, one for reading and one for writing. + + + +We need also to define a pen that draws into a document, set it's width, and +it's color, and make it available for the view class to retrieve. Actually, you +want the view offering the drawing methods, but the document as the central +element for all the views has to hold the pen originally, because you could +otherwise end up with two views of the same document using different pens! + + + +So, to define how our document class should work, we will add one instance of +QPixmap, one of QPen, and then +edit the methods newDocument(), +openDocument() and saveDocument(). + + + +Adding the Instances + + +Open the file kscribbledoc.h by +selecting it in one of the file viewers, or by a click on the +Classes viewer over the class +KScribbleDoc. Then add the lines marked with -> from the +following code snippet: + + + +-> #include <qpixmap.h> +-> #include <qpen.h> + + class KScribbleDoc + { + +-> protected: + +-> QPen currentPen(){ return pen;}; + +-> int penWidth() +-> { return pen.width(); } + + public slots: + void updateAllViews(KScribbleView *sender); + + protected: + +-> QPixmap buffer; + + private: +-> QPen pen; + /** the modified flag of the current document */ + bool modified; + + + +As you can see, we have added pen and buffer, as well as +currentPen() and penWidth(). As pen +is declared private, we offer a possibility to retrieve the pen as +well as the pen width. As these are already implemented within the class +declaration, we don't have to add them to the implementation file, which is +where we now turn our attention. + + + + + +Initialization of the document + + +Select the method newDocument() in the +KScribbleDoc class, to jump to the method declaration. +Here we're only adding one line, marked with the arrow: + + + + kscribbledoc.cpp + + bool KScribbleDoc::newDocument() + { + ///////////////////////////////////////////////// + // TODO: Add your document initialization code here +-> pen=QPen( Qt::black, 3 ); + ///////////////////////////////////////////////// + modified=false; + return true; + } + + + +This initializes the pen with the color black, and a width of 3 pixels. The +QPen class has some more constructors, but this one is +sufficient for our needs here. + + + + + +Implementing the serialization + + +What is now left to do is to define how to open and save oru pictures. This is +done through the following methods: + + + + bool KScribbleDoc::openDocument(const QString &filename, const char *format /*=0*/) + { + + QFile f( filename ); +-> //if ( !f.open( IO_ReadOnly ) ) +-> // return false; + ///////////////////////////////////////////////// + // TODO: Add your document opening code here +-> if(!buffer.load( filename, "PNG" )) +-> return false; + ///////////////////////////////////////////////// +-> //f.close(); + + + bool KScribbleDoc::saveDocument(const QString &filename, const char *format /*=0*/) + { + QFile f( filename ); +-> // if ( !f.open( IO_WriteOnly ) ) +-> // return false; + + ///////////////////////////////////////////////// + // TODO: Add your document saving code here +-> if(!buffer.save( filename, "PNG" )) +-> return false; + ///////////////////////////////////////////////// + +-> //f.close(); + + + +Add the lines marked with arrows to your code. What we have done here is to +comment out the passages where the file +filename is opened, because that +is done automatically by the load and save methods of +QPixmap which we have added instead. + + + +Other documents may open a file and read in it's contents, such as text lines, +so the QFile methods are already present in the +codeframe. + + + +As save() and load() return a boolean +value if the operation is successful, we're returning +false if not, so that the rest of the framework gets +a return value and can give out warnings if the operation was not successful. + + + +The load() and save() methods are now +already provided in QPixmap. They require the filename +and format as arguments. The source framework, on the other hand, does +not call the document methods with the format just yet. + + + +If only one format is used, it is sufficient to set the format here. For now we +are using PNG as the format. See QImageIO +for more details about the image formats that can be opened. + + + +Now we're almost finished defining our document structure. The +QPixmap buffer serves us as a buffer, storing the +original picture contents while we're wroking on it, and the pen is a valid pen +for all views connected to the document. Note that the intialization of the pen +is done in newDocument(). This method is aways called +after the constructor within the framework internally, so you should add +document instances initializations there, as we have done with the pen. + + + +In the next chapter we will turn to the view class to define how the view shall +cooperate with the user, as well as how it accesses the document. Then we'll be +ready to paint! + + + + + + + +Defining the view + + +In this chapter we'll turn to the view class of +KScribble, to define how the child windows shall +work. + + + +First of all, we notice that KScribbleView is derived +from QWidget by default. This is the minimum requirement +for a child window, but it's is sufficient for our needs. + + + +When it comes to defining a new widget's behavior, we need to know how the user +shall interact with the window. In our example, this will obviously be with the +moust. Therefore, we have to overwrite some virtual methods from +QWidget that process mouse events the widget recieves. + + + +What we need is to know when the user presses a mouse button, because the +drawing shall only take place when the mouse button is pressed. then we need to +know when the mouse is moved (and to know where it moves to), as well as when it +has been released, in order to finish the stroke the user has drawn. Further, +we want our picture to be painted on the window, and resized if the user decides +to resize the window he draws into. As members, we will also add a +QPointArray polyline, and a boolean value +mousePressed. + + + +From the example below, add the code with the arrow to your include file for the +class KScribbleView. + + + + kscribbleview.h + +-> #include <qpointarray.h> + + class KScribbleView + { + . + . + protected: + virtual void closeEvent(QCloseEvent* ); + +-> virtual void mousePressEvent( QMouseEvent * ); +-> virtual void mouseReleaseEvent( QMouseEvent * ); +-> virtual void mouseMoveEvent( QMouseEvent * ); +-> virtual void resizeEvent( QResizeEvent * ); +-> virtual void paintEvent( QPaintEvent * ); + + KScribbleDoc *doc; + +-> private: +-> bool mousePressed; +-> QPointArray polyline; + + } + + + +Reimplementing event handlers + + +Now we come to the actual implementation of the event handlers. As explained in + the &kde; library reference, &Qt; has a good way of +handling user events, especially when they target widgets. +QWidget as a base class preselects the events and +provides basic code handlers. As these are declared as virtual, we +can overwrite to define how our widget shall react to user actions. One is +already overwritten, the closeEvent() method. This is +necessary because our main window, represented in the App class, already +preselects closing child windows and handles this. Therefore, the default event +handler, which just accepts the closing, must be overwritten to prevent that +happening, and to let the App class do the job. + + + +First of all we have to declare the widget default behavior in the constructor, +by initializing members and setting predefined values. + + + + kscribbleview.cpp + + + KScribbleView::KScribbleView(KScribbleDoc* pDoc, QWidget *parent, const char* name, int wflags) + : QWidget(parent, name, wflags) + { + doc=pDoc; + +-> setBackgroundMode( QWidget::NoBackground ); +-> setCursor( Qt::crossCursor ); +-> mousePressed=false; +-> polyline=QPointArray(3); + } + + + +We're setting the background to NoBackground, a cursor +(crossCursor), and initializing +mousePressed and polyline. Then we'll +start implementing our first event handler, +mousePressEvent(), to recognize when the user presses the +mouse and where. + + + + +The following implementations have to be inserted as a whole, so the lines to +add are not marked with an arrow. + + + + +void KScribbleView::mousePressEvent( QMouseEvent *e ) +{ + mousePressed = TRUE; + polyline[2] = polyline[1] = polyline[0] = e->pos(); +} + + + +Here, we are setting mousePressed to +true, so this event is stored somehow. the second +line is not so obvious. There we are storing the position where the mouse was +pressed into our array's first three elements. As the array is a +QPointArray, it can store values of the type +QPoint, which contain an x and y value themselves. What +we will do with this array is to store positions of the mouse and create a +drawing routine from there, in the mouseMoveEvent. + + + +void KScribbleView::mouseMoveEvent( QMouseEvent *e ) + +{ + if ( mousePressed ) { + + QPainter painter; + painter.begin( &doc->buffer ); + painter.setPen( doc->currentPen() ); + polyline[2] = polyline[1]; + polyline[1] = polyline[0]; + polyline[0] = e->pos(); + painter.drawPolyline( polyline ); + painter.end(); + + QRect r = polyline.boundingRect(); + r = r.normalize(); + r.setLeft( r.left() - doc->penWidth() ); + r.setTop( r.top() - doc->penWidth() ); + r.setRight( r.right() + doc->penWidth() ); + r.setBottom( r.bottom() + doc->penWidth() ); + + doc->setModified(); + bitBlt( this, r.x(), r.y(), &doc->buffer, r.x(), r.y(), r.width(), r.height() ); + } +} + + + +This event handler is probably the most difficult, so we will do a step by step +walkthrough to understand what's been done. + + + + + +First of all the event handler receives all mouse movements over the widget. + + + + + +As we're only interested in the move if the mouse is pressed, because that is +the time to draw, we have to ask then if mousePressed is +true. This has been already taken care of through +the mousePressEvent() event handler, so we don't have to +worry any more about it. + + + + + +Now we're ready to start the painting action. First we create a +QPainter and let it draw into the buffer of the +document. This is important, because the document's buffer contains the real +contents, the view is only acting as a communicator between the document and the +user. + + + + + +We get the pen from the document instance as well, by calling +currentPen(). + + + + +The next three lines assign values inside the polyline +QPoint array, setting point 2 to 1, 1 to 0 and 0 to the +point the move went to. This is the contents of the event we're interested in. +Suppose we've just pressed the mouse, so all three values of the array contain +the pressing position, and the first mouse move event appears that contains the +first position to draw a line to. This value is moved into the first position +in the array again. + + + + + +You may be wondering why the array needs three points then, if we're only +interested in drawing a line from one position to the next. These lines explain +that. After drawing into our buffer is finished, with +drawPolyline() and painter.end(), we +create a rectangle r and use +boundingRect() from QPointArray to +get a QRect that contains all three points. Therefore, +we need three values to have the most complete rectangle. Then we use +normalize() to have the leftmost and topmost values the +smallest (as coordinates are counted from top to bottom, and from left to +right). + + + + + +The next thing to do is to adapt the size of the rectangle to the size of the +pen. The pen has a thickness we get with penWidth(), and +we widen the rectangle by the width of the pen. Imagine the mouse movement was +only two pixels, but the pen thickness is set to ten pixels wide - the rectangle +wouldn't contain the entire painted area if it isn't enlarged by the pen width +first. + + + + + +Finally, we set the document modified, and use bitBlt() to +copy the rectangle out of the buffer and into the widget. +bitBlt operates bitwise, and is very fast, so that is a +good method to copy the painted area from the buffer to the widget, instead of +repainting the whole window. It's first argument is the object to draw onto +(the destination), in this case our widget, so we use the pointer +this. + + + +The next two arguments give the destination top left position to start copying +to, then follows the source to copy the picture from, including it's coordinates +and the width and height. + + + + + + +As the pixmap coordinates are the same as the coordinates the widget uses, +because our pixmap is drawn into the top left corner, the coordinates for the +source and destination top left point are the same. This is however, something +you will need to watch out for in some of the next steps, so we bring it to your +attention now that this may not always be the case. + + + + +Next comes what happens if we release the mouse button. The drawing has to stop +when we move the mouse again, so we set mousePressed to +false here: + + + +void KScribbleView::mouseReleaseEvent( QMouseEvent * ) { + mousePressed = FALSE; +} + + + +So, now we have finished implementing the user interaction when it comes to +actual drawing operations. As the example shows, it's not too complicated to +use a document view model. Just create your document interface so that it +contains the contents, and copy the contents to your view. + + + + + +Painting and resizing the document + + +What is now left to do are two more virtual event handlers that need +reimplementation. First of all, we have to take care that our picture gets +painted into the window when something else happens. For example, when you open +another window that obscures the painting, then change focus to your painting +again, but it won't be there, unless your paint event gets processed to redraw +the picture. + + + +void KScribbleView::paintEvent( QPaintEvent *e ) +{ + QWidget::paintEvent( e ); + + QRect r = e->rect(); + + bitBlt( this, r.x(), r.y(), &doc->buffer, r.x(), r.y(), r.width(), r.height() ); +} + + + +This method also uses bitBlt() to draw the picture from the +buffer into the widget. Here we need only the rectangle that gets repainted, so +we we retrieve the gemoetry from the event (e->rect() and use +the coordinates for bitBlt(), just as we did in the +mouseMoveEvent() + + + +We still haven't done anything about the size of the pixmap. We didn't set it +anywhere, we did not even use the pixmap in the document class, except for +loading and saving, but these methods aren't called when creating a new +picture. So it seems our pixmap doesn't have a size, nor a predefined +background. Even if we would have set the size, it's contents would be random +colors, because it is uninitialized. On the other hand, we have the fact that +the KScribbleView instances get resized when they show +up, at least with the minimum size. This is the point where we can add +initialization as well, because the user can change the size manually, and the +widget will receive a resize event as well. For reasons of simplicity, we want +to set the pixmap size for now to the same size as the widget. All this is done +in the event handler resizeEvent(). + + + +void KScribbleView::resizeEvent( QResizeEvent *e ) +{ + QWidget::resizeEvent( e ); + + int w = width() > doc->buffer.width() ? + width() : doc->buffer.width(); + int h = height() > doc->buffer.height() ? + height() : doc->buffer.height(); + + QPixmap tmp( doc->buffer ); + doc->buffer.resize( w, h ); + doc->buffer.fill( Qt::white ); + bitBlt( &doc->buffer, 0, 0, &tmp, 0, 0, tmp.width(), tmp.height() ); +} + + + +Here we first call the resizeEvent handler or +QWidget. Then we calculate the size of our picture. +Because we can resize a window to be either bigger or smaller, we have to +separate these two cases. If we resize to a smaller geometry, the picture +should still contain it's contents. If, on the other hand, we resize to a +bigger widget, we have to resize the pixmap as well to that bigger size. + + + +The calculated values are stored in w and +h. Before the resize takes place though, we create a copy of +our pixmap in the document in tmp. Then we resize the buffer +(the document), fill it with white, and then copy back the contents from tmp to +the buffer. This resizes our pixmap always synchronous with the widget that +displays it, but doesn't loose contents which are outside the visible area, if +the resizing made the widget smaller. + + + +Now, finally, our first application has gained a step where we can test it's +functionality. Just hit Run in &kdevelop;, and after +KScribble shows up, you're ready to paint your first +picture with it! + + + + + + + +Extending the &GUI; + + +As we have seen, we have already provided KScribble +the ability to open and save pictures with teh document class, and we have +enabled user interaction through overwriting virtual methods in the view class. +All this has gained us our first functionality, and now we can draw pictures as +well. + + + +When we created the QPen instance in the document class +however, we set some predefined values for the pen. The color is black, and the +pen is 3 pixels wide. As you would usually want to change these values in a +drawing application, we have to enhance the main &GUI; by providing ways to set +these, according to which window is currently active, and the document connected +to it. + + + +This chapter then, will introduce you to the following concepts: + + + + + +Adding a new menu to the menubar. + + + + +Extending the toolbar with icons for the actions defined in the menubar. + + + + +Creating a new dialog with &Qt; Designer. + + + + +Connecting the new commands of the menubar and toolbar to calling the dialogs. + + + + +Enabling the document class to let us change the pen values. + + + + + +Finally, we also add a method to delete the document contents complete with a +menubar command. + + + +Adding the <guimenu>Pen</guimenu> menu + + +As the title of this section says, we will be adding a menu for setting pen +values here. Menus that are inserted into the menubar are instances of +QPopupMenu and you can have a look at how the current +menubar is created when you switch to the KScribbleApp +class, method initMenubar(). You will see that the menubar +items are created in the order they appear on the menubar, but that isn't +necessary. There are two important things that affect the appearance of the +menubar: + + + + + +The order of the menu items in the menus. + + + + +The order of insertion of the popup menu into the menubar. + + + + + +Last but not least, you have to create some menus by calling the constructor. +The class declaration already contains the pointers to the popup menus, so we +will first have to add our Pen here. + + + +kscribbleapp.h + +class KScribbleApp +{ +. +. + private: + QPopupMenu* pPenMenu; + +} + + + +Now we are going to create the menu itself. Change to the implementation of the +method KScribbleApp::initMenuBar() and add the lines marked +with an arrow below: + + + +void KScribbleApp::initMenuBar() +{ +.. + +-> /////////////////////////////////////////////////////////////////// +-> // menuBar entry pen-Menu +-> pPenMenu = new QPopupMenu(); +-> pPenMenu->insertItem(i18n("&Color"), ID_PEN_COLOR); +-> pPenMenu->insertItem(i18n("&Brush"), ID_PEN_BRUSH); + + menuBar()->insertItem(i18n("&Edit"), pEditMenu); +-> menuBar()->insertItem(i18n("&Pen"), pPenMenu); + menuBar()->insertItem(i18n("&View"), pViewMenu); + + +-> connect(pPenMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); +-> connect(pPenMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); +} + + + +You see now that we first create the menu with new +QpopupMenu. Then we use the +insertItem() methods to add two menu entries, +Color and Brush. + + + +The visible commands are inserted with the method i18n(), +which ensures that you can interanationalize your application. As a rule you +should alwyas declare all visible-to-the-user text with the method +i18n(). for &Qt; only programs, us it's corresponding +method tr() instead of i18n(), as &Qt; +has it's own ways of internationalizing applications. + + + +The second argument above is a macro, the ID of the menubar +item. This ID is a number that we have to set using +#define in the file resource.h, where +you will see all the other already used IDs declared. There +are also other ways to insert menus, by directly connecting a slot to the +inserted entry, but the applicaiton framework uses IDs to +select which action has been activated, and highlighted. Therefore, each menu +entry, independent of which popup menu it appears in, has it's own unique +number. Since the numbers aren't too easy to remember later, setting a +#define for the ID is a nice solution. + + + +The popup menu is now inserted into the menubar with +insertItem() as well, and with the pointer to the menu as +second argument. + + + +Note that we insert the popup menu after the Edit men and +before the View menu, so that it will appear between those +menus in the menubar. + + + +What is also importnat when creating menus is that they should be available to +the user with shortcuts. In menus, you will often see underlined characters +that the user can jump directly to, by pressing &Alt; and the underlined letter +of the menu entry. As a programmer, you set this character with an ampersand, +so in our example the Pen will later be accessible from the +keyboard by pressing &Alt;P +. Within the menu, the user can press another button to go directly to the +command he wants, so in the menu itself all items should have this kind of +accelerator key as well. Note that you should write item insertions together in +group that have the same visible access, so you can kee a better overview of the +characters you hvae already used. No accelerators should be visible twice at +the same time. + + + +This is also important for translators. In other languages, the character you +chose as accelerator may not be in the menu entry anymore, so translators will +have to reset them sometimes. + + + +Finally, in the last two lines above, we're connecting the pen menu with two +slots. One is for when the menu signals that it is activated, and the action +should be executed, and one for when it is highlighted. That allows making a +statusbar help message available to the user. You can have a look at the +methods the menu is connected to, as they contain switch statements where the +menu ID sent is compared and the corresponding action is +called. + + + +What's left now to do is add the #define statements to the +file resource.h + + + +resource.h + +/////////////////////////////////////////////////////////////////// +// Pen-menu entries +#define ID_PEN_COLOR 14010 +#define ID_PEN_BRUSH 14020 + + + +You will see that the numbers are unique for these entries. You must be careful +ont to set the same number for two entries, but if this should happen by +accident there's still the compiler which will inform you about redefining. + + + +This is currently all you have to do to add a new menu to your menubar. The +actions they will execute simple, Color will call a +color setting dialog box, and Brush will call a +dialog to select the brush width. Of course, we haven't created this dialog +yet! + + + +First, lets extend the toolbar with two icons for these actions. + + + + + +Adding toolbar buttons + + +You might think that some new commands should be made available as toolbar +buttons, because they are often used and offer increased functionality. You can +easily do this by adding buttons in the framework's +initToolBar() method of the App class. + + + +Here we've decided to add a button for both of our new menu entries in the +Pen menu, but they first need icons. + + + +You will very likely find icons to use in the &kde; directory /toolbar, or if you are of an artistic mind you can +create some for yourself. KIconEdit is very suitable +for painting icons, so we'll take a small detour and make our own icons. + + + +Choose New from the &kdevelop; +File menu, and select from the Linux/KDE +tab the entry for Icon (*.xpm). Enter the name you want to +give your new icon in the field on the top right, which for our example could be +pencolor.xpm. You can choose where in your project +directory you want the icon to be saved, by browsing to a different location in +the bottom part of the dialog. It is good practise to keep toolbar icons in a +separate directory, so create a new directory under your +KScribble project directory, and name it toolbar. Change to this directory in the +New File... dialog and press the OK +button. + + + +The new icon should now be created in the new toolbar directory, and will be opened by +&kiconedit; automatically. Paint something that will symbolize to the user what +the button is intended to do, save the pixmap within &kiconedit; and then switch +back to &kdevelop; In the Files or +Groups panel, select the icon by a &RMB; click and select +Properties from the popup menu. You will see that the +icon is included in the distribution, but for your program to find the icon +again later, you have to set the installation destination as well. Check the +Install option and enter into the newly active field the +following: + + + +$(kde_datadir)/kscribble/toolbar/pencolor.xpm + + + +This will install the pixmap in the &kde, file system hierarchy's data +directory, where each application has it's own subdirectory containing +additional files needed by the application. Icons have to be installed into a +subdirectory here called toolbar, so the +application's icon loader can find the pixmaps for your program. + + + +After you're finished, you can repeat all these steps with the second icon, for +selecting the pen width. Name this one penwidth.xpm. + + + +Now we have only to insert these buttons into the toolbar. Add the arrow marked +lines from the following example into your sources: + + + +void KScribbleApp::initToolBar() +{ +.. + toolBar()->insertButton(BarIcon("editcopy"), ID_EDIT_COPY, true, i18n("Copy")); + toolBar()->insertButton(BarIcon("editpaste"), ID_EDIT_PASTE, true, i18n("Paste")); + toolBar()->insertSeparator(); +-> toolBar()->insertButton(BarIcon("pencolor"), ID_PEN_COLOR, true, i18n("Color") ); +-> toolBar()->insertButton(BarIcon("penwidth"), ID_PEN_BRUSH, true, i18n("Width") ); +-> toolBar()->insertSeparator(); + toolBar()->insertButton(BarIcon("help"), ID_HELP_CONTENTS, SIGNAL(clicked()), +.. +} + + + +Here we use the methods of KToolBar to insert buttons. +The first argument, BarIcon(), tells the method to lad the +icon for the button. What may seem unusual is there is no mention of the +format. The preferred format for &kde; 2 is PNG, but it works just fine with +xpm files as well. You can use &pixie; to convert them in any case, or perhaps +a later version of KScribble! + + + +The second argument is again the ID The commands are then +automatically activated, as the toolbar() is already +connected to the same methods as the menubar is for signal +activated(). The third argument means +available when true and +deactivated when false. As we +want these new icons to be available, we set this to +true. + + + +Finally, we add a tooltip for these buttons, which we also embrace with +i18n() to allow internationalization. + + + +Now the &gui; is extended, at least visually. You can compile and run +KScribble again, and see how it looks now. Of course +the new items in the menu and toolbars can't execute any action, that is what +we're going to be doing in the next section. You will also note that the +toolbar icons we just added are not displayed - which is because we didn't +install KScribble, and so they can't be found. The +other icons you can see were already shipped with &kde;, so they are visible +without needing any new installation. + + + + + +Creating the pen width dialog + + +As we've already created the appropriate menubar and toolbar commands, we now +have to build the first dialog, to set the pen width. For this select +New from the &kdevelop; File menu, +and select Qt Designer File (*.ui). Enter the dialog file +name as kpenbrushdlg, and the extension will be +automatically added. Press the OK button. + + + +When constructing a dialog, we have to think about what is really needed by the +user. Here we will need a label, to display what will be set. A spinbox, with +up and down buttons to set the pen width value is needed, and three other +buttons, one for resetting the pen width to the default value, one to cancel the +dialog, and an OK button for applying the new value. + + + +The &Qt; Designer will open, first asking you to +choose which kind of interface item you wish to create (in this case, we are +making a Dialog, and then when you have chosen, showing you +an empty canvas that will be the dialog background. + + + + + + +We will add the buttons in this order to the dialog. Order is important, +because the tab focus follows the order by which the widgets are created. If +you start with the OK button, then the spinbox, then the +Cancel button, the input focus will also start with the +OK button, then the spinbox, and then the +Cancel button, which is probably not what the user is +expecting. The tab focus should follow the widget's items top to bottom, from +left to right, so we should construct the dialog in this order also. + + + + + + + +The Label + + +Choose the icon that looks like an A, or choose +Tools Display +TextLabel to select the label tool. You +can now use the cursor to draw out a label on the canvas. You don't need to be +too precise in your dimensions, as they are very simple to change afterwards, +but place the top left corner at position x: 50, y: 20. &Qt; +Designer shows you this position with a yellow +tooltip, as you drag the label around the canvas. + + + +In the Property Editor on the left side of the screen, +choose the text property. Change the default text +(TextLabel1) to say Pen Width. Adjust the +width of the label to a width that matches the label contents in the x +direction. About 120 pixels should be fine, and you can either use your mouse +to drag the label to a new size, or by setting the values in the +geometry section of the Property +Editor. + + + + + +The Spinbox + + +Press the Spinbox icon on the toolbar, or choose +Tools Input +SpinBox from the menu. Place your +spinbox on the widget background, to the right of the label we created in the +last step. + + + +In the Property Editor, set the name of the spin box to +width_spbox. In the maxValue and +minValue fields, set them to 100 and 1 respectively. This +should be sufficient for brush widths. + + + + + +The Buttons + + +Finally, we need to create the three buttons. The leftmost button is the +default one. Create a button, with either the icon that looks like an +Ok button, or the +Tools Buttons +Pushbutton menu entry. Place it +somewhere nicely on the bottom of the dailog, and set the name to +default_btn, and the button text to +Default. + + + +Repeat this for the OK button, with the name +ok_btn and the Cancel button, with +the name cancel_btn. Set the button text to +&OK and &Cancel +respectively. + + + + + + +When you're happy with the layout of the dialog choose +File +Save and then close &Qt; Designer + + + + + +Connections and setting up + + +After we have created the &gui; of the dialog, we have to add some functionality +to the buttons, and provide ways to set and retrieve the selected value of the +spinbox. We want the dialog to display the current value when it gets called, +and to access the selected value when the user pressed the +OK to quit the dialog. + + + + + + +In the generated class for the dialog, +KPenBrushDlg, you can see one method besides the +constructor and the destructor, initDialog(). This method +implements the whole &gui; construction, so we don't have to worry about that +anymore, and we can go directly to adding the usual connections for the +pushbuttons first. + + + +Add the lines marked with arrows to the constructor of the dialog: + + + +KPenBrushDlg::KPenBrushDlg(int curr, QWidget *parent, const char *name) : QDialog(parent,name,true){ + initDialog(); + +-> connect(default_btn, SIGNAL(clicked()), this, SLOT(slotDefault())); +-> connect(ok_btn, SIGNAL(clicked()), this, SLOT(accept())); +-> connect(cancel_btn, SIGNAL(clicked()), this, SLOT(reject())); +} + + + +This provides the functionality for the three buttons on the bottom of the +dialog, when the user clicks on them. First we set the +Default button to execute a slot called +slotDefault(). This slot is still to be implemented below, +where we will set the default value of the spinbox directly. + + +The second connect() call connects the +OK to call the slot accept(), +provided by QDialog. The next line connects the +Cancel to QDialog's +reject() slot. This will both close the dialog and reset +the resulting value, which we will use later, when we implement the method that +calls the dialog to determine if we want to see the value set, or to ignore any +changes. + + + +Now we have to add two methods to set and retrieve the spinbox value. + + + +void setCurrent(int curr){ width_spbox->setValue(curr); } +int width() { return width_spbox->value(); }; + + + +Add these methods to the class declaration with the modifier +public, as we want to set and retrieve the values when we +call the dialog to show up. The setCurrent() method will +be used to set the current value the pen has. The width() +method returns us the selected width when the user presses +OK, and we want to know which value has been chosen. + + + +Last but not least, we need to implement the slotDefault() +method. + + + +//kpenbrushdlg.h: +//method declaration: + +public slots: + void slotDefault(); + +//kpenbrushdlg.cpp: +//method implementation: + +void KPenBrushDlg::slotDefault() +{ + width_spbox->setValue(3); +} + + + +This will set the default value to 3 pixels for the pen. + + + +Now we're ready with our first dialog, and we can turn to other application +classes to adapt some things, and add the method calls to invoke the dialog. + + + + + +Calling the dialogs + + +As you may guess, calling the dialogs means that we will not only implement +calling our width selection dialog, but also the method added for selecting the +pen color, one after the other. + + + +First, create a method slotPenBrush() in the class +KScribbleApp. + + + +void KScribbleApp::slotPenBrush() +{ + slotStatusMsg(i18n("Setting brush width...")); + + // get one window with document for a current pen width + QWidgetList windows = pWorkspace->windowList(); + KScribbleView* m = (KScribbleView*)windows.at(0); + KScribbleDoc* pDoc = m->getDocument(); + int curr_width=pDoc->penWidth(); + + // create the dialog, get the new width and set the pen width for all documents + KPenBrushDlg* dlg= new KPenBrushDlg(this); + dlg->setCurrent(curr_width); + if(dlg->exec()){ + int width=dlg->width(); + for ( int i = 0; i < int(windows.count()); ++i ) + { + m = (KScribbleView*)windows.at(i); + if ( m ) + { + pDoc = m->getDocument(); + pDoc->setPenWidth(width); + } + } + } + slotStatusMsg(i18n("Ready.")); +} + + + +Here we first have to access the window list, and retrieve a pointer to a +document. This can be the document of any window, because all documents should +have the same current pen width. Then we create an integer variable +cur_width, which stores the current pen width. + + + +Now we can call the dialog, by creating the dlg instance of +KPenBrushDlg. Then we set the current pen width by +calling dlg->setCurrent(), the method we added to the +dialog. + + + +The if() ensures that the following code is only executed +when the result code of the dialog box has the accept flag set, which means of +course, the code is only executed if the user pressed the +OK button on the dialog. + + + +Assuming the user changed the value, and pressed OK, we +have to set all documents to use the new pen width. For this we use the +for() loop, and set every document's pen width to the +width variable we retrieved before with +dlg->width(). + + + +We haven't yet implemented the method setPenWidth() in the +document class, so we'll do that right now. + + + + +kscribbledoc.h: + +public: + void setPenWidth( int w ){ pen.setWidth( w ); } + + + +What is missing to execute any action, is to add the methods that shall be +called when the menu items are activated or the toolbar buttons pressed. For +this, we have to add the IDs to the slot +commandCallback(), which selects and executes the according +methods we want to call if a menu or toolbar item was chosen: + + + +void KScribbleApp::commandCallback(int id_) +{ + switch (id_) + { + case ID_PEN_BRUSH: + slotPenBrush(); + break; + + case ID_PEN_COLOR: + slotPenColor(); + break; +.... + } +} + + + +This addition also adds the slotPenColor() method to +the execution list to set the pen color, which we will implement now. + + + +void KScribbleApp::slotPenColor() +{ + slotStatusMsg(i18n("Selecting pen color...")); + + QColor myColor; + int result = KColorDialog::getColor( myColor, this ); + if ( result == KColorDialog::Accepted ) + { + QWidgetList windows = pWorkspace->windowList(); + KScribbleDoc* pDoc; + KScribbleView* m; + for ( int i = 0; i < int(windows.count()); ++i ) + { + m = (KScribbleView*)windows.at(i); + if ( m ) + { + pDoc = m->getDocument(); + pDoc->setPenColor(myColor); + } + } + } + slotStatusMsg(i18n("Ready.")); +} + + + +When looking at the code, we see that we use yet another new method of the +KScribbleDoc class to set the pen color. This one has to +be implemented as follows: + + + +kscribbledoc.h: + + /** sets the pen color */ + void setPenColor( const QColor &c ){ pen.setColor( c ); } + + + +Be sure to add the declaration of the two new methods, +slotPenBrush() and slotPenColor() to +the class KScribbleApp, so that our class knows about +these methods. + + + +All done! Lets do quick summary on what we've done in this chapter: + + + + + +First we added menubar and toolbar commands for two dialogs that we want to +call. + + + + + +Then we created the first dialog, to set the pen width, with &Qt; +Designer. + + + + + +After that, we created all the necessary methods for our menubar/toolbar items +to invoke the dialogs, and to set the properties we want to change. + + + + + +Finally, we added the necessary set of functions to the document, so that we are +able to change the values after the dialogs are executed. + + + + + +Through this structure, you should now have an overview of how to extend your +application, adding more functionality and manipulating settings that influence +the behavior of the document and view interaction. + + + + + + + +Extended views + + +In this chapter we're going to extend the funtionality of our view widget with +two enhancements: synchronized views and scrolled views. + + + +Synchronizing views + + +Let's first explain what advantage this will bring us, and how we're going to do +it. While playing with KScribble, you may have +noticed that if you open another view of a document, by calling +Window New +Window, this new view works with the same data as the +first view, and so do any further views you create. + + + +When it comes to painting into the document however, you can only do this in one +view, because the other views are not displaying the document contents at the +same time. Only if you obscure one view that doesn't display the current (updated) +contents, and then bring it to the front again, it will then display the current +contents. + + + +This is because after a widget has been obscured and then activated again, it +receives a paint event from the window system. This calls +KScribbleView::paintEvent() again, and that is the one that +finally redraws the contents of the area that was obscured. + + + +What we want to achieve though, is that all views should paint in synchrony with +each the one the user is actualy painting into. You will see in fact, this +enhancement is a very simple task. + + + +The document class already provides us a method +updateAllViews(), which calls the +update() method on each view in the document's view list. +This makes it very easy to synchronize the document contents. Every time the +document contents are changed, in our case by mouse movoements (where we copy +the changes to the buffer with bitBlt(), we just have to +call updateAllViews(this). The +this pointer is necessary because the calling view doesn't +need a repaint, and the update() method is only executed if +the sender view is not the same as it's own. + + + +What you've got to do here is only to call +updateAllViews(this) at the end of the virtual methods +mousePressEvent(), mouseMoveEvent(), +and mouseReleaseEvent(), then you're finished. + + + +Take this as a general rule in your applications, that each time the contents of +the document is changed by a view, call updateAllViews(). +How the update is to be executed is implemented in the widget's +update() method. You may be content to simply setting +⪚, the changed text in an editor. For our application we just call +repaint(), which generates a paint event and copies the +contents of the document into the view again. + + + + + +Scrolled views + + +In this section we will add a piece of functionality that can be quite +threatening to developers, if you can't use an already implemented widget that +provides the scrolling for you. + + + +What precisely does scrolling mean? In our context, the problem begins when we +want to see a picture that is bigger than the view can display. The result so +far is that you can only see as much as the size of the view allows, starting at +the top left corner. The rest will be hidden from the user's sight. + + + +A scrollview on the other hand, is a widget that provides a scrollbar on the +right and bottom sides of the widget, by which the user can move +the contents. + + + +In fact, the contents are not moving, but the view area is moving instead, to a +different position within the document. Fortunately &Qt; provides a class +(QScrollView) that itself inhereits from +QWidget and offers the same base functionality as an +ordinary widget, while managing the contents through scrollbars. You have the +additional option of using either an instance of +QScrollView, creating the child widgets to manage the +scroll view as parent and then add them to the scrollview with +addChild(), or to create a view by inheriting +QScrollView and draw into the viewport. + + + +The viewport is a defined area inside the scrollview which you can draw into, +instead of directly to the widget. The difference here is that +QScrollView provides a set of event handlers similar to +QWidget, but especially for the viewport. So, what was +formerly a mousePressEvent() in our view, will become +instead a viewportMousePressEvent(), and a +paintEvent() will become a +viewportPaintEvent(). + + + +This second possibility then will suit our needs to make +KScribbleView a scrollable widget, and so we have to make +the following modifications: + + + + + +First we have to make the document use a size of it's contents. This can be +done by getting the size of the opened picture, and for a new picture, defining +a default start size. In other painting applications, this size can normally be +changed by a command provided by the &gui;, ⪚ a dialog that asks for a new +width and height as well as a method to shrink the picture contents to fit that +new size. + + + + + +Changing the inheritance of KScribbleView from +QWidget to QScrollView. + + + + + +Renaming the virtual methods to the corresponding viewport methods of +QScrollView. + + + + + +Adapting the virtual event handlers to act on the geometry of the viewport. The +old implementation relies on the geometries of QWidget +starting at the top left corner of the widget. If the view is scrolled, and the +top left corner is not visible, we have to ensure that the positions retrieved +from QWidget coordinates are then translated to viewport +coordinates. + + + + + + + +Sizing the document contents + + +As already mentioned, we have to set a size to the document contents, as well as +to initialize this size, and provide a method for all views to retrieve this +size. + + + +To do this, we add a variable Qsize size to +KScribbleDoc, as well as the method +docSize(). + + + +kscribbledoc.h: + +#include <qsize.h> + +... +public: + const QSize docSize(){ return size;}; + +private: + QSize size; + + + +Now we want to modify all methods that deal with initializing, and opening the +document contents. These are newDocument() and +openDocument(): + + + + bool KScribbleDoc::newDocument() + { + ///////////////////////////////////////////////// + // TODO: Add your document initialization code here +-> size=QSize(300,200 ); + pen=QPen( Qt::black, 3 ); +-> buffer.resize(size); +-> buffer.fill( Qt::white ); + ///////////////////////////////////////////////// + modified=false; + return true; + } + + bool KScribbleDoc::openDocument(const QString &filename, const char *format /*=0*/) + { + + QFile f( filename ); + // if ( !f.open( IO_ReadOnly ) ) + // return false; + ///////////////////////////////////////////////// + // TODO: Add your document opening code here + if(!buffer.load( filename, format )) + return false; +-> size=buffer.size(); + ///////////////////////////////////////////////// + // f.close(); + + modified=false; + m_filename=filename; + m_title=QFileInfo(f).fileName(); + return true; + } + + + +In newDocument(), we initialize the size with a default +value of 300 pixels wide, and 200 pixels high. This is enough for a small +picture for now, and we could add a dialog for resizing as well if we want. + + + +When it comes to opening a new picture, we have to set the size to the size of +that picture. This can be done by calling QPixmap::size(), +which we used in openDocument(). Then we're done with +setting the sizes, and we can move on to reimplementing +KScribbleView and make it a scrollview. + + + + + +Adapting the view + + +As said above, we first have to change some things in the interface of +KScribbleView. The following code shows these changes: + + + +#include <qscrollview.h> + +class KScribbleView : public QScrollView +{ + Q_OBJECT + + protected: + /** changed from mousePressEvent() overwriting QScrollView method */ + virtual void viewportMousePressEvent( QMouseEvent* ); + /** changed from mouseReleaseEvent() overwriting QScrollView method */ + virtual void viewportMouseReleaseEvent( QMouseEvent* ); + /** changed from mouseMoveEvent() overwriting QScrollView method */ + virtual void viewportMouseMoveEvent( QMouseEvent* ); + + /** commeted out because we have a document size defined */ +// resizeEvent( QResizeEvent* ); + + /** changed from paintEvent() overwriting QScrollView method */ + virtual void viewportPaintEvent( QPaintEvent* ); +} + + + +Here we changed the inheritance from QWidget to +QScrollView first, and then added the required include file. We +also changed all implemented event handlers that deal with the interaction +between the contents and the scroll view to the corresponding +QScrollView provided methods, and commented out the +resizeEvent(). + + + +Now we can go over to the implementation of these methods, and make use of the +size our picture now has. As a view is always created after the document +exists, we can resize the widget directly in the constructor to fit this size, +and to resize the contents (that is, the viewport size): + + + +#include <qsize.h> + +KScribbleView::KScribbleView(KScribbleDoc* pDoc, QWidget *parent, const char* name, int wflags) + : QScrollView(parent, name, wflags | WPaintClever | WNorthWestGravity | WRepaintNoErase) +{ + doc=pDoc; + mousePressed=false; + polyline=QPointArray(3); + +-> setResizePolicy ( QScrollView::ResizeOne ); +-> viewport()->setCursor( Qt::crossCursor ); + +-> QSize size=doc->docSize(); + // resize the viewport - this makes the resizeEvent obsolete +-> resizeContents(size.width(), size.height()); + // resize the widget to show up with the document size +-> resize(size); +} + + + +Note that formerly, the resizeEvent() took care of resizing +the drawing area to the same as the widget size. At the same time, this changed +the document size, so the document picture had always the same size as the +widget. With the already initialized size of the document (which we set in +newDocument() and openDocument()), we +just resize the contents by calling resizeContents(), +provided by QScrollView along with the size of the +document. + + + +Now we can reimplement the event handlers. First, we should take care of the +paintEvent, as this is one of the most important ones, +because it is called whenever the widget first shows up and also when it is +resized. + + + + +Be sure to comment out the resizeEvent() implementation! + + + + +The paint event will have to copy the pixmap in the buffer to the appropriate +position in the view. For this we have to change the destination of +bitBlt() from this to +viewport(), set the top left position to 0,0, and then set +the target (the buffer) to cpoy from the contentsX and +contentsY position onto the viewport: + + + +void KScribbleView::viewportPaintEvent( QPaintEvent *e ) +{ + bitBlt( viewport(),0,0, &doc->buffer,contentsX() ,contentsY() ); +} + + + +The contentsX() is the position in the x direction of the +scrollview's contents, which becomes position 0 in the viewport's absolute +position, and is now the top left point visible in the scroll view. The same +applies to the y direction. This part is sometimes hard to understand, and ou +may have to do a bit of trial and error when implementing your +own scroll views. + + + +The other possible call of bitBlt() would be to switch the +values of the positions, and invert the contents values: + + + +bitBlt( viewport(), -contentsX(), -contentsY(), &doc->buffer, 0, 0 ); + + + +The final changes we must make are changing the mouse event handlers. + + + +First the mouseMoveEvent(), which changes to +viewportMouseMoveEvent(), and has a +bitBlt() call as well. Here we have to apply the same +changes as in the paint event. + + + +Further, in the case of mousePressEvent() and the +mouseMoveEvent(), we have retrieved the position of the +mouse events with e->pos(). This position will now be +delivering us a widget position, and not the contents position, so we have to +translate this to draw into the correct position in the document with +viewportToContents(): + + + + void KScribbleView::viewportMousePressEvent( QMouseEvent *e ) + { + mousePressed = TRUE; +-> doc->polyline[2] = doc->polyline[1] = doc->polyline[0] = viewportToContents(e->pos()); + doc->updateAllViews(this); + } + + void KScribbleView::viewportMouseMoveEvent( QMouseEvent *e ) + { + if ( mousePressed ) { + .... + doc->polyline[1] = doc->polyline[0]; +-> doc->polyline[0] = viewportToContents(e->pos()); + painter.drawPolyline( doc->polyline ); + .... + r.setBottom( r.bottom() + doc->penWidth() ); + + doc->setModified(); +-> bitBlt(viewport(), r.x()-contentsX(), r.y()-contentsY() , +-> &doc->buffer, r.x(), r.y(), r.width(), r.height() ); + doc->updateAllViews(this); + } + } + + + +In the viewportMouseMoveEvent(), we had to change the +destination again from this to +viewport(), and with that, translate the positions. This +time, we used the second version of the call we used in +viewportPaintEvent(), subtracting the +contentsX() and contentsY values to +copy the rectangle containing the current painting into the correct position in +the viewport. + + + +Finally, we will apply a small change in conjunction with the +update() method. Why should we repaint the whole widget +every time? This will reduce performance, and often leads to the so-called +flicker effect. + + + +This flicker effect sometimes occurs with widgets, but there are ways to reduce +this behavior. Instead of calling repaint(), we could call +repaint(false) as well. This will not erase the widget +contents before redrawing it. As we are copying the document contents directly +into the widget, we don't need to erase it first, as all the data will be +overwritten anyway. + + +In conjunction with QScrollView, we will reduce the +painting even more: we can limit the update method to call +repaint() on the viewport() widget, +because that will call viewportPaintEvent(). + + + +On the other hand, the painting area we use is the rectangle containing the +document contents, which can result in the document size being smaller than the +viewport size. So we can limit the paint event in this case the rectangle of +the viewport where the document is displayed, whose visible height and width we +can retrieve and compose to the rectangle. + + + +Additionally, we use the erase parameter with false, +so the document area doesn't get erased: + + + +void KScribbleView::update(KScribbleView* pSender){ + if(pSender != this) + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} + + + +Now you're ready! This chapter has been one of the hardest to implement and +understand, especially when it comes to the geometries that change. On the +other hand, we gave our application a whole new level of functionality with the +new scrollview and synchronized views. + + + +With that, we move on to the last chapter of our tutorial. There we will apply +only a few changes, making use of some methods of the &kde; 2.x libraries. As +usual, this will bring us new and interesting functionality, allowing +KScribble to open and save a whole range of picture +formats, and thereby remove the restriction of operating only on the PNG file +format. + + + + + + + +Using <classname>KImageIO</classname> with +<application>KScribble</application> + + +When it comes to images, the &Qt; and &kde; libraries offer a wide variety of +operations. Apart from actual drawing routines, the libraries support a whole +set of image formats which they can read and write, all without any cost on our +part. + + + +The main class for thse operations is KImageIO, which has +a support library by &kde;, also called KImageIO. + + + +As a preparation before we can make use of these nice methods, we have to add +the appropriate library to KScribble: libkimgio. Open +the Project Options + menu choice in &kdevelop;, and add the line +-lkimgio to the additional libraries to link +KScribble with. + + + +Preparing the document + + +Now we can go and apply our changes. First we have to remove the curent +restrictions in the document class, which until now have allowed us to only read +and write PNG files. Just replace PNG in the following methods +with format, as given by the openDocument() +and saveDocument() methods. + + + +In method KScribbleDoc::openDocument() + + if(!buffer.load( filename, format )) + + + +In method KScribbleDoc:: saveDocument() + + if(!buffer.save( filename, format )) + + + +Then we have a default behavior for these methods. For now, we don't have all +the available file formats yet, so this will be our next task, together with +adapting the slots in KSribble that deliver us the +filenames. + + + + + +Registering file formats + + +To use KImageIO, we have to initialize the library +first. For this we add a call to registerFormats() in our +main() function>: + + + +main.cpp +............ + KApplication app; + KImageIO::registerFormats(); + + if (app.isRestored()) +............ + + + +Note that the call is after the application is instanciated with +KApplication> app. Without the application instance, our +program will not run, as KImageIO then doesn't know on +which application to register the formats. + + + +The include file for this call will be added to +kscribble.h, as we're going to use some of it's methods in +KScribbleApp: + + + +#include <kimgio.h> + + + + + +Opening images + +Now that we can make use of KImageIO, we have to +apply the first change to the most important method of +KScribbleApp: openDocumentFile(). +This method opens any document, but until now only with the filename. It just +leaves out the extension, as the format is not required by the document class by +default. As we have just changed that, we need now a format, and we have to +adapt the call for KScribbleDoc::openDocument() in the +method openDocumentFile(). + + + +kscribble.cpp: + + void KScribbleApp::openDocumentFile(const char* file) + { + ........... + + else + { +-> QString format=KImageIO::type(file); +-> if(!doc->openDocument(file,format)) + KMessageBox::error (this,i18n("Could not open document !"), i18n("Error !")); + addRecentFile(file); + } + ............ + } + + + +Of course, this works the same as using QString +format=QImageIO::imageFormat(file);. Here, +KImageIO delivers us the format of the image, and we can +call the document to open the file by filename and format. Another possibility +would be to detect the format in the document class. + + + + + +Setting file filters with <classname>KImageIO</classname> + + +Here we're finally at the end of our tutoral. We will adapt the file dialogs of +KScribble to make use of file filters. + + + +For these, KImageIO provides nice methods to give us all +the required strings for all image file formats that are available for reading +or saving. + + + +The following implementation replaces the default file filter, which is, in +fact, no filter at all. You have to change your own application file filter to +your mime type according to the method() of +KImageIO: + + + + void KScribbleApp::slotFileOpen() + { + slotStatusMsg(i18n("Opening file...")); + +-> QString fileToOpen=KFileDialog::getOpenFileName(QDir::currentDirPath(), +-> KImageIO::pattern(KImageIO::Reading), this, i18n("Open File...")); + if(!fileToOpen.isEmpty()) + { + openDocumentFile(fileToOpen); + } + + slotStatusMsg(i18n("Ready.")); + } + + + +Here the mode in pattern() is set to reading, which may +differ from the patterns that are retrieved when set to writing. + + + +Now that we have finished opening files by filename and format combined, we're +not quite done. Something is missing to complete this structure. Setting the +patters for saving a file also. + + + + +For this job, slotFileSaveAs is called, which invokes for +itself the file dialog that retrieves a filename. There we will set the pattern +mode to writing. + + + +void KScribbleApp::slotFileSaveAs() +{ + slotStatusMsg(i18n("Saving file with a new filename...")); + +-> QString newName=KFileDialog::getSaveFileName(QDir::currentDirPath(), +-> KImageIO::pattern(KImageIO::Writing), this, i18n("Save as...")); + if(!newName.isEmpty()) + { + KScribbleView* m = (KScribbleView*)pWorkspace->activeWindow(); + if( m ) + { + KScribbleDoc* doc = m->getDocument(); + QString format=QFileInfo(newName).extension(); + format=format.upper(); + if(!doc->saveDocument(newName,format)) + { + KMessageBox::error (this,i18n("Could not save the current document !"), i18n("I/O Error !")); + return; + } + doc->changedViewList(); + setWndTitle(m); + } + } + slotStatusMsg(i18n("Ready.")); +} + + + + + + + +Adding printing functionality + + +In this chapter we will show you how easy it is to implement printing functions +using &Qt;. + + + +It's actually just one line of code for us to do here, but we will start by +giving you an overview of who is actually doing the printing job. + + + +When the user presses the print button in +KScribble, or chooses +File +Print, the +slotFilePrint() method is called in +KScribbleApp + + + +This method detects which child window is currently active, and creates a +printer instance of the class QPrinter. + + + +This then calls the widget's printing method, +ScribbleView::print(). Here, the framework already +contains a base implementation. A quick look will tell you that for printing, +you just have to use QPainter, which then draws on the +printer. This method also calls the printing dialog. + + + +What we have to do here is to use QPainter methods to +draw the pixmap of the document connected to the view. As +QPainter already offers a whole set of methods such as +drawPixmap(), we will of course use one of them: + + + +void KScribbleView::print(QPrinter *pPrinter) +{ + if (pPrinter->setup(this)) + { + QPainter p; + p.begin(pPrinter); + + /////////////////////////////// + // TODO: add your printing code here +-> p.drawPixmap(0,0,doc->buffer); + /////////////////////////////// + p.end(); + } +} + + + +Here we paint into the offset of the printer page, at position 0,0, with our +buffer pixmap of the document. That's All! + + + +Go right ahead and test it. Now you can print any graphics that +KScribble is able to open. + + + +This is now the end of our tour through creating a &kde; 2 application. You can +find the source of KScribble, complete with a +further extension that adds cut, copy, paste, and undo functions, as well as +drag'n drop in the Appendix. + + + + + +Credits and Licenses + + +&kdevelop; + + +&underFDL; +&underGPL; + + + + +KScribble-1.0 Example sourcecode + + +The example tarball is locally installed and can be downloaded into your home +directory, where you can untar it and test it. After untarring the tarball with +tar +kscribble-1.0.tar.gz, load the project and call +Automake and Autoconf from the +Build menu in &kdevelop;, then call +Configure from the same menu. The configure options +are those of the authors installation of &kde; 2.x and &Qt; 2.x, so you may have +to change them manually to match your installation path for these options. + + + +The tarball can be found in +$KDEDIR/share/apps/kdevelop/examples/kscribble-1.0.tar.gz + + + +<filename>main.cpp</filename> + + +/*************************************************************************** + main.cpp - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ +#include <kcmdlineargs.h> +#include <kaboutdata.h> +#include <klocale.h> + +#include "kscribble.h" + +static const char *description = + I18N_NOOP("KDE 2 example application"); + +static KCmdLineOptions options[] = +{ + { "+[File]", I18N_NOOP("image file to open"), 0 }, + { 0, 0, 0 } +}; + + +int main(int argc, char *argv[]) +{ + KAboutData aboutData( "kscribble", I18N_NOOP("KScribble"), + VERSION, description, KAboutData::License_GPL, + "(c) 2000, Ralf Nolden"); + aboutData.addAuthor("Ralf Nolden",0, "rnolden@kdevelop.de"); + KCmdLineArgs::init( argc, argv, &aboutData ); + KCmdLineArgs::addCmdLineOptions( options ); // Add our own options. + + KApplication app; + KImageIO::registerFormats(); + + if (app.isRestored()) + { + RESTORE(KScribbleApp); + } + else + { + KScribbleApp *kscribble = new KScribbleApp(); + kscribble->show(); + + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + if (args->count()) + for(int i=0;i<args->count();i++) + kscribble->openDocumentFile(args->arg(i)); + else + kscribble->openDocumentFile(); + + args->clear(); + } + + return app.exec(); +} + + + + + +<filename>kscribble.h</filename> + + +/*************************************************************************** + kscribble.h - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef KSCRIBBLE_H +#define KSCRIBBLE_H + + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +// include files for Qt +#include <qstrlist.h> +#include <qworkspace.h> + +// include files for KDE +#include <kapp.h> +#include <ktmainwindow.h> +#include <kaccel.h> +#include <kimgio.h> + +// forward declaration of the KScribble classes +class KScribbleDoc; +class KScribbleView; + +/** + * The base class for KScribble application windows. It sets up the main + * window and reads the config file as well as providing a menubar, toolbar + * and statusbar. In initView(), your main view is created as the MDI child window manager. + * Child windows are created in createClient(), which gets a document instance as it's document to + * display whereby one document can have several views.The MDI child is an instance of KScribbleView, + * the document an instance of KScribbleDoc. + * KScribbleApp reimplements the methods that KTMainWindow provides for main window handling and supports + * full session management as well as keyboard accelerator configuration by using KAccel. + * @see KTMainWindow + * @see KApplication + * @see KConfig + * @see KAccel + * + * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team. + * @version KDevelop version 1.1 code generation + */ +class KScribbleApp : public KTMainWindow +{ + Q_OBJECT + + public: + /** construtor of KScribbleApp, calls all init functions to create the application. + * @see initMenuBar initToolBar + */ + KScribbleApp(); + ~KScribbleApp(); + /** enables menuentries/toolbar items + */ + void enableCommand(int id_); + /** disables menuentries/toolbar items + */ + void disableCommand(int id_); + /** opens a file specified by commandline option + */ + void openDocumentFile(const char *file=0); + + protected: + /** queryClose is called by KTMainWindow on each closeEvent of a window. Against the + * default implementation (only returns true), this overridden function retrieves all modified documents + * from the open document list and asks the user to select which files to save before exiting the application. + * @see KTMainWindow#queryClose + * @see KTMainWindow#closeEvent + */ + virtual bool queryClose(); + /** queryExit is called by KTMainWindow when the last window of the application is going to be closed + * during the closeEvent(). + * Against the default implementation that just returns true, this calls saveOptions() to save the + * settings of the last window's properties. + * @see KTMainWindow#queryExit + * @see KTMainWindow#closeEvent + */ + virtual bool queryExit(); + /** saves the window properties for each open window during session end to the session config file, + * including saving the currently opened file by a temporary filename provided by KApplication. + * @see KTMainWindow#saveProperties + */ + virtual void saveProperties(KConfig *_cfg); + /** reads the session config file and restores the application's state including the last + * opened files and documents by reading the temporary files saved by saveProperties() + * @see KTMainWindow#readProperties + */ + virtual void readProperties(KConfig *_cfg); + /** event filter to catch close events for MDI child windows and is installed in createClient() on every + * child window. Closing a window calls the eventFilter first which removes the view from the connected + * documents' view list. If the last view is going to be closed, the eventFilter() tests if the document + * is modified; if yes, it asks the user to save the document. If the document title contains "Untitled", + * slotFileSaveAs() gets called to get a save name and path. + */ + virtual bool eventFilter(QObject* object, QEvent* event); + /** creates a new child window. The document that will be connected to it + * has to be created before and the instances filled, with e.g. openDocument(). + * Then call createClient() to get a new MDI child window. + * @see KScribbleDoc#addView + * @see KScribbleDoc#openDocument + * @param doc pointer to the document instance that the view will + * be connected to. + */ + void createClient(KScribbleDoc* doc); + /** accepts drag events for images */ + virtual void dragEnterEvent( QDragEnterEvent* ); + /** accepts drops and opens a new document + * for each drop */ + virtual void dropEvent( QDropEvent* ); + + private slots: + /** sets the main application window title each time the active MDI child window changes. */ + void setWndTitle(QWidget*); + /** switch argument for slot selection by menu or toolbar ID */ + void commandCallback(int id_); + /** switch argument for Statusbar help entries on slot selection. Add your ID's help + * here for toolbars and menubar entries. */ + void statusCallback(int id_); + /** add a opened file to the recent file list and update recent file menu*/ + void addRecentFile(const QString &file); + /** clears the document in the actual view to reuse it as the new document */ + void slotFileNew(); + /** open a file and load it into the document*/ + void slotFileOpen(); + /** opens a file from the recent files menu */ + void slotFileOpenRecent(int id_); + /** save a document */ + void slotFileSave(); + /** save a document by a new filename*/ + void slotFileSaveAs(); + /** asks for saving if the file is modified, then closes the actual file and window*/ + void slotFileClose(); + /** print the actual file */ + void slotFilePrint(); + /** closes all documents and quits the application.*/ + void slotFileQuit(); + /** reverts the last user action for the active window */ + void slotEditUndo(); + /** put the marked text/object into the clipboard and remove + * it from the document + */ + void slotEditCut(); + /** put the marked text/object into the clipboard + */ + void slotEditCopy(); + /** paste the clipboard into the document + */ + void slotEditPaste(); + /** clears the current document */ + void slotEditClearAll(); + /** sets the pen width */ + void slotPenBrush(); + /** sets the pen color */ + void slotPenColor(); + /** toggles the toolbar + */ + void slotViewToolBar(); + /** toggles the statusbar + */ + void slotViewStatusBar(); + /** creates a new view for the document in the active child window and adds the new view to the + * list of views the document maintains. + */ + void slotWindowNewWindow(); + /** changes the statusbar contents for the standard label permanently, used to indicate current actions. + * @param text the text that is displayed in the statusbar + */ + void slotStatusMsg(const QString &text); + /** changes the status message of the whole statusbar for two seconds, then restores the last status. + * This is used to display statusbar messages that give information about actions for + * toolbar icons and menuentries. + * @param text the text that is displayed in the statusbar + */ + void slotStatusHelpMsg(const QString &text); + /** gets called when the window menu is activated; recreates the window menu with all opened window titles. */ + void windowMenuAboutToShow(); + /** activates the MDI child widget when it gets selected from the window menu. */ + void windowMenuActivated( int id ); + + private: + /** save general Options like all bar positions and status as well as the geometry and + * the recent file list to the configuration file + */ + void saveOptions(); + /** read general Options again and initialize all variables like the recent file list + */ + void readOptions(); + /** initKeyAccel creates the keyboard accelerator items for the available slots and changes the menu accelerators. + * @see KAccel + */ + void initKeyAccel(); + /** initMenuBar creates the menubar and inserts the menupopups as well as creating the helpMenu. + */ + void initMenuBar(); + /** this creates the toolbars. + */ + void initToolBar(); + /** sets up the statusbar for the main window by initialzing a statuslabel. + */ + void initStatusBar(); + + /** Creates the main view of the KTMainWindow instance and initializes the MDI view area including any needed + * connections. + */ + void initView(); + + /** contains the recently used filenames */ + QStrList recentFiles; + + /** the configuration object of the application */ + KConfig *config; + /** the key accelerator container */ + KAccel *keyAccel; + /** the recent file menu containing the last five opened files */ + QPopupMenu *pRecentFileMenu; + /** the file menu */ + QPopupMenu* pFileMenu; + /** the edit menu */ + QPopupMenu* pEditMenu; + /** the pen menu */ + QPopupMenu* pPenMenu; + /** the view menu */ + QPopupMenu* pViewMenu; + /** the window menu */ + QPopupMenu *pWindowMenu; + /** pWorkspace is the MDI frame widget that handles MDI child widgets. Inititalized in + * initView() + */ + QWorkspace *pWorkspace; + /** the printer instance */ + QPrinter *printer; + /** a counter that gets increased each time the user creates a new document with "File"->"New" */ + int untitledCount; + /** a list of all open documents. If the last window of a document gets closed, the installed eventFilter + * removes this document from the list. The document list is checked for modified documents when the user + * is about to close the application. */ + QList<KScribbleDoc> *pDocList; + +}; + +#endif // KSCRIBBLE_H + + + + + +<filename>kscribble.cpp</filename> + + +/*************************************************************************** + kscribble.cpp - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +// include files for QT +#include <qdir.h> +#include <qprinter.h> +#include <qvbox.h> +#include <qwhatsthis.h> +#include <qtooltip.h> +#include <qtoolbutton.h> +#include <qimage.h> +#include <qdragobject.h> + + +// include files for KDE +#include <kiconloader.h> +#include <kmessagebox.h> +#include <kfiledialog.h> +#include <kcolordlg.h> +#include <kmenubar.h> +#include <klocale.h> +#include <kconfig.h> + +// application specific includes +#include "kscribble.h" +#include "kscribbleview.h" +#include "kscribbledoc.h" +#include "resource.h" +#include "kpenbrushdlg.h" + + +KScribbleApp::KScribbleApp() +{ + config=kapp->config(); + printer = new QPrinter; + untitledCount=0; + pDocList = new QList<KScribbleDoc>(); + pDocList->setAutoDelete(true); + setAcceptDrops(true); + + /////////////////////////////////////////////////////////////////// + // call inits to invoke all other construction parts + initMenuBar(); + initToolBar(); + initStatusBar(); + initKeyAccel(); + initView(); + + readOptions(); + + /////////////////////////////////////////////////////////////////// + // disable menu and toolbar items at startup + disableCommand(ID_EDIT_UNDO); +} + +KScribbleApp::~KScribbleApp() +{ + delete printer; +} + +void KScribbleApp::initKeyAccel() +{ + keyAccel = new KAccel(this); + + // fileMenu accelerators + keyAccel->connectItem(KStdAccel::New, this, SLOT(slotFileNew())); + keyAccel->connectItem(KStdAccel::Open, this, SLOT(slotFileOpen())); + keyAccel->connectItem(KStdAccel::Save, this, SLOT(slotFileSave())); + keyAccel->connectItem(KStdAccel::Close, this, SLOT(slotFileClose())); + keyAccel->connectItem(KStdAccel::Print, this, SLOT(slotFilePrint())); + keyAccel->connectItem(KStdAccel::Quit, this, SLOT(slotFileQuit())); + // editMenu accelerators + keyAccel->connectItem(KStdAccel::Cut, this, SLOT(slotEditCut())); + keyAccel->connectItem(KStdAccel::Copy, this, SLOT(slotEditCopy())); + keyAccel->connectItem(KStdAccel::Paste, this, SLOT(slotEditPaste())); + + keyAccel->connectItem(KStdAccel::Help, this, SLOT(appHelpActivated())); + + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_NEW, KStdAccel::New); + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_OPEN, KStdAccel::Open); + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_SAVE, KStdAccel::Save); + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_CLOSE, KStdAccel::Close); + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_PRINT, KStdAccel::Print); + keyAccel->changeMenuAccel(pFileMenu, ID_FILE_QUIT, KStdAccel::Quit); + + keyAccel->changeMenuAccel(pEditMenu, ID_EDIT_CUT, KStdAccel::Cut); + keyAccel->changeMenuAccel(pEditMenu, ID_EDIT_COPY, KStdAccel::Copy); + keyAccel->changeMenuAccel(pEditMenu, ID_EDIT_PASTE, KStdAccel::Paste); + + keyAccel->readSettings(); +} + +void KScribbleApp::initMenuBar() +{ + /////////////////////////////////////////////////////////////////// + // MENUBAR + pRecentFileMenu = new QPopupMenu(this); + connect(pRecentFileMenu, SIGNAL(activated(int)), SLOT(slotFileOpenRecent(int))); + + /////////////////////////////////////////////////////////////////// + // menuBar entry file-Menu + pFileMenu = new QPopupMenu(this); + pFileMenu->insertItem(BarIcon("filenew"), i18n("&New"), ID_FILE_NEW); + pFileMenu->insertItem(BarIcon("fileopen"), i18n("&Open..."), ID_FILE_OPEN); + pFileMenu->insertItem(i18n("Open &recent"), pRecentFileMenu, ID_FILE_OPEN_RECENT); + + pFileMenu->insertItem(i18n("&Close"), ID_FILE_CLOSE); + pFileMenu->insertSeparator(); + pFileMenu->insertItem(BarIcon("filefloppy") ,i18n("&Save"), ID_FILE_SAVE); + pFileMenu->insertItem(i18n("Save &As..."), ID_FILE_SAVE_AS); + pFileMenu->insertSeparator(); + pFileMenu->insertItem(BarIcon("fileprint"), i18n("&Print..."), ID_FILE_PRINT); + pFileMenu->insertSeparator(); + pFileMenu->insertItem(i18n("E&xit"), ID_FILE_QUIT); + + /////////////////////////////////////////////////////////////////// + // menuBar entry edit-Menu + pEditMenu = new QPopupMenu(this); + pEditMenu->insertItem(BarIcon("undo"), i18n("&Undo"), ID_EDIT_UNDO); + pEditMenu->insertSeparator(); + pEditMenu->insertItem(BarIcon("editcut"), i18n("Cu&t"), ID_EDIT_CUT); + pEditMenu->insertItem(BarIcon("editcopy"), i18n("&Copy"), ID_EDIT_COPY); + pEditMenu->insertItem(BarIcon("editpaste"), i18n("&Paste"), ID_EDIT_PASTE); + pEditMenu->insertItem(BarIcon("delete"),i18n("&Clear All"), ID_EDIT_CLEAR_ALL); + + /////////////////////////////////////////////////////////////////// + // menuBar entry pen-Menu + pPenMenu = new QPopupMenu(); + pPenMenu->insertItem(i18n("&Color"), ID_PEN_COLOR); + pPenMenu->insertItem(i18n("&Brush"), ID_PEN_BRUSH); + + /////////////////////////////////////////////////////////////////// + // menuBar entry view-Menu + pViewMenu = new QPopupMenu(this); + pViewMenu->setCheckable(true); + pViewMenu->insertItem(i18n("&Toolbar"), ID_VIEW_TOOLBAR); + pViewMenu->insertItem(i18n("&Statusbar"), ID_VIEW_STATUSBAR); + + /////////////////////////////////////////////////////////////////// + // menuBar entry window-Menu + pWindowMenu = new QPopupMenu(this); + pWindowMenu->setCheckable(true); + + + /////////////////////////////////////////////////////////////////// + // menuBar entry helpMenu + QPopupMenu* pHelpMenu = helpMenu(i18n("KScribble" VERSION "\n\n(c) 2000 by\n" + "Ralf Nolden\nRalf.Nolden@post.rwth-aachen.de")); + + /////////////////////////////////////////////////////////////////// + // MENUBAR CONFIGURATION + // insert your popup menus with the according menubar entries in the order + // they will appear later from left to right + menuBar()->insertItem(i18n("&File"), pFileMenu); + menuBar()->insertItem(i18n("&Edit"), pEditMenu); + menuBar()->insertItem(i18n("&Pen"), pPenMenu); + menuBar()->insertItem(i18n("&View"), pViewMenu); + menuBar()->insertItem(i18n("&Window"), pWindowMenu ); + menuBar()->insertItem(i18n("&Help"), pHelpMenu); + + /////////////////////////////////////////////////////////////////// + // CONNECT THE MENU SLOTS WITH SIGNALS + // for execution slots and statusbar messages + connect(pFileMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); + connect(pFileMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); + + connect(pEditMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); + connect(pEditMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); + + connect(pPenMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); + connect(pPenMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); + + connect(pViewMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); + connect(pViewMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); + + connect(pWindowMenu, SIGNAL(aboutToShow() ), SLOT( windowMenuAboutToShow() ) ); + connect(pWindowMenu, SIGNAL(activated(int)), SLOT(commandCallback(int))); + connect(pWindowMenu, SIGNAL(highlighted(int)), SLOT(statusCallback(int))); + +} + +void KScribbleApp::initToolBar() +{ + + /////////////////////////////////////////////////////////////////// + // TOOLBAR + toolBar()->insertButton(BarIcon("filenew"), ID_FILE_NEW, true, i18n("New File")); + toolBar()->insertButton(BarIcon("fileopen"), ID_FILE_OPEN, true, i18n("Open File")); + toolBar()->insertButton(BarIcon("filefloppy"), ID_FILE_SAVE, true, i18n("Save File")); + toolBar()->insertButton(BarIcon("fileprint"), ID_FILE_PRINT, true, i18n("Print")); + toolBar()->insertSeparator(); + toolBar()->insertButton(BarIcon("editcut"), ID_EDIT_CUT, true, i18n("Cut")); + toolBar()->insertButton(BarIcon("editcopy"), ID_EDIT_COPY, true, i18n("Copy")); + toolBar()->insertButton(BarIcon("editpaste"), ID_EDIT_PASTE, true, i18n("Paste")); + toolBar()->insertSeparator(); + toolBar()->insertButton(BarIcon("pencolor"), ID_PEN_COLOR, true, i18n("Color") ); + toolBar()->insertButton(BarIcon("penwidth"), ID_PEN_BRUSH, true, i18n("Width") ); + toolBar()->insertSeparator(); + toolBar()->insertButton(BarIcon("help"), ID_HELP_CONTENTS, SIGNAL(clicked()), + this, SLOT(appHelpActivated()), true,i18n("Help")); + + QToolButton *btnwhat = QWhatsThis::whatsThisButton(toolBar()); + QToolTip::add(btnwhat, i18n("What's this...?")); + toolBar()->insertWidget(ID_HELP_WHATS_THIS, btnwhat->sizeHint().width(), btnwhat); + + /////////////////////////////////////////////////////////////////// + // INSERT YOUR APPLICATION SPECIFIC TOOLBARS HERE WITH toolBar(n) + + + /////////////////////////////////////////////////////////////////// + // CONNECT THE TOOLBAR SLOTS WITH SIGNALS - add new created toolbars by their according number + // connect for invoking the slot actions + connect(toolBar(), SIGNAL(clicked(int)), SLOT(commandCallback(int))); + // connect for the status help on holing icons pressed with the mouse button + connect(toolBar(), SIGNAL(pressed(int)), SLOT(statusCallback(int))); + +} + +void KScribbleApp::initStatusBar() +{ + /////////////////////////////////////////////////////////////////// + // STATUSBAR + // TODO: add your own items you need for displaying current application status. + statusBar()->insertItem(i18n("Ready."), ID_STATUS_MSG); +} + + +void KScribbleApp::initView() +{ + //////////////////////////////////////////////////////////////////// + // here the main view of the KTMainWindow is created by a background box and + // the QWorkspace instance for MDI view. + QVBox* view_back = new QVBox( this ); + view_back->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken ); + pWorkspace = new QWorkspace( view_back ); + connect(pWorkspace, SIGNAL(windowActivated(QWidget*)), this, SLOT(setWndTitle(QWidget*))); + setView(view_back); +} + +void KScribbleApp::setWndTitle(QWidget*){ + setCaption(pWorkspace->activeWindow()->caption()); +} + +void KScribbleApp::enableCommand(int id_) +{ + /////////////////////////////////////////////////////////////////// + // enable menu and toolbar functions by their ID's + menuBar()->setItemEnabled(id_, true); + toolBar()->setItemEnabled(id_, true); +} + +void KScribbleApp::disableCommand(int id_) +{ + /////////////////////////////////////////////////////////////////// + // disable menu and toolbar functions by their ID's + menuBar()->setItemEnabled(id_, false); + toolBar()->setItemEnabled(id_, false); +} + +void KScribbleApp::addRecentFile(const QString &file) +{ + if(recentFiles.contains(file)) + return; // it's already there + + if( recentFiles.count() < 5) + recentFiles.prepend(file); + else{ + recentFiles.remove(recentFiles.last()); + recentFiles.prepend(file); + } + + pRecentFileMenu->clear(); + + for ( int i =0 ; i < (int)recentFiles.count(); i++){ + pRecentFileMenu->insertItem(recentFiles.at(i)); + } + +} + +void KScribbleApp::createClient(KScribbleDoc* doc) +{ + KScribbleView* w = new KScribbleView(doc, pWorkspace,0,WDestructiveClose); + w->installEventFilter(this); + doc->addView(w); + w->setIcon(kapp->miniIcon()); + if ( pWorkspace->windowList().isEmpty() ) // show the very first window in maximized mode + w->showMaximized(); + else + w->show(); +} + +void KScribbleApp::openDocumentFile(const char* file) +{ + slotStatusMsg(i18n("Opening file...")); + KScribbleDoc* doc; + // check, if document already open. If yes, set the focus to the first view + for(doc=pDocList->first(); doc > 0; doc=pDocList->next()) + { + if(doc->pathName()==file) + { + KScribbleView* view=doc->firstView(); + view->setFocus(); + return; + } + } + doc = new KScribbleDoc(); + pDocList->append(doc); + doc->newDocument(); + // Creates an untitled window if file is 0 + if(!file) + { + untitledCount+=1; + QString fileName=QString(i18n("Untitled%1")).arg(untitledCount); + doc->setPathName(fileName); + doc->setTitle(fileName); + } + // Open the file + else + { + QString format=QImageIO::imageFormat(file); + if(!doc->openDocument(file,format)) + KMessageBox::error (this,i18n("Could not open document !"), i18n("Error !")); + addRecentFile(file); + } + // create the window + createClient(doc); + + slotStatusMsg(i18n("Ready.")); +} + + +void KScribbleApp::saveOptions() +{ + config->setGroup("General Options"); + config->writeEntry("Geometry", size()); + config->writeEntry("Show Toolbar", toolBar()->isVisible()); + config->writeEntry("Show Statusbar",statusBar()->isVisible()); + config->writeEntry("ToolBarPos", (int) toolBar()->barPos()); + config->writeEntry("Recent Files", recentFiles); +} + + +void KScribbleApp::readOptions() +{ + + config->setGroup("General Options"); + + // bar status settings + bool bViewToolbar = config->readBoolEntry("Show Toolbar", true); + menuBar()->setItemChecked(ID_VIEW_TOOLBAR, bViewToolbar); + if(!bViewToolbar) + { + enableToolBar(KToolBar::Hide); + } + + bool bViewStatusbar = config->readBoolEntry("Show Statusbar", true); + menuBar()->setItemChecked(ID_VIEW_STATUSBAR, bViewStatusbar); + if(!bViewStatusbar) + { + enableStatusBar(KStatusBar::Hide); + } + + // bar position settings + KToolBar::BarPosition toolBarPos; + toolBarPos=(KToolBar::BarPosition) config->readNumEntry("ToolBarPos", KToolBar::Top); + toolBar()->setBarPos(toolBarPos); + + // initialize the recent file list + config->readListEntry("Recent Files",recentFiles); + + for (int i=0; i < (int) recentFiles.count(); i++) + { + pRecentFileMenu->insertItem(recentFiles.at(i)); + } + + QSize size=config->readSizeEntry("Geometry"); + if(!size.isEmpty()) + { + resize(size); + } + else + resize(400,350); + +} + +void KScribbleApp::saveProperties(KConfig *_cfg) +{ + +} + + +void KScribbleApp::readProperties(KConfig* _cfg) +{ +} + +bool KScribbleApp::queryClose() +{ + + QStringList saveFiles; + KScribbleDoc* doc; + if(pDocList->isEmpty()) + return true; + + for(doc=pDocList->first(); doc!=0;doc=pDocList->next()){ + if(doc->isModified()) + saveFiles.append(doc->title()); + } + if(saveFiles.isEmpty()) + return true; + + switch (KMessageBox::questionYesNoList(this, + i18n("One or more documents have been modified.\nSave changes before exiting?"),saveFiles)) + { + case KMessageBox::Yes: + for(doc=pDocList->first(); doc!=0;doc=pDocList->next()){ + if(doc->title().contains(i18n("Untitled"))) + slotFileSaveAs(); + else + { + if(!doc->saveDocument(doc->pathName())){ + KMessageBox::error (this,i18n("Could not save the current document !"), i18n("I/O Error !")); + return false; + } + } + } + return true; + case KMessageBox::No: + default: + return true; + } +} + +bool KScribbleApp::queryExit() +{ + saveOptions(); + return true; +} + +bool KScribbleApp::eventFilter(QObject* object, QEvent* event){ + if(event->type() == QEvent::Close) + { + QCloseEvent* e=(QCloseEvent*)event; + KScribbleView* pView=(KScribbleView*)object; + KScribbleDoc* pDoc=pView->getDocument(); + if(pDoc->canCloseFrame(pView)) + { + pDoc->removeView(pView); + if(!pDoc->firstView()) + pDocList->remove(pDoc); + + e->accept(); + ////////////// + if(pWorkspace->windowList().count()==1) + setPlainCaption(kapp->caption()); + else + setCaption(pWorkspace->activeWindow()->caption()); + ////////////// + } + else + e->ignore(); + } + return QWidget::eventFilter( object, event ); // standard event processing +} + +///////////////////////////////////////////////////////////////////// +// SLOT IMPLEMENTATION +///////////////////////////////////////////////////////////////////// + + +void KScribbleApp::slotFileNew() +{ + slotStatusMsg(i18n("Creating new document...")); + + openDocumentFile(); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileOpen() +{ + slotStatusMsg(i18n("Opening file...")); + + QString fileToOpen=KFileDialog::getOpenFileName(QDir::currentDirPath(), + KImageIO::pattern(KImageIO::Reading), this, i18n("Open File...")); + if(!fileToOpen.isEmpty()) + { + openDocumentFile(fileToOpen); + } + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileOpenRecent(int id_) +{ + slotStatusMsg(i18n("Opening file...")); + + openDocumentFile(pRecentFileMenu->text(id_)); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileSave() +{ + slotStatusMsg(i18n("Saving file...")); + KScribbleView* m = (KScribbleView*)pWorkspace->activeWindow(); + if( m ) + { + KScribbleDoc* doc = m->getDocument(); + if(doc->title().contains(i18n("Untitled"))) + slotFileSaveAs(); + else + if(!doc->saveDocument(doc->pathName())) + KMessageBox::error (this,i18n("Could not save the current document !"), i18n("I/O Error !")); + } + + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileSaveAs() +{ + slotStatusMsg(i18n("Saving file with a new filename...")); + + QString newName=KFileDialog::getSaveFileName(QDir::currentDirPath(), + KImageIO::pattern(KImageIO::Writing), this, i18n("Save as...")); + if(!newName.isEmpty()) + { + KScribbleView* m = (KScribbleView*)pWorkspace->activeWindow(); + if( m ) + { + KScribbleDoc* doc = m->getDocument(); + QString format=QFileInfo(newName).extension(); + format=format.upper(); + if(!doc->saveDocument(newName,format)) + { + KMessageBox::error (this,i18n("Could not save the current document !"), i18n("I/O Error !")); + return; + } + doc->changedViewList(); + setWndTitle(m); + } + + } + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileClose() +{ + slotStatusMsg(i18n("Closing file...")); + + KScribbleView* m = (KScribbleView*)pWorkspace->activeWindow(); + if( m ) + { + KScribbleDoc* doc=m->getDocument(); + doc->closeDocument(); + } + + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFilePrint() +{ + slotStatusMsg(i18n("Printing...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ) + m->print( printer ); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotFileQuit() +{ + slotStatusMsg(i18n("Exiting...")); + saveOptions(); + // close the first window, the list makes the next one the first again. + // This ensures that queryClose() is called on each window to ask for closing + KTMainWindow* w; + if(memberList) + { + for(w=memberList->first(); w!=0; w=memberList->first()) + { + // only close the window if the closeEvent is accepted. If the user + // presses Cancel on the saveModified() dialog, + // the window and the application stay open. + if(!w->close()) + break; + } + } + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotEditUndo() +{ + slotStatusMsg(i18n("Reverting last action...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ) +// m->undo(); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotEditCut() +{ + slotStatusMsg(i18n("Cutting selection...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ) + m->cutSelection(); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotEditCopy() +{ + slotStatusMsg(i18n("Copying selection to clipboard...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ) + m->copySelection(); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotEditPaste() +{ + slotStatusMsg(i18n("Inserting clipboard contents...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ) + m->pasteSelection(); + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotEditClearAll() +{ + slotStatusMsg(i18n("Clearing the document contents...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ){ + KScribbleDoc* pDoc = m->getDocument(); + pDoc->editClearAll(); + } + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotPenBrush() +{ + slotStatusMsg(i18n("Setting brush width...")); + + // get one window with document for a current pen width + QWidgetList windows = pWorkspace->windowList(); + KScribbleView* m = (KScribbleView*)windows.at(0); + KScribbleDoc* pDoc = m->getDocument(); + int curr_width=pDoc->penWidth(); + + // create the dialog, get the new width and set the pen width for all documents + KPenBrushDlg* dlg= new KPenBrushDlg(curr_width,this); + if(dlg->exec()){ + int width=dlg->width(); + for ( int i = 0; i < int(windows.count()); ++i ) + { + m = (KScribbleView*)windows.at(i); + if ( m ) + { + pDoc = m->getDocument(); + pDoc->setPenWidth(width); + } + } + } + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotPenColor() +{ + slotStatusMsg(i18n("Selecting pen color...")); + + QColor myColor; + int result = KColorDialog::getColor( myColor, this ); + if ( result == KColorDialog::Accepted ) + { + QWidgetList windows = pWorkspace->windowList(); + KScribbleDoc* pDoc; + KScribbleView* m; + for ( int i = 0; i < int(windows.count()); ++i ) + { + m = (KScribbleView*)windows.at(i); + if ( m ) + { + pDoc = m->getDocument(); + pDoc->setPenColor(myColor); + } + } + } + slotStatusMsg(i18n("Ready.")); +} + + +void KScribbleApp::slotViewToolBar() +{ + slotStatusMsg(i18n("Toggle the toolbar...")); + /////////////////////////////////////////////////////////////////// + // turn Toolbar on or off + if( menuBar()->isItemChecked(ID_VIEW_TOOLBAR)) + { + menuBar()->setItemChecked(ID_VIEW_TOOLBAR, false); + enableToolBar(KToolBar::Hide); + } + else + { + menuBar()->setItemChecked(ID_VIEW_TOOLBAR, true); + enableToolBar(KToolBar::Show); + } + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotViewStatusBar() +{ + slotStatusMsg(i18n("Toggle the statusbar...")); + /////////////////////////////////////////////////////////////////// + //turn Statusbar on or off + if( menuBar()->isItemChecked(ID_VIEW_STATUSBAR)) + { + menuBar()->setItemChecked(ID_VIEW_STATUSBAR, false); + enableStatusBar(KStatusBar::Hide); + } + else + { + menuBar()->setItemChecked(ID_VIEW_STATUSBAR, true); + enableStatusBar(KStatusBar::Show); + } + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotWindowNewWindow() +{ + slotStatusMsg(i18n("Opening a new application window...")); + + KScribbleView* m = (KScribbleView*) pWorkspace->activeWindow(); + if ( m ){ + KScribbleDoc* doc = m->getDocument(); + createClient(doc); + } + + slotStatusMsg(i18n("Ready.")); +} + +void KScribbleApp::slotStatusMsg(const QString &text) +{ + /////////////////////////////////////////////////////////////////// + // change status message permanently + statusBar()->clear(); + statusBar()->changeItem(text, ID_STATUS_MSG); +} + + +void KScribbleApp::slotStatusHelpMsg(const QString &text) +{ + /////////////////////////////////////////////////////////////////// + // change status message of whole statusbar temporary (text, msec) + statusBar()->message(text, 2000); +} + +void KScribbleApp::windowMenuAboutToShow() +{ + pWindowMenu->clear(); + + pWindowMenu->insertItem(i18n("&New Window"), ID_WINDOW_NEW_WINDOW); + pWindowMenu->insertItem(i18n("&Cascade"), + pWorkspace, SLOT(cascade() ),0 , ID_WINDOW_CASCADE ); + pWindowMenu->insertItem(i18n("&Tile"), + pWorkspace, SLOT(tile() ),0 , ID_WINDOW_TILE ); + + if ( pWorkspace->windowList().isEmpty() ) { + disableCommand(ID_WINDOW_NEW_WINDOW); + disableCommand(ID_WINDOW_CASCADE); + disableCommand(ID_WINDOW_TILE); + } + + pWindowMenu->insertSeparator(); + + QWidgetList windows = pWorkspace->windowList(); + for ( int i = 0; i < int(windows.count()); ++i ) { + int id = pWindowMenu->insertItem(QString("&%1 ").arg(i+1)+windows.at(i)->caption(), + this, SLOT( windowMenuActivated( int ) ) ); + pWindowMenu->setItemParameter( id, i ); + pWindowMenu->setItemChecked( id, pWorkspace->activeWindow() == windows.at(i) ); + } +} + +void KScribbleApp::windowMenuActivated( int id ) +{ + QWidget* w = pWorkspace->windowList().at( id ); + if ( w ) + w->setFocus(); +} + + +void KScribbleApp::commandCallback(int id_) +{ + switch (id_) + { + case ID_FILE_NEW: + slotFileNew(); + break; + + case ID_FILE_OPEN: + slotFileOpen(); + break; + + case ID_FILE_SAVE: + slotFileSave(); + break; + + case ID_FILE_SAVE_AS: + slotFileSaveAs(); + break; + + case ID_FILE_CLOSE: + slotFileClose(); + break; + + case ID_FILE_PRINT: + slotFilePrint(); + break; + + case ID_FILE_QUIT: + slotFileQuit(); + break; + + case ID_EDIT_CUT: + slotEditCut(); + break; + + case ID_EDIT_COPY: + slotEditCopy(); + break; + + case ID_EDIT_PASTE: + slotEditPaste(); + break; + + case ID_EDIT_CLEAR_ALL: + slotEditClearAll(); + break; + + case ID_PEN_BRUSH: + slotPenBrush(); + break; + + case ID_PEN_COLOR: + slotPenColor(); + break; + + case ID_VIEW_TOOLBAR: + slotViewToolBar(); + break; + + case ID_VIEW_STATUSBAR: + slotViewStatusBar(); + break; + + case ID_WINDOW_NEW_WINDOW: + slotWindowNewWindow(); + break; + + default: + break; + } +} + +void KScribbleApp::statusCallback(int id_) +{ + switch (id_) + { + case ID_FILE_NEW: + slotStatusHelpMsg(i18n("Creates a new document")); + break; + + case ID_FILE_OPEN: + slotStatusHelpMsg(i18n("Opens an existing document")); + break; + + case ID_FILE_OPEN_RECENT: + slotStatusHelpMsg(i18n("Opens a recently used file")); + break; + + case ID_FILE_SAVE: + slotStatusHelpMsg(i18n("Saves the currently active document")); + break; + + case ID_FILE_SAVE_AS: + slotStatusHelpMsg(i18n("Saves the currently active document as under a new filename")); + break; + + case ID_FILE_CLOSE: + slotStatusHelpMsg(i18n("Closes the currently active document")); + break; + + case ID_FILE_PRINT: + slotStatusHelpMsg(i18n("Prints out the actual document")); + break; + + case ID_FILE_QUIT: + slotStatusHelpMsg(i18n("Quits the application")); + break; + + case ID_EDIT_UNDO: + slotStatusHelpMsg(i18n("Reverts the last editing action")); + break; + + case ID_EDIT_CUT: + slotStatusHelpMsg(i18n("Cuts the selected section and puts it to the clipboard")); + break; + + case ID_EDIT_COPY: + slotStatusHelpMsg(i18n("Copies the selected section to the clipboard")); + break; + + case ID_EDIT_PASTE: + slotStatusHelpMsg(i18n("Pastes the clipboard contents to actual position")); + break; + + case ID_EDIT_CLEAR_ALL: + slotStatusHelpMsg(i18n("Clears the document contents")); + break; + + case ID_PEN_BRUSH: + slotStatusHelpMsg(i18n("Sets the pen width")); + break; + + case ID_PEN_COLOR: + slotStatusHelpMsg(i18n("Sets the current pen color")); + break; + + case ID_VIEW_TOOLBAR: + slotStatusHelpMsg(i18n("Enables/disables the toolbar")); + break; + + case ID_VIEW_STATUSBAR: + slotStatusHelpMsg(i18n("Enables/disables the statusbar")); + break; + + case ID_WINDOW_NEW_WINDOW: + slotStatusHelpMsg(i18n("Opens a new view for the current document")); + break; + + case ID_WINDOW_CASCADE: + slotStatusHelpMsg(i18n("Cascades all windows")); + break; + + case ID_WINDOW_TILE: + slotStatusHelpMsg(i18n("Tiles all windows")); + break; + + default: + break; + } +} +/** accepts drops and opens a new document +for each drop */ +void KScribbleApp::dropEvent( QDropEvent* e){ + + QImage img; + if ( QImageDrag::decode(e, img) ) + { + KScribbleDoc* doc = new KScribbleDoc(); + untitledCount+=1; + QString fileName=QString(i18n("Untitled%1")).arg(untitledCount); + doc->setPathName(fileName); + doc->setTitle(fileName); + doc->newDocument(); + pDocList->append(doc); + KPixmap tmp; + tmp.resize(img.size()); + tmp.convertFromImage(img); + doc->setPixmap(tmp); + doc->resizeDocument(tmp.size()); + doc->setModified(); + createClient(doc); + } +} +/** accepts drag events for images */ +void KScribbleApp::dragEnterEvent( QDragEnterEvent* e){ + e->accept(QImageDrag::canDecode(e)); +} + + + + + +<filename>kscribbledoc.h</filename> + + +/*************************************************************************** + kscribbledoc.h - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef KSCRIBBLEDOC_H +#define KSCRIBBLEDOC_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +// include files for QT +#include <qobject.h> +#include <qstring.h> +#include <qlist.h> + +#include <qsize.h> +#include <qpen.h> +#include <qpoint.h> +//#include <qpixmap.h> +#include <qpointarray.h> + +#include <kpixmap.h> + + +// forward declaration of the KScribble classes +class KScribbleView; + +/** KScribbleDoc provides a document object for a document-view model. + * + * The KScribbleDoc class provides a document object that can be used in conjunction with the classes + * KScribbleApp and KScribbleView to create a document-view model for MDI (Multiple Document Interface) + * KDE 2 applications based on KApplication and KTMainWindow as main classes and QWorkspace as MDI manager widget. + * Thereby, the document object is created by the KScribbleApp instance (and kept in a document list) and contains + * the document structure with the according methods for manipulating the document + * data by KScribbleView objects. Also, KScribbleDoc contains the methods for serialization of the document data + * from and to files. + * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team. + * @version KDevelop version 1.1 code generation + */ +class KScribbleDoc : public QObject +{ + Q_OBJECT + + friend KScribbleView; + + public: + /** Constructor for the fileclass of the application */ + KScribbleDoc(); + /** Destructor for the fileclass of the application */ + ~KScribbleDoc(); + + /** adds a view to the document which represents the document contents. Usually this is your main view. */ + void addView(KScribbleView *view); + /** removes a view from the list of currently connected views */ + void removeView(KScribbleView *view); + /** gets called if a view is removed or added */ + void changedViewList(); + /** returns the first view instance */ + KScribbleView* firstView(){ return pViewList->first(); }; + /** returns true, if the requested view is the last view of the document */ + bool isLastView(); + /** This method gets called when the user is about to close a frame window. It checks, if more than one view + * is connected to the document (then the frame can be closed), if pFrame is the last view and the document is + * modified, the user gets asked if he wants to save the document. + */ + bool canCloseFrame(KScribbleView* pFrame); + /** sets the modified flag for the document after a modifying action on the view connected to the document.*/ + void setModified(bool _m=true){ modified=_m; }; + /** returns if the document is modified or not. Use this to determine if your document needs + * saving by the user on closing. + */ + bool isModified(){ return modified; }; + /** deletes the document's contents */ + void deleteContents(); + /** initializes the document generally */ + bool newDocument(); + /** closes the acutal document */ + void closeDocument(); + /** loads the document by filename and format and emits the updateViews() signal */ + bool openDocument(const QString &filename, const char *format=0); + /** saves the document under filename and format.*/ + bool saveDocument(const QString &filename, const char *format=0); + /** sets the path to the file connected with the document */ + void setPathName(const QString &name); + /** returns the pathname of the current document file*/ + const QString& pathName() const; + + /** sets the filename of the document */ + void setTitle(const QString &title); + /** returns the title of the document */ + const QString& title() const; + /** get the current Pen */ + const QPen currentPen(){ return pen;}; + /** returns the pen width */ + const int penWidth() { return pen.width(); } + /** returns the pen color */ + const QColor penColor(){ return pen.color(); } + /** sets the pen width */ + void setPenWidth( int w ){ pen.setWidth( w ); } + /** sets the pen color */ + void setPenColor( const QColor &c ){ pen.setColor( c ); } + /** sets the pen style by a second toolbar */ + void setPenStyle( PenStyle s){ pen.setStyle(s);} + /** clears the document contents */ + void editClearAll(); + + /** get the document size */ + const QSize docSize(){ return size;}; + /** sets the pixmap contents. Used by KScribbleApp + to create a new document by drop events */ + void setPixmap(KPixmap pix) { buffer=pix;}; + void resizeDocument(QSize m_size) { size=m_size; }; + public slots: + /** calls repaint() on all views connected to the document object and is called by the view by + * which the document has been changed. + * As this view normally repaints itself, it is excluded from the paintEvent. + */ + void updateAllViews(KScribbleView *sender); + + protected: + + QPen pen; + QPointArray polyline; + KPixmap buffer; + + private: + /** the modified flag of the current document */ + bool modified; + QString m_title; + QString m_filename; + /** the list of the views currently connected to the document */ + QList<KScribbleView> *pViewList; + QSize size; +}; + +#endif // KSCRIBBLEDOC_H + + + + + +<filename>kscribbledoc.cpp</filename> + + +/*************************************************************************** + kscribbledoc.cpp - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +// include files for Qt +#include <qdir.h> +#include <qfileinfo.h> +#include <qwidget.h> + +// include files for KDE +#include <klocale.h> +#include <kmessagebox.h> +#include <kfiledialog.h> + +// application specific includes +#include "kscribbledoc.h" +#include "kscribble.h" +#include "kscribbleview.h" + + +KScribbleDoc::KScribbleDoc() +{ + pViewList = new QList<KScribbleView>; + pViewList->setAutoDelete(false); +} + +KScribbleDoc::~KScribbleDoc() +{ + delete pViewList; +} + +void KScribbleDoc::addView(KScribbleView *view) +{ + pViewList->append(view); + changedViewList(); +} + +void KScribbleDoc::removeView(KScribbleView *view) +{ + pViewList->remove(view); + if(!pViewList->isEmpty()) + changedViewList(); + else + deleteContents(); +} + +void KScribbleDoc::changedViewList(){ + + KScribbleView *w; + if((int)pViewList->count() == 1){ + w=pViewList->first(); + w->setCaption(m_title); + } + else{ + int i; + for( i=1,w=pViewList->first(); w!=0; i++, w=pViewList->next()) + w->setCaption(QString(m_title+":%1").arg(i)); + } +} + +bool KScribbleDoc::isLastView() { + return ((int) pViewList->count() == 1); +} + + +void KScribbleDoc::updateAllViews(KScribbleView *sender) +{ + KScribbleView *w; + for(w=pViewList->first(); w!=0; w=pViewList->next()) + { + w->update(sender); + } + +} + +void KScribbleDoc::setPathName(const QString &name) +{ + m_filename=name; + m_title=QFileInfo(name).fileName(); +} + +const QString& KScribbleDoc::pathName() const +{ + return m_filename; +} + +void KScribbleDoc::setTitle(const QString &title) +{ + m_title=title; +} + +const QString &KScribbleDoc::title() const +{ + return m_title; +} + + +void KScribbleDoc::closeDocument() +{ + KScribbleView *w; + if(!isLastView()) + { + for(w=pViewList->first(); w!=0; w=pViewList->next()) + { + if(!w->close()) + break; + } + } + if(isLastView()) + { + w=pViewList->first(); + w->close(); + } +} + +bool KScribbleDoc::newDocument() +{ + ///////////////////////////////////////////////// + // TODO: Add your document initialization code here + size=QSize(300,200 ); + pen=QPen( Qt::black, 3 ); + polyline=QPointArray(3); + buffer.resize(size); + buffer.fill( Qt::white ); + ///////////////////////////////////////////////// + modified=false; + return true; +} + +bool KScribbleDoc::openDocument(const QString &filename, const char *format /*=0*/) +{ + + QFile f( filename ); +// if ( !f.open( IO_ReadOnly ) ) +// return false; + ///////////////////////////////////////////////// + // TODO: Add your document opening code here + if(!buffer.load( filename, format )) + return false; + size=buffer.size(); + ///////////////////////////////////////////////// +// f.close(); + + modified=false; + m_filename=filename; + m_title=QFileInfo(f).fileName(); + return true; +} + +bool KScribbleDoc::saveDocument(const QString &filename, const char *format /*=0*/) +{ + QFile f( filename ); +// if ( !f.open( IO_WriteOnly ) ) +// return false; + + ///////////////////////////////////////////////// + // TODO: Add your document saving code here + if(!buffer.save( filename, format )) + return false; + ///////////////////////////////////////////////// + +// f.close(); + + modified=false; + m_filename=filename; + m_title=QFileInfo(f).fileName(); + return true; +} + +void KScribbleDoc::deleteContents() +{ + ///////////////////////////////////////////////// + // TODO: Add implementation to delete the document contents + buffer.fill( Qt::white ); + ///////////////////////////////////////////////// + +} + +bool KScribbleDoc::canCloseFrame(KScribbleView* pFrame) +{ + if(!isLastView()) + return true; + + bool ret=false; + if(isModified()) + { + QString saveName; + switch(KMessageBox::warningYesNoCancel(pFrame, i18n("The current file has been modified.\n" + "Do you want to save it?"),title())) + { + case KMessageBox::Yes: + if(title().contains(i18n("Untitled"))) + { + saveName=KFileDialog::getSaveFileName(QDir::currentDirPath(), + i18n("*|All files"), pFrame, i18n("Save as...")); + if(saveName.isEmpty()) + return false; + } + else + saveName=pathName(); + + if(!saveDocument(saveName)) + { + switch(KMessageBox::warningYesNo(pFrame,i18n("Could not save the current document !\n" + "Close anyway ?"), i18n("I/O Error !"))) + { + case KMessageBox::Yes: + ret=true; + case KMessageBox::No: + ret=false; + } + } + else + ret=true; + break; + case KMessageBox::No: + ret=true; + break; + case KMessageBox::Cancel: + default: + ret=false; + break; + } + } + else + ret=true; + + return ret; +} + +void KScribbleDoc::editClearAll() +{ + deleteContents(); + setModified(); + updateAllViews(0); +} + + + + + +<filename>kscribbleview.h</filename> + + +/*************************************************************************** + kscribbleview.h - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef KSCRIBBLEVIEW_H +#define KSCRIBBLEVIEW_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +// include files for Qt +#include <qscrollview.h> +#include <kpixmap.h> + +class KScribbleDoc; + +/** The KScribbleView class provides the view widget for the document instance connected to it and is displayed + * as a MDI child window in the main view area of the KScribbleApp class instance. The KScribbleApp + * class also has an eventFilter() method that gets installed on every KScribbleView instance to + * control events of the type QEvent::Close.The document connected to the view instance keeps a list + * of all view that represent the document contents as there can be more than one view. Views get created in + * KScribbleApp::createClient() and automatically added to the list of views. + * The KScribbleView class inherits QWidget as a base. Another possible inheritance besides specialized + + widgets could be QMainWindow so that you can easily set up the main area of your view by setting another view + * as main widget (QMainWindow::setMainWidget() ). + * NOTE: The close event always has to be empty (DON`T CALL QWidget::closeEvent(e) in closeEvent()) + * because the installed event filter can only manage a forward implementation. If the QCloseEvent + * is received by the KScribbleView, the overwritten event handler has to do nothing as the eventFilter + * has set accept() or ignore() already. If QWidget::closeEvent() is called again, the default event + * handler will accept the close event and the window gets destroyed even if the installed eventFilter + * has set the event to be ignored. + * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team. + * @version KDevelop version 1.1 code generation + */ +class KScribbleView : public QScrollView +{ + Q_OBJECT + + friend KScribbleDoc; + + public: + /** Constructor for the view + * @param pDoc your document instance that the view represents. Create a document + * before calling the constructor or connect an already existing document to a new MDI child widget.*/ + KScribbleView(KScribbleDoc* pDoc, QWidget* parent, const char *name, int wflags); + /** Destructor for the main view */ + ~KScribbleView(); + /** returns a pointer to the document connected to the view*/ + KScribbleDoc *getDocument() const; + /** gets called to redraw the document contents if it has been modified */ + void update(KScribbleView* pSender); + /** contains the implementation for printing functionality and gets called by KScribbleApp::slotFilePrint() */ + void print(QPrinter *pPrinter); + /** cuts out a selection */ + void cutSelection(); + /** copies a selection to the clipboard */ + void copySelection(); + /** pastes the clipboard contents to a selection that can be inserted into the picture */ + void pasteSelection(); + + protected: + + /** overwritten QWidget::closeEvent() to catch closing views. Does nothing, as the closeEvents for + * KScribbleView's are processed by KScribbleApp::eventFilter(), so this overwitten closeEvent is necessary + * and has to be empty. Don't overwrite this method ! + */ + virtual void closeEvent(QCloseEvent* ); + /** overwritten to interpret key events for scrollbars */ + virtual void keyPressEvent( QKeyEvent* ); + /** changed from mousePressEvent() overwriting QScrollView method */ + virtual void viewportMousePressEvent( QMouseEvent* ); + /** changed from mouseReleaseEvent() overwriting QScrollView method */ + virtual void viewportMouseReleaseEvent( QMouseEvent* ); + /** On paste actions inserts the pasted clipboard contents */ + virtual void viewportMouseDoubleClickEvent(QMouseEvent* e); + /** changed from mouseMoveEvent() overwriting QScrollView method */ + virtual void viewportMouseMoveEvent( QMouseEvent* ); + /** changed from resizeEvent() overwriting QScrollView method */ +// virtual void viewportResizeEvent( QResizeEvent* ); + /** changed from paintEvent() overwriting QScrollView method */ + virtual void viewportPaintEvent( QPaintEvent* ); + + virtual void viewportDragEnterEvent ( QDragEnterEvent * ); + + virtual void viewportDragMoveEvent ( QDragMoveEvent * ); + + virtual void viewportDragLeaveEvent ( QDragLeaveEvent * ); + + virtual void viewportDropEvent ( QDropEvent * ); + + /** the document instance */ + KScribbleDoc *doc; + + private: + KPixmap tmp; + QRect select; + QClipboard *cb; + enum Action{IDLE=0, DRAW, SELECT, PASTE, DRAG} action; +}; + +#endif // KSCRIBBLEVIEW_H + + + + + +<filename>kscribbleview.cpp</filename> + + +/*************************************************************************** + kscribbleview.cpp - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ +#include <iostream.h> + +// include files for Qt +#include <qprinter.h> +#include <qpainter.h> +#include <qdir.h> +#include <qsize.h> +#include <qclipboard.h> +#include <qimage.h> +#include <qdragobject.h> + +// include files for KDE +#include <kiconloader.h> + +// application specific includes +#include "kscribbleview.h" +#include "kscribbledoc.h" +#include "kscribble.h" + + +KScribbleView::KScribbleView(KScribbleDoc* pDoc, QWidget *parent, const char* name, int wflags) + : QScrollView(parent, name, wflags | WPaintClever | WNorthWestGravity | WRepaintNoErase) +{ + cb = QApplication::clipboard(); + viewport()->setAcceptDrops(true); + setDragAutoScroll(true); + doc=pDoc; + action=IDLE; + viewport()->setCursor( Qt::crossCursor ); + QSize size=doc->docSize(); + resizeContents(size.width(), size.height()); + resize(size); +} + +KScribbleView::~KScribbleView() +{ +} + +KScribbleDoc *KScribbleView::getDocument() const +{ + return doc; +} + +void KScribbleView::update(KScribbleView* pSender){ + if(pSender != this) + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} + +void KScribbleView::print(QPrinter *pPrinter) +{ + if (pPrinter->setup(this)) + { + QPainter p; + p.begin(pPrinter); + + /////////////////////////////// + // TODO: add your printing code here + p.drawPixmap(0,0,doc->buffer); + /////////////////////////////// + p.end(); + } +} + +/** cuts out a selection */ +void KScribbleView::cutSelection(){ + select=select.normalize(); + QPixmap cb_pix; + cb_pix.resize(select.size()); + // copy selection to cb_pix and copy to clipboard + bitBlt(&cb_pix, 0, 0, + &doc->buffer, select.x()+contentsX(), select.y()+contentsY(), cb_pix.width(), cb_pix.height()); + cb->setPixmap(cb_pix); + // fill cb_pix with white and copy to selection area + cb_pix.fill(Qt::white); + bitBlt(&doc->buffer, select.x()+contentsX(), select.y()+contentsY(), + &cb_pix, 0, 0, cb_pix.width(), cb_pix.height()); + action = IDLE; + doc->setModified(); + doc->updateAllViews(this); + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} +/** copies a selection to the clipboard */ +void KScribbleView::copySelection(){ + select=select.normalize(); + QPixmap cb_pix; + cb_pix.resize(select.size()); + // copy selection to cb_pix and copy to clipboard + bitBlt(&cb_pix, 0, 0, + &doc->buffer, select.x()+contentsX(), select.y()+contentsY(),cb_pix.width(), cb_pix.height()); + cb->setPixmap(cb_pix); + action = IDLE; + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} +/** pastes the clipboard contents to a selection that can be inserted into the picture */ +void KScribbleView::pasteSelection(){ + select=cb->pixmap().rect(); + action = PASTE; + viewport()->setCursor( Qt::sizeAllCursor ); +} + +void KScribbleView::closeEvent(QCloseEvent* e){ + +// DO NOT CALL QWidget::closeEvent(e) here !! +// This will accept the closing by QCloseEvent::accept() by default. +// The installed eventFilter() in KScribbleApp takes care for closing the widget +// or ignoring the close event + +} + +void KScribbleView::keyPressEvent( QKeyEvent *e ) +{ + switch (e->key()) + { + case Key_Right: + scrollBy( 10, 0 ); + break; + case Key_Left: + scrollBy( -10,0); + break; + case Key_Up: + scrollBy( 0, -10 ); + break; + case Key_Down: + scrollBy( 0, 10 ); + break; + case Key_Home: + setContentsPos(0,0); + break; + case Key_End: + setContentsPos(0,viewport()->height()-viewport()->height()); + break; + case Key_PageUp: + scrollBy( 0, -viewport()->height() ); + break; + case Key_PageDown: + scrollBy( 0, viewport()->height() ); + break; + } + +} + +void KScribbleView::viewportMousePressEvent( QMouseEvent *e ) +{ + if ( e->button() == LeftButton && action == IDLE) + { + action=DRAW; + doc->polyline[2] = doc->polyline[1] = doc->polyline[0] = viewportToContents(e->pos()); + doc->updateAllViews(this); + } + else if ( e->button() == RightButton && action == IDLE) + { + action = SELECT; + QPoint pt=e->pos(); + int x = pt.x() > contentsWidth() ? contentsWidth() : pt.x(); + int y = pt.y() > contentsHeight() ? contentsHeight() : pt.y(); + select.setLeft(x-1); + select.setTop(y-1); + select.setRight(x-1); + select.setBottom(y-1); + } + else if( action == SELECT ) + { + action = IDLE; + select=select.normalize(); + // drag + if(select.contains(e->pos(), true)) // point inside the selection + { + tmp.resize(select.size()); + bitBlt(&tmp, 0, 0, + &doc->buffer, select.x()+contentsX(), select.y()+contentsY(), tmp.width(), tmp.height()); + QImage img =tmp.convertToImage(); + QDragObject *d = new QImageDrag( img, viewport() ); + d->setPixmap(BarIcon("filenew")); + d->drag(); + } + // remove selection + else + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + } + else if( action == PASTE ) + { + if ( e->button() == RightButton ) + { + action = IDLE; + viewport()->setCursor( Qt::crossCursor ); + } + QPoint mv_pt (viewport()->height(), viewport()->width()); + if(QRect(0,0,mv_pt.x(),mv_pt.y()).contains(e->pos())) + select.moveCenter(e->pos()); + else + { + select.moveBottomRight(mv_pt); + } + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + } +} + +void KScribbleView::viewportMouseReleaseEvent( QMouseEvent *e ) +{ + if ( action == DRAW ) + { + action = IDLE; + doc->updateAllViews(this); + } + if ( action == SELECT) + { + QPoint pt=e->pos(); + int x = pt.x() > 0 ? pt.x() : 0; + int y = pt.y() > 0 ? pt.y() : 0; + select.setRight(x); + select.setBottom(y); + QSize size=doc->docSize(); + select = select.intersect(QRect(0,0,size.width(), size.height())); + } +} + +/** On paste actions inserts the pasted clipboard contents + */ +void KScribbleView::viewportMouseDoubleClickEvent(QMouseEvent* e) +{ + if( action == PASTE ) + { + action = IDLE; + select.moveCenter(e->pos()); + viewport()->setCursor( Qt::crossCursor ); + QPixmap cb_pix; + cb_pix.resize(cb->pixmap().size()); + cb_pix=cb->pixmap(); + bitBlt( &doc->buffer, contentsX()+select.x(), contentsY()+select.y(), + &cb_pix, 0,0 , select.width(),select.height() ); + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + doc->setModified(); + doc->updateAllViews(this); + } + +} + +void KScribbleView::viewportMouseMoveEvent( QMouseEvent *e ) +{ + if ( action == DRAW ) + { + QPainter painter; + painter.begin( &doc->buffer ); + painter.setPen( doc->currentPen() ); + doc->polyline[2] = doc->polyline[1]; + doc->polyline[1] = doc->polyline[0]; + doc->polyline[0] = viewportToContents(e->pos()); + painter.drawPolyline( doc->polyline ); + painter.end(); + + QRect r = doc->polyline.boundingRect(); + r = r.normalize(); + r.setLeft( r.left() - doc->penWidth() ); + r.setTop( r.top() - doc->penWidth() ); + r.setRight( r.right() + doc->penWidth() ); + r.setBottom( r.bottom() + doc->penWidth() ); + + bitBlt(viewport(), r.x()-contentsX(), r.y()-contentsY() , + &doc->buffer, r.x(), r.y(), r.width(), r.height() ); + doc->setModified(); + doc->updateAllViews(this); + } + if ( action == SELECT ) + { + QPoint pt=e->pos(); + select.setWidth(select.x()+pt.x()); + select.setHeight(select.y()+pt.y()); + select.setRight(pt.x()); + select.setBottom(pt.y()); + QSize size=doc->docSize(); + select = select.intersect(QRect(0,0,size.width(), size.height())); + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + } + if( action == PASTE ) + { + QPoint mv_pt (viewport()->height(), viewport()->width()); + if(QRect(0,0,mv_pt.x(),mv_pt.y()).contains(e->pos())) + select.moveCenter(e->pos()); + else + { + select.moveBottomRight(mv_pt); + } + QRect pm_rect=cb->pixmap().rect(); + select.setWidth(pm_rect.width()); + select.setHeight(pm_rect.height()); + QSize size=doc->docSize(); + select = select.intersect(QRect(0,0,size.width(), size.height())); + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + doc->setModified(); + doc->updateAllViews(this); + } +} + +//void KScribbleView::viewportResizeEvent( QResizeEvent *e ) +//{ +//} + +void KScribbleView::viewportPaintEvent( QPaintEvent *e ) +{ + bitBlt( viewport(),0,0, &doc->buffer,contentsX() ,contentsY() ); + + if( action == PASTE ) + { + tmp.resize(cb->pixmap().size()); + tmp=cb->pixmap(); + } + if( action == PASTE || action == DRAG ) + { + QSize size=doc->docSize(); + select = select.intersect(QRect(0,0,size.width(), size.height())); + if(select.intersects(e->rect())) + bitBlt(viewport(), select.x(), select.y(), &tmp, 0, 0, select.width(), select.height()); + } + if( action == PASTE || action == DRAG || action == SELECT ) + { +// if(select.intersects(e->rect())) +// { + QPainter paint_area; + paint_area.begin(viewport()); + paint_area.setPen(QPen(Qt::black, 0, DashLine)); + paint_area.drawRect( select ); + paint_area.end(); +// } + } + QScrollView::viewportPaintEvent(e); +} + +void KScribbleView::viewportDragEnterEvent ( QDragEnterEvent * e) +{ + e->accept(QImageDrag::canDecode(e)); + action = DRAG; +} + +void KScribbleView::viewportDragMoveEvent ( QDragMoveEvent * e) +{ + QImage img; + if ( QImageDrag::decode(e, img) ){ + tmp.resize(img.size()); + tmp.convertFromImage(img); + select.setWidth(tmp.width()); + select.setHeight(tmp.height()); + select.moveCenter(e->pos()); + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); + } +} + +void KScribbleView::viewportDragLeaveEvent ( QDragLeaveEvent * ) +{ + action = IDLE; + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} + +void KScribbleView::viewportDropEvent ( QDropEvent * e) +{ + QImage img; + if ( QImageDrag::decode(e, img) ) + { + tmp.resize(img.size()); + tmp.convertFromImage(img); + select.setWidth(tmp.width()); + select.setHeight(tmp.height()); + select.moveCenter(e->pos()); + bitBlt(&doc->buffer, select.x()+contentsX(), select.y()+contentsY(), + &tmp, 0, 0, tmp.width(), tmp.height()); + doc->setModified(); + doc->updateAllViews(this); + } + action = IDLE; + viewport()->repaint(0,0,visibleWidth(), visibleHeight(), false); +} + + + + + +<filename>kpenbrushdlg.h</filename> + + +/*************************************************************************** + kpenbrushdlg.h - description + ------------------- + begin : Fri Jul 23 1999 + copyright : (C) 1999 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + + +#ifndef KPENBRUSHDLG_H +#define KPENBRUSHDLG_H + +//Generated area. DO NOT EDIT!!!(begin) +#include <qwidget.h> +#include <qspinbox.h> +#include <qlabel.h> +#include <qpushbutton.h> +//Generated area. DO NOT EDIT!!!(end) + +#include <qdialog.h> +#include <klocale.h> + +/** + *@author Ralf Nolden + */ + +class KPenBrushDlg : public QDialog { + Q_OBJECT +public: + KPenBrushDlg(int curr, QWidget *parent=0, const char *name=0); + ~KPenBrushDlg(); + + int width() { return width_spbox->value(); }; + +protected slots: + void slotDefault(); + +protected: + void initDialog(); + //Generated area. DO NOT EDIT!!!(begin) + QSpinBox *width_spbox; + QLabel *width_label; + QPushButton *default_btn; + QPushButton *ok_btn; + QPushButton *cancel_btn; + //Generated area. DO NOT EDIT!!!(end) + +private: +}; + +#endif + + + + + +<filename>kpenbrushdlg.cpp</filename> + + +/*************************************************************************** + kpenbrushdlg.cpp - description + ------------------- + begin : Fri Jul 23 1999 + copyright : (C) 1999 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "kpenbrushdlg.h" +#include <qwhatsthis.h> +#include <kapp.h> + +KPenBrushDlg::KPenBrushDlg(int curr, QWidget *parent, const char *name) + : QDialog(parent,name,true,WStyle_ContextHelp) +{ + initDialog(); + QWhatsThis::add(width_spbox,i18n("Select brush width")); + + width_spbox->setValue(curr); + connect(default_btn, SIGNAL(clicked()), this, SLOT(slotDefault())); + connect(ok_btn, SIGNAL(clicked()), this, SLOT(accept())); + connect(cancel_btn, SIGNAL(clicked()), this, SLOT(reject())); +} + +KPenBrushDlg::~KPenBrushDlg(){ +} + +void KPenBrushDlg::slotDefault(){ + width_spbox->setValue(3); +} + + + + + +<filename>kpenbrushdlgdata.cpp</filename> + + +/********************************************************************** + --- KDevelop (KDlgEdit) generated file --- + + Last generated: Fri Jul 23 10:43:10 1999 + + DO NOT EDIT!!! This file will be automatically + regenerated by KDevelop. All changes will be lost. + +**********************************************************************/ +#include <kapp.h> +#include "kpenbrushdlg.h" + +void KPenBrushDlg::initDialog(){ + this->resize(370,210); + this->setMinimumSize(0,0); + width_spbox= new QSpinBox(this,"width_spbox"); + width_spbox->setGeometry(150,50,100,25); + width_spbox->setMinimumSize(0,0); + width_spbox->setValue(1); + width_spbox->setRange(1,99); + + width_label= new QLabel(this,"width_label"); + width_label->setGeometry(20,50,120,25); + width_label->setMinimumSize(0,0); + width_label->setText(i18n("Pen Width:")); + + default_btn= new QPushButton(this,"default"); + default_btn->setGeometry(30,160,100,30); + default_btn->setMinimumSize(0,0); + default_btn->setText(i18n("Default")); + default_btn->setAutoDefault(true); + + ok_btn= new QPushButton(this,"ok"); + ok_btn->setGeometry(140,160,100,30); + ok_btn->setMinimumSize(0,0); + ok_btn->setText(i18n("OK")); + ok_btn->setAutoDefault(true); + + cancel_btn= new QPushButton(this,"cancel"); + cancel_btn->setGeometry(250,160,100,30); + cancel_btn->setMinimumSize(0,0); + cancel_btn->setText(i18n("Cancel")); + cancel_btn->setAutoDefault(true); + +} + + + + + +<filename>resource.h</filename> + + +/*************************************************************************** + resource.h - description + ------------------- + begin : Mon Jan 31 11:05:05 CET 2000 + copyright : (C) 2000 by Ralf Nolden + email : Ralf.Nolden@post.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef RESOURCE_H +#define RESOURCE_H + +#ifdef HAVE_CONFIG_H +#include <config.h>> +#endif + +/////////////////////////////////////////////////////////////////// +// resource.h -- contains macros used for commands + + +/////////////////////////////////////////////////////////////////// +// COMMAND VALUES FOR MENUBAR AND TOOLBAR ENTRIES + + +/////////////////////////////////////////////////////////////////// +// File-menu entries +#define ID_FILE_NEW 10010 +#define ID_FILE_OPEN 10020 +#define ID_FILE_OPEN_RECENT 10030 +#define ID_FILE_CLOSE 10040 + +#define ID_FILE_SAVE 10050 +#define ID_FILE_SAVE_AS 10060 + +#define ID_FILE_PRINT 10070 + +#define ID_FILE_QUIT 10080 + +/////////////////////////////////////////////////////////////////// +// Edit-menu entries +#define ID_EDIT_UNDO 11010 +#define ID_EDIT_COPY 11020 +#define ID_EDIT_CUT 11030 +#define ID_EDIT_PASTE 11040 +#define ID_EDIT_CLEAR_ALL 11050 + +/////////////////////////////////////////////////////////////////// +// Pen-menu entries +#define ID_PEN_COLOR 14010 +#define ID_PEN_BRUSH 14020 + +/////////////////////////////////////////////////////////////////// +// Draw-menu entries +#define ID_DRAW_FIND 15010 +#define ID_DRAW_FREEHAND 15020 +#define ID_DRAW_LINE 15030 +#define ID_DRAW_RECT 15040 +#define ID_DRAW_RECT_FILL 15050 +#define ID_DRAW_CIRCLE 15060 +#define ID_DRAW_CIRCLE_FILL 15070 +#define ID_DRAW_ELLIPSE 15080 +#define ID_DRAW_ELLIPSE_FILL 15090 +#define ID_DRAW_SPRAY 15100 +#define ID_DRAW_FILL 15110 +#define ID_DRAW_ERASE 15120 + +/////////////////////////////////////////////////////////////////// +// View-menu entries +#define ID_VIEW_TOOLBAR 12010 +#define ID_VIEW_STATUSBAR 12020 + +/////////////////////////////////////////////////////////////////// +// Window-menu entries +#define ID_WINDOW_NEW_WINDOW 13010 +#define ID_WINDOW_CASCADE 13020 +#define ID_WINDOW_TILE 13030 + +/////////////////////////////////////////////////////////////////// +// Help-menu entries +#define ID_HELP_CONTENTS 1002 +#define ID_HELP_WHATS_THIS 1003 +/////////////////////////////////////////////////////////////////// +// General application values +#define ID_STATUS_MSG 1001 +#define TOOLS_TOOLBAR 1 +#endif // RESOURCE_H + + + + + + +
+ + diff -Nru kdevelop-3.9.98/doc/usermanual.docbook kdevelop-4.0.1/doc/usermanual.docbook --- kdevelop-3.9.98/doc/usermanual.docbook 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/usermanual.docbook 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,11501 @@ + + + + + IDE"> + KDevelop"> + KIconEdit"> + %ents; +]> + + + + + +The &kdevelop; User Manual + +The Reference Guide to the &kdevelop; Integrated Development +Environment for &UNIX; Systems, + + + +Ralf +Nolden + +
Ralf.Nolden@post.rwth-aachen.de
+
+
+ +
+ + +199920002001 +Ralf Nolden + + +&FDLNotice; + +18/1/2000 +1.4.0 + + +This user manual gives the user a complete overview of the &kdevelop; +&IDE; and describes the basic development process in brief. + + + +KDE +kdevelop +development +IDE +programming + + +
+ + +Introduction + +As everything on earth has it's fashions, today's computer world seems to +tend more to the use of free software even for commercial purpose. The most +popular free software project is &Linux;. It is now generally agreed that +&Linux;, (as well as other projects such as the Apache web server, the Perl +language and GNU suite of tools), proves that free software +can be of as high a quality as commercial software. But despite the quality, end +users must still suffer under the cryptic commands of any &UNIX; Systems. For +&Linux; to thrive, it needs applications, both free and commercial, and ease of +use. + +The &kde; &kde; project tries to +close this gap by providing an easy to use desktop and the companion libraries +to extend the variety of available +&GUI; &GUI; based software. But +especially as free software is often made in the author's free time, the +question for many programmers is how much they like the current code development +environment. &kdevelop; wants to take another major step: making the +programmer's life easier and more efficient: products created with &kdevelop; +can reach a higher level of reliability and functionality in the same +development period. + +To fulfill this goal, the &kdevelop; Integrated Development Environment +provides many features that developers need, at the same time wrapping the +functionality of thirdparty projects such as make and +the GNU C++ Compiler +Compiler and makes them an invisible, +integrated part of the development process. + +&kdevelop; manages: + + + +All development tools needed for C++ programming, including the Compiler, +Linker, automake and +autoconf. + + +KAppWizard, which generates complete, ready-to-go sample +applications. + + +Classgenerator, for creating new +classes classes and integrating them +into the current project. + + +File management for sources, headers, documentation &etc; to be included +in the project. + + +The creation of User Handbooks written with +SGML SGML +and the automatic generation of +HTML +HTML with the &kde; look and feel + + +Automatic HTML-based API +documentation for your project's classes, with cross-references to the libraries +used. + + +Internationalization support for your application, allowing translators to +easily add their target language to a project. + + +Creation of user interfaces through interaction with TrollTech's &Qt; +Designer + + +Managing of your project via CVS by providing an easy +to use front end for most functions. + + +Debugging your application with the debugger of your choice - either the +internal &kdevelop; debugger, or use ddd or +kdbg + + +Editing of project specific pixmaps + pixmaps with &kiconedit; + + +The inclusion of any other program you are accustomed to using for +development, by simply adding it to the Tools, according to +your individual needs. + + + +&kdevelop; makes development a joy by allowing you to work with all your +applications in one place, and saves time by automating standard development +processes, while still giving you direct and transparent access to all the +information you need while working. + +The integrated browsing mechanisms are designed to support documentation +requests that developers have, in conjunction with their project. + +The Class viewer and error finder can take you +anywhere in your project code with a mouse click, and no need to search for +files. File trees give direct access to the project files, and the integrated +help system offers superb access to online documentation from anywhere within +the &IDE; + + + + +About this Handbook + +This user manual gives the user a complete overview of the &kdevelop; +&IDE; and describes the basic development process in brief. For more information +about specific programming issues, we suggest reading the KDevelop Programming Handbook included with +&kdevelop;, which covers themes such as understanding generated application +frameworks, and how to create full-featured &kde; applications using example +projects. See also the included Tutorial Handbook as well as the &kde; 2.0 +Development book available at local bookstores in printed form or online at +http://www.andamooka.org. + +This User Guide is broken up into the following parts: + + + +Chapter + +Covers the system requirements, installation, and setting up of +&kdevelop;. + + + +Chapter + +Tells you how programs are created with standard GNU +development tools, and how they are built. + + + +Chapter + +Takes you on a short tour describing the main functionality of the +environment. + + + +Chapter + +Explains the menus and dialogs, as well as the keyboard shortcuts. + + + +Chapter + +Shows how to use the built-in documentation browser and additional help +functions. + + + +Chapter + +Explains the features and functions available to you when working with +file management and in the editor. + + + +Chapter + +Describes the creation and maintenance of software projects. + + + +Chapter + +Contains a reference on how to set compiler and linker flags, and other +project settings. + + + +Chapter + +Tells you how to make user of &kdevelop;'s powerful Class +Browser + + + +Chapter + +Features how to use &Qt; Designer while working +on your project and how &kdevelop; seamlessly cooperates with +Designer. + + + +Chapter + +Gives an overview of the debugging setup, and discusses the use of the +internal debugger. + + + +Chapter + +Tells you how to use the revision control systems CVS +and RCS with your &kdevelop; project. + + + +Chapter + +Shows you how to set up overall preferences for customizing &kdevelop; to +your own needs. + + + +Chapter + +Covers questions you might have about using &kdevelop; under different +flavours of &UNIX; and other general solutions to common problems. + + + + +For programming beginners, and for new users of this product, we recommend +you read this manual thoroughly before starting to actually work with the &IDE;, +as it covers the usage in depth. The understanding of how things are done and +how different parts of the &IDE; relate to each other will save you a lot of +time searching for functions and features, and it will enable you to immediately +make use of the the first-class development tools available to you. + + +About the &kdevelop; project + +The &kdevelop; project was started in summer of 1998 after &kde; 1.0 was +available on &Linux;/&UNIX; to make the attempt of creating an easy to use C/C++ +&IDE; for programmers, especially targeting on the &kde; desktop. Since then the +project has found a lot of helpers and supporters as well as sponsors who want +to help the team continue their work on this now widely recognized programming +environment. Within one and a half year, the &IDE; developed to a full-featured +&kde; application with the most possible functionality and stability as the +creators started to develop the &IDE; with the &IDE; itself at the time enough +usability was given. Therefore bugs were mostly found by the authors and could +be fixed very quickly as well as needed extensions for programming &kde; +applications. + +The first official stable release was made with version 1.0 on December 6, +1999. Thereafter, the &kdevelop; Team introduced more features and stability +into the &IDE; by new code or code that was unstable before, which lead to the +second release as version 1.1 on February 28, 2000. + +Since then, the project continued by integrating more functionality and +simplifying the current codebase. At the same time, many translators began +working to transfer &kdevelop; to as many languages as possible, to provide the +international developer community the &IDE; in their own language, including the +handbooks that ship with it. Many users contributed their experience and +knowledge to the project as one of the most promising products for +&Linux;/&UNIX; developers to make it even more stable and portable to other +Unices. + +After the 1.2 release on May 4th, we continued fixing several bugs while +working on a 2.0 version using the &kde; 2.0 API and the +latest technologies &kde; 2.0 offers. Since the release of &Qt; 2.2.0 brought +&Qt;s Designer for constructing user interfaces +which also supports &kde; widgets, the Designer is +about to replace &kdevelop;'s own dialog editor as it offers dynamic layout +management and directly connecting widgets. To support using the +Designer within &kdevelop;, the templates and +&kdevelop; have been updated to make easy use of it while working on a &kde; 2.0 +or &Qt; 2.2.x project. + +The 1.3 release marked another milestone. It was the last version that +needed &kde; 1.x libraries to run and was much anticipated through the offers it +made towards development for the new &kde; 2.0 platform when it was released on +December 11th, 2000. + +Since then John Birch and I decided that we really would like to have a +&kde; 2.x version of our baby, &kdevelop;. We took the time and +made it; by the end of 2000, we roughly had the functionality to say we were +almost ready. While &kde; 2.1 was shortly to come out in early 2001, we decided +to ship &kdevelop; with the base &kde; distribution as this version will make +many new &kde; developers happy to start working on a great +API on a free system to develop software for. + + + + +Printed Versions + +A printed version of the complete &kdevelop; Documentation is available as +the book titled Developing Applications for Linux: KDE +Edition, which can be ordered either online from the &kdevelop; +website at http://www.kdevelop.org +or at http://www.opendocs.org. A +share of the Gross Profits from the sales of this book goes back to the +&kdevelop; project to support continuing the further development of +&kdevelop;. + +Printable versions of the &kdevelop; documentation can be obtained from +the &kdevelop; website at http://www.kdevelop.org in &DVI;, +&PostScript; and PDF forat, in both A4 and Letter +size. + + + + + + +Installation of &kdevelop; + + +How to obtain &kdevelop; + +&kdevelop; can be found either on the &kde; applications page, at http://www.kde.org/current.html or +on the &kdevelop; homepage at http://www.kdevelop.org. &kdevelop; is +also available with &Linux; distributions such as SuSE 6.x and 7.x and +others. + +We're also offering snapshots of the &kdevelop; CVS +repository on our homepage for those who want to stay up to date with +&kdevelop;. Usually, the snapshots are not intended to be used for production +but as a test for new features and to give an insight into development progress +of the &kdevelop; team. Also we offer various third party software needed by +&kdevelop; directly such as KDoc and +KDbg. + +If you're experiencing problems with compiling or using &kdevelop;, please +read the Questions and Answers section of this +handbook or the &FAQ; file included with the &kdevelop; package. + +If your problem is not addressed, please subscribe to the &kdevelop; +mailing list at kdevelop-request@barney.cs.uni-potsdam.de by +sending a mail with an empty header and subscribe +youremailaddress as contents. Requests and problem report should +only target the usage of the &kdevelop; &IDE; and not any questions that regard +any implementation problem you may have while coding your own application. All +e-mail sent to the mailing list should be written in English, so that all +participants can take part on discussions and are able to provide better +help. The mailing list is also intended for those users willing to contribute +and who found solutions for any problems they experienced, so we can fix errors +and include that knowledge to give beginners an even more qualified first-hand +help. + +An good way to report problems is to send the output you get by starting +&kdevelop; from the console or to copy and paste the contents of &kdevelop;'s +internal Messages window. + + + + +Requirements + +In order to successfully compile and use &kdevelop;, you need the +following programs and libraries which are available on most platforms as +distribution packages and thereby can be installed easily. + + + +Required + + + +g++ 2.7.2/g++ 2.8.1/egcs 1.1 (or compatible), +available at http://www.gnu.org. + + +Perl 5.004, available at http://www.perl.org + + +autoconf 2.13, also available from http://www.gnu.org + + +automake 1.4, also from http://www.gnu.org + + +flex 2.5.4 + + +GNU gettext available at http://www.gnu.org + + +&Qt; 2.2.x, available from http://www.trolltech.no + + +&kde; 2.1, available from +http://www.kde.org + + + + + +Optional + + + +enscript for printing support. + + +ghostview or &kghostview for printing +review + + +glimpse 4.0 for the search index, available at +http://glimpse.cs.arizona.edu + + + +sgmltools 1.0, available at +http://www.sgmltools.org + + +&kde;-SDK (the KDE +Software Development +Kit), which includes KDoc, +KTranslator and KBabel, +(available at http://developer.kde.org. + + +KDbg, available from +http://members.telecom.at/~johsixt/kdbg.html + + +&kiconedit;, available at +http://www.kde.org + + +&Qt; Designer and uic, which +come with &Qt; 2.2.x + + + + + + +&kdevelop; was tested with SuSE &Linux; as well as on several other +platforms. + +As far as is known to the authors, SuSE &Linux; and FreeBSD contain all +necessary packages, including enscript, either as +packages or rpm's, so you should have no problem installing all the required +third party software. + + + + +Documentation + +For creating the &kde; library documentaiton, you need the kdelibs package +in source form available on your system, as provided by the &kde; project, or as +included in the source packages of your distribution. You also need +KDoc, included in the +&kde;-SDK + +We also offer from our homepage at +http://www.kdevelop.org a C/C++ reference that is integrated in the +&kdevelop; documentation browser after it's installation. Download the package +and copy the source file as root into your $KDEDIR and untar it with +tar +c_c++_reference.tar.gz, and then the reference +is available in your documentation tree. If you have not done this, selecting +the reference book in the browser will show an error page which includes a link +to the &kdevelop; homepage, and a description of the installation +process. + + + + +Compilation and Installation + +In order to compile and install &kdevelop; on your system, type the +following in the base directory of the &kdevelop; distribution: + +% ./configure +% make + +(as root) + +% make + + +Since &kdevelop; uses autoconf you should have +not trouble compiling it. + +In order to compile the &kdevelop; CVS snapshot, type +the following: + +% make Makefile.cvs +% ./configure +% make + +(as root) + +% make + + +If your system's make command is gmake, type +gmake instead of +make + + + + +Starting &kdevelop; + +If you use &kde; as your window manager, &kdevelop; can be started by +choosing K Development +KDevelop 1.4. As &kdevelop; supports +&kde; mime types, you can also start a &kdevelop, project file (*.kdevprj, displayed with the &kdevelop; project +icon) in the &kde; file manager, &konqueror;. This will start &kdevelop; and +load the project. + +Under other window managers, open a console and type: + +% kdevelop yourProject.kdevprj + + +Under each user account, &kdevelop; will invoke the automatic installation process on the +first startup. This allows for a quick configuration of the most commonly used +options. If your installation is not functioning correctly, you can reconfigure +&kdevelop; any time by entering: + + + + +% kdevelop + + +or, when using &kde;, by choosing K +Development KDevelop +Setup + + + + +The Installation Program + +&kdevelop; includes an automatic installation program module which is +invoked whenever &kdevelop; is started and the configuration file +kdeveloprc does not exist. We suggest you follow the +installation steps by choosing Proceed to automatically +check your system and to set up your &kdevelop; environment. + +The Installation dialog's buttons execute the following actions: + + + +Help + +Will open the &khelpcenter; program + + + +Proceed + +This stats the installation process and executes following actions: + + +Checking for make or +gmake, autoconf, +autoheader, automake and +perl for the creation and compilation of new +applications generated by &kdevelop;. If gmake is +installed, the make command will be set to automatically +use gmake. Other commandline options to your +make program can be set in the +Setup dialog which you can later access through the +Options menu. + + +Checking for KDoc and +glimpse. These allow you to create &kde; library +documentation, and a search index. If tey are found this will happen +automatically, later in the setup process. + + +Checking for enscript to ensure that printing +is available. This program has to be installed to allow correct printing, but +if it is not installed, you can do this at any time later, without having to run +the setup process again. + + +Checking for KDbg, &kiconedit; and +KTranslator. We encourage you to install these +programs, as they assist in creating complete &kde; applications. Note that +KDbg is used directly for debugging your current +project within &kdevelop;. &kiconedit; is used to display and edit the pixmaps +selected in the file-viewer trees. The programs +KDbg, &kiconedit;, and +KTranslator are then configured to be available in +the Tools menu of the &kdevelop; menu bar, if they are found. +Other tools can be added to the Tools menu by selecting +Tools... in the Options +menu. + + +The installer will next list a summary of the programs found and those it +didn't. Additional hints are displayed if you are missing one of the necessary +programs. + + +Detection of your &Qt; documentation path. This checks several standard +paths in your system for the documentation, and sets the path automatically. If +your &Qt; documentation could not be found, either because it is not installed, +or because your system keeps it in a different location, a message will appear +that asks you to set the correct path manually or to continue. Choosing to set +the path will return to the main installation window, which shows an editing +field with a button on the right to choose the path. Usually this is in the +qt/html After you have done this, the +installation can continue with the selection of Proceed +again. + + +If KDoc was detected, you are asked to +create/update your &kde; library documentation. For this you need to have the +&kde; libraries in source form. For &Linux; users who have installed &kde; from +a distribution, we suggest copying and extracting the source of the kdelibs +package to your system. For FreeBSD users who installed the kdelibs as a +package, you should look for the appropriate distfile package in the ports +collection. If neither of these cases match your situation, you should download +the sources from http://www.kde.org and +untar the sources on your system. If you wish to use the documentation provided +by http://developer.kde.org, +cancel the creation and continue with creating the search index. After the +installer is finished, and &kdevelop; has been started, set the path to the +extracted documentation package in the &kdevelop; Setup dialog, and run the +search index setup again, which can be found in the same Setup page of the +dialog. +The Update KDE Library documentation dialog is set +up to use a default path for the location of the documentation, in $HOME/.kde/share/apps/kdevelop/KDE-Documentation +. The only thing you have to do is choose the path to your library +sources with the selection button at the top of the dialog, and then press +OK. As an example, if you got the +kdelibs.tar.gz package from http://www.kde.org and downloaded it to your +home directory, you should open a console or terminal, and enter +tar +kdelibs.tar.gz. This will untar the sources +into a directory at $HOME/kdelibs, which then contains +the sources for each library in a subdirectory. For kdecore on my machine, for +example, this would now be /home/rnolden/kdelibs/kdecore. Now the path you +have to ender for the &kde; library documentation dialog would be the path for +all the libraries, in this example, /home/rnolden/kdelibs. After pressing the +OK button, a message in the installation window shows +that the documentation is in progress, and you should wait for the next message. + +On a multi user system, or systems with disk quotats for user accounts, +the installation of a complete set of HTML documentation for +each user would be a waste of disk space. In this case, ask your system +administrator to run &kdevelop; under the root account, to allow write access to +the system's root directory. Then installing the documentation within the &kde +directory, under $KDEDIR/share/apps/kdevelop/KDE-Documentation.This path can then be set up later by each user in their &kdevelop; setup +dialog, available in the Options menu. + + + +If the system check found the glimpse program +on your system, you are offered the chance now to create a search database. The +search database can be created with the options of including the &kde; +documentation and the &Qt; documentation (this is the default). Additionally, +the &kdevelop; documentation is included and will be indexed. If you have other +documentation that you want indexed, you can select the directories and add them +to the indexing process as well. + + +During the creation of the search index, the installation window will show +a message that this is in progress. + + +If all the above installation steps were completed correctly, a final +message states that &kdevelop; will be started after pressing +OK. Keep in mind that you can set up additional options +like auto saving in the &kdevelop; +Setup dialog that can be accessed through the Options +menu. + + + + + + + + + + +Programs + +Now that &kdevelop; installed successfully, and the most commonly used +options are set, you are probably wondering if it can live up to it's promises. +This chapter aims to give you a guideline as to how programs are created using +the GNU tools in general, and in particular what part +&kdevelop; plays in this game. + + +The Compiler + +The Compiler is actually the one program on your system that has to be +installed at a minimum in order to create running programs. He is the one that +compiles the source code into object files and creates the program. + +Normally you would start like this: + +Open up an editor (a text editor - don't use a word-processor!) Type in +something like this to create the source for your first program: + + + +#include <iostream.h> + +int main(){ + +cout << "Hello World" << endl; + +} + + + +Actually, all this program will do is print out the string +"Hello World" to your standard +output. But this is just the source code for the program, not the program +itself. Therefore, we need a Compiler, in this case a C++ compiler like +g++. Then we can save the file with the source code +as, lets say, myprogram.cpp and invoke the compiler with +this filename (in a console): + + +% g++ myprogram.cpp + + +Then we can start our program. Just type +myprogram on the console, and the +program prints out it's "Hello +World" string and then exits. + + + + +Make and the <filename>Makefile</filename>s. + +So you're thinking - but I have everything I need: an editor, a compiler, +and I can execute my own C++ program. But it isn't all that easy. What happens +if you have more than one source file? And do you have to compile all your +sources over and over again if you only changed one file? + +Compiling will become more and more complicated and time-consuming, +because you have to type in all the commands and options yourself. So you could +write a so called Makefile. Then, you should have the tool +make or gmake installed, +or any other tool that is capable of keeping track of a project's compilation. +Insert all your compiler commands in the right syntax into the +Makefile, and save it. Now you will only have to run +make or gmake on the console in the +directory where your Makefile is located, and then +make takes over, leading the compiler through the +steps needed to create your application. The make +utility has many other advantages, and can be used for a lot of purposes. To +get an overview, open a console and type man + or search for GNU Make +in &khelpcenter;. This will give you at the least an insight into why a +developer needs the make utility to help in compiling +his application. + +Until now, writing the Makefile has been hard work, +and you had to dig yourself into yet another set of complicated syntax and +options. But here is the good news about &kdevelop; and the +Make utility: you just have to set the +make command in the &kdevelop; setup dialog, and then you're +done. Alll projects generated with &kdevelop; will use that +make to build the target application and no typing at all. +Just hit the buttons on the toolbar of &kdevelop;, beginning with the one after +the second seperator line, or choose the desired function in the +Build menu. + +The toolbar and the Build menu offer the most common +functions you will use to let make do the dirty work +for you: + + + +Compile File is only active if you're working +on a source file. It invokes make with the correct command to compile only the +currently open source. + + +Make just calls make and creates your +target + + +Rebuild All rebuilds the whole project. + + +Clean/Rebuild all cleans the whole prject +first, and then runs make again. + + +Stop Build cancels the current build process. +This is mostly used if you are watching make working and staring at your +sources. And then you think ahhhh - I forgot about this line..., +and you have to correct your code. Just hit Stop +Build correct the error you found, and run +make again. + + + +This is not the only way &kdevelop; works together with +make for &kde; applications, there are some things +that are special, like creating messages for internationalization. These +functions are also included, so no worrying about these things anymore. + +Now you know about sources, the compiler, and why +make is needed. In the next section we'll discuss how +it is that projects created with &kdevelop; can automatically be compiled on +most other &UNIX; platforms using the configure +script. + + + + +Configure + +The title of this section probably has you asking Configure? What +has to be configured? Or who? + +Well assume you have written a program, including a +Makefile. Then you would like to distribute it, but the +compiled binary only runs on your system, or on systems that are compatible with +yours. To support other platforms, such as different &UNIX; systems, and other +machines, such as Alpha or RISC hardware, you have to +recompile the program. The easiest way would be to copy the source package to +the target machine and run make again. But, what if the +target machine uses another compiler, or has some other problem building your +binary? Not to mention more difficult issues such as installation paths for +your program and documentation. For example, &kde; might be installed in +/opt/kde/ on one machine, while it is +installed in /usr/local/kde on another. +In this case you would have to rewrite the Makefile each +time, to ensure a correct compilation and installation of your product. + +Fortunately, GNU tools have even more to provide than +that mighty make - the commonly used +automake and autoconf +packages. It sounds good to hear something with "auto"- seems like something +about application design can be done quick and easy, which exactly hits the +point. + +Automake's purpose is generally to create a +so-called Makefile.in from a file +Makefile.am which you have to write for your project. This +Makefile.am consists of macros which can be interpreted and +reduce the complexity that make offers, so a +Makefile.am is written safer and quicker than the final +Makefile. + +Having said this, who is finally creating me my +Makefile? Now, here comes +autoconf. autoconf +requires several macro files for the project. These are in the +Makefile.in's generated by +automake and a file called +configure.in, also containing macros. The +Makefile.am and in's +contain all the macros that are responsible for how to build the software in +terms of which sources have to be compiled, which files belong to the package, +and what name the final binary or library will have after a build. +Configure.in on the other hand contains macros for what the +final configure shell script will check for on the system +where configure is executed. Those could be ⪚ the +compiler command, required libraries against which the final binary will be +linked, include files the project needs, and locations of all of these. + +For example, you want to write a &kde; application. After writing your +sources, you want to distribute the program to the user community, and each user +has to compile the binary on his own. So you would write a +configure.in file that contains the macros for a &kde; +compliant application. That one macro eventually expands to a check on the +system whether The &Qt; libraries are installed, checks for &Qt; header files, +the &kde; libraries and headers and so on. + +In summary: to create a GNU compliant application that +is portable to different &UNIX; operating systems and machines other than yours, +you will need to do the following: + + + +Write the sources for your project + + +Write a Makefile.am for each subdirectory, including +the main project directory of your project + + +Write a configure.in file, to be placed in the main +project directory, and containing the macros for the system requirements. + + +Run automake. + + +Run autoconf. + + + +Now the main work is done. Automake creates the +Makefile.ins, autoconf +processes the configure.in and generates an executable +shell script called configure. All you then have to do is +to execute it with ./configure and the script will run the +checks of your choice. Finally the Makefiles will be +generated, allowing a final execution of make (or +gmake) that will process all the +Makefiles and you are done. + +This seems to be a lot of stuff for writing a small application, and much +to learn, especially how to write the correct macros. But the fact that you can +provide compilation on almost all &UNIX; systems will be worth this work sooner +or later. Finally you only have to do this work once for your project, and as +your project increases in size you have only to add the new filenames to the +macros. + +So how far does &kdevelop; support this kind of application development, +and how complicated does it become for the programmer? The good news is, you +don't actually have to learn anything about macros and scripts. All details are +hidden behind an easy to use graphical interface that does all the work for you. +An applicatin is therefore created with GNU tools in a very +user friendly way. + +Just generate your application with the KAppWizard, choosing the type of +application as appropriate, be it a pure C++ terminal application, a +GUI program using &Qt; or the &Qt; and &kde; libraries. All +the work is done automatically, and your project will immediately contain the +Makefiles that are created by an autoexecution of the +GNU tools and the configure +script. + +This is it. Now you're ready to extend the source of your project, be it +by adding classes, dialogs, translations or documentation, all of which are +automated. Just concentrate on the real work of the developer, which is +providing functionality for the final application you want to create. In most +cases you probably won't even come in contact with the +Makefiles at all when using &kdevelop; + + + + +Debugging + +This section covers a term that is widely used by developers: debugging. +It means that although your compiler produces the final application, your +application may not run or it may crash during execution, do to a so called +bug in the code. + +A program error being described by the name of an insect comes from the +history of computing. One of the first errors that caused a machine to crash +was not obviously a malfunction - real bugs were inside the computer and were +responsible for the crash. So, an error that is not detectable at first glance +is called a bug, and debugging means to throw out bugs that are +hiding where they shouldn't be. + +Of course, you don't have to hunt for them for real, assuming you have a +modern computer designed to keep them out by some kind of outer cover for +protection! They have to be found in the doce, mostly by their ending the +execution of a program with the message Segmentation +fault. + +GNU provides another tool called +gdb, the GNU debugger. This +terminal program allows you to watch the internal values of an application, and +to watch the execution step by step by setting breakpoints in the +code. gdb stops the execution every time the program +comes to a breakpoint while executing. Like most other tools however, the +debugger is easily handled by another program, which provides a front end, +allowing you to easily watch values and set the breakpoints. + +For this purpose, your project's application is by default created with +the compiler option for debugging turned on, thereby storing additional data in +the executable to allow the localization of values and lines in the code. As a +third-party front end to gdb, &kdevelop; makes use of +KDbg. To debug your program, you just have to select +Debug in the Build menu, or press +the corresponding toolbar button (which looks like a wheel with glasses +over it, indicating you want to watch the execution.) + +&kdevelop; then opens the Tools window and starts +your application with KDbg. The +KDbg interface appears inside the +Tools window, and allows the same usage and features as if +you had started it separately. + +In general the above sections describe the normal steps a developer must +complete when starting to write his own application, and cover issues that are +common to all projects. We have also explained some of the ways &kdevelop; can +help the developer, and how &kdevelop; supports the idea of providing an easy +introduction to &UNIX; programming. For further information about the role and +purpose of the GNU tools, you should read the documentation +provided with them, commonly accessed via the man command, or +available in &khelpcenter;. + + + + + + +Development with &kdevelop; + +In this chapter you will get a general overview how you can use &kdevelop; +and the &Qt; designer to create your own applications. + +All tools are described along with their use in the development process. +If you are a beginner with C++/GUI design and programming, +you should read the &kdevelop; +Programming Handbook, which describes some basics of program design, and +shows in detail the use of &kdevelop; through the use of sample projects. You +can follow these sample projects step by step, and get used to the way +applications are created using &kdevelop;. You should also read chapter to gain a eneral understanding why &UNIX; applications +should make use of the provided development tools. This will make things easier +when you meet references to Makefiles &etc;. + + +What are &kdevelop; Project Applications? + +Projects created with &kdevelop; make it very easy for developers to use +the GNU standard development tools. Instead of self-creating +Makefiles (which you would have to do anyway, because of +the project's complexity), these tools provide not only a better way of +Makefile generation, but also a simpe and safe way to +quickly adapt t different systems, through the use of +autoconf generated configure +scripts. + +The distribution of your applications does not require the end-user to +have anything different installed than a C++ compiler and the development +libraries. These are often installed by default, but you can just as well +distribute binary packages of your application. Either way, the end-user of +your product does not have to have &kdevelop; installed. For giving away your +sources, we recommend you include your &kdevelop; project file, as this makes it +easy for other developers to work with your sources if they do have &kdevelop; +installed. + +For projects where several developers, maybe working in different places, +are involved, this should be an easy way to ensure consistency of the +Makefiles, so you don't run into trouble. This is +especially the case on multi-lingual applications, for translators who aren't +actually working on the source code, except in those cases that require +corrections for enabling translation support. They will be thankful, as +&kdevelop; simplifies their work as much as possible, allowing their effort to +be concentrated on the translation itself. + +When using &kdevelop; for your own projects, you would start creating a +new application with the KAppWizard. There you can also set the project type, +according to the goals of your program. Next you would start developing the +user interface by adding widgets that are already constructed in the libraries, +and have only to be called by your application, or by self-constructions that +can be made in &Qt; Designer. + +Next comes the extension of the user interface by changing and extending +those parts that are already made by &kdevelop;, such as the statusbar, menu bar +and toolbars. + +As resources are collected in a resource file, they can be extended simply +by adding new values to the already existing ones. The existing resources can +also be used as a guideline for adding your own application specific +ones. + +After implementing the functionality to methods that are either generated +empty by the &Qt; Designer or are already containing +the code for standard user actions, you should extend the User Manual by simply +editing the provided SGML index.docbook +file, adding descriptions of your application's capabilities. + +The last step is to generate translation files and to distribute your +project to translators doing their part to enhance internationalization. + +Even for non GUI application designers, the &IDE; +offers an easy way to create new projects. The editor and class browser, in +conjunction with &kdevelop;'s powerful project management, will reduce the time +it takes for development to a minimum required for implementation of +functionality. + + + + +A Short description of &kdevelop;'s tols + +With &kdevelop;, you have chosen a package that, in conjunction with other +tools, will provide you a perfect and flexible environment for object-oriented +application development under &UNIX; systems. Generally, &kdevelop; consists of +the programming environment, and integrates the +Designer that comes with &Qt; 2.2.x. Further, all +necessary programs that are helpful for designing applicaitons are embedded in +one way or another. + + +The Programming Environment and the &Qt; +<application>Designer</application> + +The programming environment is the user interface that &kdevelop; provides +for creating and maintaining projects, implicitly using many other tools, and +simplifying their use. &kdevelop;'s build in editor and Help +browser, as well as the Class Browser, reduce +the amount of work that development processes usually burden the programmer +with. This ease of use makes writing applications for &UNIX; an enjoyment on +it's own, and will probably result in shorter release cycles and many +development improvements. + +From here, you're managing your project through all it's details, keeping +an overview of your classes, and you don't have to use multiple additional +consoles for your work. The integration of all user interfaces results in your +only having to work in one window under &X; and you don't have to keep an eye on +several windows spread all over your desktop. + + + + +&Qt;'s <application>Designer</application> + +In it's current release, &kdevelop; makes use of the &Qt; +Designer for all &kde; 2.0.x/&Qt; 2.x project +templates. Keep in mind that Designer has to be +included in your PATH variable to be automaticaly called from +within &kdevelop;. The configure scripts of &kde; +2.0.x/&Qt; 2.x templates will search for the uic as +well, to generate C++ output from your .ui +files created with Designer. &kdevelop; takes care +of automatically adding .ui files to +Makefile.am under the _SOURCES line, +while dependencies are automatically resolved by the +am_edit script. + +However, &kdevelop; comes with a converter script +(kdlgdesigner), that helps you port existing *.kdevdlg files, created with &kdevelop;'s internal +dialog editor, into .ui files that can be +processed with &Qt; Designer. You can find this +script in the tools subdirectory of your +&kdevelop; installation. + +Note that you can add native support for &kde; in &Qt; +Designer by reconfiguring &Qt; with the + switch, once &kde; has been installed. If you then +recompile &Qt;'s tools directory, you +will get a Designer that has native support for most +of the &kde; widgets, and integrates seamlessly into &kde; in terms of look and +feel. + + + + + + +KAppWizard and the Class tools + +The KAppWizard and the Class tools proved for project generation and +automatic code extension are intended to make the creation of applications as +easy and safe as possible. They offer a good way for beginners in &Qt;/&kde; +programming to start actually working themselves into the details of +GUI application design, as results can be achieved very +quickly. + + +KAppWizard + +KAppWizard is intended to create fully functional application projects +that are ready-to-run, by using GNU standard tools, and, for +GUI programs, by taking advantage of the &kde; and &Qt; +libraries. By specifying only the information that is required as a minimum, +users are able to start working at a new project within seconds. Calling +KAppWizard should be the first step for creating a new application with +&kdevelop;. + +KAppWizard provides you a so called application skeleton, +with all the necessary C++ source code files for a running application. After +you specify a project name, and set your preferences, your new project will be +generated and you will instantly have a complete application. This new +application already contains a lot of functionality (for &kde; and &Qt; +projects), without you even having to type one line of C++ code. + +When specifying the complete set of options the program generator offers, +you application already contains: + + + +An SDI interface, for working with one document per +application window, based on the document-view-controller model. + + +Menus and dialogs for opening and saving files, as well as printing +dialogs. + + +A toolbar and statusbar, already providing complete functionality. + + +A Help system, containing an SGML based user manual, +and statusbar help. + + +A complete HTML based API +(Application Programming Interface) documentation set, for the current state of +the project. + + +An installation routing using make + + + +The KAppWizard is available in the Project with the +entry New... + + + + +Classtools + +The term Classtools describes a variety of functions that +are available for the developer to work on a project, not only through an +object-oriented language, but using the sources in an object-oriented +way. + +Working with classes instead of having to watch for files offers a very +flexible way to extend a project, and lets the developer concentrate on the +objects the project contains. + +The tools that &kdevelop; offers are a Class Generator and a Class +Browser, where each one provides a lot of automated functionality. + + +Creating a new class with the Class Generator + +After generating a project with the KAppWizard, your work as a developer +is to add a set of classes that match the design of the application. + +The typical process when not using &kdevelop; would be to create a new +header and source file, add them manually to the appropriate +Makefile.am and to start writing the classes declaraton and +implementation. + +To simplify this process, the Class Generator lets you do this by +specifying only the name of your new class, the classes it inherits, inheritance +attribute, and any other information such as class documentation. Additionally +you can change the filenames that are preset by the generator, and if the class +is &Qt; signal/slot enabled by default. + +The rest of the work is done automatically for you, you don't have to +worry about the Makefile.am and the class itself. A new +make invocation is enough to include the new class in the +compilation process. As the Class Browser updates itself after the addition of +a class, the declaration and implementation are available at once, and you can +start working on the extension of the class. The Class Generator is invoked +from ProjectNew +Class + + + + +The Class Browser + +The Class Browser displays all types of objects and functions in your +project in a tree left of the editing window. A Class parser scans all files +for methods and classes and makes them available as graphical symbols. + +Over these symbols, context menus offer specialized functionality for +working with the sources by focusing on the classes and functions. + +Selecting a class will result in opening the file that contains the +declaration. Selecting methods and functions will show you the implementation. +For a full description see the section titled Using the Class Browser + + + + + + + + + + +The Development Process + +The development of a new application with &kdevelop; can generally be +divided into two major steps: + + + +Generate a program skeleton with KAppWizard + + +The rest of the development using &kdevelop;'s features, and your own +ability as a programmer. + + + +To describe the development process, we assume you want to create a +&Qt;/&kde; application, which implies using most of &kdevelop;'s features. Even +if this is not your primary aim in development, it will serve as a general +HOW-TO in the use of &kdevelop; + + +Creating a program skeleton + +To start creating your application, you will usually call the KAppWizard, +enter your project name, and generate a program. + +The wizard automatically creates a project file for the application, and +inserts the &kdevelop; areas into the Makefile.am's which +will be used later when extending the application. A project file is created, +and this project file is the file you will have to load in later sessions to +reopen your project. + +You call KAppWizard from the Project +New... menu choice. When the wizard +appears, you first must specify the project type on the first page. Selecting +Next < brings you to the next page, where you should +insert the Project Name, Project +Directory, your project's Version number, and +your own details, your name as the Author and your +Email address. Here you also have several choices as to +what sources you wish to be automatically generated for you: + + + +GNU-Standard Files (INSTALL, README, +COPYING...) + + +User Documentation + + +API Documentation + + +lsm File (Linux Software Map) + + +.desktop file + + +Program Icon + + +Mini Icon + + + + +Choosing Next < brings you to a third page where you +can set up Version Control System Support. We will assume +for this project that you are not using VCS, and this is +described in it's own section . + + + +The next two pages allow you to edit the header template files (for .h) and the source template files (for .cpp). These templates are automatically inserted +according to your choice. If you already have file headers you want to use, +then you can choose those files here as well. + + + +The last page contains an output and an error window. If you press the +Create button here your application will now be +generated, and the actions that are being executed can be seen in the (upper) +output window. If READY appears in the output +window, the KAppWizard is finished, and you can select +Exit to return to the programming environment. + + + +Your newly generated application is ready to compile and run, although it +doesn't do very much yet. Choose Make from the +Build. You can test the functions already present by then +choosing Build Execute + + + + + + +Developing an Application + +This section describes the development phase of applications within +&kdevelop; and the &Qt; Designer - and how all the +work can be done within the &IDE;. + +The development steps are generally to edit the source files, the +compilation of the project sources, followed by the linker process binding all +object files to the final binary. Then errors have to be located, which either +prevented compilation or linking, or are semantic bugs which can be found by a +debugging session. Finally documentation has to be extended, and translations +added. + +Of course, all these steps don't happen necessarily in this order, but +it's not too easy to describe a general way that all applications are +developed. As for the actual editing of the source files, typically you first +create the visible parts of the project, such as the main view and the dialogs +for configuring options. Then generate the source code and implement all the +necessary connections, changing the menubar and toolbar, adding status bar help +for new menu entries, and filling in the new member functions with objects that +are displaying your dialogs. Then you compile your application, test it's +capabilities, fix errors, and test it again. + +The following sections describe one way this could be done, for your +particular application, you may choose another way. &kdevelop; gives you enough +flexibility to decide what to do and when to do it. + + +User Interfaces + +The User Interface of an application is what the user actually sees and +how he interacts with the program. A program generally has a menubar, +toolbar(s) and a statusbar, as well as a main view which is different depending +on the type of application. For an editor, the main view would probably be a +text input window. + +KAppWizard generated applications already contain complex functionality in +the graphical interface. The frame structure takes care of standard elements +such as bars and buttons. + +When developing your application, you have to extend the given structure +to give the program the user interaction capability you want to provide. One +part of the work is the design of dialogs, ⪚ for changing values such as the +brush width in a paint application. This can now be done easily in &Qt; +Designer. + +So, how do you create those great looking dialogs? As the &Qt; library is +a GUI toolkit, it provides a base set of +widgets. These include things like labels displaying plain text, +lineedits for text input, and buttons for navigation and +selection commands. Besides these low-level parts of user +interfaces, standard dialogs are provided for things such as printing, opening +and saving files. The &kde; libraries are in turn based on the &Qt; library, +and contain replacements for certain dialogs, as well as additional widgets that +can be used in your application. + +When you start designing your applications behavior, you should make +yourself comfortable with the widgets provided with &Qt; and &kde;. The online +documentation for &Qt; offers screenshots for most of them, so you should look +there first. Then we advise you take a closer look at the &kde; +UI library, offering other widgets. Libraries such as khtml +contain very specialized widgets that a lot of programs make use of. + +It simplifies application design to use predefined dialogs and widgets +such as those provided with &Qt; and &kde;. For your own dialogs, these +low-level widgets are the ones you need. A dialog after all merely consists of +a collection of different widgets combined together, and building the +interface. + +Dialogs are technically programmed in C++ code, in a class that is derived +from QWidget. The program using the widget therefore +needs an object of the widget's class - this is almost all you have to +understand about how dialogs or views are used to begin using them +yourself. + +The &Qt; Designer that comes with &Qt; can be +used to easily create dialogs and user interfaces. You can use the +Switch to Qt Designer icon on &kdevelop;'s menubar. + This will bring up +Designer, where you can create a new dialog. You can +also choose an existing .ui file from the +Files viewer and &kdevelop; will open +Designer with the selected dialog. + +You can add dialogs easily by adding a new .ui file from the File +menu. + +The Designer creates .ui files which contain an xml +description of the class. Once you have added the file to your project, +&kdevelop; will take care of adding it to your Makefile. +The build system will automatially create the header and implementation files +for you. Now all you have to do is either create a new class that inherits the +dialog class and implement functionality, or use the dialog directly. Using +Designer to create dialogs has a clear advantage: +Code and layout are strictly seperated, allowing you to change the design of +your dialog without rewriting one line of code. This way you can concentrate on +what's really important, the actual coding process. + +For further information on the Designer's +concepts, read the &Qt; Designer handbook which can +be found in &kdevelop; in the Books documentation +viewer. + + + + +Binding New Elements + +After you have created your user interfaces, and generated the sources, +you are ready to make your application use them as objects. + +As described above, a normal GUI based program contains +bars and the main view. Additionally, the main view interoperates with the +bars, which are part of the main application class, and the document object to +which it is connected. + +In terms of object-oriented design, you would describe +the given architecture as the Document-View-Controller model. +This model describes the basic functions for objects in an application, in +relation to their role within the program. The controller represents the one +coordinating the main application and providing user interaction through a +menubar (and additionally toolbars and a statusbar). The document class takes +the task of representing the document the user works with, therefore a document +class should do all actions such as loading files and saving them again. The +view now is the center of the application window, showing the user part of the +document visually, and providing all functions for the user to manipulate the +data. + +As the bars and toolbars are already present, your task is to create the +main view and additional dialogs through which users can change settings, or +access additional functions. + +To build your main view, the generated source code for your application +already contains a class in the form of +YourApplicationView which +inherits the QWidget class. +QWidget is the minimal class that handles user interfaces +in &Qt;, and therefore in &kde; as well. + +In general, there are three ways to extend the given class: + + + +Remove the document view structure, and use one of the predefined +big widgets that already contain a lot of functionality. Just +remove the view class, and replace the view object with another. + + +Change the inheritance of the view class. Change the inheritance to, for +example, QMultiLineEdit, and your application becomes an +editor. + + +If your main view will consist of several separate parts, create the +widgets and their classes with the &Qt; Designer, and +create objects of these classes in the view class constructors that in +combination will build the main view. + + + +For dialogs, things are a bit different. Normally you would call a dialog +through a menu entry, and additionally through a toolbar icon. After you have +constructed your dialog and generated the sources, the class is available for +creating the object that will be the dialog. + +First you have to look for a suitable place in the menubar to add an entry +which will open this dialog when seleced by the user. If the already present +menus do not match your needs, you can create a new popup menu just like the +others, and insert your entry, and also the slot you want to call when the +menuitem is selected. + +You must also specify an ID for the menu entry. The +frame applications have all ID's already given, collected in +a file resource.h, so you have only to +add the ID and give it a new number. + +Then implement the slot by creating an instance of the +dialog classand call the dialog with the member functions given by the base +class. + +Now you're done. You could additionally create a new toolbar icon, and +add status help messages. + +Your application now offers a new function which is visible to the user. +NExt you have to add the implementation of methods that your dialog will be +operating with, to manipulate any values. Finally call your +make tool or Execute and +the changed files will be recompiled, so the results of your changes can be +tested immediately. + + + + +The Complete Development Process + +Above we discussed the normal way to start working on a new application +using &kdevelop;, and how to extend the user interface. + +These are the standard steps where the &IDE; helps you, but &kdevelop; +does more than providing tools for creating applications and their visual +parts. The following sections give a sohrt description of the additional +functionality that is offered to enhance application development. + + +Source Code Management + +The &kdevelop; &IDE; provides a lot of methods to help a programmer +achieve his goals in the minimum of time. As described previously, the +KAppWizard and the &Qt; Designer shorten the time +normally taken to get the same result manually. This doesn't cover much of the +work a programmer normally has to do: working on the implementation of his +application to provide a proper execution by the end user. So why is &kdevelop; +the &IDE; you would want to use as a coding environment, especially when +developing non GUI applications? + +The &IDE; implicitly keeps track of your project in general, so you don't +have to worry about much other than saving changes and regenerating +Makefiles. This is project management, and &kdevelop; +handles this very powerfully, in any case of C++ application development. It is +easy to see that having removed the burden of management from the developer, he +can concentrate more on working on the source code. + +On the other hand, the code is usually spread over any different files +across the project, so you can separate certain parts from each other. This +sill means working the hard way. Being the developer, you still have to +struggle with creating these files and writing standard contents, for example +file headers containing the authors name and license terms. Further, you have +to remember where your functions are, where youre classes are, and where in your +project your structures and methods are. + +&kdevelop; can help. The Class Generator lets you create a new class, +including inheritance, attributes, and documentation, very easily. For object +oriented work, the Class browser brings you to the location of your objects, and +it really doesn't matter any more where, or in which file, the code actually +is. The browser scans all your sources automatically, and rebuilds itself after +additions, to keep up with your work, enabling you to access the new code +immediately and directly. + +Through context menus, the browser offers even more functionality. It can +take you directly to the implementation or to the declaration of member +functions. The addition of members is handled graphically, with dialogs. No +more search for the file and the right place to add entries. Yet all this is +done without hiding from you where the code is, so you can always see how things +are fitting together. + +Finally, you can get an even more specialized view of your projects +classes with the Classtool dialog, providing you trees that show usage, contents +and inheritance of the classes and their objects. For more detailed +information, see . + + + + +Building and Executing your Application + +The &kdevelop; &IDE; is especially designed to take away all the steps +normally involved in periodically building and executing your program, as well +as locating errors in the source. + +You start the build process by either clicking on the symbols +Build or Rebuild All in the toolbar, or by +selecting Build Make + or Build Rebuild +All + +To execute your application, you can choose the symbol +Execute or Debug (which starts +KDbg with your program) from the toolbar, or you can +use the corresponding menu entries in the Build menu. You +can also choose Execute with Arguments to start your +application with additional arguments. For more information about the build +process, see . + + + + +Searching for Program Errors + +Errors naturally occur during the build process (where they are detected +by the compiler, and are called syntactical errors, because they result from +incorrect syntax in the sources) or during the execution of the application. +This second type must be found and removed by the programmer. + +To help locate errors, the developer needs information about exactly +what caused it's occurrence. As mentioned, the compiler is able to detect +syntax errors by itself, resulting in an executable that can't be built. They +can also be detected by the linker, which will report Unresolved +symbols. See for more information +about the linker. + +As these tools give out a detailed description of the error, these errors +are easily found (and usually, easily removed.) During the build proess, you +will see the output window pop up, showing you what your +make tool and the compiler have to say. In the case +of errors or warnings, just press the mouse button over the error line, and the +editor will open the affected file and set the cursor to the line reported as +having the error. + +Where there are more than one error, youcan navigate with the entries in +the View menu: Next Error or +Previous Error, or the corresponding keyboard +shortcuts. You will find this is very functional, and makes finding and +correcting errors very quick and simple, although, for the actual removing, your +skill as a programmer is required. + +Runtime errors, which occur during execution, and mostly result in a +segmentation fault, are sometimes much harder to find. You can enable the +compiler to add information to the binary to watch it's execution in the source +code. A debugger is another program that lets you do this, by starting the +application and letting you set breakpoints in the code where execution stops. +In this way, you can control critical implementations, and detect at least the +line that causes the error. Finding the real cause is another task, and depends +on the programmer. + +The gdb is a debugger that is provided with the +GNU compiler, and programs like +ddd and KDbg are front +ends that make gdb easier to use. &kdevelop; +therefore uses KDbg and lets you invoke the debugging +process with the commands Debug in the +Build menu, or with the Debug symbol in +the toolbar. + +For more information about debugging applications, see Projects and The &kdevelop; Programming +Handbook + + + + +Additional Information + +The topics addressed within this chapter are described in more detail +within the documentation provided with the &kdevelop; &IDE; and in other +documentation: + + + +The &kdevelop; Programming +Handbook, covering a complete introduction into GUI +application design and programming with the &Qt; and &kde; libraries. + + +This handbook, sections Overview to Projects, describing all available functions within +&kdevelop; + + +This handbook, section Using &Qt; +Designer in your projects + + +The Online Reference documentation to the &Qt; library, which covers +examples of using the &Qt; GUI toolkit, as well as a class +reference and screenshots for most of the important ready-to-use widgets +included. + + +The &kde; Library class reference, generated automatically by &kdevelop; +from the &kde; library sources, containing descriptions of all classes and +widgets including example code for their use. + + + +On the Internet you will find: + + + +http://www.trolltech.no, for +information about &Qt; and additional third party widgets. + + +http://www.kde.org for information +about the &kde; project, and developer guidelines. + + +http://developer.kde.org for +additional references to &kde; application development. + + +The &kdevelop home page, at http://www.kdevelop.org + + + + + + + +Overview + +Looking at &kdevelop; the interface can be best described by it's logical +divisions: the main window, the tree view, the output window, and the general +interface (consisting of the menus, toolbars and statusbar.) + +This chapter describes the purpose of each part of the interface, starting +with teh windows, followed by the menus and toolbars and the functions they +provide. + + +The Main Window + +The main window consists of three tabs, of which the left two are for +editing. + + + + + +First comes the Header/Resource Files window, which +shows headers and other text files, including the documentation +SGML files. + + +Next is the C/C++ Files window, which is used for +editing your source code. + + +These are followed by the Documentation-Browser, +displaying installed documentation in HTML format. + + + + +For a description of the two editor windows functionality, see the chapter +on Working With the Editor and +for more information on the Documentation-Browser, you +should look in the section Using +the Documentation Browser. + + + + +The Class browser and File viewers + + +The <guilabel>Classes</guilabel> Viewer + +The Classes Viewer shows the classes of your project +as well as global functions and variables. Opening the tree will show all +member functinos and members, with symbols for attributes ( private, protected +and public, signals and slots), so you can see the properties of members +visually without switching to the header file. + + + +Selecting the class name will open the corresponding header file +containing the class in the editor, and set the cursor to the beginning of the +class declaration. Selecting member functions will open the implementation +file, and place the cursor at the function header. For elements &kdevelop; will +look for the header file, and put the cursor at the line the element is +declared. The Classes viewer also provides popup menus +that offer more specific options. See for more +detailed information. + + +The Classes viewer does +not display generated files such as those generated by +moc and uic, as they are +removed from the distribution, and are not present on a clean development +tree. + + + + + + + +The Logical File Viewer + +The Logical File Viewer (labelled Groups) allows the +sorting of files by filters into groups. Individual gropus can be added with +the Properties entry in the +Project menu. This allows a more specialized search for +files that you want to access quickly, in the first place by only showing files +included in the project. + +Selected files will be opened according to their mime type. You will like +the Groups tab for things like selecting pixmaps. This +will start &kiconedit; (if it's installed on the system) in the +Tools window, and opens the chosen picture. + + + + +The Real File Viewer + +The Real File Viewer (Files) shows the project +directory with all files, so you can edit non-project files or files hidden by +the Groups tab, such as configure.in +or Makefiles. Popup menus also provide functions such as +adding or removing files in the current project. + + + + +The Documentation Tree + +The Docuemntation Tree, (labelled Books) displays all +available HTML based documentation that &kdevelop; knows +about. Selecting a book will open the first page in the Documentation +Browser window. A popup menu provides personal configuration for +additional HTML based documentation packages. + + + + +The Output Window + +The Output Window contains several tabs as follows: + + + + + +messages + +Displays all the output of the compiler. Clicking on an error message +will change the editor to set the cursor on the line the compiler found an +error. + + + +stdout + +Display for terminal based applications that send messages to the standard +output of the computer. Note that terminal applications are now started in an +external console window. + + + +stderr + +Displays all error messages that your program produces. This is useful +for testing purposes. + + + +breakpoint + + + + + +frame stack + + + + + +disassemble + + + + + + + + + + + +The Menu reference + + +The <guimenu>File</guimenu> menu + + + + + + +&Ctrl;N + + +File +New... + + + +Opens the New +File dialg, allowing you to create a new file. This dialog is +described more completely in section . + + + + + + +&Ctrl;O + + +F +Open... + + + +Displays the Open dialog and lets you choose a file +to be opened. + + + + + + +&Ctrl;W + + +File +Close + + + +Closes the file in the frontmost editing window + + + + +File +Close All + + + +Closes all open files. + + + + + + +&Ctrl; S + + +File +Save + + + +Saves the file open in the frontmost editing window. If the file has not +been saved yet, the Save File As... dialog will be opened +to let you choose a path and filename for the file to be saved. +This item is disabled if you are browsing documentation. + + + + +File +Save As... + + + +Opens the Save File As... dialog, allowing you to +save the current file with a new name. + + + + +File +Save All + + + +Saves all open files that contain unsaved changes. + + + + + + +&Ctrl; P + + +File +Print... + + + +Opens the Print File dialog where you can set various +options for printing via either enscript or +lpr. + + + + + + +&Ctrl; Q + + +File +Exit + + + +Exits &kdevelop;. If any open files contain unsaved changes, you will be +given the opportunity to save them. + + + + + + + +The <guimenu>Edit</guimenu> menu + + + + + + +&Ctrl; Z + +Edit +Undo + + + + + +Allows you to undo the last action you performed. + + + + + + + + + +&Ctrl; Y + +Edit +Redo + + + + + +Repeat a previously undone action. + + + + + + + + + +&Ctrl; X + + +E +Cut + + + + + +Cut to the clipboard the currently selected text, removing it from the source +file. + + + + + + + + + +&Ctrl; C + +Edit +Copy + + + + + +Copy to the clipboard the currently selected text, without removing it from the +source file. + + + + + + + + + + &Ctrl; V +Edit +Paste + + + + + +Paste the contents of the clipboard at the cursor. + + + + + + + + + + &Ctrl; I + +Edit +Indent + + + + + +Moves the selection to the right. + + + + + + + + + +&Ctrl; U + +Edit +Unindent + + + + + +Moves the selection to the left. + + + + + + + + + +&Ctrl; M + +Edit +Comment + + + + + +Adds // to the beginning of each of the selected lines. + + + + + + + + + +&Ctrl; &Alt; M + +Edit +Uncomment + + + + + +Removes // from the beginning of each of the selected lines. + + + + + + + + +Edit +Insert File... + + + + + +Inserts a file at the current cursor position. + + + + + + + + + +&Ctrl; F + +Edit +Search + + + + + +Searches the file for an expression. + + + + + + + + + +F3 + +Edit +Repeat Search + + + + + +Repeats the last search. + + + + + + + + + +&Ctrl; R + +Edit +Replace + + + + + +Searches for and replaces an expression. + + + + + + + + + +F2 + +Edit +Search in Files + + + + + +Opens the search in files dialog to search for an expression over several files. + + + + + + + + + +&Ctrl; A + +Edit +Select All + + + + + +Selects the whole documents contents. + + + + + + + + + + +Edit +Deselect All + + + + + +Deselects the whole documents contents. + + + + + + + + + +Edit +Invert Selection + + + + + +Inverts the current selection. + + + + + + + + + +The <guimenu>View</guimenu> menu + + + + + + +&Ctrl; G + +View +Goto Line + + + + + +Goes to the line number + + + + + + + + + +F4 + +View +Next Error + + + + + +Switches to the file and line the next error was reported in. + + + + + + + + +ShiftF4 + +View +Previous Error + + + + + +Switches to the file and line the previous error was reported in. + + + + + + + + +View +Dialog Editor + + + + + +Starts Qt's Designer (Dialog Editor) + + + + + + + + + +&Ctrl;T + +View +Tree View + + + + + +Enables/Disables the Tree View + + + + + + + + + +&Ctrl; B + +View +Output View + + + + + +Enables/Disables the output view. + + + + + + + + +View +Toolbar + + + + + +Enables/Disables the toolbar. + + + + + + + + +View +Browser Toolbar + + + + + +Enables/Disables the browser toolbar. + + + + + + + + +View +Statusbar + + + + + +Enables/Disables the status bar. + + + + + + + + +View +Tab Text + + + + + +Changes the appearance of the tabs on the tree view. + + + + + +Text only + + + + +Icons only + + + + +Text and Icons + + + + + + + + + +View +Refresh + + + + + +Refreshes current view. + + + + + + + + + +The <guimenu>Project</guimenu> menu + + + + + +Project +New + + + + + +Generates a new project with the Application Wizard. + + + + + + + + +Project +Generate Project File... + + + + + +Creates a project file for an existing Automake project. + + + + + + + + +Project +Open + + + + + +Opens an existing project. + + + + + + + + +Project +Open Recent Project + + + + + +Opens a recently opened project. + + + + + + + + +Project +Close + + + + + +Closes the current project. + + + + + + + + +Project +New Class... + + + + + +Creates a new class frame structure and files. + + + + + + + + +Project +Add Existing File(s)... + + + + + +Adds an existing file or files to the project. + + + + + + + + +Project +Add new Translation File + + + + + +Adds a new language for internationalization to the project. + + + + + + + + + +ShiftF7 + +Project +File Properties + + + + + +Shows the current file properties. + + + + + + + + +Project +Make Messages and Merge + + + + + +Invokes make to create the messages file by extracting all +the i18n() macros. + + + + + + + + +Project +API Doc Tool... + + + + + +Switches the documentation tool. + + + + + +KDoc + + + + +Doxygen + + + + +Configure Doxygen + + + + + + + + + + + +Project +Make API Doc + + + + + +Creates API documentation for the project. + + + + + + + + +Project +Make User Manual + + + + + +Creates an SGML User manual for the project. + + + + + + + + +Project +Make Distribution + + + + + +Creates a distribution package from the current project. + + + + + + +Source tar.gz + + + +Creates a source tar.gz file from the +current sources. + + + + + + +Build RPM Package + + + +Releases your project as RPM package + + + + + + +Configure RPM Package + + + + + + + + + + + + + + + +F7 + +Project +Options + + + + + +Configure uptions for creating RPM packages + + + + + + + + + +The <guimenu>Build</guimenu> menu + + + + + + +ShiftF8 + +Project +Compile File + + + + + +Compiles the current source file. + + + + + + + + + +F8 + +Project +Make + + + + + +Invokes make command. + + + + + + + + +Project +Clean + + + + + +Invokes make , which deletes all object +and metaobject files. + + + + + + + + +Project +Rebuild + + + + + +Rebuilds the program. + + + + + + + + +Project +DistClea/Rebuild All + + + + + +Invokes make and rebuild all. + + + + + + + + + +F10 + +Project +Stop Build + + + + + +Stops make immediately. + + + + + + + + + +F9 + +Project +Execute + + + + + +Invokes the make and runs the program. + + + + + + + + + +&Alt; F9 + +Project +Execute with Arguments... + + + + + +Lets you set runtime arguments for the program, then invokes +make and finally runs the program. + + + + + + + + +Project +DistClean + + + + + +Invokes make which deletes all +compiled files. + + + + + + + + +Project +Autoconf and Automake + + + + + +Invokes automake and autoconf. + + + + + + + + +Project +Configure... + + + + + +Invokes ./configure. + + + + + + + + + +The <guimenu>Debug</guimenu> menu + + + + + +Project +Start + + + + + +Invokes the debugger on the current executable. + + + + + + + + +Project +Start (other)... + + + + + +Various other startup options for the debugger. + + + + + +Examine core file + + + +Examine a core file. + + + + + + +Debug another executable + + + +Debug an application other than the current executable. + + + + + + +Attach to process + + + +Attach to a running process. + + + + + + +Debug with arguments + + + +Lets you debug your project application after starting the application with +command line arguments. + + + + + + + + + + + + +Project +Run + + + + + +Continues application execution. + + + + + + + + +Project +Run to cursor + + + + + +Continues application execution until the current cursor position is reached. + + + + + + + + +Project +Step over + + + + + +Step over. + + + + + + + + +Project +Step over instr + + + + + +Step over instruction. + + + + + + + + +Project +Step into + + + + + +Step into. + + + + + + + + +Project +Step into instr + + + + + +Step into instruction. + + + + + + + + +Project +Step out + + + + + +Run to end of function. + + + + + + + + +Project +Viewers + + + + + +Various views into the app. + + + + + + + + +Project +Interrupt + + + + + +Interrupt the app. + + + + + + + + +Project +Stop + + + + + +Kills the app and exits the debugger. + + + + + + + + + +The <guimenu>Tools</guimenu> menu + + + + + +Tools + + + + + + + + + + + + + +The <guimenu>Options</guimenu> menu + + + + + +Settings +Editor.. + + + + + +Sets up the editor's behavior. + + + + + + + + +Settings +Editor Colors... + + + + + +Sets the editor's colors. + + + + + + + + +Settings +Editor Defaults... + + + + + +Sets the highlighting default colors. + + + + + + + + +Settings +Syntax Highlighting + + + + + +Sets the highlighting colors. + + + + + + + + +Settings +Documentation Browser... + + + + + +Configures the browser options. + + + + + + + + +Settings +Configure Printer... + + + + + +Configures printing options. + + + + + + + + +Settings +Tools... + + + + + +Configures the Tools menu entries. + + + + + + + + +Settings +KDevelop Setup... + + + + + +Configures KDevelop. + + + + + + + + + +The <guimenu>Window</guimenu> menu + + + + + +Window + + + + + + + + + + + + + + + +The <guimenu>Bookmarks</guimenu> menu + + + + + + +&Ctrl; &Alt; T + +Bookmarks +Toggle Bookmark + + + + + +Toggle a bookmark in the current open file. + + + + + + + + + +F5 + +Bookmarks +Next bookmark + + + + + +Goes to the next bookmark in the current file. + + + + + + + + + +Shift F5 + +Bookmarks +Previous Bookmark + + + + + +Goes to the previous bookmark in the current file. + + + + + + + + + +&Ctrl; &Alt; C + +Bookmarks +Clear Bookmarks + + + + + +Clears the bookmarks for the current file. + + + + + + + + +Bookmarks +Header Window + + + + + + + + + + + + + + +Bookmarks +C/C++ Window + + + + + + + + + + + + + + +Bookmarks +Browser Window + + + + + + + + + + + + + + + +The <guimenu>Help</guimenu> menu + + + + + +Help +Back + + + + + + + + + + + + + + +Help +Forward + + + + + + + + + + + + + + + +ShiftF2 + +Help +Search Marked Text + + + + + + + + + + + + + + +Help +Search for Help on... + + + + + + + + + + + + + + + +ShiftF1 + +Help +What's This + + + + + + + + + + + + + + + +F1 + +Help +The User Manual to KDevelop + + + + + + + + + + + + + + +Help +The KDevelop Programming Handbook + + + + + + + + + + + + + + +Help +KDE Application Tutorials + + + + + + + + + + + + + + +Help +The KDE Library Reference Guide + + + + + + + + + + + + + + +Help +C/C++ Reference + + + + + + + + + + + + + + +Help +Project API-Doc + + + + + + + + + + + + + + +Help +Project User-Manual + + + + + + + + + + + + + + +Help +Tip of the Day + + + + + + + + + + + + + + +Help +KDevelop Homepage + + + + + + + + + + + + + + +Help +Report Bug... + + + + + + + + + + + + + + +Help +About KDevelop + + + + + + + + + + + + + + +Help +About KDE + + + + + + + + + + + + + + + +The &kdevelop; toolbar + + + + + + +Keyboard Shortcuts + + +This section covers the predefined and standard values for the keyboard commands +available in the &kdevelop; &IDE;. These can be customised with the menu entry + +Configure Keybindings. + + + +Shortcuts for Text Processing + + +Keybindings: Cursor Movements + + + + +One letter to the left + + +Left Arrow + + + + +One letter to the right + + +Right Arrow + + + + +One word to the left + + +&Ctrl;Left Arrow + + + + +One word to the right + + +&Ctrl;Right Arrow + + + + +One line upwards + + +Up Arrow + + + + +One line downwards + + +Down Arrow + + + + +To the beginning of the line + + +Home + + + + +To the end of the line + + +End + + + + +One page up + + +Page Up + + + + +One page down + + +Page Down + + + + +To the beginning of the current file + + +&Ctrl;Page Up + + + + +To the end of the current file + + +&Ctrl;Page Down + + + + +
+ + +Keybindings: Text Selections + + + + +One letter to the left + + +ShiftLeft Arrow + + + + + +One letter to the right + + +ShiftRight Arrow + + + + + +One word to the left + + +&Ctrl; ShiftLeft +Arrow + + + + + +One word to the right + + +&Ctrl; ShiftRight +Arrow + + + + + +One line upwards + + +&Ctrl; Up Arrow + + + + +One line downwards + + +&Ctrl; Down Arrow + + + + +To the beginning of the current line + + +&Ctrl; Home + + + + +To the end of the current line + + +&Ctrl; End + + + + +One page up + + +Shift Page Up + + + + + +One page down + + +Shift Page Down + + + + + +To the beginning of the current file + + +&Ctrl; Shift Page Up + + + + + +To the end of the current file + + +&Ctrl; Shift Page +Down + + + + + +
+ + +Keybindings: Inserting and Copying Text, Tabulators + + + + +Enable/Disable insert mode + + +Insert + + + + +Copy selection to the clipboard + + +&Ctrl; C, +&Ctrl; Insert + + + + +Insert text from the clipboard + + +&Ctrl; V, +Shift +Insert + + + + +Delete current line + + +&Ctrl; K + + + + +Insert line after current line + + +EndEnter + + + + +Insert Line before current line + + +HomeEnter + + + + +Undo editing step + + +&Ctrl; Z + + + + +Redo editing step + + +&Ctrl; Y + + + + +Tabulator + + +Tab + + + + +
+ + +Keybindings: Deleting Text + + + + +Delete letter left of cursor position + + +Backspace + + + + +Delete letter right of cursor position + + +Delete + + + + +Delete selected text + + +Select text then Backspace or Delete + + + + +
+ + +Keybindings: Searching within the editor + + + + +open Goto Line... dialog + + +&Ctrl; G + + + + +Open Find Text dialog + + +&Ctrl; F + + +Repeat last search + + +F3 + + + + +Open Search and Replace dialog + + +&Ctrl; R + + + + +Open Search in Files dialog (grep) + + +&Ctrl; &Alt; F + + + + +Locate next error + + +F4 + + + + +Locate previous error + + +ShiftF4 + + + + +
+ + +Keybindings: Searching within the Documentation Browser + + + + +Search for the selected editor text in the documentation + + +F2 + + + + +Search for the selected browser text in the documentation + + +F2 + + + + +Display next search hit on the same page + + +F3 + + + + +Search for the selected browser text within the project + + +ShiftF2 + + + + +
+ + +Keybindings: Browser Shortcuts + + + + +Previous page + + +&Alt; Left Arrow + + + + +Next page + + +&Alt; Right Arrow + + + + +
+ + +Keybindings: Managing Bookmarks + + + + +Add bookmark + + +&Ctrl; &Alt; A + + + + +Clear bookmark list + + +&Ctrl; &Alt; C + + + + +
+ +
+ + +Shortcuts for Toolbar Symbols + + +Keybindings: toolbar symbols + + + + +Open File + + +&Ctrl;O + + + + +Save File + + +&Ctrl; S + + + + +Print File + + +&Ctrl; P + + + + +Undo + + +&Ctrl; Z + + + + +Redo + + +&Ctrl; Y + + + + +Cut + + +&Ctrl; X + + + + +Copy + + +&Ctrl; C + + + + +Paste + + +&Ctrl; V + + + + +Compile File + + +&Ctrl; F8 + + + + +Make + + +F8 + + + + +Execute + + +F9 + + + + +Execute with arguments + + +&Alt; F9 + + + + +Back + + +&Alt; Left Arrow (if the +browser is open) + + + + +Forward + + +&Alt; Right Arrow (if the +browser is open) + + + + +Search for selected text + + +F2 + + + + +
+ +
+ + +Window Management + + +To switch to a certain window, press &Alt; The +unerlined letter in the window title. For example, to +switch to the Tools window would be &Alt; T + + + + + +Shortcuts to compilation processes + + +Keybindings: Compilation processes + + + +Compile current source file + + +&Ctrl; F8 + + + + +Build current project target + + +F8 + + + + +Execute the target after the build process + + +&Ctrl; F9 + + + + +Execute the target with arguments + + +&Alt; F9 + + + + +Stop the current process + + +F10 + + + + +
+ +
+ +
+ + +Status bar help + + +The status bar of &kdevelop; offers much information about the current activity, +as well as status messages, and short descriptions of commands. + + + + + +The statusbar contains the following items: + + + + + +A general message field, on the far left. This is used for help messages, and +displaying the current activity. + + + + +The progressbar indicates the progress for actions that require a comparatively +long time to complete. Examples are saving large files, and the scan-progress +of the Classes Browser. The progressbar only appears while +these processes are in executed. + + + + +An insert/overwrite indicator is next. Here you can see which mode the editor +is currently in, with INS indicating insert mode, and +OVR indicating overwrite mode. You can toggle between the +two with the Insert key on your keyboard. + + + + +There is a line counter, displaying the current position of the cursor. + + + + +Finally, there is a column counter, also displaying the current position of the +cursor. + + + + + +The statusbar also informs you about the actions of menu entries. If you open a +menu and place the mouse over a menu entry, without clicking, the function that +menu item represents is displayed in the statusbar. Pressing the &LMB; mouse +button on a toolbar icon, without releasing it, will display similar information +for that icon. You can prevent execution of the selected menu or toolbar item by +moving the mouse away from it, without releasing the button. + + + +For actions that are currently in execution, &kdevelop; displays the description +of the action. This applies to processes running in the background, such as +saving of files, as well as to dialogs. If a process such as a make invocation +exits, the statusbar display will change back to the Read +state. + + + +When using the documentation browser, the statusbar displays link +URLs while the cursor is positioned over a link. This gives +you an easy way to find out if a link is to a local file (installed on your +computer) or a remote file that will require a network connection. + + + +The caption of the &kdevelop; &IDE; shows you the currently active open +filename. This would be an HTML file if you are in the +documentation browser, or a source file name if you are in the editing windows. +The project name is also displayed, so you can always see what you are working +on, useful if you have several projects to work on. + + + + +
+ + +The Help System + + +Much of &kdevelop;'s strength is contained in the help system. It is also an +example of how to extend your own &kde; applicatoin with a complete set of help +functionality, and is, in part, already realized in the template applications. + + + +A &kde;/&Qt; application framework as generated by the KAppWizard already +contains the basic functionality for statusbar help and documentation, and this +needs only be extended by the programmer. + + + +This section aims to introduce the usage of the general help within the &IDE;, +as well as showing you the usage of the Help browser. + + + +The <guiicon>What's This?</guiicon> icon and Quickhelp + + +Looking at &kdevelop;'s top toolbar, you will see a What's +this? button on the right. Selecting the button will turn your cursor +into a pointer with a question mark, just as you see on the icon. You can now +select any visible part of the &kdevelop; user interface and click on it. This +will result in a small popup help window, giving you a short description of the +function this item provides. + + + +Some of the user interface items that have help function available are the main +view, the tree views, and the toolbar buttons. + + + +When you click, or press a key, the popup disappears, and the cursor returns to +normal. + + + +If you just rest the normal cursor over a toolbar button, you will find that +another form of help is available. The icon will be raised, and after a short +time, you will see a tool-tip window, describing the function the button +represents. This disappears as soon as you move the mouse away from the button. + + + +For user interaction dialogs, Quick Help provides you +help windows with a short description of the selected item. These are accessed +with a &RMB; click to the item. A context menu pops up, which includes the item +Quick Help, and selecting this will pop up a help +window. + + +All these functions are very helpful for learning your way around the &kdevelop; +interface. Note also that most dialogs offer a Help +button, which will show you detailed context-help for that dialog's options, as +provided by the online manual. + + + + + +Configuring the <acronym>HTML</acronym> help browser + + +The browser included in &kdevelop; is completely HTML based, +so you have the normal browser options available to you, such as setting color +preferences and font sizes. You can set all these preferences in the +Documentation Browser entry of the +Options menu. + + + +Font preferences + + +The first option for the font display is the size. You may choose between +small, medium and +Large The +default is small. + + + +You may also specify here a monospaced font (one in which all characters take up +the same amount of space across the screen, whether they are an i +or a w, ⪚ courier), for displaying code samples in the +documentation, and a proportional font for the rest of the text, (one in which +an i takes up less space on the screen than a w +⪚ helvetica). + + + + + +Color preferences + + +The color preferences dialog allows you to configure the colors for ordinary +text, the page background, links, and links you have already followed. + + + +The colored buttons on the right display the current settings. Selecting a +button will open a Select Color dialog, where you can +choose the color. The center contains a preview of the color selected. + + + +You can also specify if the browser should underline links, to make them easier +to distinguish from surrounding text, or leave them bare, to make them less +distracting. + + + +Finally, you can choose if you wish to always use the colors you have set here, +or if the page can set it's own colors. + + + +Apply will execute your changes, but leave the dialog +open so you can make further customizations. OK will +execute the changes and close the dialog. Cancel closes +the dialog without executing any changes you have made. + + + + + + + +Using the Documentation Browser + + +The documentation browser allows quick and easy access to all the manuals and +documentation provided with &kdevelop;. Also available is the documentation +generated for the &kde; libraries, and that you have created for your own +project. + + + +The Documentation tree in the tree view pane lets you customize a special +Others folder that contains any documentation you have +added separately. + + + + + +Requirements + + +To make use of all features of the documentation browser, you should have +KDoc and Glimpse +installed. + + + +KDoc is used to generate all kinds of +online class documentation for the &kde; libraries. This is normally done +during the setup process, but KDoc can also be +invoked with the KDevelop Setup. +KDoc is also used for generation of +API (Application Programming Interface) Documentation for +your project's classes. + + + +For generating API documentation, +KDoc is called with the menu entry +ProjectMake API +Doc. This will process all current header files of +the project, and additionally cross-reference to the &Qt; and &kde; libraries, +if they are available in the documentation browser. + + + +For the generation of project handbooks you have written, you should have + + + + + + +To extend and change your project's online documentation, you should edit the +documentation source file by selecting it from the Files +viewer. After saving your changes, call Make User +Manual from the Project menu. If there are +syntax errors detected, these will be displayed in the output window allowing +you to find the error line directly. + + + +The program Glimpse is used to create a personal +search index for the documentation you have installed. The index is generally +created during the installation process, but can also be built with the &kdevelop; Setup dialog. For a +description of the search functions provided, see . + + + + + +Provided Documentation + + + + + + + +The &kdevelop; &IDE; comes with two sets of online documentation. These can be +accessed either via the Help menu, or through the +documentation tree in the tree view, where they are in the &kdevelop; folder. + + + +The first book provided is this online handbook, containing all the information +you need regarding installation, configuration and functionality. + + + + + + +The second book is the &kdevelop; programming +handbook. The programming handbook covers most questions related to the +creation and extension of projects within &kdevelop;. Through tutorials, the +user gets an introduction to the rich facilities that applications created with +the &Qt; or the &kde; libraries have to offer. There are guidelines towards +&kde; compliance issues, as covered also on the web site http://developer.kde.org/. + + + +The &Qt; and &kde; libraries documentation folder allows direct access to the +HTML documentation from your local copy of the &Qt; library. +The path to the library documentation is usually automatically detected by the +&kdevelop; installation process, but can also be set later from within the +program. + + + +Any available documentation for the &kde; libraries is listed in order of the +library name. The &kde; library documentation is usually generated during the +&kdevelop; installation, and requires that KDoc is +installed before you install &kdevelop;. If this is not the case, you can +generate (or update) the library documentation at any time, from within +&kdevelop;. + + + +The documentation tree also contains an Other folder, which +is intended to contain any personal documentation you have installed, as +described in the section Adding +Documentation to the Help Browser. + + + +Finally, the documentation tree gives you access to the API +and user manuals for your current project. + + + + + +Adding Documentation to the Help Browser +<anchor id="extending-the-project-documentation"> + + + +To customize your documentation browser, open the tree view and select the + tab. You will see +an opened tree containing four folders. The Others folder +is initially empty. + + + +&RMB; click over this folder, and in the resulting context menu, choose +Add Entry. The Add Entry dialog +will open. + + + +You must enter two values here in this dialog. The first is the name that you +want this new entry to be displayed with in the documentation tree. The second +is a normal filename entry line, where you can enter the path and filename of +the initial starting page of the documentation you are adding. You can also use +the browse button to choose the start page graphically. Note that at this time +only HTML documentation is supported. + + + +Choose OK to add the entry and close the dialog. Your +new documentation is available immediately. + + + +You might at this time choose to rebuild the search index, to include your newly +added documentation. This is described in the next section. + + + + + +Using the Search index + + +&kdevelop; includes a set of functions that help you search for information with +HTML documentation. To use these features, your system needs +to have the program glimpse installed. +glimpse is a free database generator, which creates +the search index, and executes searches within the documentation. + + + +To set up the search index, see the section on &kdevelop; setup. The index is also +generated automatically during the installation procedure. + + + +The search functions are accessible several ways: + + + + + +In the editor, select the text you want help on, or place the cursor in the word +you want to look for. Then press the &RMB; mouse button, and select the menu +entry look up: expression from the context menu. + + + + +In the editor, select the text you want help on, or place the cursor in the word +you want to lok for. Choose Search marked text from +the Help menu, or press the F2 key. + + + + +In the documentation browser, select the text you want to look up, and follow +the same procedures as for the editor. + + + + +If you want to search for a specific keyword, select Search for +Help on... in the Help menu, or select the +Search for Help on... icon in the toolbar. A dialog will +open where you can enter the word you want to search for. + + + + + +The documentation browser also offers support for +grep, to search for a selection within your current +project. For example, you've opened the documentation page for the +KTMainWindow and you want to know where in your code +KTMainWindow appears. Mark +KTMainWindow and either &RMB; click and select +Grep: KTMainWindow or press +ShiftF2. + + + +The Search in Files dialog opens, and displays the result +of your grep search directly. You can choose from +there a result line to jump directly to the corresponding source code. + + + + + + + +Working in the Editor + + +Possibly the most important part of the &IDE; is the editor. You'll be using it +for: + + + + + +Creating, opening, and saving your source an dproject files. + + + + +Editing source and project files. + + + + +Writing your documentation. + + + + +Printing your project files. + + + + + +In general, the editor itself isn't so much different than any other editor. It +will be even more familiar to many of you, as it's an embedded version of +&kwrite;, &kde;'s Advanced Editor. + + + +In addition, &kdevelop; contains a new printing system, especially adapted for +working with sources. You can choose between this and the standard printing +program you normally use, from within &kdevelop;'s configuration dialog. + + + +This section gives you some more information about handling project files, and +an overview of the editor's functionality. + + + +Managing Project Files + + +The following sections describe how to create, save, open, and close your +project files. Please note we are not handling translation files, pixmaps, or +&Qt; designer .ui files. These are +recognized automatically and the appropriate editor will be launched to edit +these. + + + +To give you easy access to your files, &kdevelop; contains two easy to handle +tree views, similar to a file manager. These are aware if you have selected a +file, and will open it in the editor window. + + + +Within the &IDE; you can open as many text files as you like. All open files +are listed in the Window menu, so you can switch between them +easily. The currently active file name is displayed in the &kdevelop; title +bar. + + + + + +Creating and Saving Files +<anchor id="new-file-dialog"> + + + +To create a new file choose New from the +File menu. This opens the New File +dialog, where you can specify the file name and type. Here you also set the +destination directory, and if the file is to be added to the current project or +not. Finally, you can choose to use your header template for the project, in +case you are adding a new source file without generating a new clas in the class +generator. + + + +After the file has been created, you can edit the new file as usual. If you +want to switch files, you do this with the Window menu, or by +choosing another file in either the Files or +Groups tree views. + + + +For saving any chagnes, &kdevelop; offers a variety of options. The normal way +is to simply save the file using the Save or +Save as entries in the File menu, +or by choosing the corresponding icons on the toolbar. To save all changed +files at once, you can choose Save all from the +File menu. + + + +When working on a project, it is very annoying if something critical happens +while you have a lot of unsaved changes in your files. Sometimes you will be +kicking yourself for not having saved the changes. If something untoward +happens, &kdevelop; is there to help you out by offering +Autosaving. This is enabled by default, and will automatically +save your files in intervals of 5 minutes. To select a different interval, or +to disable it, see where the setup options are +described. + + + +Additionally, &kdevelop; automatically takes care of saving all changes if you +open another project, or if you exit &kdevelop;. You will be asked if you want +to save changes, and you can also specify which files you want to save and which +files you want to drop the changes to. + + + +When invoking any build processes, your files are saved automatically, so you +don't have to wonder why your application isn't running as expected due to +unsaved changes to the sources. The only exception is the Compile +File command, which only saves the currently active source file. + + + + + +Opening and Closing Files + + +To open an existing source file, you again have several options. One way, as +you might expect from any editor, is to select Open +from the File menu. You will be presented with a standard +Open File dialog, which allows you to choose the file you +wish to edit. + + + +Another, probably more frequently used way is to select the file from the +Groups or Files tabs in the tree view +pane. The advantage of these file trees is they provide a quick visual access +to your project's files, especially the Groups tab, which +displays only files that are included in your project, but sorts them by their +type, and collected into folders. + + + +To close files, select the file to close from the Window +menu, which loads that file into the editor. Then select +Close from the File menu. If your +file has been chnaged, you will be asked to save it. When closing a project, +all currently opened files will be checked for changes and you will be asked if +you want to save them. + + + + + +Navigating Within Files + + +The following sections give you a general guideline how to locate certain +positions within your files. + + + +How to find a certain line in a file + + +Select Goto Line in the view menu or press +&Ctrl; G. The +Goto Line dialog will appear. + + + + +Insert the line number you want to jump to. + + + + +Press OK. + + + + + +How to set a bookmark + + +Set the cursor to the line you wish to access by referring to a bookmark. + + + + +Select Set Bookmark from the +Bookmarks menu. + + + + +From the resulting context menu, select the bookmark number you wish to assign +to this position. + + + + +Another way to set bookmarks is to select Add +Bookmark from the Bookmarks menu. This sets a +bookmark to the current line, and appends it to the bookmark list. the +Documentation browser also offers the ability to set a bookmark at the current +page, through the context menu entry Add Bookmark. + + + +The bookmarks are set for each editing window separately. Note that the +bookmarks aren't connected to a file, and are not saved with the file. To +delete the bookmarks for the currently active file, choose Delete +Bookmarks from the Bookmarks menu. This +deletes all bookmarks for the active file. + + + +How to go to a bookmarked line + + +Select the Bookmarks menu and open the submenu containing the +bookmarks for the window you want to view. + + + + +Select the bookmarked line. + + + + + +Selecting a bookmark for the browser window will open the browser and load that +page. + + + + + +Edit Window Settings + + + + +The editor inside &kdevelop; can be configured for special editing needs with a +global effect on all editor windows. You can set color modes, highlighting +colors, and automatic text settings such as tab-width and selection modes. + + + +The following sections describe how to set these options in the configuration +dialogs provided by the Options menu. + + + +General Settings + + +The editor's general settings can be configured with the +Editor in the Options menu. +Select the appropriate values, and press OK when you are +happy with your configuration. + + + +Edit Settings + + + +Auto Indent: + + +Sets the editor to place the cursor below the first literal upon +creation of a new line. + + + + + +Backspace Indent: + + + +Sets the cursor below the first literal of the line above, when a backspace is +pressed. + + + + + +Word Wrap + + +Words are moved to the next line after the column set in +Wrap words at:. + + + + + +Replace Tabs: + + +Tabs in the current text are replaced with tabs of the current +Tab Width: value. + + + + + +Remove Trailing Spaces: + + +Removes trailing spaces at the ends of lines. + + + + + +Wrap Cursor: + + +Sets the cursor to the end of the previous line, when backspace enters +the beginning of a line. + + + + + +Auto Brackets: + + +Creates a closing bracket in front of the cursor when a bracket (any +kind) is opened. + + + + + + + + + +Select Settings + + + +Persistent Selections: + + +Selections made stay marked after setting the cursor to a different +place. + + + + + +Multiple Selections: + + +Allows multiple independent selections within the text. + + + + + +Vertical Selections: + + +Allow vertical (column wise) selection of text. + + + + + +Delete on Input + + +Deletes a selection when typing into the selection. + + + + + +Toggle Old: + + +Allows only one selection. A selection is deselected when +another selection is made. + + + + + +Wrap Words At: + + +Sets the maximum columns a line can have. The word that +contains a letter that reaches over this value is automatically moved to the +next line. + + + + + + + + + + + +Color Settings + + +To change the editors general appearance, you can define a set of colors that +the editor uses by selecting Editor Colors in the +Options menu. + + + +You can configure colors for: + + + + +Background + + +The editor background. + + + + + +Text Background: + + +The background of displayed text. + + + + + +Selected: + + +The color of selected text. + + + + + +Found: + + +The color of text found by any kind of search, including +Search, Repeat Search and +Replace. + + + + + +Selected + Found: + + +The color of text that is both selected and found. + + + + + + + + +Syntax Highlighting Settings + + +The syntax highlighting for &kdevelop;'s editor can be configured in two +dialogs. + + + +First you can set default colors for syntax highlighting in the +Editor Defaults entry in the +Options menu. There you can set colors and fonts as well as +the font size for different elements in the source code, for example, keywords. +Select the Default item and set the options as you require. + + + +The second configuration dialog is accessed by Syntax +Highlighting in the Options dialog. This +allows you to set the file filters for the programming language, ⪚ *.cpp, *.h for +C++. + + + +Next, select the item you wish to configure. If you want to use the default +values as you set in the Editor Defaults dialog, select the +default checkboxes in the Item Style +and Item Font sections. This reads the default settings +for the selected item. + + + +After pressing OK, your new values will be enabled and +used in the editor. + + + + + + + +Searching and Replacing + + +Single File Search + + +Select Search in the Edit +menu. The Search dialog will open. + + + + +Specify the expression to search for. The drop down menu offers the ability to +select from previous search expressions. + + + + +Select any additional options such as Whole Words only + + + + +Press OK + + + + + +To repeate the search for an expression, press F3 + + + +Searching in multiple files with grep + + +The search function only searches over a single file that is currently visible. +Often you will want to search for the same expression across your whole +project. + + + +&kdevelop; contains a grep dialog which +lets you search over all the files you specify, either by setting a directory to +search in, or by setting a &MIME; type. + + + +Specifying the exact directory and &MIME; type will therefore reduce the time +that &kdevelop; needs to read your files and display the results. To start a +search over several files, select Search in Files... +from the Edit menu. The search dialog opens and lets you +enter: + + + + + +The expression to search for. + + + + +The template to be used for the search + + + + +The &MIME; type of files to search in. + + + + +The directory to search from. + + + + +If the search is to be recursive over all the included subdirectories. + + + + + + +By default the grep dialog is set to start at your project +directory and works recursively over implementation and header files. + + + +You can extend your search with the following options: + + + +Expression: +Meaning: + +. +Match any character + + +^ +Match the beginning of any line + + +$ +Match the end of a line + + +< +Match the beginning of a word + + +> +Match the end of a word + + + + +For a repeating search, you can also use these operators: + + + +Expression: +Meaning: + +? +The preceding item matches less than once + + +* +The preceding item is matched zero or more times + + ++ +The preceding item is matched once or more times + + +{ n } +The preceding item is matched exactly n times + + +{ n,} +The preceding item matches n or more times + + +{,n } +The preceding item matches less than n times + + +{n,m} +The preceding item matches at least n times but +less than m times. + + + + +Back references to bracketed sub-expressions are also available with the +notation \n. + + + +After specifying your search, press Search. The results +are then displayed in the result window. + + + +To jump to a file and line number, select the result line and press +Enter or double click the result. The editor will +automatically open the corresponding file and place the cursor on the +appropriate line. This allows a complete specification for any search action to +give exact results. + + + +&kdevelop; also offers some more specialized functionality to use +grep with the editor and browser. Select the +expression you want to search for in either of the windows, and press ShiftF2 or select +grep: expression from the +&RMB; mouse click context menu. This will ask grep to +search for the selection in your project files, and will show the results +immediately. + + + +Switching the results window after searching for the selected expression works as described above. + + + +From within the editor window, it is sufficient to place the cursor over a word, and start searching. The word under the cursor will be the search pattern. + + + + + +Searching Within Documentation + + +While working on a project, you often need to have information about the +parameters of member functions you want to use. Most often you remember the +name of the function that matches your needs, but the parameters are much harder +to keep in mind. + + + +&kdevelop; contains a search functionality that combines searching for +expressions that occur in your files with the documentation browser. + + + +To make use of this search functionality, you should have set up the +documentation browser correctly, and created the search database. + + + +To invoke a search through the documentation, do the following: + + + + + +Place your cursor at the word you want to search for, or select an expression. + + + + +Select Search marked text from the +Help menu, or press the &RMB; mouse button to open the +context menu, and select Look Up: "expression" + + + + +After the search result page is displayed in the documentation browser, select +the page that looks like it contains the information you are looking for. + + + + +The selected documentation page will be displayed and your search results are +marked. + + + + +To display the next result on the same page, press F3 + + + + + +This allows you to easily find the information you need. To use the results, +the documentation browser allows selecting a result and copying it to the +clipboard. Then you can return to the file you're editing and select +Paste from the Edit menu. + + + +For a full description of how to use the Documentation, see . + + + + + +Replacing Text + + +To replace an expression, select Search and Replace +from the Edit menu. + + + +The Search and Replace dialog allows you to specify an +expression to be replaced, as well as a replacement expression. + + + +When you have filled in the expressions, press OK. + + + +The first expression which is found will be highlighted, so you can see where +the expression is, and it's context. You can specify in the resulting dialog if +the expression should be replaced or not. + + + +When the search reaches the end of the document, you will be asked if you want +to start searching again from the beginning of the document. If you're +finished, press Cancel + + + + + + + +Printing + + +As &kdevelop; is designed to give developers the very best access to files and +information, to reduce development cycles, it also contains a new printing +utility which makes use of enscript, a common +printing program available for &UNIX; systems. + + + +You can also print directly using lpr (the line printer +device). + + + +As the use of enscript offers you the most options, +it's use is highly recommended. enscript ships with +many distributions, but isn't always installed by default. + + + +Before printing anything, you should take a look at the configuration dialog, +and prepare the output according to your needs. The following section describes +how to configure &kdevelop; for printing files. + + + +Configuring the Printer + + +The printing program can be configured by selecting +Print from the File menu. + + + +In the printing dialog, select the program you wish to use from the drop down +menu in the upper left corner. + + + +Press the Options button on the right to open the +configuration dialog for the print program you selected. + + + +Another way to access this dialog is to choose Printer +Configuration... from the Options. + + + +The options available to Enscript are described in +the next section. + + + +The <application>Enscript</application> Configuration Options + + +Header + + + +Fancy Header: + + +Adds a fancy header + + + + + +Header Text: + + +Enables adding a header text: + + + +text: + +Sets the text contents + + + +position: + +Sets the text position to the left, center or right + + + + + + + +Login: + + +Add the User ID to the header: + + + + +Login: + + +Enables adding the UserID + + + + +position: + + +Sets the position for the UserID + + + + + + + + +Filename: + + +Add the filename to the header: + + + +Size of filename: + + +Add the filename as either full (with the full path) or short (as a filename +only). + + + + +Position: + + +Sets the position for the filename. + + + + + + + + +Hostname + + +Add the hostname to the header: + + + +hostname: + + +Enables adding the hostname. + + + + +Size of hostname + + +Sets the size of the hostname + + + + +Position: + + +Sets the position for the hostname. + + + + + + + + + + + +Date and Time + + + +Current Date + + +Include the current date. + + + +Current date + + +Enables adding the current date. + + + + +Position: + + +Sets the position for the date entry + + + + +Format + + +Sets the date format + + + + + + + + +Modification Date + + +Include the last modification date. + + + +Modification date: + + +Enables adding the last modification date. + + + + +Position: + + +Sets the position for the date entry + + + + +Format + + +Sets the date format + + + + + + + + +Current Time: + + +Include the current time: + + + +Current Time: + + +Include the current time: + + + +Modification time + + +Enables adding the modification time. + + + + +AM/PM: + + +Use AM/PM or 24 hour format. + + + + +Position + + +Sets the position for the time entry. + + + + +Format: + + +Sets the time format + + + + + + + + + + + + + + +Layout + + + +Numbering & Border: + + + + +Numbering lines: + + +Adds line numbers to the document while printing. + + + + + +Borders + + +Adds a border to the page when printing. + + + + + +Numbering Pages: + + +Numbers pages for printing. + + + + + +Align Files: + + +Appends files one after the other, for page numbering purposes. + + + + + +Lines Per Page: + + +The maximum value for lines per page. + + + + + + + + +Format and TAB + + + + +Set TAB Size: + + +Sets the TAB size for printing. + + + + + +Font for Header: + + +Sets the font used for the header text. + + + + + +Font for the Body: + + +Sets the font for the body text (the file contents). + + + + + + + + +Text: + + + + +Cut lines: + + +Cut off the lines if they are too long. If unchecked, the lines are wrapped +instead. + + + + + +Replace non-printing characters: + + +Replaces characters that the printing charset doesn't support with spaces. + + + + + + + + +Other Options: + + + + +Table of Contents: + + +Adds a table of contents page that contains information about printed files, +page numbers, &etc;. + + + + + +Highlight Bars: + + + + +Highlight Bars: + + +Highlights rows for printing. + + + + + +Cycle of Change: + + +Sets the number of rows to change highlight style. + + + + + + + + +Wrapped Lines: + + + +Mark Wrapped Lines + + +Lines that are broken get marked for printing. + + + + +Value for wrapped lines: + + +The preset value for the new line the line is broken into. + + + + + + + + + + + + + + + +Underlay + + + +Text + + +Sets the text to underlay + + + + + +Position: + + +Sets the position of underlay text. + + + + + +Font + + +Sets the font used for the underlay. + + + + + +Angle: + + +Sets the angle for the underlay text. + + + + + +Gray scaling + + +Sets the grayscaling for the underlay text. + + + + + +Style + + +Sets the underlay text to be printed as outlined or filled. + + + + + + + + + + + + + +The Printing Dialog + + +Direct Printing Options + + + +Program + + +Sets the printing program to be used for printing. You can choose between +enscript or lpr. + + + + + +Printer: + + +Sets the printer to be used for printing. + + + + + +Output Location: + + +If you print to a file, choose the location to save the file. + + + + + +Orientation + + +Sets the orientation for printing, either landscape or portrait. + + + + + +Copy: + + +Sets the number of copies to be printed of each page. + + + + + +Paper Size: + + +Sets the paper size to be used. + + + + + +Output Format: + + +When using enscript, you can choose between +&PostScript; and HTML printing. + + + + + +Default Printsettings: + + +Sets the default settings to be used for printing. + + + + +Out Printing: + + + + +Page Printing: + + +Sets one or two pages per sheet of paper. + + + + + +Pages: + + +Select all, odd, or even (only available with +enscript. + + + + + +Pretty-Print: + + + + +Pretty-Print: + + +Enables pretty print mode for enscript. + + + + + +Color: + + +Use color printing. + + + + + +Pretty Print Mode: + + +Sets the printing mode, dependent on your file format. + + + + + + + + + + + + + + + + + + + + + + +File Selection + + +The file selection dialog is accessed with the Files on +the printing dialog. + + + +The file selection allows you to specify which files to +print through the following criteria: + + + + +current + + +The currently active file in the editor. + + + + + +All in project: + + +All files in the project currently open. + + + + + +Self chosen files: + + +Choose the files individually from a file selector. + + + + + +All CPP files: + + +Prints out all the source files of the project. + + + + + +All Headers: + + +Prints out all the header files of the project. + + + + + +Changed files: + + +Specify files that were changed during a particular time span: + + + +Between + + +Specifies files changed after: + + + +Date + + +The date the files were changed. + + + + +Time: + + +The time the files were changed. + + + + + + + +And: + + +Specifies files changed before: + + + +Date: + + +The date the files were changed. + + + + +Time: + + +The Time the files were changed. + + + + + + + + + + +Self Chosen Files: + + +Becomes active if Self chosen files is selected above. + + + +Add + + +Press this to add a selected file for printing to the list on the left. + + + + +Delete: + + +Delete a selected file from the printing list. + + + + +Clear: + + +Clear the printing list. + + + + + + + + + + + +Print Preview + + +The print preview is available for you to check the appearance of the output. + + + +&kdevelop; uses the program ghostview or &kghostview; +if available. + + + +When the preview button is pressed in either printing dialog, you will be +presented with a preview of template output, showing you the effect of the +currently set options. + + + + + + + + + + + +Projects + + +&kdevelop; creates a project file with a .kdevprj extension. This file contains all your +project information, so be careful not to delete it. + + + +The project file is stored in the project's base directory, and loads the +project into the &IDE; when opened. The project file contains all the +information for your project, including file properties, install paths, +distribution status, and compiler options (). + + + +Project Types + + +Programs + + +With KAppwizard, you can create a new application project, with one of the +following kinds of framework already set up for you: + + + + + +A single document interface (SDI) application + + +This is a &kde; application, and includes a menubar, a toolbar, and a +statusbar. It contains basic control resource management, to allow you to +extend the frame application into a unique &kde; application. + + + +From a programming point of view, it is based on three application specific +classes, built on the MVC or +Model-View-Controller model. + + + + + +A &kde; based application frame. + + +This application type offers the most flexibility for those wanting to develop +their program from scratch, but can also be used as a basis for developing +wizard applications or modules. + + + + + +A &Qt; based program framework. + + +This option is for programmers who want to use only the &Qt; library as the +GUI interface. As &Qt; only programming is fully supported, +you should have no problems creating a fully functional application without the +use of the &kde; libraries. + + + + + +A C++ program framework. + + +This application type is intended for those who want to create a terminal based +C++ program. + + +Just remove the Hello Wold line in the +main() function, and construct your classes in the usual +&kdevelop; way. + + + + + +A C program framework. + + +Again aimed at developing terminal based applications, but this time using only +the C compiler. + + + + + +A Gnome application + + +Allows you to use &kdevelop; to create a GTK+ based application. + + + + + + +Additionally, &kdevelop; enables you to work with already existing projects. + + + +You can set options yourself for the configure and +Makefiles, but as far as the execution and build process is +concerned, currently you are limited to the same structure as the other base +classes. + + + +Create a custom project with the application wizard, and add your files to the +project to allow scanning with the Classes browser. + + + +To ensure the build process succeeds, your custom project must have all the +sources in a subdirectory which is named the same as your project, in lower +case. The execution of the binary is also restricted to this lowercase project +name. + + + + +Note that in this case, &kdevelop; does not write any information into +Makefiles or configuration files. You will be responsible +for project behaviour and build settings by yourself. + + + + + + +Libraries + + +A general project type to create libraries is not yet available. This doesn't +mean that building libraries is impossible with &kdevelop;, so here are some +helpful guidelines. + + + + + +Whenever your project subdirectory gets another subdirectory containing source +files, &kdevelop; will build a static library of these. + + +This means that static libraries are already supported in an automatic fashion, +in order to sort project source files. + + + +Be aware that a static library later becomes part of the binary, and is not +installed on your target systems. + + + + + +To create a shared library, &kdevelop; offers an easy way to convert a static +library as already mentioned, into a shared library: + + +Turning a static library into a shared library: + + +Open the Files tree on the left of &kdevelop;'s main +window, and browse to the subdirectory containing your sources. + + + + +Click with the &RMB; mouse button over the subdirectory. You will see a context +menu with the following options: + + + + +Update Makefile.am + + + + +Change to static lib + + + + +Change to shared lib + + + + + + +Select Change to shared lib to convert the default +generated static library into a shared one. + + + + +If you later decide to reverse your change, repeat these steps, but choose +Change to static lib. + + + + + + + + + +Multiple Targets + + +For some projects, the facilities of &kdevelop; are not yet sufficient on their +own. + + + +These include projects with multiple targets, such as packages of several +applications. Since commands such as Execute require +that only one target is built by the developer, these types of projects are only +partially supported. + + + +To use &kdevelop; for such a project at this stage, you will need to write your +own entries to the Makefile.ams, and you will need to +create your own directories for additional libraries or binaries to be built. + + + +Nevertheless, a build process always invokes the make +program independently of what the targets actually are. In other words, you can +still use these functions, with the restriction that the build process is +invoked from within the main project subdirectory. + + + +There is another way to ease working with this type of project, and still have +access to the binary itself. + + + +You can create empty projects, and later move their subdirectories, and the +project files they contain, into a top level subdirectory that contains all the +sources. Then you can load each target independently, through it's own project +file. This allows you to execute and debug the target normally. + + + +Multiple binaries or libraries withint he main project subdirectory are +possible, so long as you stick to the rules described in the section +Project Hacking, and the following +guidelines for editing the main project's Makefile.am. + + + +All these modifications should be outside the marked &kdevelop; write area. + + + + + +Add your target to the bin_PROGRAMS line if it is an +executable. + + + + +Add your library declaration line, if it is a shared library. + + + + +Add the same declarations as for the original project binary build: + + + + +newtargetnewtarget_METASOURCES + + + + +newtarget_LD_FLAGS + + + + +DISTCLEANFILES + + + + +Copy the messages: entry for the original binary, and replace +target_SOURCES with +newtarget_SOURCES, and +target.pot with +newtarget.pot. + + + + + + +Add your sources the same way the &kdevelop; write area contains them, but +outside the write area, and adapting for your binary or library. + + + + +For installing static libraries, create the library with &kdevelop;'s auto +creation in subdirectories. Then modify the Makefile.am +as required, but outside the &kdevelop; write area. + + + + + + + + + +New Projects + + +The &kdevelop; application wizard allows the creation of different types of +projects, and constructs a framework for each. All the projects use the +GNU standard development tools, as described previously in +the requirements section of this manual. + + + +For &kde; applications, there are six different frameworks. + + + + +Mini + + +Creates a &kde; application, with an empty main widget. + + + + + +Normal + + +Creates a &kde; application with session management, menubar, toolbar, +statusbar, and support for a document-view codeframe model. + + + + + +Normal-OpenGL + + +Creates a &kde; application with session management, menubar, toolbar, +statusbar, and support for a document-view codeframe model. +OpenGL support with Mesa3D is added. + + + + + +&kde; 2 Normal + + +Creates a &kde; 2 application, with session management, menubar, toolbar, +statusbar, and support for a document-view codeframe model. + + + + + + +&kde; 2 Mini + + +Creates a &kde; 2 application with an empty main widget. + + + + + +&kde; 2 MDI + + +Creates a &kde; 2 MDI (Multiple Document Interface) +applicatoin with menubar, toolbar, statusbar, and support for a document-view +codeframe model. + + + + + + +If you don't wish to depend on the &kde; libraries being available on your end +users machinse, you can choose to make a &Qt; only project, from the following +types: + + + + +Normal + + +Creates a &Qt; application with a main window, containing a menubar, toolbar, +and statusbar, and support for a generic document-view model. + + + + + +&Qt; 2.x SDI + + +Creates a &Qt; 2.x application with a main window containing a menubar, toolbar, +and statusbar, and including support for a single document-view interface +(SDI) model. + + + + + +&Qt; 2.x MDI + + +Creates a &Qt; 2.x application with a main window containing a menubar, toolbar +and a statusbar, with support for a multiple document interface +(MDI) model. + + + + + +QextMDI + + +Creates an MDI framework based on the +QextMDI library, and &Qt; 2.x. This allows you to switch +between two modes, Toplevel and Childframe. This requires the +QextMDI library, see http://www.geocities.com/gigafalk/qextmdi.htm +page for more details. + + + + + + +Note that &Qt; 2 normal and &Qt; 2 MDI templates make use of +the &kde; automake system. This will make it easier to later switch your +existing &Qt; application into a &kde; application, as the automatic checks +needed for &kde; libraries and headers can be added to the project very easily. + + + +See the section on Project Hacking for +more information. + + + +The &Qt; 2 normal and &Qt 2 MDI templates also allow you to +internationalize the GUI of your application, through the +integration of &Qt; Linguist. The handling of adding +languages by &kdevelop; is identical to the &kde; projects. + + + +The application wizard also offers a template for creating +GNOME compliant applications with the GTK+ C library. This +will give you a ready to run main window, containing a menubar, toolbar and +statusbar. + + + +The two C and C++ application types offere a framework for creating command line +applications. + + + +Finally, you can create an entirely empty projcct. This is useful for working +with existing projects. + + + +The wizard will ask for your project name, the version, and the location to +build the project directory. Your name and email address are requested to +insert them in the header and cpp templates, which will put them in the top of +your source files, as well as the entries in the *.lsm file. + + + +To add revision control to your projects, see the chapter on CVS inegration.. + + + + + +Opening and Closing of Projects + + +&kdevelop; is by default configured to load whichever file was open when you +last closed the &IDE;. + + + +This behavior allows you to get off to a quick start in most cases, but you may +want to change that so that you start the &IDE; without any project loaded. You +can change this with the Load last project: option in the +&kdevelop; Setup dialog. + + + +To open another project, select Open from the +Project menu, or press the Open Project +button on the toolbar. + + + +If you have another project open already, it will be closed. If you have +unsaved changes in any of the open files, you will be offered a chance to save +some or all of those changes, and to select which changes to save. + + + +You will be presented with an Open Project dialog, where +you can browse to the directory containing the project you wish to load. +&kdevelop; project files have the *.kdevprj +extension, and are displayed with a project icon, to make them easy to find. + + + +Select the project file and press Open. + + + +When loading a project, the Classes browser will scan all the files and build an +initial classtree, so you can start working on your project by using the +Classes browser directly. + + + +Another way to open a project is to simply select the project file in +&konqueror;, the &kde; file manager. This will start &kdevelop;, and load the +selected project file. + + + +You could also open a project on the command line, entering +kdevelop +projectname.kdevprj. + + + +When closing &kdevelop;, your project file will be saved automatically, and the +&IDE; detects if you have changed any project files. You will be prompted to +save any changes before exiting. + + + + + +Editing a Project + + +After you have created a new project with the KAppWizard, your task is to extend +the project by editing the newly created sources, adding classes, pixmaps, +pictures, and whatever else your project needs. + + + +Editing a project allows you to change the default project after it's +generation, using the menus and dialogs according to your needs. + + + +The next section Adding +and Removing Files and Classes, describes how you can add existing files +and classes, as well as creating new files. + + + +Later we decribe how to set project options that affect the end-user. This +includes things such as additional files you may want installed, documentation, +and pixmaps. This is covered in the section Setting Project File Options. + + + +Another task in project maintenance is internationalization, which is described +in the the section Adding +Translations. + + +The section +Extending the Project Documentation covers some issues that will help you +create a good set of online help documentation, enabling the user to help +himself in times of trouble, and to make the best use of your product. + + + +Finally, the section Project Hacking +describes how you can work around the &kdevelop; project management, if you have +a special requirement. + + + + + +Adding and Removing Files and Classes + + +Adding a new file is most used in cases where you separate your class +implementation into several file into several files. + + + +To do this, you need to create a new file wich will contain the part of the +class implementation you want to move. You can create a new file by choosing +New from the File menu, which will +open the New File dialog. + + + +This dialog enables you to specify the file type, the name, and the location. +When you enter the filename, &kdevelop; automatically enters the extension, +based on the file type you have chosen, but you can override this if you use a +different naming scheme. + + + +&kdevelop; will also automatically include the header template for source files, +so that you don't have to copy your contact and copyright information into each +file yourself. + + + +You can also select in this dialog if the new file is to be part of the project +or not. + + + + +Note that you cannot set the installation destination here, this must be +configured later by setting the file preferences. + + + + +After the file has been created, the project file will be updated, as will the +corresponding Makefile.ams. + + + +To add a complete class to your project, you can construct a new class with the +Class Generator, which is invoked from New Class in +the Project menu. + + + +If you have an existing projec,t and you want to add classes that will be reused +throughout your project, select Add File(s) to +Project... from the Project menu. Choose +Add existing files, which will open a dialog that +allows you to specify which files to add to the project, and the destination +directory. + + + + +Note that the files will be copied into the specified directory, and added to +the project. + + + + +You should call Make after adding sources, so +&kdevelop; will include your newly added files into the build process. + + + +If you are adding files that will be installed on the end user's computer, for +example icons, you should update the file properties for the newly added file, +and specify the installation path. The section Setting Project File Options +covers this process in detail. + + + +To add a file to the project that is already in the project directory, go to the +Files view, where all project included files are displayed +with a red ! over their file icon. Select the file you want +to add to the project (it will currently have an ordinary file icon), and press +the &RMB; mouse button to display the context menu. Choose +Add. + + + +Files can also be removed from your project. This might happen because you +don't want to use the pre-generated files from the KAppWizard, or because you no +longer need files that were previously part of the project. + + + +When removing a file, you have the choice between removing it from the project, +but leaving the file intact, or deleting it entirely. + + + +To remove a file from the project, select the file in the +Groups tree, or the Files tree, and +press the &RMB; mouse button. Select Remove from the +context menu. + + + +To delete a file, follow the same procedure, but choose Delete +physically from the menu. + + + + + +Setting Project File Options + + +The file properties dialog can be accessed via the Project +menu, or within the Groups viewer with a &RMB; mouse click. + + + +The file properties dialog shows the project files in groups, as they are sorted +in the Groups viewer, and displays properties such as file +size, file type, and if the file is included in the project. + + + +The dialog also shows the installation path, if the file is to be installed on +the end user's computer with the make + command. It is important for things like +documentation and images to specify the destination location at installation +time. For standard &kde; locations, you should look in your +Makefile.am, where the location macros are specified. + + + + + +Adding Translations + + + + + + +Internationalization of &kde; 2.x Applications + + +As &kde; alllows configuring the desktop, and the behavior of applications, +users also have the option to choose the language that applications use, both +for documentation and for the interface. + + + +For documentation files, this appears to be a fairly trivial task. Add a +subdirectory named for the desired language code, ⪚ de for German, to the +docs directory of your project, and copy +the english documentation into that directory. Then generate the documentation, +and set all the project options for the installation directories. Simply +translating the source SGML or XML file to +the desired language, regenerate the documentation and you are done. + + + +For the application interface, things are a little more difficult. + + + +First, you must enclose all strings that will be visible to the user, ⪚ in +dialogs, or error messages, with the i18n() macro. + + + +This macro is a replacement for the function +klocale->translate() from the +KLocale class, and the macro is much easier to use. + + + +As this macro is declared in the kapp.h +include file, you should add #include <kapp.h> +to the source file, or the class declaration file of the class that makes use of +the macro. + + + +It should also be noted that although i18n() is a macro, +and it might be tempting to just use the original function, this won't work. +This is because the strings that are set up for translation have to be read out +of the sources, and stored in the application's translation file, +YourApp.pot, in the /po subdirectory. + + + +This task is handled by a program xgettext. + +As xgettext depends on the +i18n() macro, the original function won't do the job. + + + +For the translations themselves, you first must create the message file +containing all the string sthat are used in your sources, and contained in +i18n() macros. This is most easily done by choosing +Make messages and merge from the +Build menu. + + + +Next, select the languages that your application is to support, by choosing +Add Translation File from the +Project menu. In the resulting language selection dialog, +choose the language(s) you want to add, and press OK. + + + +An ASCII file will be build, containing the entries for each +string, with a filename and the line where the original string is placed. You +will see lines with msgid, containing the +string to translate, followed by msgstr. The +msgstr line is mostly empty, except for those strings which already have +translations provided in the &kde; libraries. The rest of them need to be +filled in with the appropriate translations for your target languages. + + + +You could think about writing the translations by hand, in the editor. That +would be a very tedious job, so the &kde; SDK offers a program called + +KTranslator which helps +you reuse strings and translations from other applications, to aid in your +translation. + + + +To access KTranslator, the easiest way is selecting a +language.po file in the +/po directory, in either the +Files pane or the Groups pane. + + + +KTranslator will open, with the file, to help you +with your translation. Note that you have to set up +KTranslator's properties separately, to include the +authors name and contact address, and the language, as well as the destination +files. KTranslator by default only opens your +translation file. + + + +For all translation files, make uses the program +msgfmt to format your message files to use with the +binary. You don't have to worry about either this task, or specifying +destinations for the installed translation files, as &kdevelop; takes care of +these automatically. + + + +For more information about internationalization support, see http://i18n.kde.org/, where you will find a +lot of people doing translations to their own languages, and you will find +contacts who may be able to help you with this job. + + + + + +Internationalizatoin of &kde; 2.x Applications + + +&kde; 2.x projects have a slightly different method of handling po files and keeping them up to date than &kde; 1 +did. + + + +The first thing to watch for when generating a &kde; 2.x project is that +make +is called from the base directory of your project, rather than in the project's +subdirectory as was the case in &kde; 1.x applications. + + + +While merging strings is done by calling make + in the po +directory in &kde; 1.x, this is now handled automatically when you run +make +. Obviously this will result in an +error message while initially creating your project with the application wizard. + + + +Another issue to watch out is that &kdevelop; installs a script called +extractrc into your $KDEDIR/bin directory. This script is from the +&kde; CVS module kdesdk/scripts, and is +called automatically within make +, if your +Makefile.am contains the line +messages:rc.cpp instead of messages:. +This is the default for the &kde; 2 normal and &kde; 2 MDI +project types. The &kde; 2 mini uses only messages: + + + +What this script does is extract the strings out of your XML +resource file (yourappui.rc) to +build the application's &GUI;, and then stores these strings in a temporary file +called rc.cpp. This way, the strings in the +XML file are processed as usual when building the pot file, and are included in your +internationalization efforts. + + + +If you intend to build a &kde; 2.x application based on the &kde; 2 mini +template, it is best to change the Makefile.am in this +section. The necessary changes are already noted there in comments. + + + + + +Internationalization of &Qt; 2.x Applications + + +Since &Qt; now includes the tr() method, together with the +QTranslator, you can easily internationalize your &Qt; +only project as well. + + + +&kdevelop; supports this by using the tools that come with &Qt;'s +Linguist: lupdate and +lrelease. + + + +The strings inside tr() functions are read into the +language-dependent *.ts files by +lupdate, and lrelease then +covnerts the translated XML file to a file named *.qm, which stores the translations in a binary form. + + + + + + + +Extending the Project Documentation + + + + + + + + + + +Project Hacking + + +When working with a project, you should never edit the project file by hand. +Doing so would prevent &kdevelop; from loading your project correctly under +certain circumstances, and any changes you make won't be reflected in the +appropriate Makefiles. + + + +To change any settings for your project, ⪚ adding files or setting file +properties, you should use the appropriate menu entries. For experts that are +not comfortable with certain options for things, or need additional project +configuration, you can edit the Makefile.am macros, but you +should add any custom entries after the section separated with the text +KDevelop write area. + + + +As the GNU tools use the commands at the end of the macro +files, you can overwrite &kdevelop;'s settings in this manner. Bear in mind +that this will prevent the use of &kdevelop; for any changes to the affected +project settings. + + + +Project Type Definitions + + +&kdevelop;'s project files store the project information in the style of +human-readable &kde; config files, so you should have no trouble finding the +sections you're looking for. + + + +To convert an existing project to another project type can dramatically shorten +the time it takes to port an existing &kde; 1.x project over to &kde; 2.x (or +from &Qt; 1.x to 2.x.) + + + +Change the following sections according to the project type: + + + + +[General] +author=Ralf Nolden +project_type=normal_kde2 + + + + +Valid project types are: + + + + +normal_empty + + +Custom project + + + + + +normal_kde + + +KDE 1.x Normal (SDI project. + + + + + +mini_kde + + +KDE 1.x Mini project + + + + + +normalogl_kde + + +KDE 1.x OpenGL project. + + + + + +normal_kde2 + + +KDE 2.x Normal (SDI) project. + + + + + +mini_kde2 + + +KDE 2.x Mini project. + + + + + +mdi_kde2 + + +KDE 2.x MDI project. + + + + + +normal_qt + + +&Qt; 1.44 project (SDI). + + + + + +normal_qt2 + + +&Qt; 2.2.x project (SDI). + + + + + +mdi_qt2 + + +&Qt; 2.x project (MDI, uses +QWorkspace.) + + + + + +mdi_qextmdi + + +&Qt; 2.x project (uses the QextMDI library.) + + + + + + + + + +Converting <literal role="extension">*.kdevdlg</literal> files + + +&kdevelop; comes with a converter script, kdevdlg2ui, to +turn already constructed dialogs from previous versions of &kdevelop; into +.ui files. + + + +You should be aware that you may have to re-inherit from the class gernerated by +&Qt;'s uic, and add your implementation from the former +&kdevelop; there. The converter script is mainly used to convert the dialog's +user interface, rather than your methods, signals, and slots. Re-editing the +converted .ui file may be necessary, as well +as inheriting from it's generated class. + + + +Existing &kde; 1.x applications can't make use of .ui files, so you must therefore generate a new +framework for your &kde; 2.x/&Qt; 2.x application, and move over your +implementation, .kdevprj and +Makefile.am's of your subdirectories. + + + + + + + +Compiler and Linker Flags for Projects + + +Each new project contains all the required options for the compiler and linker, +as well as general settings. + + + +By default, youre project is set to use debugging, witht he +flag, and warnings are set to the standard . This ensures +you can debug your applications, and detect constructions that may cause program +errors. + + + +For some applications, you would need additional compiler and linker flags, +especally if you're using libraries that are not currently included by the +linker. You need to update the project by configuring the correct settings with +the Project Options dialog. + + + +See Build Settings for more information +how and where to set compiler options, warnings, and linker options. + + + + + +External Projects + + +Existing automake/autoconf compatible +projects (those which make use of Makefile.am's to store +their information) can be used together with &kdevelop; by creating a &kdevelop; +project file with the kimport script. + + + +After the project file has been built, you should edit it with your favorite +editor, setting the project type according to your needs. See Project Hacking for more details about +available project types. + + + +Be careful to deselect Modify Makefiles in the +Project Options after you load your project for the first +time. + + + + + + + + + +Build Settings + + +The Project Options dialog, accessed from the +Project menu, allows you to specify all the necessary +parameters for your project. These will be used by the +Makefile.am's and the configure.in +script, to set things like version number changes and compiler warnings, and +other compilation preferences. + + + +After changing the project options, you should invoke make +clean or rebuild all to compile your +project with the new options. + + + +Debugging is only available if the project options are set to create debugging +information. The amount can be set with the debug level, +between and . + + + +If you add functions that belong to a library that is not included in the linker +flags, your program will not link correctly, so remember to keep track of your +library linking and add those required libraries to your options. + + + +For a release build of your application, or for distributing the source code +package, you should change the options to the following standard settings: + + + + + +Disable debugging. + + + + +Enable optimization, and set optimization level to . + + + + +Set the compiler warnings to . + + + + +For each new release, increment the version number and update the +project.lsm file with the new version and any changed +requirements. + + + + + +<guilabel>General Options</guilabel> + + +The first page of the Project Options dialog sets the +general options for your project. These are the Project +name: and Version:, the handbook +SGML file containing your user documentation, and some +specific author information. The short description field is for additional +information that you want to include, such as the program's purpose. + + + + + + + +<guilabel>Compiler Options</guilabel> + + +The Target section contains options relating to your target +system, that is, the system on which you will be building this project. + + + + +Target Machine + + +Choose the target from the drop down list. The choices currently available are +your machine or i386v. The latter is +an option if you have configured your compiler as a cross compiler for an +Intel 386 compatible machine running System V. This is +the equivalent of setting the on the compiler. The default +(your machine) is normally the right choice. + + + + + +optimize + + +Select this check box if you want to compile a binary optimized for your target +system, as selected in the drop down list above. + + + + + +Optimization level + + +Choose the level of optimization to be used when building. Choose from a range +between 0 (no optimization) and 3 +(highly optimized). This is the equivalent of setting the +compiler flag. For a release version of your applicaiton, enable optimization, +and set the level to 2. + + + + + + +The Debugging section has options relating to the level of +debugging information to be compiled into your project's binary. + + + + +generate debugging information + + +Enable or disable debugging here. By default, debugging is enabled, but you +should turn it off before creating binary or source code packages for +distribution. This sets the flag for the compiler. + + + + + +Debug level + + +Select the level of debugging information that should be compiled into your +binary. Choose from a range between 0 (no or little +debugging information) and 3 (lots of debugging +information.) Remember that debugging information slows down the execution of +your program, and increases the size of the binary. + + + + + +generate extra information for gprof + + +This sets the flag, with the result that the compiler will +include extra information, which the gprof program can use to +generate graphs of your program's functions. + + + + + +Store temporary intermediate files + + +This sets the flag, so the normally temporary files +created by the preprocessor and the assembler will instead be saved. With this +enabled, compiling will produce three files: the .o file that you would normally expect as the output +of the compiler, an .i file as produced by +the preprocessor, and an .s file as the +output of the assembler. + + + + + + + +You can enter any additional compiler options directly in the field labelled +additional options:. These are stored in the +CXXFLAGS environment variable in the +Makefiles, so make sets these flags before the build +process begins, and resets them again when complete. + + + +For a complete description of all available compiler flags, you should see your +compiler documentation. For gcc and egcs +this can be done with man +. man + will show you information about the C++ script +that is used to lead the compiler. + + + + + +Compiler Warnings + + +This section gives a description of the compiler warnings that can be set on +page 3 of the Project Options dialog. The explanations are +based on the man page for gcc, egcs +version 1.1.1. the warnings themselves are diagnostic messages that indicate a +construction that may cause errors. + + + + + + + +Standard options combined. + + + + + + + + +Compile with . This option sets options not included in + which are very specific. Please read +gcc info for more information. + + + + + + + + +Warn about certain contsructs that behave differently in traditional and +ANSI C. + + + + + + + + +Warn if an undefined identifier is evaluated in an +#if directive. + + + + + + + + +Warn whenever a local variable shadows another local variable. + + + + + + + +Warn whenever two distinct identifiers match in the first +LEN characters. This may help you prepare a program +to compile with certain obsolte, brain-damaged compilers. + + + + + + + + +Warn whenever an object larger than LEN bytes is +defined. + + + + + + + + +Warn about anything that depends on the size of a function type +or of void. GNU C assigns these types a size of +1, for convenience in calculations with void +* pointers and pointers to functions. + + + + + + + + +Warn when a function call is cast to a non matching type. For example, warn if +int malloc() is cast to anything *. + + + + + + + + +Warn whenever a pointer is cast so as to remove a type qualifier from the target +type. For example, warn if a const char * is cast to an +ordinary char *. + + + + + + + + +Warn whenever a pointer is cast such tha the required alignment of the target is +increased. For example, warn if a char * is cast to an int +* on machines where integers can only be accessed at two- or four-byte +boundaries. + + + + + + + + +Give string constants the const char[length] so that copying the +address of one into a non-const char * pointer will get a warning. +These warnings will help you find at compile time code that can try to write +into a string constant, but only if you have been vary careful about using +const in declarations and prototypes. Otherwise, it will +just be a nuisance. This is why we did not make request +these warnings. + + + + + + + + +Warn if a prototype causes a type conversion that is different from what would +happen to the same argument in the absence of a prototype. this includes +conversions of fixed point to floating, and vice versa, and conversions changing +the width or signedness of a fixed point argument, except when the same as the +default promotion. + + + + + + + + +Warn when a comparison between signed and unsigned values could produce an +incorrect result when the signed value is converted to unsigned. + + + + + + + + +Warn if any functions that return structures or unions are defined or called. +In languages where you can return an array, this also elicits a warning. + + + + + + + + +Warn if a global function is defined without a previous prototype declaration. +This warning is issued even if the definition itself provides a prototype. The +aim is to detect global functions that fail to be declared in header files. + + + + + + + + +Warn if a global function is defined without a previous declaration. do so even +if the definition itself provides a prototype. Use this option to detect global +functions that are not declared in header files. + + + + + + + + +Warn if anything is declared more than once in the same scope, even in cases +where multiple declarations is valid and changes nothing. + + + + + + + + +Warn if an extern declaration is encountered within a function. + + + + + + + + +Warn if a function can not be inlined, and either it was declared as inline, or +else the option was given. + + + + + + + + +Warn if an old style (C style) cast is used within a program. + + + + + + + + +(C++ only.) In a derived class, the definitions of virtual funcitons must match +the type signature of a virtual function declared in the base class. Use this +option to request warnings when a derived class declares a function that may be +an erroneous attempt to define a virtual function. In other words, warn when a +function with the same name as a virtual function in the base claass, but with a +type signature that doesn't match any virtual functions from the base class. + + + + + + + + +Warn when g++'s synthesis behaviour does not match that of +cfront. + + + + + +make all Warnings into errors + + +This sets the flag, telling the compiler to treat +warnings as errors, and abort compilation after any warning. + + + + + + + +For a release of your project, it is recommended to enable + + + + + + +<guilabel>Linker Options</guilabel> + + +The for your current project can be set on the +fourth page of the project options dialog. You should enable those libraries +that your application uses, in order to link them to your binary with the +linker. For example, if your application uses the class +KFileDialog, which is part of the KFile library, you +should enable kfile. + + +For classes or or functions that are not listed as checkboxes, use the +additional libraries: field. + + + +Other options available to you are: + + + + +remove all symbol table and relocation information from the +executable: + + +This means that all redundant information will be removed from the object files +and the binary. Debugging will not be possible. For as long as you are still +working on your application, and not being prepared for a release, you should +leave this option disabled. + + + + + +prevent using shared libraries + + +This option disables the use of shared libraries on systems that support this. +On systems using no shared libraries, this option will have no effect. + + + + + +additional flags + + +Here you can enter any further flags for the linker. This will result in +make setting the LDFLAGS environment variable +for the duration of the compile. The available options can be taken from the +man page for ld, or from your compiler documentation. + + + + + + +<guilabel>Libraries</guilabel> + + +The libraries section contains checkboxes for the most commonly used libraries +for &Qt;/&kde; applications. You should enable those libraries that your +application uses, or the linker will complain about unresolved symbol tables. + + + +The libraries that are available as checkboxes are: + + + + +X11 + + +The X11 library. Recommended for all &X; programs. + + + + + +Xext + + +The X11 extension library. Almost all &X; programs also depend on this. + + + + + +qt + + +The &Qt; library. Obviously recommended for &Qt; and &kde; applications. + + + + + +kdecore + + +The &kde; core library, contains the classes for &kde; application frameworks. + + + + + +kdeui + + +The &kde; user interface library, containing &kde; specific widgets. + + + + + +khtmlw + + +The KHTML widget library. + + + + + +kfm + + +The KFM library containing classes for KFM functions + + + + + +kfile + + +The KFile library, containing file dialogs &etc; + + + + + +kspell + + +The KSpell library. Contains an interface for programs to use +ispell for spell checking. + + + + + +kab + + +The &kab; library, necessary for access to the address book, as well as +providing addressbook widgets. + + + + + + + +You can enter any additional libraries that your application needs in the +additional libraries field. Set the libraries with the +, for example, . + + + + + + + +<guilabel>Make Options</guilabel> + + +As GNU make supports some useful options, +the Project Options dialog contains a page called +Make Options where they can be enabled or disabled. + + + +The available settings are: + + + + +Print debug information + + +Print out all information about the project files, and what +make determines for rebuilding them. + + + + + +Continue after errors + + +Tries to continue with the compilation after an error occurred, ⪚ if a file +couldn't be compiled due to an error, make will carry on with +the next file. + + + + + +Print the data base + + +Prints out the make database for the current process, which +contains the changes from the last build run. + + + + + +Environment variables + + +Give the current environment variables a higher priroity than the ones currently +set in the Makefiles. + + + + + +No built-in rules + + +Doesn't use built-in rules for make + + + + + +Touch files + + +Don't run the compiler on changed files, instead only touch them. This sets +them as already processed by make. + + + + + +Ignore all errors + + +Ignores all errors that occur. + + + + + +Silent operation + + +Doesn't print out any information about the build process. + + + + + +Print working directory + + +Prints the current directory during the make process. + + + + + +job number + + +Sets the amount of parallel processes for make. For a single +CPU system, we recommend setting this to one or two. + + + + + +set modified + + +Sets the selected file modified. Choose the file by clicking the folder button +on the right, and browsing to it. Setting a file modified means that the file +will be processed by make and compiled if it is a source +file. + + + + + +additional options + + +Set additional options for make. The options available to +you can be found in your local man page for GNU +make. + + + + + +Rebuild behavior on run + + +Sets the actions taken when you choose run. There +are three options available: + + + + +Always Rebuild + + +Always rebuild the entire application, without checking for modified files. + + + + + +Warning on modification + + +Warn if the sources have been modified, and ask if the project should be +rebuilt. + + + + + +Only on modification + + +Check if sources have been changed, and rebuild if so. + + + + + + + +The default is to alays rebuild. + + + + + + + + + + + + +The <guilabel>Classes</guilabel> Browser + +The &kdevelop; Classes viewer is one of the most useful and +important tools the &IDE; provides the developer for managing his sources. + + + +When a project is loaded, a class parser reads all the project sources for +functions, classes &etc;, then displays the results in the +Classes tree view. + + + +This chapter shows you how to use the Classes viewer, and +how to let the provided functionality eas your workload. + + + +The <guilabel>Classes</guilabel> Viewer + + + +Classes and their methods can be further accessed with the browser toolbar. +There, the &LMB; mouse button selects the class, and the &RMB; lets you choose +the methods of the selected class. + + + +When you select a method, the class browser will automatically take you to the +implementation file, and set the cursor at the method. + + + + +Finally, the class-assistant button on the right of the method combo will bring +you to the declaration of the method with a click. Another click will take you +to the definition. If you click and hold the mouse button on the Class +assistant icon, a menu will appear, which offers additional functionality. +These functions are also available in the Classes viwer +context menus, and include: + + + + +Goto Declaration: + + +Browse to the declaration of the method. + + + + + +Goto Definition: + + +Browse to the definition of the method. + + + + + +Goto Class Declaration: + + +Browse to the class declaration. + + + + + +New Class: + + +Opens the New Class dialog to construct a new class. + + + + + +Add Method: + + +Adds a method to the selected class. + + + + + +Add Attribute + + +Adds an attribute to the selected class. + + + + + +Show graphical classview: + + +Opens the graqphical inheritance tree. + + + + + + +Available Objects + + +C++ code can be seen as a collection of objects. Classes, their members, global +functions and more, can all be seen as objects. The +Classes tree displays these objects logically, and orders +them according to their character, so they are easy to locate in the tree. + + + +The tree contains both a Classes folder and a +Globals folder. + + + +The Classes folder generally contains the project's +classes. If your project contains subdirectories to manage your sourcefiles, +these are also displayed by their original folder name, and contain all classes +that are stored in the files located within them. + + + +When popping up a class, the tree displays the class contents by separating +methods and attributes. As these can have attributes as well, such as +public, private, and +protected, these are indicated by modified icons. + + + +You will see that a class displayed in the browser contains all the objects that +are present in the class declaration. + + + +Classes are very common things when programming in C++, and they contain most of +the code. However, applications also contain objects that have a +global appearance to the program. These include structs and +functions. Notably, the main() appears in every +application, and you will need to modify it in one way or another. + + + +To access these objects, the viewer provides the Globals +folder, containing the subfolders for the following object types: + + + + + +Structs + + + + +Functions + + + + +Variables + + + + + +As the icons displaying these items are similar to those used in the class +viewer, their meaning should be easy to determine and remember for the +programmer. + + + +Finally, it can be stated that the class viewer displays your project +graphically as objects reated to their appearance in the code. In the next +section, you will learn how to use the class viewer and it's tools. + + + + + +Browsing Object Declarations and Implementations + + +The Classes viewer's major strength is in providing fast +and easy access to the code, by keeping it's view of the code independent of +that code's location within the source files. + + + +Selections made here with a mouse click will result in the following actions: + + + + +On a class name: + + +Switches you to the class declaration. + + + + + +On a class method: + + +Switches you to the method implementation. + + + + + +On a class attribute: + + +Switches to the attributes declaration within the class declaration. + + + + + +On a struct: + + +Switches to the struct's declaration. + + + + + +On a global function: + + +Switches to the function's implementation. + + + + + + + +This provides you with direct access to code objects. As an example, you might +need to change a method's header, with the result that you will have to change +it's declaration in the class, as well as in the implementation. The class +viewer supports this by providing &RMB; mouse button context menu's over items. +On a method or function, this means you can select where to go next: + + + + +Go to definition: + + +Switch to the implementation. This is the default behavior, which you can also +access with a &LMB; click. + + + + + +Go to declaration: + + +Switch to the declaration of the method or function. + + + + + + + +In this way, the browser offers you access to every location you might need to +go while coding your C++ application. + + + +The next section will give you a description of the other tools that the +Classes pane offers. You will find them very useful when +working with large projects, as they enhance the object-oriented method of +working with C++ programming. + + + + + + + +The Class Tools + + +The class tools are dialogs that make it even easier for the developer to access +information about his project's classes. + + + +The Classes viewer displays all the objects, but sometimes +you want to get more information about a class without having to look inside the +code. The class tool dialogs are for displaying specific class attributes. + + + +The classtool is invoked from the context menu over a class in the +Classes viewer tree. Choose +Properties and the dialog will appear. + + + + + +The properties dialog defaults to the class that you had selected when it was +invoked, but you can select another class from the combo box on the right. + + + +The initial tab is the Class Viewer. The toolbar contains +several icons, which change the view of the class as follows: + + + + + Show Parents + + +Display the parents of the selected class, in other words the class it +inherits. This is especially useful for multiple inheritance, as well as to see +why a class behaves one way or another. For example, for dialogs, your parent +class could be QWidget or QDialog. + + + + + + Show children + + +Displays the children classes that inherit the currently selected class. + + + + + + Show Clients + + +Shows classes that make use of the selected class through an attribute in their +class declaration. + + + + + + Show Suppliers + + +Show the suppliers that give attributes to the selected class. + + + + + + Show Attributes + + +Show the attributes of the class. + + + + + + Show methods + + +Show the methods of the selected class. + + + + + + +You can further modify the display of attributes, methods, and virtual methods +with the combo box on the far right. The default is to show +all, but you can filter by public, +protected or private. + + + + + +Managing Classes + + + + + + + + + + + + +Using &Qt; <application>Designer</application> in Your Project + + +The &Qt; Designer allows the easy construction of the +widgets and dialogs uses, through all graphical means. You see the appearance +of your dialog as it will be presented to the user, while you are building it. + + + +Using the Designer is usually the first step you +would take after creating a new project with the KAppWizard. You need to create +your main view, the user interaction dialogs, and after finishing the graphical +work, the code generation. This way, your project will contain all the usually +considered difficult parts that normally take a long time to +implement. + + + +After that, the rest of your work is implementing the +functionality in the generated code. + + + +This chapter deals with how to use the Designer to +create your project widgets, as well as what to do in case you see your widgets +need alterations or addiciotns later in the development process. + + + +You can switch to the Designer either by selecting +Dialog Editor from the View menu, +or with the corresponding toolbar icon. When you are finished, you can simply +close the Designer window. + + + +The following sections give you an overview of the +Designer's interface, show you how to create a new +dialog, and how to set up the properties of the child widgets that your dialog +contains. + + + +For more in depth information, you might want to have a look at the Designer tutorial from +Trolltech, which can also be found offline in &kdevelop;'s documentation +browser. + + + + + + +Create a New Dialog With the Designer + + +If you want to create a new dialog, simply add a new +Designer file. + + + +On the menu bar choose File +New. From the choices offered, choose +Qt Designer file, and enter a name (for our examples, enter +ktestdlg.ui.) + + + +The .ui file is where the +Designer stores the information about the dialog. + + + +The Designer will open, and ask you which kind of +template you want to use for your class. Let's choose +QDialog for our example. + + + +The Designer presents you with an empty form, called +Form1, and the Property Editor. + + + +Your first step should be to give a human-readable name to our dialog, so we +click on the form's background, and choose a suitable name for it by simply +changing the name property from Form1 +to something more suitable. For consistency reasons, you might want to call the +class the same as the file it is stored in (or vice versa, depending on your +point of view,) so we call it KTestDlg. + + + +In order to become familiar with the Designer, we +recommend reading the +Designer handbook. It provides vital information about the usage of the +Designer user interface, and the concepts behind +signal and slot handling inside the Designer. + + + +Excursion: how <literal role="extension">.ui</literal> Files Become +Source + + +The Designer stores the dialog class in an +XML format. So, how do we get a C++ file out of the +Designer file? + + + +The answer is easily!. &kdevelop; takes care of this! It adds +the .ui to the Makefile +which will then ensure that a header and source file are created at compile +time. So, you can just use it, without really having to take care of the +source. + + + +Because the files are recreated on every compile, you cannot implement your +functionality directly into the generated files, but must derive from it. +Continue reading the next section to learn how this works. + + + + + + + +Using Your New Dialog Inside &kdevelop; + + +To continue with our example, we create a class inside &kdevelop; that will +derive from the class created in Designer. + + + +From the Project menu, choose New +Class. Enter KTest as classname. Since we +will derive from KTestDlg, enter +KTestDlg in Baseclass. + + + +As QDialog (the baseclass for our dialog) derives from +QWidget, you will also need to enable the +generate a QWidget child class checkbox. + + + +This is all the information &kdevelop; requires. If you now choose +OK, &kdevelop; will create two new files, +ktest.cpp and ktest.h, which hold the +KTest class that derives from +KTestDlg. Note that the #include +statement for ktestdlg.h has already been inserted by +&kdevelop;. Now you can simply implement all your functions and use the class in +your project. + + + +Dialing With Virtual Slots + + +If you want to reimplement virtual slots, use the &RMB; mouse click context menu +in the Classes browser, and choose Add +slot, or use the Class Wizard button situated +on the right of the method combobox in &kdevelop;'s toolbar. <-- Screenshot of +icon --> + + + + +Do not call the underlying virtual function (⪚ +KTestDlg::slotCancel()) in the overriding method! + + + + + + + + + + +The Internal Debugger + + +The default setup for &kdevelop; is to use the internal debugger. You can +change this in the Options menu, by selecting the +KDevelop Setup menu item, and then the +Debugger tab. + + + +Click on Use external debugger if you wish to use a +different debugger, and enter the name of the debugger to use. See your +debuggers documentation on how to run it. + + + +Selecting the internal debugger enables an additional set of options you can +choose from: + + + + +Display static members + + +Displaying static members makes gdb slower in producing data +within &kde; and &Qt;. It may change the signature of the data +which QString and friends rely on. However, if you need +to debug into these values, then check this option. + + + + + +Display mangled names + + +When displaying the disassembled code, you can select to see the methods mangled +names. However, non-mangled names are easier to read. + + + + + +Try setting breakpoints on lib load + + +This will try to set pending breakpoints on loading a library. If +gdb hasn't seen a library that will be loaded via +dlopen, then it will refuse to set a breakpoint in that code. +We can get gdb to stop on a library load, and then try to set +the pending breakpoints. See Shared Libraries and +Breakpoints for more details and a gotcha relating to this +behavior. If you are not using dlopen to open libs, leave +this option off. + + + + + +Enable floating toolbar + + +This will allow you to use the floating toolbar to control the debugger, in +addition to the normal menu and buttons. The toolbar is most useful for +debugging GUI applications. For details, see The Floating Toolbar. + + + + + +Enable separate terminal for application i/o + + +This allows you to enter terminal input when your application contains terminal +input code (⪚ cin, fgets, &etc;) If +you use terminal input in your app, then tick this option, otherwise leave it off. + + + +This option is most useful if you use it in combination with the The Floating Toolbar, because this way, the +terminal window won't be hidden behind the &kdevelop; window when you control +the debugger. + + + + + + + + +Using the Internal Debugger + + +If you choose the internal debugger, four tabs are addded to your tree and +output view windows, and you will notice some changes to the +Debug menu and the toolbar. + + + +On the tree view window + + +Watch + + +A tree view of the local variables at the point in the program you are currently +stopped at. You can also see local variables in the function that called this +function. The watch window allows you to see the value of global variables, or +you may want to see only one local variable rather than the variable in a large +list of local variables. + + + + + + +On the output view window + +breakpoint + + +A list of breakpoints set, and their current state. + + + + + +framestack + + +The calling stack. + + + + + +disassemble + + +A machine instruction view of the code showing the current instruction to be +executed. + + + + + + +On the panel + +Two new icons and two new combo boxes to control the debugger functions +will become available as soon as you start the debugger. + + + + + +In the <guimenu>Debug</guimenu> menu + +When you start debugging, ten items to control the debugger will be enabled. + + + + + +Run + + +Continue the program from the current point. + + + + + +Run to cursor + + +Execute the program up to the current cursor position. + + + + + +Step over + +Execute one line of code, stopping on the next line of code in the same +source file. This will run any functions encountered until the above condition +is met. + + + + + +Step over i(nstruction + + +Execute one machine instruction as above. + + + + + +Step in + + +Execute exactly one line of source code. This means you will step +into the current function, if necessary. + + + + + +Step in i(nstruction) + + +Execute one machine instruction as above. + + + + + +Step out + + +Run to the end of the current stack frame (function.) + + + + + +Viewers + + +Allows a variety of views into the data. Currently implemented views are: + + + + + +Memory address + + + + +Disassemble code + + + + +Current registers + + + + +Current libraries + + + + + + + +Interrupt + + +Stop the application executing. + + + + + +Stop + + +Stop the application executing and exit the debugger. + + + + + + + + + +Details + + +Breakpoints + + +Breakpoints can be set against source lines in a file (referred to as +breakpoints,) or on variables in the source (referred to as watchpoints.) Both +types of breakpoints can be set at any time, however watchpoints on local +variables only have any meaning in the local scope of the variable. Watchpoints +have more meaning when you are dealing with global variables. + + + + + +Set/Unset Breakpoints + + +Setting breakpoints is a simple one click operation. Click on the icon border +to the left of the text in the editor at the +line you want the breakpoint. Click again on this line to unset the breakpoint. + + + + + +Alternative Breakpoint Manipulation Via Menus + + +By right clicking on a breakpoint in the breakpoint list, or on a breakpoint in +the editor icon border, you will get a menu of breakpoint options. This allows +you to remove this breakpoint, clear all +breakpoints, or edit the breakpoint. + + + + + +Editing Breakpoints + + +Use the above menu to display the Edit Breakpoint dialog. +This contains the following fields: + + + + +Conditional + + +Enter the condition that must be met before gdb will +interrupt the program execution. + + + + + +Ignore Count + + +How many times you want to the code to pass through this breakpoint before +gdb interrupts the program execution. + + + + + +Enable + + +When enabled, gdb will break at this breakpoint. When +disabled, gdb will not break here. + + + + + + + + +Clear all breakpoints + + +This menu entry removes all the breakpoints for this program. Use it carefully! + + + + + +Set/Unset Watchpoints + + +In the VAR view, click with the &RMB; mouse button on a +variable. The resulting context menu will allow you to set a watchpoint on the +local variable. This +functionality is limited to the scope that the local variable is in. As the +variable goes out of scope, the program breaks, and the watchpoint is deleted. + + + + +This is known to be problematic, so use caution when setting watchpoints on +local variables. + + + + +The watchpoint can also be set by a &RMB; mouse click on a previously entered +watch variable, and selecting toggle watchpoint. + + + + + +Set/Unset Watch Variables + + +-at the bottom of the Watch tab, you can enter the variable +name you wish to see display in the watch list. Enter the variable name, and +then press Enter or click the Add +alongside the field. Right clicking on the watch +variable in the tree view will bring up a menu where you can remove the variable +from the list. + + + +You can also enter a watch variable by &RMB; clicking on a variable name in the +editor window. Choose watch: variable +name from the resulting context menu. + + + + + +Changing Variable Values + + +You can change a variable value in the Watch vew. If you +have a variable test, then to set test to +5, type +test=5 in +the watch field, and add it to the list. Note that test will +then be set to 5 every time the +program stops at a breakpoint, so once you have set the variable, you would +normally want to remove the item from the watch view. + + + + + + + +The Floating Toolbar + + +The floating toolbar is a feature of the internal debugger, and it will greatly +improve the comfort and efficiency when debugging GUI +applications. + + + +The toolbar is either on top of all windows displayed, or docked into the main +toolbar with only a single icon showing. + + + +When docked, you can run your code by clicking on the docked icon. +The function this performs is the step over function. + + + +Right clicking on the docked toolbar allows you to +restore the whole toolbar, and optionally place focus on &kdevelop;. + + + +Besides the functions available from the +Debug menu, the floating toolbar offers two additional +functions: + + + + +Set focus on KDevelop + + +Set the focus back on &kdevelop; + + + + + +Set focus on application + + +This sets the focus on the window that had the focus when you pressed the +Set focus on KDevelop button. This is a compromise, as it +should set the focus on the application being debugged, but this is difficult to +do. If anyone has a better solution than the current functionality, please let +us know. + + + + + + +When gdb interrupts the program, usually because a breakpoint +has been triggered, we highlight the Set focus on KDevelop +button. We do not automatically switch focus to &kdevelop;, so you can view the +application window at this point. Click the Set focus on +KDevelop button to switch to &kdevelop;, or press another button on +the toolbar to perform another function. + + + + + +Shared Libraries and Breakpoints + + +Setting breakpoints in shared libraries is a problem, because +gdb will not accept such breakpoints in libraries that have +not yet been opened, and will be opened at some future point with +dlopen. + + + +There is a reasonable solution, which is to have gdb tell us +when a shared library has been opened. This is done by setting . + + + +This means that when a user sets a breakpoint, we flag this breakpoint as +pending, try to set the breakpoint, and if gdb says it +succeeded, then we flag it as active. If gdb is not +successful, then we leave the breakpoint as pending. The next instruction will +always be continue. + + + +This is known as lazy breakpoints. + + + +This can however lead to a problem when you use the step over +command and step over the code that would load the library. This will trigger a +break on libary load, and normally the debugger would do a +continue (&ie; run to the next breakpoint or the end of the +code.) The user, however, is expecting the program to stop at the next line, so +in this situation we do not continue, but leave it at that point (which will be +somewhere inside a dlopen command. This can be +disconcerting, but it cannot be helped. + + + + + + + +<acronym>CVS</acronym> Integration + + +Among it's many features, &kdevelop; also handles managing your project via +CVS repositories. + + + +The goal behind CVS (Concurrent Version Control) is to enable +groups of developers to work on the same source-tree independently, and to merge +changes into the repository. + + + +Usually, the repository is located on a server, and the initial repository +contains the base set of files that the project includes. Directories and files +are then added to or removed from the CVS by the developers. + + + +Locally, the developer works on his own copy of the CVS +tree. He writes his changes into his own copy of the files, and then tests +locally. If the project still works, at least to the point where incomplete +sources don't prevent other developers from working, then he commits his changes +to the main CVS repository. The other developers will then +receive the changes the next time they update their own local copy of the +CVS tree. + + + +Creating a Repository + + +When creating a new project with &kdevelop;, you can directly import the project +as a CVS module. To enable this, you must have +CVS installed. CVS is installed by +default on a great many distributions, but if not you should find it on your +original &cdrom;s. + + + + +To create an initial repository in &kdevelop;, you must have write access to the +CVS root directory. Also, the CVS root +directory must be on the same machine as you are running &kdevelop; on. + + + +If you want to have the repository on a dedicated server, either contact this +server's system administrator to create the project with &kdevelop; on the +server machine, or take the following steps: + + + + + +Create your project locally. + + + + +Import the project source tree as a module on the CVS server. + + + + +Delete the local project source tree. + + + + +Check out the project source tree from CVS. + + + + +After loading the project file from the CVS copy you checked +out, enable CVS support in the Project +Options dialog, as described below, + + + + + + + +On the third page of the KAppWizard, labelled VCS support, +choose CVS. The rest of the fields on the page will be +enabled, and you should fill them in as appropriate. + + +The options available to you are: + + + + +VCS Location + + +This is the CVS root directory where the project source tree +will be imported to, and where commits, +checkouts and updates take place. + + + + + +Repository in CVS + + +This is the module name for your project. This is the same as the project +directory, so you cannot change it. + + + + + +Vendor Tag + + +This is the tag for the entire branch. + + + + + +Log Message + + +This is for the first log message entry of the new module. When adding or +committing to the repository, you will be asked for a log message each time, to +document your changes to the repository source tree. The log message you enter +here is used only for the initial import. + + + + + +Release Tag + + +This specifies the tag under which your project source tree can be found. You +can create several different projects with the same module name in the +CVS root, so long as they differ from tag. This enables you +to have separate development teams working on different versions of your +application. As an example, &kde; is developed mainly in the HEAD (the default) +branch, and a branch is tagged for each release: KDE_1_1_2_RELEASE, +KDE_2_0_RELEASE, and so on. + + + + + + +After creating your project with the KAppWizard, the CVS +support option is already set for your project. + + + + + +Enabling <acronym>CVS</acronym> Support + + +As CVS support is most often only needed if you will be +working on your project in conjunction with other developers, perhaps as a +professional programmer or in a large open source project such as &kde;, +CVS support is optional. To enable the +CVS commands, open the Project Options +diialog and change the option for Version Control to +CVS. + + + + + +Using <acronym>CVS</acronym> Commands + + +Once CVS support is enabled, the following commands are +available from the &RMB; click context menu in the Files +and Groups tree view panes: + + + +Over a file not included in the repository: + +Add to Repository + + +Adds the file to the repository. The file is set up to be added, and will be +introduced to the repository on the next commit command that +includes the directory it is located in. + + + + + + +Over a file included in the repository + +Update + + +Update the selected file with the CVS version. + + + + + +Commit + + +Commit the selected file to the CVS repository. + + + + + +Remove from Repository + + +Remove the selected file from the repository. + + + + + + +Over a folder + +Add + + +Add the entire folder to the repository. + + + + + +Remove + + +Remove the folder from the repository. + + + + + +Update + + +Update the folder recursively to be in sync with the repository. + + + + + +Commit + + +Commit any changes recursively to the repository. + + + + + + +The CVS commands all require a working network connection to +the CVS server. When invoking a command, you will be shown a +dialog with the command sent to the CVS server, and the +retrieved output. This lets you monitor the success of the command. + + + +As the CVS commands of &kdevelop; only work with the +cvs and it's commandline options, you should have no trouble +to use the CVS features. + + + + + + + +General Configuration + + +This chapter describes how you can set your individual preferences as to how +&kdevelop; works. All settings addressed below can be found through the +appropriate entries in the Options menu. + + + +Configuring the <guimenu>Tools</guimenu> Menu + + +As &kdevelop; supports the use of third-party programs within it's user +interface, you are able to configure any program that suits your needs to be +added to the Tools menu. + + + +To add an application to the Tools menu, select +Tools from the Options menu. + + + +The resulting dialog allows you to specify new entries, by adding the executable +name of the new application in the Executable field, or +browsing to it with the folder icon. Add the text you want +it to appear in the menu as to the Menu Text field, using a +& character to mark the letter you want to be the menu accelerator. Take +care not to duplicate accelerators within the menu. Finally, you can add any +commandline arguments the application requires to the +Arguments field. + + + +Select Add to add your application to the menu. You can +rearrange the menu with the Move Up and Move +Down buttons, and delete any unnecessary entries with +Delete. Choose OK to save your +changes and close the dialog if you are happy with it, and +Cancel to close the dialog without saving your changes. + + + +Newly added applications will be available immediately in the +Tools menu. + + + + + +File Viewer Options + + +The Groups viewer can be configured entirely through context +menus. + + + +As it's intention is to separate files in a logical manner, to keep an overview +of complex projects, one of the most used customizations is to create file +groups. + + + +You can set up new groups and other operations, by opening the context menu with +a &RMB; click over the project icon, which is displayed as the root of the tree, +or the slightly different context menu available from a &RMB; click over a group +folder. + + + +The menu offers: + + + +The Project Icon Context Menu + +New File + + +Open the New File dialog. This is the equivalent of +choosing the menu item File +New. + + + + + +New Class + + +Opens the class generator, to create a new class. This is the equivalent of the +menu item Project New +Class. + + + + + +New Group + + +Opens a dialog to create a new group. There, set the group name and the file +filter for the project files that will be displayed in this group. + + + + + +Show relative path + + +Display the files with their path, starting from the main project directory. If +this is unchecked, only the file name is shown. + + + + + + +The Group Folder Context Menu + +New Group + + +Opens a dialog to create a new group. There, set the group name and the file +filter for the project files that will be displayed in this group. + + + + + +Remove Group + + +Removes the group from the Groups pane. + + + + + +Properties + + +Opens the properties of the group. There you can edit the file filters, through +a list of wildcards separated by commas. + + + + + + + + + +<guimenuitem>KDevelop Setup</guimenuitem> + + +The general configuration for &kdevelop; is reached through the +Options menu entry KDevelop Setup. + + + +The dialog contains several sections: + + + + + +General + + + + +Keys + + + + +Documentation + + + + +Debugger + + + + +Path + + + + + + + +<guilabel>General</guilabel> + + + +Select Make-Command + + + + + + + +enable Autosave + + + + + + + +Select Autosave time-interval + + + + + + + +enable Autoswitch + + + + + + + +use Class View as default + + + + + + + +Startup Logo + + + + + + + +Tip of the Day + + + + + + + +Load last project + + + + + + + + + + +<guilabel>Keys</guilabel> + + + + + + + +Documentation + + +To set up the documentation browser to work correctly, &kdevelop; needs some +information about where the HTML documentation is stored on +the system. + + + +The Documentation Path properties dialog needs the path of the &Qt; online +documentation in HTML as well as the path to the &kde; +Library documentation. + + + +Usually, the &Qt; Documentation is placed in the same directory where &Qt; is +installed; ⪚ if &Qt; resides in /usr/local/qt, the path you have to enter is +/usr/local/qt/html. + + + + +Qt-Library-Doc: + + +The path to your &Qt; documentation. + + +Usually, the &Qt; Documentation is placed in the same directory where &Qt; is +installed; ⪚ if &Qt; resides in /usr/local/qt, the path you have to enter is +/usr/local/qt/html. + + + + + +KDE-Libraries-Doc + + +The path to your &kde; documentation. + + +For the &kde; Documentation, you have to set the directory to the root of the +documentation, assumed all &kde; Libs documentation resides in the same +directory. Both path's can be selected by pressing the appropriate browse +buttons, displaying a path selection dialog. If your system doesn't contain the +documentation for the &kde; libs, you should first enter the next configuration +section, Update &kde; Documentation. This will create the documentation to a path +of your choice, also setting the &kde; Library Doc path automatically. + + + + + +Update KDE-Documentation: + + +For those users who don't have a recent documentation of the &kde; libraries, +especially the documentation for the files installed on the system, the +Update KDE-Documentation dialog creates a new one or +updates existing documentations. This function requires your system to have +KDoc and qt2kdoc installed, included in +the KDE-SDK package. First of, you have to set up the path to your recent +kdelibs sources, which is not the include path for &kde,! Just enter the path +to the sources, like: /home/rnolden/kdelibs-2.1/. + + +You can choose from three different installation modes: + + + +Delete old Documentation and install to recent +Documentation-path: + + +This assumes you already have documentation installed, and it is placed in the +path you entered in the Documentation path dialog. This will delete all +documentation and install the newly generated documentation in it's place. + + + + +Delete old Documentation and install to new +Documentation-path + + +This will result in deleting the old documentation, and installing the new +documentation to a different place. + + + + +Leave old Documentation untouched and install to new +Documentation path + + +This is the recommended choice if you have two different generations of &kde; +libs installed, and would like to have the documentation for both available, or +for your first time generating documentation. + + + + + +The new KDE Libs Documentation path must to be set for +option 2 and 3 of the installation mode. This is also recommended for users who +generate a new documentation from scratch. + + +After you press the OK button, &kdevelop; will create a +subdirectory KDoc-reference in the +documentation path, containing the KDoc reference files. +First the &Qt; library documentation classes will be indexed, to connect the +&Qt; documentation with the documentation that will be generated for &kde; +libs, so it is important that you have already set up the &Qt; documentation +path. This process is done by the qt2kdoc script. Finally +the &kde; libs will be indexed, and the documentation will be built with cross +references, to give you the most functionality. + + + +When using KDoc 2, you can add a set of documentation for the +the libraries in the &kde;base and &koffice; package. To do this, create the +&kde; Libs documentation as described above. Then reopen the dialog and choose +the path to the kdoc.rules file in the kdebase package and +the koffice packages respectively, which is located in kdebase in the root +directory of the sources, in KOffice in koffice/lib. Select option 3 (Leave old +Documentation untouched) and leave the output path below that option +as it is. This will keep the kdelibs documentation and generate the +kdebase-libraries (resp. the koffice-libraries) documentation to the same +location with cross-references to the kdelibs documentation additionally. After +generating the documentation the libraries are available in the documentation +tree automatically. For further &kde; packages coming with additional libraries +you should look for the kdoc.rules file to generate +additional documentation as with the &kde; Base and KOffice packages. + + + + + + +Create Search Database + + +The Create Search Database dialog, accessed via the +create button, allows the programmer to create a database +to search for a keyword interactively. To create and use the documentation +search function, you must have the program glimpse 4.0 or +ht://Dig installed. Preset are the options to index +the given &kde; Library documentation as well as the &Qt; Documentation, +assuming the path to the documentation files were set in the +Documentation Path dialog of the options- +menu. Additionally, the index can include directories the user can set up +himself by the additional directories to index field. After +setting a path to an additional directory, the Add button +must be pushed to set the path. A path once set can be removed from the index by +selecting the path in the path field and pushing +Remove. Furthermore, the user is offered three different +modes for the index size: tiny, small and medium. The higher the index size, the +more the index files will grow. On the other hand, a search in a bigger +search-database will be faster and more successful, so we suggest choosing a +medium size. + + + + + +Create also KDOC-reference of your project + + +This option allows you to create a cross-reference file for your project when +generating the API documentation with +KDoc. The cross-reference file will be placed in the +references directory and make your project available in the documentation +tree. If you dont have write access to the directory containing the reference +files you have to uncheck this option to generate the API +documentation without errors. + + + + + + + + +<guilabel>Debugger</guilabel> + +Already covered in detail in + + + + +<guilabel>Paths</guilabel> + + + +Qt 2.x directory: + + + + + + + +KDE 2.x directory: + + + + + + + +Project Path: + + + + + + + + + + + + +Other Useful Things to Know + + +Bug Reporting + + +Like most large applications, &kdevelop; is a work in progress. Unfortunately, +works in progress sometimes experience bugs. + + + +If you experience a bug while using &kdevelop;, you have the option to send the +&kdevelop; development team a bug report either in your email-client or with the +bug report dialog. All bug-reports are collected on the &kdevelop; web site and +can be reviewed on http://bugs.kde.org//db/pa/lkdevelop.html. + + + +To send bug reports, please use the email address +submit@bugs.kde.org. If you want to use &kdevelop; for direct +bug-reporting, choose Bug Report from the +Help menu. You will be presented the report dialog that lets +you enter all necessary information about the bug you found. After pressing +OK, the dialog's contents is sent to the above address +automatically. + + + + + + + +Questions and Answer + + +More Information + + + + + +I have a question that is not addressed in the FAQ file, nor +in the manuals of &kdevelop;. Where should I turn? + + + + + +You can find help on any and all aspects of using &kdevelop; by subscribing to +the &kdevelop; mailing list at +kdevelop-request@barney.cs.uni-potsdam.de. Send an email to that +address with an empty header and subscribe +youremailaddress as the contents of the +body. + + + +As a member of the list, you can participate in discussions. All questions +should be sent there, and will be addressed there as well. The &kdevelop; +developers are on the list, as well as experienced users, and discussions on +this list are used to keep the FAQ updated with the issues +that people are facing. + + + +The &kdevelop; home page at http://www.kdevelop.org/ also contains a +mailing list archive that allows you to browse and search through previous +postings to the list. You should probably check there first, as most common +problems have already been addressed there by the developers or by other users. + + + + + + + + + +Library and System Problems + + + + + +I get an error saying Wrong JPEG library version: library is 61, +caller expects 62, so what's wrong? + + + + + +There are two ways to solve this issue. + + + + + +When the kdelis are installed, header files for the jpeg libraries are also +installed, and these are version 61. Many distributions use the version 62 +libraries. To fix this, remove jpeglib.h from $KDEDIR/include. The pukka include +file for version 62 should then +be picked up. + + + +There is always the small possibility it's the other way around, and you need to +remove your distribution's copy of the header. In any case, ensure you have +only one copy of jpeglib.h, and that it is the same version +as the library. The locate command is useful to verify that +there is only one copy of the files in question. + + + + +Recompile kdesupport without the jpeg library. +(./configure +) + + + + + + + + + + +I get an automake error saying aclocal.m4: 2709: `AM_PROG_INSTALL' is +obsolete; use `AC_PROG_INSTALL'. What shall I do? + + + + + +If you are seeing errors like this: + + + + +make[2]: Entering directory `/usr/local/src/kdevelop-0.3/po' +cd .. && automake --gnu --include-deps po/Makefile +aclocal.m4: 2709: `AM_PROG_INSTALL' is obsolete; use `AC_PROG_INSTALL' +make[2]: *** [Makefile.in] Error 1 + + + + +The workaround for automake 1.4 through +automake 2.13 users is to run aclocal +manually, and the application will then compile. + + + + + + + +What must I do if configure said that I need giflib23 + + + + + +Try another snapshot of the kdesupport package, or check that you don't have a +conflicting copy of giflib installed. If you do, remove it. + + + + + + + +How can I convert a &kdevelop; 0.2 project to a 0.3 one? + + + + + + +Change the AC_OUTPUt line in the configure.in to a one line +version. + + + +for example, from the old version: + + +AC_OUTPUT(Makefile \ +kdevelop/kwrite/Makefile \ +kdevelop/templates/Makefile +) + + +change this to: + + +AC_OUTPUT(Makefile kdevelop/kwrite/Makefile kdevelop/templates/Makefile) + + + + + + + + +configure complains about not being able to compile a small +&kde; application. Examining config.log reveals that it +can't find libXext. + + + + +Install the xdevel package (or your distribution's equivalent) + + + + + + + + +Usage Questions + + + + + +&kdevelop; won't let me use the delete key, or +backspace to delete selected text. + + + + +Go to Options +Editor... and make sure that Delete on +Input is enabled. Your Backspace and +Delete keys will now work. + + + + + + + +If I add files to my project, will they be automatically included and compiled? + + + + + +Yes, they are included in the Makefile.am's and if you do a +Rebuild All, then ./configure will +update the Makefiles and your files will now be included. + + + + + + + +If I remove a file, I get some weird linker messages. What's wrong with my +project? + + + + + +If the removed file is a header file, one that is automatically processed by +automoc (running the &Qt; Meta Object Compiler automatically on all headers), +youre removed header is still present as a moc-genertaed *.moc.cpp file, and is still compiled. Remove the +appropriate *.moc.cpp and rebuild the +project. + + + + + + + +I'm developing an application where I need to set options to +the preprocessor. If I add these in &kdevelop; to my project, everything is ok, +but when I distribute my package, the options set in +&kdevelop; are not used. What do I have to do to make this work? + + + + + +Edit the file configure.in, in your top level source +directory. Enter somewhere near the beginning CXXFLAGS=$(CXXFLAGS) " +-DYOURDEFINE" AC_SUBST(CXXFLAGS). + + + + + + + +I don't have any &kde; widgets in the &Qt; Designer. +How do I add them? + + + + + +You will have to recompile &Qt, with the enabled. That +is, ./configure +..., in addition to your usual configure options. Rembember to set +$QTDIR and $KDEDIR to the appropriate values. +After doing this, you will have a new KDE option in +the Tools menu of Designer. + + + + + + + +I use &RedHat; &Linux; with &kdevelop; and tried to recompile the &Qt; library +with in order to use the designer with &kde; widget +support but during configure it says that $KDEDIR does not +contain a valid &kde; installation? + + + + + +&RedHat; uses non-standard directory setting with &kde;. The normal case would +be that the libs are in $KDEDIRkdedir/lib, binaries in +$KDEDIR/bin and includes +in $KDEDIR/include. &RedHat; uses +/usr as $KDEDIR +but$KDEDIR/include/kde as +directory for header files. Therefore configure from &Qt; fails to detect the +correct directories. It searches for dcopserver in the +binaries folder and the header files in their folder. So if you choose +$KDEDIR to be /usr, +configure can't find the includes. A possible solution for this is to create a +/usr/local/kde directory and set symlinks +to /usr/bin and /usr/include/kde in this pseudo +kde dir. Then export +KDEDIR=/usr/local/kde and do the +./configure +. After compiling &Qt; you have the &kde; +entries in the Tools menu of the &Qt; designer. + + + + + + + +Is there any HOWTO documentation available on working with &Qt; +Designer made dialogs? + + + + + +Yes, there is a great tutorial on http://women.kde.org/docs/tut_kdevelop/. + + + + + + + +I have installed htdig but there is no +htsearch available. What's up? + + + + + +On some systems (notably &RedHat;), the htsearch executable +is placed in the /cgi-bin of +apache. You can create symlinks in /usr/bin/ or simply add this to your path in your +shell rc file. + + + + + + + +I have htdig, htmerge and +htsearch available but I get an error message thet the config +file of htdig could not be found or is invalid, so what can I +do? + + + + + +Read README.htdig in the source directory tree and create +an htdig.conf file. Then copy it to $KDEDIR/share/apps/kdevelop/tools. Now +create your search index with the KDevelop Setup menu +item. + + + + + + + + + + + + +Credits and Licenses + +&kdevelop; + +Copyright the &kdevelop; team, 1999, 2000, 2001 + + + +Sandy Meier smeier@kdevelop.de + +Maintainer, development coordinator, and homepage provider. Main +development of frame structure, &IDE; look'n feel and project management. + + + +Stefan Heidrich sheidric@rz.uni-potsdam.de + +Main development of KAppWizard and printing functionality. + + + +Ralf Nolden rnolden@kdevelop.de + +Main development of &kdevelop; <--> Dialog Editor interface, configuration +functionality, online help and handbooks. + + + +Jonas Nordin jonas.nordin@cenacle.se + +Main development of the Class viewer and Class parser. + + + +Pascal Krahmer pascal@beast.de + +Main development of the Dialog Editor. + + + +Bernd Gehrmann bernd@physik.hu-berlin.de + +Main development of the Grep Dialog, CVS integration, and the new +Documentation tree. + + + + +&underFDL; +&underGPL; + + + + + +
+ + \ No newline at end of file diff -Nru kdevelop-3.9.98/doc/welcome/index.cvlog kdevelop-4.0.1/doc/welcome/index.cvlog --- kdevelop-3.9.98/doc/welcome/index.cvlog 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/welcome/index.cvlog 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,15 @@ +=== LinuxDoc conversion errors =================== +-> Check if any important attributes have been left behind. + INPUT OUTPUT +Line Tag Line Tag + 2 `SLIDES' 0 `book' +! This may not be a problem, but check anyway ... + 3 `SLIDE' 0 `chapter' +! This may not be a problem, but check anyway + 17 `HTMLURL' 0 `' + 25 `HTMLURL' 0 `' + 35 `HTMLURL' 0 `' + 47 `HTMLURL' 0 `' + 57 `HTMLURL' 0 `' +=== NIF conversion errors ======================== +=== Finalising errors =========================== diff -Nru kdevelop-3.9.98/doc/welcome/index.docbook kdevelop-4.0.1/doc/welcome/index.docbook --- kdevelop-3.9.98/doc/welcome/index.docbook 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/welcome/index.docbook 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,106 @@ +kdevelop"> + + ]]> +]> + + + +Welcome to KDevelop + + +Ralf +Nolden + +The KDevelop Team +
Ralf.Nolden@post.rwth-aachen.de
+
+
+
+26/05/2000 +1.00.00 + +This is the introductory text to KDevelop + + +KDE +KDevelop +welcome + +
+ + +Welcome To KDevelop ! + +Welcome to the KDevelop Integrated Development Environment ! + +The KDevelop IDE has been designed by the KDevelop Team to provide an easy-to use environment for C/C++ programmers. With all it's +features the current version contains, the full amount of programming knowledge of the team has been collected to add a set of +documentation handbooks that will help beginners as well as experts in various parts of using their IDE. We hope to give you the +environment you need and like to use for creating your application that contributes to the K Desktop Environment and the free software +community as well as for any commercial purpose. + +Currently, the KDevelop Documentation spans over four handbooks full of well-written, informative and understandable text that will +enable you to start developing your applications, including an extra handbook for the upcoming KDE 2 development framework: + + + + + +The Reference Guide to the KDevelop Integrated Development Environment for Unix Systems, Version 1.2. +The User Manual to KDevelop contains a full description of the available functionality the IDE provides. Additionally, it gives you +an informative description about projects in general and the way they are set up using GNU standard development tools. + + + + + +The User Guide to C++ Application Design for the K Desktop Environment (KDE) with the KDevelop IDE, Version 1.2. +The Programming Handbook covers all topics that are related to actually using the IDE. It contains a description of project types +and explains the basics about KDE and Qt applications as well as a complete description of the sourcecode generated by KDevelop's +application wizard. Further, various steps of the development process are described such as writing documentation and installation +settings for your project files in conjunction with the KDE File System Standard. + + + + + +The KDE Application Tutorials Handbook for the KDevelop Integrated Development Environment, a tutorial collection on how to create +KDE applications by examples and describes how to build the tutorial examples included with the Qt library. +The KDE Application Tutorials handbook contains an informative instruction for beginners and advanced developers to learn about Qt +and KDE application design by creating sample projects. Beginning with creating the tutorials included with the Qt library +documentation, the user is lead over to the Qt examples and the KDE application projects. Issues that are addressed in the KDevelop +Programming Handbook will be explained in full detail by example usage. + + + + + +The Reference Guide to C++ Application Design for the K Desktop Environment (KDE). +The reference guide contains a structured information on the KDE Application Framework and covers issues like eventhandling, signals/slots, +provided GUI-elements and the usage of standard dialogs for required user input. Furthermore it contains portability information for +known Qt 2.0 / KDE 2 issues regarding the standard KDE application framework. + + + + + +A collection of already existing documentation for the KDE 2 API usage including KOM/OpenParts issues by various KDE authors +This handbook is a collection of already existing articles targeting towards KDE 2 development that have been written by various KDE +authors. It generally covers the new facilities and technologies that KDE 2 will offer developers as well as discussing implementation +issues. + + + + + + +
+ diff -Nru kdevelop-3.9.98/doc/welcome/Makefile.am kdevelop-4.0.1/doc/welcome/Makefile.am --- kdevelop-3.9.98/doc/welcome/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/doc/welcome/Makefile.am 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,4 @@ +EXTRA_DIST = index.docbook + +KDE_LANG = en +KDE_DOCS = AUTO \ No newline at end of file diff -Nru kdevelop-3.9.98/documentation/qthelp/kdevqthelp.desktop kdevelop-4.0.1/documentation/qthelp/kdevqthelp.desktop --- kdevelop-3.9.98/documentation/qthelp/kdevqthelp.desktop 2010-02-06 09:59:13.000000000 +0000 +++ kdevelop-4.0.1/documentation/qthelp/kdevqthelp.desktop 2010-07-17 20:08:19.000000000 +0100 @@ -1,9 +1,11 @@ [Desktop Entry] Type=Service Exec=blubb +Icon=qtlogo Comment=This plugin provides QtHelp integration Comment[ca]=Aquest connector proveeix d'integració amb QtHelp Comment[ca@valencia]=Este connector proveeix d'integració amb QtHelp +Comment[da]=Dette plugin tilbyder QtHelp-integration Comment[de]=Dieses Modul integriert QtHelp in KDevelop Comment[en_GB]=This plugin provides QtHelp integration Comment[es]=Este complemento proporciona integración de QtHelp @@ -16,9 +18,11 @@ Comment[nb]=Dette programtillegget gir integrering med QtHelp Comment[nds]=Dit Moduul stellt de Inbetten vun de Qt-Hülp praat Comment[nl]=Deze plugin geeft Qt-hulpintegratie +Comment[pl]=Ta wtyczka udostępnia integrację QtHelp Comment[pt]=Este 'plugin' oferece a integração com o QtHelp Comment[pt_BR]=Este plugin fornece integração com o QtHelp Comment[ru]=Этот модуль интегрирует QtHelp +Comment[sl]=Ta vstavek prinaša integracijo s pomočjo za Qt Comment[sv]=Insticksprogrammet tillhandahåller integrering av Qt-hjälp Comment[tr]=Bu eklenti QtHelp bütünleşmesini sağlar Comment[uk]=За допомогою цього додатка здійснюється інтеграція з QtHelp @@ -28,15 +32,23 @@ Name=Qt Documentation Name[ca]=Documentació de Qt Name[ca@valencia]=Documentació de Qt +Name[cs]=Dokumentace Qt +Name[da]=Qt-dokumentation +Name[de]=Qt-Dokumentation Name[en_GB]=Qt Documentation Name[es]=Documentación de Qt Name[et]=Qt dokumentatsioon Name[fr]=Documentation de Qt +Name[it]=Documentazione Qt +Name[ja]=Qt ドキュメンテーション Name[nb]=QT-dokumentasjon Name[nds]=Qt-Dokmentatschoon Name[nl]=Qt-documentatie +Name[pa]=Qt ਦਸਤਾਵੇਜ਼ +Name[pl]=Dokumentacja Qt Name[pt]=Documentação do Qt Name[pt_BR]=Documentação do Qt +Name[sl]=Dokumentacija za Qt Name[sv]=Qt-dokumentation Name[uk]=Документація з Qt Name[x-test]=xxQt Documentationxx @@ -46,6 +58,7 @@ GenericName[ca]=Ajuda Qt GenericName[ca@valencia]=Ajuda Qt GenericName[cs]=Nápověda Qt +GenericName[da]=Qt hjælp GenericName[de]=Qt Help GenericName[en_GB]=Qt Help GenericName[es]=Ayuda de Qt @@ -59,9 +72,11 @@ GenericName[nb]=Qt Hjelp GenericName[nds]=Qt-Hülp GenericName[nl]=Qt-hulp +GenericName[pl]=Pomoc Qt GenericName[pt]=Ajuda do Qt GenericName[pt_BR]=Ajuda do Qt GenericName[ru]=Справка Qt +GenericName[sl]=Pomoč za Qt GenericName[sv]=Qt-hjälp GenericName[tr]=Qt Yardım GenericName[uk]=Довідка Qt @@ -71,7 +86,7 @@ ServiceTypes=KDevelop/Plugin X-KDE-Library=kdevqthelp -X-KDevelop-Version=8 +X-KDevelop-Version=9 X-KDevelop-Category=Global X-KDE-PluginInfo-Name=KDevQtHelp X-KDE-PluginInfo-Author=Aleix Pol diff -Nru kdevelop-3.9.98/documentation/qthelp/qthelpplugin.cpp kdevelop-4.0.1/documentation/qthelp/qthelpplugin.cpp --- kdevelop-3.9.98/documentation/qthelp/qthelpplugin.cpp 2009-12-01 20:29:04.000000000 +0000 +++ kdevelop-4.0.1/documentation/qthelp/qthelpplugin.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -64,14 +64,21 @@ QtHelpPlugin::QtHelpPlugin(QObject* parent, const QVariantList& args) : KDevelop::IPlugin(QtHelpFactory::componentData(), parent) - , m_engine(KStandardDirs::locateLocal("appdata", "qthelpcollection", QtHelpFactory::componentData())) + , m_engine(KStandardDirs::locateLocal("appdata", QString( "qthelpcollection.qhc" ), true, QtHelpFactory::componentData())) { + if( !m_engine.setupData() ) { + kWarning() << "Couldn't setup QtHelp Collection file, searching in Qt docs will fail"; + } QtHelpDocumentation::s_provider=this; Q_UNUSED(args); - QStringList qmakes; - KStandardDirs::findAllExe(qmakes, "qmake"); - QString dirName; + QStringList qmakes; + QStringList tmp; + KStandardDirs::findAllExe(tmp, "qmake"); + qmakes += tmp; + KStandardDirs::findAllExe(tmp, "qmake-qt4"); + qmakes += tmp; + QString dirName; foreach(const QString& qmake, qmakes) { /// check both in doc/ and doc/qch/ dirName=qtDocsLocation(qmake)+"/qch/"; diff -Nru kdevelop-3.9.98/documentation/qthelp/testqthelp/CMakeLists.txt kdevelop-4.0.1/documentation/qthelp/testqthelp/CMakeLists.txt --- kdevelop-3.9.98/documentation/qthelp/testqthelp/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/documentation/qthelp/testqthelp/CMakeLists.txt 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,12 @@ +project(testqthelp) + +cmake_minimum_required(VERSION 2.6) + +find_package(Qt4 4.5.0 COMPONENTS QtCore QtGui QtHelp QtWebKit REQUIRED) + +include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}) +set(testqthelp_SRCS docwidget.cpp main.cpp) +qt4_wrap_ui(testqthelp_SRCS docwidget.ui) +qt4_automoc(${testqthelp_SRCS}) +add_executable(testqthelp ${testqthelp_SRCS}) +target_link_libraries(testqthelp ${QT_QTCORE_LIBRARIES} ${QT_QTGUI_LIBRARIES} ${QT_QTHELP_LIBRARIES} ${QT_QTWEBKIT_LIBRARIES}) diff -Nru kdevelop-3.9.98/documentation/qthelp/testqthelp/docwidget.cpp kdevelop-4.0.1/documentation/qthelp/testqthelp/docwidget.cpp --- kdevelop-3.9.98/documentation/qthelp/testqthelp/docwidget.cpp 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/documentation/qthelp/testqthelp/docwidget.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,74 @@ +/* This file is part of KDevelop + Copyright 2010 Andreas Pakulat +#include +#include +#include + + +DocWidget::DocWidget() + : QWidget( 0 ), ui( new Ui::DocWidget ) +{ + ui->setupUi( this ); + + QString helpcoll = QDir::homePath() + QLatin1String( "/.testqthelp.qhc" ); + ui->debug->append( QString("Setting up QtHelp collection at: %1").arg( helpcoll ) ); + + engine = new QHelpEngine( helpcoll, this ); + if( !engine->setupData() ) { + ui->debug->append( QString( "Could not set up help collection: %1" ).arg( engine->error() ) ); + } + + QString docLoc = QLibraryInfo::location( QLibraryInfo::DocumentationPath ); + ui->debug->append( QString("Found Qt Docs in: %1" ).arg( docLoc ) ); + QDir d( docLoc+QLatin1String("/qch") ); + foreach( const QString& file, d.entryList( QStringList() << "*.qch", QDir::Files ) ) { + QString absfile = d.filePath( file ); + QString ns = QHelpEngine::namespaceName( absfile ); + if( !engine->registeredDocumentations().contains( ns ) ) { + ui->debug->append( QString("Loading qch file: %1, ns: %2").arg( absfile, ns ) ); + if( !engine->registerDocumentation( absfile ) ) { + ui->debug->append( QString("ERROR loading %1: %2").arg( absfile, engine->error() ) ); + } + } else { + ui->debug->append( QString("Doc already loaded: %1" ).arg( absfile ) ); + } + } + connect( ui->search, SIGNAL(returnPressed()), SLOT(searchForIdentifier()) ); +} + +void DocWidget::searchForIdentifier() +{ + QMap links = engine->linksForIdentifier( ui->search->text() ); + QStringList dbg; + foreach( const QString& k, links.keys() ) { + dbg << QString("%1=%2").arg( k, links[k].toString() ); + } + ui->debug->append( QString("Found links for %1: %2").arg( ui->search->text(), dbg.join(", ") ) ); + if( !links.isEmpty() ) { + ui->help->setContent( engine->fileData( links.begin().value() ) ); + } +} + + +#include "docwidget.moc" diff -Nru kdevelop-3.9.98/documentation/qthelp/testqthelp/docwidget.h kdevelop-4.0.1/documentation/qthelp/testqthelp/docwidget.h --- kdevelop-3.9.98/documentation/qthelp/testqthelp/docwidget.h 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/documentation/qthelp/testqthelp/docwidget.h 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,45 @@ +/* This file is part of KDevelop + Copyright 2010 Andreas Pakulat + + +namespace Ui +{ +class DocWidget; +} + +class QHelpEngine; + +class DocWidget : public QWidget +{ +Q_OBJECT +public: + DocWidget(); +private: + Ui::DocWidget* ui; + QHelpEngine* engine; +public slots: + void searchForIdentifier(); +}; + +#endif // DOCWIDGET_H diff -Nru kdevelop-3.9.98/documentation/qthelp/testqthelp/docwidget.ui kdevelop-4.0.1/documentation/qthelp/testqthelp/docwidget.ui --- kdevelop-3.9.98/documentation/qthelp/testqthelp/docwidget.ui 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/documentation/qthelp/testqthelp/docwidget.ui 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,70 @@ + + + DocWidget + + + + 0 + 0 + 857 + 734 + + + + + + + Identifier to search: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + Help page: + + + Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing + + + + + + + + about:blank + + + + + + + + Debug info: + + + Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing + + + + + + + + + + + QWebView + QWidget +
QtWebKit/QWebView
+
+
+ + +
diff -Nru kdevelop-3.9.98/documentation/qthelp/testqthelp/main.cpp kdevelop-4.0.1/documentation/qthelp/testqthelp/main.cpp --- kdevelop-3.9.98/documentation/qthelp/testqthelp/main.cpp 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/documentation/qthelp/testqthelp/main.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,30 @@ +/* This file is part of KDevelop + Copyright 2010 Andreas Pakulat + +#include "docwidget.h" + +int main(int ac, char** av) +{ + QApplication app(ac,av); + DocWidget d; + d.show(); + return app.exec(); +} diff -Nru kdevelop-3.9.98/FAQ kdevelop-4.0.1/FAQ --- kdevelop-3.9.98/FAQ 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/FAQ 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,64 @@ +KDevelop-FAQ + +Q: The configure script doesn't find my Qt library. +A: Use the options + --with-qt-includes=path_to_your_qt_includes + and + --with-qt-libraries=path_to_your_qt_library + +Q: I get the message: "Wrong JPEG library version: library is 61, caller expects 62 " + +A: There are 2 ways. + + 1. : When the kdelibs are installed it installs header files for the + jpeg libraries, these are version 61, however most distributions + (Redhat) use version 62 libraries. To fix this just remove jpeglib.h + from /opt/kde/include. The pukka include file for version 62 should + then be picked up. However looking at the error message above it may + be the other way round, in any case ensure you only have on version + of the header file, the library and that they are consistent. + + It is useful to use the locate command to verify that I have + the correct version of a library and header files e.g. + updatedb + locate libjpeg + locate jpeglib + + 2: You must recompiled kdesupport without jpeg + library (configure --with-libjpeg --with-libgif). + + + +Q: make[2]: Entering directory `/usr/local/src/kdevelop-0.3/po' + cd .. && automake --gnu --include-deps po/Makefile + aclocal.m4: 2709: `AM_PROG_INSTALL' is obsolete; use `AC_PROG_INSTALL' + make[2]: *** [Makefile.in] Error 1 +A: Workaround for automake-1.4/automake-2.13 users: Just run + "aclocal" manually, then it will compile. + + +Q: What must i do, if configure said ,that i need giflib23. +A: Try a newer snap of kdesupport, or maybe you have another giflib installed? + + +Q: How can I convert a KDevelop 0.2 project to a 0.3 one? +A: Please change the AC_OUTPUT in the configure.in to a oneline version + + for example: + old version AC_OUTPUT(Makefile \ + kdevelop/kwrite/Makefile \ + kdevelop/templates/Makefile + ) + new version: AC_OUTPUT(Makefile kdevelop/kwrite/Makefile kdevelop/templates/Makefile) + + +Q: Configure complains about the Qt version not being between 1.44 +and 2.00 +A: You probably have Qt2.00 installed on your system, and this +messes up ./configure. For the purpose of compiling KDevelop you should +temporarily uninstall all Qt2.00 components from your system. + +Q: Configure complains about not being able to compile a small KDE +application. Examining config.log reveals that it can't find the library +libXext. +A: Install the package xdevel diff -Nru kdevelop-3.9.98/formatters/astyle_formatter.cpp kdevelop-4.0.1/formatters/astyle_formatter.cpp --- kdevelop-3.9.98/formatters/astyle_formatter.cpp 2009-11-19 23:35:15.000000000 +0000 +++ kdevelop-4.0.1/formatters/astyle_formatter.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -44,23 +44,20 @@ { int prefixPos = 0; int textPos = 0; - while (prefixPos < prefix.length() && textPos < text.length()) { - - while (prefixPos < prefix.length() && prefix[prefixPos].isSpace()) + while (prefixPos < prefix.length() && prefix[prefixPos].isSpace() && prefix[prefixPos] != '\n') ++prefixPos; - while (textPos < text.length() && text[textPos].isSpace()) + while (textPos < text.length() && text[textPos].isSpace() && prefix[prefixPos] != '\n') ++textPos; if(prefixPos == prefix.length() || textPos == text.length()) - return textPos; - + break; + if(prefix[prefixPos] != text[textPos]) return -1; ++prefixPos; ++textPos; } - return textPos; } @@ -92,15 +89,16 @@ } ///Removes parts of the white-space at the start that are in @p output but not in @p text -QString equalizeWhiteSpaceAtStart(QString original, QString output) { - if(leadingNewLine(output) != -1) { +QString equalizeWhiteSpaceAtStart(QString original, QString output, bool removeIndent = false) { + int outputNewline = leadingNewLine(output); + if(outputNewline != -1) { if(leadingNewLine(original) != -1) - return output.mid(leadingNewLine(output)); //Exactly include the leading newline as in the original text + return output.mid(outputNewline); //Exactly include the leading newline as in the original text else - output = output.mid(leadingNewLine(output)+1); //Skip the leading newline, the orginal had none as well + output = output.mid(outputNewline+1); //Skip the leading newline, the orginal had none as well } - if(output[0].isSpace() && !original[0].isSpace()) { + if(removeIndent && output[0].isSpace() && !original[0].isSpace()) { //The original text has no leading white space, remove all leading white space int nonWhite = firstNonWhiteSpace(output); if(nonWhite != -1) @@ -136,9 +134,7 @@ //Now remove "leftContext" and "rightContext" from the sides if(!leftContext.isEmpty()) { - //By trimming the context, we include all the preceding whitespace behind the "physical" left context - //If we do not want o include the preceding whitespace, we match against the whole context - int endOfLeftContext = matchPrefixIgnoringWhitespace(output, leftContext.trimmed()); + int endOfLeftContext = matchPrefixIgnoringWhitespace(output, leftContext); if(endOfLeftContext == -1) { kWarning() << "problem matching the left context"; return formatSource(text); //Re-format without context @@ -154,9 +150,8 @@ kWarning() << "problem matching the text while formatting"; return formatSource(text); //Re-format without context } - output = output.left(endOfText); - output = reverse(equalizeWhiteSpaceAtStart(reverse(text), reverse(output))); + output = reverse(equalizeWhiteSpaceAtStart(reverse(text), reverse(output), true)); } return output; diff -Nru kdevelop-3.9.98/formatters/astyle_plugin.cpp kdevelop-4.0.1/formatters/astyle_plugin.cpp --- kdevelop-3.9.98/formatters/astyle_plugin.cpp 2009-12-27 16:25:20.000000000 +0000 +++ kdevelop-4.0.1/formatters/astyle_plugin.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -24,6 +24,9 @@ #include #include +#include +#include + #include "astyle_formatter.h" #include "astyle_stringiterator.h" #include "astyle_preferences.h" @@ -47,7 +50,8 @@ QString AStylePlugin::name() { - return "astyle"; + // This needs to match the X-KDE-PluginInfo-Name entry from the .desktop file! + return "kdevastyle"; } QString AStylePlugin::caption() @@ -71,7 +75,7 @@ return "C++"; } -QString AStylePlugin::formatSource(const QString& text, const KMimeType::Ptr& mime, const QString& leftContext, const QString& rightContext) +QString AStylePlugin::formatSourceWithStyle( SourceFormatterStyle s, const QString& text, const KMimeType::Ptr &mime, const QString& leftContext, const QString& rightContext ) { if(mime->is("text/x-java-source")) m_formatter->setJavaStyle(); @@ -79,48 +83,58 @@ m_formatter->setSharpStyle(); else m_formatter->setCStyle(); + + if( s.content().isEmpty() ) + { + m_formatter->predefinedStyle( s.name() ); + } else + { + m_formatter->loadStyle( s.content() ); + } return m_formatter->formatSource(text, leftContext, rightContext); } +QString AStylePlugin::formatSource(const QString& text, const KMimeType::Ptr& mime, const QString& leftContext, const QString& rightContext) +{ + return formatSourceWithStyle( KDevelop::ICore::self()->sourceFormatterController()->styleForMimeType( mime ), text, mime, leftContext, rightContext ); +} + QList AStylePlugin::predefinedStyles() { QList styles; + AStyleFormatter fmt; + KDevelop::SourceFormatterStyle st = KDevelop::SourceFormatterStyle( "ANSI" ); st.setCaption( "ANSI" ); + fmt.predefinedStyle( "ANSI" ); + st.setContent( fmt.saveStyle() ); styles << st; st = KDevelop::SourceFormatterStyle( "GNU" ); st.setCaption( "GNU" ); + fmt.predefinedStyle( "GNU" ); + st.setContent( fmt.saveStyle() ); styles << st; st = KDevelop::SourceFormatterStyle( "Java" ); st.setCaption( "Java" ); + fmt.predefinedStyle( "Java" ); + st.setContent( fmt.saveStyle() ); styles << st; - st = KDevelop::SourceFormatterStyle( "KR" ); + st = KDevelop::SourceFormatterStyle( "K&R" ); st.setCaption( "Kernighan & Ritchie" ); + fmt.predefinedStyle( "K&R" ); + st.setContent( fmt.saveStyle() ); styles << st; st = KDevelop::SourceFormatterStyle( "Linux" ); st.setCaption( "Linux" ); + fmt.predefinedStyle( "Linux" ); + st.setContent( fmt.saveStyle() ); styles << st; return styles; } -void AStylePlugin::setStyle(const KDevelop::SourceFormatterStyle &style) -{ - currentStyle = style; - if( style.content().isEmpty() ) { - m_formatter->predefinedStyle( style.name() ); - } else { - m_formatter->loadStyle( style.content() ); - } -} - -KDevelop::SourceFormatterStyle AStylePlugin::style() const -{ - return currentStyle; -} - KDevelop::SettingsWidget* AStylePlugin::editStyleWidget(const KMimeType::Ptr &mime) { AStylePreferences::Language lang = AStylePreferences::CPP; diff -Nru kdevelop-3.9.98/formatters/astyle_plugin.h kdevelop-4.0.1/formatters/astyle_plugin.h --- kdevelop-3.9.98/formatters/astyle_plugin.h 2009-12-27 16:25:20.000000000 +0000 +++ kdevelop-4.0.1/formatters/astyle_plugin.h 2010-07-17 20:08:19.000000000 +0100 @@ -49,16 +49,15 @@ /** \return A map of predefined styles (a key and a caption for each type) */ virtual QList predefinedStyles(); - /** Load the predefined type of name \arg name, or if the first arg is empty, the style - * defined by the options string \arg content. - */ - virtual void setStyle(const KDevelop::SourceFormatterStyle &style); - - virtual KDevelop::SourceFormatterStyle style() const; /** \return The widget to edit a style. */ virtual KDevelop::SettingsWidget* editStyleWidget(const KMimeType::Ptr &mime); + + virtual QString formatSourceWithStyle(KDevelop::SourceFormatterStyle, const QString& text, + const KMimeType::Ptr &mime, + const QString& leftContext = QString(), + const QString& rightContext = QString() ); /** \return The text used in the config dialog to preview the current style. */ diff -Nru kdevelop-3.9.98/formatters/astyle_preferences.cpp kdevelop-4.0.1/formatters/astyle_preferences.cpp --- kdevelop-3.9.98/formatters/astyle_preferences.cpp 2009-12-27 16:25:20.000000000 +0000 +++ kdevelop-4.0.1/formatters/astyle_preferences.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -216,15 +216,10 @@ void AStylePreferences::updatePreviewText(bool emitChangedSignal) { Q_UNUSED(emitChangedSignal); - QString text; - int id = tabWidget->currentIndex(); - if(id == 0) - text = AStylePlugin::indentingSample(); + if(tabWidget->currentIndex() == 0) + emit previewTextChanged(AStylePlugin::indentingSample()); else - text = AStylePlugin::formattingSample(); - - QString output = m_formatter->formatSource(text); - emit previewTextChanged(output); + emit previewTextChanged(AStylePlugin::formattingSample()); } void AStylePreferences::currentTabChanged() diff -Nru kdevelop-3.9.98/formatters/astyle_preferences.ui kdevelop-4.0.1/formatters/astyle_preferences.ui --- kdevelop-3.9.98/formatters/astyle_preferences.ui 2009-04-13 11:38:48.000000000 +0100 +++ kdevelop-4.0.1/formatters/astyle_preferences.ui 2010-07-17 20:08:19.000000000 +0100 @@ -14,7 +14,7 @@ - 1 + 0 diff -Nru kdevelop-3.9.98/formatters/CMakeLists.txt kdevelop-4.0.1/formatters/CMakeLists.txt --- kdevelop-3.9.98/formatters/CMakeLists.txt 2009-10-20 22:07:52.000000000 +0100 +++ kdevelop-4.0.1/formatters/CMakeLists.txt 2010-07-17 20:08:19.000000000 +0100 @@ -56,3 +56,5 @@ install( FILES kdevastyle.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) install( FILES kdevindent.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) + +add_subdirectory(tests) \ No newline at end of file diff -Nru kdevelop-3.9.98/formatters/indent_plugin.cpp kdevelop-4.0.1/formatters/indent_plugin.cpp --- kdevelop-3.9.98/formatters/indent_plugin.cpp 2009-12-27 16:25:20.000000000 +0000 +++ kdevelop-4.0.1/formatters/indent_plugin.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -25,6 +25,8 @@ #include #include #include +#include +#include using namespace KDevelop; @@ -44,7 +46,8 @@ QString IndentPlugin::name() { - return "indent"; + // This needs to match the X-KDE-PluginInfo-Name entry from the .desktop file! + return "kdevindent"; } QString IndentPlugin::caption() @@ -79,19 +82,29 @@ return "C++"; } -QString IndentPlugin::formatSource(const QString& text, const KMimeType::Ptr&, const QString& leftContext, const QString& rightContext) +QString IndentPlugin::formatSourceWithStyle(SourceFormatterStyle style, const QString& text, const KMimeType::Ptr& mime, const QString& leftContext, const QString& rightContext) { + + if (style.content().isEmpty()) { + m_options.clear(); + if(style.name() == "KR") + m_options << "-kr"; + else if(style.name() == "orig") + m_options << "-orig"; + } + else + m_options = style.content().split(' '); KProcess proc; QTextStream ios(&proc); proc.setProgram("indent", m_options); proc.setOutputChannelMode(KProcess::MergedChannels); - + proc.start(); if(!proc.waitForStarted()) { kDebug() << "Unable to start indent" << endl; return text; } - + QString useText = text; //We can only respect the context if it is in a separate line if(leftContext.endsWith("\n")) @@ -99,7 +112,7 @@ if(rightContext.startsWith("\n")) useText = useText + rightContext; - + proc.write(useText.toLocal8Bit()); proc.closeWriteChannel(); if(!proc.waitForFinished()) { @@ -107,7 +120,7 @@ return text; } ///@todo Be able to detect errors in formatting, since indent returns the error as the output - + QStringList output = ios.readAll().split("\n"); ///@todo Correctly remove the contexts, if the context originally had a different ammount of lines @@ -123,6 +136,11 @@ return output.join("\n"); } +QString IndentPlugin::formatSource(const QString& text, const KMimeType::Ptr& mime, const QString& leftContext, const QString& rightContext) +{ + return formatSourceWithStyle( KDevelop::ICore::self()->sourceFormatterController()->styleForMimeType( mime ), text, mime, leftContext, rightContext ); +} + QList IndentPlugin::predefinedStyles() { QList styles; @@ -138,24 +156,6 @@ return styles; } -KDevelop::SourceFormatterStyle IndentPlugin::style() const -{ - return m_currentStyle; -} - -void IndentPlugin::setStyle(const KDevelop::SourceFormatterStyle &style) -{ - if (!style.content().isEmpty()) { - m_options.clear(); - if(style.name() == "KR") - m_options << "-kr"; - else if(style.name() == "orig") - m_options << "-orig"; - } - else - m_options = style.content().split(' '); -} - KDevelop::SettingsWidget* IndentPlugin::editStyleWidget(const KMimeType::Ptr &mime) { Q_UNUSED(mime); diff -Nru kdevelop-3.9.98/formatters/indent_plugin.h kdevelop-4.0.1/formatters/indent_plugin.h --- kdevelop-3.9.98/formatters/indent_plugin.h 2009-12-27 16:25:20.000000000 +0000 +++ kdevelop-4.0.1/formatters/indent_plugin.h 2010-07-17 20:08:19.000000000 +0100 @@ -43,15 +43,14 @@ */ virtual QString formatSource(const QString &text, const KMimeType::Ptr &mime, const QString& leftContext, const QString& rightContext); + virtual QString formatSourceWithStyle(KDevelop::SourceFormatterStyle, const QString& text, + const KMimeType::Ptr &mime, + const QString& leftContext = QString(), + const QString& rightContext = QString() ); + /** \return A map of predefined styles (a key and a caption for each type) */ virtual QList predefinedStyles(); - /** Load the predefined type of name \arg name, or if the first arg is empty, the style - * defined by the options string \arg content. - */ - virtual void setStyle(const KDevelop::SourceFormatterStyle& style); - - KDevelop::SourceFormatterStyle style() const; /** \return The widget to edit a style. */ diff -Nru kdevelop-3.9.98/formatters/kdevastyle.desktop kdevelop-4.0.1/formatters/kdevastyle.desktop --- kdevelop-3.9.98/formatters/kdevastyle.desktop 2010-01-19 12:39:48.000000000 +0000 +++ kdevelop-4.0.1/formatters/kdevastyle.desktop 2010-07-17 20:08:19.000000000 +0100 @@ -5,6 +5,7 @@ Comment=A plugin for formatting of sourcecode according to a specified set of rules Comment[ca]=Un connector per formatar el codi font d'acord a un conjunt especificat de regles Comment[ca@valencia]=Un connector per formatar el codi font d'acord a un conjunt especificat de regles +Comment[da]=Et plugin til at formatere kildekode ifølge et angivet sæt regler Comment[de]=Modul zum Formatieren von Quellcode nach bestimmten Vorschriften Comment[el]=Ένα πρόσθετο για τη μορφοποίηση πηγαίου κώδικα σύμφωνα με καθορισμένους κανόνες Comment[en_GB]=A plugin for formatting of sourcecode according to a specified set of rules @@ -24,6 +25,7 @@ Comment[pt]=Um 'plugin' de formatação do código-fonte, com base num conjunto de regras definido Comment[pt_BR]=Um plugin para formatar código-fonte de acordo com um conjunto de regras Comment[ru]=Модуль для форматирования кода по установленным правилам +Comment[sl]=Vstavek za oblikovanje izvorne kode po določenih pravilih Comment[sv]=Ett insticksprogram för formatering av källkod enligt en angiven uppsättning regler Comment[tr]=Belli kurallara göre kaynak kodları biçimlendirmeye yarayan bir eklenti Comment[uk]=Додаток для форматування коду у відповідності до вказаного набору правил @@ -33,6 +35,7 @@ Name=AStyle Formatter Backend Name[ca]=Dorsal del formatador AStyle Name[ca@valencia]=Dorsal del formatador AStyle +Name[da]=AStyle-backend til formatering Name[de]=AStyle-Formatierer Name[en_GB]=AStyle Formatter Backend Name[es]=Motor del formateador AStyle @@ -45,9 +48,11 @@ Name[nb]=AStyle bakgrunnsmotor for formattering Name[nds]=AStyle-Formateerhülpprogramm Name[nl]=Backend voor AStyle formatteerprogramma +Name[pl]=Moduł obsługi formatowania astyle Name[pt]=Infra-Estrutura de Formatação do AStyle Name[pt_BR]=Formatador AStyle Name[ru]=Механизм форматирования исходного кода AStyle +Name[sl]=Hrbtenica oblikovalnika AStyle Name[sv]=Astyle-formateringsgränssnitt Name[tr]=Astyle Biçimleyici Arka Ucu Name[uk]=Сервер форматування AStyle @@ -57,6 +62,7 @@ GenericName=Formatter Backend GenericName[ca]=Dorsal del formatador GenericName[ca@valencia]=Dorsal del formatador +GenericName[da]=Backend til formatering GenericName[de]=Formatierer GenericName[en_GB]=Formatter Backend GenericName[es]=Motor del formateador @@ -69,9 +75,11 @@ GenericName[nb]=Bakgrunnsmotor for formattering GenericName[nds]=Formateerhülpprogramm GenericName[nl]=Formatteer-backend +GenericName[pl]=Moduł obsługi formatowania GenericName[pt]=Infra-Estrutura de Formatação GenericName[pt_BR]=Formatador GenericName[ru]=Механизм форматирования исходного кода +GenericName[sl]=Hrbtenica oblikovalnika GenericName[sv]=Formateringsgränssnitt GenericName[tr]=Biçimleyici Arka Ucu GenericName[uk]=Сервер форматування @@ -81,7 +89,7 @@ ServiceTypes=KDevelop/Plugin X-KDE-Library=kdevastyle -X-KDevelop-Version=8 +X-KDevelop-Version=9 X-KDE-PluginInfo-Name=kdevastyle X-KDE-PluginInfo-Author=Cedric Pasteur, Matthias Hölzer-Klüpfel X-KDE-PluginInfo-License=LGPL diff -Nru kdevelop-3.9.98/formatters/kdevindent.desktop kdevelop-4.0.1/formatters/kdevindent.desktop --- kdevelop-3.9.98/formatters/kdevindent.desktop 2010-01-19 12:39:48.000000000 +0000 +++ kdevelop-4.0.1/formatters/kdevindent.desktop 2010-07-17 20:08:19.000000000 +0100 @@ -5,6 +5,7 @@ Comment=A plugin for formatting C files using GNU indent Comment[ca]=Un connector per formatar fitxers C usant sagnat GNU Comment[ca@valencia]=Un connector per formatar fitxers C usant sagnat GNU +Comment[da]=Et plugin til formatering af C-filer som bruger GNU indent Comment[de]=Modul zum Formatieren von C-Dateien mit GNU Indent Comment[el]=Ένα πρόσθετο μορφοποίησης αρχείων C με χρήση εσοχών GNU Comment[en_GB]=A plugin for formatting C files using GNU indent @@ -13,7 +14,7 @@ Comment[fi]=Lisäosa C-tiedostojen muotoiluun käyttäen GNU indent-ohjelmaa Comment[fr]=Un module externe pour le formatage de fichiers C utilisant l'indentation GNU Comment[gl]=Unha extensión para formatar os ficheiros en C empregando o GNU indent -Comment[it]=Un'estensione per la formattazione di file in C che usa GNU ident +Comment[it]=Un'estensione per la formattazione di file in C che usa GNU indent Comment[lv]=Spraudnis C failu formatēšanai izmantojot GNU indent Comment[nb]=Et programtillegg for formattering av C-filer ved bruk av GNU indent Comment[nds]=En Moduul, dat C-Dateien mit "indent" vun GNU formateert @@ -22,6 +23,7 @@ Comment[pt]=Um 'plugin' para formatar ficheiros em C com o 'indent' da GNU Comment[pt_BR]=Um plugin para formatar arquivos C usando o GNU Indent Comment[ru]=Механизм форматирования файлов на C - GNU indent +Comment[sl]=Vstavek za oblikovanje izvorne kode C z GNU Indent Comment[sv]=Ett insticksprogram för att formatera C-filer med GNU indent Comment[tr]=GNU indent kullanan, C dosyalarını biçimlendirmek için kullanılan bir eklenti Comment[uk]=Додаток для форматування файлів мовою C за допомогою GNU indent @@ -31,6 +33,7 @@ Name=Indent Formatter Backend Name[ca]=Dorsal del formatador de sagnat Name[ca@valencia]=Dorsal del formatador de sagnat +Name[da]=Backend til indrykningsformatering Name[de]=Indent-Formatierer Name[en_GB]=Indent Formatter Backend Name[es]=Motor del formateador Indent @@ -42,9 +45,11 @@ Name[nb]=Indent bakgrunnsmotor for formattering Name[nds]=Inrück-Formateerhölpprogramm Name[nl]=Backend voor indenteringsformattering +Name[pl]=Moduł obsługi formatowania za pomocą indent Name[pt]=Infra-Estrutura de Formatação do Indent -Name[pt_BR]=Formatador de Indentação +Name[pt_BR]=Infraestrutura do formatador de recuo Name[ru]=Механизм форматирования исходного кода Indent +Name[sl]=Hrbtenica oblikovalnika Indent Name[sv]=Indent-formateringsgränssnitt Name[tr]=Girinti Biçimlendirici Arka Ucu Name[uk]=Сервер форматування Indent @@ -54,7 +59,7 @@ ServiceTypes=KDevelop/Plugin X-KDE-Library=kdevindent -X-KDevelop-Version=8 +X-KDevelop-Version=9 X-KDE-PluginInfo-Name=kdevindent X-KDE-PluginInfo-Author=Cedric Pasteur X-KDE-PluginInfo-License=LGPL diff -Nru kdevelop-3.9.98/formatters/tests/astyletest.cpp kdevelop-4.0.1/formatters/tests/astyletest.cpp --- kdevelop-3.9.98/formatters/tests/astyletest.cpp 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/formatters/tests/astyletest.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,99 @@ +/* + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "astyletest.h" + +#include +#include + +#include "../astyle_formatter.h" + +QTEST_MAIN(AstyleTest) + +void AstyleTest::initTestCase() +{ + m_formatter = new AStyleFormatter; + ///TODO: probably all settings should be covered by tests + /// or at least set so we can be sure about what we + /// actually test... + m_formatter->setSpaceIndentation(4); +} + +void AstyleTest::renameVariable() +{ + // think this: + // int asdf = 1; + // e.g. asdf was before something different and got renamed + QString formattedSource = m_formatter->formatSource( + "asdf", "int ", " = 1;" + ); + qDebug() << "formatted source:" << formattedSource; + QCOMPARE(formattedSource, QString("asdf")); + + // int main() { + // if(asdf){}} + formattedSource = m_formatter->formatSource( + "asdf", "int main(){\n if(", "){}}" + ); + qDebug() << "formatted source:" << formattedSource; + QCOMPARE(formattedSource, QString("asdf")); +} + +void AstyleTest::overrideHelper() +{ + // think this: + // virtual void asdf(); + // gets included into a class + + // test1: not indented + QString formattedSource = m_formatter->formatSource( + "virtual void asdf();", "class asdf {\n int bar();\n", "\n};" + ); + qDebug() << "formatted source:" << formattedSource; + QCOMPARE(formattedSource, QString(" virtual void asdf();")); + + // test2: already indented + formattedSource = m_formatter->formatSource( + "virtual void asdf();", "class asdf {\n int bar();\n ", "\n};" + ); + qDebug() << "formatted source:" << formattedSource; + QCOMPARE(formattedSource, QString("virtual void asdf();")); +} + +void AstyleTest::varTypeAssistant() +{ + // think this: + // asdf = 1; + // and you execute the assitant to get: + // int asdf = 1; + + // test1: already indented + QString formattedSource = m_formatter->formatSource( + "int ", "int main() {\n ", "asdf = 1;\n}\n" + ); + qDebug() << "formatted source:" << formattedSource; + QCOMPARE(formattedSource, QString("int ")); + + // test2: not yet indented + formattedSource = m_formatter->formatSource( + "int ", "int main() {\n", "asdf = 1;\n}\n" + ); + qDebug() << "formatted source:" << formattedSource; + QCOMPARE(formattedSource, QString(" int ")); + +} + +#include "astyletest.moc" \ No newline at end of file diff -Nru kdevelop-3.9.98/formatters/tests/astyletest.h kdevelop-4.0.1/formatters/tests/astyletest.h --- kdevelop-3.9.98/formatters/tests/astyletest.h 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/formatters/tests/astyletest.h 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,39 @@ +/* + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef ASTYLETEST_H +#define ASTYLETEST_H + +#include + +class AStyleFormatter; + +class AstyleTest : public QObject +{ + Q_OBJECT + +private slots: + void initTestCase(); + + void renameVariable(); + void overrideHelper(); + void varTypeAssistant(); + +private: + AStyleFormatter* m_formatter; +}; + +#endif // ASTYLETEST_H diff -Nru kdevelop-3.9.98/formatters/tests/CMakeLists.txt kdevelop-4.0.1/formatters/tests/CMakeLists.txt --- kdevelop-3.9.98/formatters/tests/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/formatters/tests/CMakeLists.txt 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,16 @@ +set(astyletest_SRCS astyletest.cpp + ../astyle_formatter.cpp + ../lib/ASFormatter.cpp + ../lib/ASResource.cpp + ../lib/ASEnhancer.cpp + ../lib/ASBeautifier.cpp + ../lib/astyle_stringiterator.cpp +) + +kde4_add_unit_test(astyletest ${astyletest_SRCS}) +target_link_libraries(astyletest + ${KDE4_KDECORE_LIBS} + ${QT_QTTEST_LIBRARY} + ${KDEVPLATFORM_INTERFACES_LIBRARIES} +) + diff -Nru kdevelop-3.9.98/.gitignore kdevelop-4.0.1/.gitignore --- kdevelop-3.9.98/.gitignore 2009-04-13 11:14:26.000000000 +0100 +++ kdevelop-4.0.1/.gitignore 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -.kdev4 diff -Nru kdevelop-3.9.98/INSTALL kdevelop-4.0.1/INSTALL --- kdevelop-3.9.98/INSTALL 2010-02-06 14:39:22.000000000 +0000 +++ kdevelop-4.0.1/INSTALL 2010-07-17 20:08:19.000000000 +0100 @@ -1,22 +1,151 @@ -Basic Installation -================== - -First make sure you have the kdevplatform module installed, it's also available -from KDE's subversion repository in trunk/extragear/sdk/kdevplatform. - -Create a build directory, for example: -mkdir build - -Then run cmake and point it to the sources like this: -cmake ../ - -A useful option to specify for the cmake command is CMAKE_INSTALL_PREFIX so -that you can tell cmake where to install the software. For example, to install -in /usr/kde/4 you would run: -cmake .. -DCMAKE_INSTALL_PREFIX=/usr/kde/4 - -Afterwards run: -make - -And to install run: -make install +NOTE: This is a copy of a page in our Wiki, please consult it for the most +recent version of this document. See: +http://www.kdevelop.org/mediawiki/index.php?title=KDevelop_4/compiling&action=edit + +The way to download, compile, install and run KDevelop depends on how you want +to download it and where do you want to install it to. +So follow the step by step instructions below. + +== 1. Get the requirements == +:Make sure to install the required KDE development packages, see +http://www.kdevelop.org/mediawiki/index.php/KDevelop_4/requirements +for a list of requirements. +In particular make sure to install KDE4 kdelibs development packages: +kdelibs-devel, kdeworkspace-devel (or build from sources). + +:'''WARNING:''' You have to remove all KDevelop/KDevplatform/Sublime packages +provided by your distribution. If you don't do that, binary compatibility issues +will eventually lead to crashes and undefined behavior. To make sure, you can +search for KDevelop libraries with this command: + +:
find /usr/ -type f -name "*kdev*.so*"
+ +:If no results are returned, you should be on the safe side. + +== 2. Get the sources (assumes ''$HOME/src'' but you can replace it with +something else) == +* By downloading it to ''$HOME/src'' +** download ''kdevplatform.tar.bz2'' and ''kdevelop.tar.bz2'' from +http://download.kde.org/download.php?url=unstable/kdevelop/ +** unpack them: + cd $HOME/src + tar xvjf kdevplatform.tar.bz2 + tar xvjf kdevelop.tar.bz2 + +* '''Or''', by getting the latest sources directly out of the SVN server + svn co svn://anonsvn.kde.org/home/kde/trunk/extragear/sdk/kdevplatform $HOME/src/kdevplatform + svn co svn://anonsvn.kde.org/home/kde/trunk/extragear/sdk/kdevelop $HOME/src/kdevelop + +== 3. Configure and install KDevPlatform == + +::In both cases you need set the KDEDIRS environment variable to point to the +installation directory of both KDE4 and KDevPlatform. +::This will tell KDE core components where to search for plugins and other data +related to KDE apps and contains just a list of paths (aka prefixes) where KDE +libraries and/or applications have been installed. +::Assuming that you have the KDE4 libraries installed in ''/usr'' (these are +often from packages and installed in ''/usr'' or ''/opt/kde'' and is distro +specific, if unsure ask your distro where it is), you'll have to append it to +the KDEDIRS below. + +* To be installed with the system libraries (you '''need root permissions''' to +do this) + mkdir -p $HOME/src/kdevplatform/build + cd $HOME/src/kdevplatform/build + cmake ../ + make + sudo make install + export KDEDIRS=/usr/local:/usr + kbuildsycoca4 +* '''Or''', to be installed locally on ''$HOME/kdevelop4'' but you can replace +it with something else (you do '''not need root permissions''' to do this) + mkdir -p $HOME/src/kdevplatform/build + cd $HOME/src/kdevplatform/build + cmake -DCMAKE_INSTALL_PREFIX=$HOME/kdevelop4 ../ + make + make install + export KDEDIRS=$HOME/kdevelop4:/usr + kbuildsycoca4 + +== 4. Configure and install KDevelop == +* To be installed with the system libraries (you '''need root permissions''' to +do this) + mkdir -p $HOME/src/kdevelop/build + cd $HOME/src/kdevelop/build + cmake ../ + make + sudo make install + kbuildsycoca4 +* '''Or''', to be installed locally on ''$HOME/kdevelop4'' but you can replace +it with something else (you do '''not need root permissions''' to do this) + mkdir -p $HOME/src/kdevelop/build + cd $HOME/src/kdevelop/build + cmake -DCMAKE_PREFIX_PATH=$HOME/kdevelop4 -DCMAKE_INSTALL_PREFIX=$HOME/kdevelop4 ../ + make + make install + +::In this case you need set the KDEDIRS environment variable to point to the +installation directory of both KDE4, KDevPlatform and KDevelop. + +::This will tell KDE core components where to search for plugins and other data +related to KDE apps and contains just a list of paths (aka prefixes) where KDE +libraries and/or applications have been installed. + +::Assuming that you have the KDE4 libraries installed in ''/usr'' (these are +often from packages and installed in ''/usr'' or ''/opt/kde'' and is distro +specific, if unsure ask your distro where it is) and that you want to install +KDevelop4 into ''$HOME/kdevelop4'' then you need to: + + export KDEDIRS=$HOME/kdevelop4:/usr + kbuildsycoca4 + +== 5. Get and install plugins (optional) == + +If you need extra functionality, you can get and install additional plugins for +KDevelop4 at [[KDevelop 4/compiling/plugins]]. + + +== 7. Run KDevelop == +* If installed in the system + kdevelop +* '''Or''', if installed in ''$HOME/kdevelop4'' local directory + $HOME/kdevelop4/bin/kdevelop + +This assumes you’re running KDevelop4 from a terminal and not via the run dialog +or via a menu entry, if you want that to work you need to find out how to set +environment for the whole X11 session – thats usually distro-specific. + +== 8. Contact the development team, or report bugs or wishes == +:If you find any compile problems with KDevelop4 please don't report them on +bugs.kde.org, please report them on our +[http://www.kdevelop.org/index.html?filename=mailinglist.html developer +mailing-list] instead. + +:The [http://bugs.kde.org/ bugzilla bug database] is only for bugs, and +'''not''' for compilation issues. + +== 9. Keeping it up-to-date with the latest fixes == +:If you got the sources from SVN on step 2. then you can update by issuing the +following commands: +* with '''root permissions''' do this + cd $HOME/src/kdevelop/build && sudo make uninstall + cd $HOME/src/kdevplatform/build && sudo make uninstall + svn up .. && make && sudo make install + kbuildsycoca4 + cd $HOME/src/kdevelop/build + svn up .. && make && sudo make install + kbuildsycoca4 +* '''Or''' if installed in local directory + cd $HOME/src/kdevelop/build && make uninstall + cd $HOME/src/kdevplatform/build && make uninstall + svn up .. && make && make install + kbuildsycoca4 + cd $HOME/src/kdevelop/build + svn up .. && make && make install + kbuildsycoca4 + +You can also see the +[http://www.kdevelop.org/index.html?filename=4.0/ChangeLog_kdevplatform.html +latest changes and bug fixes of KDevPlatform] and the +[http://www.kdevelop.org/index.html?filename=4.0/ChangeLog.html latest changes +and fixes of KDevelop] on-line, updated every hour. diff -Nru kdevelop-3.9.98/kdevelop_bash_completion kdevelop-4.0.1/kdevelop_bash_completion --- kdevelop-3.9.98/kdevelop_bash_completion 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/kdevelop_bash_completion 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,38 @@ +# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- +# ex: ts=8 sw=8 noet filetype=sh +# +# bash completion script for KDevelop4 +# +# Copyright 2010 Andreas Pakulat +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Library 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 Library General Public +# License along with this program; if not, write to the +# Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +have kdevelop && _kdevelop() +{ + local cur prev + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + case $prev in + -s) + COMPREPLY=( $( kdevelop --sessions 2>/dev/null | egrep "^{" | sed 's/:.*//' | sed 's/\s*\[running\]//' | tr '\n' ' ' ) ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- $cur ) ) + return 0 + ;; + esac + +} && +complete -F _kdevelop kdevelop diff -Nru kdevelop-3.9.98/kdevelop.kdevprj kdevelop-4.0.1/kdevelop.kdevprj --- kdevelop-3.9.98/kdevelop.kdevprj 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/kdevelop.kdevprj 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,1464 @@ +# KDE Config File +[kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/main.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/kdeobjcsdiappwizardplugin.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/widgets/qextmdi/include/qextmdilistiterator.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/widgets/qextmdi/include/qextmdichildfrmcaption.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/projectoptionsdlg.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/qextmdimainfrmview/mdiview.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/qextmdimainfrmview/mdiframe.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/qextmdimainfrmview/kdevmdimainfrmcomponent.rc] +install_location= +dist=true +install=false +type=DATA +[kdevelop/parts/dbg/disassemble.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/cvs/commitdialog.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/kwrite_part/kwview.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/kdevelopcore.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/main.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/plugin/projectmanagement/Makefile.am] +sub_dirs=kdeobjcsdi_appwizard,kdejavasdi_appwizard, +type=normal +[kdevelop/parts/qextmdimainfrmview/main.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/editor/editorfactory.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/dbgpsdlg.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/buglist/buglist.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/buglist/bug.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/lib/general/processview.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/lib/general/cproject.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/kdevelopfactory.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/memview.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/dbg/framestack.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/lib/general/kdevviewhandler.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/javasupport/classparser.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/widgets/qextmdi/src/qextmdimainfrm.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/grepview/main.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/grepview/grepview.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/caddnewtranslationdlg.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/kdeobjcprojectspace/kdevkdeobjcprojectspaceui.rc] +install_location= +dist=true +install=false +type=DATA +[kdevelop/widgets/qextmdi/include/qextmdimainfrm.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/qextmdimainfrmview/mdiframe.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/editor/editormgr.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/breakpoint.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/cppsupport/main.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/classview/main.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/lib/general/cproject.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/kwrite_part/ktextprint.h] +install_location= +dist=true +install=false +type=HEADER +[Config for BinMakefileAm] +ldflags= +addcxxflags= +ldadd=-lkdeui -lkdecore -lqt -lXext -lX11 +cxxflags=-O0 -g3 -Wall +bin_program=.libs/kdevelop +[kdevelop/parts/kdejavaprojectspace/kdejavaprojectspace.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/widgets/qextmdi/res/win_undockbutton.xpm] +install_location= +dist=true +install=false +type=DATA +[kdevelop/widgets/qextmdi/res/kde_closebutton.xpm] +install_location= +dist=true +install=false +type=DATA +[kdevelop/parts/outputviews/appoutputwidget.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/dbgcontroller.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/buglist/buglistcomponent.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/buglist/buglistcomponent.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/plugins/prjstat/prjstatplugin.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/doctreeview/doctreewidget.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/doctreeview/cdoctreepropdlg.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/breakpointdialog.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/Makefile.am] +files=kdevelop/kdevelop-setup.desktop,kdevelop/kdevelop.desktop,kdevelop/KDevelopIface.h,kdevelop/kdevelopifaceimpl.cpp,kdevelop/kdevelopifaceimpl.h,kdevelop/kdeveloprc,kdevelop/kdevplugin.cpp,kdevelop/kdevplugin.h,kdevelop/newprojectdlg.cpp,kdevelop/newprojectdlg.h,kdevelop/newprojectdlgbase.cpp,kdevelop/newprojectdlgbase.h,kdevelop/projectoptionsdlg.cpp,kdevelop/projectoptionsdlg.h,kdevelop/x-kdevelop-project.desktop,kdevelop/kdevelop.cpp,kdevelop/kdevelop.h,kdevelop/kdevelopfactory.cpp,kdevelop/kdevelopfactory.h,kdevelop/kdevelopui.rc,kdevelop/kdevelopcore.cpp,kdevelop/kdevelopcore.h,kdevelop/kdeveditordocument.cpp,kdevelop/kdevelopcomponentviewhandler.desktop, +type=prog_main +sub_dirs=kwrite_part,plugins,print,vc,dbg,widgets,parts,lib,plugin, +[kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/Makefile.am] +install_location= +dist=true +files=kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/kdejavasdiappwizardplugin.cpp,kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/kdejavasdiappwizardplugin.h,kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/Makefile.am,kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/kdevkdejavasdiappwizard.desktop,kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/main.cpp,kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/main.h, +install=false +sub_dirs=res, +type=static_library +[kdevelop/widgets/qextmdi/res/kde_undockbutton.xpm] +install_location= +dist=true +install=false +type=DATA +[kdevelop/widgets/qextmdi/res/kde_maxbutton.xpm] +install_location= +dist=true +install=false +type=DATA +[kdevelop/parts/cppsupport/classparser.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/cppsupport/caddclassattributedlg.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/lib/general/processview.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/lib/general/ctoolclass.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/kwrite_part/kwdoc.h] +install_location= +dist=true +install=false +type=HEADER +[doc/Makefile.am] +type=normal +sub_dirs=kdevelop2 +[kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/res/Makefile.am] +install_location= +dist=true +files=kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/res/Makefile.am,kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/res/kdejavasdi.tar.gz,kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/res/normalApp.bmp, +install=false +sub_dirs= +type=DATA +[kdevelop/plugin/Makefile.am] +sub_dirs=projectmanagement, +type=normal +[kdevelop/widgets/qextmdi/src/qextmdichildarea.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/widgets/qextmdi/include/qextmdinulliterator.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/projectoptionsdlg.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/qextmdimainfrmview/kdevmdimainfrmcomponent.desktop] +install_location= +dist=true +install=false +type=DATA +[kdevelop/parts/doctreeview/doctreeconfigwidget.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/cppsupport/caddclassmethoddlg.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/classview/main.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/lib/kidetexteditor/Makefile.am] +files=kdevelop/lib/kidetexteditor/kidetexteditor.cpp,kdevelop/lib/kidetexteditor/kidetexteditor.h, +type=static_library +sub_dirs= +[kdevelop/kwrite_part/undohistory.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/kstartuplogo.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/kdevelop-setup.desktop] +install_location= +dist=true +install=false +type=DATA +[kdevelop/widgets/qextmdi/include/qextmdichildarea.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/memview.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/kdevplugin.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/javasupport/kdevjavasupport.desktop] +install_location= +dist=true +install=false +type=DATA +[kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/res/kdeobjcsdi.tar.gz] +install_location= +dist=true +install=false +type=DATA +[kdevelop/widgets/qextmdi/src/Makefile.am] +files=kdevelop/widgets/qextmdi/src/qextmdichildarea.cpp,kdevelop/widgets/qextmdi/src/qextmdichildfrm.cpp,kdevelop/widgets/qextmdi/src/qextmdichildfrmcaption.cpp,kdevelop/widgets/qextmdi/src/qextmdichildview.cpp,kdevelop/widgets/qextmdi/src/qextmdimainfrm.cpp,kdevelop/widgets/qextmdi/src/qextmditaskbar.cpp, +type=static_library +sub_dirs= +[kdevelop/widgets/qextmdi/res/filenew.xpm] +install_location= +dist=true +install=false +type=DATA +[kdevelop/parts/outputviews/main.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/grepview/grepwidget.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/dbg/dbgpsdlg.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/dbgcontroller.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/dbgcommand.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/cvs/main.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/lib/general/kdevcomponent.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/kwrite_part/highlight.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/kdevelopifaceimpl.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/cnewfiledlg.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/javasupport/main.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/x-kdevelop-project.desktop] +install_location= +dist=true +install=false +type=DATA +[kdevelop/widgets/dockwidgets/Makefile.am] +files= +type=static_library +sub_dirs= +[kdevelop/parts/cvs/main.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/cppsupport/cppsupport.cpp] +install_location= +dist=true +install=false +type=SOURCE +[LFV Groups] +icons (xpm)=*.xpm, +XML GUI rc-files=*.rc, +Dialogs=*.kdevdlg +Others=* +Translations=*.po +groups=icons (xpm),XML GUI rc-files,desktop-Files,Headers,Sources,Dialogs,Translations,Others, +desktop-Files=*.desktop, +Sources=*.cpp,*.c,*.cc,*.C,*.cxx,*.ec,*.ecpp,*.lxx,*.l++,*.ll,*.l +Headers=*.h,*.hxx,*.hpp,*.H +[kdevelop/parts/javasupport/javaaddclassattributedlg.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/res/Makefile.am] +install_location= +dist=true +files=kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/res/Makefile.am,kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/res/kdeobjcsdi.tar.gz,kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/res/normalApp.bmp, +install=false +sub_dirs= +type=DATA +[kdevelop/widgets/checklistbox/Makefile.am] +files= +type=static_library +sub_dirs= +[kdevelop/parts/outputviews/Makefile.am] +files=kdevelop/parts/outputviews/main.h,kdevelop/parts/outputviews/main.cpp,kdevelop/parts/outputviews/outputviews.h,kdevelop/parts/outputviews/outputviews.cpp,kdevelop/parts/outputviews/appoutputwidget.cpp,kdevelop/parts/outputviews/appoutputwidget.h,kdevelop/parts/outputviews/makewidget.cpp,kdevelop/parts/outputviews/makewidget.h, +type=static_library +sub_dirs= +[kdevelop/parts/dbg/gdbparser.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/dbg/gdbcommand.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/dbg/dbgfactory.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/breakpointdialog.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/cppsupport/ProgrammingByContract.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/classview/classview.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/kwrite_part/kwdoc.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/widgets/qextmdi/res/win_minbutton.xpm] +install_location= +dist=true +install=false +type=DATA +[kdevelop/parts/outputviews/main.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/lib/general/ctoolclass.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/lib/general/Makefile.am] +files=kdevelop/lib/general/kdevcomponent.h,kdevelop/lib/general/kdevcomponent.cpp,kdevelop/lib/general/cproject.cpp,kdevelop/lib/general/cproject.h,kdevelop/lib/general/ctreehandler.h,kdevelop/lib/general/kdevlanguagesupport.cpp,kdevelop/lib/general/kdevlanguagesupport.h,kdevelop/lib/general/kdevversioncontrol.cpp,kdevelop/lib/general/kdevversioncontrol.h,kdevelop/lib/general/processview.cpp,kdevelop/lib/general/processview.h,kdevelop/lib/general/ctoolclass.cpp,kdevelop/lib/general/ctoolclass.h,kdevelop/lib/general/kdevviewhandler.h,kdevelop/lib/general/kdevelopcorebase.h,kdevelop/lib/general/kdevelopcorebase.cpp +type=static_library +sub_dirs= +[kdevelop/kwrite_part/kwrite_factory.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/kdeobjcprojectspace/Makefile.am] +install_location= +files=kdevelop/parts/kdeobjcprojectspace/Makefile.am,kdevelop/parts/kdeobjcprojectspace/kdeobjcprojectspace.cpp,kdevelop/parts/kdeobjcprojectspace/kdeobjcprojectspace.h,kdevelop/parts/kdeobjcprojectspace/kdevkdeobjcprojectspace.desktop,kdevelop/parts/kdeobjcprojectspace/kdevkdeobjcprojectspaceui.rc,kdevelop/parts/kdeobjcprojectspace/main.cpp,kdevelop/parts/kdeobjcprojectspace/main.h, +dist=true +install=false +type=static_library +sub_dirs= +[kdevelop/widgets/qextmdi/include/qextmdichildfrm.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/plugins/prjstat/prjstatplugin.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/dbgmanager.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/cvs/cvsinterface.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/buglist/buglist.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/kwrite_part/kwview.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/kwrite_part/kwdialog.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/kdevelop.desktop] +install_location= +dist=true +install=false +type=DATA +[kdevelop/kdeveditordocument.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/kdejavaprojectspace/main.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/kdeobjcprojectspace/kdevkdeobjcprojectspace.desktop] +install_location= +dist=true +install=false +type=DATA +[kdevelop/widgets/qextmdi/res/kde_minbutton.xpm] +install_location= +dist=true +install=false +type=DATA +[kdevelop/parts/outputviews/outputviews.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/doctreeview/doctreeconfigwidget.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/cppsupport/Makefile.am] +files=kdevelop/parts/cppsupport/caddclassattributedlg.cpp,kdevelop/parts/cppsupport/caddclassattributedlg.h,kdevelop/parts/cppsupport/caddclassmethoddlg.cpp,kdevelop/parts/cppsupport/caddclassmethoddlg.h,kdevelop/parts/cppsupport/classparser.cpp,kdevelop/parts/cppsupport/classparser.h,kdevelop/parts/cppsupport/cppsupport.cpp,kdevelop/parts/cppsupport/cppsupport.h,kdevelop/parts/cppsupport/main.cpp,kdevelop/parts/cppsupport/main.h,kdevelop/parts/cppsupport/ProgrammingByContract.h,kdevelop/parts/cppsupport/tokenizer.cpp,kdevelop/parts/cppsupport/tokenizer.h, +type=static_library +sub_dirs= +[kdevelop/parts/kdeobjcprojectspace/main.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/widgets/qextmdi/include/Makefile.am] +files=kdevelop/widgets/qextmdi/include/kextmdimainfrm.h,kdevelop/widgets/qextmdi/include/qextmdichildarea.h,kdevelop/widgets/qextmdi/include/qextmdichildfrm.h,kdevelop/widgets/qextmdi/include/qextmdichildfrmcaption.h,kdevelop/widgets/qextmdi/include/qextmdichildview.h,kdevelop/widgets/qextmdi/include/qextmdidefines.h,kdevelop/widgets/qextmdi/include/qextmdiiterator.h,kdevelop/widgets/qextmdi/include/qextmdilistiterator.h,kdevelop/widgets/qextmdi/include/qextmdimainfrm.h,kdevelop/widgets/qextmdi/include/qextmdinulliterator.h,kdevelop/widgets/qextmdi/include/qextmditaskbar.h, +type=normal +sub_dirs= +[kdevelop/vc/Makefile.am] +files= +type=static_library +sub_dirs= +[kdevelop/parts/dbg/brkptmanager.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/cppsupport/cppsupport.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/main.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/kdeveloprc] +install_location= +dist=true +install=false +type=DATA +[kdevelop/kdevelop.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/kdeobjcprojectspace/main.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/res/normalApp.bmp] +install_location= +dist=true +install=false +type=DATA +[kdevelop/lib/general/kdevversioncontrol.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/lib/general/kdevelopcorebase.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/KDevelopIface.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/javasupport/tokenizer.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/widgets/qextmdi/include/qextmdichildview.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/plugins/prjstat/Makefile.am] +files=kdevelop/plugins/prjstat/prjstatplugin.cpp,kdevelop/plugins/prjstat/prjstatplugin.h +type=static_library +sub_dirs= +[kdevelop/parts/grepview/grepdlg.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/cppsupport/tokenizer.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/newprojectdlg.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/lib/general/kdevlanguagesupport.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/javasupport/classparser.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/javasupport/javaaddclassattributedlg.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/javasupport/javasupport.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/kdejavaprojectspace/Makefile.am] +install_location= +files=kdevelop/parts/kdejavaprojectspace/Makefile.am,kdevelop/parts/kdejavaprojectspace/kdejavaprojectspace.cpp,kdevelop/parts/kdejavaprojectspace/kdejavaprojectspace.h,kdevelop/parts/kdejavaprojectspace/kdevkdejavaprojectspace.desktop,kdevelop/parts/kdejavaprojectspace/kdevkdejavaprojectspaceui.rc,kdevelop/parts/kdejavaprojectspace/main.cpp,kdevelop/parts/kdejavaprojectspace/main.h, +dist=true +install=false +type=static_library +sub_dirs= +[kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/main.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/kdejavasdiappwizardplugin.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/vartree.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/dbg/stty.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/newprojectdlgbase.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/newprojectdlg.ui] +install_location= +dist=true +install=false +type=DATA +[kdevelop/parts/javasupport/javaaddclassmethoddlg.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/qextmdimainfrmview/main.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/outputviews/outputviews.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/outputviews/makewidget.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/grepview/grepview.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/grepview/Makefile.am] +files=kdevelop/parts/grepview/main.h,kdevelop/parts/grepview/main.cpp,kdevelop/parts/grepview/grepview.h,kdevelop/parts/grepview/grepview.cpp,kdevelop/parts/grepview/grepconfigwidget.cpp,kdevelop/parts/grepview/grepconfigwidget.h,kdevelop/parts/grepview/grepdlg.cpp,kdevelop/parts/grepview/grepdlg.h,kdevelop/parts/grepview/grepwidget.cpp,kdevelop/parts/grepview/grepwidget.h, +type=static_library +sub_dirs= +[kdevelop/parts/editor/editormgr.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/doctreeview/main.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/doctreeview/doctreewidget.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/disassemble.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/buglist/bugcounter.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/lib/kidetexteditor/kidetexteditor.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/lib/general/ctreehandler.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/brkptmanager.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/lib/Makefile.am] +type=normal +sub_dirs=general +[kdevelop/kwrite_part/kwdialog.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/kwrite_part/Makefile.am] +files=kdevelop/kwrite_part/highlight.cpp,kdevelop/kwrite_part/ktextprint.cpp,kdevelop/kwrite_part/kwdoc.cpp,kdevelop/kwrite_part/kwview.cpp,kdevelop/kwrite_part/undohistory.cpp,kdevelop/kwrite_part/kwdialog.cpp kdevelop/kwrite_part/kwrite_factory.cpp,kdevelop/kwrite_part/highlight.h,kdevelop/kwrite_part/ktextprint.h,kdevelop/kwrite_part/kwdoc.h,kdevelop/kwrite_part/kwview.h,kdevelop/kwrite_part/undohistory.h,kdevelop/kwrite_part/kwdialog.h kdevelop/kwrite_part/kwrite_factory.h, +type=static_library +sub_dirs= +[kdevelop/parts/javasupport/tokenizer.l] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/kdejavaprojectspace/main.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/dbg/dbgtoolbar.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/kwrite_part/kwrite_factory.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/kdejavaprojectspace/kdevkdejavaprojectspaceui.rc] +install_location= +dist=true +install=false +type=DATA +[kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/kdeobjcsdiappwizardplugin.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/res/normalApp.bmp] +install_location= +dist=true +install=false +type=DATA +[kdevelop/widgets/qextmdi/res/win_closebutton.xpm] +install_location= +dist=true +install=false +type=DATA +[kdevelop/widgets/qextmdi/include/qextmditaskbar.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/widgets/Makefile.am] +type=normal +sub_dirs=checklistbox,qextmdi,dockwidgets, +[kdevelop/parts/classview/classactions.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/buglist/main.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/lib/general/kdevlanguagesupport.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/kdevelopfactory.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/res/kdejavasdi.tar.gz] +install_location= +dist=true +install=false +type=DATA +[kdevelop/widgets/qextmdi/res/win_restorebutton.xpm] +install_location= +dist=true +install=false +type=DATA +[kdevelop/widgets/qextmdi/include/qextmdiiterator.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/print/Makefile.am] +files= +type=static_library +sub_dirs= +[kdevelop/parts/qextmdimainfrmview/mdimainfrmcomponent.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/cppsupport/tokenizer.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/buglist/main.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/kwrite_part/undohistory.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/ckdevelop_project.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/kdeobjcprojectspace/kdeobjcprojectspace.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/widgets/qextmdi/src/qextmdichildfrm.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/widgets/qextmdi/res/win_maxbutton.xpm] +install_location= +dist=true +install=false +type=DATA +[kdevelop/plugins/pluginmanagerdlg.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/outputviews/appoutputwidget.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/grepview/grepwidget.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/editor/editorfactory.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/dbg/dbgcommand.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/buglist/bugedit.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/kdevelopcomponentviewhandler.desktop] +install_location= +dist=true +install=false +type=DATA +[kdevelop/plugins/Makefile.am] +files=kdevelop/plugins/pluginmanagerdlg.cpp,kdevelop/plugins/pluginmanagerdlg.h, +type=static_library +sub_dirs=prjstat +[kdevelop/parts/dbg/gdbparser.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/mdiframe.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/lib/general/kdevelopcorebase.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/kwrite_part/highlight.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/kdeobjcprojectspace/kdeobjcprojectspace.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/main.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/widgets/qextmdi/Makefile.am] +files= +type=static_library +sub_dirs=src,include,res, +[kdevelop/parts/grepview/grepconfigwidget.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/gdbcontroller.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/gdbcontroller.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/dbg/dbgfactory.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/dbg/Makefile.am] +files=kdevelop/parts/dbg/dbgmanager.cpp,kdevelop/parts/dbg/dbgmanager.h,kdevelop/parts/dbg/dbgfactory.cpp,kdevelop/parts/dbg/dbgfactory.h,kdevelop/parts/dbg/disassemble.h,kdevelop/parts/dbg/memview.h,kdevelop/parts/dbg/breakpointdialog.h,kdevelop/parts/dbg/stty.h,kdevelop/parts/dbg/breakpoint.h,kdevelop/parts/dbg/brkptmanager.h,kdevelop/parts/dbg/dbgcommand.h,kdevelop/parts/dbg/dbgcontroller.h,kdevelop/parts/dbg/framestack.h,kdevelop/parts/dbg/gdbparser.h,kdevelop/parts/dbg/gdbcommand.h,kdevelop/parts/dbg/gdbcontroller.h,kdevelop/parts/dbg/vartree.h,kdevelop/parts/dbg/breakpointdialog.cpp,kdevelop/parts/dbg/disassemble.cpp,kdevelop/parts/dbg/memview.cpp,kdevelop/parts/dbg/stty.cpp,kdevelop/parts/dbg/breakpoint.cpp,kdevelop/parts/dbg/brkptmanager.cpp,kdevelop/parts/dbg/dbgcommand.cpp,kdevelop/parts/dbg/dbgcontroller.cpp,kdevelop/parts/dbg/framestack.cpp,kdevelop/parts/dbg/gdbparser.cpp,kdevelop/parts/dbg/gdbcommand.cpp,kdevelop/parts/dbg/gdbcontroller.cpp,kdevelop/parts/dbg/vartree.cpp,kdevelop/parts/dbg/dbgpsdlg.cpp,kdevelop/parts/dbg/dbgpsdlg.h,kdevelop/parts/dbg/dbgtoolbar.cpp,kdevelop/parts/dbg/dbgtoolbar.h, +type=static_library +sub_dirs= +[kdevelop/parts/classview/classactions.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/lib/general/kdevcomponent.h] +install_location= +dist=true +install=false +type=HEADER +[General] +make_options=-j1 +makefiles=Makefile.am,kdevelop/Makefile.am,kdevelop/docs/Makefile.am,kdevelop/docs/en/Makefile.am,po/Makefile.am,kdevelop/kwrite_part/Makefile.am,kdevelop/plugins/prjstat/Makefile.am,kdevelop/plugins/Makefile.am,kdevelop/print/Makefile.am,kdevelop/vc/Makefile.am,kdevelop/parts/dbg/Makefile.am,kdevelop/widgets/checklistbox/Makefile.am,kdevelop/widgets/Makefile.am,kdevelop/widgets/qextmdi/Makefile.am,kdevelop/widgets/dockwidgets/Makefile.am,kdevelop/parts/doctreeview/Makefile.am,kdevelop/parts/Makefile.am,kdevelop/lib/general/Makefile.am,kdevelop/lib/kidetexteditor/Makefile.am,kdevelop/parts/classview/Makefile.am,kdevelop/parts/grepview/Makefile.am,kdevelop/parts/outputviews/Makefile.am,kdevelop/parts/qextmdimainfrmview/Makefile.am,kdevelop/parts/cppsupport/Makefile.am,kdevelop/parts/cvs/Makefile.am,kdevelop/parts/editor/Makefile.am,kdevelop/widgets/qextmdi/src/Makefile.am,kdevelop/widgets/qextmdi/include/Makefile.am,kdevelop/widgets/qextmdi/res/Makefile.am,kdevelop/parts/buglist/Makefile.am,doc/kdevelop2/Makefile.am,doc/Makefile.am,kdevelop/lib/Makefile.am,kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/Makefile.am,kdevelop/plugin/projectmanagement/Makefile.am,kdevelop/plugin/Makefile.am,kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/Makefile.am,kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/res/Makefile.am,kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/res/Makefile.am,kdevelop/parts/javasupport/Makefile.am,kdevelop/parts/kdejavaprojectspace/Makefile.am,kdevelop/parts/kdeobjcprojectspace/Makefile.am, +execute_args= +version_control=CVS +project_type=mini_kde +author=Ralf Nolden +sub_dir=kdevelop/ +lfv_open_groups=Sources,Others, +workspace=1 +version=0.1 +project_name=KDevelop +AMChanged=false +short_info=, +email=Ralf.Nolden@post.rwth-aachen.de +kdevprj_version=1.0beta2 +dir_where_make_will_be_called=./ +configure_args=--with-qt-dir=/usr/lib/qt-2.2 --prefix=/opt/kde2 +modifyMakefiles=false +[kdevelop/parts/javasupport/ProgrammingByContract.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/kdejavaprojectspace/kdejavaprojectspace.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/kdejavaprojectspace/kdevkdejavaprojectspace.desktop] +install_location= +dist=true +install=false +type=DATA +[kdevelop/widgets/qextmdi/src/qextmdichildfrmcaption.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/dbg/dbgtoolbar.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/dbgmanager.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/cvs/commitdialog.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/cppsupport/caddclassattributedlg.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/kdevkdejavasdiappwizard.desktop] +install_location= +dist=true +install=false +type=DATA +[kdevelop/parts/grepview/grepdlg.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/dbg/breakpoint.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/cppsupport/main.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/buglist/Makefile.am] +install_location= +files=kdevelop/parts/buglist/Makefile.am,kdevelop/parts/buglist/bug.cpp,kdevelop/parts/buglist/bugcounter.cpp,kdevelop/parts/buglist/bugcounter.h,kdevelop/parts/buglist/bugedit.cpp,kdevelop/parts/buglist/bugedit.h,kdevelop/parts/buglist/bug.h,kdevelop/parts/buglist/buglist.cpp,kdevelop/parts/buglist/buglist.h,kdevelop/parts/buglist/buglistcomponent.cpp,kdevelop/parts/buglist/buglistcomponent.h,kdevelop/parts/buglist/main.cpp,kdevelop/parts/buglist/main.h +dist=true +install=false +type=static_library +sub_dirs= +[kdevelop/kdevelopifaceimpl.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/widgets/qextmdi/res/kde_restorebutton.xpm] +install_location= +dist=true +install=false +type=DATA +[kdevelop/widgets/qextmdi/include/kextmdimainfrm.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/outputviews/makewidget.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/doctreeview/main.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/cvs/Makefile.am] +files=kdevelop/parts/cvs/commitdialog.cpp,kdevelop/parts/cvs/commitdialog.h,kdevelop/parts/cvs/cvsinterface.cpp,kdevelop/parts/cvs/cvsinterface.h,kdevelop/parts/cvs/main.cpp,kdevelop/parts/cvs/main.h, +type=static_library +sub_dirs= +[kdevelop/parts/cppsupport/classparser.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/kwrite_part/ktextprint.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/widgets/qextmdi/res/Makefile.am] +files=kdevelop/widgets/qextmdi/res/filenew.xpm,kdevelop/widgets/qextmdi/res/kde_closebutton.xpm,kdevelop/widgets/qextmdi/res/kde_maxbutton.xpm,kdevelop/widgets/qextmdi/res/kde_minbutton.xpm,kdevelop/widgets/qextmdi/res/kde_restorebutton.xpm,kdevelop/widgets/qextmdi/res/kde_undockbutton.xpm,kdevelop/widgets/qextmdi/res/win_closebutton.xpm,kdevelop/widgets/qextmdi/res/win_maxbutton.xpm,kdevelop/widgets/qextmdi/res/win_minbutton.xpm,kdevelop/widgets/qextmdi/res/win_restorebutton.xpm,kdevelop/widgets/qextmdi/res/win_undockbutton.xpm, +type=normal +sub_dirs= +[kdevelop/widgets/qextmdi/include/qextmdidefines.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/qextmdimainfrmview/mdimainfrmcomponent.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/buglist/bugedit.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/buglist/bug.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/Makefile.am] +type=normal +sub_dirs=doctreeview,classview,grepview,outputviews,qextmdimainfrmview,cppsupport,cvs,buglist,javasupport,kdejavaprojectspace,kdeobjcprojectspace, +[kdevelop/newprojectdlg.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/lib/kidetexteditor/kidetexteditor.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/lib/general/kdevversioncontrol.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/kdevelopui.rc] +install_location= +dist=true +install=false +type=DATA +[kdevelop/parts/javasupport/Makefile.am] +install_location= +files=kdevelop/parts/javasupport/Makefile.am,kdevelop/parts/javasupport/ProgrammingByContract.h,kdevelop/parts/javasupport/classparser.cpp,kdevelop/parts/javasupport/classparser.h,kdevelop/parts/javasupport/javaaddclassattributedlg.cpp,kdevelop/parts/javasupport/javaaddclassattributedlg.h,kdevelop/parts/javasupport/javaaddclassmethoddlg.cpp,kdevelop/parts/javasupport/javaaddclassmethoddlg.h,kdevelop/parts/javasupport/javasupport.cpp,kdevelop/parts/javasupport/javasupport.h,kdevelop/parts/javasupport/kdevjavasupport.desktop,kdevelop/parts/javasupport/main.cpp,kdevelop/parts/javasupport/main.h,kdevelop/parts/javasupport/tokenizer.h,kdevelop/parts/javasupport/tokenizer.l, +dist=true +install=false +type=static_library +sub_dirs= +[kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/Makefile.am] +install_location= +dist=true +files=kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/kdeobjcsdiappwizardplugin.cpp,kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/Makefile.am,kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/kdeobjcsdiappwizardplugin.h,kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/kdevkdeobjcsdiappwizard.desktop,kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/main.cpp,kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/main.h, +install=false +sub_dirs=res, +type=static_library +[kdevelop/parts/editor/editorview.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/cvs/cvsinterface.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/cppsupport/caddclassmethoddlg.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/widgets/qextmdi/src/qextmdichildview.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/plugins/pluginmanagerdlg.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/editor/editorconfigwidget.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/framestack.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/classview/Makefile.am] +files=kdevelop/parts/classview/main.h,kdevelop/parts/classview/main.cpp,kdevelop/parts/classview/classview.h,kdevelop/parts/classview/classview.cpp,kdevelop/parts/classview/classactions.cpp,kdevelop/parts/classview/classactions.h, +type=static_library +sub_dirs= +[kdevelop/parts/buglist/bugcounter.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop.kdevprj] +install_location= +dist=true +install=false +type=DATA +[Makefile.am] +files=kdevelop.kdevprj +type=normal +sub_dirs=kdevelop,po,doc +[kdevelop/plugin/projectmanagement/kdejavasdi_appwizard/kdejavasdiappwizardplugin.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/qextmdimainfrmview/mdiview.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/grepview/main.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/grepview/grepconfigwidget.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/editor/editorview.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/doctreeview/doctreeview.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/classview/classview.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/javasupport/javasupport.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/plugin/projectmanagement/kdeobjcsdi_appwizard/kdevkdeobjcsdiappwizard.desktop] +install_location= +dist=true +install=false +type=DATA +[kdevelop/widgets/qextmdi/src/qextmditaskbar.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/editor/editorconfigwidget.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/doctreeview/doctreeview.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/doctreeview/cdoctreepropdlg.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/dbg/stty.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/kdevelopcore.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/kdevelop.cpp] +install_location= +dist=true +install=false +type=SOURCE +[kdevelop/parts/javasupport/main.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/qextmdimainfrmview/Makefile.am] +files=kdevelop/parts/qextmdimainfrmview/main.h,kdevelop/parts/qextmdimainfrmview/main.cpp,kdevelop/parts/qextmdimainfrmview/mdimainfrmcomponent.cpp,kdevelop/parts/qextmdimainfrmview/mdimainfrmcomponent.h,kdevelop/parts/qextmdimainfrmview/mdiframe.cpp,kdevelop/parts/qextmdimainfrmview/mdiframe.h,kdevelop/parts/qextmdimainfrmview/kdevmdimainfrmcomponent.desktop,kdevelop/parts/qextmdimainfrmview/kdevmdimainfrmcomponent.rc,kdevelop/parts/qextmdimainfrmview/mdiview.h,kdevelop/parts/qextmdimainfrmview/mdiview.cpp, +type=static_library +sub_dirs= +[kdevelop/parts/editor/Makefile.am] +files=kdevelop/parts/editor/editorview.cpp,kdevelop/parts/editor/editorview.h,kdevelop/parts/editor/editormgr.cpp,kdevelop/parts/editor/editormgr.h,kdevelop/parts/editor/editorfactory.cpp,kdevelop/parts/editor/editorfactory.h,kdevelop/parts/editor/editorconfigwidget.cpp,kdevelop/parts/editor/editorconfigwidget.h, +type=static_library +sub_dirs=prjstat +[kdevelop/parts/doctreeview/Makefile.am] +files=kdevelop/parts/doctreeview/doctreeview.h,kdevelop/parts/doctreeview/doctreeview.cpp,kdevelop/parts/doctreeview/doctreewidget.h,kdevelop/parts/doctreeview/doctreewidget.cpp,kdevelop/parts/doctreeview/main.cpp,kdevelop/parts/doctreeview/main.h,kdevelop/parts/doctreeview/cdoctreepropdlg.cpp,kdevelop/parts/doctreeview/cdoctreepropdlg.h,kdevelop/parts/doctreeview/doctreeconfigwidget.cpp,kdevelop/parts/doctreeview/doctreeconfigwidget.h, +type=static_library +sub_dirs= +[kdevelop/parts/dbg/vartree.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/parts/dbg/gdbcommand.h] +install_location= +dist=true +install=false +type=HEADER +[kdevelop/docs/Makefile.am] +type=normal +sub_dirs= +[kdevelop/parts/javasupport/javaaddclassmethoddlg.cpp] +install_location= +dist=true +install=false +type=SOURCE diff -Nru kdevelop-3.9.98/kdevelop.m4 kdevelop-4.0.1/kdevelop.m4 --- kdevelop-3.9.98/kdevelop.m4 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/kdevelop.m4 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,169 @@ +dnl +dnl If kimgio check succeeded, I assume khtmlw is also present +dnl + +AC_DEFUN(KDEV_SUBST_KHTMLW, +[ + AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) + if test "$LIBKIMGIO_EXISTS" = "yes"; then + LIB_KHTMLW='-lkhtmlw -ljscript' + else + LIB_KHTMLW='' + fi + AC_SUBST(LIB_KHTMLW) +]) + +dnl +dnl Check location of Qt documentation +dnl +AC_DEFUN(KDEV_PATH_QTDOC, +[ +AC_MSG_CHECKING([for Qt documentation]) + +ac_qt_docdirs="" +AC_ARG_WITH(qtdoc_dir, +[ --with-qtdoc-dir=DIR where the Qt documentation is installed ], +ac_qt_docdirs="" +qt_docdirs="" +[ + ac_qt_docdirs=$withval +], +) + +qt_docdirs="/usr/doc/qt-doc/html /usr/local/qt/html /usr/local/lib/qt/html /usr/lib/qt/doc/html /usr/X11/lib/qt/html /usr/X11/lib/qt/doc/html /usr/X11R6/share/doc/qt/html" +test -n "$QTDIR" && qt_docdirs="$QTDIR/html $QTDIR/doc/html $QTDIR/doc $qt_docdirs" +qt_docdirs="$ac_qt_docdirs $qt_docdirs" +AC_FIND_FILE(classes.html, $qt_docdirs, qt_docdir) +AC_MSG_RESULT($qt_docdir) +if test "$qt_docdir" = NO; then + qt_docdir="" +fi +AC_DEFINE_UNQUOTED(QT_DOCDIR, "$qt_docdir") +]) + + +dnl +dnl Check location of kdelibs documentation +dnl +AC_DEFUN(KDEV_PATH_KDELIBSDOC, +[ +AC_MSG_CHECKING([for kdelibs documentation]) + +ac_kdelibs_docdirs="" +AC_ARG_WITH(kdelibsdoc_dir, +[ --with-kdelibsdoc-dir=DIR where the kdelibs documentation is installed ], +ac_kdelibs_docdirs="" +kdelibs_docdirs="" +[ + ac_kdelibs_docdirs=$withval +], +) + +if test "${prefix}" = NONE; then + ac_kde_htmldir="$ac_default_prefix"/share/doc/HTML +else + ac_kde_htmldir="$prefix"/share/doc/HTML +fi + +kdelibs_docdirs="/usr/doc/kdelibs-doc/html" +if test "$ac_kde_htmldir" != ""; then + kdelibs_docdirs="$kdelibs_docdirs $ac_kde_htmldir/default/kdelibs $ac_kde_htmldir/en/kdelibs" +fi +kdelibs_docdirs="$ac_kdelibs_docdirs $kdelibs_docdirs" +AC_FIND_FILE(kdecore/index.html, $kdelibs_docdirs, kdelibs_docdir) +AC_MSG_RESULT($kdelibs_docdir) +if test "$kdelibs_docdir" = NO; then + kdelibs_docdir="" +fi +AC_DEFINE_UNQUOTED(KDELIBS_DOCDIR, "$kdelibs_docdir") +]) + + +dnl +dnl Check location of kdoc index files +dnl +AC_DEFUN(KDEV_PATH_KDOCINDEX, +[ +AC_MSG_CHECKING([for kdoc index]) + +ac_kdoc_indexdirs="" +AC_ARG_WITH(kdocindex_dir, +[ --with-kdocindex-dir=DIR where the kdoc index files are. Obsolete - don't use! + Index files are searched under kdelibsdoc-dir/kdoc-reference ], +ac_kdoc_indexdirs="" +kdoc_indexdirs="" +[ + ac_kdoc_indexdirs=$withval +], +) + +kdoc_indexdirs="/usr/share/kdoc/index" +if test "$kdelibs_docdir" != ""; then + kdoc_indexdirs="$kdoc_indexdirs $kdelibs_docdir/kdoc-reference" +fi +kdoc_indexdirs="$ac_qtdocdirs $kdoc_indexdirs" +AC_FIND_FILE(kdecore.kdoc kdecore.kdoc.gz, $kdoc_indexdirs, kdoc_indexdir) +AC_MSG_RESULT($kdoc_indexdir) +if test "$kdoc_indexdir" = NO; then + kdoc_indexdir="" +fi +AC_DEFINE_UNQUOTED(KDOC_INDEXDIR, "$kdoc_indexdir") +]) + + +dnl +dnl Check whether we support Debian docbase +dnl +AC_DEFUN(KDEV_CHECK_DOCBASE, +[ +AC_MSG_CHECKING(for docbase) +AC_ARG_ENABLE(docbase, +[ --enable-docbase enable Debian docbase support], +[if test "$enableval" = yes; then + enable_docbase=yes +fi], +enable_docbase=no) +AC_MSG_RESULT($enable_docbase) + +if test "$enable_docbase" = "yes"; then + AC_DEFINE_UNQUOTED(WITH_DOCBASE) +fi +]) + +dnl +dnl Check whether we use kdoc2 +dnl +AC_DEFUN(KDEV_CHECK_KDOC2, +[ +AC_MSG_CHECKING(for kdoc2) +AC_ARG_ENABLE(kdoc2, +[ --disable-kdoc2 disable kdoc2 support], +[ + enable_kdoc2=$enableval +], +enable_kdoc2=yes) +AC_MSG_RESULT($enable_kdoc2) + +if test "$enable_kdoc2" = "yes"; then + AC_DEFINE_UNQUOTED(WITH_KDOC2) +fi +]) + +dnl +dnl Check whether we use parsing on cpp save +dnl +AC_DEFUN(KDEV_CHECK_CPP_REPARSE, +[ +AC_MSG_CHECKING(for cpp-save reparsing) +AC_ARG_ENABLE(cpp-reparse, +[ --enable-cpp-reparse enable reparsing on cpp saving], +[if test "$enableval" = yes; then + enable_cpp_reparse=yes +fi], +enable_cpp_reparse=no) +AC_MSG_RESULT($enable_cpp_reparse) + +if test "$enable_cpp_reparse" = "yes"; then + AC_DEFINE_UNQUOTED(WITH_CPP_REPARSE) +fi +]) diff -Nru kdevelop-3.9.98/kdevelop.spec.in kdevelop-4.0.1/kdevelop.spec.in --- kdevelop-3.9.98/kdevelop.spec.in 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/kdevelop.spec.in 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,94 @@ +# You might want to change the next 2 lines, the rest should be ok +%define qtdir /usr/lib/qt-2.1.0 +Prefix: /opt/kde2 + +Name: kdevelop +Summary: Integrated Development Environment for C++/C +Version: @VERSION@ +Release: 1 +Source: http://fara3.cs.uni-potsdam.de/~smeier/kdevelop_home/kdevelop-%{version}.tar.bz2 +Source1: ftp://ftp.e-technik.fh-muenchen.de/pub/unix/ide/KDevelop/documentation/c_c++_reference.tar.gz +URL: http://www.kdevelop.org/ +Group: Development/Tools +BuildRoot: /var/tmp/%{name}-buildroot +License: GPL +Requires: kdesupport-devel kdelibs-devel make perl >= 5.004 autoconf >= 2.13 +Requires: automake >= 1.4 flex >= 2.5.4 +BuildPrereq: autoconf, automake, libtool, kdesupport-devel, kdelibs-devel +Obsoletes: kdevelop-c_c++_ref + +%description +The KDevelop Integrated Development Environment provides many features +that developers need as well as providing a unified interface to programs +like gdb, the C/C++ compiler, and make. KDevelop manages or provides: + +All development tools needed for C++ programming like Compiler, +Linker, automake and autoconf; KAppWizard, which generates complete, +ready-to-go sample applications; Classgenerator, for creating new +classes and integrating them into the current project; File management +for sources, headers, documentation etc. to be included in the +project; The creation of User-Handbooks written with SGML and the +automatic generation of HTML-output with the KDE look and feel; +Automatic HTML-based API-documentation for your project's classes with +cross-references to the used libraries; Internationalization support +for your application, allowing translators to easily add their target +language to a project; + +KDevelop also includes WYSIWYG (What you see is what you get)-creation +of user interfaces with a built-in dialog editor; Debugging your +application by integrating KDbg; Editing of project-specific pixmaps +with KIconEdit; The inclusion of any other program you need for +development by adding it to the "Tools"-menu according to your +individual needs. + +%prep +rm -rf $RPM_BUILD_ROOT + +%setup -q +make -f Makefile.cvs + +%build +export QTDIR=%{qtdir} +export KDEDIR=%{prefix} +CXXFLAGS="$RPM_OPT_FLAGS -DNO_DEBUG -DNDEBUG" ./configure \ + --prefix=%{prefix} \ + --with-qtdoc-dir=/usr/doc/qt-devel-2.1.0/html \ + --with-kdelibsdoc-dir=%{prefix}/doc/kdelibs-devel-1.89.* \ + --enable-kdoc2 + +make CXXFLAGS="$RPM_OPT_FLAGS -DNO_DEBUG -DNDEBUG" + +%install +make DESTDIR=$RPM_BUILD_ROOT install-strip + +( + cd $RPM_BUILD_ROOT + tar xzf %{SOURCE1} + rm -rf .%{prefix}/doc/kde/HTML/*/kdevelop/reference + rm -rf share/doc/HTML/en/kdevelop/reference/EXAMPLES/*/a.out + mv share/doc/HTML/en/kdevelop/reference .%{prefix}/doc/kde/HTML/en/kdevelop + rm -rf share +) + +cd $RPM_BUILD_ROOT +find . -type d | sed '1,2d;s,^\.,\%attr(-\,root\,root) \%dir ,' > \ + $RPM_BUILD_DIR/file.list.%{name} + +find . -type f | sed -e 's,^\.,\%attr(-\,root\,root) ,' \ + -e '/\/config\//s|^|%config|' >> \ + $RPM_BUILD_DIR/file.list.%{name} + +find . -type l | sed 's,^\.,\%attr(-\,root\,root) ,' >> \ + $RPM_BUILD_DIR/file.list.%{name} + +echo "%docdir %{prefix}/doc/kde" >> \ + $RPM_BUILD_DIR/file.list.%{name} + +%clean +rm -rf $RPM_BUILD_ROOT $RPM_BUILD_DIR/file.list.%{name} + +%files -f ../file.list.%{name} + +%changelog +* Thu May 11 2000 Bernhard Rosenkraenzer +- initial diff -Nru kdevelop-3.9.98/kdev_metri kdevelop-4.0.1/kdev_metri --- kdevelop-3.9.98/kdev_metri 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/kdev_metri 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,2 @@ +#you can get cxxmetric from the kdesdk -Sandy +cxxmetric `find . -name \*.h -o -name \*.cpp -o -name \*.cc` diff -Nru kdevelop-3.9.98/languages/cpp/CMakeLists.txt kdevelop-4.0.1/languages/cpp/CMakeLists.txt --- kdevelop-3.9.98/languages/cpp/CMakeLists.txt 2009-11-29 19:00:51.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/CMakeLists.txt 2010-07-17 20:08:19.000000000 +0100 @@ -9,6 +9,18 @@ add_definitions( -DKDE_DEFAULT_DEBUG_AREA=9007 ) +if(CMAKE_COMPILER_IS_GNUCXX) + # TODO: Remove when LTS for g++ < 4.3 has ended. + # See also: languages/cpp/parser/parser.h + macro_ensure_version("4.3.0" "${_gcc_version}" GCC_IS_NEWER_THAN_4_3) + if (GCC_IS_NEWER_THAN_4_3) + message(STATUS "Enabling c++0x support for unordered map") + add_definitions( -std=c++0x ) # For unordered_map + else(GCC_IS_NEWER_THAN_4_3) + add_definitions( -DGXX_LT_4_3 ) + endif (GCC_IS_NEWER_THAN_4_3) +endif(CMAKE_COMPILER_IS_GNUCXX) + add_subdirectory(parser) add_subdirectory(cppduchain) add_subdirectory(tests) @@ -41,12 +53,12 @@ codegen/codeassistant.cpp codegen/signatureassistant.cpp codegen/unresolvedincludeassistant.cpp - codegen/makeimplementationprivate.cpp +# codegen/makeimplementationprivate.cpp ) set(kdevcpplanguagesupport_LIB_UI codegen/ui/custom_include_paths.ui - codegen/ui/privateimplementation.ui +# codegen/ui/privateimplementation.ui ) kde4_add_ui_files(kdevcpplanguagesupport_PART_SRCS ${kdevcpplanguagesupport_LIB_UI}) diff -Nru kdevelop-3.9.98/languages/cpp/codecompletion/context.cpp kdevelop-4.0.1/languages/cpp/codecompletion/context.cpp --- kdevelop-3.9.98/languages/cpp/codecompletion/context.cpp 2010-01-10 20:47:46.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/codecompletion/context.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -55,6 +55,7 @@ #include #include "missingincludemodel.h" #include +#include // #define ifDebug(x) x @@ -220,12 +221,14 @@ return; } -// ifDebug( log( "non-processed text: " + m_text ); ) + ifDebug( log( "non-processed text: " + m_text ); ) if(depth == 0) { preprocessText( line ); m_text = clearComments( m_text ); } + ifDebug( log( "preprocessed text: " + m_text ); ) + m_text = stripFinalWhitespace( m_text ); m_text = lastLines(m_text); @@ -690,6 +693,9 @@ QString text = m_text.trimmed(); LOCKDUCHAIN; + if(!m_duContext) + return false; + QStringList hadItems; text = text.trimmed(); @@ -781,7 +787,7 @@ if(!initializedNormalItems) { //Only offer constructor initializations before variables were initialized pos = 0; - foreach(DUContext::Import import, container->importedParentContexts()) { + foreach(const DUContext::Import& import, container->importedParentContexts()) { DUContext* ctx = import.context(m_duContext->topContext()); if(ctx && ctx->type() == DUContext::Class && ctx->owner()) { items.insert(pos, CompletionTreeItemPointer(new NormalDeclarationCompletionItem( DeclarationPointer(ctx->owner()), KDevelop::CodeCompletionContext::Ptr(this), pos ))); @@ -855,7 +861,7 @@ //Filter away all global binary operators that do not have the first argument matched QList< Function > oldFunctions = m_functions; m_functions.clear(); - foreach(Function f, oldFunctions) { + foreach(const Function& f, oldFunctions) { if(f.matchedArguments == 1 && !f.function.isViable()) continue; else @@ -939,8 +945,11 @@ if( memberAccessOperation() == StaticMemberChoose && m_duContext ) { //Locate all namespace-instances we will be completing from - ret += m_duContext->findContexts(DUContext::Class, QualifiedIdentifier(m_expression)); - ret += m_duContext->findContexts(DUContext::Namespace, QualifiedIdentifier(m_expression)); ///@todo respect position + QList< Declaration* > decls = m_duContext->findDeclarations(QualifiedIdentifier(m_expression)); ///@todo respect position + + foreach(Declaration* decl, decls) + if((decl->kind() == Declaration::Namespace || dynamic_cast(decl)) && decl->internalContext()) + ret << decl->internalContext(); } if(m_expressionResult.isValid() ) { @@ -1066,6 +1075,18 @@ // return ret; // } +static TopDUContext* proxyContextForUrl(KUrl url) +{ + QList< ILanguage* > languages = ICore::self()->languageController()->languagesForUrl(url); + foreach(ILanguage* language, languages) + { + if(language->languageSupport()) + return language->languageSupport()->standardContext(url, true); + } + + return 0; +} + void CodeCompletionContext::preprocessText( int line ) { LOCKDUCHAIN; @@ -1079,7 +1100,13 @@ disableMacros.insert(IndexedString("Q_SLOT")); if( m_duContext ) { - m_text = preprocess( m_text, dynamic_cast(m_duContext->topContext()->parsingEnvironmentFile().data()), line, disableMacros ); + + // Use the proxy-context if possible, because that one contains most of the macros if existent + TopDUContext* useTopContext = proxyContextForUrl(m_duContext->url().toUrl()); + if(!useTopContext) + useTopContext = m_duContext->topContext(); + + m_text = preprocess( m_text, dynamic_cast(useTopContext->parsingEnvironmentFile().data()), line, disableMacros ); }else{ kWarning() << "error: no ducontext"; } @@ -1182,8 +1209,6 @@ if(memberAccessOperation() != Cpp::CodeCompletionContext::StaticMemberChoose) { if(decl.first->kind() != Declaration::Instance && decl.first->kind() != Declaration::Alias) continue; - if(classMember && classMember->isStatic()) - continue; //Skip static class members when not doing static access if(decl.first->abstractType().cast()) continue; //Skip enumerators }else{ @@ -1502,7 +1527,7 @@ foreach(Declaration* decl, context->localDeclarations()) { ClassFunctionDeclaration* classFun = dynamic_cast(decl); AbstractFunctionDeclaration* funDecl = dynamic_cast(decl); - if(funDecl && (!classFun || !classFun->isAbstract()) && !decl->isDefinition() && !FunctionDefinition::definition(decl) && decl->qualifiedIdentifier().toString().startsWith(minimumScope.toString())) + if(funDecl && !decl->range().isEmpty() && (!classFun || (!classFun->isAbstract() && !classFun->isSignal())) && !decl->isDefinition() && !FunctionDefinition::definition(decl) && decl->qualifiedIdentifier().toString().startsWith(minimumScope.toString())) ret << KDevelop::CompletionTreeItemPointer(new ImplementationHelperItem(ImplementationHelperItem::CreateDefinition, DeclarationPointer(decl), KSharedPtr(this))); } @@ -1565,9 +1590,10 @@ QList decls = m_duContext->allDeclarations(m_duContext->type() == DUContext::Class ? m_duContext->range().end : m_position, m_duContext->topContext()); //Collect the contents of unnamed namespaces - QList unnamed = m_duContext->findContexts(DUContext::Namespace, QualifiedIdentifier(), m_position); - foreach(DUContext* ns, unnamed) - decls += ns->allDeclarations(m_position, m_duContext->topContext(), false); + QList unnamed = m_duContext->findDeclarations(QualifiedIdentifier(unnamedNamespaceIdentifier.identifier()), m_position); + foreach(Declaration* ns, unnamed) + if(ns->kind() == Declaration::Namespace && ns->internalContext()) + decls += ns->internalContext()->allDeclarations(m_position, m_duContext->topContext(), false); if(m_duContext) { //Collect the Declarations from all "using namespace" imported contexts @@ -1589,8 +1615,12 @@ ids += ownNamespaceScope.left(a); foreach(const QualifiedIdentifier &id, ids) { - QList importedContexts = m_duContext->findContexts( DUContext::Namespace, id ); - foreach(DUContext* context, importedContexts) { + QList importedContextDecls = m_duContext->findDeclarations( id ); + foreach(Declaration* contextDecl, importedContextDecls) { + if(contextDecl->kind() != Declaration::Namespace || !contextDecl->internalContext()) + continue; + DUContext* context = contextDecl->internalContext(); + if(context->range().contains(m_duContext->range()) && context->url() == m_duContext->url()) continue; //If the context surrounds the current one, the declarations are visible through allDeclarations(..). foreach(Declaration* decl, context->localDeclarations()) { @@ -1700,7 +1730,7 @@ if(decl->indexedIdentifier().isEmpty()) //Filter out nameless declarations return false; - if(decl->indexedIdentifier() == friendIdentifier) + if(decl->indexedIdentifier() == friendIdentifier || decl->indexedIdentifier() == Cpp::unnamedNamespaceIdentifier) return false; if(excludeReservedIdentifiers) diff -Nru kdevelop-3.9.98/languages/cpp/codecompletion/helpers.cpp kdevelop-4.0.1/languages/cpp/codecompletion/helpers.cpp --- kdevelop-3.9.98/languages/cpp/codecompletion/helpers.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/codecompletion/helpers.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -141,14 +141,33 @@ } if( paramNameIt != parameters.constEnd() /*&& !(*paramNameIt)->identifier().isEmpty()*/ ) { + // make sure that something like 'int foo[][1][2]' gets printed as such + // and not like 'int[0][1][2] foo' + AbstractType::Ptr type; + if(ctx) + type = typeForShortenedString(*paramNameIt); + else + type = argument; + + QString arrayAppendix; + ArrayType::Ptr arrayType; + while (arrayType = type.cast()) { + type = arrayType->elementType(); + //note: we have to prepend since we iterate from outside, i.e. from right to left. + if (arrayType->dimension()) { + arrayAppendix.prepend(QString("[%1]").arg(arrayType->dimension())); + } else { + // dimensionless + arrayAppendix.prepend("[]"); + } + } + if(noShortening) { - if(ctx) - ret += Cpp::shortenedTypeString(*paramNameIt, ctx, 1000000); - else - ret += argument->toString(); + ret += Cpp::shortenedTypeString(type, ctx, 1000000); }else - ret += Cpp::shortenedTypeString(*paramNameIt, ctx, desiredArgumentTypeLength, item.stripPrefix()); + ret += Cpp::shortenedTypeString(type, ctx, desiredArgumentTypeLength, item.stripPrefix()); ret += " " + (*paramNameIt)->identifier().toString(); + ret += arrayAppendix; } else if (argument) ret += argument->toString(); else @@ -317,7 +336,7 @@ } bool isSource(QString file) { - foreach(QString ext, sourceExtensions) + foreach(const QString& ext, sourceExtensions) if(file.endsWith(ext)) return true; return false; diff -Nru kdevelop-3.9.98/languages/cpp/codecompletion/helpers.h kdevelop-4.0.1/languages/cpp/codecompletion/helpers.h --- kdevelop-3.9.98/languages/cpp/codecompletion/helpers.h 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/codecompletion/helpers.h 2010-07-17 20:08:19.000000000 +0100 @@ -24,7 +24,6 @@ #include -class NormalDeclarationCompletionItem; class QString; class QVariant; template @@ -37,6 +36,7 @@ namespace Cpp { +class NormalDeclarationCompletionItem; void createArgumentList(const NormalDeclarationCompletionItem& item, QString& ret, QList* highlighting, bool includeDefaultParams = true, bool noShortening = false ); void createTemplateArgumentList(const NormalDeclarationCompletionItem& item, QString& ret, QList* highlighting, bool includeDefaultParams = true ); diff -Nru kdevelop-3.9.98/languages/cpp/codecompletion/implementationhelperitem.cpp kdevelop-4.0.1/languages/cpp/codecompletion/implementationhelperitem.cpp --- kdevelop-3.9.98/languages/cpp/codecompletion/implementationhelperitem.cpp 2009-12-23 01:44:51.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/codecompletion/implementationhelperitem.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -238,7 +238,7 @@ if(!forceParentScope.isEmpty()) overridden = dynamic_cast(m_declaration.data()); - if(overridden && !overridden->isAbstract()) { + if(overridden && !overridden->isAbstract() && !overridden->isDestructor()) { if(asFunction->returnType() && asFunction->returnType()->toString() != "void") { newText += "return "; } diff -Nru kdevelop-3.9.98/languages/cpp/codecompletion/item.cpp kdevelop-4.0.1/languages/cpp/codecompletion/item.cpp --- kdevelop-3.9.98/languages/cpp/codecompletion/item.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/codecompletion/item.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -60,17 +60,13 @@ //Check whether we need to add SLOT( or SIGNAL( QString prefixText = document->text(KTextEditor::Range(word.start().line(), 0, word.start().line(), word.start().column())); kDebug() << "prefix" << prefixText; - QRegExp signalRegExp("(Q_)*SIGNAL(\\s)*\\("); - QRegExp slotRegExp("(Q_)*SLOT(\\s)*\\("); - int signalAt = signalRegExp.lastIndexIn(prefixText); - kDebug() << "signalRegExp found at" << signalAt; - if(signalAt != -1 && prefixText.mid(signalAt + signalRegExp.matchedLength()).trimmed().isEmpty()) - addSignalSlot = false; - int slotAt = slotRegExp.lastIndexIn(prefixText); - if(slotAt != -1 && prefixText.mid(slotAt + slotRegExp.matchedLength()).trimmed().isEmpty()) + QRegExp signalSlotRegExp("(Q_)?(SIGNAL|SLOT)\\s*\\("); + int signalSlotAt = signalSlotRegExp.lastIndexIn(prefixText); + kDebug() << "signalSlotRegExp found at" << signalSlotAt; + if(signalSlotAt != -1 && prefixText.mid(signalSlotAt + signalSlotRegExp.matchedLength()).trimmed().isEmpty()) addSignalSlot = false; } - + KDevelop::DUChainReadLocker lock(KDevelop::DUChain::lock()); QString functionSignature; Cpp::QtFunctionDeclaration* classFun = dynamic_cast(m_declaration.data()); @@ -89,7 +85,24 @@ } } lock.unlock(); - document->replaceText(word, functionSignature); + + int extendRange = 0; + { + //Check whether we need to remove existing stuff + //note: it might be that the identifier (e.g. Q_SIGNAL) is already included in + //the word, so be pretty forgiving in the regexp + const QString line = document->text(KTextEditor::Range(word.end().line(), word.end().column(), + word.end().line(), document->lineLength(word.end().line()))); + QRegExp existingRegExp("^\\s*((Q_)?(SIGNAL|SLOT)\\s*)?\\([^\\)]*\\s*\\)\\s*\\)"); + int from = line.indexOf(existingRegExp); + if (from != -1) { + extendRange = existingRegExp.matchedLength(); + } + } + + document->replaceText(KTextEditor::Range(word.start().line(), word.start().column(), + word.end().line(), word.end().column() + extendRange), + functionSignature); return; } @@ -326,18 +339,17 @@ if( currentMatchContext.size()) { int bestQuality = 0; - foreach(IndexedType type, currentMatchContext) { - - Cpp::TypeConversion conv(model->currentTopContext().data()); - - AbstractType::Ptr ownType = effectiveType(dec); - - bool fromLValue = (bool)ownType.cast() || (!dynamic_cast(dec) && dec->kind() == Declaration::Instance); - - ///@todo fill the lvalue-ness correctly - int q = ( conv.implicitConversion( completionContext()->applyPointerConversionForMatching(ownType->indexed(), fromLValue), type, fromLValue ) * 10 ) / Cpp::MaximumConversionResult; - if(q > bestQuality) - bestQuality = q; + foreach(const IndexedType& type, currentMatchContext) { + Cpp::TypeConversion conv(model->currentTopContext().data()); + + AbstractType::Ptr ownType = effectiveType(dec); + + bool fromLValue = (bool)ownType.cast() || (!dynamic_cast(dec) && dec->kind() == Declaration::Instance); + + ///@todo fill the lvalue-ness correctly + int q = ( conv.implicitConversion( completionContext()->applyPointerConversionForMatching(ownType->indexed(), fromLValue), type, fromLValue ) * 10 ) / Cpp::MaximumConversionResult; + if(q > bestQuality) + bestQuality = q; } return QVariant(bestQuality); @@ -593,14 +605,13 @@ } if( currentMatchContext.size() ) { + int bestQuality = 0; - int bestQuality = 0; - - foreach(IndexedType type, currentMatchContext) { + foreach(const IndexedType& type, currentMatchContext) { Cpp::TypeConversion conv(model->currentTopContext().data()); ///@todo Think about lvalue-ness - foreach(IndexedType ownType, typeForArgumentMatching()) { + foreach(const IndexedType& ownType, typeForArgumentMatching()) { int quality = ( conv.implicitConversion( completionContext->applyPointerConversionForMatching(ownType, false), type, false ) * 10 ) / Cpp::MaximumConversionResult; if(quality > bestQuality) bestQuality = quality; diff -Nru kdevelop-3.9.98/languages/cpp/codecompletion/missingincludeitem.cpp kdevelop-4.0.1/languages/cpp/codecompletion/missingincludeitem.cpp --- kdevelop-3.9.98/languages/cpp/codecompletion/missingincludeitem.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/codecompletion/missingincludeitem.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -166,7 +166,7 @@ QStringList candidateFiles = candidateIncludeFiles(decl.data()); QList items; - foreach(QString file, candidateFiles) + foreach(const QString& file, candidateFiles) items += itemsForFile(QString(), file, CppUtils::findIncludePaths(fromUrl, 0), fromUrl, decl, 0, temp); qSort::iterator, DirectiveShorterThan>(items.begin(), items.end(), DirectiveShorterThan()); @@ -243,7 +243,7 @@ KUrl::List includePaths; - foreach(IndexedString path, env->includePaths()) + foreach(const IndexedString& path, env->includePaths()) includePaths << path.toUrl(); includePaths.prepend(currentPath); diff -Nru kdevelop-3.9.98/languages/cpp/codecompletion/model.cpp kdevelop-4.0.1/languages/cpp/codecompletion/model.cpp --- kdevelop-3.9.98/languages/cpp/codecompletion/model.cpp 2009-10-17 13:59:26.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/codecompletion/model.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -91,7 +91,7 @@ QString lineText = view->document()->text(KTextEditor::Range(position.line(), 0, position.line(), position.column())); - if(lineText.startsWith("#") && lineText.contains("include") && inserted == "/") + if(lineText.startsWith("#") && lineText.contains("include") && inserted.endsWith("/")) return true; //Directory-content completion if(insertedTrimmed.endsWith('\"')) @@ -121,8 +121,12 @@ return character.isLetterOrNumber() || character == '_' || character == '-' || character == '.'; } -bool CodeCompletionModel::shouldAbortCompletion(KTextEditor::View* view, const KTextEditor::SmartRange& range, const QString& currentCompletion) { - +bool CodeCompletionModel::shouldAbortCompletion(KTextEditor::View* view, const KTextEditor::SmartRange& range, const QString& currentCompletion) +{ + if(view->cursorPosition() < range.start() || view->cursorPosition() > range.end()) + return true; //Always abort when the completion-range has been left + //Do not abort completions when the text has been empty already before and a newline has been entered + QString line = view->document()->line(range.start().line()).trimmed(); if(line.startsWith("#include")) { //Do custom check for include directives, since we allow more character then during usual completion @@ -134,10 +138,8 @@ return false; } - - bool ret = KDevelop::CodeCompletionModel::shouldAbortCompletion(view, range, currentCompletion); - - return ret; + static const QRegExp allowedText("^\\~?(\\w*)"); + return !allowedText.exactMatch(currentCompletion); } KDevelop::CodeCompletionWorker* CodeCompletionModel::createCompletionWorker() { @@ -216,6 +218,20 @@ return KDevelop::CodeCompletionModel::filterString(view, range, position); } +Range CodeCompletionModel::completionRange(View* view, const KTextEditor::Cursor& position) +{ + Range range = KDevelop::CodeCompletionModel::completionRange(view, position); + if (range.start().column() > 0) { + KTextEditor::Range preRange(Cursor(range.start().line(), range.start().column() - 1), + Cursor(range.start().line(), range.start().column())); + const QString contents = view->document()->text(preRange); + if ( contents == "~" ) { + range.expandToRange(preRange); + } + } + return range; +} + void CodeCompletionModel::foundDeclarations(QList > item, KSharedPtr completionContext) { //Set the static match-context, in case the argument-hints are not shown diff -Nru kdevelop-3.9.98/languages/cpp/codecompletion/model.h kdevelop-4.0.1/languages/cpp/codecompletion/model.h --- kdevelop-3.9.98/languages/cpp/codecompletion/model.h 2009-10-17 13:59:26.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/codecompletion/model.h 2010-07-17 20:08:19.000000000 +0100 @@ -63,6 +63,7 @@ virtual KTextEditor::CodeCompletionModelControllerInterface2::MatchReaction matchingItem(const QModelIndex& matched); virtual QString filterString ( KTextEditor::View* view, const KTextEditor::SmartRange& range, const KTextEditor::Cursor& position ); + virtual KTextEditor::Range completionRange(KTextEditor::View* view, const KTextEditor::Cursor& position); virtual void updateCompletionRange(KTextEditor::View* view, KTextEditor::SmartRange& range); virtual void aborted(KTextEditor::View* view); virtual bool shouldAbortCompletion (KTextEditor::View* view, const KTextEditor::SmartRange& range, const QString& currentCompletion); diff -Nru kdevelop-3.9.98/languages/cpp/codecompletion/worker.cpp kdevelop-4.0.1/languages/cpp/codecompletion/worker.cpp --- kdevelop-3.9.98/languages/cpp/codecompletion/worker.cpp 2009-05-24 16:16:38.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/codecompletion/worker.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -81,6 +81,7 @@ if(!context->owner()->type()->returnType()) { //For constructor completion, we need some more context contextRange.start().setLine(contextRange.start().line() > 30 ? contextRange.start().line()-30 : 0); + contextRange.start().setColumn(0); contextText = view->document()->text(contextRange); } } diff -Nru kdevelop-3.9.98/languages/cpp/codegen/cppnewclass.cpp kdevelop-4.0.1/languages/cpp/codegen/cppnewclass.cpp --- kdevelop-3.9.98/languages/cpp/codegen/cppnewclass.cpp 2010-01-18 21:37:39.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/codegen/cppnewclass.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -41,6 +41,15 @@ #include #include +#include +#include +#include +#include +#include +#include +#include +#include + #include "../codecompletion/implementationhelperitem.h" #include "../codecompletion/missingincludeitem.h" @@ -95,11 +104,85 @@ KDevelop::DocumentChangeSet CppNewClass::generate() { - - KDevelop::DocumentChangeSet changeSet0 = generateHeader(); - KDevelop::DocumentChangeSet changeSet1 = generateImplementation(); - - return changeSet0 << changeSet1; + KDevelop::DocumentChangeSet changes; + generateHeader(changes); + generateImplementation(changes); + + if (!m_parentItem) { + // happens when we don't select anything in the project view + // and create a new class from the code menu + return changes; + } + + //Pick the folder Item that should contain the new class + IProject* p=m_parentItem->project(); + ProjectFolderItem* folder=m_parentItem->folder(); + ProjectTargetItem* target=m_parentItem->target(); + + if(target) { + folder=static_cast(m_parentItem->target()->parent()); + Q_ASSERT(folder->folder()); + }else if(!folder) { + QList folderList = p->foldersForUrl(implementationUrl().upUrl()); + if(folderList.isEmpty()) + return changes; + folder = folderList.first(); + } + + // find target to add created class to + if(!target && folder && p->buildSystemManager() && + p->buildSystemManager()->features() & KDevelop::IBuildSystemManager::Targets ) + { + QList t=folder->targetList(); + for(QStandardItem* it=folder; it && t.isEmpty(); it=it->parent()) { + KDevelop::ProjectBaseItem* bit=static_cast(it); + t=bit->targetList(); + } + if(t.count()==1) //Just choose this one + target=t.first(); + else if(t.count() > 1) { + KDialog d; + QWidget *w=new QWidget(&d); + w->setLayout(new QVBoxLayout); + w->layout()->addWidget(new QLabel("Choose one target to add the file or cancel if you do not want to do so.")); + QListWidget* targetsWidget=new QListWidget(w); + targetsWidget->setSelectionMode(QAbstractItemView::SingleSelection); + foreach(ProjectTargetItem* it, t) { + targetsWidget->addItem(it->text()); + } + w->layout()->addWidget(targetsWidget); + + targetsWidget->setCurrentRow(0); + d.setButtons( KDialog::Ok | KDialog::Cancel); + d.enableButtonOk(true); + d.setMainWidget(w); + + if(d.exec()==QDialog::Accepted) { + if(targetsWidget->selectedItems().isEmpty()) + QMessageBox::warning(0, QString(), i18n("Did not select anything, not adding to a target.")); + else + target= t[targetsWidget->currentRow()]; + } + } + } + + if(target && p->buildSystemManager()) + { + ProjectFileItem* file = p->projectFileManager()->addFile(implementationUrl(), folder); + ProjectFileItem* header = p->projectFileManager()->addFile(headerUrl(), folder); + + if(file) + p->buildSystemManager()->addFileToTarget(file, target); + else + kWarning() << "Could not add source file to build manager" << implementationUrl(); + + if(header) + p->buildSystemManager()->addFileToTarget(header, target); + else + kWarning() << "Could not add header file to build-manager" << headerUrl(); + } + + return changes; } const QList & CppNewClass::addBaseClass(const QString & base) @@ -171,8 +254,11 @@ return url; } -KDevelop::DocumentChangeSet CppNewClass::generateHeader() +void CppNewClass::generateHeader(KDevelop::DocumentChangeSet& changes) { + if(!headerUrl().isValid()) + return; + QString header; QTextStream output(&header, QIODevice::WriteOnly); @@ -229,7 +315,7 @@ output << "\n\n"; //Support for nested namespaces - foreach(QString ns, m_namespaces) + foreach(const QString& ns, m_namespaces) output << "namespace " << ns << " {\n\n"; output << (m_type == Class || m_type == DefaultType ? "class " : "struct "); @@ -249,13 +335,15 @@ // if (baseClassIsQObjectDerivative) output << "\tQ_OBJECT\n\n"; - Declaration::AccessPolicy ap = m_type == Class ? Declaration::Private : Declaration::Public; + Declaration::AccessPolicy ap = (m_type == Class || m_type == DefaultType) ? Declaration::Private : Declaration::Public; // Constructor(s) // Overrides foreach (DeclarationPointer override, m_declarations) { + if(!override) + continue; if (ClassMemberDeclaration* member = dynamic_cast(override.data())) { if (ap != member->accessPolicy()) { switch (member->accessPolicy()) { @@ -293,7 +381,6 @@ if(!headerExists) output << "#endif // " << headerGuard << '\n'; - DocumentChangeSet changes; changes.addChange(DocumentChange(IndexedString(headerUrl()), SimpleRange(headerPosition(), 0), QString(), header)); @@ -352,12 +439,13 @@ lock.unlock(); //Never call openDocument while the duchain is locked //TODO DocumentChangeSet should take care of opening new documents in the editor ICore::self()->documentController()->openDocument(headerUrl()); - - return changes; } -KDevelop::DocumentChangeSet CppNewClass::generateImplementation() +void CppNewClass::generateImplementation(KDevelop::DocumentChangeSet& changes) { + if(!implementationUrl().isValid()) + return; + QString implementation; QTextStream output(&implementation, QIODevice::WriteOnly); @@ -399,12 +487,8 @@ } } - DocumentChangeSet changes; - changes.addChange(DocumentChange(IndexedString(implementationUrl()), SimpleRange(implementationPosition(), 0), QString(), implementation)); - - return changes; } #include "cppnewclass.moc" diff -Nru kdevelop-3.9.98/languages/cpp/codegen/cppnewclass.h kdevelop-4.0.1/languages/cpp/codegen/cppnewclass.h --- kdevelop-3.9.98/languages/cpp/codegen/cppnewclass.h 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/codegen/cppnewclass.h 2010-07-17 20:08:19.000000000 +0100 @@ -26,6 +26,11 @@ #include #include "cppduchain/cpptypes.h" +namespace KDevelop +{ +class ProjectBaseItem; +} + class CppClassIdentifierPage : public KDevelop::ClassIdentifierPage { Q_OBJECT @@ -57,7 +62,9 @@ Struct }; - CppNewClass() : m_type(DefaultType), m_objectType(new CppClassType) {}; + CppNewClass(KDevelop::ProjectBaseItem* parentItem) + : m_type(DefaultType), m_objectType(new CppClassType), m_parentItem(parentItem) + {}; virtual ~CppNewClass(void) {}; virtual KDevelop::DocumentChangeSet generate(); @@ -75,8 +82,8 @@ void setType(Type); - KDevelop::DocumentChangeSet generateHeader(); - KDevelop::DocumentChangeSet generateImplementation(); + void generateHeader(KDevelop::DocumentChangeSet& changes); + void generateImplementation(KDevelop::DocumentChangeSet& changes); private: QStringList m_namespaces; @@ -84,6 +91,8 @@ Type m_type; mutable CppClassType::Ptr m_objectType; + + KDevelop::ProjectBaseItem* m_parentItem; }; //!@todo Tag the overrided methods with the name of the parent class diff -Nru kdevelop-3.9.98/languages/cpp/codegen/signatureassistant.cpp kdevelop-4.0.1/languages/cpp/codegen/signatureassistant.cpp --- kdevelop-3.9.98/languages/cpp/codegen/signatureassistant.cpp 2010-01-14 00:22:36.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/codegen/signatureassistant.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -34,6 +34,8 @@ #include #include #include +#include + #include "signatureassistant.h" #include "cppduchain.h" @@ -146,15 +148,32 @@ QString makeSignatureString(Signature signature, DUContext* visibilityFrom) { QString ret; int pos = 0; - foreach(ParameterItem item, signature.parameters) { + foreach(const ParameterItem& item, signature.parameters) { if(!ret.isEmpty()) ret += ", "; - ret += Cpp::simplifiedTypeString(item.first.abstractType(), visibilityFrom); + ///TODO: merge common code with helpers.cpp::createArgumentList + AbstractType::Ptr type = item.first.abstractType(); + + QString arrayAppendix; + ArrayType::Ptr arrayType; + while (arrayType = type.cast()) { + type = arrayType->elementType(); + //note: we have to prepend since we iterate from outside, i.e. from right to left. + if (arrayType->dimension()) { + arrayAppendix.prepend(QString("[%1]").arg(arrayType->dimension())); + } else { + // dimensionless + arrayAppendix.prepend("[]"); + } + } + ret += Cpp::simplifiedTypeString(type, visibilityFrom); if(!item.second.isEmpty()) ret += " " + item.second; + ret += arrayAppendix; + if (signature.defaultParams.size() > pos && !signature.defaultParams[pos].isEmpty()) ret += " = " + signature.defaultParams[pos]; diff -Nru kdevelop-3.9.98/languages/cpp/codegen/simplerefactoring.cpp kdevelop-4.0.1/languages/cpp/codegen/simplerefactoring.cpp --- kdevelop-3.9.98/languages/cpp/codegen/simplerefactoring.cpp 2010-01-15 17:58:27.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/codegen/simplerefactoring.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -46,9 +46,8 @@ #include #include #include -#include #include "cppnewclass.h" -#include "makeimplementationprivate.h" +//#include "makeimplementationprivate.h" #include #include "../cpputils.h" #include @@ -59,8 +58,6 @@ #include #include #include -#include -#include #include #include @@ -121,23 +118,26 @@ Declaration* declaration = declContext->declaration().data(); if(declaration) { - QAction* action = new QAction(i18n("Rename %1", declaration->qualifiedIdentifier().toString()), this); - action->setData(QVariant::fromValue(IndexedDeclaration(declaration))); - action->setIcon(KIcon("edit-rename")); - connect(action, SIGNAL(triggered(bool)), this, SLOT(executeRenameAction())); - - extension.addAction(ContextMenuExtension::RefactorGroup, action); - - if(declContext->use().isEmpty() && declaration->isFunctionDeclaration() && declaration->internalContext() && declaration->internalContext()->type() == DUContext::Other && - !dynamic_cast(declaration)) { - AbstractFunctionDeclaration* funDecl = dynamic_cast(declaration); - if(funDecl && !funDecl->isInline() && !dynamic_cast(funDecl)) { - //Is a candidate for moving into source - QAction* action = new QAction(i18n("Create separate definition for %1", declaration->qualifiedIdentifier().toString()), this); - action->setData(QVariant::fromValue(IndexedDeclaration(declaration))); + QFileInfo finfo(declaration->topContext()->url().str()); + if (finfo.isWritable()) { + QAction* action = new QAction(i18n("Rename %1", declaration->qualifiedIdentifier().toString()), this); + action->setData(QVariant::fromValue(IndexedDeclaration(declaration))); + action->setIcon(KIcon("edit-rename")); + connect(action, SIGNAL(triggered(bool)), this, SLOT(executeRenameAction())); + + extension.addAction(ContextMenuExtension::RefactorGroup, action); + + if(declContext->use().isEmpty() && declaration->isFunctionDeclaration() && declaration->internalContext() && declaration->internalContext()->type() == DUContext::Other && + !dynamic_cast(declaration)) { + AbstractFunctionDeclaration* funDecl = dynamic_cast(declaration); + if(funDecl && !funDecl->isInline() && !dynamic_cast(funDecl)) { + //Is a candidate for moving into source + QAction* action = new QAction(i18n("Create separate definition for %1", declaration->qualifiedIdentifier().toString()), this); + action->setData(QVariant::fromValue(IndexedDeclaration(declaration))); // action->setIcon(KIcon("arrow-right")); - connect(action, SIGNAL(triggered(bool)), this, SLOT(executeMoveIntoSourceAction())); - extension.addAction(ContextMenuExtension::RefactorGroup, action); + connect(action, SIGNAL(triggered(bool)), this, SLOT(executeMoveIntoSourceAction())); + extension.addAction(ContextMenuExtension::RefactorGroup, action); + } } } } @@ -171,6 +171,7 @@ void SimpleRefactoring::createNewClass(ProjectBaseItem* item) { + ///TODO: refactor and put this also into the CppNewClassWizard KUrl u; //Pick a folder to guess Possible URL for new class @@ -184,72 +185,11 @@ } else u = folderFromSelection(); - + //Run wizard - CppNewClass newClassGenerator; + CppNewClass newClassGenerator(item); CppNewClassWizard newClassWizard(qApp->activeWindow(), &newClassGenerator, u); - int result=newClassWizard.exec(); - if(result==QDialog::Accepted && item) { - //Pick the folder Item that should contain the new class - IProject* p=item->project(); - ProjectFolderItem* folder=item->folder(); - ProjectTargetItem* target=item->target(); - - if(target) { - folder=static_cast(item->target()->parent()); - Q_ASSERT(folder->folder()); - } else if(!folder) { - QList folderList = p->foldersForUrl(newClassWizard.implementationUrl().upUrl()); - if(folderList.isEmpty()) - return; - folder = folderList.first(); - } - - - if(!target && item->project()->buildSystemManager()->features() & IBuildSystemManager::Targets && folder) { - QList t=folder->targetList(); - for(QStandardItem* it=folder; it && t.isEmpty(); it=it->parent()) { - KDevelop::ProjectBaseItem* bit=static_cast(it); - t=bit->targetList(); - } - - if(t.count()==1) //Just choose this one - target=t.first(); - else { - KDialog d; - QWidget *w=new QWidget(&d); - w->setLayout(new QVBoxLayout); - w->layout()->addWidget(new QLabel("Choose one target to add the file or cancel if you do not want to do so.")); - QListWidget* targetsWidget=new QListWidget(w); - targetsWidget->setSelectionMode(QAbstractItemView::SingleSelection); - foreach(ProjectTargetItem* it, t) { - targetsWidget->addItem(it->text()); - } - w->layout()->addWidget(targetsWidget); - - targetsWidget->setCurrentRow(0); - d.setButtons( KDialog::Ok | KDialog::Cancel); - d.enableButtonOk(true); - d.setMainWidget(w); - - if(d.exec()==QDialog::Accepted) { - if(targetsWidget->selectedItems().isEmpty()) - QMessageBox::warning(0, QString(), i18n("Did not select anything, not adding to a target.")); - else - target= t[targetsWidget->currentRow()]; - } - } - } - - if(folder) { - ProjectFileItem* file=p->buildSystemManager()->addFile(newClassWizard.implementationUrl(), folder); - ProjectFileItem* header=p->buildSystemManager()->addFile(newClassWizard.headerUrl(), folder); - if(target) { - p->buildSystemManager()->addFileToTarget(file, target); - p->buildSystemManager()->addFileToTarget(header, target); - } - } - } + newClassWizard.exec(); } void SimpleRefactoring::executeMoveIntoSourceAction() { @@ -369,6 +309,9 @@ class SimpleRefactoringCollector : public KDevelop::UsesWidget::UsesWidgetCollector { public: SimpleRefactoringCollector(IndexedDeclaration decl) : UsesWidgetCollector(decl) { + setCollectConstructors(true); + setCollectDefinitions(true); + setCollectOverloads(true); } virtual void processUses(KDevelop::ReferencedTopDUContext topContext) { @@ -437,6 +380,12 @@ KMessageBox::error(ICore::self()->uiController()->activeMainWindow(), i18n("No declaration under cursor")); return; } + QFileInfo info(declaration->topContext()->url().str()); + if (!info.isWritable()) { + KMessageBox::error(ICore::self()->uiController()->activeMainWindow(), + i18n("Declaration is located in non-writeable file %1.", declaration->topContext()->url().str())); + return; + } if(FunctionDefinition* definition = dynamic_cast(declaration)) declaration = definition->declaration(declaration->topContext()); @@ -493,7 +442,7 @@ tabWidget.addTab(&uses, i18n("Uses")); if(navigationWidget) - tabWidget.addTab(navigationWidget, "Declaration Info"); + tabWidget.addTab(navigationWidget, i18n("Declaration Info")); verticalLayout.addWidget(&tabWidget); @@ -556,15 +505,6 @@ } } -void SimpleRefactoring::executePrivateImplementationAction() -{ - MakeImplementationPrivate p; - if(!p.execute()) - { - KMessageBox::error(KDevelop::ICore::self()->uiController()->activeMainWindow(), p.errorText(), i18n("Error Generating code")); - } -} - KDevelop::IndexedDeclaration SimpleRefactoring::declarationUnderCursor(bool allowUse) { KDevelop::IDocument* doc = ICore::self()->documentController()->activeDocument(); if(doc && doc->textDocument() && doc->textDocument()->activeView()) { diff -Nru kdevelop-3.9.98/languages/cpp/codegen/simplerefactoring.h kdevelop-4.0.1/languages/cpp/codegen/simplerefactoring.h --- kdevelop-3.9.98/languages/cpp/codegen/simplerefactoring.h 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/codegen/simplerefactoring.h 2010-07-17 20:08:19.000000000 +0100 @@ -42,7 +42,6 @@ void executeRenameAction(); void executeNewClassAction(); void executeMoveIntoSourceAction(); - void executePrivateImplementationAction(); private: ///Duchain does not need to be read-locked ///If @p allowUse is false, a declaration that is declared in the current line is returned(if one exists) diff -Nru kdevelop-3.9.98/languages/cpp/codegen/unresolvedincludeassistant.cpp kdevelop-4.0.1/languages/cpp/codegen/unresolvedincludeassistant.cpp --- kdevelop-3.9.98/languages/cpp/codegen/unresolvedincludeassistant.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/codegen/unresolvedincludeassistant.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -61,7 +61,7 @@ o.storageDirectory->setUrl(current); o.sourceDirectory->setPath(oldSettings.sourceDir); o.buildDirectory->setPath(oldSettings.buildDir); - foreach(QString customPath, oldSettings.paths) + foreach(const QString& customPath, oldSettings.paths) if(!customPath.isEmpty()) o.customIncludePaths->appendPlainText(customPath); if(!oldSettings.paths.isEmpty()) @@ -83,7 +83,7 @@ oldSettings.sourceDir = o.sourceDirectory->url().toLocalFile(); oldSettings.buildDir = o.buildDirectory->url().toLocalFile(); oldSettings.paths.clear(); - foreach(QString customPath, o.customIncludePaths->document()->toPlainText().split("\n", QString::SkipEmptyParts)) + foreach(const QString& customPath, o.customIncludePaths->document()->toPlainText().split("\n", QString::SkipEmptyParts)) if(!customPath.isEmpty()) oldSettings.paths << customPath; kDebug() << "saving, paths" << oldSettings.paths; diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/contextbuilder.cpp kdevelop-4.0.1/languages/cpp/cppduchain/contextbuilder.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/contextbuilder.cpp 2009-12-07 02:26:48.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/contextbuilder.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -40,9 +40,7 @@ #include #include "cppdebughelper.h" #include "debugbuilders.h" -#include #include "rpp/chartools.h" -#include #include "tokens.h" #include @@ -264,12 +262,8 @@ DUChainReadLocker lock(DUChain::lock()); QualifiedIdentifier currentScopeId = currentContext()->scopeIdentifier(true); - - QualifiedIdentifier globalId = currentScopeId; - globalId += prefixId; - globalId.setExplicitlyGlobal(true); - QList decls = currentContext()->findDeclarations(globalId, pos); + QList decls = currentContext()->findDeclarations(prefixId, pos); if(!decls.isEmpty()) { DUContext* classContext = decls.first()->logicalInternalContext(0); @@ -278,7 +272,7 @@ //Change the prefix-id so it respects namespace-imports prefixId = classContext->scopeIdentifier(true); - if(prefixId.count() >= currentScopeId.count()) + if(prefixId.count() >= currentScopeId.count() && prefixId.left(currentScopeId.count()) == currentScopeId) prefixId = prefixId.mid(currentScopeId.count()); else kDebug() << "resolved bad prefix context. Should start with" << currentScopeId.toString() << "but is" << prefixId.toString(); @@ -517,9 +511,9 @@ if (!m_importedParentContexts.isEmpty()) { DUChainReadLocker lock(DUChain::lock()); - kDebug(9007) << file->url().str() << "Previous parameter declaration context didn't get used??" ; - KDevelop::DumpChain dump; - dump.dump(topLevelContext); + kWarning() << file->url().str() << "Previous parameter declaration context didn't get used??" ; +// KDevelop::DumpChain dump; +// dump.dump(topLevelContext); m_importedParentContexts.clear(); } @@ -1058,12 +1052,12 @@ if (compilingContexts() && !m_importedParentContexts.isEmpty()) { DUChainWriteLocker lock(DUChain::lock()); - foreach (DUContext::Import imported, m_importedParentContexts) + foreach (const DUContext::Import& imported, m_importedParentContexts) if(DUContext* imp = imported.context(topContext())) addImportedParentContextSafely(currentContext(), imp); //Move on the internal-context of Declarations/Definitions - foreach( DUContext::Import importedContext, m_importedParentContexts ) { + foreach( const DUContext::Import& importedContext, m_importedParentContexts ) { if( DUContext* imp = importedContext.context(topContext()) ) if( imp->type() == DUContext::Template || imp->type() == DUContext::Function ) if( imp->owner() && imp->owner()->internalContext() == imp ) diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/cppduchain.cpp kdevelop-4.0.1/languages/cpp/cppduchain/cppduchain.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/cppduchain.cpp 2009-11-15 16:22:35.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/cppduchain.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -238,7 +238,7 @@ if(context->type() == DUContext::Other) { //Jump from code-context to function-context - foreach(DUContext::Import import, context->importedParentContexts()) { + foreach(const DUContext::Import& import, context->importedParentContexts()) { if(DUContext* i = import.context(context->topContext())) { if(i->type() == DUContext::Function) { context = i; @@ -250,7 +250,7 @@ //For external function definitions, find the class-context by following the import-structure if(context->type() == DUContext::Function) { - foreach(DUContext::Import import, context->importedParentContexts()) { + foreach(const DUContext::Import& import, context->importedParentContexts()) { DUContext* ctx = import.context(context->topContext()); if(ctx && ctx->type() == DUContext::Class && ctx->owner()) return ctx->owner(); @@ -276,7 +276,7 @@ if(context->type() == DUContext::Other) { //Jump from code-context to function-context - foreach(DUContext::Import import, context->importedParentContexts()) { + foreach(const DUContext::Import& import, context->importedParentContexts()) { if(DUContext* i = import.context(context->topContext())) { if(i->type() == DUContext::Function) { return i->owner(); @@ -392,12 +392,13 @@ { DUChainReadLocker lock(DUChain::lock()); -/* kDebug(9007) << "defined macros: " << file->definedMacros().size();*/ //Copy in all macros from the file for( Cpp::ReferenceCountedMacroSet::Iterator it( file->definedMacros().iterator() ); it; ++it ) { if( line == -1 || line > it.ref().sourceLine || file->url() != it.ref().file ) { if(!disableMacros.contains( it.ref().name )) + { pp.environment()->setMacro( new rpp::pp_macro(it.ref()) ); + } } } for( Cpp::ReferenceCountedMacroSet::Iterator it( file->usedMacros().iterator() ); it; ++it ) { @@ -537,7 +538,7 @@ int reservedIdentifierCount(QString name) { QStringList l = name.split("::"); int ret = 0; - foreach(QString s, l) + foreach(const QString& s, l) if(s.startsWith('_')) ++ret; @@ -671,21 +672,25 @@ return type; } -QString shortenedTypeString(KDevelop::Declaration* decl, KDevelop::DUContext* ctx, int desiredLength, KDevelop::QualifiedIdentifier stripPrefix) { +AbstractType::Ptr typeForShortenedString (Declaration* decl) +{ AbstractType::Ptr type = decl->abstractType(); if(decl->isTypeAlias()) { if(type.cast()) type = type.cast()->type(); } - + if(decl->isFunctionDeclaration()) { FunctionType::Ptr funType = decl->type(); if(!funType) - return QString(); + return AbstractType::Ptr(); type = funType->returnType(); } - - return shortenedTypeString(type, ctx, desiredLength, stripPrefix); + return type; +} + +QString shortenedTypeString(KDevelop::Declaration* decl, KDevelop::DUContext* ctx, int desiredLength, KDevelop::QualifiedIdentifier stripPrefix) { + return shortenedTypeString(typeForShortenedString(decl), ctx, desiredLength, stripPrefix); } QString simplifiedTypeString(KDevelop::AbstractType::Ptr type, KDevelop::DUContext* visibilityFrom) { @@ -794,16 +799,21 @@ if(!ctx) return id; + QualifiedIdentifier basicId = id; + QList imports = ctx->fullyApplyAliases(QualifiedIdentifier(), ctx->topContext()); if(imports.contains(id)) return QualifiedIdentifier(); ///The id is a namespace that is imported into the current context - QList< Declaration* > basicDecls = ctx->findDeclarations(id); + QList< Declaration* > basicDecls = ctx->findDeclarations(id, SimpleCursor::invalid(), AbstractType::Ptr(), 0, (DUContext::SearchFlags)(DUContext::NoSelfLookUp | DUContext::NoFiltering)); + + if(basicDecls.isEmpty()) + return id; while(!id.isEmpty()) { QualifiedIdentifier newId = id.mid(1); - QList< Declaration* > foundDecls = ctx->findDeclarations(newId); + QList< Declaration* > foundDecls = ctx->findDeclarations(newId, SimpleCursor::invalid(), AbstractType::Ptr(), 0, (DUContext::SearchFlags)(DUContext::NoSelfLookUp | DUContext::NoFiltering)); if(foundDecls == basicDecls) id = newId; @@ -811,14 +821,10 @@ break; } - if(id.count() == 1) - { - //Check whether it is a namespace that is imported. If yes, return an empty qualified identifier - - } - return id; } +KDevelop::IndexedIdentifier castIdentifier(Identifier("operator{...cast...}")); +KDevelop::IndexedIdentifier unnamedNamespaceIdentifier(Identifier("unnamed{...namespace...}")); } diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/cppduchain.h kdevelop-4.0.1/languages/cpp/cppduchain/cppduchain.h --- kdevelop-3.9.98/languages/cpp/cppduchain/cppduchain.h 2009-11-01 19:18:23.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/cppduchain.h 2010-07-17 20:08:19.000000000 +0100 @@ -48,6 +48,11 @@ namespace Cpp { class EnvironmentFile; + +KDEVCPPDUCHAIN_EXPORT extern KDevelop::IndexedIdentifier castIdentifier; + +KDEVCPPDUCHAIN_EXPORT extern KDevelop::IndexedIdentifier unnamedNamespaceIdentifier; + /** * Searches context, and if the identifier is not found there, in its base-classes, as it should be in c++(Only if it's a class context). * @param topContext should be the top-context from where the search starts. This is needed to resolve template-parameters. @@ -128,6 +133,8 @@ ///the qualified identifier will be set to an expression. KDEVCPPDUCHAIN_EXPORT KDevelop::IndexedTypeIdentifier identifierForType(KDevelop::AbstractType::Ptr type, KDevelop::TopDUContext* top); +///Returns the type that should be used for shortened printing of the same. +KDEVCPPDUCHAIN_EXPORT KDevelop::AbstractType::Ptr typeForShortenedString(KDevelop::Declaration* decl); ///Returns a shortened string version of the type attached to the given declaration. ///@param desiredLength the desired length. No guarantee that the resulting string will be this short. With the default-value, no shortening will happen in most cases. ///@param ctx visibility context to consider. All prefixes of types are shortened to the minimum length while staying visible from here diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/cppducontext.h kdevelop-4.0.1/languages/cpp/cppduchain/cppducontext.h --- kdevelop-3.9.98/languages/cpp/cppduchain/cppducontext.h 2009-12-09 22:18:35.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/cppducontext.h 2010-07-17 20:08:19.000000000 +0100 @@ -58,7 +58,6 @@ #include #include #include -#include #include #include #include "typeutils.h" @@ -244,8 +243,10 @@ ///Overridden to take care of templates and other c++ specific things virtual bool findDeclarationsInternal(const DUContext::SearchItem::PtrList& identifiers, const SimpleCursor& position, const AbstractType::Ptr& dataType, DUContext::DeclarationList& ret, const TopDUContext* source, typename BaseContext::SearchFlags basicFlags, uint depth ) const { - if(this->type() == DUContext::Class && identifiers.count() == 1 && /*!identifiers[0]->hasNext() &&*/!(basicFlags & DUContext::OnlyFunctions) && this->localScopeIdentifier().count()) { - + if(this->type() == DUContext::Class && identifiers.count() == 1 && + !(basicFlags & DUContext::NoSelfLookUp) && !(basicFlags & DUContext::OnlyFunctions) && this->localScopeIdentifier().count() && + !identifiers[0]->isExplicitlyGlobal) { + //Check whether we're searching for just the name of this context's class. If yes, return this context's owner. if(matchSearchItem(identifiers[0], this)) { @@ -502,7 +503,7 @@ } id.clearTemplateIdentifiers(); - FOREACH_FUNCTION(IndexedType arg, templateArguments.templateParameters) { + FOREACH_FUNCTION(const IndexedType& arg, templateArguments.templateParameters) { AbstractType::Ptr type(arg.abstractType()); IdentifiedType* identified = dynamic_cast(type.unsafeData()); if(identified) @@ -550,7 +551,7 @@ newItem->addToEachNode(identifiers); if(!newItem->next.isEmpty()) //Can happen if the identifier was explicitly global - insertToArray(identifiers, newItem, 0); + identifiers.insert(0, newItem); } } } diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/cpppreprocessenvironment.cpp kdevelop-4.0.1/languages/cpp/cppduchain/cpppreprocessenvironment.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/cpppreprocessenvironment.cpp 2010-01-10 21:40:00.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/cpppreprocessenvironment.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -117,6 +117,7 @@ for( Cpp::ReferenceCountedStringSet::Iterator it = file->unDefinedMacroNames().iterator(); it; ++it ) { rpp::pp_macro* m = new rpp::pp_macro(*it); m->defined = false; + m->m_valueHashValid = false; rpp::Environment::setMacro(m); //Do not use our overridden setMacro(..), because addDefinedMacro(..) is not needed(macro-sets should be merged separately) } @@ -127,17 +128,31 @@ void CppPreprocessEnvironment::setMacro(rpp::pp_macro* macro) { rpp::pp_macro* hadMacro = retrieveStoredMacro(macro->name); - //If a macro of the same name has been fixed, the new macro has no effect if(hadMacro && hadMacro->fixed) { - if(!macro->isRepositoryMacro()) - delete macro; - return; + if(hadMacro->defineOnOverride && (hadMacro->file.isEmpty() || + (macro->file.length() >= hadMacro->file.length() && + memcmp(macro->file.c_str() + (macro->file.length() - hadMacro->file.length()), + hadMacro->file.c_str(), + hadMacro->file.length()) == 0))) + { + // We have to define the macro now, as it is being overridden + rpp::pp_macro* definedMacro = new rpp::pp_macro(*hadMacro); + definedMacro->defined = true; + if(!macro->isRepositoryMacro()) + delete macro; + macro = definedMacro; + }else{ + // A fixed macro exists, simply ignore the added macro + if(!macro->isRepositoryMacro()) + delete macro; + return; + } } //kDebug() << "setting macro" << macro->name.str() << "with body" << macro->definition << "is undef:" << macro->isUndef(); //Note defined macros if( m_environmentFile ) - m_environmentFile->addDefinedMacro(*macro, retrieveStoredMacro(macro->name)); + m_environmentFile->addDefinedMacro(*macro, hadMacro); if( !macro->isUndef() ) m_macroNameSet.insert(macro->name); diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/declarationbuilder.cpp kdevelop-4.0.1/languages/cpp/cppduchain/declarationbuilder.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/declarationbuilder.cpp 2009-12-16 11:28:26.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/declarationbuilder.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -60,11 +60,6 @@ #include "name_visitor.h" #include "usebuilder.h" -const Identifier& castIdentifier() { - static Identifier id("operator{...cast...}"); - return id; -} - using namespace KTextEditor; using namespace KDevelop; using namespace Cpp; @@ -165,7 +160,7 @@ } } -void DeclarationBuilder::parseComments(const ListNode *comments) +void DeclarationBuilder::parseComments(const ListNode *comments) { setComment(CommentFormatter::formatComment(comments, editor()->parseSession())); } @@ -226,7 +221,8 @@ openPrefixContext(node, id, pos); //We create a temporary prefix-context to search from within the right scope DUContext* tempContext = currentContext(); - node->declarator->parameter_is_initializer = !checkParameterDeclarationClause(node->declarator->parameter_declaration_clause); + if (currentContext()->type() != DUContext::Class) + node->declarator->parameter_is_initializer = !checkParameterDeclarationClause(node->declarator->parameter_declaration_clause); closePrefixContext(id); @@ -436,8 +432,8 @@ { SimpleRange newRange; if(name) { - std::size_t start = name->unqualified_name->start_token; - std::size_t end = name->unqualified_name->end_token; + uint start = name->unqualified_name->start_token; + uint end = name->unqualified_name->end_token; //We must exclude the tilde. Else we may get totally messed up ranges when the name of a destructor is renamed in a macro if(name->unqualified_name->tilde) @@ -558,8 +554,8 @@ } if(prior && !editor()->currentRange(iface)) { - editor()->setCurrentRange(iface, backup[backup.count()-1]); - backup.resize(backup.size()-1); + editor()->setCurrentRange(iface, backup.back()); + backup.pop_back(); } SmartRange* range = editor()->currentRange(iface) ? editor()->createRange(iface, newRange.textRange()) : 0; @@ -898,7 +894,7 @@ { //Ugly hack: Since we want the identifier only to have the range of the id(not //the assigned expression), we change the range of the node temporarily - size_t oldEndToken = node->end_token; + uint oldEndToken = node->end_token; node->end_token = node->id + 1; Identifier id(editor()->parseSession()->token_stream->token(node->id).symbol()); @@ -936,10 +932,23 @@ void DeclarationBuilder::visitNamespace(NamespaceAST* ast) { - if (ast->namespace_name) { + { + SimpleRange range; + Identifier id; + + if(ast->namespace_name) + { + id = Identifier(editor()->tokensToStrings(ast->namespace_name, ast->namespace_name+1)); + range = editor()->findRange(ast->namespace_name, ast->namespace_name+1); + }else + { + id = unnamedNamespaceIdentifier.identifier(); + range.start = editor()->findPosition(ast->linkage_body ? ast->linkage_body->start_token : ast->start_token, KDevelop::EditorIntegrator::FrontEdge); + range.end = range.start; + } + DUChainWriteLocker lock(DUChain::lock()); - SimpleRange range = editor()->findRange(ast->namespace_name, ast->namespace_name+1); - Identifier id(editor()->tokenToString(ast->namespace_name)); + Declaration * declaration = openDeclarationReal(0, 0, id, false, false, &range); ///Create mappings iff the AST feature is specified @@ -949,7 +958,7 @@ DeclarationBuilderBase::visitNamespace(ast); - if (ast->namespace_name) { + { DUChainWriteLocker lock(DUChain::lock()); currentDeclaration()->setKind(KDevelop::Declaration::Namespace); clearLastType(); @@ -1126,7 +1135,14 @@ QualifiedIdentifier DeclarationBuilder::resolveNamespaceIdentifier(const QualifiedIdentifier& identifier, const SimpleCursor& position) { - QList contexts = currentContext()->findContexts(DUContext::Namespace, identifier, position); + QList< Declaration* > decls = currentContext()->findDeclarations(identifier, position); + + QList contexts; + + foreach(Declaration* decl, decls) + if(decl->kind() == Declaration::Namespace && decl->internalContext()) + contexts << decl->internalContext(); + if( contexts.isEmpty() ) { //Failed to resolve namespace kDebug(9007) << "Failed to resolve namespace \"" << identifier << "\""; @@ -1349,12 +1365,12 @@ bool isSlot = false; bool isSignal = false; if (node->specs) { - const ListNode *it = node->specs->toFront(); - const ListNode *end = it; + const ListNode *it = node->specs->toFront(); + const ListNode *end = it; do { int kind = editor()->parseSession()->token_stream->kind(it->element); switch (kind) { - case Token_slots: + case Token___qt_slots__: case Token_k_dcop: isSlot = true; break; @@ -1362,7 +1378,7 @@ setAccessPolicy(Declaration::Public); break; case Token_k_dcop_signals: - case Token_signals: + case Token___qt_signals__: isSignal = true; case Token_protected: setAccessPolicy(Declaration::Protected); @@ -1386,13 +1402,13 @@ DeclarationBuilderBase::visitAccessSpecifier(node); } -void DeclarationBuilder::parseStorageSpecifiers(const ListNode* storage_specifiers) +void DeclarationBuilder::parseStorageSpecifiers(const ListNode* storage_specifiers) { ClassMemberDeclaration::StorageSpecifiers specs = 0; if (storage_specifiers) { - const ListNode *it = storage_specifiers->toFront(); - const ListNode *end = it; + const ListNode *it = storage_specifiers->toFront(); + const ListNode *end = it; do { int kind = editor()->parseSession()->token_stream->kind(it->element); switch (kind) { @@ -1423,13 +1439,13 @@ m_storageSpecifiers.push(specs); } -void DeclarationBuilder::parseFunctionSpecifiers(const ListNode* function_specifiers) +void DeclarationBuilder::parseFunctionSpecifiers(const ListNode* function_specifiers) { AbstractFunctionDeclaration::FunctionSpecifiers specs = 0; if (function_specifiers) { - const ListNode *it = function_specifiers->toFront(); - const ListNode *end = it; + const ListNode *it = function_specifiers->toFront(); + const ListNode *end = it; do { int kind = editor()->parseSession()->token_stream->kind(it->element); switch (kind) { @@ -1553,7 +1569,7 @@ ParameterDeclarationAST* ast = it->element; if(ast) { if(m_collectQtFunctionSignature) { - size_t endToken = ast->end_token; + uint endToken = ast->end_token; if(ast->type_specifier) endToken = ast->type_specifier->end_token; diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/declarationbuilder.h kdevelop-4.0.1/languages/cpp/cppduchain/declarationbuilder.h --- kdevelop-3.9.98/languages/cpp/cppduchain/declarationbuilder.h 2009-09-28 14:47:28.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/cppduchain/declarationbuilder.h 2010-07-17 20:08:19.000000000 +0100 @@ -130,8 +130,8 @@ //Opens either a ClassMemberDeclaration, or a Declaration Declaration* openNormalDeclaration(NameAST* name, AST* rangeNode, const Identifier& customName = Identifier(), bool collapseRange = false); - void parseStorageSpecifiers(const ListNode* storage_specifiers); - void parseFunctionSpecifiers(const ListNode* function_specifiers); + void parseStorageSpecifiers(const ListNode* storage_specifiers); + void parseFunctionSpecifiers(const ListNode* function_specifiers); inline KDevelop::Declaration::AccessPolicy currentAccessPolicy() { return ((KDevelop::Declaration::AccessPolicy)((m_accessPolicyStack.top() & (~((uint)FunctionIsSignal))) & (~((uint)FunctionIsSlot)))); } inline void setAccessPolicy(KDevelop::Declaration::AccessPolicy policy) { m_accessPolicyStack.top() = policy; } @@ -139,7 +139,7 @@ Cpp::InstantiationInformation createSpecializationInformation(Cpp::InstantiationInformation base, UnqualifiedNameAST* name, KDevelop::DUContext* templateContext); Cpp::IndexedInstantiationInformation createSpecializationInformation(NameAST* name, DUContext* templateContext); - void parseComments(const ListNode *comments); + void parseComments(const ListNode *comments); void applyStorageSpecifiers(); void applyFunctionSpecifiers(); @@ -151,7 +151,7 @@ QStack m_functionSpecifiers; QStack m_storageSpecifiers; - QStack m_functionDefinedStack; + QStack m_functionDefinedStack; bool m_changeWasSignificant, m_ignoreDeclarators, m_declarationHasInitializer; @@ -162,7 +162,5 @@ QByteArray m_qtFunctionSignature; }; -KDEVCPPDUCHAIN_EXPORT const Identifier& castIdentifier(); - #endif // DECLARATIONBUILDER_H diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/environmentmanager.cpp kdevelop-4.0.1/languages/cpp/cppduchain/environmentmanager.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/environmentmanager.cpp 2009-12-16 10:25:42.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/environmentmanager.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -22,7 +22,6 @@ #include #include "parser/rpp/macrorepository.h" #include "cppdebughelper.h" -#include #include #include #include @@ -419,7 +418,7 @@ if(d_func()->m_includePaths) { const IncludePathListItem* item = includePathsRepository.itemFromIndex(d_func()->m_includePaths); - FOREACH_FUNCTION(IndexedString include, item->m_includePaths) + FOREACH_FUNCTION(const IndexedString& include, item->m_includePaths) ret << include; } return ret; diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/expressionparser.h kdevelop-4.0.1/languages/cpp/cppduchain/expressionparser.h --- kdevelop-3.9.98/languages/cpp/cppduchain/expressionparser.h 2009-11-08 14:40:04.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/expressionparser.h 2010-07-17 20:08:19.000000000 +0100 @@ -88,7 +88,7 @@ * The duchain does not strictly need to be locked when this is called, but it should be locked if the entity evaluating the expression has no control over * the lifetime of ast->context * - * @param ast the AST. Its context must be built already, the context-member must be filled. + * @param ast the AST. @warning its ducontext must be built already, the ducontext member variable must be filled. * @param debug whether additional output to kdDebug should be issued */ ExpressionEvaluationResult evaluateType( AST* ast, ParseSession* session, const KDevelop::TopDUContext* source = 0 ); diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/expressionvisitor.cpp kdevelop-4.0.1/languages/cpp/cppduchain/expressionvisitor.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/expressionvisitor.cpp 2009-11-17 20:21:38.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/expressionvisitor.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -422,7 +422,13 @@ return true; } else { LOCKDUCHAIN; - problem(node, QString("Cannot dereference base-type \"%1\"").arg(base->toString()) ); + QString typeStr; + if (base) { + typeStr = base->toString(); + } else { + typeStr = ""; + } + problem(node, QString("Cannot dereference base-type \"%1\"").arg(typeStr) ); return false; } } @@ -638,10 +644,27 @@ const Token& token(tokenFromIndex(node->token)); - IndexedString True("true"); - IndexedString False("false"); - - if(token.symbol() == True || token.symbol() == False) { + static const IndexedString True("true"); + static const IndexedString False("false"); + + if(token.kind == Token_char_literal) { + // char literal e.g. 'x' + LOCKDUCHAIN; + m_lastType = AbstractType::Ptr(new ConstantIntegralType(IntegralType::TypeChar)); + m_lastInstance = Instance( true ); + if ( token.size == 3 ) { + static_cast(m_lastType.unsafeData())->setValue( token.symbolByteArray().at(1) ); + } else if (token.size == 4) { + if (token.symbolByteArray() == "'\\t'") { + static_cast(m_lastType.unsafeData())->setValue('\t'); + } else if (token.symbolByteArray() == "'\\n'") { + static_cast(m_lastType.unsafeData())->setValue('\n'); + } else if (token.symbolByteArray() == "'\\r'") { + static_cast(m_lastType.unsafeData())->setValue('\r'); + } + } + + } else if(token.symbol() == True || token.symbol() == False) { ///We have a boolean constant, we need to catch that here LOCKDUCHAIN; m_lastType = AbstractType::Ptr(new ConstantIntegralType(IntegralType::TypeBoolean)); @@ -1121,13 +1144,26 @@ bool fail = true; size_t token = node->start_token; - - if(node->initializer) + //NOTE: we might have an initializer in a class for pure virtual methods, + // but we just ignore that. See also TestDUChain::testForwardDeclaration4 + if(node->initializer && m_currentContext->type() != DUContext::Class) { if(node->initializer->expression && !node->initializer->initializer_clause) { token = node->initializer->start_token; fail = !buildParametersFromExpression(node->initializer->expression); + } else if(!node->initializer->expression && node->initializer->initializer_clause && constructedType) + { // report operator= use in i.e.: foo = bar; + token = node->initializer->start_token; + fail = !buildParametersFromExpression(node->initializer->initializer_clause->expression); + LOCKDUCHAIN; + declarations.clear(); + if ( ClassDeclaration* cdec = dynamic_cast(constructedType->declaration(m_source)) ) { + ///TODO: global operator= functions, for now only class members are handled + foreach(Declaration* dec, cdec->internalContext()->findDeclarations(Identifier("operator="))) { + declarations << DeclarationPointer(dec); + } + } } } else if(node->declarator->parameter_is_initializer && node->declarator->parameter_declaration_clause) @@ -1689,6 +1725,15 @@ do { + //Just to make sure we build the uses. This problem only appears if we mis-parse a declarator as a parameter declaration + if(it->element->declarator && it->element->declarator->array_dimensions) + { + const ListNode< ExpressionAST* >* itt = it->element->declarator->array_dimensions->toFront(), *end2 = itt; + do{ + visit(it->element->declarator->array_dimensions->element); + }while(itt != end2); + } + visit(it->element->type_specifier); if(it->element->declarator) { @@ -1955,11 +2000,10 @@ CppEditorIntegrator editor(session()); QByteArray tokenByteArray = editor.tokensToByteArray(node->name->id, node->name->end_token); - IndexedString sig; + QByteArray sig; if(node->name->end_token-1 >= node->name->id+2) { - QByteArray tempSig = QMetaObject::normalizedSignature( editor.tokensToByteArray(node->name->id+1, node->name->end_token) ); - tempSig = tempSig.mid(1, tempSig.length()-2); - sig = IndexedString(tempSig); + sig = QMetaObject::normalizedSignature( editor.tokensToByteArray(node->name->id+1, node->name->end_token) ); + sig = sig.mid(1, sig.length()-2); } Identifier id(tokenFromIndex(node->name->id).symbol()); @@ -1967,11 +2011,22 @@ if(!id.isEmpty()) { foreach(Declaration* decl, container->findDeclarations(id, SimpleCursor::invalid(), m_topContext, (DUContext::SearchFlags)(DUContext::DontSearchInParent | DUContext::NoFiltering))) { QtFunctionDeclaration* qtFunction = dynamic_cast(decl); - if(qtFunction && qtFunction->normalizedSignature() == sig) { - //Match - lock.unlock(); - newUse( node, node->name->id, node->name->id+1, DeclarationPointer(qtFunction) ); - return; + if(qtFunction) { + ///Allow incomplete matching between the specified signature and the real signature, as Qt allows it. + ///@todo: For signals, we should only allow it when at least as many arguments are specified as in the slot declaration. + ///@todo: For slots, we should only allow it if the parameter has a default argument. + uint functionSigLength = qtFunction->normalizedSignature().length(); + const char* functionSig = qtFunction->normalizedSignature().c_str(); + + if(functionSigLength >= sig.length() && + strncmp(functionSig, sig.data(), sig.length()) == 0 && + (sig.isEmpty() || functionSigLength == sig.length() || functionSig[sig.length()] == ' ' || functionSig[sig.length()] == ',')) + { + //Match + lock.unlock(); + newUse( node, node->name->id, node->name->id+1, DeclarationPointer(qtFunction) ); + return; + } } } } @@ -2221,10 +2276,31 @@ m_memberAccess = true; visit(node->initializer_id); m_memberAccess = false; - + AbstractType::Ptr itemType = m_lastType; + Instance oldLastInstance = m_lastInstance; + QList< DeclarationPointer > declarations = m_lastDeclarations; + if (buildParametersFromExpression(node->expression)) { + // build use for the ctor of the base class, see also visitInitDeclarator + DeclarationPointer chosenFunction; + { + LOCKDUCHAIN; + + KDevelop::DUContextPointer ptr(m_currentContext); + OverloadResolver resolver( ptr, KDevelop::TopDUContextPointer(topContext()), oldLastInstance ); + + chosenFunction = resolver.resolveList(m_parameters, convert(declarations)); + } + + if (chosenFunction) { + uint token = node->initializer_id->end_token; + newUse( node , token, token+1, chosenFunction ); + } + } + visit(node->expression); TypePtr< MissingDeclarationType > missingDeclType = itemType.cast(); + if(m_lastType && missingDeclType) { Cpp::ExpressionEvaluationResult res; res.type = m_lastType->indexed(); diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/missingdeclarationassistant.cpp kdevelop-4.0.1/languages/cpp/cppduchain/missingdeclarationassistant.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/missingdeclarationassistant.cpp 2009-12-12 00:08:40.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/missingdeclarationassistant.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -92,7 +92,7 @@ if(problem->type->isFunction) { QList signature; int num = 1; - foreach(OverloadResolver::Parameter arg, problem->type->arguments) { + foreach(const OverloadResolver::Parameter& arg, problem->type->arguments) { Cpp::SourceCodeInsertion::SignatureItem item; item.type = type(arg.type); item.name = QString("arg%1").arg(num); @@ -166,7 +166,7 @@ if(problem->type->isFunction) { QString ret = "("; bool first = true; - foreach(OverloadResolver::Parameter arg, problem->type->arguments) { + foreach(const OverloadResolver::Parameter& arg, problem->type->arguments) { if(!first) ret += ", "; else diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/name_visitor.cpp kdevelop-4.0.1/languages/cpp/cppduchain/name_visitor.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/name_visitor.cpp 2009-06-01 17:23:05.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/cppduchain/name_visitor.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -69,54 +69,59 @@ if (node->id) tmp_name = m_session->token_stream->token(node->id).symbol(); - if (node->tilde) tmp_name = IndexedString(QLatin1String("~") + tmp_name.str()); - - if (OperatorFunctionIdAST *op_id = node->operator_id) - { + if (OperatorFunctionIdAST *op_id = node->operator_id) { #if defined(__GNUC__) #warning "NameASTVisitor::visitUnqualifiedName() -- implement me" #endif - QString tmpString; - tmpString += QLatin1String("operator"); - - if (op_id->op && op_id->op->op) - tmpString += decode(m_session, op_id->op, true); - else - tmpString += QLatin1String("{...cast...}"); + QString tmpString; + tmpString += QLatin1String("operator"); - tmp_name = IndexedString(tmpString); + if (op_id->op && op_id->op->op) + tmpString += decode(m_session, op_id->op, true); + else + tmpString += QLatin1String("{...cast...}"); - m_typeSpecifier = op_id->type_specifier; - } + tmp_name = IndexedString(tmpString); + m_typeSpecifier = op_id->type_specifier; + } m_currentIdentifier = Identifier(tmp_name); m_find.openIdentifier(m_currentIdentifier); - if (node->template_arguments) - { - visitNodes(this, node->template_arguments); - }else if(node->end_token == node->start_token + 3 && node->id == node->start_token && m_session->token_stream->token(node->id+1).symbol() == KDevelop::IndexedString('<')) { - ///@todo Represent this nicer in the AST - ///It's probably a type-specifier with instantiation of the default-parameter, like "Bla<>". - m_find.openQualifiedIdentifier( ExpressionEvaluationResult() ); - m_find.closeQualifiedIdentifier(); - } + if (node->template_arguments) { + visitNodes(this, node->template_arguments); + } else if(node->end_token == node->start_token + 3 && node->id == node->start_token + && m_session->token_stream->token(node->id+1).symbol() == KDevelop::IndexedString('<')) + { + ///@todo Represent this nicer in the AST + ///It's probably a type-specifier with instantiation of the default-parameter, like "Bla<>". + m_find.openQualifiedIdentifier( ExpressionEvaluationResult() ); + m_find.closeQualifiedIdentifier(); + } { LOCKDUCHAIN; m_find.closeIdentifier(node == m_finalName); } - - if( node->id && !m_find.lastDeclarations().isEmpty() ) { + if( (node->id || node->operator_id) && !m_find.lastDeclarations().isEmpty() ) { bool had = false; + uint start_token; + uint end_token; + if ( node->id ) { + start_token = node->id; + end_token = node->id + 1; + } else { + start_token = node->start_token; + end_token = node->end_token; + } foreach(const DeclarationPointer &decl, m_find.lastDeclarations()) { if(decl && !decl->isForwardDeclaration()) { //Prefer registering non forward-declaration uses if(m_visitor) - m_visitor->newUse( node, node->id, node->id+1, decl ); + m_visitor->newUse( node, start_token, end_token, decl ); had = true; break; } @@ -124,7 +129,7 @@ if(!had) //only forward-declarations, register to any. if(m_visitor) - m_visitor->newUse( node, node->id, node->id+1, m_find.lastDeclarations()[0] ); + m_visitor->newUse( node, start_token,end_token, m_find.lastDeclarations()[0] ); } else { if(node == m_finalName) { if(m_visitor) { //Create a zero use, which will be highlighted as an error diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/navigation/macronavigationcontext.cpp kdevelop-4.0.1/languages/cpp/cppduchain/navigation/macronavigationcontext.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/navigation/macronavigationcontext.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/cppduchain/navigation/macronavigationcontext.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -49,7 +49,7 @@ QString MacroNavigationContext::html(bool shorten) { clear(); - modifyHtml() += "

"; + modifyHtml() += "

" + fontSizePrefix(shorten); addExternalHtml(m_prefix); QString args; @@ -58,7 +58,7 @@ args = "("; bool first = true; - FOREACH_CUSTOM(IndexedString b, m_macro->formals(), m_macro->formalsSize()) { + FOREACH_CUSTOM(const IndexedString& b, m_macro->formals(), m_macro->formalsSize()) { if(!first) args += ", "; first = false; @@ -92,7 +92,7 @@ makeLink(u.pathOrUrl(), u.pathOrUrl(), action); - modifyHtml() += "

"; + modifyHtml() += fontSizeSuffix(shorten) + "

"; return currentHtml(); } diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/overloadresolution.cpp kdevelop-4.0.1/languages/cpp/cppduchain/overloadresolution.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/overloadresolution.cpp 2009-12-09 22:18:35.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/overloadresolution.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -375,6 +375,9 @@ return AbstractType::Ptr(); Declaration* decl = idType->declaration(topContext); + if(!decl) + return AbstractType::Ptr(); + Declaration* containerDecl = decl->context()->owner(); if(containerDecl) diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/overloadresolutionhelper.cpp kdevelop-4.0.1/languages/cpp/cppduchain/overloadresolutionhelper.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/overloadresolutionhelper.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/cppduchain/overloadresolutionhelper.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -107,7 +107,7 @@ // log("parameters given to overload-resolution:"); // lock.unlock(); -// foreach( ExpressionEvaluationResult result, m_knownArgumentTypes ) { +// foreach( const ExpressionEvaluationResult& result, m_knownArgumentTypes ) { // log( result.toString() ); // } // lock.lock(); diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/sourcemanipulation.cpp kdevelop-4.0.1/languages/cpp/cppduchain/sourcemanipulation.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/sourcemanipulation.cpp 2009-12-12 00:08:40.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/sourcemanipulation.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -81,13 +81,13 @@ QRegExp nonWhiteSpace("\\S"); int minLineStart = 10000; - foreach(QString line, lines) { + foreach(const QString& line, lines) { int lineStart = line.indexOf(nonWhiteSpace); if(lineStart < minLineStart) minLineStart = lineStart; } - foreach(QString line, lines) + foreach(const QString& line, lines) ret << line.mid(minLineStart); return ret.join("\n"); @@ -147,12 +147,12 @@ scopeClose = ";"; } - foreach(QString scope, m_scope.toStringList()) + foreach(const QString& scope, m_scope.toStringList()) ret += scopeType + " " + scope + " {\n"; ret += decl; - foreach(QString scope, m_scope.toStringList()) + foreach(const QString& scope, m_scope.toStringList()) ret += "}" + scopeClose + "\n"; return ret; @@ -216,7 +216,7 @@ QStringList lines = decl.split('\n'); QString ind = indentation(); QStringList ret; - foreach(QString line, lines) { + foreach(const QString& line, lines) { if(!line.isEmpty()) ret << ind + line; else @@ -227,7 +227,7 @@ QString makeSignatureString(QList signature, DUContext* context) { QString ret; - foreach(SourceCodeInsertion::SignatureItem item, signature) { + foreach(const SourceCodeInsertion::SignatureItem& item, signature) { if(!ret.isEmpty()) ret += ", "; AbstractType::Ptr type = TypeUtils::removeConstants(item.type, context->topContext()); diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/templatedeclaration.cpp kdevelop-4.0.1/languages/cpp/cppduchain/templatedeclaration.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/templatedeclaration.cpp 2009-12-10 12:07:59.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/templatedeclaration.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -355,7 +355,7 @@ InstantiationInformation specializedWith(tempDecl->specializedWith().information()); if(specializedWith.templateParametersSize()) { //Use the information from the specialization-information to build the template-identifiers - FOREACH_FUNCTION(IndexedType indexedType, specializedWith.templateParameters) { + FOREACH_FUNCTION(const IndexedType& indexedType, specializedWith.templateParameters) { AbstractType::Ptr type = indexedType.abstractType(); if(type) identifier.appendTemplateIdentifier( IndexedTypeIdentifier(type->toString()) ); @@ -626,7 +626,7 @@ //Replace the delayed types in the specialization-information with their real types InstantiationInformation newSpecializedWith(oldSpecializedWith); newSpecializedWith.templateParametersList().clear(); - FOREACH_FUNCTION(IndexedType type, oldSpecializedWith.templateParameters) + FOREACH_FUNCTION(const IndexedType& type, oldSpecializedWith.templateParameters) newSpecializedWith.addTemplateParameter(resolveDelayedTypes(type.abstractType(), instantiatedDeclaration->internalContext() ? instantiatedDeclaration->internalContext() : parentContext, source )); instantiatedTemplate->setSpecializedWith(newSpecializedWith.indexed()); globalTemplateArguments = newSpecializedWith; @@ -960,7 +960,7 @@ TemplateDeclaration* instantiatedSpecialization = 0; uint specializationMatchQuality = 0; //Check whether there is a specialization that matches the template parameters - FOREACH_FUNCTION(IndexedDeclaration decl, specializations) { + FOREACH_FUNCTION(const IndexedDeclaration& decl, specializations) { //We only use visible specializations here if(source->recursiveImportIndices().contains(decl.indexedTopContext())) { diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/tests/test_duchain.cpp kdevelop-4.0.1/languages/cpp/cppduchain/tests/test_duchain.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/tests/test_duchain.cpp 2010-01-10 19:29:30.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/tests/test_duchain.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -94,6 +94,26 @@ Q_ASSERT(!tp); } +/// Object that locks the duchain for writing and destroys its TopDUContext on destruction +struct LockedTopDUContext +{ + LockedTopDUContext(TopDUContext* top) : m_top(top) + { + } + + ~LockedTopDUContext() { + DUChainWriteLocker lock(DUChain::lock()); + DUChain::self()->removeDocumentChain(m_top); + } + + TopDUContext* operator->() { + return m_top; + } + + TopDUContext* m_top; + DUChainWriteLocker m_writeLock; +}; + namespace QTest { template<> char* toString(const Cursor& cursor) @@ -104,6 +124,16 @@ return qstrdup(ba.data()); } template<> + char *toString(const SimpleRange &range) + { + QByteArray ba = "[ ("; + ba += QByteArray::number(range.start.line) + ", " + QByteArray::number(range.start.column); + ba += ") -> ("; + ba += QByteArray::number(range.end.line) + ", " + QByteArray::number(range.end.column); + ba += ") ]"; + return qstrdup(ba.data()); + } + template<> char* toString(const QualifiedIdentifier& id) { QByteArray arr = id.toString().toLatin1(); @@ -350,14 +380,20 @@ void TestDUChain::testMultiByteCStrings() { - QByteArray method("char* c=\"ä\";c;"); + ///@todo This currently does not work, the range has an offset of 1 to the right +#if 0 + int c; + QByteArray method("char* c=\"ä\";void test() { c = 1; }"); TopDUContext* top = parse(method, DumpNone); DUChainWriteLocker lock(DUChain::lock()); Declaration* cDec = top->localDeclarations().first(); QCOMPARE(cDec->uses().size(), 1); QCOMPARE(cDec->uses().begin()->size(), 1); - QVERIFY(cDec->uses().begin()->first() == SimpleRange(0, 12, 0, 13)); + kDebug() << cDec->uses().begin()->first().textRange(); + +// QVERIFY(cDec->uses().begin()->first() == SimpleRange(0, 28, 0, 29)); release(top); +#endif } void TestDUChain::testEllipsis() @@ -386,8 +422,6 @@ TopDUContext* top = parse(method, DumpNone); DUChainWriteLocker lock(DUChain::lock()); - QCOMPARE(top->findContexts(DUContext::Class, QualifiedIdentifier("Stru") ).count(), 1); - QCOMPARE(top->findContexts(DUContext::Namespace, QualifiedIdentifier("Stru") ).count(), 0); release(top); } } @@ -404,7 +438,7 @@ DUChainWriteLocker lock(DUChain::lock()); QCOMPARE(top->localDeclarations().count(), 2); QCOMPARE(top->localDeclarations()[0]->qualifiedIdentifier(), QualifiedIdentifier("S")); - QCOMPARE(top->childContexts().count(), 4); + QCOMPARE(top->childContexts().count(), 5); ///There is one 'garbage' context QCOMPARE(top->childContexts()[0]->localDeclarations().count(), 4); QCOMPARE(top->childContexts()[0]->childContexts().count(), 3); QCOMPARE(top->childContexts()[0]->childContexts()[0]->localDeclarations().count(), 1); @@ -413,8 +447,8 @@ QCOMPARE(staticDeclaration->qualifiedIdentifier(), QualifiedIdentifier("S::testValue")); QVERIFY(staticDeclaration->isStatic()); - QCOMPARE(top->childContexts()[1]->localDeclarations().count(), 1); - Declaration* actualDeclaration = top->childContexts()[1]->localDeclarations()[0]; + QCOMPARE(top->childContexts()[2]->localDeclarations().count(), 1); + Declaration* actualDeclaration = top->childContexts()[2]->localDeclarations()[0]; QVERIFY(!dynamic_cast(actualDeclaration)); QCOMPARE(actualDeclaration->qualifiedIdentifier(), QualifiedIdentifier("S::testValue")); @@ -526,6 +560,23 @@ release(top); } +void TestDUChain::testTypeof() { + TEST_FILE_PARSE_ONLY + + { + QByteArray method("__typeof__(wchar_t) x; typedef typeof(++x) x_t;"); + + TopDUContext* top = parse(method, DumpNone); + + DUChainWriteLocker lock(DUChain::lock()); + + QCOMPARE(top->localDeclarations().count(), 2); + QCOMPARE(unAliasedType(top->localDeclarations()[1]->abstractType())->toString(), QString("wchar_t")); + + release(top); + } +} + void TestDUChain::testArrayType() { TEST_FILE_PARSE_ONLY @@ -610,8 +661,8 @@ TEST_FILE_PARSE_ONLY { - // 0 1 2 3 4 5 - // 012345678901234567890123456789012345678901234567890123456789 + // 0 1 2 3 4 5 6 7 8 + // 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 QByteArray method("namespace N { struct A { A(int); int m; }; }; struct B : public N::A { B() : N::A(5) { this->N::A::m = 5; } };"); TopDUContext* top = parse(method, DumpNone); @@ -626,7 +677,10 @@ QCOMPARE(top->childContexts()[0]->childContexts()[0]->localDeclarations().count(), 2); QVERIFY(!top->childContexts()[0]->childContexts()[0]->localDeclarations()[1]->uses().isEmpty()); QCOMPARE(top->childContexts()[0]->localDeclarations()[0]->uses().begin()->size(), 3); - + // the ctor usage + QCOMPARE(top->childContexts()[0]->childContexts()[0]->localDeclarations()[0]->uses().count(), 1); + QCOMPARE(top->childContexts()[0]->childContexts()[0]->localDeclarations()[0]->uses().values().first().count(), 1); + QCOMPARE(top->childContexts()[0]->childContexts()[0]->localDeclarations()[0]->uses().values().first().first(), SimpleRange(0, 81, 0, 82)); release(top); } @@ -655,6 +709,35 @@ release(top); } + { + // 0 1 2 3 4 5 + // 012345678901234567890123456789012345678901234567890123456789 + QByteArray method("template class A{ A(){} };\n" + "template class B : public A { B() : A() {} };"); + + TopDUContext* top = parse(method, DumpNone); + + DUChainWriteLocker lock(DUChain::lock()); + + QCOMPARE(top->localDeclarations().count(), 2); + + // uses of class A + QEXPECT_FAIL("", "Cookie for the one fixing that!", Abort); + QCOMPARE(top->localDeclarations().first()->uses().size(), 1); + QCOMPARE(top->localDeclarations().first()->uses().begin()->size(), 2); + // use in class B : public A + QCOMPARE(top->localDeclarations().first()->uses().begin()->at(0), SimpleRange(1, 38, 1, 39)); + // use in B() : A() + QCOMPARE(top->localDeclarations().first()->uses().begin()->at(1), SimpleRange(1, 51, 1, 52)); + + // use of A's ctor + QCOMPARE(top->childContexts()[0]->localDeclarations().count(), 1); + QCOMPARE(top->childContexts()[1]->localDeclarations().first()->uses().size(), 1); + QCOMPARE(top->childContexts()[1]->localDeclarations().first()->uses().begin()->size(), 1); + QCOMPARE(top->childContexts()[1]->localDeclarations().first()->uses().begin()->first(), SimpleRange(1, 55, 1, 56)); + + release(top); + } } @@ -1427,6 +1510,24 @@ TEST_FILE_PARSE_ONLY { + QByteArray method("namespace A { class B { class C; } ; } namespace A { class A::B::C { }; }"); + + TopDUContext* top = parse(method, DumpAll); + + DUChainWriteLocker lock(DUChain::lock()); + + QCOMPARE(top->childContexts().count(), 2); + QCOMPARE(top->childContexts()[0]->childContexts().size(), 1); + QCOMPARE(top->childContexts()[0]->childContexts()[0]->localDeclarations().size(), 1); + + ForwardDeclaration* forwardDecl = dynamic_cast(top->childContexts()[0]->childContexts()[0]->localDeclarations()[0]); + QVERIFY(forwardDecl); + QVERIFY(forwardDecl->resolve(top)); + + release(top); + } + + { // 0 1 2 3 4 5 6 7 // 01234567890123456789012345678901234567890123456789012345678901234567890123456789 QByteArray method("struct A {A(); struct B;}; struct A::B { B(); struct C; }; struct A::B::C { A mem; B mem2; void test(A param); }; void A::B::C::test(A param) {};"); @@ -1766,7 +1867,40 @@ QCOMPARE(items[a].referenceCount, 1u); //Once by the namespace, once by the declaration } } + + release(top); +} + +void TestDUChain::testDeclareNamespace2() +{ + TEST_FILE_PARSE_ONLY + + // 0 1 2 3 4 5 6 7 + // 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012 + QByteArray method("struct A {}; namespace B { struct A : ::A {}; }"); + + TopDUContext* top = parse(method, DumpNone); + + DUChainWriteLocker lock(DUChain::lock()); + + QVERIFY(!top->parentContext()); + QCOMPARE(top->localDeclarations().count(), 2); + QCOMPARE(top->childContexts().count(), 2); + QCOMPARE(top->childContexts()[1]->localDeclarations().count(), 1); + + CppClassType::Ptr outerA = top->localDeclarations()[0]->abstractType().cast(); + CppClassType::Ptr innerA = top->childContexts()[1]->localDeclarations()[0]->abstractType().cast(); + + QVERIFY(outerA); + QVERIFY(innerA); + Declaration* klassDecl = innerA->declaration(top); + ClassDeclaration* cppClassDecl = dynamic_cast(klassDecl); + + QVERIFY(cppClassDecl); + QCOMPARE(cppClassDecl->baseClassesSize(), (uint)1); + QCOMPARE(cppClassDecl->baseClasses()->baseClass, outerA->indexed()); + release(top); } @@ -1964,6 +2098,24 @@ release(top); } +void TestDUChain::testLocalNamespaceAlias() +{ + QByteArray method("namespace foo { int bar(); } int test() { namespace afoo = foo; afoo::bar(); }"); + + LockedTopDUContext top( parse(method, DumpAll) ); + + QCOMPARE(top->childContexts().count(), 3); + QCOMPARE(top->childContexts()[2]->localDeclarations().size(), 1); + NamespaceAliasDeclaration* aliasDecl = dynamic_cast(top->childContexts()[2]->localDeclarations()[0]); + QVERIFY(aliasDecl); + QCOMPARE(aliasDecl->importIdentifier(), QualifiedIdentifier("foo")); + QCOMPARE(aliasDecl->identifier(), Identifier("afoo")); + QCOMPARE(top->childContexts()[0]->localDeclarations().size(), 1); + + QEXPECT_FAIL("", "Local namespace aliases currently don't work, bug 207548", Abort); + QCOMPARE(top->childContexts()[0]->localDeclarations()[0]->uses().size(), 1); + QCOMPARE(top->childContexts()[0]->localDeclarations()[0]->uses().begin()->size(), 1); +} void TestDUChain::testDeclareUsingNamespace() { @@ -2030,7 +2182,7 @@ void TestDUChain::testSignalSlotDeclaration() { { - QByteArray text("#define Q___qt_sig_slot__S signals\n#define signals bla\n#undef signals\nclass C {Q___qt_sig_slot__S: void signal2(); public slots: void slot2();}; "); + QByteArray text("class C {__qt_signals__: void signal2(); public __qt_slots__: void slot2();}; "); TopDUContext* top = parse(text, DumpNone); @@ -2052,7 +2204,7 @@ release(top); } { - QByteArray text("namespace A { class B;} class Q { public slots: void slot(A::B b, const Q* q); }; "); + QByteArray text("namespace A { class B;} class Q { public __qt_slots__: void slot(A::B b, const Q* q); }; "); TopDUContext* top = parse(text, DumpNone); @@ -2066,11 +2218,34 @@ release(top); } + { + // should be valid signals even if the arguments are not found + QByteArray text("class C {__qt_signals__: void signal2(NotFound); public __qt_slots__: void slot2(NotFound);}; "); + + TopDUContext* top = parse(text, DumpNone); + + DUChainWriteLocker lock(DUChain::lock()); + QCOMPARE(top->localDeclarations().count(), 1); + QCOMPARE(top->childContexts().count(), 1); + QCOMPARE(top->childContexts()[0]->localDeclarations().count(), 2); + + ClassFunctionDeclaration* classFun = dynamic_cast(top->childContexts()[0]->localDeclarations()[0]); + QVERIFY(classFun); + QVERIFY(classFun->accessPolicy() == ClassMemberDeclaration::Protected); + QVERIFY(classFun->isSignal()); + + classFun = dynamic_cast(top->childContexts()[0]->localDeclarations()[1]); + QVERIFY(classFun); + QVERIFY(classFun->accessPolicy() == ClassMemberDeclaration::Public); + QVERIFY(classFun->isSlot()); + + release(top); + } } void TestDUChain::testSignalSlotUse() { { - QByteArray text("class TE; class QObject { void connect(QObject* from, const char* signal, QObject* to, const char* slot); void connect(QObject* from, const char* signal, const char* slot); }; class A : public QObject { public slots: void slot1(); void slot2(TE*); signals: void signal1(TE*, char);void signal2(); public: void test() { \nconnect(this, __qt_sig_slot__( signal1(TE*, const char&)), this, __qt_sig_slot__(slot2(TE*))); \nconnect(this, __qt_sig_slot__(signal2()), \n__qt_sig_slot__(slot1())); } };"); + QByteArray text("class TE; class QObject { void connect(QObject* from, const char* signal, QObject* to, const char* slot); void connect(QObject* from, const char* signal, const char* slot); }; class A : public QObject { public __qt_slots__: void slot1(); void slot2(TE*); __qt_signals__: void signal1(TE*, char);void signal2(); public: void test() { \nconnect(this, __qt_signal__( signal1(TE*, const char&)), this, __qt_slot__(slot2(TE*))); \nconnect(this, __qt_signal__(signal2()), \n__qt_slot__(slot1())); } };"); TopDUContext* top = parse(text, DumpNone); @@ -2085,13 +2260,13 @@ //kDebug() << top->childContexts()[1]->localDeclarations()[1]->uses().begin()->first().textRange(); //kDebug() << top->childContexts()[1]->localDeclarations()[2]->uses().begin()->first().textRange(); //kDebug() << top->childContexts()[1]->localDeclarations()[3]->uses().begin()->first().textRange(); - QCOMPARE(top->childContexts()[1]->localDeclarations()[0]->uses().begin()->first().textRange(), SimpleRange(3, 16, 3, 21).textRange()); + QCOMPARE(top->childContexts()[1]->localDeclarations()[0]->uses().begin()->first().textRange(), SimpleRange(3, 12, 3, 17).textRange()); QVERIFY(top->childContexts()[1]->localDeclarations()[1]->uses().count()); - QCOMPARE(top->childContexts()[1]->localDeclarations()[1]->uses().begin()->first().textRange(), SimpleRange(1, 81, 1, 86).textRange()); + QCOMPARE(top->childContexts()[1]->localDeclarations()[1]->uses().begin()->first().textRange(), SimpleRange(1, 75, 1, 80).textRange()); QVERIFY(top->childContexts()[1]->localDeclarations()[2]->uses().count()); - QCOMPARE(top->childContexts()[1]->localDeclarations()[2]->uses().begin()->first(), SimpleRange(1, 31, 1, 38)); + QCOMPARE(top->childContexts()[1]->localDeclarations()[2]->uses().begin()->first(), SimpleRange(1, 29, 1, 36)); QVERIFY(top->childContexts()[1]->localDeclarations()[3]->uses().count()); - QCOMPARE(top->childContexts()[1]->localDeclarations()[3]->uses().begin()->first(), SimpleRange(2, 30, 2, 37)); + QCOMPARE(top->childContexts()[1]->localDeclarations()[3]->uses().begin()->first(), SimpleRange(2, 28, 2, 35)); QCOMPARE(top->localDeclarations()[0]->uses().count(), 1); QCOMPARE(top->localDeclarations()[0]->uses().begin()->count(), 4); @@ -2099,7 +2274,7 @@ release(top); } { - QByteArray text("class QObject { void connect(QObject* from, const char* signal, QObject* to, const char* slot); void connect(QObject* from, const char* signal, const char* slot); }; struct AA : QObject { signals: void signal1(int); void signal2(); };struct T{operator AA*() const; };class A : AA { public slots: void slot1(); void slot2(); signals: void signal1();public: void test() {T t;connect(t, __qt_sig_slot__(signal2()), this, __qt_sig_slot__(slot2()));connect(this, __qt_sig_slot__(signal1(int)), __qt_sig_slot__(slot1())); } }; "); + QByteArray text("class QObject { void connect(QObject* from, const char* signal, QObject* to, const char* slot); void connect(QObject* from, const char* signal, const char* slot); }; struct AA : QObject { __qt_signals__: void signal1(int); void signal2(); };struct T{operator AA*() const; };class A : AA { public __qt_slots__: void slot1(); void slot2(); __qt_signals__: void signal1();public: void test() {T t;connect(t, __qt_signal__(signal2()), this, __qt_slot__(slot2()));connect(this, __qt_signal__(signal1(int)), __qt_slot__(slot1())); } }; "); TopDUContext* top = parse(text, DumpNone); @@ -2126,6 +2301,29 @@ release(top); } + { + // test signals without full signal signature specification + QByteArray text("class QObject { void connect(QObject* from, const char* signal, QObject* to, const char* slot);\n" + " void connect(QObject* from, const char* signal, const char* slot); };\n" + "struct AA : QObject { __qt_signals__: void signal1(bool arg1 = false); };\n" + "class A : AA { public __qt_slots__: void slot1();\n" + " public: void test() { connect(this, __qt_signal__(signal1()), this, __qt_slot__(slot1()));} };"); + TopDUContext* top = parse(text, DumpNone); + + DUChainWriteLocker lock(DUChain::lock()); + QVERIFY(top->problems().isEmpty()); + + QCOMPARE(top->localDeclarations().count(), 3); + QCOMPARE(top->childContexts().count(), 3); + QCOMPARE(top->childContexts().at(1)->localDeclarations().size(), 1); + ClassFunctionDeclaration* sig = dynamic_cast(top->childContexts().at(1)->localDeclarations().first()); + QVERIFY(sig); + QVERIFY(sig->identifier() == Identifier("signal1")); + QVERIFY(sig->isSignal()); + QCOMPARE(sig->uses().size(), 1); + QCOMPARE(sig->uses().begin()->count(), 1); + QCOMPARE(sig->uses().begin()->first(), SimpleRange(4, 52, 4, 59)); + } } void TestDUChain::testFunctionDefinition() { @@ -2410,45 +2608,112 @@ text += "class Q {\n"; text += "public:\n"; text += " Q(int var) { }\n"; + text += " Q() { }\n"; text += "};\n"; text += "class B : public Q {\n"; text += "public:\n"; text += " B(int var) : Q(var) { }\n"; + text += " B() : Q() { }\n"; text += "};\n"; text += "int main(int argc, char* argv[]) {\n"; text += " Q a1(123);\n"; text += " Q a2 = Q(123);\n"; text += " Q *a3 = new Q(123);\n"; text += " Q a4(argc);\n"; + text += " Q a12();\n"; + text += " Q a22 = Q();\n"; + text += " Q *a32 = new Q();\n"; text += "}\n"; - + TopDUContext* top = parse(text, DumpNone); DUChainWriteLocker lock(DUChain::lock()); - + QCOMPARE(top->childContexts().size(), 4); - QCOMPARE(top->childContexts()[0]->localDeclarations().size(), 1); - + QCOMPARE(top->childContexts()[0]->localDeclarations().size(), 2); + + // Q(int var) Declaration *ctorDecl = top->childContexts()[0]->localDeclarations()[0]; QCOMPARE(ctorDecl->uses().size(), 1); QList uses = ctorDecl->uses().values().first(); - + + QCOMPARE(uses.size(), 5); + QCOMPARE(uses[0], SimpleRange(7, 16, 7, 17)); + QCOMPARE(uses[1], SimpleRange(11, 7, 11, 8)); + QCOMPARE(uses[2], SimpleRange(12, 11, 12, 12)); + QCOMPARE(uses[3], SimpleRange(13, 15, 13, 16)); + QCOMPARE(uses[4], SimpleRange(14, 7, 14, 8)); + + // Q() + ctorDecl = top->childContexts()[0]->localDeclarations()[1]; + QCOMPARE(ctorDecl->uses().size(), 1); + uses = ctorDecl->uses().values().first(); + QCOMPARE(uses.size(), 4); - kDebug() << uses[0].textRange(); - QCOMPARE(uses[0], SimpleRange(9, 7, 9, 8)); - QCOMPARE(uses[1], SimpleRange(10, 11, 10, 12)); - kDebug() << uses[2].textRange(); - QCOMPARE(uses[2], SimpleRange(11, 15, 11, 16)); - QCOMPARE(uses[3], SimpleRange(12, 7, 12, 8)); - - #if 0 - // NOTE: These are the actual expected results. TODO: make all work + QCOMPARE(uses[0], SimpleRange(8, 9, 8, 10)); + QCOMPARE(uses[1], SimpleRange(15, 8, 15, 9)); + QCOMPARE(uses[2], SimpleRange(16, 12, 16, 13)); + QCOMPARE(uses[3], SimpleRange(17, 16, 17, 17)); + + release(top); + } + { + QByteArray text; + text += "template\n"; + text += "class Q {\n"; + text += "public:\n"; + text += " Q(T var) { }\n"; + text += " Q() { }\n"; + text += "};\n"; + text += "template\n"; + text += "class B : public Q {\n"; + text += "public:\n"; + text += " B(T var) : Q(var) { }\n"; + text += " B() : Q() { }\n"; + text += "};\n"; + text += "int main(int argc, char* argv[]) {\n"; + text += " Q a1(123);\n"; + text += " Q a2 = Q(123);\n"; + text += " Q *a3 = new Q(123);\n"; + text += " Q a4(argc);\n"; + text += " Q a12();\n"; + text += " Q a22 = Q();\n"; + text += " Q *a32 = new Q();\n"; + text += "}\n"; + + TopDUContext* top = parse(text, DumpNone); + DUChainWriteLocker lock(DUChain::lock()); + + QCOMPARE(top->childContexts().size(), 6); + // first one is the template context + QCOMPARE(top->childContexts()[1]->type(), DUContext::Class); + QCOMPARE(top->childContexts()[1]->localDeclarations().size(), 2); + + // Q(T var) + Declaration *ctorDecl = top->childContexts()[1]->localDeclarations()[0]; + QEXPECT_FAIL("", "no uses get reported for ctors of template classes", Abort); + QCOMPARE(ctorDecl->uses().size(), 1); + ///TODO + /* + QList uses = ctorDecl->uses().values().first(); + + QCOMPARE(uses.size(), 5); + QCOMPARE(uses[0], SimpleRange(7, 16, 7, 17)); + QCOMPARE(uses[1], SimpleRange(11, 7, 11, 8)); + QCOMPARE(uses[2], SimpleRange(12, 11, 12, 12)); + QCOMPARE(uses[3], SimpleRange(13, 15, 13, 16)); + QCOMPARE(uses[4], SimpleRange(14, 7, 14, 8)); + + // Q() + ctorDecl = top->childContexts()[1]->localDeclarations()[1]; + QCOMPARE(ctorDecl->uses().size(), 1); + uses = ctorDecl->uses().values().first(); + QCOMPARE(uses.size(), 4); - QCOMPARE(uses[0], SimpleRange(6, 16, 6, 17)); - QCOMPARE(uses[1], SimpleRange(9, 7, 9, 8)); - QCOMPARE(uses[2], SimpleRange(10, 11, 10, 12)); - QCOMPARE(uses[3], SimpleRange(11, 15, 11, 16)); - QCOMPARE(uses[4], SimpleRange(12, 7, 12, 8)); - #endif + QCOMPARE(uses[0], SimpleRange(8, 9, 8, 10)); + QCOMPARE(uses[1], SimpleRange(15, 8, 15, 9)); + QCOMPARE(uses[2], SimpleRange(16, 12, 16, 13)); + QCOMPARE(uses[3], SimpleRange(17, 16, 17, 17)); + */ release(top); } } @@ -2508,7 +2773,6 @@ TopDUContext* top = parse(text, DumpNone); DUChainWriteLocker lock(DUChain::lock()); - QVERIFY(!top->findContexts(DUContext::Class, QualifiedIdentifier("Enclosing::Class")).isEmpty()); QCOMPARE(top->childContexts().count(), 2); QCOMPARE(top->localDeclarations().count(), 1); @@ -2537,9 +2801,6 @@ QVERIFY(!top->childContexts()[1]->childContexts()[0]->localDeclarations()[2]->type().unsafeData()); QCOMPARE(top->childContexts()[1]->childContexts()[0]->localDeclarations()[2]->abstractType()->indexed(), top->childContexts()[0]->localDeclarations()[1]->abstractType()->indexed()); - QVERIFY(!top->findContexts(DUContext::Class, QualifiedIdentifier("Enclosing")).isEmpty()); - QVERIFY(!top->findContexts(DUContext::Class, QualifiedIdentifier("Enclosing::Class")).isEmpty()); - release(top); } @@ -2793,6 +3054,32 @@ release(top); } + { + // 0 1 2 3 4 5 + // 012345678901234567890123456789012345678901234567890123456789 + QByteArray text("template\n" + "class A { void foo(T arg); };\n" + "template void A::foo(T arg) {}"); + TopDUContext* top = parse(text, DumpNone); + DUChainWriteLocker lock(DUChain::lock()); + + QCOMPARE(top->localDeclarations().count(), 2); + TemplateDeclaration* base = dynamic_cast(top->localDeclarations()[0]); + QVERIFY(base); + QCOMPARE(base->specializationsSize(), 0u); + QCOMPARE(base->instantiations().size(), 1); + QCOMPARE(base->instantiations().begin().value()->specializationsSize(), 0u); + // use of class T in A + QCOMPARE(top->childContexts().size(), 5); + QCOMPARE(top->childContexts().at(2)->type(), DUContext::Template); + QCOMPARE(top->childContexts().at(2)->localDeclarations().size(), 1); + QEXPECT_FAIL("", "The uses of T are not reported when we define the default implementation outside the class body", Abort); + QCOMPARE(top->childContexts().at(2)->localDeclarations().first()->uses().size(), 1); + QCOMPARE(top->childContexts().at(2)->localDeclarations().first()->uses().begin()->size(), 2); + QCOMPARE(top->childContexts().at(2)->localDeclarations().first()->uses().begin()->at(0), SimpleRange(2, 22, 2, 23)); + QCOMPARE(top->childContexts().at(2)->localDeclarations().first()->uses().begin()->at(1), SimpleRange(2, 31, 2, 32)); + release(top); + } } int value( const AbstractType::Ptr& type ) { @@ -3205,6 +3492,38 @@ release(top); } +void TestDUChain::testTemplateImplicitInstantiations() +{ + { + QByteArray method("class A { template static void foo(T){} };\n" + "void test() { A::foo(5); A::foo('x'); A::foo(\"asdfasdfadf\");\n }"); + + TopDUContext* top = parse(method, DumpNone); + + DUChainWriteLocker lock(DUChain::lock()); + QCOMPARE(top->childContexts().first()->localDeclarations().size(), 1); + QCOMPARE(top->localDeclarations().size(), 2); + QCOMPARE(top->childContexts().first()->localDeclarations().size(), 1); + TemplateDeclaration* tpl = dynamic_cast(top->childContexts().first()->localDeclarations().first()); + QVERIFY(tpl); + QCOMPARE(tpl->instantiations().size(), 3); + release(top); + } + { + QByteArray method("template void foo(T){}\n" + "void test() { foo(5); foo('x'); foo(\"asdfasdfadf\"); }\n"); + + TopDUContext* top = parse(method, DumpNone); + + DUChainWriteLocker lock(DUChain::lock()); + QCOMPARE(top->localDeclarations().size(), 2); + TemplateDeclaration* tpl = dynamic_cast(top->localDeclarations().first()); + QVERIFY(tpl); + QCOMPARE(tpl->instantiations().size(), 3); + release(top); + } +} + void TestDUChain::testSourceCodeInsertion() { { @@ -3315,6 +3634,22 @@ void TestDUChain::testSimplifiedTypeString() { { + QByteArray method("namespace A { struct B { B(); }; };"); + TopDUContext* top = parse(method, DumpNone); + + DUChainWriteLocker lock(DUChain::lock()); + QCOMPARE(top->childContexts().size(), 1); + QCOMPARE(top->childContexts()[0]->childContexts().size(), 1); + QCOMPARE(top->childContexts()[0]->childContexts()[0]->localDeclarations().size(), 1); + + QualifiedIdentifier constructorId = top->childContexts()[0]->childContexts()[0]->localDeclarations()[0]->qualifiedIdentifier(); + QCOMPARE(constructorId.toString(), QString("A::B::B")); + QCOMPARE(stripPrefixes(top->childContexts()[0], constructorId).toString(), QString("B::B")); + QCOMPARE(stripPrefixes(top, constructorId).toString(), QString("A::B::B")); + + release(top); + } + { QByteArray method("typedef int *honk, **honk2; honk k;"); TopDUContext* top = parse(method, DumpNone); @@ -4003,6 +4338,18 @@ void TestDUChain::testOperatorUses() { { + QByteArray method("template struct Fruk { Fruk& operator[](int); }; Fruk f; void test(){ const int mog; Fruk q (f[mog]); }"); + + TopDUContext* top = parse(method, DumpAll); + + DUChainWriteLocker lock(DUChain::lock()); + QCOMPARE(top->childContexts().count(), 4); + QCOMPARE(top->childContexts()[3]->localDeclarations().size(), 2); + QCOMPARE(top->childContexts()[3]->localDeclarations()[0]->uses().size(), 1); + + release(top); + } + { QByteArray method("struct S { bool operator() () const {} };void test() { S s; s(); S()(); } "); TopDUContext* top = parse(method, DumpNone); @@ -4038,6 +4385,45 @@ release(top); } + { + // 0 1 2 3 4 5 + // 012345678901234567890123456789012345678901234567890123456789 + QByteArray method("struct foo { bool operator==(const foo&){} };\n" + "int main() { foo t1; foo t2;\n" + // not valid in global context, hence put it into main + "bool b1 = t1 == t2;\n" + "bool b2 = t1.operator==(t2); }"); + + TopDUContext* top = parse(method, DumpAll); + DUChainWriteLocker lock(DUChain::lock()); + QCOMPARE(top->localDeclarations().count(), 2); + QCOMPARE(top->childContexts().first()->localDeclarations().size(), 1); + QCOMPARE(top->childContexts().first()->localDeclarations().first()->uses().count(), 1); + QCOMPARE(top->childContexts().first()->localDeclarations().first()->uses().begin()->size(), 2); + QCOMPARE(top->childContexts().first()->localDeclarations().first()->uses().begin()->at(0), SimpleRange(2, 13, 2, 15)); + QCOMPARE(top->childContexts().first()->localDeclarations().first()->uses().begin()->at(1), SimpleRange(3, 13, 3, 23)); + + release(top); + } + { + // 0 1 2 3 4 5 + // 012345678901234567890123456789012345678901234567890123456789 + QByteArray method("struct foo { foo& operator=(const foo&){} };\n" + "int main() { foo t1; foo t2 = t1;\n" + // not valid in global context, hence put it into main + "t1.operator=(t2); return 0; }"); + + TopDUContext* top = parse(method, DumpNone); + DUChainWriteLocker lock(DUChain::lock()); + QCOMPARE(top->localDeclarations().count(), 2); + QCOMPARE(top->childContexts().first()->localDeclarations().size(), 1); + QCOMPARE(top->childContexts().first()->localDeclarations().first()->uses().count(), 1); + QCOMPARE(top->childContexts().first()->localDeclarations().first()->uses().begin()->size(), 2); + QCOMPARE(top->childContexts().first()->localDeclarations().first()->uses().begin()->at(0), SimpleRange(1, 28, 1, 29)); + QCOMPARE(top->childContexts().first()->localDeclarations().first()->uses().begin()->at(1), SimpleRange(2, 3, 2, 12)); + + release(top); + } } struct TestContext { @@ -4399,6 +4785,40 @@ release(top); } +void TestDUChain::testForwardDeclaration4() +{ + QByteArray method("class Forward;\n" + "class Test\n" + "{\n" + " virtual Test a(Forward) const=0;\n" + " virtual Forward b(Forward) const=0;\n" + " virtual Forward c(Forward);\n" + " virtual Test d(Forward);\n" + "};"); + + TopDUContext* top = parse(method, DumpNone); + + DUChainWriteLocker lock(DUChain::lock()); + + QCOMPARE(top->localDeclarations().count(), 2); + QCOMPARE(top->childContexts().count(), 1); + + QVERIFY(dynamic_cast(top->localDeclarations()[0])); + + ForwardDeclaration* forwardDecl = static_cast(top->localDeclarations()[0]); + + QCOMPARE(forwardDecl->uses().size(), 1); + QCOMPARE(forwardDecl->uses().begin()->size(), 6); + QCOMPARE(forwardDecl->uses().begin()->at(0), SimpleRange(3, 19, 3, 26)); + QCOMPARE(forwardDecl->uses().begin()->at(1), SimpleRange(4, 12, 4, 19)); + QCOMPARE(forwardDecl->uses().begin()->at(2), SimpleRange(4, 22, 4, 29)); + QCOMPARE(forwardDecl->uses().begin()->at(3), SimpleRange(5, 12, 5, 19)); + QCOMPARE(forwardDecl->uses().begin()->at(4), SimpleRange(5, 22, 5, 29)); + QCOMPARE(forwardDecl->uses().begin()->at(5), SimpleRange(6, 19, 6, 26)); + + release(top); +} + void TestDUChain::testTemplateForwardDeclaration() { QByteArray method("class B{}; templateclass Test; Test t; templateclass Test {}; "); diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/tests/test_duchain.h kdevelop-4.0.1/languages/cpp/cppduchain/tests/test_duchain.h --- kdevelop-3.9.98/languages/cpp/cppduchain/tests/test_duchain.h 2009-12-05 00:04:13.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/tests/test_duchain.h 2010-07-17 20:08:19.000000000 +0100 @@ -61,6 +61,7 @@ private slots: void initTestCase(); void cleanupTestCase(); + void testTypeof(); void testIdentifiers(); void testContextRelationships(); void testDeclareInt(); @@ -74,6 +75,8 @@ void testDeclareClass(); void testDeclareFriend(); void testDeclareNamespace(); + void testDeclareNamespace2(); + void testLocalNamespaceAlias(); void testDeclareUsingNamespace(); void testUsingDeclaration(); void testUsingDeclarationInTemplate(); @@ -117,10 +120,12 @@ void testForwardDeclaration(); void testForwardDeclaration2(); void testForwardDeclaration3(); + void testForwardDeclaration4(); void testTemplateForwardDeclaration(); void testTemplateForwardDeclaration2(); void testTemplateRecursiveInstantiation(); void testTemplateInternalSearch(); + void testTemplateImplicitInstantiations(); void testStringSets(); void testAssignedContexts(); void testTryCatch(); @@ -165,8 +170,7 @@ void testEllipsis(); void testMultiByteCStrings(); - - + private: void assertNoMemberFunctionModifiers(KDevelop::ClassFunctionDeclaration* memberFun); diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/tests/test_expressionparser.cpp kdevelop-4.0.1/languages/cpp/cppduchain/tests/test_expressionparser.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/tests/test_expressionparser.cpp 2009-12-12 11:18:11.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/tests/test_expressionparser.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -162,13 +162,11 @@ } void TestExpressionParser::testIntegralType() { - QByteArray type("const char*"); - DUContext* top = parse(type, DumpNone); - + DUContext* top = parse(" ", DumpNone); Cpp::ExpressionParser parser(true,true); { - Cpp::ExpressionEvaluationResult result = parser.evaluateType(type, KDevelop::DUContextPointer(top)); + Cpp::ExpressionEvaluationResult result = parser.evaluateType("const char*", KDevelop::DUContextPointer(top)); QVERIFY(result.isValid()); AbstractType::Ptr aType(result.type.abstractType()); @@ -181,10 +179,49 @@ IntegralType::Ptr iBaseType = aBaseType.cast(); QVERIFY(iBaseType); QCOMPARE(iBaseType->dataType(), (uint)IntegralType::TypeChar); - - /// FIXME: This currently fails. + QVERIFY(iBaseType->modifiers() & IntegralType::ConstModifier); } + { + Cpp::ExpressionEvaluationResult result = parser.evaluateType("'x'", KDevelop::DUContextPointer(top)); + QVERIFY(result.isValid()); + + AbstractType::Ptr aType(result.type.abstractType()); + ConstantIntegralType::Ptr ciType = aType.cast(); + QVERIFY(ciType); + QCOMPARE(ciType->dataType(), (uint)ConstantIntegralType::TypeChar); + QCOMPARE(ciType->value(), 'x'); + } + { + Cpp::ExpressionEvaluationResult result = parser.evaluateType("5", KDevelop::DUContextPointer(top)); + QVERIFY(result.isValid()); + + AbstractType::Ptr aType(result.type.abstractType()); + ConstantIntegralType::Ptr ciType = aType.cast(); + QVERIFY(ciType); + QCOMPARE(ciType->dataType(), (uint)ConstantIntegralType::TypeInt); + QCOMPARE(ciType->value(), 5); + } + { + Cpp::ExpressionEvaluationResult result = parser.evaluateType("true", KDevelop::DUContextPointer(top)); + QVERIFY(result.isValid()); + + AbstractType::Ptr aType(result.type.abstractType()); + ConstantIntegralType::Ptr ciType = aType.cast(); + QVERIFY(ciType); + QCOMPARE(ciType->dataType(), (uint)ConstantIntegralType::TypeBoolean); + QCOMPARE(ciType->value(), true); + } + { + Cpp::ExpressionEvaluationResult result = parser.evaluateType("'\\n'", KDevelop::DUContextPointer(top)); + QVERIFY(result.isValid()); + + AbstractType::Ptr aType(result.type.abstractType()); + ConstantIntegralType::Ptr ciType = aType.cast(); + QVERIFY(ciType); + QCOMPARE(ciType->dataType(), (uint)ConstantIntegralType::TypeChar); + QCOMPARE(ciType->value(), '\n'); + } } void TestExpressionParser::testTemplatesSimple() { diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/typebuilder.cpp kdevelop-4.0.1/languages/cpp/cppduchain/typebuilder.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/typebuilder.cpp 2009-11-22 20:42:01.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/typebuilder.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -90,9 +90,6 @@ if (node->name) { DUChainReadLocker lock(DUChain::lock()); - CppClassType::Ptr klass = currentAbstractType().cast(); - Q_ASSERT( klass ); - bool openedType = openTypeFromName(node->name, AbstractType::NoModifiers, true); if( openedType ) { @@ -277,12 +274,18 @@ bool openedType = false; m_lastTypeWasInstance = false; - if (node->integrals) { + if (node->type_of && node->expression) { + node->expression->ducontext = currentContext(); + ExpressionParser parser; + ExpressionEvaluationResult result = parser.evaluateType(node->expression, editor()->parseSession()); + openType(result.type.abstractType()); + openedType = true; + } else if (node->integrals) { uint type = IntegralType::TypeNone; uint modifiers = AbstractType::NoModifiers; - const ListNode *it = node->integrals->toFront(); - const ListNode *end = it; + const ListNode *it = node->integrals->toFront(); + const ListNode *end = it; do { int kind = editor()->parseSession()->token_stream->kind(it->element); switch (kind) { @@ -659,13 +662,13 @@ closeType(); } -uint TypeBuilder::parseConstVolatile(ParseSession* session, const ListNode *cv) +uint TypeBuilder::parseConstVolatile(ParseSession* session, const ListNode *cv) { uint ret = AbstractType::NoModifiers; if (cv) { - const ListNode *it = cv->toFront(); - const ListNode *end = it; + const ListNode *it = cv->toFront(); + const ListNode *end = it; do { int kind = session->token_stream->kind(it->element); if (kind == Token_const) diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/typebuilder.h kdevelop-4.0.1/languages/cpp/cppduchain/typebuilder.h --- kdevelop-3.9.98/languages/cpp/cppduchain/typebuilder.h 2009-08-15 10:28:22.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/cppduchain/typebuilder.h 2010-07-17 20:08:19.000000000 +0100 @@ -40,7 +40,7 @@ public: TypeBuilder(); - static uint parseConstVolatile(ParseSession* session, const ListNode* cv); + static uint parseConstVolatile(ParseSession* session, const ListNode* cv); protected: ///Returns either the current context, or the last importend parent-context(needed to find template-argument function return-values) diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/typeutils.cpp kdevelop-4.0.1/languages/cpp/cppduchain/typeutils.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/typeutils.cpp 2009-12-12 00:08:40.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/typeutils.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -170,7 +170,7 @@ FOREACH_FUNCTION(const KDevelop::BaseClassInstance& base, cppClassDecl->baseClasses) { if( base.access != KDevelop::Declaration::Private ) { //we need const-cast here because the constant list makes also the pointers constant, which is not intended CppClassType::Ptr baseClass = base.baseClass.type(); - if( baseClass ) + if( baseClass && !baseClass->equals(klass.constData()) ) getMemberFunctions( baseClass, topContext, functions, functionName, mustBeConstant); } } @@ -221,7 +221,7 @@ DUContext* internal = actualStructure->internalContext(topContext); if(internal) { typedef QPair DeclarationDepthPair; - foreach(Declaration* decl, internal->findDeclarations(castIdentifier(), SimpleCursor::invalid(), topContext, (DUContext::SearchFlags)(DUContext::DontSearchInParent | DUContext::NoFiltering))) { + foreach(Declaration* decl, internal->findDeclarations(Cpp::castIdentifier.identifier(), SimpleCursor::invalid(), topContext, (DUContext::SearchFlags)(DUContext::DontSearchInParent | DUContext::NoFiltering))) { FunctionType::Ptr funType = decl->type(); if(funType && funType->returnType()) { if(conversion.implicitConversion(funType->returnType()->indexed(), matchTo->indexed(), true)) { diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/type_visitor.cpp kdevelop-4.0.1/languages/cpp/cppduchain/type_visitor.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/type_visitor.cpp 2009-10-01 10:57:56.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/cppduchain/type_visitor.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -145,8 +145,8 @@ // Don't forget the modifiers! uint modifiers = AbstractType::NoModifiers; if (node->cv) { - const ListNode *it = node->cv->toFront(); - const ListNode *end = it; + const ListNode *it = node->cv->toFront(); + const ListNode *end = it; do { int kind = m_session->token_stream->kind(it->element); switch (kind) { @@ -168,8 +168,8 @@ { uint type = IntegralType::TypeNone; - const ListNode *it2 = node->integrals->toFront(); - const ListNode *end = it2; + const ListNode *it2 = node->integrals->toFront(); + const ListNode *end = it2; do { int kind = m_session->token_stream->kind(it2->element); switch (kind) { @@ -226,15 +226,21 @@ } else if (node->type_of) { - // ### implement me - m_typeId.push(Identifier("typeof<...>")); + if (node->expression) + { + ExpressionParser parser; + node->expression->ducontext = const_cast(m_context); + ExpressionEvaluationResult result = parser.evaluateType(node->expression, m_session); + m_type = result.type.abstractType(); + m_typeId = QualifiedIdentifier(result.toString()); + } } { LOCKDUCHAIN; find.closeQualifiedIdentifier(); m_declarations = find.lastDeclarations(); - if(!m_declarations.isEmpty()) + if(!m_declarations.isEmpty() && m_declarations[0]) m_type = m_declarations[0]->abstractType(); } @@ -252,9 +258,12 @@ m_stopSearch = true; return; } + + LOCKDUCHAIN; + m_typeId = name_cc.identifier(); m_declarations = name_cc.declarations(); - if(!m_declarations.isEmpty()) + if(!m_declarations.isEmpty() && m_declarations[0]) m_type = m_declarations[0]->abstractType(); } diff -Nru kdevelop-3.9.98/languages/cpp/cppduchain/usebuilder.cpp kdevelop-4.0.1/languages/cpp/cppduchain/usebuilder.cpp --- kdevelop-3.9.98/languages/cpp/cppduchain/usebuilder.cpp 2009-11-14 02:19:52.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppduchain/usebuilder.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -128,7 +128,7 @@ } ~UseExpressionVisitor() { typedef KSharedPtr P; - foreach(P problem, realProblems()) + foreach(const P& problem, realProblems()) m_builder->addProblem(problem); } private: diff -Nru kdevelop-3.9.98/languages/cpp/cpplanguagesupport.cpp kdevelop-4.0.1/languages/cpp/cpplanguagesupport.cpp --- kdevelop-3.9.98/languages/cpp/cpplanguagesupport.cpp 2010-01-10 20:47:46.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cpplanguagesupport.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -85,7 +85,7 @@ #include "cppduchain/cppduchain.h" #include "codegen/codeassistant.h" #include "codegen/cppnewclass.h" -#include "codegen/makeimplementationprivate.h" +//#include "codegen/makeimplementationprivate.h" #include "includepathresolver.h" #include "setuphelpers.h" @@ -180,14 +180,23 @@ else kWarning() << "Quickopen not found"; - KActionCollection* actions = actionCollection(); +#ifdef DEBUG_UI_LOCKUP + m_blockTester = new UIBlockTester(LOCKUP_INTERVAL); +#endif + + m_assistant = new Cpp::StaticCodeAssistant; +} + +void CppLanguageSupport::createActionsForMainWindow (Sublime::MainWindow* window, QString& _xmlFile, KActionCollection& actions) +{ + _xmlFile = xmlFile(); - KAction* switchDefinitionDeclaration = actions->addAction("switch_definition_declaration"); + KAction* switchDefinitionDeclaration = actions.addAction("switch_definition_declaration"); switchDefinitionDeclaration->setText( i18n("&Switch Definition/Declaration") ); switchDefinitionDeclaration->setShortcut( Qt::CTRL | Qt::SHIFT | Qt::Key_C ); connect(switchDefinitionDeclaration, SIGNAL(triggered(bool)), this, SLOT(switchDefinitionDeclaration())); - KAction* newClassAction = actions->addAction("code_new_class"); + KAction* newClassAction = actions.addAction("code_new_class"); newClassAction->setText( i18n("Create &New Class") ); connect(newClassAction, SIGNAL(triggered(bool)), this, SLOT(newClassWizard())); @@ -196,22 +205,16 @@ // pimplAction->setShortcut(Qt::ALT | Qt::META | Qt::Key_P); // connect(pimplAction, SIGNAL(triggered(bool)), &SimpleRefactoring::self(), SLOT(executePrivateImplementationAction())); - KAction* renameDeclarationAction = actions->addAction("code_rename_declaration"); + KAction* renameDeclarationAction = actions.addAction("code_rename_declaration"); renameDeclarationAction->setText( i18n("Rename Declaration") ); renameDeclarationAction->setIcon(KIcon("edit-rename")); renameDeclarationAction->setShortcut( Qt::CTRL | Qt::ALT | Qt::Key_R); connect(renameDeclarationAction, SIGNAL(triggered(bool)), &SimpleRefactoring::self(), SLOT(executeRenameAction())); - KAction* moveIntoSourceAction = actions->addAction("code_move_definition"); + KAction* moveIntoSourceAction = actions.addAction("code_move_definition"); moveIntoSourceAction->setText( i18n("Move into Source") ); moveIntoSourceAction->setShortcut( Qt::CTRL | Qt::ALT | Qt::Key_S); connect(moveIntoSourceAction, SIGNAL(triggered(bool)), &SimpleRefactoring::self(), SLOT(executeMoveIntoSourceAction())); - -#ifdef DEBUG_UI_LOCKUP - m_blockTester = new UIBlockTester(LOCKUP_INTERVAL); -#endif - - m_assistant = new Cpp::StaticCodeAssistant; } void CppLanguageSupport::switchDefinitionDeclaration() @@ -459,6 +462,9 @@ return qMakePair( qMakePair(line, SimpleRange(lineNumber, start, lineNumber, lineLength)), QString() ); } + // not an include, if at all a Makro, hence clear strings + line = clearStrings(line); + int start = position.column; int end = position.column; diff -Nru kdevelop-3.9.98/languages/cpp/cpplanguagesupport.h kdevelop-4.0.1/languages/cpp/cpplanguagesupport.h --- kdevelop-3.9.98/languages/cpp/cpplanguagesupport.h 2009-12-06 03:13:02.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cpplanguagesupport.h 2010-07-17 20:08:19.000000000 +0100 @@ -90,6 +90,7 @@ static CppLanguageSupport* self(); + virtual void createActionsForMainWindow(Sublime::MainWindow* window, QString& xmlFile, KActionCollection& actions); /** * There may be multiple differnt parsed versions of a document available in the du-chain. * This function helps choosing the right one, by creating a standard parsing-environment, diff -Nru kdevelop-3.9.98/languages/cpp/cppparsejob.cpp kdevelop-4.0.1/languages/cpp/cppparsejob.cpp --- kdevelop-3.9.98/languages/cpp/cppparsejob.cpp 2010-01-17 12:55:37.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppparsejob.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -52,6 +52,7 @@ #include #include #include +#include #include "cppeditorintegrator.h" #include "declarationbuilder.h" #include "usebuilder.h" @@ -71,33 +72,6 @@ using namespace KDevelop; -///Facilities to prevent multiple parse-jobs from processing the same url. -QMutex urlParseMutex; -QMap > parsingUrls; - -UrlParseLock::UrlParseLock(IndexedString url) : m_url(url) { - QMutexLocker lock(&urlParseMutex); - while(parsingUrls.contains(m_url) && parsingUrls[m_url].first != QThread::currentThreadId()) { - //Wait here until no other thread is updating parsing the url - lock.unlock(); - sleep(1); - lock.relock(); - } - if(parsingUrls.contains(m_url)) - ++parsingUrls[m_url].second; - else - parsingUrls.insert(m_url, qMakePair(QThread::currentThreadId(), 1u)); -} - -UrlParseLock::~UrlParseLock() { - QMutexLocker lock(&urlParseMutex); - Q_ASSERT(parsingUrls.contains(m_url)); - Q_ASSERT(parsingUrls[m_url].first == QThread::currentThreadId()); - --parsingUrls[m_url].second; - if(parsingUrls[m_url].second == 0) - parsingUrls.remove(m_url); -} - bool importsContext(const QVector& contexts, const DUContext* context) { foreach(const DUContext::Import &listCtx, contexts) if(listCtx.context(0) && listCtx.context(0)->imports(context)) @@ -261,7 +235,7 @@ const QList& CPPParseJob::includePaths() const { //If a lock was held here, we would get deadlocks if( ICore::self()->shuttingDown() ) - return QList(); + return m_includePaths; if( masterJob() == this ) { if( !m_includePathsComputed ) { @@ -274,7 +248,7 @@ { if(ICore::self()->shuttingDown()) { - return QList(); + return m_includePaths; } } m_waitForIncludePathsMutex.unlock(); @@ -793,8 +767,8 @@ if(keepAST) { kDebug() << "AST Is being kept for" << parentJob()->document().toUrl(); - parentJob()->parseSession()->setASTNodeParents(); contentContext->setAst(IAstContainer::Ptr( parentJob()->parseSession().data() )); + parentJob()->parseSession()->setASTNodeParents(); } else @@ -827,7 +801,7 @@ if(!doNotChangeDUChain) { DUChainReadLocker lock(DUChain::lock()); - foreach(LineContextPair import, parentJob()->includedFiles()) { + foreach(const LineContextPair& import, parentJob()->includedFiles()) { if(import.temporary) continue; LineContextPair context = contentFromProxy(import); @@ -952,17 +926,19 @@ } } }*/ + + parentJob()->cleanupSmartRevision(); } void CPPParseJob::processDelayedImports() { if(!m_delayedImports.isEmpty()) { - foreach(LineJobPair job, m_delayedImports) + foreach(const LineJobPair& job, m_delayedImports) job.first->addDelayedImporter(LineContextPair(m_parseJob->proxyContext ? m_parseJob->proxyContext : m_parseJob->contentContext, job.second)); m_delayedImports.clear(); } if(!m_delayedImporters.isEmpty()) { DUChainWriteLocker l(DUChain::lock()); - foreach(LineContextPair context, m_delayedImporters) { + foreach(const LineContextPair& context, m_delayedImporters) { Q_ASSERT(context.context->parsingEnvironmentFile()); if(context.context->parsingEnvironmentFile()->isProxyContext()) { Q_ASSERT(m_parseJob->proxyContext); diff -Nru kdevelop-3.9.98/languages/cpp/cppparsejob.h kdevelop-4.0.1/languages/cpp/cppparsejob.h --- kdevelop-3.9.98/languages/cpp/cppparsejob.h 2010-01-10 21:38:39.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cppparsejob.h 2010-07-17 20:08:19.000000000 +0100 @@ -32,7 +32,6 @@ #include #include -#include #include #include "includepathcomputer.h" #include @@ -261,11 +260,5 @@ int m_priority; }; -struct UrlParseLock { - UrlParseLock(IndexedString url); - ~UrlParseLock(); - IndexedString m_url; -}; - #endif diff -Nru kdevelop-3.9.98/languages/cpp/cpputils.cpp kdevelop-4.0.1/languages/cpp/cpputils.cpp --- kdevelop-3.9.98/languages/cpp/cpputils.cpp 2010-01-10 20:47:46.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/cpputils.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -45,6 +45,23 @@ QStringList headerExtensions(QString("h,H,hh,hxx,hpp,tlh,h++").split(',')); QStringList sourceExtensions(QString("c,cc,cpp,c++,cxx,C,m,mm,M,inl,_impl.h").split(',')); +template +QList makeListUnique(QList list) +{ + QList ret; + + QSet set; + foreach(T item, list) + { + if(!set.contains(item)) + { + ret << item; + set.insert(item); + } + } + + return ret; +} QString addDot(QString ext) { if(ext.contains('.')) //We need this check because of the _impl.h thing @@ -183,6 +200,9 @@ QStringList standardIncludePaths() { + static QMutex mutex; + QMutexLocker lock(&mutex); //Make sure we don't call computeGccStandardMacros() twice at the same time + static QStringList list = CppTools::setupStandardIncludePaths(); return list; } @@ -190,6 +210,9 @@ const Cpp::ReferenceCountedMacroSet& standardMacros() { + static QMutex mutex; + QMutexLocker lock(&mutex); //Make sure we don't call computeGccStandardMacros() twice at the same time + static Cpp::ReferenceCountedMacroSet macros = CppTools::setupStandardMacros(); return macros; } @@ -202,12 +225,23 @@ kDebug(9007) << "skipping path" << skipPath; #endif + if (includeName.startsWith('/')) { + QFileInfo info(includeName); + if (info.exists() && info.isReadable() && info.isFile()) { + //kDebug(9007) << "found include file:" << info.absoluteFilePath(); + ret.first = KUrl(info.canonicalFilePath()); + ret.first.cleanPath(); + ret.second = KUrl("/"); + return ret; + } + } + if (includeType == rpp::Preprocessor::IncludeLocal && localPath != skipPath) { QString check = localPath.toLocalFile(KUrl::AddTrailingSlash) + includeName; QFileInfo info(check); if (info.exists() && info.isReadable() && info.isFile()) { //kDebug(9007) << "found include file:" << info.absoluteFilePath(); - ret.first = KUrl(info.absoluteFilePath()); + ret.first = KUrl(info.canonicalFilePath()); ret.first.cleanPath(); ret.second = localPath; return ret; @@ -231,7 +265,7 @@ if (info.exists() && info.isReadable() && info.isFile()) { //kDebug(9007) << "found include file:" << info.absoluteFilePath(); - ret.first = KUrl(info.absoluteFilePath()); + ret.first = KUrl(info.canonicalFilePath()); ret.first.cleanPath(); ret.second = path.toLocalFile(); return ret; @@ -291,17 +325,23 @@ QMap hadPaths; //Only process each path once QList ret; - KUrl::List paths = addIncludePaths; - if(!onlyAddedIncludePaths) { - paths += findIncludePaths(source, 0); - - if(local) { - KUrl localPath = source; - localPath.setFileName(QString()); - paths.push_front(localPath); + KUrl::List paths; + if ( addPath.startsWith('/') ) { + paths << KUrl("/"); + } else { + paths = addIncludePaths; + if(!onlyAddedIncludePaths) { + paths += findIncludePaths(source, 0); + + if(local) { + KUrl localPath = source; + localPath.setFileName(QString()); + paths.push_front(localPath); + } } } + paths = makeListUnique(paths); int pathNumber = 0; foreach(const KUrl& path, paths) diff -Nru kdevelop-3.9.98/languages/cpp/includepathcomputer.cpp kdevelop-4.0.1/languages/cpp/includepathcomputer.cpp --- kdevelop-3.9.98/languages/cpp/includepathcomputer.cpp 2010-01-10 21:38:39.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/includepathcomputer.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -131,7 +131,7 @@ QDirIterator it(fileInfo.dir().path()); while(it.hasNext()) { QString file = it.next(); - foreach(QString ext, sourceExtensions) { + foreach(const QString& ext, sourceExtensions) { if(file != fileInfo.fileName() && file.endsWith(ext)) { DUChainReadLocker lock(DUChain::lock(), 300); if(lock.locked()) { @@ -144,7 +144,7 @@ continue; if(envFile->includePaths().size() <= standardPaths.size() ) continue; - foreach(KDevelop::IndexedString str, envFile->includePaths()) { + foreach(const KDevelop::IndexedString& str, envFile->includePaths()) { m_ret << str.toUrl(); } kDebug(9007) << "took include-paths for" << m_source << "from duchain of" << file; @@ -218,7 +218,7 @@ p->setSource(KDevelop::ProblemData::Preprocessor); p->setDescription(i18n("Build manager did not return an include path" )); p->setExplanation(i18n("The build manager did not return the include path %1, which could be resolved by the include path resolver", r.pathOrUrl())); - p->setFinalLocation(DocumentRange(m_source.pathOrUrl(), KTextEditor::Cursor(0,0), KTextEditor::Cursor(0,0))); + p->setFinalLocation(DocumentRange(m_source.pathOrUrl(), KTextEditor::Range::invalid())); *m_problems << p; } } @@ -251,11 +251,15 @@ TopDUContext* ctx = KDevelop::DUChain::self()->chainForDocument(m_source); if( ctx && ctx->parsingEnvironmentFile() ) { Cpp::EnvironmentFile* envFile = dynamic_cast(ctx->parsingEnvironmentFile().data()); - Q_ASSERT(envFile); - m_ret = convertToUrls(envFile->includePaths()); - kDebug(9007) << "Took include-path for" << m_source << "from a random parsed duchain-version of it"; - foreach(const KUrl &url, m_ret) - m_hasPath.insert(url); + if(envFile) + { + m_ret = convertToUrls(envFile->includePaths()); + kDebug(9007) << "Took include-path for" << m_source << "from a random parsed duchain-version of it"; + foreach(const KUrl &url, m_ret) + m_hasPath.insert(url); + }else{ + kWarning() << "Missing cpp environment-file for" << m_source; + } } } diff -Nru kdevelop-3.9.98/languages/cpp/includepathresolver.cpp kdevelop-4.0.1/languages/cpp/includepathresolver.cpp --- kdevelop-3.9.98/languages/cpp/includepathresolver.cpp 2010-01-10 21:40:58.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/includepathresolver.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -66,6 +66,8 @@ #define ifTest(x) #endif +const int maximumInternalResolutionDepth = 3; + using namespace std; @@ -191,11 +193,13 @@ m_shouldTouchFiles = b; } - QString getCommand( const QString& sourceFile, const QString& makeParameters ) const { - if( isUnsermake() ) + QString getCommand( const QString& absoluteFile, const QString& workingDirectory, const QString& makeParameters ) const { + if( isUnsermake() ) { return "unsermake -k --no-real-compare -n " + makeParameters; - else - return "make -k --no-print-directory -W \'" + sourceFile + "\' -n " + makeParameters; + } else { + QString relativeFile = KUrl::relativePath(workingDirectory, absoluteFile); + return "make -k --no-print-directory -W \'" + absoluteFile + "\' -W \'" + relativeFile + "\' -n " + makeParameters; + } } bool hasMakefile() const { @@ -352,7 +356,7 @@ QString read = QString::fromLocal8Bit(f.readAll()); QStringList lines = read.split('\n', QString::SkipEmptyParts); - foreach(QString line, lines) { + foreach(const QString& line, lines) { if(!line.isEmpty()) { QString textLine = line; if(textLine.startsWith("RESOLVE:")) { @@ -401,7 +405,7 @@ f.write(buildDir.toLocal8Bit()); f.write("\n"); } - foreach(QString customPath, paths) { + foreach(const QString& customPath, paths) { f.write(customPath.toLocal8Bit()); f.write("\n"); } @@ -653,39 +657,13 @@ ///STEP 3.1: Try resolution using the absolute path PathResolutionResult res; //Try for each possible target - for( QStringList::const_iterator it = possibleTargets.constBegin(); it != possibleTargets.constEnd(); ++it ) { - res = resolveIncludePathInternal( absoluteFile, wd, *it, source ); - if( res ) { - break; - } else { - ifTest( cout << "Try for possible target " << (*it).toLocal8Bit().data() << " failed: " << res.longErrorMessage.toLocal8Bit().data() << endl; ) - } + res = resolveIncludePathInternal( absoluteFile, wd, possibleTargets.join(" "), source, maximumInternalResolutionDepth ); + if (!res) { + ifTest( cout << "Try for absolute file " << absoluteFile.toLocal8Bit().data() << " and targets " << possibleTargets.join(", ").toLocal8Bit().data() + << " failed: " << res.longErrorMessage.toLocal8Bit().data() << endl; ) } res.includePathDependency = dependency; - - if( res ) { - res.addPathsUnique(resultOnFail); - QMutexLocker l( &m_cacheMutex ); - CacheEntry ce; - ce.errorMessage = res.errorMessage; - ce.longErrorMessage = res.longErrorMessage; - ce.modificationTime = dependency; - ce.paths = res.paths; - m_cache[dir.path()] = ce; - return res; - } - - ///STEP 3.2: Try resolution using the relative path - QString relativeFile = KUrl::relativePath(wd, absoluteFile); - for( QStringList::const_iterator it = possibleTargets.constBegin(); it != possibleTargets.constEnd(); ++it ) { - res = resolveIncludePathInternal( relativeFile, wd, *it, source ); - if( res ) break; - } - - res.includePathDependency = dependency; - - res.addPathsUnique(resultOnFail); if( res.paths.isEmpty() ) res.paths = cachedPaths; //We failed, maybe there is an old cached result, use that. @@ -718,14 +696,12 @@ return res; } -PathResolutionResult IncludePathResolver::getFullOutput( const QString& command, const QString& workingDirectory, QString& output ) const { - if( !executeCommand(command, workingDirectory, output) ) - return PathResolutionResult( false, i18n("Make process failed"), i18n("Output: %1", output ) ); - return PathResolutionResult(true); -} - -PathResolutionResult IncludePathResolver::resolveIncludePathInternal( const QString& file, const QString& workingDirectory, const QString& makeParameters, const SourcePathInformation& source ) { +PathResolutionResult IncludePathResolver::resolveIncludePathInternal( const QString& file, const QString& workingDirectory, const QString& makeParameters, const SourcePathInformation& source, int maxDepth ) { + --maxDepth; + if(maxDepth < 0) + return PathResolutionResult(false); + QString processStdout; QStringList touchFiles; @@ -736,9 +712,8 @@ FileModificationTimeWrapper touch( touchFiles, workingDirectory ); QString fullOutput; - PathResolutionResult res = getFullOutput( source.getCommand( file, makeParameters ), workingDirectory, fullOutput ); - if( !res ) - return res; + executeCommand(source.getCommand( file, workingDirectory, makeParameters ), workingDirectory, fullOutput); + PathResolutionResult res; QString includeParameterRx( "\\s(-I|--include-dir=|-I\\s)" ); QString quotedRx( "(\\').*(\\')|(\\\").*(\\\")" ); //Matches "hello", 'hello', 'hello"hallo"', etc. @@ -794,6 +769,12 @@ newWorkingDirectory = u.toLocalFile(); } } + + if(newWorkingDirectory == workingDirectory) + { + return PathResolutionResult( false, i18n("Failed to extract new working directory"), i18n("Output was: %1", fullOutput) ); + } + QFileInfo d( newWorkingDirectory ); if( d.exists() ) { ///The recursive working-directory exists. @@ -808,10 +789,10 @@ u.cleanPath(); ///Try once with absolute, and if that fails with relative path of the file SourcePathInformation newSource( newWorkingDirectory ); - PathResolutionResult res = resolveIncludePathInternal( u.toLocalFile(), newWorkingDirectory, makeParams, newSource ); + PathResolutionResult res = resolveIncludePathInternal( u.toLocalFile(), newWorkingDirectory, makeParams, newSource, maxDepth ); if( res ) return res; - return resolveIncludePathInternal( KUrl::relativePath(newWorkingDirectory,u.toLocalFile()), newWorkingDirectory, makeParams , newSource ); + return resolveIncludePathInternal( KUrl::relativePath(newWorkingDirectory, u.toLocalFile()), newWorkingDirectory, makeParams , newSource, maxDepth ); }else{ return PathResolutionResult( false, i18n("Recursive make call failed"), i18n("The parameter string \"%1\" does not seem to be valid. Output was: %2.", makeParams, fullOutput) ); } @@ -872,7 +853,9 @@ } if(ret.paths.isEmpty()) - return PathResolutionResult( false, i18n("Could not extract include paths from make output"), i18n("Folder: \"%1\" Command: \"%2\" Output: \"%3\"", workingDirectory, source.getCommand(file, makeParameters), fullOutput) ); + return PathResolutionResult( false, i18n("Could not extract include paths from make output"), + i18n("Folder: \"%1\" Command: \"%2\" Output: \"%3\"", workingDirectory, + source.getCommand(file, workingDirectory, makeParameters), fullOutput) ); return ret; } diff -Nru kdevelop-3.9.98/languages/cpp/includepathresolver.h kdevelop-4.0.1/languages/cpp/includepathresolver.h --- kdevelop-3.9.98/languages/cpp/includepathresolver.h 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/includepathresolver.h 2010-07-17 20:08:19.000000000 +0100 @@ -39,7 +39,7 @@ QStringList paths; void addPathsUnique(const PathResolutionResult& rhs) { - foreach(QString path, rhs.paths) { + foreach(const QString& path, rhs.paths) { if(!paths.contains(path)) paths.append(path); } @@ -118,10 +118,9 @@ PathResolutionResult validateDirectory(QDir& directory, QFile& file); ///Executes the command using KProcess - PathResolutionResult getFullOutput( const QString& command, const QString& workingDirectory, QString& output ) const; bool executeCommand( const QString& command, const QString& workingDirectory, QString& result ) const; ///file should be the name of the target, without extension(because that may be different) - PathResolutionResult resolveIncludePathInternal( const QString& file, const QString& workingDirectory, const QString& makeParameters, const SourcePathInformation& source ); + PathResolutionResult resolveIncludePathInternal( const QString& file, const QString& workingDirectory, const QString& makeParameters, const SourcePathInformation& source, int maxDepth ); bool m_outOfSource; QString m_source; QString m_build; diff -Nru kdevelop-3.9.98/languages/cpp/kdevcppsupport.desktop kdevelop-4.0.1/languages/cpp/kdevcppsupport.desktop --- kdevelop-3.9.98/languages/cpp/kdevcppsupport.desktop 2010-01-19 12:39:48.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/kdevcppsupport.desktop 2010-07-17 20:08:19.000000000 +0100 @@ -6,6 +6,7 @@ Comment[ca]=Implementació del llenguatge C/C++ Comment[ca@valencia]=Implementació del llenguatge C/C++ Comment[cs]=Podpora jazyka C/C++ +Comment[da]=C/C++ sprogunderstøttelse Comment[de]=Sprachunterstützung für C/C++ Comment[el]=Υποστήριξη γλώσσας C/C++ Comment[en_GB]=C/C++ Language Support @@ -26,10 +27,12 @@ Comment[nds]=Ünnerstütten för C un C++ Comment[ne]=C/C++ भाषा समर्थन Comment[nl]=Ondersteuning voor de talen C/C++ +Comment[pa]=C/C++ ਲੈਗੂਇਜ਼ ਸਹਿਯੋਗ Comment[pl]=Obsługa języków C/C++ Comment[pt]=Suporte à Linguagem C/C++ Comment[pt_BR]=Suporte à Linguagem C/C++ Comment[ru]=Поддержка языка программирования C/C++ +Comment[sl]=Podpora jeziku C/C++ Comment[sv]=Stöd för språken C och C++ Comment[tr]=C/C++ Dil Desteği Comment[uk]=Підтримка мови C/C++ @@ -40,6 +43,7 @@ Name[ca]=Implementació del C++ Name[ca@valencia]=Implementació del C++ Name[cs]=Podpora C++ +Name[da]=C++-understøttelse Name[de]=Unterstützung für C++ Name[en_GB]=C++ Support Name[es]=Implementación de C++ @@ -53,9 +57,12 @@ Name[nb]=C++-støtte Name[nds]=C++-Ünnerstütten Name[nl]=Ondersteuning voor C++ +Name[pa]=C++ ਸਹਿਯੋਗ +Name[pl]=Obsługa C++ Name[pt]=Suporte a C/C++ Name[pt_BR]=Suporte à C++ Name[ru]=Поддержка языка C++ +Name[sl]=Podpora za C++ Name[sv]=C++ stöd Name[tr]=C++ Desteği Name[uk]=Підтримка C++ @@ -66,6 +73,7 @@ GenericName[ca]=Implementació de llenguatge GenericName[ca@valencia]=Implementació de llenguatge GenericName[cs]=Podpora jazyků +GenericName[da]=Sprogunderstøttelse GenericName[de]=Sprachunterstützung GenericName[en_GB]=Language Support GenericName[es]=Implementación de lenguaje @@ -79,9 +87,12 @@ GenericName[nb]=Språkstøtte GenericName[nds]=Spraak-Ünnerstütten GenericName[nl]=Taalondersteuning +GenericName[pa]=ਲੈਗੂਇਜ਼ ਸਹਿਯੋਗ +GenericName[pl]=Obsługa języków GenericName[pt]=Suporte à Linguagem -GenericName[pt_BR]=Suporte à linguagem +GenericName[pt_BR]=Suporte a linguagem GenericName[ru]=Поддержка языка программирования +GenericName[sl]=Podpora jeziku GenericName[sv]=Språkstöd GenericName[tr]=Dil Desteği GenericName[uk]=Підтримка мов @@ -92,7 +103,7 @@ Icon=source-cpp X-KDE-Library=kdevcpplanguagesupport X-KDE-PluginInfo-Name=kdevcppsupport -X-KDevelop-Version=8 +X-KDevelop-Version=9 X-KDevelop-Language=C++ X-KDevelop-Args=CPP X-KDevelop-Interfaces=ILanguageSupport diff -Nru kdevelop-3.9.98/languages/cpp/parser/ast.h kdevelop-4.0.1/languages/cpp/parser/ast.h --- kdevelop-3.9.98/languages/cpp/parser/ast.h 2009-11-06 21:18:49.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/parser/ast.h 2010-07-17 20:08:19.000000000 +0100 @@ -200,14 +200,8 @@ int kind; - std::size_t start_token; - std::size_t end_token; - - /** - * The parent node of this AST node. This is only set when the ParentVisitor - * is ran over the tree. - */ - AST *parent; + uint start_token; + uint end_token; /** Context opened by this AST *This is usually not filled for all AST's, only for those that open a new context @@ -219,14 +213,14 @@ { public: - const ListNode *comments; //A list of comment-tokens + const ListNode *comments; //A list of comment-tokens }; class TypeSpecifierAST : public AST { public: - const ListNode *cv; // const or volatile tokens + const ListNode *cv; // const or volatile tokens }; class StatementAST : public AST @@ -253,7 +247,7 @@ DECLARE_AST_NODE(AccessSpecifier) - const ListNode *specs; + const ListNode *specs; }; class AsmDefinitionAST : public DeclarationAST @@ -262,7 +256,7 @@ DECLARE_AST_NODE(AsmDefinition) - const ListNode *cv; + const ListNode *cv; }; class BaseClauseAST : public AST // ### kill me @@ -280,8 +274,8 @@ DECLARE_AST_NODE(BaseSpecifier) - std::size_t virt; - std::size_t access_specifier; + uint virt; + uint access_specifier; NameAST *name; }; @@ -291,7 +285,7 @@ DECLARE_AST_NODE(BinaryExpression) - std::size_t op; //Index of the token that describes the operator + uint op; //Index of the token that describes the operator ExpressionAST *left_expression; ExpressionAST *right_expression; }; @@ -321,7 +315,7 @@ DECLARE_AST_NODE(ClassMemberAccess) - std::size_t op; //Index of the token that describes the operator + uint op; //Index of the token that describes the operator NameAST *name; }; @@ -332,7 +326,7 @@ DECLARE_AST_NODE(ClassSpecifier) WinDeclSpecAST *win_decl_specifiers; - std::size_t class_key; + uint class_key; NameAST *name; BaseClauseAST *base_clause; const ListNode *member_specs; @@ -380,7 +374,7 @@ DECLARE_AST_NODE(CppCastExpression) - std::size_t op; //Index of the token that describes the operator + uint op; //Index of the token that describes the operator TypeIdAST *type_id; ExpressionAST *expression; const ListNode *sub_expressions; @@ -392,7 +386,7 @@ DECLARE_AST_NODE(CtorInitializer) - std::size_t colon; + uint colon; const ListNode *member_initializers; }; @@ -419,7 +413,7 @@ bool parameter_is_initializer; //Used by the declaration-builder to mark a parameter-declaration clause as a mis-parsed initializer ParameterDeclarationClauseAST *parameter_declaration_clause; - const ListNode *fun_cv; + const ListNode *fun_cv; ExceptionSpecificationAST *exception_spec; }; @@ -429,10 +423,10 @@ DECLARE_AST_NODE(DeleteExpression) - std::size_t scope_token; - std::size_t delete_token; - std::size_t lbracket_token; - std::size_t rbracket_token; + uint scope_token; + uint delete_token; + uint lbracket_token; + uint rbracket_token; ExpressionAST *expression; }; @@ -452,7 +446,7 @@ DECLARE_AST_NODE(ElaboratedTypeSpecifier) - std::size_t type; + uint type; NameAST *name; bool isDeclaration; //Whether this type-specifier is a forward declaration rather than use use }; @@ -473,7 +467,7 @@ DECLARE_AST_NODE(Enumerator) - std::size_t id; + uint id; ExpressionAST *expression; }; @@ -483,7 +477,7 @@ DECLARE_AST_NODE(ExceptionSpecification) - std::size_t ellipsis; + uint ellipsis; const ListNode *type_ids; }; @@ -525,8 +519,8 @@ DECLARE_AST_NODE(FunctionDefinition) - const ListNode *storage_specifiers; - const ListNode *function_specifiers; + const ListNode *storage_specifiers; + const ListNode *function_specifiers; TypeSpecifierAST *type_specifier; InitDeclaratorAST *init_declarator; StatementAST *function_body; @@ -563,7 +557,7 @@ DECLARE_AST_NODE(IncrDecrExpression) - std::size_t op; //Index of the token that describes the operator + uint op; //Index of the token that describes the operator }; class InitDeclaratorAST : public AST @@ -606,7 +600,7 @@ DECLARE_AST_NODE(LabeledStatement) - std::size_t label; + uint label; //The constant label expression ExpressionAST *expression; StatementAST* statement; @@ -627,7 +621,7 @@ DECLARE_AST_NODE(LinkageSpecification) - std::size_t extern_type; + uint extern_type; LinkageBodyAST *linkage_body; DeclarationAST *declaration; }; @@ -659,7 +653,7 @@ DECLARE_AST_NODE(Namespace) - std::size_t namespace_name; + uint namespace_name; LinkageBodyAST *linkage_body; }; @@ -669,7 +663,7 @@ DECLARE_AST_NODE(NamespaceAliasDefinition) - std::size_t namespace_name; + uint namespace_name; NameAST *alias_name; }; @@ -690,8 +684,8 @@ DECLARE_AST_NODE(NewExpression) - std::size_t scope_token; - std::size_t new_token; + uint scope_token; + uint new_token; ExpressionAST *expression; TypeIdAST *type_id; NewTypeIdAST *new_type_id; @@ -724,9 +718,9 @@ DECLARE_AST_NODE(Operator) - std::size_t op; //Index of the token that describes the operator - std::size_t open; - std::size_t close; + uint op; //Index of the token that describes the operator + uint open; + uint close; }; class OperatorFunctionIdAST : public AST @@ -758,7 +752,7 @@ DECLARE_AST_NODE(ParameterDeclarationClause) const ListNode *parameter_declarations; - std::size_t ellipsis; + uint ellipsis; }; /** @@ -788,7 +782,7 @@ DECLARE_AST_NODE(PrimaryExpression) StringLiteralAST *literal; - std::size_t token; + uint token; StatementAST *expression_statement; ExpressionAST *sub_expression; NameAST *name; @@ -800,8 +794,8 @@ DECLARE_AST_NODE(PtrOperator) - const ListNode *cv; - std::size_t op; //Index of the token that describes the operator. Is zero when mem_ptr is non-zero. + const ListNode *cv; + uint op; //Index of the token that describes the operator. Is zero when mem_ptr is non-zero. PtrToMemberAST *mem_ptr; }; @@ -821,9 +815,9 @@ // index of operator token which describes the jump, one of // 'break', 'continue' or 'goto. Return statements are handled by // ReturnStatementAST - std::size_t op; + uint op; // identifier for 'goto' statements - std::size_t identifier; + uint identifier; }; class ReturnStatementAST : public StatementAST @@ -841,8 +835,8 @@ DECLARE_AST_NODE(SimpleDeclaration) - const ListNode *storage_specifiers; - const ListNode *function_specifiers; + const ListNode *storage_specifiers; + const ListNode *function_specifiers; TypeSpecifierAST *type_specifier; const ListNode *init_declarators; WinDeclSpecAST *win_decl_specifiers; @@ -854,8 +848,8 @@ DECLARE_AST_NODE(SimpleTypeSpecifier) - const ListNode *integrals; - std::size_t type_of; + const ListNode *integrals; + uint type_of; TypeIdAST *type_id; ExpressionAST *expression; NameAST *name; @@ -867,7 +861,7 @@ DECLARE_AST_NODE(SizeofExpression) - std::size_t sizeof_token; + uint sizeof_token; TypeIdAST *type_id; ExpressionAST *expression; }; @@ -878,7 +872,7 @@ DECLARE_AST_NODE(StringLiteral) - const ListNode *literals; + const ListNode *literals; }; /// operator [] @@ -917,7 +911,7 @@ DECLARE_AST_NODE(TemplateDeclaration) - std::size_t exported; + uint exported; const ListNode *template_parameters; DeclarationAST* declaration; }; @@ -938,7 +932,7 @@ DECLARE_AST_NODE(ThrowExpression) - std::size_t throw_token; + uint throw_token; ExpressionAST *expression; }; @@ -997,7 +991,7 @@ DECLARE_AST_NODE(TypeIdentification) - std::size_t typename_token; + uint typename_token; NameAST *name; ExpressionAST *expression; }; @@ -1008,7 +1002,7 @@ DECLARE_AST_NODE(TypeParameter) - std::size_t type; + uint type; NameAST *name; TypeIdAST *type_id; const ListNode *template_parameters; @@ -1031,7 +1025,7 @@ DECLARE_AST_NODE(UnaryExpression) - std::size_t op; //Index of the token that describes the operator + uint op; //Index of the token that describes the operator ExpressionAST *expression; }; @@ -1041,8 +1035,8 @@ DECLARE_AST_NODE(UnqualifiedName) - std::size_t tilde; - std::size_t id; + uint tilde; + uint id; bool ellipsis; OperatorFunctionIdAST *operator_id; const ListNode *template_arguments; @@ -1054,7 +1048,7 @@ DECLARE_AST_NODE(Using) - std::size_t type_name; + uint type_name; NameAST *name; }; @@ -1083,8 +1077,8 @@ DECLARE_AST_NODE(WinDeclSpec) - std::size_t specifier; - std::size_t modifier; + uint specifier; + uint modifier; }; template diff -Nru kdevelop-3.9.98/languages/cpp/parser/codegenerator.cpp kdevelop-4.0.1/languages/cpp/parser/codegenerator.cpp --- kdevelop-3.9.98/languages/cpp/parser/codegenerator.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/parser/codegenerator.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -46,7 +46,7 @@ return m_outputString; } -void CodeGenerator::outputToken(std::size_t tokenPosition) +void CodeGenerator::outputToken(uint tokenPosition) { if (tokenPosition) { const Token& t = m_session->token_stream->token(tokenPosition); @@ -58,12 +58,12 @@ } } -void CodeGenerator::print(const ListNode* tokenList, bool followingSpace) +void CodeGenerator::print(const ListNode* tokenList, bool followingSpace) { if (!tokenList) return; - const ListNode* it = tokenList->toFront(), *end = it; + const ListNode* it = tokenList->toFront(), *end = it; bool first = true; do { if (first) first = false; else m_output << " "; @@ -75,7 +75,7 @@ m_output << " "; } -void CodeGenerator::print(std::size_t token, bool followingSpace) +void CodeGenerator::print(uint token, bool followingSpace) { if (!token) return; diff -Nru kdevelop-3.9.98/languages/cpp/parser/codegenerator.h kdevelop-4.0.1/languages/cpp/parser/codegenerator.h --- kdevelop-3.9.98/languages/cpp/parser/codegenerator.h 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/parser/codegenerator.h 2010-07-17 20:08:19.000000000 +0100 @@ -112,10 +112,10 @@ virtual void visitWinDeclSpec (WinDeclSpecAST*); private: - void outputToken(std::size_t tokenPosition); + void outputToken(uint tokenPosition); - void print(const ListNode* tokenList, bool followingSpace = false); - void print(std::size_t token, bool followingSpace = false); + void print(const ListNode* tokenList, bool followingSpace = false); + void print(uint token, bool followingSpace = false); void printToken(int token, bool followingSpace = false); template diff -Nru kdevelop-3.9.98/languages/cpp/parser/commentformatter.cpp kdevelop-4.0.1/languages/cpp/parser/commentformatter.cpp --- kdevelop-3.9.98/languages/cpp/parser/commentformatter.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/parser/commentformatter.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -25,18 +25,18 @@ #include -QByteArray CommentFormatter::formatComment( size_t token, const ParseSession* session ) { +QByteArray CommentFormatter::formatComment( uint token, const ParseSession* session ) { if( !token ) return QByteArray(); const Token& commentToken( (*session->token_stream)[token] ); return KDevelop::formatComment( stringFromContents(session->contentsVector(), commentToken.position, commentToken.size ) ); } -QByteArray CommentFormatter::formatComment( const ListNode* comments, const ParseSession* session ) { +QByteArray CommentFormatter::formatComment( const ListNode* comments, const ParseSession* session ) { QByteArray ret; if( comments ) { - const ListNode *it = comments->toFront(), *end = it; + const ListNode *it = comments->toFront(), *end = it; do { QByteArray c = CommentFormatter::formatComment(it->element, session); diff -Nru kdevelop-3.9.98/languages/cpp/parser/commentformatter.h kdevelop-4.0.1/languages/cpp/parser/commentformatter.h --- kdevelop-3.9.98/languages/cpp/parser/commentformatter.h 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/parser/commentformatter.h 2010-07-17 20:08:19.000000000 +0100 @@ -35,10 +35,10 @@ class KDEVCPPPARSER_EXPORT CommentFormatter { public: ///Processes the comment represented by the given token-number within the parse-session's token-stream - static QByteArray formatComment( size_t token, const ParseSession* session ); + static QByteArray formatComment( uint token, const ParseSession* session ); ///Processes the list of comments represented by the given token-number within the parse-session's token-stream - static QByteArray formatComment( const ListNode* node, const ParseSession* session ); + static QByteArray formatComment( const ListNode* node, const ParseSession* session ); private: }; diff -Nru kdevelop-3.9.98/languages/cpp/parser/commentparser.cpp kdevelop-4.0.1/languages/cpp/parser/commentparser.cpp --- kdevelop-3.9.98/languages/cpp/parser/commentparser.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/parser/commentparser.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -18,7 +18,7 @@ #include "commentparser.h" // #include -Comment::Comment( size_t token, int line ) : m_line(line), m_token( token ) { +Comment::Comment( uint token, int line ) : m_line(line), m_token( token ) { } Comment::operator bool() const { diff -Nru kdevelop-3.9.98/languages/cpp/parser/commentparser.h kdevelop-4.0.1/languages/cpp/parser/commentparser.h --- kdevelop-3.9.98/languages/cpp/parser/commentparser.h 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/parser/commentparser.h 2010-07-17 20:08:19.000000000 +0100 @@ -26,7 +26,7 @@ class Comment { public: - explicit Comment( size_t token = 0, int line = -1 ); + explicit Comment( uint token = 0, int line = -1 ); operator bool() const; @@ -40,12 +40,12 @@ bool isSame ( const Comment& rhs ) const; - size_t token() const { + uint token() const { return m_token; } private: int m_line; - size_t m_token; + uint m_token; }; diff -Nru kdevelop-3.9.98/languages/cpp/parser/lexer.cpp kdevelop-4.0.1/languages/cpp/parser/lexer.cpp --- kdevelop-3.9.98/languages/cpp/parser/lexer.cpp 2009-12-10 01:23:52.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/parser/lexer.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -115,7 +115,7 @@ uint Token::symbolLength() const { uint ret = 0; for(uint a = position; a < position+size; ++a) { - ret += KDevelop::IndexedString::fromIndex(session->contents()[a]).length(); + ret += KDevelop::IndexedString::lengthFromIndex(session->contents()[a]); } return ret; } @@ -126,13 +126,18 @@ KDevVarLengthArray, 10 >, index_size > ret; ret.resize(index_size); #define ADD_TOKEN(string) ret[KDevelop::IndexedString(#string).index() % index_size].append(qMakePair(KDevelop::IndexedString(#string).index(), Token_ ## string)); + #define ADD_TOKEN2(string, tok) ret[KDevelop::IndexedString(#string).index() % index_size].append(qMakePair(KDevelop::IndexedString(#string).index(), Token_ ## tok)); ADD_TOKEN(K_DCOP); ADD_TOKEN(Q_OBJECT); ADD_TOKEN(__attribute__); ADD_TOKEN(__typeof); + ADD_TOKEN2(__typeof__, __typeof); + ADD_TOKEN2(typeof, __typeof); ADD_TOKEN(and); ADD_TOKEN(and_eq); ADD_TOKEN(asm); + ADD_TOKEN2(__asm, asm); + ADD_TOKEN2(__asm__, asm) ADD_TOKEN(auto); ADD_TOKEN(bitand); ADD_TOKEN(bitor); @@ -163,7 +168,6 @@ ADD_TOKEN(friend); ADD_TOKEN(goto); ADD_TOKEN(if); - ADD_TOKEN(incr); ADD_TOKEN(inline); ADD_TOKEN(int); ADD_TOKEN(k_dcop); @@ -184,10 +188,10 @@ ADD_TOKEN(reinterpret_cast); ADD_TOKEN(return); ADD_TOKEN(short); - ADD_TOKEN(signals); + ADD_TOKEN(__qt_signals__); ADD_TOKEN(signed); ADD_TOKEN(sizeof); - ADD_TOKEN(slots); + ADD_TOKEN(__qt_slots__); ADD_TOKEN(static); ADD_TOKEN(static_cast); ADD_TOKEN(struct); @@ -206,11 +210,13 @@ ADD_TOKEN(virtual); ADD_TOKEN(void); ADD_TOKEN(volatile); + ADD_TOKEN2(__volatile__, volatile); ADD_TOKEN(wchar_t); ADD_TOKEN(while); ADD_TOKEN(xor); ADD_TOKEN(xor_eq); - ADD_TOKEN(__qt_sig_slot__); + ADD_TOKEN(__qt_signal__); + ADD_TOKEN(__qt_slot__); return ret; } diff -Nru kdevelop-3.9.98/languages/cpp/parser/lexer.h kdevelop-4.0.1/languages/cpp/parser/lexer.h --- kdevelop-3.9.98/languages/cpp/parser/lexer.h 2009-05-28 21:00:02.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/parser/lexer.h 2010-07-17 20:08:19.000000000 +0100 @@ -42,9 +42,9 @@ ///kind of the token @see TOKEN_KIND enum reference. int kind; ///position in the preprocessed buffer - std::size_t position; + uint position; ///size of the token in the preprocessed buffer. Do not confuse this with symbolLength. - std::size_t size; + uint size; ///pointer to the parse session. const ParseSession* session; @@ -62,7 +62,7 @@ union { //const NameSymbol *symbol; - std::size_t right_brace; + uint right_brace; } extra; }; @@ -81,7 +81,7 @@ public: /**Creates a token stream with the default size of 1024 tokens.*/ - inline TokenStream(std::size_t size = 1024) + inline TokenStream(uint size = 1024) : tokens(0), index(0), token_count(0) @@ -93,12 +93,12 @@ { ::free(tokens); } /**@return the size of the token stream.*/ - inline std::size_t size() const + inline uint size() const { return token_count; } /**@return the "cursor" - the offset (index) of the token currently "observed" from the beginning of the stream.*/ - inline std::size_t cursor() const + inline uint cursor() const { return index; } /**Sets the cursor to the position @p i.*/ @@ -106,7 +106,7 @@ { index = i; } /**Resizes the token stream.*/ - void resize(std::size_t size) + void resize(uint size) { Q_ASSERT(size > 0); tokens = (Token*) ::realloc(tokens, sizeof(Token) * size); @@ -115,30 +115,30 @@ /**Updates the cursor position to point to the next token and returns the cursor.*/ - inline std::size_t nextToken() + inline uint nextToken() { return index++; } /**@return the kind of the next (LA) token in the stream.*/ - inline int lookAhead(std::size_t i = 0) const + inline int lookAhead(uint i = 0) const { return tokens[index + i].kind; } /**@return the kind of the current token in the stream.*/ - inline int kind(std::size_t i) const + inline int kind(uint i) const { return tokens[i].kind; } /**@return the position of the current token in the c++ source buffer.*/ - inline std::size_t position(std::size_t i) const + inline uint position(uint i) const { return tokens[i].position; } /**@return the name symbol of the current token.*/ - //inline const NameSymbol *symbol(std::size_t i) const + //inline const NameSymbol *symbol(uint i) const //{ return tokens[i].extra.symbol; } /**@return the position of the matching right brace in the c++ source buffer. @todo this doesn't seem to work as the lexer does not provide this information at the moment.*/ - inline std::size_t matchingBrace(std::size_t i) const + inline uint matchingBrace(uint i) const { return tokens[i].extra.right_brace; } /**@return the token at position @p index.*/ @@ -151,8 +151,8 @@ private: Token *tokens; - std::size_t index; - std::size_t token_count; + uint index; + uint token_count; private: friend class Lexer; @@ -293,7 +293,7 @@ SpecialCursor cursor; const uint* endCursor; - std::size_t index; + uint index; bool m_leaveSize; //Marks the current token that its size should not be automatically set bool m_canMergeComment; //Whether we may append new comments to the last encountered one diff -Nru kdevelop-3.9.98/languages/cpp/parser/name_compiler.cpp kdevelop-4.0.1/languages/cpp/parser/name_compiler.cpp --- kdevelop-3.9.98/languages/cpp/parser/name_compiler.cpp 2009-10-24 13:23:11.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/parser/name_compiler.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -47,13 +47,13 @@ return ret; } -uint parseConstVolatile(ParseSession* session, const ListNode *cv) +uint parseConstVolatile(ParseSession* session, const ListNode *cv) { uint ret = AbstractType::NoModifiers; if (cv) { - const ListNode *it = cv->toFront(); - const ListNode *end = it; + const ListNode *it = cv->toFront(); + const ListNode *end = it; do { int kind = session->token_stream->kind(it->element); if (kind == Token_const) diff -Nru kdevelop-3.9.98/languages/cpp/parser/parentvisitor.cpp kdevelop-4.0.1/languages/cpp/parser/parentvisitor.cpp --- kdevelop-3.9.98/languages/cpp/parser/parentvisitor.cpp 2009-10-27 11:46:56.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/parser/parentvisitor.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -1,5 +1,6 @@ /* (c) 2009 Bertjan Broeksema + (c) 2010 Milian Wolff This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -20,14 +21,20 @@ #include -ParentVisitor::ParentVisitor() : m_currentParent(0) -{ } +#include "parsesession.h" + +ParentVisitor::ParentVisitor(ParseSession* session) + : m_currentParent(0), m_session(session) +{ +} void ParentVisitor::visit(AST* node) { - if (node) - node->parent = m_currentParent; + if (node) { + m_session->mapAstParent(node, m_currentParent); + } PushValue pushCurrentParent(m_currentParent, node); + DefaultVisitor::visit(node); } diff -Nru kdevelop-3.9.98/languages/cpp/parser/parentvisitor.h kdevelop-4.0.1/languages/cpp/parser/parentvisitor.h --- kdevelop-3.9.98/languages/cpp/parser/parentvisitor.h 2009-10-27 11:46:56.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/parser/parentvisitor.h 2010-07-17 20:08:19.000000000 +0100 @@ -21,17 +21,20 @@ #include "default_visitor.h" +class ParseSession; + /** * Sets the parent node of each AST node. The root node won't have a parent set. */ class ParentVisitor : public DefaultVisitor { public: - ParentVisitor(); + ParentVisitor(ParseSession* session); virtual void visit(AST* node); private: AST *m_currentParent; + ParseSession* m_session; }; #endif // PARENTVISITOR_H diff -Nru kdevelop-3.9.98/languages/cpp/parser/parser.cpp kdevelop-4.0.1/languages/cpp/parser/parser.cpp --- kdevelop-3.9.98/languages/cpp/parser/parser.cpp 2009-12-22 23:37:47.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/parser/parser.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -72,7 +72,7 @@ void Parser::moveComments( CommentAST* ast ) { while( m_commentStore.hasComment() ) { - size_t token = m_commentStore.takeFirstComment().token(); + uint token = m_commentStore.takeFirstComment().token(); /* kDebug() << "Moving comment" << session->token_stream->token(token).symbol();*/ @@ -91,7 +91,7 @@ { } -void Parser::rewind(size_t position) { +void Parser::rewind(uint position) { session->token_stream->rewind(position); //Search the previous valid token @@ -103,7 +103,10 @@ } void Parser::advance( bool skipComment ) { - size_t t = session->token_stream->lookAhead(); + uint t = session->token_stream->lookAhead(); + if( session->token_stream->cursor() > 0 && t == Token_EOF ) { + return; + } if( t != Token_comment ) _M_last_valid_token = session->token_stream->cursor(); @@ -148,14 +151,14 @@ } } -int Parser::lineFromTokenNumber( size_t tokenNumber ) const { +int Parser::lineFromTokenNumber( uint tokenNumber ) const { const Token& token( (*session->token_stream)[tokenNumber] ); return session->positionAt( token.position ).line; } void Parser::processComment( int offset, int line ) { - size_t tokenNumber = session->token_stream->cursor() + offset; + uint tokenNumber = session->token_stream->cursor() + offset; if(_M_last_parsed_comment >= tokenNumber) return; //The comment was already parsed. May happen because of pre-parsing @@ -242,18 +245,18 @@ } -void Parser::addTokenMarkers(size_t tokenNumber, Parser::TokenMarkers markers) +void Parser::addTokenMarkers(uint tokenNumber, Parser::TokenMarkers markers) { - hash_map::iterator it = m_tokenMarkers.find(tokenNumber); + hash_map::iterator it = m_tokenMarkers.find(tokenNumber); if(it != m_tokenMarkers.end()) (*it).second = (TokenMarkers)((*it).second | markers); else m_tokenMarkers.insert(std::make_pair(tokenNumber, markers)); } -Parser::TokenMarkers Parser::tokenMarkers(size_t tokenNumber) const +Parser::TokenMarkers Parser::tokenMarkers(uint tokenNumber) const { - hash_map::const_iterator it = m_tokenMarkers.find(tokenNumber); + hash_map::const_iterator it = m_tokenMarkers.find(tokenNumber); if(it != m_tokenMarkers.end()) return (*it).second; else @@ -267,12 +270,12 @@ if (session->token_stream->lookAhead() != Token_identifier) return false; - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); KDevelop::IndexedString name = session->token_stream->token(session->token_stream->cursor()).symbol(); if (name != declSpecString) return false; - std::size_t specifier = session->token_stream->cursor(); + uint specifier = session->token_stream->cursor(); advance(); if (session->token_stream->lookAhead() != '(') @@ -281,7 +284,7 @@ advance(); if (session->token_stream->lookAhead() != Token_identifier) return false; - std::size_t modifier = session->token_stream->cursor(); + uint modifier = session->token_stream->cursor(); advance(); if (session->token_stream->lookAhead() != ')') @@ -319,8 +322,8 @@ void Parser::syntaxError() { - std::size_t cursor = session->token_stream->cursor(); - std::size_t kind = session->token_stream->lookAhead(); + uint cursor = session->token_stream->cursor(); + uint kind = session->token_stream->lookAhead(); if (m_syntaxErrorTokens.contains(cursor)) return; // syntax error at this point has already been reported @@ -346,7 +349,7 @@ { bool hold = holdErrors(false); - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); while (m_pendingErrors.count() > 0) { PendingError error = m_pendingErrors.dequeue(); @@ -366,7 +369,7 @@ QString fileName; - std::size_t tok = session->token_stream->cursor(); + uint tok = session->token_stream->cursor(); KDevelop::SimpleCursor position = session->positionAt(session->token_stream->position(tok)); KDevelop::ProblemPointer p(new KDevelop::Problem); @@ -437,8 +440,8 @@ case Token_public: case Token_protected: case Token_private: - case Token_signals: // Qt - case Token_slots: // Qt + case Token___qt_signals__: // Qt + case Token___qt_slots__: // Qt return true; case '}': return false; @@ -530,7 +533,7 @@ bool Parser::parseName(NameAST*& node, ParseNameAcceptTemplate acceptTemplateId) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); WinDeclSpecAST *winDeclSpec = 0; parseWinDeclSpec(winDeclSpec); @@ -544,7 +547,7 @@ advance(); } - std::size_t idx = session->token_stream->cursor(); + uint idx = session->token_stream->cursor(); while (true) { @@ -603,10 +606,10 @@ _M_hadMismatchingCompoundTokens = false; /* kDebug() << "tokens:"; - for(size_t a = 0; a < session->token_stream->size(); ++a) + for(uint a = 0; a < session->token_stream->size(); ++a) kDebug() << token_name(session->token_stream->token(a).kind) << session->token_stream->token(a).symbolString();*/ - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); TranslationUnitAST *ast = CreateNode(session->mempool); session->topAstNode(ast); @@ -615,7 +618,7 @@ while (session->token_stream->lookAhead()) { - std::size_t startDecl = session->token_stream->cursor(); + uint startDecl = session->token_stream->cursor(); DeclarationAST *declaration = 0; if (parseDeclaration(declaration)) @@ -646,7 +649,7 @@ bool Parser::parseDeclaration(DeclarationAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); switch(session->token_stream->lookAhead()) { @@ -675,10 +678,10 @@ default: { - const ListNode *cv = 0; + const ListNode *cv = 0; parseCvQualify(cv); - const ListNode *storageSpec = 0; + const ListNode *storageSpec = 0; parseStorageClassSpecifier(storageSpec); parseCvQualify(cv); @@ -738,7 +741,7 @@ bool Parser::parseLinkageSpecification(DeclarationAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); CHECK(Token_extern); @@ -767,7 +770,7 @@ bool Parser::parseLinkageBody(LinkageBodyAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); CHECK('{'); @@ -780,7 +783,7 @@ if (tk == '}') break; - std::size_t startDecl = session->token_stream->cursor(); + uint startDecl = session->token_stream->cursor(); DeclarationAST *declaration = 0; if (parseDeclaration(declaration)) @@ -816,11 +819,11 @@ bool Parser::parseNamespace(DeclarationAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); CHECK(Token_namespace); - std::size_t namespace_name = 0; + uint namespace_name = 0; if (session->token_stream->lookAhead() == Token_identifier) { namespace_name = session->token_stream->cursor(); @@ -871,7 +874,7 @@ bool Parser::parseUsing(DeclarationAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); CHECK(Token_using); @@ -899,7 +902,7 @@ bool Parser::parseUsingDirective(DeclarationAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); CHECK(Token_namespace); @@ -923,7 +926,7 @@ bool Parser::parseOperatorFunctionId(OperatorFunctionIdAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); CHECK(Token_operator); @@ -933,7 +936,7 @@ ast->op = 0; // parse cast operator - const ListNode *cv = 0; + const ListNode *cv = 0; parseCvQualify(cv); if (!parseSimpleTypeSpecifier(ast->type_specifier)) @@ -988,7 +991,7 @@ bool Parser::parseTypedef(DeclarationAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); Comment mcomment = comment(); @@ -1032,11 +1035,11 @@ bool Parser::parseAsmDefinition(DeclarationAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); ADVANCE(Token_asm, "asm"); - const ListNode *cv = 0; + const ListNode *cv = 0; parseCvQualify(cv); #if defined(__GNUC__) @@ -1056,9 +1059,9 @@ bool Parser::parseTemplateDeclaration(DeclarationAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); - std::size_t exported = 0; + uint exported = 0; if (session->token_stream->lookAhead() == Token_export) { exported = session->token_stream->cursor(); @@ -1095,7 +1098,7 @@ bool Parser::parseOperator(OperatorAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); OperatorAST *ast = CreateNode(session->mempool); @@ -1179,9 +1182,9 @@ return true; } -bool Parser::parseCvQualify(const ListNode *&node) +bool Parser::parseCvQualify(const ListNode *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); int tk; while (0 != (tk = session->token_stream->lookAhead()) @@ -1197,11 +1200,11 @@ bool Parser::parseSimpleTypeSpecifier(TypeSpecifierAST *&node, bool onlyIntegral) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); bool isIntegral = false; bool done = false; - const ListNode *integrals = 0; + const ListNode *integrals = 0; while (!done) { @@ -1245,13 +1248,13 @@ { advance(); - std::size_t saved = session->token_stream->cursor(); - parseTypeId(ast->type_id); - if (session->token_stream->lookAhead() != ')') + uint saved = session->token_stream->cursor(); + if (!parseTypeId(ast->type_id) || session->token_stream->lookAhead() != ')') { ast->type_id = 0; + ast->integrals = 0; rewind(saved); - parseUnaryExpression(ast->expression); + parseCommaExpression(ast->expression); } ADVANCE(')', ")"); } @@ -1293,7 +1296,7 @@ return false; } - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); PtrOperatorAST *ast = CreateNode(session->mempool); switch (session->token_stream->lookAhead()) @@ -1330,7 +1333,7 @@ bool Parser::parseTemplateArgument(TemplateArgumentAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); TypeIdAST *typeId = 0; ExpressionAST *expr = 0; @@ -1362,9 +1365,9 @@ bool Parser::parseTypeSpecifier(TypeSpecifierAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); - const ListNode *cv = 0; + const ListNode *cv = 0; parseCvQualify(cv); TypeSpecifierAST *ast = 0; @@ -1385,7 +1388,7 @@ bool Parser::parseDeclarator(DeclaratorAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); DeclaratorAST *ast = CreateNode(session->mempool); DeclaratorAST *decl = 0; @@ -1471,7 +1474,7 @@ return false; } - std::size_t index = session->token_stream->cursor(); + uint index = session->token_stream->cursor(); if (session->token_stream->lookAhead() == '(') { advance(); @@ -1536,7 +1539,7 @@ bool Parser::parseAbstractDeclarator(DeclaratorAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); DeclaratorAST *ast = CreateNode(session->mempool); DeclaratorAST *decl = 0; @@ -1643,7 +1646,7 @@ bool Parser::parseEnumSpecifier(TypeSpecifierAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); CHECK(Token_enum); @@ -1718,7 +1721,7 @@ bool Parser::parseTemplateParameter(TemplateParameterAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); TemplateParameterAST *ast = CreateNode(session->mempool); int tk = session->token_stream->lookAhead(); @@ -1739,7 +1742,7 @@ bool Parser::parseTypeParameter(TypeParameterAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); TypeParameterAST *ast = CreateNode(session->mempool); ast->type = start; @@ -1824,9 +1827,9 @@ return true; } -bool Parser::parseStorageClassSpecifier(const ListNode *&node) +bool Parser::parseStorageClassSpecifier(const ListNode *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); int tk; while (0 != (tk = session->token_stream->lookAhead()) @@ -1841,9 +1844,9 @@ return start != session->token_stream->cursor(); } -bool Parser::parseFunctionSpecifier(const ListNode *&node) +bool Parser::parseFunctionSpecifier(const ListNode *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); int tk; while (0 != (tk = session->token_stream->lookAhead()) @@ -1860,7 +1863,7 @@ bool Parser::parseTypeId(TypeIdAST *&node) { /// @todo implement the AST for typeId - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); TypeSpecifierAST *spec = 0; if (!parseTypeSpecifier(spec)) @@ -1907,7 +1910,7 @@ bool Parser::parseParameterDeclarationClause(ParameterDeclarationClauseAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); ParameterDeclarationClauseAST *ast = CreateNode(session->mempool); @@ -1944,7 +1947,7 @@ bool Parser::parseParameterDeclarationList(const ListNode *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); ParameterDeclarationAST *param = 0; if (!parseParameterDeclaration(param)) @@ -1972,9 +1975,9 @@ bool Parser::parseParameterDeclaration(ParameterDeclarationAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); - const ListNode *storage = 0; + const ListNode *storage = 0; parseStorageClassSpecifier(storage); // parse decl spec @@ -2026,13 +2029,13 @@ bool Parser::parseClassSpecifier(TypeSpecifierAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); int kind = session->token_stream->lookAhead(); if (kind != Token_class && kind != Token_struct && kind != Token_union) return false; - std::size_t class_key = session->token_stream->cursor(); + uint class_key = session->token_stream->cursor(); advance(); WinDeclSpecAST *winDeclSpec = 0; @@ -2075,7 +2078,7 @@ if (session->token_stream->lookAhead() == '}') break; - std::size_t startDecl = session->token_stream->cursor(); + uint startDecl = session->token_stream->cursor(); DeclarationAST *memSpec = 0; if (!parseMemberSpecification(memSpec)) @@ -2100,17 +2103,17 @@ bool Parser::parseAccessSpecifier(DeclarationAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); - const ListNode *specs = 0; + const ListNode *specs = 0; bool done = false; while (!done) { switch(session->token_stream->lookAhead()) { - case Token_signals: - case Token_slots: + case Token___qt_signals__: + case Token___qt_slots__: case Token_k_dcop: case Token_k_dcop_signals: case Token_public: @@ -2141,7 +2144,7 @@ bool Parser::parseMemberSpecification(DeclarationAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (session->token_stream->lookAhead() == ';') { @@ -2172,10 +2175,10 @@ rewind(start); - const ListNode *cv = 0; + const ListNode *cv = 0; parseCvQualify(cv); - const ListNode *storageSpec = 0; + const ListNode *storageSpec = 0; parseStorageClassSpecifier(storageSpec); parseCvQualify(cv); @@ -2232,7 +2235,7 @@ bool Parser::parseCtorInitializer(CtorInitializerAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); CHECK(':'); @@ -2252,7 +2255,7 @@ bool Parser::parseElaboratedTypeSpecifier(TypeSpecifierAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); int tk = session->token_stream->lookAhead(); if (tk == Token_class || @@ -2261,7 +2264,7 @@ tk == Token_enum || tk == Token_typename) { - std::size_t type = session->token_stream->cursor(); + uint type = session->token_stream->cursor(); advance(); NameAST *name = 0; @@ -2286,7 +2289,7 @@ bool Parser::parseExceptionSpecification(ExceptionSpecificationAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); CHECK(Token_throw); ADVANCE('(', "("); @@ -2314,10 +2317,10 @@ bool Parser::parseEnumerator(EnumeratorAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); CHECK(Token_identifier); - std::size_t id = start; + uint id = start; EnumeratorAST *ast = CreateNode(session->mempool); ast->id = id; @@ -2347,7 +2350,7 @@ bool Parser::parseInitDeclarator(InitDeclaratorAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); DeclaratorAST *decl = 0; if (!parseDeclarator(decl)) @@ -2377,7 +2380,7 @@ bool Parser::parseBaseClause(BaseClauseAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); CHECK(':'); @@ -2408,7 +2411,7 @@ bool Parser::parseInitializer(InitializerAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); int tk = session->token_stream->lookAhead(); if (tk != '=' && tk != '(') @@ -2462,7 +2465,7 @@ bool Parser::parseMemInitializer(MemInitializerAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); NameAST *initId = 0; if (!parseName(initId, AcceptTemplate)) @@ -2513,7 +2516,7 @@ bool Parser::parseBaseSpecifier(BaseSpecifierAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); BaseSpecifierAST *ast = CreateNode(session->mempool); @@ -2564,6 +2567,12 @@ if (list) advance(); // skip ',' separator between clauses + if (session->token_stream->lookAhead() == '}') { + // see https://bugs.kde.org/show_bug.cgi?id=233328 + // init lists may have a trailing comma + break; + } + InitializerClauseAST *init_clause = 0; if (!parseInitializerClause(init_clause)) { @@ -2579,7 +2588,7 @@ bool Parser::parseInitializerClause(InitializerClauseAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); InitializerClauseAST *ast = 0; @@ -2621,9 +2630,9 @@ #warning "implemente me (AST)" #endif - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); - std::size_t global_scope = 0; + uint global_scope = 0; if (session->token_stream->lookAhead() == Token_scope) { global_scope = session->token_stream->cursor(); @@ -2660,10 +2669,10 @@ bool Parser::parseUnqualifiedName(UnqualifiedNameAST *&node, bool parseTemplateId) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); - std::size_t tilde = 0; - std::size_t id = 0; + uint tilde = 0; + uint id = 0; bool ellipsis = false; OperatorFunctionIdAST *operator_id = 0; @@ -2704,7 +2713,7 @@ if (parseTemplateId && !tilde) { - std::size_t index = session->token_stream->cursor(); + uint index = session->token_stream->cursor(); if (session->token_stream->lookAhead() == '<' && !(tokenMarkers(index) & IsNoTemplateArgumentList)) { @@ -2734,7 +2743,7 @@ bool Parser::parseStringLiteral(StringLiteralAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (session->token_stream->lookAhead() != Token_string_literal) return false; @@ -2755,7 +2764,7 @@ bool Parser::parseExpressionStatement(StatementAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); ExpressionAST *expr = 0; parseCommaExpression(expr); @@ -2772,9 +2781,9 @@ bool Parser::parseJumpStatement(StatementAST *&node) { - std::size_t op = session->token_stream->cursor(); - std::size_t kind = session->token_stream->lookAhead(); - std::size_t identifier = 0; + uint op = session->token_stream->cursor(); + uint kind = session->token_stream->lookAhead(); + uint identifier = 0; if (kind != Token_break && kind != Token_continue && kind != Token_goto) return false; @@ -2798,7 +2807,7 @@ bool Parser::parseStatement(StatementAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); switch(session->token_stream->lookAhead()) { @@ -2864,7 +2873,7 @@ // for this statement bool hold = holdErrors(true); - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); ///@todo solve -1 thing StatementAST *decl_ast = 0; @@ -2878,7 +2887,7 @@ else m_pendingErrors.clear(); - std::size_t end = session->token_stream->cursor(); + uint end = session->token_stream->cursor(); rewind(start); StatementAST *expr_ast = 0; @@ -2922,7 +2931,7 @@ bool Parser::parseCondition(ConditionAST *&node, bool initRequired) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); ConditionAST *ast = CreateNode(session->mempool); TypeSpecifierAST *spec = 0; @@ -2931,7 +2940,7 @@ { ast->type_specifier = spec; - std::size_t declarator_start = session->token_stream->cursor(); + uint declarator_start = session->token_stream->cursor(); DeclaratorAST *decl = 0; if (!parseDeclarator(decl)) @@ -2976,7 +2985,7 @@ bool Parser::parseWhileStatement(StatementAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); ADVANCE(Token_while, "while"); ADVANCE('(' , "("); @@ -3008,7 +3017,7 @@ bool Parser::parseDoStatement(StatementAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); ADVANCE(Token_do, "do"); @@ -3044,7 +3053,7 @@ bool Parser::parseForStatement(StatementAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); ADVANCE(Token_for, "for"); ADVANCE('(', "("); @@ -3090,7 +3099,7 @@ bool Parser::parseCompoundStatement(StatementAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); CHECK('{'); @@ -3100,7 +3109,7 @@ if (session->token_stream->lookAhead() == '}') break; - std::size_t startStmt = session->token_stream->cursor(); + uint startStmt = session->token_stream->cursor(); StatementAST *stmt = 0; if (!parseStatement(stmt)) @@ -3128,7 +3137,7 @@ bool Parser::parseIfStatement(StatementAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); ADVANCE(Token_if, "if"); @@ -3173,7 +3182,7 @@ bool Parser::parseSwitchStatement(StatementAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); ADVANCE(Token_switch, "switch"); ADVANCE('(' , "("); @@ -3210,7 +3219,7 @@ case Token_identifier: case Token_default: { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (session->token_stream->lookAhead(1) == ':') { advance(); @@ -3232,7 +3241,7 @@ case Token_case: { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); advance(); ExpressionAST *expr = 0; @@ -3287,12 +3296,12 @@ Comment mcomment = comment(); clearComment(); - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); - const ListNode *cv = 0; + const ListNode *cv = 0; parseCvQualify(cv); - const ListNode *storageSpec = 0; + const ListNode *storageSpec = 0; parseStorageClassSpecifier(storageSpec); parseCvQualify(cv); @@ -3332,14 +3341,14 @@ bool Parser::parseNamespaceAliasDefinition(DeclarationAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); CHECK(Token_namespace); NamespaceAliasDefinitionAST *ast = CreateNode(session->mempool); - size_t pos = session->token_stream->cursor(); + uint pos = session->token_stream->cursor(); ADVANCE(Token_identifier, "identifier"); ast->namespace_name = pos; @@ -3360,7 +3369,7 @@ bool Parser::parseDeclarationStatement(StatementAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); DeclarationAST *decl = 0; if (!parseBlockDeclaration(decl)) @@ -3377,20 +3386,20 @@ bool Parser::parseDeclarationInternal(DeclarationAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); // that is for the case '__declspec(dllexport) int ...' or // '__declspec(dllexport) inline int ...', etc. WinDeclSpecAST *winDeclSpec = 0; parseWinDeclSpec(winDeclSpec); - const ListNode *funSpec = 0; + const ListNode *funSpec = 0; bool hasFunSpec = parseFunctionSpecifier(funSpec); - const ListNode *cv = 0; + const ListNode *cv = 0; parseCvQualify(cv); - const ListNode *storageSpec = 0; + const ListNode *storageSpec = 0; bool hasStorageSpec = parseStorageClassSpecifier(storageSpec); if (hasStorageSpec && !hasFunSpec) @@ -3627,7 +3636,7 @@ bool Parser::parseTryBlockStatement(StatementAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); CHECK(Token_try); @@ -3649,7 +3658,7 @@ while (session->token_stream->lookAhead() == Token_catch) { - std::size_t catchStart = session->token_stream->cursor(); + uint catchStart = session->token_stream->cursor(); advance(); ADVANCE('(', "("); @@ -3689,7 +3698,7 @@ bool Parser::parsePrimaryExpression(ExpressionAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); PrimaryExpressionAST *ast = 0; @@ -3761,7 +3770,7 @@ */ bool Parser::parsePostfixExpressionInternal(ExpressionAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); switch (session->token_stream->lookAhead()) { @@ -3800,15 +3809,11 @@ case '.': case Token_arrow: { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); -// std::size_t templ = 0; -// if (session->token_stream->lookAhead() == Token_template) -// { -// templ = session->token_stream->cursor(); -// advance(); -// } + if (session->token_stream->lookAhead() == Token_template) + advance(); NameAST *name = 0; if (!parseName(name, EventuallyAcceptTemplate)) @@ -3826,7 +3831,7 @@ case Token_incr: case Token_decr: { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); IncrDecrExpressionAST *ast = CreateNode(session->mempool); @@ -3849,7 +3854,7 @@ */ bool Parser::parsePostfixExpression(ExpressionAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); switch (session->token_stream->lookAhead()) { @@ -3858,7 +3863,7 @@ case Token_reinterpret_cast: case Token_const_cast: { - std::size_t castOp = session->token_stream->cursor(); + uint castOp = session->token_stream->cursor(); advance(); CHECK('<'); @@ -3889,7 +3894,7 @@ case Token_typename: { - std::size_t token = session->token_stream->cursor(); + uint token = session->token_stream->cursor(); advance(); NameAST* name = 0; @@ -3930,7 +3935,7 @@ break; } - std::size_t saved_pos = session->token_stream->cursor(); + uint saved_pos = session->token_stream->cursor(); TypeSpecifierAST *typeSpec = 0; ExpressionAST *expr = 0; @@ -4005,7 +4010,7 @@ bool Parser::parseUnaryExpression(ExpressionAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); switch(session->token_stream->lookAhead()) { @@ -4019,7 +4024,7 @@ case Token_not: case '~': { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); ExpressionAST *expr = 0; @@ -4037,13 +4042,13 @@ case Token_sizeof: { - std::size_t sizeof_token = session->token_stream->cursor(); + uint sizeof_token = session->token_stream->cursor(); advance(); SizeofExpressionAST *ast = CreateNode(session->mempool); ast->sizeof_token = sizeof_token; - std::size_t index = session->token_stream->cursor(); + uint index = session->token_stream->cursor(); if (session->token_stream->lookAhead() == '(') { advance(); @@ -4087,7 +4092,7 @@ bool Parser::parseNewExpression(ExpressionAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); NewExpressionAST *ast = CreateNode(session->mempool); @@ -4098,7 +4103,7 @@ advance(); } - size_t pos = session->token_stream->cursor(); + uint pos = session->token_stream->cursor(); CHECK(Token_new); ast->new_token = pos; @@ -4130,7 +4135,7 @@ bool Parser::parseNewTypeId(NewTypeIdAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); TypeSpecifierAST *typeSpec = 0; if (!parseTypeSpecifier(typeSpec)) @@ -4149,7 +4154,7 @@ bool Parser::parseNewDeclarator(NewDeclaratorAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); NewDeclaratorAST *ast = CreateNode(session->mempool); PtrOperatorAST *ptrOp = 0; @@ -4176,7 +4181,7 @@ bool Parser::parseNewInitializer(NewInitializerAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); CHECK('('); @@ -4194,7 +4199,7 @@ bool Parser::parseDeleteExpression(ExpressionAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); DeleteExpressionAST *ast = CreateNode(session->mempool); @@ -4205,7 +4210,7 @@ advance(); } - size_t pos = session->token_stream->cursor(); + uint pos = session->token_stream->cursor(); CHECK(Token_delete); ast->delete_token = pos; @@ -4213,7 +4218,7 @@ { ast->lbracket_token = session->token_stream->cursor(); advance(); - size_t pos = session->token_stream->cursor(); + uint pos = session->token_stream->cursor(); CHECK(']'); ast->rbracket_token = pos; } @@ -4229,22 +4234,27 @@ bool Parser::parseCastExpression(ExpressionAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (session->token_stream->lookAhead() == '(') { advance(); - CastExpressionAST *ast = CreateNode(session->mempool); - if (parseTypeId(ast->type_id)) + TypeIdAST *typeIdAst = 0; + if (parseTypeId(typeIdAst)) { if (session->token_stream->lookAhead() == ')') { advance(); - if (parseCastExpression(ast->expression)) + ExpressionAST *castExpressionAst = 0; + if (parseCastExpression(castExpressionAst)) { + CastExpressionAST *ast = CreateNode(session->mempool); + ast->type_id = typeIdAst; + ast->expression = castExpressionAst; + UPDATE_POS(ast, start, _M_last_valid_token+1); node = ast; @@ -4260,14 +4270,14 @@ bool Parser::parsePmExpression(ExpressionAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (!parseCastExpression(node) || !node) // ### fixme return false; while (session->token_stream->lookAhead() == Token_ptrmem) { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); ExpressionAST *rightExpr = 0; @@ -4288,7 +4298,7 @@ bool Parser::parseMultiplicativeExpression(ExpressionAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (!parsePmExpression(node)) return false; @@ -4297,7 +4307,7 @@ || session->token_stream->lookAhead() == '/' || session->token_stream->lookAhead() == '%') { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); ExpressionAST *rightExpr = 0; @@ -4319,14 +4329,14 @@ bool Parser::parseAdditiveExpression(ExpressionAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (!parseMultiplicativeExpression(node)) return false; while (session->token_stream->lookAhead() == '+' || session->token_stream->lookAhead() == '-') { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); ExpressionAST *rightExpr = 0; @@ -4347,14 +4357,14 @@ bool Parser::parseShiftExpression(ExpressionAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (!parseAdditiveExpression(node)) return false; while (session->token_stream->lookAhead() == Token_shift) { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); ExpressionAST *rightExpr = 0; @@ -4375,7 +4385,7 @@ bool Parser::parseRelationalExpression(ExpressionAST *&node, bool templArgs) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (!parseShiftExpression(node)) return false; @@ -4385,7 +4395,7 @@ || session->token_stream->lookAhead() == Token_leq || session->token_stream->lookAhead() == Token_geq) { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); ExpressionAST *rightExpr = 0; @@ -4406,7 +4416,7 @@ bool Parser::parseEqualityExpression(ExpressionAST *&node, bool templArgs) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (!parseRelationalExpression(node, templArgs)) return false; @@ -4414,7 +4424,7 @@ while (session->token_stream->lookAhead() == Token_eq || session->token_stream->lookAhead() == Token_not_eq) { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); ExpressionAST *rightExpr = 0; @@ -4435,14 +4445,14 @@ bool Parser::parseAndExpression(ExpressionAST *&node, bool templArgs) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (!parseEqualityExpression(node, templArgs)) return false; while (session->token_stream->lookAhead() == '&') { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); ExpressionAST *rightExpr = 0; @@ -4463,14 +4473,14 @@ bool Parser::parseExclusiveOrExpression(ExpressionAST *&node, bool templArgs) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (!parseAndExpression(node, templArgs)) return false; while (session->token_stream->lookAhead() == '^') { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); ExpressionAST *rightExpr = 0; @@ -4491,14 +4501,14 @@ bool Parser::parseInclusiveOrExpression(ExpressionAST *&node, bool templArgs) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (!parseExclusiveOrExpression(node, templArgs)) return false; while (session->token_stream->lookAhead() == '|') { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); ExpressionAST *rightExpr = 0; @@ -4519,14 +4529,14 @@ bool Parser::parseLogicalAndExpression(ExpressionAST *&node, bool templArgs) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (!parseInclusiveOrExpression(node, templArgs)) return false; while (session->token_stream->lookAhead() == Token_and) { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); ExpressionAST *rightExpr = 0; @@ -4547,14 +4557,14 @@ bool Parser::parseLogicalOrExpression(ExpressionAST *&node, bool templArgs) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (!parseLogicalAndExpression(node, templArgs)) return false; while (session->token_stream->lookAhead() == Token_or) { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); ExpressionAST *rightExpr = 0; @@ -4575,7 +4585,7 @@ bool Parser::parseConditionalExpression(ExpressionAST *&node, bool templArgs) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (!parseLogicalOrExpression(node, templArgs)) return false; @@ -4610,7 +4620,7 @@ bool Parser::parseAssignmentExpression(ExpressionAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if(parseSignalSlotExpression(node)) return true; @@ -4624,7 +4634,7 @@ while (session->token_stream->lookAhead() == Token_assign || session->token_stream->lookAhead() == '=') { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); ExpressionAST *rightExpr = 0; @@ -4654,9 +4664,15 @@ } bool Parser::parseSignalSlotExpression(ExpressionAST *&node) { - if(session->token_stream->lookAhead() == Token___qt_sig_slot__) { - std::size_t start = session->token_stream->cursor(); - CHECK(Token___qt_sig_slot__); + if(session->token_stream->lookAhead() == Token___qt_signal__ || + session->token_stream->lookAhead() == Token___qt_slot__) { + uint start = session->token_stream->cursor(); + + if(session->token_stream->lookAhead() == Token___qt_signal__) + CHECK(Token___qt_signal__); + else + CHECK(Token___qt_slot__); + CHECK('('); SignalSlotExpressionAST *ast = CreateNode(session->mempool); @@ -4684,14 +4700,14 @@ bool Parser::parseCommaExpression(ExpressionAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); if (!parseAssignmentExpression(node)) return false; while (session->token_stream->lookAhead() == ',') { - std::size_t op = session->token_stream->cursor(); + uint op = session->token_stream->cursor(); advance(); ExpressionAST *rightExpr = 0; @@ -4712,9 +4728,9 @@ bool Parser::parseThrowExpression(ExpressionAST *&node) { - std::size_t start = session->token_stream->cursor(); + uint start = session->token_stream->cursor(); - size_t pos = session->token_stream->cursor(); + uint pos = session->token_stream->cursor(); CHECK(Token_throw); diff -Nru kdevelop-3.9.98/languages/cpp/parser/parser.h kdevelop-4.0.1/languages/cpp/parser/parser.h --- kdevelop-3.9.98/languages/cpp/parser/parser.h 2009-12-22 06:21:44.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/parser/parser.h 2010-07-17 20:08:19.000000000 +0100 @@ -28,13 +28,19 @@ #include #include #include + #ifdef Q_CC_MSVC #include using namespace stdext; -#else -// use unordered_map, hash_map is marked as deprecated on g++/4.4 + +#elif defined GXX_LT_4_3 #include using namespace __gnu_cxx; + +#else // CXX-0 +#include +template +class hash_map : public std::unordered_map { }; #endif class TokenStream; @@ -117,7 +123,7 @@ bool parseConditionalExpression(ExpressionAST *&node, bool templArgs = false); bool parseConstantExpression(ExpressionAST *&node); bool parseCtorInitializer(CtorInitializerAST *&node); - bool parseCvQualify(const ListNode *&node); + bool parseCvQualify(const ListNode *&node); bool parseDeclaration(DeclarationAST *&node); bool parseDeclarationInternal(DeclarationAST *&node); bool parseDeclarationStatement(StatementAST *&node); @@ -138,7 +144,7 @@ bool parseForInitStatement(StatementAST *&node); bool parseForStatement(StatementAST *&node); bool parseFunctionBody(StatementAST *&node); - bool parseFunctionSpecifier(const ListNode *&node); + bool parseFunctionSpecifier(const ListNode *&node); bool parseIfStatement(StatementAST *&node); bool parseInclusiveOrExpression(ExpressionAST *&node, bool templArgs = false); @@ -190,7 +196,7 @@ bool parseSimpleTypeSpecifier(TypeSpecifierAST *&node, bool onlyIntegral = false); bool parseStatement(StatementAST *&node); - bool parseStorageClassSpecifier(const ListNode *&node); + bool parseStorageClassSpecifier(const ListNode *&node); bool parseStringLiteral(StringLiteralAST *&node); bool parseSwitchStatement(StatementAST *&node); bool parseTemplateArgument(TemplateArgumentAST *&node); @@ -226,7 +232,7 @@ void moveComments( CommentAST* ast ); void advance(bool skipComment = true); - void rewind(size_t position); + void rewind(uint position); // private: TokenStream* token_stream; @@ -240,11 +246,11 @@ IsNoTemplateArgumentList = 1 }; - TokenMarkers tokenMarkers(size_t tokenNumber) const; - void addTokenMarkers(size_t tokenNumber, TokenMarkers markers); + TokenMarkers tokenMarkers(uint tokenNumber) const; + void addTokenMarkers(uint tokenNumber, TokenMarkers markers); - int lineFromTokenNumber( size_t tokenNumber ) const; + int lineFromTokenNumber( uint tokenNumber ) const; void clear(); @@ -261,20 +267,20 @@ Comment m_currentComment; CommentStore m_commentStore; - hash_map m_tokenMarkers; + hash_map m_tokenMarkers; int _M_problem_count; int _M_max_problem_count; ParseSession* session; bool _M_hold_errors; - size_t _M_last_valid_token; //Last encountered token that was not a comment - size_t _M_last_parsed_comment; + uint _M_last_valid_token; //Last encountered token that was not a comment + uint _M_last_parsed_comment; bool _M_hadMismatchingCompoundTokens; bool m_primaryExpressionWithTemplateParamsNeedsFunctionCall; // keeps track of tokens where a syntax error has been found // so that the same error is not reported twice for a token - QSet m_syntaxErrorTokens; + QSet m_syntaxErrorTokens; // when _M_hold_errors is true, reported errors are held in m_pendingErrors // rather than being reported to the Control immediately. @@ -283,7 +289,7 @@ struct PendingError { QString message; - std::size_t cursor; + uint cursor; }; QQueue m_pendingErrors; diff -Nru kdevelop-3.9.98/languages/cpp/parser/parsesession.cpp kdevelop-4.0.1/languages/cpp/parser/parsesession.cpp --- kdevelop-3.9.98/languages/cpp/parser/parsesession.cpp 2009-11-15 16:22:35.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/parser/parsesession.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -84,6 +84,17 @@ m_UseToAst[use] = node; } +void ParseSession::setASTNodeParents() +{ + ParentVisitor visitor(this); + visitor.visit(m_topAstNode); +} + +void ParseSession::mapAstParent(AST* node, AST* parent) +{ + m_AstToParent.insert(node, parent); +} + AST * ParseSession::astNodeFromDeclaration(KDevelop::DeclarationPointer declaration) { //declaration was not mapped @@ -103,6 +114,11 @@ return m_UseToAst.value(use); } +AST* ParseSession::parentAstNode(AST* node) +{ + return m_AstToParent.value(node, 0); +} + KDevelop::DeclarationPointer ParseSession::declarationFromAstNode(AST * node) { //declaration was not mapped @@ -164,12 +180,6 @@ m_locationTable = new rpp::LocationTable(m_contents); } -void ParseSession::setASTNodeParents() -{ - ParentVisitor visitor; - visitor.visit(m_topAstNode); -} - void ParseSession::setUrl(const KDevelop::IndexedString& url) { m_url = url; diff -Nru kdevelop-3.9.98/languages/cpp/parser/parsesession.h kdevelop-4.0.1/languages/cpp/parser/parsesession.h --- kdevelop-3.9.98/languages/cpp/parser/parsesession.h 2009-11-15 16:22:35.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/parser/parsesession.h 2010-07-17 20:08:19.000000000 +0100 @@ -71,6 +71,12 @@ void mapAstUse(AST *node, const SimpleUse& use); + ///Create a mapping between an AST node and its parent. + void mapAstParent(AST *node, AST *parent); + + /// Visits the tree and sets the appropriate nodes as parent on each node of the tree. + void setASTNodeParents(); + /** * \brief Request an AST node from a DeclarationPointer * \return The Associated AST if available, NULL otherwise @@ -82,6 +88,12 @@ AST * astNodeFromUse(const SimpleUse &use) const; /** + * \brief Access the parent node for a given AST. + * \return Parent AST node or NULL for the root node. + */ + AST * parentAstNode(AST* node); + + /** * \brief Request a Declaration from an AST node * \return The Associated Declaration if available, empty DeclarationPointer otherwise */ @@ -103,9 +115,6 @@ /// Unweildy name, but we want to be clear here, if there is already a location table, this would be the wrong setup function to call void setContentsAndGenerateLocationTable(const PreprocessedContents& contents); - /// Visits the tree and sets the appropriate nodes as parent on each node of the tree. - void setASTNodeParents(); - void setUrl(const KDevelop::IndexedString& url); const KDevelop::IndexedString& url() const; @@ -129,6 +138,8 @@ QMap m_AstToUse; QMap m_UseToAst; + + QMap m_AstToParent; }; #endif diff -Nru kdevelop-3.9.98/languages/cpp/parser/rpp/pp-location.cpp kdevelop-4.0.1/languages/cpp/parser/rpp/pp-location.cpp --- kdevelop-3.9.98/languages/cpp/parser/rpp/pp-location.cpp 2009-11-26 18:50:58.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/parser/rpp/pp-location.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -27,12 +27,19 @@ using namespace rpp; +bool LocationTable::AnchorInTable::operator==(const LocationTable::AnchorInTable& other) const +{ + return other.nextPosition == nextPosition && other.position == position && other.anchor == anchor && other.nextAnchor == nextAnchor; +} + LocationTable::LocationTable() + : m_positionAtLastOffset(-1) { anchor(0, Anchor(0,0), 0); } LocationTable::LocationTable(const PreprocessedContents& contents) + : m_positionAtLastOffset(-1) { anchor(0, Anchor(0,0), 0); @@ -48,9 +55,28 @@ { AnchorInTable ret = anchorForOffset(offset, collapseIfMacroExpansion); - if(!ret.anchor.collapsed) + // NOTE: when m_positionAtLastOffset == -1 we have not used the cache yet + // and all the members of m_lastAnchorInTable will be uninitialized. + if (m_positionAtLastOffset != -1 && m_lastAnchorInTable == ret && offset >= m_positionAtLastOffset) { + // use cached position + ret.anchor.column = m_positionAtColumnCache; + + for(std::size_t a = m_positionAtLastOffset; a < offset; ++a) + ret.anchor.column += KDevelop::IndexedString::lengthFromIndex(contents[a]); + + m_positionAtColumnCache = ret.anchor.column; + m_positionAtLastOffset = offset; + } else if(!ret.anchor.collapsed) { + // save anchor _before_ changing it's members + m_lastAnchorInTable = ret; + for(std::size_t a = ret.position; a < offset; ++a) - ret.anchor.column += KDevelop::IndexedString::fromIndex(contents[a]).length(); + ret.anchor.column += KDevelop::IndexedString::lengthFromIndex(contents[a]); + + m_positionAtColumnCache = ret.anchor.column; + m_positionAtLastOffset = offset; + } + uint room = 0; if(ret.nextPosition) @@ -64,10 +90,10 @@ { Q_ASSERT(!offset || !anchor.column || contents); - if (offset && anchor.column) { + if (offset && anchor.column && !anchor.collapsed) { // Check to see if it's different to what we already know QPair known = positionAt(offset, *contents); - if (known.first == anchor && !anchor.collapsed && known.first.macroExpansion == anchor.macroExpansion) + if (known.first == anchor && known.first.macroExpansion == anchor.macroExpansion) return; } m_currentOffset = OffsetTable::ConstIterator(m_offsetTable.insert(offset, anchor)); diff -Nru kdevelop-3.9.98/languages/cpp/parser/rpp/pp-location.h kdevelop-4.0.1/languages/cpp/parser/rpp/pp-location.h --- kdevelop-3.9.98/languages/cpp/parser/rpp/pp-location.h 2009-11-26 18:50:58.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/parser/rpp/pp-location.h 2010-07-17 20:08:19.000000000 +0100 @@ -58,6 +58,7 @@ Anchor anchor; //This anchor uint nextPosition;//Position of the next following anchor, or zero Anchor nextAnchor;//The next following anchor + bool operator==(const AnchorInTable& other) const; }; /** @@ -81,6 +82,10 @@ typedef QMap OffsetTable; OffsetTable m_offsetTable; mutable OffsetTable::ConstIterator m_currentOffset; + //cache for positionAt + mutable AnchorInTable m_lastAnchorInTable; + mutable int m_positionAtColumnCache; + mutable std::size_t m_positionAtLastOffset; }; } diff -Nru kdevelop-3.9.98/languages/cpp/parser/rpp/pp-macro.cpp kdevelop-4.0.1/languages/cpp/parser/rpp/pp-macro.cpp --- kdevelop-3.9.98/languages/cpp/parser/rpp/pp-macro.cpp 2009-05-06 19:39:22.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/parser/rpp/pp-macro.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -48,6 +48,7 @@ function_like == rhs.function_like && variadics == rhs.variadics && fixed == rhs.fixed && + defineOnOverride == rhs.defineOnOverride && listsEqual(rhs); } @@ -62,6 +63,7 @@ , function_like(false) , variadics(false) , fixed(false) + , defineOnOverride(false) , m_valueHashValid(false) , m_valueHash(0) { @@ -77,6 +79,7 @@ function_like(rhs.function_like), variadics(rhs.variadics), fixed(rhs.fixed), + defineOnOverride(rhs.defineOnOverride), m_valueHashValid(true), m_valueHash(rhs.valueHash()) { @@ -91,6 +94,7 @@ , function_like(false) , variadics(false) , fixed(false) + , defineOnOverride(false) , m_valueHashValid(false) , m_valueHash(0) { @@ -123,6 +127,7 @@ } void pp_macro::setDefinitionText(QByteArray definition) { + definitionList().clear(); foreach(uint i, convertFromByteArray(definition)) definitionList().append(KDevelop::IndexedString::fromIndex(i)); } @@ -133,7 +138,7 @@ m_valueHash = 27 * ( 137 + (defined ? 1 : 0 ) ); - m_valueHash += 1741 * file.hash() + 238 * sourceLine + (hidden ? 19 : 0) + (function_like ? 811241 : 0) + (variadics ? 129119 : 0) + (fixed ? 1807 : 0); + m_valueHash += 1741 * file.hash() + 238 * sourceLine + (hidden ? 19 : 0) + (function_like ? 811241 : 0) + (variadics ? 129119 : 0) + (fixed ? 1807 : 0) + (defineOnOverride ? 31621 : 0); FOREACH_FUNCTION(const IndexedString& definitionComponent, definition) m_valueHash = definitionComponent.hash() + 17 * m_valueHash; diff -Nru kdevelop-3.9.98/languages/cpp/parser/rpp/pp-macro-expander.cpp kdevelop-4.0.1/languages/cpp/parser/rpp/pp-macro-expander.cpp --- kdevelop-3.9.98/languages/cpp/parser/rpp/pp-macro-expander.cpp 2009-12-09 22:36:51.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/parser/rpp/pp-macro-expander.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -353,6 +353,10 @@ int start = input.offset(); skip_blanks(input, devnull()); + if (input.atEnd()) { + // this might happen in e.g. /usr/include/bits/mathcalls.h + continue; + } //Omit paste tokens behind empty used actuals, else we will merge with the previous text if(input == '#' && (++input) == '#') { ++input; @@ -378,9 +382,9 @@ else if (name == fileIndex) output.appendString(inputPosition, convertFromByteArray(QString("\"%1\"").arg(m_engine->currentFileNameString()).toUtf8())); else if (name == dateIndex) - output.appendString(inputPosition, convertFromByteArray(QDate::currentDate().toString("MMM dd yyyy").toUtf8())); + output.appendString(inputPosition, convertFromByteArray(QDate::currentDate().toString("\"MMM dd yyyy\"").toUtf8())); else if (name == timeIndex) - output.appendString(inputPosition, convertFromByteArray(QTime::currentTime().toString("hh:mm:ss").toUtf8())); + output.appendString(inputPosition, convertFromByteArray(QTime::currentTime().toString("\"hh:mm:ss\"").toUtf8())); else output.appendString(inputPosition, name); continue; diff -Nru kdevelop-3.9.98/languages/cpp/parser/rpp/pp-macro.h kdevelop-4.0.1/languages/cpp/parser/rpp/pp-macro.h --- kdevelop-3.9.98/languages/cpp/parser/rpp/pp-macro.h 2009-11-22 23:50:09.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/parser/rpp/pp-macro.h 2010-07-17 20:08:19.000000000 +0100 @@ -64,10 +64,14 @@ int sourceLine; //line bool defined: 1; // !isUndefMacro - bool hidden: 1; + bool hidden: 1; //A temporary flag, don't manipulate it from outside bool function_like: 1; // hasArguments bool variadics: 1; bool fixed : 1; //If this is set, the macro can not be overridden or undefined. + //If defineOnOverride is set, the macro is changed to "defined = true", if it is overridden. + //If the macro also has a valid "file" entry, the macro will only be defined if the file-name of the overriding + //macro ends with the string given in 'file'. + bool defineOnOverride : 1; mutable bool m_valueHashValid : 1; //The valueHash is not necessarily valid diff -Nru kdevelop-3.9.98/languages/cpp/parser/rpp/pp-stream.cpp kdevelop-4.0.1/languages/cpp/parser/rpp/pp-stream.cpp --- kdevelop-3.9.98/languages/cpp/parser/rpp/pp-stream.cpp 2009-04-30 01:36:25.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/parser/rpp/pp-stream.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -132,7 +132,7 @@ if(m_inputPositionLocked) --m_inputLineStartedAt; else - m_inputLineStartedAt -= (1-KDevelop::IndexedString::fromIndex(*c).length()); + m_inputLineStartedAt -= (1-KDevelop::IndexedString::lengthFromIndex(*c)); return *this; @@ -174,10 +174,10 @@ }else{ if(offset < m_pos) { for(int a = offset; a < m_pos; ++a) - m_inputLineStartedAt -= (1-KDevelop::IndexedString::fromIndex(m_string->at(a)).length()); + m_inputLineStartedAt -= (1-KDevelop::IndexedString::lengthFromIndex(m_string->at(a))); }else{ for(int a = m_pos; a < offset; ++a) - m_inputLineStartedAt += (1-KDevelop::IndexedString::fromIndex(m_string->at(a)).length()); + m_inputLineStartedAt += (1-KDevelop::IndexedString::lengthFromIndex(m_string->at(a))); } } diff -Nru kdevelop-3.9.98/languages/cpp/parser/rpp/pp-stream.h kdevelop-4.0.1/languages/cpp/parser/rpp/pp-stream.h --- kdevelop-3.9.98/languages/cpp/parser/rpp/pp-stream.h 2009-04-30 01:36:25.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/parser/rpp/pp-stream.h 2010-07-17 20:08:19.000000000 +0100 @@ -122,7 +122,7 @@ m_inputLineStartedAt = m_pos + 1; }else if(!isCharacter(*c)) { //We have to do some special hacking here to keep the column-number correct. - m_inputLineStartedAt += 1-KDevelop::IndexedString::fromIndex(*c).length(); + m_inputLineStartedAt += 1-KDevelop::IndexedString::lengthFromIndex(*c); } ++c; diff -Nru kdevelop-3.9.98/languages/cpp/parser/tests/test_parser.cpp kdevelop-4.0.1/languages/cpp/parser/tests/test_parser.cpp --- kdevelop-3.9.98/languages/cpp/parser/tests/test_parser.cpp 2009-12-16 09:24:19.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/parser/tests/test_parser.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -407,6 +407,55 @@ dumper.dump(ast, lastSession->token_stream); } + void testInitListTrailingComma() + { + //see bug https://bugs.kde.org/show_bug.cgi?id=233328 + + QByteArray code("const int foo [] = {1,};"); + pool memPool; + TranslationUnitAST* ast = parse(code, &memPool); + dumper.dump(ast, lastSession->token_stream); + + QCOMPARE(ast->declarations->count(), 1); + SimpleDeclarationAST* simpleDecl = reinterpret_cast(ast->declarations->at(0)->element); + QVERIFY(simpleDecl); + + QCOMPARE(simpleDecl->init_declarators->count(), 1); + + } + + void testAsmVolatile() + { + //see bug https://bugs.kde.org/show_bug.cgi?id=238772 + QByteArray code("__asm__ __volatile__ (\"cld; rep; \" \"stosq\" : \"=c\"" + " (__d0), \"=D\" (__d1) : \"a\" (0), \"0\" (sizeof (fd_set) / sizeof (__fd_mask))," + " \"1\"" + " (&((&rfds)->__fds_bits)[0]) : \"memory\");"); + pool memPool; + TranslationUnitAST* ast = parse(code, &memPool); + dumper.dump(ast, lastSession->token_stream); + + QCOMPARE(ast->declarations->count(), 1); + AsmDefinitionAST* asmDecl = reinterpret_cast(ast->declarations->at(0)->element); + QVERIFY(asmDecl); + + QCOMPARE(asmDecl->cv->count(), 1); + QVERIFY(lastSession->token_stream->kind(asmDecl->cv->at(0)->element) == Token_volatile); + } + + void testIncrIdentifier() + { + //see bug https://bugs.kde.org/show_bug.cgi?id=238772 + QByteArray code("void incr();"); + pool memPool; + TranslationUnitAST* ast = parse(code, &memPool); + dumper.dump(ast, lastSession->token_stream); + + QCOMPARE(ast->declarations->count(), 1); + FunctionDefinitionAST* funcDecl = reinterpret_cast(ast->declarations->at(0)->element); + QVERIFY(funcDecl); + } + /*void testParseFile() { QFile file(TEST_FILE); diff -Nru kdevelop-3.9.98/languages/cpp/parser/tokens.cpp kdevelop-4.0.1/languages/cpp/parser/tokens.cpp --- kdevelop-3.9.98/languages/cpp/parser/tokens.cpp 2009-12-22 07:16:50.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/parser/tokens.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -96,10 +96,10 @@ "scope", "shift", "short", - "signals", + "__qt_signals__", "signed", "sizeof", - "slots", + "__qt_slots__", "static", "static_cast", "string_literal", @@ -123,7 +123,9 @@ "while", "whitespaces", "xor", - "xor_eq" + "xor_eq", + "__qt_signal__", + "__qt_slot__" }; static char const * const _S_token_texts[] = { @@ -201,10 +203,10 @@ "::", "shift", "short", - "signals", + "__qt_signals__", "signed", "sizeof", - "slots", + "__qt_slots__", "static", "static_cast", "string_literal", @@ -228,7 +230,9 @@ "while", "whitespaces", "^", - "^=" + "^=", + "__qt_signal__", + "__qt_slot__" }; static char _S_printable[][2] = { diff -Nru kdevelop-3.9.98/languages/cpp/parser/tokens.h kdevelop-4.0.1/languages/cpp/parser/tokens.h --- kdevelop-3.9.98/languages/cpp/parser/tokens.h 2009-08-17 20:52:24.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/parser/tokens.h 2010-07-17 20:08:19.000000000 +0100 @@ -102,10 +102,10 @@ Token_scope, Token_shift, Token_short, - Token_signals, + Token___qt_signals__, Token_signed, Token_sizeof, - Token_slots, + Token___qt_slots__, Token_static, Token_static_cast, Token_string_literal, @@ -130,7 +130,8 @@ Token_whitespaces, Token_xor, Token_xor_eq, - Token___qt_sig_slot__, + Token___qt_signal__, + Token___qt_slot__, TOKEN_KIND_COUNT }; diff -Nru kdevelop-3.9.98/languages/cpp/parser/type_compiler.cpp kdevelop-4.0.1/languages/cpp/parser/type_compiler.cpp --- kdevelop-3.9.98/languages/cpp/parser/type_compiler.cpp 2007-10-21 15:34:03.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/parser/type_compiler.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -41,8 +41,8 @@ if (node && node->cv) { - const ListNode *it = node->cv->toFront(); - const ListNode *end = it; + const ListNode *it = node->cv->toFront(); + const ListNode *end = it; do { int kind = m_session->token_stream->kind(it->element); @@ -72,13 +72,13 @@ void TypeCompiler::visitSimpleTypeSpecifier(SimpleTypeSpecifierAST *node) { - if (const ListNode *it = node->integrals) + if (const ListNode *it = node->integrals) { it = it->toFront(); - const ListNode *end = it; + const ListNode *end = it; do { - std::size_t token = it->element; + uint token = it->element; // FIXME _M_type.push(Identifier(token_name(m_session->token_stream->kind(token)))); it = it->next; diff -Nru kdevelop-3.9.98/languages/cpp/preprocessjob.cpp kdevelop-4.0.1/languages/cpp/preprocessjob.cpp --- kdevelop-3.9.98/languages/cpp/preprocessjob.cpp 2010-01-27 23:26:22.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/preprocessjob.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -354,10 +354,16 @@ if(m_updatingEnvironmentFile) content = KDevelop::ReferencedTopDUContext(contentFromProxy(m_updatingEnvironmentFile->topContext())); else - content = KDevelop::DUChain::self()->chainForDocument(u, m_currentEnvironment); + content = KDevelop::DUChain::self()->chainForDocument(u, m_currentEnvironment, false); m_currentEnvironment->disableIdentityOffsetRestriction(); + if(content && content->parsingEnvironmentFile()->isProxyContext()) + { + kWarning() << "Got proxy-context as content-context for file" << content->url().str() << ", not updating"; + content = KDevelop::ReferencedTopDUContext(); + } + if(content) { //We have found a content-context that we can use parentJob()->setUpdatingContentContext(content); diff -Nru kdevelop-3.9.98/languages/cpp/quickopen.cpp kdevelop-4.0.1/languages/cpp/quickopen.cpp --- kdevelop-3.9.98/languages/cpp/quickopen.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/languages/cpp/quickopen.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -38,7 +38,6 @@ #include "codecompletion/model.h" #include "cpplanguagesupport.h" #include -#include #include #include #include "cpputils.h" @@ -165,7 +164,7 @@ if( inclusionPath.isEmpty() || inclusionPath.count() > inclusion.count() ) { inclusionPath.clear(); - FOREACH_ARRAY(KDevelop::ImportTraceItem s, inclusion) + FOREACH_ARRAY(const KDevelop::ImportTraceItem& s, inclusion) inclusionPath << KUrl(s.ctx->url().str()); }*/ } @@ -185,7 +184,7 @@ if( inclusionPath.isEmpty() || inclusionPath.count() > inclusion.count() ) { inclusionPath.clear(); - FOREACH_ARRAY(KDevelop::ImportTraceItem s, inclusion) + FOREACH_ARRAY(const KDevelop::ImportTraceItem& s, inclusion) inclusionPath << KUrl(s.ctx->url().str()); }*/ } diff -Nru kdevelop-3.9.98/languages/cpp/setuphelpers.cpp kdevelop-4.0.1/languages/cpp/setuphelpers.cpp --- kdevelop-3.9.98/languages/cpp/setuphelpers.cpp 2009-12-15 17:00:39.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/setuphelpers.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -194,44 +194,61 @@ insertMacro( macros, m ); } - ///@todo The following macros are only required for Qt, so only set them on projects that use Qt. + /// The following macros are required for qt only. That's why we set them to become active only when their + /// 'real' versions become defined in qobjectdefs.h. A slight problem is that they are 'fixed', so they will block + /// any other macros with the same names. { - //These macros are "fixed" so they cannot be overridden, and so our lexer can process the information rpp::pp_macro m("Q_SLOTS"); - m.setDefinitionText( "slots" ); - m.fixed = true; - insertMacro( macros, m ); - } - { - //These macros are "fixed" so they cannot be overridden, and so our lexer can process the information - rpp::pp_macro m("slots"); + m.setDefinitionText( "__qt_slots__" ); + m.defined = false; + m.defineOnOverride = true; + m.file = IndexedString("/qobjectdefs.h"); // Only define the macro if it is overriden in this file m.fixed = true; + insertMacro( macros, m ); - } - { - //These macros are "fixed" so they cannot be overridden, and so our lexer can process the information - rpp::pp_macro m("Q_SIGNALS"); - m.setDefinitionText( "signals" ); - m.fixed = true; + m.name = IndexedString("Q_PRIVATE_SLOT"); + m.formalsList().append(IndexedString("d")); + m.formalsList().append(IndexedString("sig")); + m.function_like = true; + m.setDefinitionText( "private slots: sig{ d; }; private:" ); + insertMacro( macros, m ); + + m.name = IndexedString("slots"); + m.setDefinitionText("__qt_slots__"); + m.formalsList().clear(); + m.function_like = false; insertMacro( macros, m ); - } - { - //These macros are "fixed" so they cannot be overridden, and so our lexer can process the information - rpp::pp_macro m("signals"); - m.defined = false; - m.fixed = true; + + m.name = IndexedString("Q_SIGNALS"); + m.setDefinitionText( "__qt_signals__" ); + m.formalsList().clear(); + insertMacro( macros, m ); + + m.name = IndexedString("signals"); + m.setDefinitionText("__qt_signals__"); + m.formalsList().clear(); + insertMacro( macros, m ); + + m.name = IndexedString("SIGNAL"); + m.setDefinitionText("__qt_signal__"); + m.formalsList().clear(); + insertMacro( macros, m ); + + m.name = IndexedString("SLOT"); + m.setDefinitionText("__qt_slot__"); + m.formalsList().clear(); insertMacro( macros, m ); } { - rpp::pp_macro m("SIGNAL"); - m.setDefinitionText("__qt_sig_slot__"); - m.defined = true; - m.fixed = true; - insertMacro( macros, m ); - m.name = IndexedString("SLOT"); + // We don't provide a real implementation of offsetof, but at least provide a stub that allows correct use-building for the member. + rpp::pp_macro m("__builtin_offsetof"); + m.function_like = true; + m.formalsList().append(IndexedString("TYPE")); + m.formalsList().append(IndexedString("MEMBER")); + m.setDefinitionText("(size_t)((void)TYPE::MEMBER)"); insertMacro( macros, m ); } diff -Nru kdevelop-3.9.98/languages/cpp/tests/CMakeLists.txt kdevelop-4.0.1/languages/cpp/tests/CMakeLists.txt --- kdevelop-3.9.98/languages/cpp/tests/CMakeLists.txt 2009-11-29 19:00:51.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/tests/CMakeLists.txt 2010-07-17 20:08:19.000000000 +0100 @@ -26,7 +26,6 @@ ../codegen/cppnewclass.cpp ../codegen/progressdialogs.cpp ../codegen/unresolvedincludeassistant.cpp - ../codegen/makeimplementationprivate.cpp ../cpputils.cpp ../codecompletion/worker.cpp ../includepathcomputer.cpp @@ -51,7 +50,6 @@ ../codegen/cppnewclass.cpp ../codegen/progressdialogs.cpp ../codegen/unresolvedincludeassistant.cpp - ../codegen/makeimplementationprivate.cpp ../cpputils.cpp ../codecompletion/worker.cpp ../includepathcomputer.cpp @@ -71,6 +69,7 @@ ${KDEVPLATFORM_PROJECT_LIBRARIES} ${KDE4_THREADWEAVER_LIBRARIES} ${KDEVPLATFORM_LANGUAGE_LIBRARIES} + ${KDEVPLATFORM_TESTS_LIBRARIES} ${KDE4_KDECORE_LIBS} ${KDE4_KTEXTEDITOR_LIBS} ) diff -Nru kdevelop-3.9.98/languages/cpp/tests/test_cppcodecompletion.cpp kdevelop-4.0.1/languages/cpp/tests/test_cppcodecompletion.cpp --- kdevelop-3.9.98/languages/cpp/tests/test_cppcodecompletion.cpp 2010-01-10 20:02:58.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/tests/test_cppcodecompletion.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -45,6 +45,8 @@ #include "expressionvisitor.h" #include "expressionparser.h" #include "codecompletion/context.h" +#include "codecompletion/helpers.h" +#include "codecompletion/item.h" #include "cpppreprocessenvironment.h" #include #include "cppduchain/missingdeclarationproblem.h" @@ -53,6 +55,11 @@ #include #include +#include +#include + +#include +#include using namespace KTextEditor; @@ -79,6 +86,10 @@ void TestCppCodeCompletion::initTestCase() { + KDevelop::AutoTestShell::init(); + TestCore* core = new KDevelop::TestCore(); + core->initialize(KDevelop::Core::NoUi); + DUChain::self()->disablePersistentStorage(); typeInt = AbstractType::Ptr(new IntegralType(IntegralType::TypeInt)); @@ -289,6 +300,24 @@ } } +void TestCppCodeCompletion::testMacrosInCodeCompletion() +{ + QByteArray test = "#define test foo\n #define test2 fee\n struct A {int mem;}; void fun() { A foo; A* fee; }"; + TopDUContext* context = parse( test, DumpNone /*DumpDUChain | DumpAST */); + DUChainWriteLocker lock(DUChain::lock()); + + QCOMPARE(context->childContexts().size(), 3); + + QCOMPARE(CompletionItemTester(context->childContexts()[2], "foo.", QString(), SimpleCursor(2, 0)).names, QStringList() << "mem"); + QCOMPARE(CompletionItemTester(context->childContexts()[2], "test.", QString(), SimpleCursor(2, 0)).names, QStringList() << "mem"); + + QCOMPARE(CompletionItemTester(context->childContexts()[2], "fee->", QString(), SimpleCursor(2, 0)).names, QStringList() << "mem"); + QCOMPARE(CompletionItemTester(context->childContexts()[2], "test2->", QString(), SimpleCursor(2, 0)).names, QStringList() << "mem"); + + + release(context); +} + void TestCppCodeCompletion::testConstructorCompletion() { { QByteArray test = "class A {}; class Class : public A { Class(); int m_1; float m_2; char m_3; static int m_4; }; "; @@ -329,30 +358,40 @@ QVERIFY(tester.completionContext->parentContext()->memberAccessOperation() == Cpp::CodeCompletionContext::FunctionCallAccess); QVERIFY(tester.completionContext->parentContext()->parentContext()->isConstructorInitialization()); } + + release(context); } } void TestCppCodeCompletion::testSignalSlotCompletion() { - addInclude("QObject.h", "class QObject { void connect(QObject* from, const char* signal, QObject* to, const char* slot); void connect(QObject* from, const char* signal, const char* slot); };"); + // By processing qobjectdefs.h, we make sure that the qt-specific macros are defined in the duchain through overriding (see setuphelpers.cpp) + addInclude("/qobjectdefs.h", "#define signals\n#define slots\n#define Q_SIGNALS\n#define Q_SLOTS\n#define Q_PRIVATE_SLOT\n#define SIGNAL\n#define SLOT\n int n;\n"); + + addInclude("QObject.h", "#include \"/qobjectdefs.h\"\n class QObject { void connect(QObject* from, const char* signal, QObject* to, const char* slot); void connect(QObject* from, const char* signal, const char* slot); };"); - QByteArray test("#include \"QObject.h\"\n class TE; class A : public QObject { public slots: void slot1(); void slot2(TE*); signals: void signal1(TE*, char);void signal2(); public: void test() { } };"); + QByteArray test("#include \"QObject.h\"\n class TE; class A : public QObject { public slots: void slot1(); void slot2(TE*); signals: void signal1(TE*, char);void signal2(); public: void test() { } private: Q_PRIVATE_SLOT( d, void slot3(TE*) ) };"); TopDUContext* context = parse( test, DumpAll ); DUChainWriteLocker lock(DUChain::lock()); QCOMPARE(context->childContexts().count(), 1); - QCOMPARE(context->childContexts()[0]->childContexts().count(), 6); + QCOMPARE(context->childContexts()[0]->childContexts().count(), 8); CompletionItemTester(context->childContexts()[0]->childContexts()[5], "connect( this, "); QCOMPARE(CompletionItemTester(context->childContexts()[0]->childContexts()[5], "connect( this, ").names.toSet(), (QStringList() << "connect" << "signal1" << "signal2").toSet()); QCOMPARE(CompletionItemTester(context->childContexts()[0]->childContexts()[5], "connect( this, SIGNAL(").names.toSet(), (QStringList() << "connect" << "signal1" << "signal2").toSet()); kDebug() << "ITEMS:" << CompletionItemTester(context->childContexts()[0]->childContexts()[5], "connect( this, SIGNAL(signal2()), this, SLOT(").names; - QCOMPARE(CompletionItemTester(context->childContexts()[0]->childContexts()[5], "connect( this, SIGNAL(signal2()), this, ").names.toSet(), (QStringList() << "connect" << "signal1" << "signal2" << "slot1" << "slot2" << "Connect to A::signal2 ()").toSet()); + QCOMPARE(CompletionItemTester(context->childContexts()[0]->childContexts()[5], "connect( this, SIGNAL(signal2()), this, ").names.toSet(), (QStringList() << "connect" << "signal1" << "signal2" << "slot1" << "slot2" << "slot3" << "Connect to A::signal2 ()").toSet()); QCOMPARE(CompletionItemTester(context->childContexts()[0]->childContexts()[5], "connect( this, SIGNAL(signal2()), this, SIGNAL(").names.toSet(), (QStringList() << "connect" << "signal1" << "signal2" << "Connect to A::signal2 ()").toSet()); - QCOMPARE(CompletionItemTester(context->childContexts()[0]->childContexts()[5], "connect( this, SIGNAL(signal2()), this, SLOT(").names.toSet(), (QStringList() << "connect" << "slot1" << "slot2" << "Connect to A::signal2 ()" << "signal2").toSet()); + QCOMPARE(CompletionItemTester(context->childContexts()[0]->childContexts()[5], "connect( this, SIGNAL(signal2()), this, SLOT(").names.toSet(), (QStringList() << "connect" << "slot1" << "slot2" << "slot3" << "Connect to A::signal2 ()" << "signal2").toSet()); - QVERIFY(((QStringList() << "connect" << "signal1" << "signal2" << "slot1" << "slot2" << "Connect to A::signal2 ()").toSet() - CompletionItemTester(context->childContexts()[0]->childContexts()[5], "connect( this, SIGNAL(signal2()), ").names.toSet()).isEmpty()); + QVERIFY(((QStringList() << "connect" << "signal1" << "signal2" << "slot1" << "slot2" << "slot3" << "Connect to A::signal2 ()").toSet() - CompletionItemTester(context->childContexts()[0]->childContexts()[5], "connect( this, SIGNAL(signal2()), ").names.toSet()).isEmpty()); QVERIFY(((QStringList() << "connect" << "signal1" << "signal2" << "Connect to A::signal2 ()").toSet() - CompletionItemTester(context->childContexts()[0]->childContexts()[5], "connect( this, SIGNAL(signal2()), SIGNAL(").names.toSet()).isEmpty()); - QVERIFY(((QStringList() << "connect" << "slot1" << "slot2" << "Connect to A::signal2 ()").toSet() - CompletionItemTester(context->childContexts()[0]->childContexts()[5], "connect( this, SIGNAL(signal2()), SLOT(").names.toSet()).isEmpty()); + QVERIFY(((QStringList() << "connect" << "slot1" << "slot2" << "slot3"<< "Connect to A::signal2 ()").toSet() - CompletionItemTester(context->childContexts()[0]->childContexts()[5], "connect( this, SIGNAL(signal2()), SLOT(").names.toSet()).isEmpty()); + Declaration* decl = context->childContexts().last()->findDeclarations(Identifier("slot3")).first(); + QVERIFY(decl); + QVERIFY(dynamic_cast(decl)); + QVERIFY(dynamic_cast(decl)->accessPolicy() == Declaration::Private); + QVERIFY(dynamic_cast(decl)->isSlot()); release(context); } @@ -906,7 +945,7 @@ // 0 1 2 3 4 5 6 7 // 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012 - QByteArray method("namespace {int a;} namespace { int b; }; void test() {}"); + QByteArray method("namespace {int a;} namespace { int b; }; void test() {a = 3;}"); TopDUContext* top = parse(method, DumpNone); @@ -914,8 +953,16 @@ QVERIFY(!top->parentContext()); QCOMPARE(top->childContexts().count(), 4); + QCOMPARE(top->localDeclarations().count(), 3); + kDebug() << top->localDeclarations()[0]->range().textRange(); + QCOMPARE(top->localDeclarations()[0]->range().textRange(), KTextEditor::Range(0, 10, 0, 10)); QVERIFY(findDeclaration(top, QualifiedIdentifier("a"))); QVERIFY(findDeclaration(top, QualifiedIdentifier("b"))); + QVERIFY(findDeclaration(top, QualifiedIdentifier("a"))->uses().size()); + PersistentSymbolTable::FilteredDeclarationIterator decls = KDevelop::PersistentSymbolTable::self().getFilteredDeclarations(QualifiedIdentifier(Cpp::unnamedNamespaceIdentifier.identifier()), top->recursiveImportIndices()); + QVERIFY(decls); + QCOMPARE(top->findLocalDeclarations(Cpp::unnamedNamespaceIdentifier.identifier()).size(), 2); + QCOMPARE(top->findDeclarations(QualifiedIdentifier(Cpp::unnamedNamespaceIdentifier.identifier())).size(), 2); // lock.unlock(); { @@ -1318,10 +1365,12 @@ DUChainWriteLocker lock(DUChain::lock()); QCOMPARE(top->childContexts().count(), 2); - QCOMPARE(top->childContexts()[1]->childContexts().count(), 3); - QCOMPARE(top->childContexts()[1]->childContexts()[2]->localDeclarations().count(), 1); - IndexedDeclaration decl(top->childContexts()[1]->childContexts()[2]->localDeclarations()[0]); + QCOMPARE(top->childContexts()[1]->childContexts().count(), 2); + QCOMPARE(top->childContexts()[1]->childContexts()[1]->childContexts().count(), 2); + QCOMPARE(top->childContexts()[1]->childContexts()[1]->childContexts()[1]->localDeclarations().count(), 1); + IndexedDeclaration decl(top->childContexts()[1]->childContexts()[1]->childContexts()[1]->localDeclarations()[0]); QVERIFY(decl.data()); + QCOMPARE(decl.data()->identifier().toString(), QString("i")); parse(text, DumpNone, 0, KUrl(), top); QVERIFY(decl.data()); //Make sure the declaration has been updated, and not deleted @@ -1610,6 +1659,33 @@ } } +void TestCppCodeCompletion::testTimeMacro() +{ + QString test("const char* str = __TIME__;"); + DUChainWriteLocker l(DUChain::lock()); + TopDUContext* ctx = parse(test.toUtf8()); + QVERIFY(ctx->problems().isEmpty()); + QCOMPARE(ctx->localDeclarations().count(), 1); +} + +void TestCppCodeCompletion::testDateMacro() +{ + QString test("const char* str = __DATE__;"); + DUChainWriteLocker l(DUChain::lock()); + TopDUContext* ctx = parse(test.toUtf8()); + QVERIFY(ctx->problems().isEmpty()); + QCOMPARE(ctx->localDeclarations().count(), 1); +} + +void TestCppCodeCompletion::testFileMacro() +{ + QString test("const char* str = __FILE__;"); + DUChainWriteLocker l(DUChain::lock()); + TopDUContext* ctx = parse(test.toUtf8()); + QVERIFY(ctx->problems().isEmpty()); + QCOMPARE(ctx->localDeclarations().count(), 1); +} + void TestCppCodeCompletion::testNaiveMatching() { return; Cpp::EnvironmentManager::setMatchingLevel(Cpp::EnvironmentManager::Naive); @@ -1948,6 +2024,81 @@ } } +void TestCppCodeCompletion::testArgumentList() +{ + QMap codeToArgList; + codeToArgList.insert("void foo(int arg[]){}", "(int arg[])"); + codeToArgList.insert("void foo(int arg[1]){}", "(int arg[1])"); + codeToArgList.insert("void foo(int arg[][1]){}", "(int arg[][1])"); + codeToArgList.insert("void foo(int arg[1][1]){}", "(int arg[1][1])"); + codeToArgList.insert("void foo(int arg[][1][1]){}", "(int arg[][1][1])"); + QMap< QByteArray, QString >::const_iterator it = codeToArgList.constBegin(); + while (it != codeToArgList.constEnd()){ + qDebug() << "input function is:" << it.key(); + TopDUContext* top = parse(it.key(), DumpNone); + DUChainWriteLocker lock(DUChain::lock()); + QCOMPARE(top->localDeclarations().size(), 1); + + CompletionItemTester complCtx(top, ""); + Cpp::NormalDeclarationCompletionItem item(DeclarationPointer(top->localDeclarations().first()), KSharedPtr(complCtx.completionContext.data())); + QString ret; + Cpp::createArgumentList(item, ret, 0); + QCOMPARE(ret, it.value()); + + release(top); + + ++it; + } +} + +void TestCppCodeCompletion::testStaticMethods() +{ + QByteArray code("struct A {\n" + " public: static void myPublicStatic() {}\n" + " protected: static void myProtectedStatic() {}\n" + " private: static void myPrivateStatic() {}\n" + " public: void myPublicNonStatic() {}\n" + " protected: void myProtectedNonStatic() {}\n" + " private: void myPrivateNonStatic() {}\n" + "};\n" + "A a; int main() { return 0;}"); + TopDUContext* top = parse(code, DumpNone); + DUChainWriteLocker lock(DUChain::lock()); + QVERIFY(top->problems().isEmpty()); + QCOMPARE(top->childContexts().size(), 3); + { + // in body of main + CompletionItemTester complCtx(top->childContexts().last(), "a."); + QVERIFY(complCtx.completionContext->isValid()); + QCOMPARE(complCtx.names, QStringList() << "myPublicStatic" << "myPublicNonStatic"); + } + { + // in body of main + CompletionItemTester complCtx(top->childContexts().last(), "A::"); + QVERIFY(complCtx.completionContext->isValid()); + QEXPECT_FAIL("", "non-static functions don't get filtered. comment in context.cpp: ///@todo what NOT to show on static member choose? Actually we cannot hide all non-static functions, because of function-pointers", Continue); + QCOMPARE(complCtx.names, QStringList() << "myPublicStatic"); // fails and gets skipped + // this is a fallback to verify the current behavior + QCOMPARE(complCtx.names, QStringList() << "myPublicStatic" << "myPublicNonStatic"); + } + { + // in body of myPrivate + CompletionItemTester complCtx(top->childContexts().first()->childContexts().last(), "this->"); + QVERIFY(complCtx.completionContext->isValid()); + QCOMPARE(complCtx.names, QStringList() << "myPublicStatic" << "myProtectedStatic" << "myPrivateStatic" << "myPublicNonStatic" << "myProtectedNonStatic" << "myPrivateNonStatic"); + } + { + // in body of myPrivate + CompletionItemTester complCtx(top->childContexts().first()->childContexts().last(), "A::"); + QVERIFY(complCtx.completionContext->isValid()); + QEXPECT_FAIL("", "non-static functions don't get filtered. comment in context.cpp: ///@todo what NOT to show on static member choose? Actually we cannot hide all non-static functions, because of function-pointers", Continue); + QCOMPARE(complCtx.names, QStringList() << "myPublicStatic" << "myProtectedStatic" << "myPrivateStatic"); // fails and gets skipped + // this is a fallback to verify the current behavior + QCOMPARE(complCtx.names, QStringList() << "myPublicStatic" << "myProtectedStatic" << "myPrivateStatic" << "myPublicNonStatic" << "myProtectedNonStatic" << "myPrivateNonStatic"); + } + release(top); +} + class TestPreprocessor : public rpp::Preprocessor { @@ -2014,8 +2165,10 @@ if( parent ) preprocessor.environment()->swapMacros(parent->environment()); + else + currentEnvironment->merge(CppUtils::standardMacros()); - PreprocessedContents contents = preprocessor.processFile("", text.toUtf8()); + PreprocessedContents contents = preprocessor.processFile(url.str(), text.toUtf8()); if(targetContents) *targetContents = contents; diff -Nru kdevelop-3.9.98/languages/cpp/tests/test_cppcodecompletion.h kdevelop-4.0.1/languages/cpp/tests/test_cppcodecompletion.h --- kdevelop-3.9.98/languages/cpp/tests/test_cppcodecompletion.h 2009-12-23 01:44:51.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/tests/test_cppcodecompletion.h 2010-07-17 20:08:19.000000000 +0100 @@ -91,6 +91,10 @@ void testUsesThroughMacros(); void testMacroExpansionRanges(); void testEmptyMacroArguments(); + void testMacrosInCodeCompletion(); + void testTimeMacro(); + void testDateMacro(); + void testFileMacro(); void testPreprocessor(); void testNaiveMatching(); void testFriendVisibility(); @@ -109,6 +113,8 @@ void testSubClassVisibility(); void testSignalSlotCompletion(); void testStringProblem(); + void testArgumentList(); + void testStaticMethods(); public: enum DumpArea { diff -Nru kdevelop-3.9.98/languages/cpp/tests/test_cppcodegen.cpp kdevelop-4.0.1/languages/cpp/tests/test_cppcodegen.cpp --- kdevelop-3.9.98/languages/cpp/tests/test_cppcodegen.cpp 2009-12-18 15:09:27.000000000 +0000 +++ kdevelop-4.0.1/languages/cpp/tests/test_cppcodegen.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -24,7 +24,7 @@ #include "ast.h" #include "astutilities.h" #include "codegen/cppnewclass.h" -#include "codegen/makeimplementationprivate.h" +//#include "codegen/makeimplementationprivate.h" #include #include diff -Nru kdevelop-3.9.98/Makefile.am.in kdevelop-4.0.1/Makefile.am.in --- kdevelop-3.9.98/Makefile.am.in 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/Makefile.am.in 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,51 @@ +COMPILE_FIRST = lib parts + +EXTRA_DIST = AUTHORS COPYING COPYING.LIB NEWS ChangeLog INSTALL README TODO HACKING HACKING.language admin configure.in.bot + +xdg_apps_DATA = kdevelop.desktop kdevassistant.desktop kdevelop_ruby.desktop \ + kdevelop_c_cpp.desktop kdevelop_kde_cpp.desktop kdevelop_scripting.desktop +#appsdir = $(kde_appsdir)/Development + +xdg_directory_DATA = kde-development-kdevelop.directory + +mime_DATA = x-kdevelop.desktop +mimedir = $(kde_mimedir)/application + +kde_bin_SCRIPTS = kdevprj2kdevelop + +$(top_srcdir)/acinclude.m4: $(top_srcdir)/kdevelop.m4.in + +MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 configure.files + +package-messages: + $(MAKE) -f $(top_srcdir)/admin/Makefile.common package-messages + $(MAKE) -C po merge + +dist-hook: + cd $(top_distdir) && perl admin/am_edit -padmin + cd $(top_distdir) && $(MAKE) -f admin/Makefile.common subdirs + +messages: + find . -type d | grep -v CVS | grep -v '\.svn' | sed -e 's,$$,/,' > dirs + mfs=`find . -name Makefile.am | xargs egrep -l '^messages:'` ;\ + for dir in $$mfs; do \ + if test ! "$$dir" = "./Makefile.am"; then \ + dir=`dirname $$dir` ;\ + egrep -v "^$$dir" dirs > dirs.new && mv dirs.new dirs ;\ + fi ;\ + done + dirs=`cat dirs` ;\ + find $$dirs -maxdepth 1 -name "*.cpp" -print > files ;\ + find $$dirs -maxdepth 1 -name "*.cc" -print >> files ;\ + $(EXTRACTRC) `find $$dirs -maxdepth 1 -name "*.rc"` > rc.cpp ;\ + $(EXTRACTRC) `find $$dirs -maxdepth 1 -name "*.ui"` >> rc.cpp ;\ + $(XGETTEXT) rc.cpp `cat files` -o $(podir)/kdevelop.pot + @rm -f rc.cpp dirs files + +$(top_srcdir)/Makefile.am.in: # faking +include admin/deps.am + +DOXYGEN_SEARCHENGINE = YES +DOXYGEN_EMPTY = YES +DOXYGEN_PROJECTNAME = KDevelop Platform API +include Doxyfile.am Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/inst_file.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/inst_file.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_KColorButton.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_KColorButton.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_KDatePicker.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_KDatePicker.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_KDateTable.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_KDateTable.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_KKeyButton.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_KKeyButton.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_KLedLamp.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_KLedLamp.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_KLed.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_KLed.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_KProgress.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_KProgress.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_KRestrictedLine.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_KRestrictedLine.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_KSeparator.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_KSeparator.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QCheckBox.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QCheckBox.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QComboBox.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QComboBox.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QGroupBox.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QGroupBox.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QLabel.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QLabel.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QLCDNumber.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QLCDNumber.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QLineEdit.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QLineEdit.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QListBox.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QListBox.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QListView.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QListView.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QMultiLineEdit.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QMultiLineEdit.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QProgressBar.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QProgressBar.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QPushButton.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QPushButton.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QRadioButton.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QRadioButton.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QScrollBar.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QScrollBar.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QSlider.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QSlider.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QSpinBox.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QSpinBox.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/mini/kdlg_QWidget.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/mini/kdlg_QWidget.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/misc/about_logo.bmp and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/misc/about_logo.bmp differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/misc/customApp.bmp and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/misc/customApp.bmp differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/misc/dlg_firstrun.bmp and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/misc/dlg_firstrun.bmp differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/misc/kAppWizard.bmp and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/misc/kAppWizard.bmp differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/misc/miniApp.bmp and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/misc/miniApp.bmp differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/misc/normalApp.bmp and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/misc/normalApp.bmp differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/misc/qtApp.bmp and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/misc/qtApp.bmp differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/misc/startlogo.bmp and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/misc/startlogo.bmp differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/misc/terminalApp.bmp and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/misc/terminalApp.bmp differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/misc/tipday.bmp and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/misc/tipday.bmp differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/classwiz.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/classwiz.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/compfile.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/compfile.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/copy.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/copy.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/cut.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/cut.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/debugger.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/debugger.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/file_properties.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/file_properties.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/generate.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/generate.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/graphview.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/graphview.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/grep.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/grep.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/hi22-action-dbgjumpto.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/hi22-action-dbgjumpto.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/indent.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/indent.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/lookup.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/lookup.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/make_kdevelop.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/make_kdevelop.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/manual.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/manual.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/mini-book1.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/mini-book1.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/mini-book2.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/mini-book2.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/mini-doc.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/mini-doc.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/newwidget.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/newwidget.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/open.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/open.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/openprj.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/openprj.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/output_win.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/output_win.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/paste.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/paste.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/print.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/print.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/rebuild.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/rebuild.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/redo.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/redo.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/reload_page.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/reload_page.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/run.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/run.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/save_all.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/save_all.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/save.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/save.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/start_page.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/start_page.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/stop_proc.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/stop_proc.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/tree_win.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/tree_win.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/undo.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/undo.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/pics/toolbar/unindent.png and /tmp/FkawBFYozK/kdevelop-4.0.1/pics/toolbar/unindent.png differ diff -Nru kdevelop-3.9.98/po/ca/CMakeLists.txt kdevelop-4.0.1/po/ca/CMakeLists.txt --- kdevelop-3.9.98/po/ca/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca/CMakeLists.txt 2010-07-17 20:08:55.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(ca ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/ca/kdevcmakebuilder.po kdevelop-4.0.1/po/ca/kdevcmakebuilder.po --- kdevelop-3.9.98/po/ca/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca/kdevcmakebuilder.po 2010-07-17 20:08:55.000000000 +0100 @@ -0,0 +1,93 @@ +# Translation to Catalan of kdevcmakebuild.po +# Copyright (C) 2009 This_file_is_part_of_KDE. +# This file is distributed under the license LGPL version 2 or later +# +# Manuel Tortosa , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-05-09 18:44+0200\n" +"Last-Translator: Manuel Tortosa \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "Constructor de CMake" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Implementació per construir projectes de CMake" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "No s'ha configurat cap directori de construcció, no es pot construir" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "S'està cancel·lant la construcció" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "No s'ha configurat cap directori de construcció, no es pot netejar" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "S'està cancel·lant la neteja" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "No s'ha configurat cap directori de construcció, no es pot instal·lar" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "S'està cancel·lant la instal·lació" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "No s'ha configurat cap directori de construcció, no es pot configurar" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "S'està cancel·lant la configuració" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "" +"No s'ha configurat un directori de construcció, no s'ha pogut netejat el " +"directori de construcció" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "No s'ha pogut netejar el directori de construcció" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "Ha fallat la tasca" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "Binari de CMake:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca/kdevcmake.po kdevelop-4.0.1/po/ca/kdevcmake.po --- kdevelop-3.9.98/po/ca/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca/kdevcmake.po 2010-07-17 20:08:55.000000000 +0100 @@ -0,0 +1,466 @@ +# Translation to Catalan of kdevcmake.po +# Copyright (C) 2009-2010 This_file_is_part_of_KDE. +# This file is distributed under the license LGPL version 2 or later +# +# Manuel Tortosa , 2009, 2010. +# Josep Ma. Ferrer , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-04-04 18:37+0200\n" +"Last-Translator: Manuel Tortosa \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "Documentació del CMake" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Implementació per documentació del CMake" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Valor a la memòria cau: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Documentació a la memòria cau: %1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "Ordres" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Variable" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "Mòdul" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "Propietat" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "Política" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "Pàgina de contingut del CMake" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 és una ordre obsoleta i no s'ha d'utilitzar" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Funció inacabada. " + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Nom" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Tipus" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Valor" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Comentari" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Avançat" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"El directori %1 és a punt d'ésser eliminat de la llista de KDevelop.\n" +"Voleu que KDevelop n'elimini també el sistema de fitxers?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "No s'ha pogut eliminar: %1.\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "&Canvia els colors" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "General" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "Aquest projecte té un dia" +msgstr[1] "Aquest projecte té %1 dies" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "S'ha canviat l'arranjament" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "Una aplicació del KDE 4" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "(C) 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Document a obrir" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Configura un directori de construcció" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "Configura un directori de construcció per %1" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "Heu de seleccionar un binari de cmake." + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "Heu d'especificar un directori de construcció." + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "S'està usant un directori de construcció ja creat." + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "S'està creant un nou directori de construcció." + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "El directori de construcció ja s'ha configurat." + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "" +"Aquest directori de construcció és per %1, però el directori del projecte és " +"%2." + +#: cmakebuilddirchooser.cpp:172 +msgid "You may not select a relative build directory." +msgstr "No podeu seleccionar un directori de construcció relatiu." + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "El directori de construcció seleccionat no és buid." + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "Gestor de CMake" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Implementació per gestionar projectes de CMake" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Salta a la definició de la destinació" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Crea una carpeta anomenada «%1»." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop - Implementació de CMake" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "No s'ha pogut crear el fitxer CMakeLists.txt del directori." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "No s'ha pogut desar el canvi." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Elimina una carpeta anomenada «%1»." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Elimina un fitxer anomenat «%1»." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Afegeix un fitxer anomenat «%1» a la destinació «%2»." + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "No s'ha pogut desar el canvi." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "Reanomena una carpeta anomenada «%1»." + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "El directori de construcció no existeix i no s'ha pogut crear." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Error en crear el directori de construcció" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "NO VÀLID" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Ordre" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Macro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Ruta" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "&Binari de CMake:" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "&Directori de construcció:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "&Prefix d'instal·lació:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "&Tipus de construcció:" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"KDevelop ha trobat diverses arrels possibles pel seu projecte. Seleccioneu " +"la correcta." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa Moreno" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "&Mou" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Afegeix" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Elimina" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Memòria cau de valors" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Comentari:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Mostra avançat" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "Directori CMake" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Mostra els valors avançats" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "Hola món" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Color de fons:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Selecciona un nou color de fons" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Canvieu el color de fons clicant aquí i seleccionant el nou " +"color en el diàleg de color.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Edat del projecte:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Color de primer pla:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Selecciona un nou color de primer pla" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Canvieu el color de primer pla clicant aquí i seleccioneu el " +"nou color en el diàleg de color.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Estableix l'edat del projecte (en dies)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "Canvieu l'edat del projecte (en dies) seleccionant un nombre de dies." \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca/kdevcpp.po kdevelop-4.0.1/po/ca/kdevcpp.po --- kdevelop-3.9.98/po/ca/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca/kdevcpp.po 2010-07-17 20:08:55.000000000 +0100 @@ -0,0 +1,930 @@ +# Translation of kdevcpp.po to Catalan +# Copyright (C) 2009-2010 This_file_is_part_of_KDE. +# This file is distributed under the license LGPL version 2 or later +# Manuel Tortosa , 2009, 2010. +# Josep Ma. Ferrer , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-01 23:01+0200\n" +"Last-Translator: Josep Ma. Ferrer \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.0\n" +"X-Language: ca_ES\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "No inclòs" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Inicialitza" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Contenidor no inclòs" + +#: codecompletion/context.cpp:1272 +#, kde-format +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "1 sobrecàrrega de %2" +msgstr[1] "%1 sobrecàrregues de %2" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "Connecta a %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Senyals/ranures" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "Sobreescriu virtual" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Implementa funció" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "C++ integrat" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Sobreescriu" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Implementa" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Crea una ranura" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "Des de %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Afegeix directiva d'inclusió" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Afegeix declaració 'forward'" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "declaració 'fordward'" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "Opcions de implementació de la classe privada" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Cancel·la" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "Actualitza la definició des de %1(%2) fins a (%3)" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Ha fallat en aplicar els canvis: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"La reestructuració és una funció experimental que pot malmetre el codi font. " +"Abans d'usar-la, assegureu-vos de fer una còpia de seguretat." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "Reanomena %1" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "Crea definició separada per %1" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Crea classe" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "No hi ha cap declaració sota el cursor" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "El fitxer de codi font per %1 no està disponible." + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "Ha fallat en actualitzar la cadena DU per %1." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "No es pot crear la definició per aquesta declaració." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "Ha fallat la inserció" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "Ha fallat en aplicar el canvis" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "No hi ha document per %1" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "S'ha perdut la declaració en actualitzar" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "La declaració està ubicada en un fitxer no escrivible %1." + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "Nou nom:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Reanomena" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Nota: Totes les funcions sobrecarregades, les sobrecàrregues, les " +"declaracions 'forward', etc també es reanomenaran" + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Usos" + +#: codegen/simplerefactoring.cpp:445 +msgid "Declaration Info" +msgstr "Informació de la declaració" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "S'està reanomenant «%1» a «%2»" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "Ha fallat en aplicar els canvis: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Configura les rutes d'inclusió personalitzades" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "" +"Ha fallat en desar la configuració de les rutes d'inclusió personalitzades " +"al directori: %1" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Afegeix ruta d'inclusió personalitzada" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Obre un projecte" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "No s'ha trobat: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "No heu seleccionat res, no s'afegirà a l'objectiu." + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "No es pot resoldre la classe base; s'afegeix directament: %1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "Classe base no vàlida: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Crea declaració local %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "Declara %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "No s'ha trobat la declaració: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Inclòs" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Inclòs per" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Macros definides" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Macro de funció" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Macro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "Cos processat:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "Cos:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "" +"El gestor de construcció del projecte %1 no ha retornat un directori de " +"construcció" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"El mecanisme de resolució de rutes d'inclusió necessita el directori de " +"construcció per resoldre rutes d'inclusió addicionals. Considereu establir " +"un directori de construcció al gestor de projectes si encara no ho heu fet." + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "El gestor de construcció no ha retornat una ruta d'inclusió" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"El gestor de construcció no ha retornat la ruta d'inclusió %1, que podria " +"ser resolta pel mecanisme de resolució de rutes d'inclusió" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Mecanisme de resolució de rutes d'inclusió: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Directori de construcció usat: «%1»\n" +"Mecanisme de resolució de rutes d'inclusió: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" +"S'ha Intentat resoldre la ruta d'inclusió mentre que un altre procés de " +"resolució era en execució" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "Falta el makefile a la carpeta «%1»" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "" +"Hi ha hagut un problema en tractar de resoldre les rutes d'inclusió per %1" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "A la memòria cau: %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "Sembla ser que el nom de fitxer %1 té un format incorrecte" + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "Ha fallat en extreure el nou directori de treball" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "La sortida va ser: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "Ha fallat la crida recursiva a Make" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "" +"Sembla ser que la cadena del paràmetre «%1» no és vàlida. La sortida va ser: %" +"2." + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "El directori «%1» no existeix. La sortida va ser: %2." + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "Crida recursiva incorrecta a Make" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "No s'han pogut extreure les rutes d'inclusió de la sortida de Make" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Carpeta: «%1» Comandament: «%2» Sortida: «%3»" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "Generador de capçaleres 'forward' de KDE" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "" +"Una aplicació que genera capçaleres 'forward' (com les capçaleres de Qt) des " +"del codi font." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "(c) 2006, Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"Directori de capçaleres de KDE - les capçaleres són a includes/KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Informació de construcció del generador XML de Cmake" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "Sentència #if no finalitzada" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "caràcter %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "S'esperava \"identificador\", s'ha trobat: %1" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
Text del Token
%1
Entrada
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "S'esperava \")\", s'ha trobat %1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "Divisió per zero" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Text d'entrada: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "s'esperava ``:'' = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else sense #if" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "#endif sense #if a la línia de sortida %1" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Error de macro" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "Falta l'argument número %2 a la crida a la macro %1" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Formals: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "Entrada invàlida: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "Aquest fitxer importa el document actualment obert
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "a la ruta d'inclusió %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Inclòs a través de %1
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Directori %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "a la ruta d'inclusió número %1" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Includes" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Ruta d'inclusió" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "Includers" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "Implementació de C++" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "Implementació del llenguatge C++" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "Fitxers" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "&Canvia la definició/declaració" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "Crea una classe &nova" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Reanomena la declaració" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "Mou al codi font" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Buidat per preprocessador
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "S'estan analitzant els fitxers inclosos" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "S'està analitzant el fitxer actual" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "No s'està actualitzar la cadena DU per %1" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "S'estan construint el usos" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Preparat" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "El fitxer s'ha inclòs recursivament des de dins de si mateix: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "No s'ha trobat el fitxer inclòs: %1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"S'ha cercat la ruta d'inclusió:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "No s'ha pogut obrir el fitxer %1" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "No s'ha pogut llegir del fitxer." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "No s'ha pogut obrir." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "Els permisos del fitxer impedeixen que s'obri per lectura." + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Navegació" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Codi" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "Opcions de C++" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Exporta:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Macro:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Públic" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Protegit" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Privat" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "Ranura" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Senyal" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Directori d'emmagatzemament" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"La ruta d'inclusió personalitzada serà emmagatzemada en un fitxer especial " +"anomenat \"kdev_include_paths\", que s'emmagatzemarà a un directori del codi " +"font. La ruta personalitzada s'usarà per tots els fitxes situats per sota " +"d'aquest directori." + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Directori d'emmagatzemament:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Resolució automàtica" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"Si el projecte usa Makefiles senzills, és possible resoldre automàticament " +"les rutes d'inclusió usant la utilitat Make. Per fer això, establiu aquí un " +"mapejat entre un codi font i una carpeta de construcció." + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Directori de codi font:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Directori de construcció:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Rutes d'inclusió personalitzades" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "Aquí podeu afegit una llist de rutes d'inclusió personalitzades." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"Nota: aquests arranjaments no afecten al compilador o al projecte de cap " +"manera, només es fan servir per trobar capçaleres incloses dins de KDevelop." + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" +"Opcions i arranjaments per moure els camps de dades privats d'una classe a " +"una estructura privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "Nom de la estructura privada:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Opcions" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

Per omissió les " +"estructures d'implementació privada es declaren com estructura per que tinguin l'accés públic per omissió." +"

\n" +"

Marqueu aquesta casella si " +"voleu que l'estructura d'implementació privada sigui declarada com a classe amb accés públic.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Usa classe enlloc d'estructura" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

Mou qualsevol de les " +"actuals variables que són inicialitzades en la llista de l'inicialitzador " +"del constructor a la llista d'estructures d'implementació privada de " +"l'inicialitzador del constructor.

\n" +"

\n" +"

Nota: Totes les referències i variables " +"amb tipus que no ofereixen constructors per omissió es mouen independentment " +"de l'estat d'aquesta opció .

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "Mou la inicialització de les variables a estructura privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" +"Mou tots els mètodes actualment declarats com a privats a estructura " +"d'implementació privada." + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "Mou els mètodes privats" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Nom del punter:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "" +"El nom de la variable membre que contindrà el punter a la implementació " +"privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca/kdevcustommake.po kdevelop-4.0.1/po/ca/kdevcustommake.po --- kdevelop-3.9.98/po/ca/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca/kdevcustommake.po 2010-07-17 20:08:55.000000000 +0100 @@ -0,0 +1,43 @@ +# translation of kdevcustommake.po to Catalan +# Copyright (C) 2009 This_file_is_part_of_KDE +# This file is distributed under the license LGPL version 2 or later +# +# Manuel Tortosa , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-05-11 19:08+0200\n" +"Last-Translator: Manuel Tortosa \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Gestor de makefiles personalitzats" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Implementació de la gestió de projectes amb makefiles personalitzats" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Executa" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca/kdevelop.po kdevelop-4.0.1/po/ca/kdevelop.po --- kdevelop-3.9.98/po/ca/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca/kdevelop.po 2010-07-17 20:08:55.000000000 +0100 @@ -0,0 +1,740 @@ +# Translation of kdevelop.po to Catalan +# Copyright (C) 2002-2010 This_file_is_part_of_KDE. +# This file is distributed under the license LGPL version 2 or later +# +# Albert Astals Cid , 2002, 2003, 2004, 2005. +# Antoni Bella Pérez , 2003, 2005, 2006, 2007. +# Josep Ma. Ferrer , 2007, 2009, 2010. +# Aleix Pol Gonzalez , 2007. +# Manuel Tortosa Moreno , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-01 22:59+0200\n" +"Last-Translator: Josep Ma. Ferrer \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Codi" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "Fitxers de projecte del KDevelop4" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "El sistema de desenvolupament integrat KDevelop" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "Copyright 1999-2010, els desenvolupadors del KDevelop" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "Crea una nova sessió amb el nom proporcionat." + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "Sessió a carregar. Podeu passar o bé el codi o el nom de la sessió." + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "Llista les sessions disponibles i abandona" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" +"Sessions disponibles (useu '-s HASH' o '-s NAME' per obrir-ne una " +"d'específica):" + +#: main.cpp:79 +msgid "Hash" +msgstr "Hash (codi)" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "Nom: projectes oberts" + +#: main.cpp:88 +msgid "[running]" +msgstr "[en execució]" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "Especifiqueu el binari que voleu depurar." + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "Depura" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "" +"Ja existeix una sessió amb el nom %1. Useu el modificador -s per obrir-la." + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"No s'ha pogut obrir la sessió desconeguda %1. Mireu el modificador --" +"sessions per les sessions disponibles o useu -cs per crear-ne una de nova." + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "La sessió %1 ja és en execució" + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"No s'ha pogut iniciar el KDevelop, falta l'executable binari kdevelop a %1. " +"Arregleu la vostra instal·lació del KDevelop." + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Mantenidor, arquitectura, implementació de VCS, Implementació del gestor de " +"projectes, gestor de projectes de QMake" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Arquitectura, IU sublim, implementació per a Ruby" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Cadena de definició-ús, Implementació C++, navegació del codi, compleció del " +"codi, assistència, reestructuració" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "Implementació de CMake, Run i Kross" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "Integració de GDB" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Integració de l'editor de text, cadena de definició-ús" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "" +"Administrador del lloc web, documentació de l'API, pedaços a doxygen i " +"autoproject" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "Integració de GDB, connectors de desenvolupament Web" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "Gestor genèric, connectors de desenvolupament Web" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "Implementació d'astyle i d'indent" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "VCS distribuït, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "SnippetPart, pedaços en el depurador i d'usabilitat" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "" +"Connector de subversion, gestor personalitzat de Make, millores en general" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "Portat a Qt 3, pedaços, implementació per a valgrind, diff i perforce" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "Analitzador de C++" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "Els autors de KWrite" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Component de l'editor Kate" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Codi del dissenyador" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Antics col·laboradors:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "Els autors de KHTML" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "Component de la documentació HTML" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "Idea inicial, arquitectura bàsica, gran part del codi font inicial" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, correcció d'errors" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Implementació del Java i Objective C" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Interfície del depurador" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "Implementació del PHP, menús de context" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "Plantilles d'aplicacions KDE" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Part Dist, implementació del bash, plantilles d'aplicacions" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Diversos components, indexat amb htdig" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Ajuda amb el gestor Automake i el magatzem de classes persistents" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Ajuda amb la infraestructura de KParts" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Implementació de Ada" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "Gestor de projectes de QMake" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "Modes MDI, QEditor, correcció d'errors" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "PartExplorer, redisseny de CvsPart, pedaços, correcció d'errors" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Connectors de substitució, de punts, de llistat de fitxers i de CTags2. " +"Millores generals i pedaços" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Part de Filecreate i d'altres arranjaments i pedaços" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "Implementació de ClearCase" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Implementació de Ruby" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Documentació de Fortran" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Utilitat de documentació de Python" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Assistent de Doxygen" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Component de Fileselector" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "Compleció de codi C++, magatzem de classes persistents" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Pedaços" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Ajuda amb la implementació del Perl" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Visor de l'índex de la documentació" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Cercador de documentació, pedaços per al gestor de projectes de QMake, " +"millores en la usabilitat, correccions d'errors... " + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "Pedaços per al gestor de projectes de QMake" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "Neteja i correcció d'errors a qEditor, AutoMake i moltes altres coses" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Material gràfic per al llenguatge Ruby" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "URL del projecte a carregar" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Fitxers a carregar" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" +"Inicia el depurador, per exemple gdb. Ha de seguir el binari que s'ha de " +"depurar - incloent els arguments." + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (usant KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "No s'ha pogut trobar el tipus natiu de la configuració de llançament" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "No s'ha pogut trobar el llançador %1" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "No s'ha pogut obrir %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "&Fitxer" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "&Edita" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "&Avançat" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "&Visualitza" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "Plega el &codi" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "&Eines" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "Compleció de paraules" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "A&rranjament" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Barra d'eines principal" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "Sessió" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Projecte" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "&Executa" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Navegació" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Fitxer" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Edita" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "Editor" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Codi" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Finestra" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Arranjament" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Albert Astals Cid,Antoni Bella Pérez,Manuel Tortosa Moreno" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "astals11@terra.es,bella5@teleline.es,manutortosa@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca/kdevformatters.po kdevelop-4.0.1/po/ca/kdevformatters.po --- kdevelop-3.9.98/po/ca/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca/kdevformatters.po 2010-07-17 20:08:55.000000000 +0100 @@ -0,0 +1,470 @@ +# translation of kdevformatters.po to Catalan +# Translation to Catalan of kdevformatters.po +# Copyright (C) 2009 This_file_is_part_of_KDE. +# This file is distributed under the license LGPL version 2 or later +# +# Manuel Tortosa , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-05-12 00:02+0200\n" +"Last-Translator: Manuel Tortosa \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "Formatador «astyle»" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "Una eina per formatar que usa «astyle»" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Estil artístic és un sagnador, formatador i embellidor de codi font " +"per llenguatges de programació C,C++,C# i Java.
Lloc web: http://astyle.sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Formatador «indent»" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "Un formatador que usa «indent»" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"Sagnar i formatar el codi font del programa C.
El programa " +"«indent» es pot usar per fer que el codi sigui més fàcil de llegir. També pot " +"convertir d'un estil d'escriure el C a un altre.
«indent» entén " +"gran part de la sintaxi del C, però també tracta d'entendre una sintaxi " +"incompleta i mal formada.
Lloc web: http://www.gnu.org/software/indent/" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Sagnat" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Tabuladors" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Força els tabuladors" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Espais" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"Nombre d'espais que es convertiran en una tabulació.\n" +"El nombre d'espais per tabulació es controlat a l'editor." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Converteix tabuladors a espais." + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Con&verteix tabuladors en espais" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "Emplena les línies buides amb l'espai en blanc de les línies prèvies." + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "&Emplena les línies buides" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Sagna" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Blocs" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Claus" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "«Cases»" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Classes" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Etiquetes" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Espais de noms" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Directives del preprocessador" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "«Switches»" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"Sagna un màxim de # espais a una declaració contínua,\n" +"en relació amb la línia anterior." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Sagna un mínim de # espais en un condicional continu\n" +"pertanyent a un encapçalat condicional." + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Mínim a condicional:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "El doble de l'actual" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Màxim a declaració:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Altre" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Tipus" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Divideix les claus abans de tancar els encapçalaments (p.ex. 'else'\n" +"'catch', etc.) de la seva clau de tancament immediatament anterior." + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "&Divideix les capçaleres de tancament" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "Sense canvi" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Adjunta" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Divideix" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Insereix línies buides al voltant del blocs no vinculats, etiquetes, \n" +"classes.... Problemes coneguts:\n" +"\n" +"1. Si una sentencia no forma part d'un bloc.\n" +"s'usara un doble espaiat per les sentencies següents. \n" +"Les sentencies tancades en un bloc es formataran\n" +"correctament.\n" +"2. Els comentaris se separen del bloc.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "Divideix &blocs" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Igual que --break-blocks, excepte que també insereix \n" +"línies buides al voltant dels encapçalaments de tancament \n" +"(p.ex. 'else', 'catch' ...).\n" +"\n" +"Problemes coneguts:\n" +"\n" +"1. Si una sentencia NO és part d'un bloc, \n" +"les sentencies següents tindran un doble espaiat. \n" +"Les declaracions tancades en un bloc es formataran \n" +"correctament.\n" +"\n" +"2. Els comentaris se separaran del bloc.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "Divideix tots el bl&ocs" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "Divideix les sentencies 'else if()' en dos línies diferents." + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "Divideix i&f-else" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Farciment" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Farceix els parèntesis" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Sense farciment" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "Sols a l'interior" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "Sols a l'exterior" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "A l'interior i a l'exterior" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Insereix espais de farciment al voltant dels operadors.\n" +"Una vegada emplenats, els operadors romandran plens.\n" +"No hi ha opció per esborrar aquest farciment." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "&Afegeix espais al voltant dels operadors" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "D'una línia" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" +"No divideixis les línies que contenen múltiples sentencies\n" +"en múltiples línies d'una sola sentencia." + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "&Mantén declaracions d'una línia" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "No divideixis els blocs que resideixen en una sola línia." + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "Mantén &blocs d'una línia" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca/kdevgdb.po kdevelop-4.0.1/po/ca/kdevgdb.po --- kdevelop-3.9.98/po/ca/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca/kdevgdb.po 2010-07-17 20:08:55.000000000 +0100 @@ -0,0 +1,883 @@ +# Translation of kdevgdb.po to Catalan +# Copyright (C) 2009 This_file_is_part_of_KDE +# This file is distributed under the license LGPL version 2 or later. +# +# Manuel Tortosa , 2009. +# Josep Ma. Ferrer , 2009, 2010. +# Manuel Tortosa Moreno , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevgdb\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-04-04 18:41+0200\n" +"Last-Translator: Manuel Tortosa \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.0\n" +"X-Language: ca_ES\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "Observacions" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "Recent" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "Valor antic: %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
Valor anterior: %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "Implementació de GDB" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Implementació per executar aplicacions en GDB" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Desassembla" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Examina fitxer de nucli..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Examina fitxer de nucli" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"Examina fitxer de nucli

Això carrega un fitxer de nucli, que " +"normalment es crea després que l'aplicació ha petat, p.ex. un error de " +"segmentació. El fitxer de nucli conté una imatge de la memòria del programa " +"al moment de la petada, permetent-vos de fer un anàlisi pot-mortem.

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "Adjunta a procés" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "Adjunta a procés..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "" +"Adjunta a procés

Adjunta el depurador a un procés en execució.

" + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "Avalua: %1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "" +"Avalua expressió

Mostra el valor de l'expressió sota el cursor.

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "Observa: %1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Observa expressió

Afegeix una expressió sota el cursor a la llista " +"de variables/observacions.

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Trieu un fitxer de nucli per examinar..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "S'està examinant el fitxer de nucli %1" + +#: debuggerplugin.cpp:372 +msgid "Debug core file" +msgstr "Depura fitxer de nucli" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "Seleccioneu un procés al que adjuntar..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "" +"No s'està adjuntant al procés %1: no es pot adjuntar el depurador a si " +"mateix." + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "S'està adjuntant al procés %1" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "S'està depurant el procés %1" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Depurador" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"No s'ha especificat un grup d'entorn, sembla ser que s'ha malmès la " +"configuració, si us plau, comproveu la configuració d'execució «%1». S'usarà " +"el grup d'entorn per omissió." + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "Depurador aturat" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "Aplicació interrompuda" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "S'ha sortit del procés" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "L'aplicació és en execució" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "L'aplicació està pausada" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"GDB ha sortit anormalment

Això és probablement un error en gdb. " +"Examineu la finestra de sortida de gdb i després atureu el depurador" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "GDB ha sortit anormalment" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "" +"Ordre gdb enviada quan no s'executava el depurador
L'ordre és:
" +"%1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Error intern" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Ordre de depuració invàlida
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "Ordre de depuració invàlida" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "Ha sortit normalment" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "S'ha aturat en rebre el senyal %1" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "El programa ha rebut el senyal %1 (%2)" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "Programa en execució" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"GDB no pot usar els dispositius tty* o pty*.\n" +"Comproveu els arranjaments de /dev/tty* i /dev/pty*\n" +"Potser necessitareu executar \"chmod ug+rw\" als dispositius tty* i pty* " +"com usuari 'root' i/o afegir l'usuari al grup tty usant \"usermod -G tty " +"nom_usuari\"." + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Avís" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "" +"Error del depurador

El depurador ha informat del següent error:" +"

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Error del depurador" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "1 ordre a la pila\n" +msgstr[1] "%1 ordres a la pila\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "S'està processant 1 ordre per gdb\n" +msgstr[1] "S'estan processant %1 ordres per gdb\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "Estat del depurador: %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"Classe d'ordre actual: «%1»\n" +"Text de l'ordre actual: «%2»\n" +"Text original de l'ordre actual: «%3»\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "Estat del depurador" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "Necessiteu gdb 7.0.0 o superior.
Esteu usant: %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "Error gdb" + +#: debugsession.cpp:1417 +msgid "Could not start debugger:
" +msgstr "No s'ha pogut iniciar el depurador:
" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "Error d'inici" + +#: debugsession.cpp:1429 +msgid "Could not attach debugger:
" +msgstr "No s'ha pogut adjuntar al depurador:
" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"Visualització del codi màquina

Una vista del codi màquina dins de " +"l'executable en funcionament amb la instrucció actual ressaltada. Podeu " +"avançar instrucció per instrucció usant els botons \"avança sobre\" i " +"\"avança dins\" (de la instrucció) de la barra d'eines del depurador." + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Vista del desassemblador" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Adreça" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Funció" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Desplaçament" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Instrucció" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "No s'ha pogut localitzar la capa de depuració «%1»." + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "No s'ha trobat la capa de depuració" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" +"

El component del depurador ha trobat un error intern en el processament " +"de la resposta de gdb. Envieu un informe d'error." + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"L'excepció és: %1\n" +"La resposta MI és: %2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Error intern del depurador" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" +"No s'ha pogut iniciar el depurador.

No s'ha pogut executar «%1»." +"Assegureu-vos que el nom de ruta s'ha especificat correctament." + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "No s'ha pogut iniciar el depurador" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "Configuració de GDB" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "Executa una aplicació nativa en GDB" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "Sortida de gdb" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"Sortida de gdb

Mostra totes les ordres de gdb en execució. També " +"podeu donar qualsevol altra ordre de gdb, mentre que s'està depurant.

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "&Cmd GDB:" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "Pausa l'execució de l'aplicació per introduir ordres de gdb" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Mostra les ordres internes" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"Controla si les ordres emeses internament per KDevelop es mostraran o no." +"
Aquesta opció només afectarà les futures ordres, no afegirà o eliminarà " +"les ordres ja emeses." + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "Copia tot" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Inicia" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "Quantitat" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "Bé" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Cancel·la" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Vista de la memòria" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (1 byte)" +msgstr[1] "%2 (%1 bytes)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Canvia l'interval de memòria" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Recarrega" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Tanca aquesta vista" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Vistes especials del depurador" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "Adjunta a un procés" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Seleccioneu un fitxer de nucli" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "kdevelop: consola de l'aplicació de depuració" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Configuració del depurador" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Executable del depurador:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "Executable gdb" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"Per executar el binari \"gdb\" des de $PATH, deixeu aquest camp en buid. Per " +"executar un gdb personalitzat, per exemple, per una arquitectura diferent, " +"introduïu aquí el nom de l'executable. També podeu executar gdb des de " +"$PATH, però amb un nom diferent (com, \"arm-gdb\"), escrivint el nom aquí o " +"especificant la ruta completa a l'executable gdb." + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "" +"Executa gdb en un entorn especial (principalment per projectes Automake)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"Si voleu que gdb sigui executat per un entorn o eina especial inserir-lo " +"aquí. El cas d'ús principal és per projectes basats en Automake on " +"l'aplicació és un script i necessita 'libtool' per poder ser executada dins " +"de gdb." + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "En&torn de depuració:" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"Si voleu que gdb sigui executat per un entorn o eina especial inserir-lo " +"aquí. El cas d'ús principal és per projectes basats en Automake on " +"l'aplicació és un script i necessita libtool per poder ser executada " +"dins de gdb." + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Opcions" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"Mostrar els membres estàtics fa que GBD\n" +"sigui més lent al produir les dades dins de\n" +"KDE i Qt. Podeu canviar la \"signatura\" de\n" +"les dades de les que depenen QString i\n" +"companyia però si necessiteu depurar\n" +"aquests valors, activeu aquesta opció." + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Mostra els &membres estàtics" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"Quan es mostra el codi desassemblat podeu\n" +"seleccionar veure els noms incomplets dels mètodes.\n" +"Altrament, els noms complets són més fàcils de llegir." + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "Mostra els noms &complets" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"Si GDB no a vist una llibreria que s'hagi de carregar via\n" +"\"dlopen\", es refusarà de posar punts d'interrupció al codi.\n" +"Amb aquesta opció, GDB s'aturarà al carregar un llibreria\n" +"i intentarà establir el punts d'interrupció pendents. Mireu la\n" +"documentació per més detalls sobre aquest comportament.\n" +"\n" +"Si no feu servir \"dlopen\" per obrir llibreries deixeu aquesta\n" +"opció sense marcar." + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "Intenta establir punt d'interrupció al carregar &llibreries" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"Això us permet accedir al terminal d'entrada quan\n" +"l'aplicació conté codi d'entrada de terminal (p.ex. cin,fgets,etc.).\n" +"Si useu el terminal d'entrada a l'aplicació marqueu aquesta\n" +"opció. Altrament, deixeu-la desmarcada." + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "Activa el term&inal separat per E/S de l'aplicació" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"Aquest script està pensat per a les ordres necessàries actualment per " +"connectar-se a un executable funcionant remotament.\n" +"\tshell sleep 5\ttemps d'espera per que s'executi el programa remot\n" +"\ttarget remote\tconnecta amb el depurador remot\n" +"\tcontinue\t[opcional] executa la depuració fins al primer punt d'interrupció" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "Depuració remota" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "&Configura script gdb:" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "Script de configuració de gdb" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "Aquest script és originat per gdb en començar la depuració." + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "Exec&uta script de consola:" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "Script per iniciar l'aplicació remota" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"Aquest script s'executa després que l'script de configuració gdb ha estat " +"generat per gdb.\n" +"Quan s'està depurant remotament aquest script es fa servir per iniciar " +"procés remot.\n" +"[S'espera que l'executable del depurador sigui accessible al destí, pot ser " +"baixant-lo com últim pas del procés de construcció]\n" +"1) Trobeu una manera d'executar una ordre remotament (rsh, ssh, telnet...)\n" +"2a) Executeu \"gdbserver ...aplicació\" al destí.\n" +"2b) Executeu \"l'aplicació\" al destí." + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "Executa script de &gdb:" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "Script per connectar amb l'aplicació remota" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"Aquest script és generat per gdb després que els dos scripts anteriors s'han " +"executat.\n" +"Aquest script està pensat per a les ordres actualment necessàries per " +"connectar-se a un executable funcionant remotament.\n" +"\tshell sleep 5\ttemps d'espera per que s'executi el programa remot\n" +"\ttarget remote\tconnecta amb el depurador remot\n" +"\tcontinue\t[opcional] executa la depuració fins al primer punt " +"d'interrupció." + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "Configuració del traçat" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"Habilita el traçat\n" +"

El traçat és un mecanisme que imprimeix automàticament els valors de les " +"expressions seleccionades i continua l'execució en assolir un punt " +"d'interrupció. Podeu considerar-lo com una instrucció 'printf' de depuració " +"que no requereix la modificació del codi font.

" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Habilita el traçat" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "Format de cadena personalitzat" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"Format de cadena personalitzat\n" +"

Especifica un format de cadena d'estil C que s'usarà en visualitzar " +"l'expressió seleccionada. Per exemple:\n" +"

Punt de traçat 1: g = %d

\n" +"Si no s'ha activat el format de cadena personalitzat, els noms i els valors " +"de totes les expressions es visualitzaran usant «%d» com especificador de " +"format." + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "Expressions a imprimir:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Executa" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Barra d'eines del depurador" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Executable:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Fitxer de nucli:" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa Moreno" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca/kdevmakebuilder.po kdevelop-4.0.1/po/ca/kdevmakebuilder.po --- kdevelop-3.9.98/po/ca/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca/kdevmakebuilder.po 2010-07-17 20:08:55.000000000 +0100 @@ -0,0 +1,168 @@ +# Translation of kdevmakebuilder.po to Catalan +# Copyright (C) 2009 This_file_is_part_of_KDE. +# This file is distributed under the license LGPL version 2 or later. +# +# Manuel Tortosa , 2009. +# Josep Ma. Ferrer , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-21 20:49+0100\n" +"Last-Translator: Josep Ma. Ferrer \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Constructor Make" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Implementació per construir projectes de Make" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Directori de construcció «%1» invàlid" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "No s'ha pogut crear el comandament de construcció per l'objectiu «%1»" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "Ha fallat la tasca" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Ha fallat ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Ha finalitzat ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** S'ha cancel·lat ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "s'està compilant" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "s'està generant" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "s'està enllaçant" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "s'ha construït" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "S'està Instal·lant" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "S'està creant" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Visualitza" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Cancel·la al primer error:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Mostra els comandament però no els executis:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Instal·la com root:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Comandament d'instal·lació de root:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Nombre de tasques simultànies:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Executable de Make:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Objectiu Make per omissió:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Opcions addicionals de Make:" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Perfil d'entorn actiu:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca/kdevqthelp.po kdevelop-4.0.1/po/ca/kdevqthelp.po --- kdevelop-3.9.98/po/ca/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca/kdevqthelp.po 2010-07-17 20:08:55.000000000 +0100 @@ -0,0 +1,70 @@ +# Translation of kdevqthelp.po to Catalan +# Copyright (C) 2009 This_file_is_part_of_KDE. +# This file is distributed under the license LGPL version 2 or later. +# +# Manuel Tortosa , 2009, 2010. +# Josep Ma. Ferrer , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-04-04 18:44+0200\n" +"Last-Translator: Manuel Tortosa \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "No s'ha pogut trobar cap documentació per «%1»" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "Pàgina inicial del QtHelp" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Comproveu la documentació d'ajuda de Qt" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa Moreno" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "Identificador a cercar:" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "Pàgina d'ajuda:" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "quant a:en blanc" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "Informació de depuració:" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca@valencia/CMakeLists.txt kdevelop-4.0.1/po/ca@valencia/CMakeLists.txt --- kdevelop-3.9.98/po/ca@valencia/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca@valencia/CMakeLists.txt 2010-07-17 20:08:59.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(ca@valencia ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/ca@valencia/kdevcmakebuilder.po kdevelop-4.0.1/po/ca@valencia/kdevcmakebuilder.po --- kdevelop-3.9.98/po/ca@valencia/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca@valencia/kdevcmakebuilder.po 2010-07-17 20:08:59.000000000 +0100 @@ -0,0 +1,93 @@ +# Translation to Catalan of kdevcmakebuild.po +# Copyright (C) 2009 This_file_is_part_of_KDE. +# This file is distributed under the license LGPL version 2 or later +# +# Manuel Tortosa , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-05-09 18:44+0200\n" +"Last-Translator: Manuel Tortosa \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "Constructor de CMake" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Implementació per construir projectes de CMake" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "No s'ha configurat cap directori de construcció, no es pot construir" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "S'està cancel·lant la construcció" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "No s'ha configurat cap directori de construcció, no es pot netejar" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "S'està cancel·lant la neteja" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "No s'ha configurat cap directori de construcció, no es pot instal·lar" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "S'està cancel·lant la instal·lació" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "No s'ha configurat cap directori de construcció, no es pot configurar" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "S'està cancel·lant la configuració" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "" +"No s'ha configurat un directori de construcció, no s'ha pogut netejat el " +"directori de construcció" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "No s'ha pogut netejar el directori de construcció" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "Ha fallat la tasca" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "Binari de CMake:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca@valencia/kdevcmake.po kdevelop-4.0.1/po/ca@valencia/kdevcmake.po --- kdevelop-3.9.98/po/ca@valencia/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca@valencia/kdevcmake.po 2010-07-17 20:08:59.000000000 +0100 @@ -0,0 +1,466 @@ +# Translation to Catalan of kdevcmake.po +# Copyright (C) 2009-2010 This_file_is_part_of_KDE. +# This file is distributed under the license LGPL version 2 or later +# +# Manuel Tortosa , 2009, 2010. +# Josep Ma. Ferrer , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-04-04 18:37+0200\n" +"Last-Translator: Manuel Tortosa \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "Documentació del CMake" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Implementació per documentació del CMake" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Valor a la memòria cau: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Documentació a la memòria cau: %1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "Ordes" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Variable" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "Mòdul" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "Propietat" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "Política" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "Pàgina de contingut del CMake" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 és una orde obsoleta i no s'ha d'utilitzar" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Funció inacabada. " + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Nom" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Tipus" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Valor" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Comentari" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Avançat" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"El directori %1 és a punt d'ésser eliminat de la llista de KDevelop.\n" +"Voleu que KDevelop n'elimini també el sistema de fitxers?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "No s'ha pogut eliminar: %1.\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "&Canvia els colors" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "General" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "Este projecte té un dia" +msgstr[1] "Este projecte té %1 dies" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "S'ha canviat l'arranjament" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "Una aplicació del KDE 4" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "(C) 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Document a obrir" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Configura un directori de construcció" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "Configura un directori de construcció per %1" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "Heu de seleccionar un binari de cmake." + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "Heu d'especificar un directori de construcció." + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "S'està usant un directori de construcció ja creat." + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "S'està creant un nou directori de construcció." + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "El directori de construcció ja s'ha configurat." + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "" +"Este directori de construcció és per %1, però el directori del projecte és %" +"2." + +#: cmakebuilddirchooser.cpp:172 +msgid "You may not select a relative build directory." +msgstr "No podeu seleccionar un directori de construcció relatiu." + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "El directori de construcció seleccionat no és buid." + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "Gestor de CMake" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Implementació per gestionar projectes de CMake" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Salta a la definició de la destinació" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Crea una carpeta anomenada «%1»." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop - Implementació de CMake" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "No s'ha pogut crear el fitxer CMakeLists.txt del directori." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "No s'ha pogut alçar el canvi." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Elimina una carpeta anomenada «%1»." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Elimina un fitxer anomenat «%1»." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Afig un fitxer anomenat «%1» a la destinació «%2»." + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "No s'ha pogut alçar el canvi." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "Reanomena una carpeta anomenada «%1»." + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "El directori de construcció no existeix i no s'ha pogut crear." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Error en crear el directori de construcció" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "NO VÀLID" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Orde" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Macro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Ruta" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "&Binari de CMake:" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "&Directori de construcció:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "&Prefix d'instal·lació:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "&Tipus de construcció:" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"KDevelop ha trobat diverses arrels possibles pel seu projecte. Seleccioneu " +"la correcta." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa Moreno" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "&Mou" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Afig" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Elimina" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Memòria cau de valors" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Comentari:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Mostra avançat" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "Directori CMake" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Mostra els valors avançats" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "Hola món" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Color de fons:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Selecciona un nou color de fons" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Canvieu el color de fons clicant ací i seleccionant el nou " +"color en el diàleg de color.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Edat del projecte:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Color de primer pla:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Selecciona un nou color de primer pla" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Canvieu el color de primer pla clicant ací i seleccioneu el " +"nou color en el diàleg de color.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Estableix l'edat del projecte (en dies)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "Canvieu l'edat del projecte (en dies) seleccionant un nombre de dies." \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca@valencia/kdevcpp.po kdevelop-4.0.1/po/ca@valencia/kdevcpp.po --- kdevelop-3.9.98/po/ca@valencia/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca@valencia/kdevcpp.po 2010-07-17 20:08:59.000000000 +0100 @@ -0,0 +1,930 @@ +# Translation of kdevcpp.po to Catalan +# Copyright (C) 2009-2010 This_file_is_part_of_KDE. +# This file is distributed under the license LGPL version 2 or later +# Manuel Tortosa , 2009, 2010. +# Josep Ma. Ferrer , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-01 23:01+0200\n" +"Last-Translator: Josep Ma. Ferrer \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.0\n" +"X-Language: ca_ES\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "No inclòs" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Inicialitza" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Contenidor no inclòs" + +#: codecompletion/context.cpp:1272 +#, kde-format +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "1 sobrecàrrega de %2" +msgstr[1] "%1 sobrecàrregues de %2" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "Connecta a %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Senyals/ranures" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "Sobreescriu virtual" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Implementa funció" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "C++ integrat" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Sobreescriu" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Implementa" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Crea una ranura" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "Des de %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Afig directiva d'inclusió" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Afig declaració 'forward'" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "declaració 'fordward'" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "Opcions d'implementació de la classe privada" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Cancel·la" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "Actualitza la definició des de %1(%2) fins a (%3)" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Ha fallat en aplicar els canvis: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"La reestructuració és una funció experimental que pot malmetre el codi font. " +"Abans d'usar-la, assegureu-vos de fer una còpia de seguretat." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "Reanomena %1" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "Crea definició separada per %1" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Crea classe" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "No hi ha cap declaració sota el cursor" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "El fitxer de codi font per %1 no està disponible." + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "Ha fallat en actualitzar la cadena DU per %1." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "No es pot crear la definició per esta declaració." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "Ha fallat la inserció" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "Ha fallat en aplicar el canvis" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "No hi ha document per %1" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "S'ha perdut la declaració en actualitzar" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "La declaració està ubicada en un fitxer no escrivible %1." + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "Nou nom:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Reanomena" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Nota: Totes les funcions sobrecarregades, les sobrecàrregues, les " +"declaracions 'forward', etc també es reanomenaran" + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Usos" + +#: codegen/simplerefactoring.cpp:445 +msgid "Declaration Info" +msgstr "Informació de la declaració" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "S'està reanomenant «%1» a «%2»" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "Ha fallat en aplicar els canvis: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Configura les rutes d'inclusió personalitzades" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "" +"Ha fallat en alçar la configuració de les rutes d'inclusió personalitzades " +"al directori: %1" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Afig ruta d'inclusió personalitzada" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Obri un projecte" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "No s'ha trobat: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "No heu seleccionat res, no s'afegirà a l'objectiu." + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "No es pot resoldre la classe base; s'afig directament: %1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "Classe base no vàlida: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Crea declaració local %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "Declara %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "No s'ha trobat la declaració: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Inclòs" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Inclòs per" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Macros definides" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Macro de funció" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Macro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "Cos processat:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "Cos:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "" +"El gestor de construcció del projecte %1 no ha retornat un directori de " +"construcció" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"El mecanisme de resolució de rutes d'inclusió necessita el directori de " +"construcció per resoldre rutes d'inclusió addicionals. Considereu establir " +"un directori de construcció al gestor de projectes si encara no ho heu fet." + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "El gestor de construcció no ha retornat una ruta d'inclusió" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"El gestor de construcció no ha retornat la ruta d'inclusió %1, que podria " +"ser resolta pel mecanisme de resolució de rutes d'inclusió" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Mecanisme de resolució de rutes d'inclusió: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Directori de construcció usat: «%1»\n" +"Mecanisme de resolució de rutes d'inclusió: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" +"S'ha Intentat resoldre la ruta d'inclusió mentre que un altre procés de " +"resolució era en execució" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "Falta el makefile a la carpeta «%1»" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "" +"Hi ha hagut un problema en tractar de resoldre les rutes d'inclusió per %1" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "A la memòria cau: %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "Pareix ser que el nom de fitxer %1 té un format incorrecte" + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "Ha fallat en extreure el nou directori de treball" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "La eixida va ser: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "Ha fallat la crida recursiva a Make" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "" +"Pareix ser que la cadena del paràmetre «%1» no és vàlida. La eixida va ser: %" +"2." + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "El directori «%1» no existeix. La eixida va ser: %2." + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "Crida recursiva incorrecta a Make" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "No s'han pogut extreure les rutes d'inclusió de l'eixida de Make" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Carpeta: «%1» Comandament: «%2» Eixida: «%3»" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "Generador de capçaleres 'forward' de KDE" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "" +"Una aplicació que genera capçaleres 'forward' (com les capçaleres de Qt) des " +"del codi font." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "(c) 2006, Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"Directori de capçaleres de KDE - les capçaleres són a includes/KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Informació de construcció del generador XML de Cmake" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "Sentència #if no finalitzada" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "caràcter %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "S'esperava \"identificador\", s'ha trobat: %1" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
Text del Token
%1
Entrada
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "S'esperava \")\", s'ha trobat %1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "Divisió per zero" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Text d'entrada: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "s'esperava ``:'' = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else sense #if" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "#endif sense #if a la línia d'eixida %1" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Error de macro" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "Falta l'argument número %2 a la crida a la macro %1" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Formals: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "Entrada invàlida: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "Este fitxer importa el document actualment obert
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "a la ruta d'inclusió %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Inclòs a través de %1
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Directori %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "a la ruta d'inclusió número %1" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Includes" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Ruta d'inclusió" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "Includers" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "Implementació de C++" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "Implementació del llenguatge C++" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "Fitxers" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "&Canvia la definició/declaració" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "Crea una classe &nova" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Reanomena la declaració" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "Mou al codi font" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Buidat per preprocessador
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "S'estan analitzant els fitxers inclosos" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "S'està analitzant el fitxer actual" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "No s'està actualitzar la cadena DU per %1" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "S'estan construint l'usos" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Preparat" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "El fitxer s'ha inclòs recursivament des de dins de si mateix: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "No s'ha trobat el fitxer inclòs: %1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"S'ha cercat la ruta d'inclusió:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "No s'ha pogut obrir el fitxer %1" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "No s'ha pogut llegir del fitxer." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "No s'ha pogut obrir." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "Els permisos del fitxer impedeixen que s'òbriga per lectura." + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Navegació" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Codi" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "Opcions de C++" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Exporta:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Macro:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Públic" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Protegit" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Privat" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "Ranura" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Senyal" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Directori d'emmagatzemament" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"La ruta d'inclusió personalitzada serà emmagatzemada en un fitxer especial " +"anomenat \"kdev_include_paths\", que s'emmagatzemarà a un directori del codi " +"font. La ruta personalitzada s'usarà per tots els fitxes situats per sota " +"d'este directori." + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Directori d'emmagatzemament:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Resolució automàtica" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"Si el projecte usa Makefiles senzills, és possible resoldre automàticament " +"les rutes d'inclusió usant la utilitat Make. Per fer això, establiu ací un " +"mapejat entre un codi font i una carpeta de construcció." + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Directori de codi font:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Directori de construcció:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Rutes d'inclusió personalitzades" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "Ací podeu afegit una llist de rutes d'inclusió personalitzades." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"Nota: estos arranjaments no afecten al compilador o al projecte de cap " +"manera, només es fan servir per trobar capçaleres incloses dins de KDevelop." + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" +"Opcions i arranjaments per moure els camps de dades privats d'una classe a " +"una estructura privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "Nom de la estructura privada:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Opcions" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

Per omissió les " +"estructures d'implementació privada es declaren com estructura per que tinguen l'accés públic per omissió." +"

\n" +"

Marqueu esta casella si " +"voleu que l'estructura d'implementació privada siga declarada com a classe amb accés públic.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Usa classe enlloc d'estructura" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

Mou qualsevol de les " +"actuals variables que són inicialitzades en la llista de l'inicialitzador " +"del constructor a la llista d'estructures d'implementació privada de " +"l'inicialitzador del constructor.

\n" +"

\n" +"

Nota: Totes les referències i variables " +"amb tipus que no ofereixen constructors per omissió es mouen independentment " +"de l'estat d'esta opció .

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "Mou la inicialització de les variables a estructura privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" +"Mou tots els mètodes actualment declarats com a privats a estructura " +"d'implementació privada." + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "Mou els mètodes privats" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Nom del punter:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "" +"El nom de la variable membre que contindrà el punter a la implementació " +"privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca@valencia/kdevcustommake.po kdevelop-4.0.1/po/ca@valencia/kdevcustommake.po --- kdevelop-3.9.98/po/ca@valencia/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca@valencia/kdevcustommake.po 2010-07-17 20:08:59.000000000 +0100 @@ -0,0 +1,43 @@ +# translation of kdevcustommake.po to Catalan +# Copyright (C) 2009 This_file_is_part_of_KDE +# This file is distributed under the license LGPL version 2 or later +# +# Manuel Tortosa , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-05-11 19:08+0200\n" +"Last-Translator: Manuel Tortosa \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Gestor de makefiles personalitzats" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Implementació de la gestió de projectes amb makefiles personalitzats" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Executa" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca@valencia/kdevelop.po kdevelop-4.0.1/po/ca@valencia/kdevelop.po --- kdevelop-3.9.98/po/ca@valencia/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca@valencia/kdevelop.po 2010-07-17 20:08:59.000000000 +0100 @@ -0,0 +1,740 @@ +# Translation of kdevelop.po to Catalan +# Copyright (C) 2002-2010 This_file_is_part_of_KDE. +# This file is distributed under the license LGPL version 2 or later +# +# Albert Astals Cid , 2002, 2003, 2004, 2005. +# Antoni Bella Pérez , 2003, 2005, 2006, 2007. +# Josep Ma. Ferrer , 2007, 2009, 2010. +# Aleix Pol Gonzalez , 2007. +# Manuel Tortosa Moreno , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-01 22:59+0200\n" +"Last-Translator: Josep Ma. Ferrer \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Codi" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "Fitxers de projecte del KDevelop4" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "El sistema de desenvolupament integrat KDevelop" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "Copyright 1999-2010, els desenvolupadors del KDevelop" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "Crea una nova sessió amb el nom proporcionat." + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "Sessió a carregar. Podeu passar o bé el codi o el nom de la sessió." + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "Llista les sessions disponibles i abandona" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" +"Sessions disponibles (useu '-s HASH' o '-s NAME' per obrir-ne una " +"d'específica):" + +#: main.cpp:79 +msgid "Hash" +msgstr "Hash (codi)" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "Nom: projectes oberts" + +#: main.cpp:88 +msgid "[running]" +msgstr "[en execució]" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "Especifiqueu el binari que voleu depurar." + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "Depura" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "" +"Ja existeix una sessió amb el nom %1. Useu el modificador -s per obrir-la." + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"No s'ha pogut obrir la sessió desconeguda %1. Mireu el modificador --" +"sessions per les sessions disponibles o useu -cs per crear-ne una de nova." + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "La sessió %1 ja és en execució" + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"No s'ha pogut iniciar el KDevelop, falta l'executable binari kdevelop a %1. " +"Arregleu la vostra instal·lació del KDevelop." + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Mantenidor, arquitectura, implementació de VCS, Implementació del gestor de " +"projectes, gestor de projectes de QMake" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Arquitectura, IU sublim, implementació per a Ruby" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Cadena de definició-ús, Implementació C++, navegació del codi, compleció del " +"codi, assistència, reestructuració" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "Implementació de CMake, Run i Kross" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "Integració de GDB" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Integració de l'editor de text, cadena de definició-ús" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "" +"Administrador del lloc web, documentació de l'API, pedaços a doxygen i " +"autoproject" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "Integració de GDB, connectors de desenvolupament Web" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "Gestor genèric, connectors de desenvolupament Web" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "Implementació d'astyle i d'indent" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "VCS distribuït, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "SnippetPart, pedaços en el depurador i d'usabilitat" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "" +"Connector de subversion, gestor personalitzat de Make, millores en general" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "Portat a Qt 3, pedaços, implementació per a valgrind, diff i perforce" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "Analitzador de C++" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "Els autors de KWrite" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Component de l'editor Kate" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Codi del dissenyador" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Antics col·laboradors:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "Els autors de KHTML" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "Component de la documentació HTML" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "Idea inicial, arquitectura bàsica, gran part del codi font inicial" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, correcció d'errors" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Implementació del Java i Objective C" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Interfície del depurador" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "Implementació del PHP, menús de context" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "Plantilles d'aplicacions KDE" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Part Dist, implementació del bash, plantilles d'aplicacions" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Diversos components, indexat amb htdig" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Ajuda amb el gestor Automake i el magatzem de classes persistents" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Ajuda amb la infraestructura de KParts" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Implementació d'Ada" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "Gestor de projectes de QMake" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "Modes MDI, QEditor, correcció d'errors" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "PartExplorer, redisseny de CvsPart, pedaços, correcció d'errors" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Connectors de substitució, de punts, de llistat de fitxers i de CTags2. " +"Millores generals i pedaços" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Part de Filecreate i d'altres arranjaments i pedaços" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "Implementació de ClearCase" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Implementació de Ruby" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Documentació de Fortran" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Utilitat de documentació de Python" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Assistent de Doxygen" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Component de Fileselector" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "Compleció de codi C++, magatzem de classes persistents" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Pedaços" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Ajuda amb la implementació del Perl" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Visor de l'índex de la documentació" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Cercador de documentació, pedaços per al gestor de projectes de QMake, " +"millores en la usabilitat, correccions d'errors... " + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "Pedaços per al gestor de projectes de QMake" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "Neteja i correcció d'errors a qEditor, AutoMake i moltes altres coses" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Material gràfic per al llenguatge Ruby" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "URL del projecte a carregar" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Fitxers a carregar" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" +"Inicia el depurador, per exemple gdb. Ha de seguir el binari que s'ha de " +"depurar - incloent els arguments." + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (usant KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "No s'ha pogut trobar el tipus natiu de la configuració de llançament" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "No s'ha pogut trobar el llançador %1" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "No s'ha pogut obrir %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "&Fitxer" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "&Edita" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "&Avançat" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "&Visualitza" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "Plega el &codi" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "&Eines" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "Compleció de paraules" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "A&rranjament" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Barra d'eines principal" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "Sessió" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Projecte" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "&Executa" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Navegació" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Fitxer" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Edita" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "Editor" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Codi" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Finestra" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Arranjament" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Albert Astals Cid,Antoni Bella Pérez,Manuel Tortosa Moreno" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "astals11@terra.es,bella5@teleline.es,manutortosa@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca@valencia/kdevformatters.po kdevelop-4.0.1/po/ca@valencia/kdevformatters.po --- kdevelop-3.9.98/po/ca@valencia/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca@valencia/kdevformatters.po 2010-07-17 20:08:59.000000000 +0100 @@ -0,0 +1,470 @@ +# translation of kdevformatters.po to Catalan +# Translation to Catalan of kdevformatters.po +# Copyright (C) 2009 This_file_is_part_of_KDE. +# This file is distributed under the license LGPL version 2 or later +# +# Manuel Tortosa , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-05-12 00:02+0200\n" +"Last-Translator: Manuel Tortosa \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "Formatador «astyle»" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "Una eina per formatar que usa «astyle»" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Estil artístic és un sagnador, formatador i embellidor de codi font " +"per llenguatges de programació C,C++,C# i Java.
Lloc web: http://astyle.sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Formatador «indent»" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "Un formatador que usa «indent»" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"Sagnar i formatar el codi font del programa C.
El programa " +"«indent» es pot usar per fer que el codi siga més fàcil de llegir. També pot " +"convertir d'un estil d'escriure el C a un altre.
«indent» entén " +"gran part de la sintaxi del C, però també tracta d'entendre una sintaxi " +"incompleta i mal formada.
Lloc web: http://www.gnu.org/software/indent/" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Sagnat" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Tabuladors" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Força els tabuladors" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Espais" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"Nombre d'espais que es convertiran en una tabulació.\n" +"El nombre d'espais per tabulació es controlat a l'editor." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Converteix tabuladors a espais." + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Con&verteix tabuladors en espais" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "Emplena les línies buides amb l'espai en blanc de les línies prèvies." + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "&Emplena les línies buides" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Sagna" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Blocs" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Claus" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "«Cases»" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Classes" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Etiquetes" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Espais de noms" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Directives del preprocessador" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "«Switches»" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"Sagna un màxim de # espais a una declaració contínua,\n" +"en relació amb la línia anterior." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Sagna un mínim de # espais en un condicional continu\n" +"pertanyent a un encapçalat condicional." + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Mínim a condicional:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "El doble de l'actual" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Màxim a declaració:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Altre" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Tipus" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Divideix les claus abans de tancar els encapçalaments (p.ex. 'else'\n" +"'catch', etc.) de la seua clau de tancament immediatament anterior." + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "&Divideix les capçaleres de tancament" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "Sense canvi" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Adjunta" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Divideix" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Insereix línies buides al voltant del blocs no vinculats, etiquetes, \n" +"classes.... Problemes coneguts:\n" +"\n" +"1. Si una sentencia no forma part d'un bloc.\n" +"s'usara un doble espaiat per les sentencies següents. \n" +"Les sentencies tancades en un bloc es formataran\n" +"correctament.\n" +"2. Els comentaris se separen del bloc.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "Divideix &blocs" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Igual que --break-blocks, excepte que també insereix \n" +"línies buides al voltant dels encapçalaments de tancament \n" +"(p.ex. 'else', 'catch' ...).\n" +"\n" +"Problemes coneguts:\n" +"\n" +"1. Si una sentencia NO és part d'un bloc, \n" +"les sentencies següents tindran un doble espaiat. \n" +"Les declaracions tancades en un bloc es formataran \n" +"correctament.\n" +"\n" +"2. Els comentaris se separaran del bloc.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "Divideix tots el bl&ocs" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "Divideix les sentencies 'else if()' en dos línies diferents." + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "Divideix i&f-else" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Farciment" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Farceix els parèntesis" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Sense farciment" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "Sols a l'interior" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "Sols a l'exterior" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "A l'interior i a l'exterior" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Insereix espais de farciment al voltant dels operadors.\n" +"Una vegada emplenats, els operadors romandran plens.\n" +"No hi ha opció per esborrar este farciment." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "&Afig espais al voltant dels operadors" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "D'una línia" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" +"No dividisques les línies que contenen múltiples sentencies\n" +"en múltiples línies d'una sola sentencia." + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "&Mantén declaracions d'una línia" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "No dividisques els blocs que resideixen en una sola línia." + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "Mantén &blocs d'una línia" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca@valencia/kdevgdb.po kdevelop-4.0.1/po/ca@valencia/kdevgdb.po --- kdevelop-3.9.98/po/ca@valencia/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca@valencia/kdevgdb.po 2010-07-17 20:08:59.000000000 +0100 @@ -0,0 +1,880 @@ +# Translation of kdevgdb.po to Catalan +# Copyright (C) 2009 This_file_is_part_of_KDE +# This file is distributed under the license LGPL version 2 or later. +# +# Manuel Tortosa , 2009. +# Josep Ma. Ferrer , 2009, 2010. +# Manuel Tortosa Moreno , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevgdb\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-04-04 18:41+0200\n" +"Last-Translator: Manuel Tortosa \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.0\n" +"X-Language: ca_ES\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "Observacions" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "Recent" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "Valor antic: %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
Valor anterior: %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "Implementació de GDB" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Implementació per executar aplicacions en GDB" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Desassembla" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Examina fitxer de nucli..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Examina fitxer de nucli" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"Examina fitxer de nucli

Això carrega un fitxer de nucli, que " +"normalment es crea després que l'aplicació ha petat, p.ex. un error de " +"segmentació. El fitxer de nucli conté una imatge de la memòria del programa " +"al moment de la petada, permetent-vos de fer un anàlisi pot-mortem.

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "Adjunta a procés" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "Adjunta a procés..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "" +"Adjunta a procés

Adjunta el depurador a un procés en execució.

" + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "Avalua: %1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "" +"Avalua expressió

Mostra el valor de l'expressió sota el cursor.

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "Observa: %1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Observa expressió

Afig una expressió sota el cursor a la llista de " +"variables/observacions.

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Trieu un fitxer de nucli per examinar..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "S'està examinant el fitxer de nucli %1" + +#: debuggerplugin.cpp:372 +msgid "Debug core file" +msgstr "Depura fitxer de nucli" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "Seleccioneu un procés al que adjuntar..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "" +"No s'està adjuntant al procés %1: no es pot adjuntar el depurador a si " +"mateix." + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "S'està adjuntant al procés %1" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "S'està depurant el procés %1" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Depurador" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"No s'ha especificat un grup d'entorn, pareix ser que s'ha malmés la " +"configuració, per favor, comproveu la configuració d'execució «%1». S'usarà " +"el grup d'entorn per omissió." + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "Depurador aturat" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "Aplicació interrompuda" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "S'ha eixit del procés" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "L'aplicació és en execució" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "L'aplicació està pausada" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"GDB ha eixit anormalment

Això és probablement un error en gdb. " +"Examineu la finestra d'eixida de gdb i després atureu el depurador" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "GDB ha eixit anormalment" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "" +"Orde gdb enviada quan no s'executava el depurador
L'orde és:
%1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Error intern" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Orde de depuració invàlida
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "Orde de depuració invàlida" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "Ha eixit normalment" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "S'ha aturat en rebre el senyal %1" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "El programa ha rebut el senyal %1 (%2)" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "Programa en execució" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"GDB no pot usar els dispositius tty* o pty*.\n" +"Comproveu els arranjaments de /dev/tty* i /dev/pty*\n" +"Potser necessitareu executar \"chmod ug+rw\" als dispositius tty* i pty* " +"com usuari 'root' i/o afegir l'usuari al grup tty usant \"usermod -G tty " +"nom_usuari\"." + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Avís" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "" +"Error del depurador

El depurador ha informat del següent error:" +"

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Error del depurador" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "1 orde a la pila\n" +msgstr[1] "%1 ordes a la pila\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "S'està processant 1 orde per gdb\n" +msgstr[1] "S'estan processant %1 ordes per gdb\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "Estat del depurador: %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"Classe d'orde actual: «%1»\n" +"Text de l'orde actual: «%2»\n" +"Text original de l'orde actual: «%3»\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "Estat del depurador" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "Necessiteu gdb 7.0.0 o superior.
Esteu usant: %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "Error gdb" + +#: debugsession.cpp:1417 +msgid "Could not start debugger:
" +msgstr "No s'ha pogut iniciar el depurador:
" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "Error d'inici" + +#: debugsession.cpp:1429 +msgid "Could not attach debugger:
" +msgstr "No s'ha pogut adjuntar al depurador:
" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"Visualització del codi màquina

Una vista del codi màquina dins de " +"l'executable en funcionament amb la instrucció actual ressaltada. Podeu " +"avançar instrucció per instrucció usant els botons \"avança sobre\" i " +"\"avança dins\" (de la instrucció) de la barra d'eines del depurador." + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Vista del desassemblador" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Adreça" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Funció" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Desplaçament" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Instrucció" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "No s'ha pogut localitzar la capa de depuració «%1»." + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "No s'ha trobat la capa de depuració" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" +"

El component del depurador ha trobat un error intern en el processament " +"de la resposta de gdb. Envieu un informe d'error." + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"L'excepció és: %1\n" +"La resposta MI és: %2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Error intern del depurador" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" +"No s'ha pogut iniciar el depurador.

No s'ha pogut executar «%1»." +"Assegureu-vos que el nom de ruta s'ha especificat correctament." + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "No s'ha pogut iniciar el depurador" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "Configuració de GDB" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "Executa una aplicació nativa en GDB" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "Eixida de gdb" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"Eixida de gdb

Mostra totes les ordes de gdb en execució. També " +"podeu donar qualsevol altra orde de gdb, mentre que s'està depurant.

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "&Cmd GDB:" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "Pausa l'execució de l'aplicació per introduir ordes de gdb" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Mostra les ordes internes" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"Controla si les ordes emeses internament per KDevelop es mostraran o no." +"
Esta opció només afectarà les futures ordes, no afegirà o eliminarà les " +"ordes ja emeses." + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "Copia tot" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Inicia" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "Quantitat" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "Bé" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Cancel·la" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Vista de la memòria" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (1 byte)" +msgstr[1] "%2 (%1 bytes)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Canvia l'interval de memòria" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Recarrega" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Tanca esta vista" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Vistes especials del depurador" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "Adjunta a un procés" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Seleccioneu un fitxer de nucli" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "kdevelop: consola de l'aplicació de depuració" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Configuració del depurador" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Executable del depurador:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "Executable gdb" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"Per executar el binari \"gdb\" des de $PATH, deixeu este camp en buid. Per " +"executar un gdb personalitzat, per exemple, per una arquitectura diferent, " +"introduïu ací el nom de l'executable. També podeu executar gdb des de $PATH, " +"però amb un nom diferent (com, \"arm-gdb\"), escrivint el nom ací o " +"especificant la ruta completa a l'executable gdb." + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "" +"Executa gdb en un entorn especial (principalment per projectes Automake)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"Si voleu que gdb siga executat per un entorn o eina especial inserir-lo ací. " +"El cas d'ús principal és per projectes basats en Automake on l'aplicació és " +"un script i necessita 'libtool' per poder ser executada dins de gdb." + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "En&torn de depuració:" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"Si voleu que gdb siga executat per un entorn o eina especial inserir-lo ací. " +"El cas d'ús principal és per projectes basats en Automake on l'aplicació és " +"un script i necessita libtool per poder ser executada dins de gdb." + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Opcions" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"Mostrar els membres estàtics fa que GBD\n" +"siga més lent al produir les dades dins de\n" +"KDE i Qt. Podeu canviar la \"signatura\" de\n" +"les dades de les que depenen QString i\n" +"companyia però si necessiteu depurar\n" +"estos valors, activeu esta opció." + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Mostra els &membres estàtics" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"Quan es mostra el codi desassemblat podeu\n" +"seleccionar veure els noms incomplets dels mètodes.\n" +"Altrament, els noms complets són més fàcils de llegir." + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "Mostra els noms &complets" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"Si GDB no a vist una llibreria que s'haja de carregar via\n" +"\"dlopen\", es refusarà de posar punts d'interrupció al codi.\n" +"Amb esta opció, GDB s'aturarà al carregar un llibreria\n" +"i intentarà establir el punts d'interrupció pendents. Mireu la\n" +"documentació per més detalls sobre este comportament.\n" +"\n" +"Si no feu servir \"dlopen\" per obrir llibreries deixeu esta\n" +"opció sense marcar." + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "Intenta establir punt d'interrupció al carregar &llibreries" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"Això vos permet accedir al terminal d'entrada quan\n" +"l'aplicació conté codi d'entrada de terminal (p.ex. cin,fgets,etc.).\n" +"Si useu el terminal d'entrada a l'aplicació marqueu esta\n" +"opció. Altrament, deixeu-la desmarcada." + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "Activa el term&inal separat per E/S de l'aplicació" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"Este script està pensat per a les ordes necessàries actualment per connectar-" +"s'a un executable funcionant remotament.\n" +"\tshell sleep 5\ttemps d'espera per que s'execute el programa remot\n" +"\ttarget remote\tconnecta amb el depurador remot\n" +"\tcontinue\t[opcional] executa la depuració fins al primer punt d'interrupció" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "Depuració remota" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "&Configura script gdb:" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "Script de configuració de gdb" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "Este script és originat per gdb en començar la depuració." + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "Exec&uta script de consola:" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "Script per iniciar l'aplicació remota" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"Este script s'executa després que l'script de configuració gdb ha estat " +"generat per gdb.\n" +"Quan s'està depurant remotament este script es fa servir per iniciar procés " +"remot.\n" +"[S'espera que l'executable del depurador siga accessible al destí, pot ser " +"baixant-lo com últim pas del procés de construcció]\n" +"1) Trobeu una manera d'executar una orde remotament (rsh, ssh, telnet...)\n" +"2a) Executeu \"gdbserver ...aplicació\" al destí.\n" +"2b) Executeu \"l'aplicació\" al destí." + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "Executa script de &gdb:" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "Script per connectar amb l'aplicació remota" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"Este script és generat per gdb després que els dos scripts anteriors s'han " +"executat.\n" +"Este script està pensat per a les ordes actualment necessàries per connectar-" +"s'a un executable funcionant remotament.\n" +"\tshell sleep 5\ttemps d'espera per que s'execute el programa remot\n" +"\ttarget remote\tconnecta amb el depurador remot\n" +"\tcontinue\t[opcional] executa la depuració fins al primer punt " +"d'interrupció." + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "Configuració del traçat" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"Habilita el traçat\n" +"

El traçat és un mecanisme que imprimeix automàticament els valors de les " +"expressions seleccionades i continua l'execució en assolir un punt " +"d'interrupció. Podeu considerar-lo com una instrucció 'printf' de depuració " +"que no requereix la modificació del codi font.

" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Habilita el traçat" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "Format de cadena personalitzat" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"Format de cadena personalitzat\n" +"

Especifica un format de cadena d'estil C que s'usarà en visualitzar " +"l'expressió seleccionada. Per exemple:\n" +"

Punt de traçat 1: g = %d

\n" +"Si no s'ha activat el format de cadena personalitzat, els noms i els valors " +"de totes les expressions es visualitzaran usant «%d» com especificador de " +"format." + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "Expressions a imprimir:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Executa" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Barra d'eines del depurador" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Executable:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Fitxer de nucli:" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa Moreno" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca@valencia/kdevmakebuilder.po kdevelop-4.0.1/po/ca@valencia/kdevmakebuilder.po --- kdevelop-3.9.98/po/ca@valencia/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca@valencia/kdevmakebuilder.po 2010-07-17 20:08:59.000000000 +0100 @@ -0,0 +1,168 @@ +# Translation of kdevmakebuilder.po to Catalan +# Copyright (C) 2009 This_file_is_part_of_KDE. +# This file is distributed under the license LGPL version 2 or later. +# +# Manuel Tortosa , 2009. +# Josep Ma. Ferrer , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-21 20:49+0100\n" +"Last-Translator: Josep Ma. Ferrer \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Constructor Make" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Implementació per construir projectes de Make" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Directori de construcció «%1» invàlid" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "No s'ha pogut crear el comandament de construcció per l'objectiu «%1»" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "Ha fallat la tasca" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Ha fallat ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Ha finalitzat ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** S'ha cancel·lat ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "s'està compilant" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "s'està generant" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "s'està enllaçant" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "s'ha construït" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "S'està Instal·lant" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "S'està creant" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Visualitza" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Cancel·la al primer error:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Mostra els comandament però no els executes:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Instal·la com root:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Comandament d'instal·lació de root:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Nombre de tasques simultànies:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Executable de Make:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Objectiu Make per omissió:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Opcions addicionals de Make:" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Perfil d'entorn actiu:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/ca@valencia/kdevqthelp.po kdevelop-4.0.1/po/ca@valencia/kdevqthelp.po --- kdevelop-3.9.98/po/ca@valencia/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/ca@valencia/kdevqthelp.po 2010-07-17 20:08:59.000000000 +0100 @@ -0,0 +1,70 @@ +# Translation of kdevqthelp.po to Catalan +# Copyright (C) 2009 This_file_is_part_of_KDE. +# This file is distributed under the license LGPL version 2 or later. +# +# Manuel Tortosa , 2009, 2010. +# Josep Ma. Ferrer , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-04-04 18:44+0200\n" +"Last-Translator: Manuel Tortosa \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "No s'ha pogut trobar cap documentació per «%1»" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "Pàgina inicial del QtHelp" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Comproveu la documentació d'ajuda de Qt" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manuel Tortosa Moreno" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "manutortosa@gmail.com" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "Identificador a cercar:" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "Pàgina d'ajuda:" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "quant a:en blanc" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "Informació de depuració:" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/CMakeLists.txt kdevelop-4.0.1/po/CMakeLists.txt --- kdevelop-3.9.98/po/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/CMakeLists.txt 2010-07-17 20:45:18.000000000 +0100 @@ -0,0 +1,28 @@ +find_package(Gettext REQUIRED) +if (NOT GETTEXT_MSGMERGE_EXECUTABLE) +MESSAGE(FATAL_ERROR "Please install msgmerge binary") +endif (NOT GETTEXT_MSGMERGE_EXECUTABLE) +if (NOT GETTEXT_MSGFMT_EXECUTABLE) +MESSAGE(FATAL_ERROR "Please install msgmerge binary") +endif (NOT GETTEXT_MSGFMT_EXECUTABLE) +add_subdirectory(da) +add_subdirectory(pt) +add_subdirectory(nds) +add_subdirectory(sl) +add_subdirectory(en_GB) +add_subdirectory(zh_CN) +add_subdirectory(de) +add_subdirectory(ca) +add_subdirectory(pt_BR) +add_subdirectory(it) +add_subdirectory(ca@valencia) +add_subdirectory(et) +add_subdirectory(nl) +add_subdirectory(es) +add_subdirectory(fr) +add_subdirectory(fi) +add_subdirectory(sv) +add_subdirectory(uk) +add_subdirectory(th) +add_subdirectory(zh_TW) +add_subdirectory(gl) diff -Nru kdevelop-3.9.98/po/da/CMakeLists.txt kdevelop-4.0.1/po/da/CMakeLists.txt --- kdevelop-3.9.98/po/da/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/da/CMakeLists.txt 2010-07-17 20:09:16.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(da ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/da/kdevcmakebuilder.po kdevelop-4.0.1/po/da/kdevcmakebuilder.po --- kdevelop-3.9.98/po/da/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/da/kdevcmakebuilder.po 2010-07-17 20:09:16.000000000 +0100 @@ -0,0 +1,91 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Morten Anton Bach Sjøgren , 2010. +# Martin Schlander , 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-18 14:30+0100\n" +"Last-Translator: Martin Schlander \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "CMake-bygger" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Understøttelse af at bygge CMake-projekter" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "Ingen byggemappe indstillet, kan ikke bygge." + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "Afbryder bygning" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "Ingen byggemappe indstillet, kan ikke rydde op" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "Afbryder oprydning" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "Ingen byggemappe indstillet, kan ikke installere" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "Afbryder installation" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "Ingen byggemappe indstillet, kan ikke konfigurere" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "Afbryder konfiguration" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "Ingen byggemappe indstillet, kan ikke rydde builddir" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "Oprydning af builddir ikke mulig" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "Jobbet mislykkedes" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "Programmet CMake:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Morten Anton Bach Sjøgren" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "m_abs@mabs.dk" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/da/kdevcmake.po kdevelop-4.0.1/po/da/kdevcmake.po --- kdevelop-3.9.98/po/da/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/da/kdevcmake.po 2010-07-17 20:09:16.000000000 +0100 @@ -0,0 +1,462 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Morten Anton Bach Sjøgren , 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-03-29 19:43+0200\n" +"Last-Translator: Morten Anton Bach Sjøgren \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.0\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "CMake-dokumentation" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Understøttelse af CMake-dokumentation" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Cache-værdi: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Cache-dokumentation: %1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "Kommandoer" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Variable" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "Modul" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "Egenskab" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "Politik" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "Indholdsside til CMake" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 er en forældet kommando og burde ikke bruges" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Ikke-færdig funktion. " + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Navn" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Type" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Værdi" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Kommentar" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Avanceret" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"Mappen \"%1\" er ved at blive fjernet fra KDevelops liste\n" +"Vil du også have KDevelop til at fjerne den fra filsystemet?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "Kunne ikke fjerne: %1\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "Skif&t farver" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "Generelt" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "Dette projekt er en dag gammelt" +msgstr[1] "Dette projekt er %1 dage gammelt" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "Indstillinger ændret" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "En KDE 4 applikation" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "Ophavsret 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Dokument der skal åbnes" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Konfigurér en byggemappe" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "Konfigurér en byggemappe for %1" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "Du skal vælge en kørbar cmake-fil." + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "Du skal angive en byggemappe." + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "Bruger en eksisterende byggemappe." + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "Opretter en ny byggemappe." + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "Byggemappen er allerede konfigureret." + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "Denne byggemappe er til %1, men projektmappen er %2." + +#: cmakebuilddirchooser.cpp:172 +msgid "You may not select a relative build directory." +msgstr "Du må ikke vælge en relativ byggemappe." + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "Den valgte byggemappe er ikke tom." + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "CMake håndtering" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Understøttelse af håndtering af CMake-projekter" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Spring til måldefinitionen" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Opret en mappe kaldet \"%1\"." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop - CMake-understøttelse" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "Kunne ikke oprette mappens CMakeLists.txt fil." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "Kunne ikke gemme ændringen." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Fjern folderen '%1'." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Fjern filen \"%1\"." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Tilføj filen '%1' til målet '%2'." + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "Kan ikke gemme ændringen." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "Omdøb en folder kaldet \"%1\"." + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "Byggemappen eksisterer ikke og kunne ikke oprettes." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Fejl under oprettelse af byggemappe" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "UGYLDIG" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Kommando" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Makro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Sti" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "Kørbar c&make-fil." + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "&Byggemappe:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "Præfiks til &installation:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "Bygnings&type:" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"KDevelop har fundet flere mulige rodmapper til dit projekt, vælg venligst " +"det rigtige." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Morten Anton Bach Sjøgren" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "m_abs@mabs.dk" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "&Flyt" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Add" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Remove" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Cache-værdier" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Kommentar:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Vis avanceret" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "CMake-mappe" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Vis avancerede værdier" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "hej verden" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Baggrundsfarve:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Vælg en ny baggrundsfarve" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Skift baggrundsfarven ved at klikke her og vælgeden nye farve i farve-dialogen.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Projektets alder:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Forgrundsfarve:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Vælg en ny forgrundsfarve" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Skift forgrundsfarven ved at klikke her og vælgeden nye farve i farve-dialogen.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Sæt projektets alder (i dage)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "Skift projektets alder (i dage) ved at vælge et nyt antal dage." \ No newline at end of file diff -Nru kdevelop-3.9.98/po/da/kdevcpp.po kdevelop-4.0.1/po/da/kdevcpp.po --- kdevelop-3.9.98/po/da/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/da/kdevcpp.po 2010-07-17 20:09:16.000000000 +0100 @@ -0,0 +1,914 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Morten Anton Bach Sjøgren , 2010. +# Martin Schlander , 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-19 12:14+0200\n" +"Last-Translator: Martin Schlander \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.0\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "Ikke inkluderet" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Initialisér" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Ikke inkluderet beholder" + +#: codecompletion/context.cpp:1272 +#, kde-format +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "1 tilsidesætning af %2" +msgstr[1] "%1 tilsidesætninger af %2" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "Forbind til %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Signals/Slots" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "Virtual override" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Implementér funktion" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "C++-builtin" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Override" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Implementer" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Opret Slot" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "Fra %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Tilføj include direktiv" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Tilføj forud-erklæring" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "forud-erklær" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "Indstillinger for implementering af private klasser" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Annullér" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "Opdater definition fra %1(%2) til (%3)" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Kunne ikke anvende ændringer: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"Refaktoring er en eksperimentel funktion, den kan skade din kode. Sørg for " +"at du har en backup før du benytter den." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "Omdøb %1" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "Opret separat definition for %1" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Opret klasse" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "Der er ingen erklæring under markøren" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "Kildefil ikke tilgængelig for %1." + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "Kunne ikke opdatere DU-chain for %1." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "Kan ikke oprette definitionen for denne erklæring." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "Indsættelse mislykkedes" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "Anvendelse af ændringer mislykkedes" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "Intet dokument for %1" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "Erklæring forsvundet under opdatering" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "Erklæring er i den ikke-skrivbare fil %1." + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "Nyt navn:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Omdøb" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Bemærk: Alle overloadede funktioner, overloads, fremad-erklæringer, etc. vil " +"også bliver omdøbt" + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Brugstilfælde" + +#: codegen/simplerefactoring.cpp:445 +msgid "Declaration Info" +msgstr "Erklæringsinfo" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "Omdøber \"%1\" to \"%2\"" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "Anvendelse af ændringer mislykkedes: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Indstil tilpassede include-stier" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "Kunne ikke gemme tilpasset include-sti i mappen: %1" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Tilføj tilpasset include-sti" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Åbn projekt" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "Ikke fundet: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "Markerede ikke noget, føjer ikke til et mål." + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "Kunne ikke finde baseklassen, tilføjer den indirekte: %1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "Ugyldig base-klasse: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Opret lokal erklæring %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "Erklær %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "Erklæring ikke fundet: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Inkluderet" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Inkluderet af" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Definerede makroer" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Funktions macro" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Macro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "Præprocesseret kropsområde:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "Kropsområdet:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "Byggehåndtering for projekt %1 returnerede ikke en bygningsmappe" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"Includer-sti søgeren kræver bygningsmappen til at finde yderligere include-" +"stier. Overvej at sætte en bygningsmappe op i projekthådtering hvis du ikke " +"allerede har gjort det." + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "Byggehåndtering retunerede ikke en include-sti" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"Byggehåndtering retunerede ikke include-stien %1, som kunne være fundet med " +"include-sti søgeren" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Include-sti søger: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Brugte bygningsmappe: \"%1\"\n" +"Include-sti søger: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "Forsøgte med include-sti søgning mens en søgningsproces stadig kørte" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "Makefile mangler i mappen \"%1\"" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "Fejl under forsøg på at finde include-stier for %1" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "Cachet: %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "Filnavnet \"%1\" ser ud til at være dårligt formet" + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "Kunne ikke udtrække ny arbejdsmappe" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "Outputtet var: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "Rekursivt kald til make fejlede" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "" +"Parameterstrengen \"%1\" ser ikke ud til at være gyldig. Output var: %2." + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "Mappen \"%1\" findes ikke. Ouputtet var: %2." + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "Dårlig formet rekursivt kald til make" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "Kunne ikke trække include-stier ud fra make output" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Mappe: \"%1\" Kommando: \"%2\" Output: \"%3\"" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "KDE generator til forwarding header" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "" +"En applikation der laver forwarding headers (som Qt headers) fra kildekode." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "Ophavsret 2006, Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"KDE include-mappe - headers bliver placeret i includes/KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Byggeinformation fra cmakes XML generator" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "#if-udtryk" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "tegn %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "Forventede \"identifier\", fandt %1" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
Token-tekst
%1
Input
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "Forventede \")\", fandt %1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "Divider med nul" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Ugyldig tekst: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "forventede ``:'' = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else uden #if" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "#endif uden #if på linje %1" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Macro fejl" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "Kald til makroen %1 mangler argument nummer %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Formals: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "ugyldigt input: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "Denne fil importerer det nuværende åbnede dokument
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "I include-sti %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Inkluderet gennem %1
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Mappe %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "I %1. include-sti" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Includes" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Include-sti" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "Includers" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "C++-understøttelse" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "Understøttelse af C++-sproget" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "Filer" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "&Skift definering/erklæring" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "Opret n&y klasse" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Omdøb erklæring" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "Flyt ind i kilden" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Tømt af præprocessoren
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "Fortolker inkluderede filer" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "Fortolker aktuel fil" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "Opdaterer ikke duchain for %1" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "Bygger brugtilfælde" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Klar" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "Fil der blev inkluderet rekursivt fra sig selv: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "Inkluderet fil blev ikke fundet: %1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"Gennemsøgte include-stier:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "Kunne ikke åbne filen \"%1\"" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "Filen kunne ikke læses fra." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "Filen kunne ikke åbnes." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "Rettigheder forhindrede læsning af fil." + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Navigation" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Kode" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Morten Anton Bach Sjøgren" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "m_abs@mabs.dk" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "Indstillinger for C++" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Eksportér:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Makro:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Public" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Protected" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Privat" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "Slot" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Signal" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Lagermappe" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"Den tilpassede include-sti vil blive gemt i en særlig fil kaldet \"." +"kdev_include_paths\" i en kildemappe. Den tilpassede sti vil blive brugt mod " +"alle filer under den mappe." + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Lagermappe:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Automatisk løsning" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"Hvis dit projekt bruger simple Makefiler, er det måske muligt automatisk at " +"finde include-stier med værktøjet make. Til dette, sæt en mapping fra en " +"kilde- til en byggemappe her." + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Kildemappe:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Byggemappe:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Brugertilpassede include-stier" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "Du kan tilføje en liste af include-stier her." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"Bemærk: Disse indstillinger påvirker ikke compileren eller projektet, de " +"bruges kun til at finde include headers inden i KDevelop." + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" +"Indstillinger for at flytte private data-felter fra en klasse ind i private " +"struktur" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "Privat struktur navn:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Indstillinger" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

Som standard bliver " +"private implementationsstrukturer erklæret som struct for a have public som standard adgang.

\n" +"

Markér dette felt hvis du " +"ønsker at den private implementationsstruktur skal erklæres som class med public adgang.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Brug klasse i stedet for struct" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

Flyt enhver nuværende " +"variabel som er initaliseret i constructorens initaliseringsliste til den " +"private implementationsstrukturs construktors initaliseringsliste.

\n" +"

\n" +"

Bemærk: Alle referencer og variabler " +"med typer som ikke har en default-constructor bliver flyttet uanset hvad " +"denne indstilling er sat til.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "Flyt initialisering af variabel til en private struktur" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" +"Flyt alle erklærede private metoder til den private implementationsstruktur." + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "Flyt private metoder" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Pointer navn:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "" +"Navnet på medlemsvariablen som vil være pointeren til den private " +"implementation" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/da/kdevcustommake.po kdevelop-4.0.1/po/da/kdevcustommake.po --- kdevelop-3.9.98/po/da/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/da/kdevcustommake.po 2010-07-17 20:09:16.000000000 +0100 @@ -0,0 +1,42 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Morten Anton Bach Sjøgren , 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-02-27 22:08+0100\n" +"Last-Translator: Morten Anton Bach Sjøgren \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Håndtering af hjemmelavet Makefile" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Understøttelse for håndtering af hjemmelavede Makefile-projekter" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Kør" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Morten Anton Bach Sjøgren" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "m_abs@mabs.dk" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/da/kdevelop.po kdevelop-4.0.1/po/da/kdevelop.po --- kdevelop-3.9.98/po/da/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/da/kdevelop.po 2010-07-17 20:09:16.000000000 +0100 @@ -0,0 +1,766 @@ +# Danish translation of kdevelop +# Copyright (C). +# +# Morten Anton Bach Sjøgren 2010. +# Keld Simonsen , 2000-2003. +# Erik Kjær Pedersen , 2002,2003, 2004, 2005, 2006. +# Rune Rønde Laursen , 2004,2005. +# Morten Anton Bach Sjøgren , 2010. +# Martin Schlander , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-19 12:12+0200\n" +"Last-Translator: Martin Schlander \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Kode" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "KDevelop4 projektfiler" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "KDevelop Integreret udviklingsmiljø" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "Ophavsret 1999-2010, KDevelop udviklerne" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "Opret en ny session med angivet navn." + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "" +"Session der skal indlæses. Du kan angive enten hash eller navnet på " +"sessionen." + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "Vis tilgængelige sessioner og afslut" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" +"Tilgængelige sessioner (brug \"-s HASH\" or \"-s NAVN\" til at åbne en " +"specifik session)" + +#: main.cpp:79 +msgid "Hash" +msgstr "Hash" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "Navn: Åbnede projekter" + +#: main.cpp:88 +msgid "[running]" +msgstr "[kører]" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "Angiv den binære fil du ønsker at fejlsøge." + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "Fejlsøgning" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "" +"En session med navnet %1 findes allerede. Brug -s tilvalget til at åbne den." + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"Kan ikke åbne den ukendte session %1. See --sessions tilvalget for at se " +"tilgængelige sessioner eller brug -cs til at oprette en ny." + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "Sessionen %1 kører allerede." + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"Kan ikke starte KDevelop. Den kørbare fil kdevelop mangler i %1. Reparér " +"venligst din KDevelop installation." + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Vedligeholder, Arkitektur, VCS-undersøttelse, Undersøttelse af " +"projekthåndtering, projekthåndtering til QMake" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Arkitektur, sublim UI, Ruby-understøttelse" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Definition-brugs kæde, C++-understøttelse, kode navigation, kodefuldførelse, " +"kodeassistent, refaktorering." + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "CMake-understøttelse, Run-understøttelse, Kross-understøttelse" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "GDB-integration" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Integration af teksteditor, kæde til definition-brug" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "Webadministrator. API-dokumentation, Doxygen- og autoprojekt rettelser" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "GDB-integration, plugins til webudvikling" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "Generisk håndtering, plugins til webudvikling" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "Understøttelse af astyle og indent" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "Distribueret VCS, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "Kodestumper-part, fejlsøger og rettelser til brugervenlighed" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "" +"Subversion-plugin, Håndtering af tilpasset Make, generelle forbedringer" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "" +"Porterede til Qt 3, rettelser, understøttelse af valgrind, diff og perforce" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "C++-fortolker" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "Ophavsmændene til KWrite" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Kate editorkomponent" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Designer kode" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Bidragsydere til ældre versioner:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "Ophavsmændene til KHTML" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "HTML dokumentationskomponent" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "Oprindelig idé, basal arkitektur, meget af den oprindelige kildekode" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, fejlrettelser" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Understøttelse for Java & Objective C" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Grænseflade til fejlsøger" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "PHP-understøttelse, kontekstmenu-ting" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "KDE-program-skabeloner" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Dist part, støtte for bash, program-skabeloner" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Adskillige komponenter, htdig-indeksering" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Hjælp til Automake-håndtering og overlevende klasseopbevaring" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Hjælp med KParts infrastruktur" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Ada-understøttelse" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "QMake projekthåndtering" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "MDI tilstande, QEditor, fejlretninger" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "PartExplorer, omdesign af CvsPart, patcher, fejl(retninger0" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Erstat-, bogmærke-, filliste- og CTags2-plugin. Generelle forbedringer og " +"programrettelser" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Filecreate part og andre stumper og patcher" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "ClearCase-understøttelse" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Ruby-understøttelse" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Fortran dokumentation" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Python dokumentationsredskab" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Doxygen-guide" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Filvælger-komponent" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "Kodefuldførelse til C++, persistent opbevaring af klasser" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Rettelser" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Hjælp med Perl-understøttelse" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Visning af dokumentationsindeks" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Dokumentations-søger, qmake projektmanager lapninger, " +"brugbarhedsforbedringer, fejlrettelser ... " + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "Lapning af QMake projekthåndtering" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "Oprydning og fejlrettelser for qEditor, AutoMake og meget andet" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Grafik for sproget Ruby" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "URL til at indlæse projektet" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Filer at indlæse" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" +"Start fejlsøger, f.eks. GDB. Den binære der skal fejlsøges skal følge - " +"inklusiv argumenter" + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (under KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "Kan ikke finde hjemmehørende type af opstartskonfiguration" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "Kan ikke finde starter %1" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "Kunne ikke åbne %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "&Fil" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "&Redigér" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "&Avanceret" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "&Vis" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "&Kodefoldning" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "Værk&tøjer" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "Ordfuldførelse" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "&Indstillinger" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Hovedværktøjslinje" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "Session" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Projekt" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "&Kør" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Navigation" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Fil" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Redigér" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "Editor" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Kode" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Vindue" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Indstillinger" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Erik Kjær Pedersen,Morten Anton Bach Sjøgren" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "erik@binghamton.edu,m_abs@mabs.dk" + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/da/kdevformatters.po kdevelop-4.0.1/po/da/kdevformatters.po --- kdevelop-3.9.98/po/da/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/da/kdevformatters.po 2010-07-17 20:09:16.000000000 +0100 @@ -0,0 +1,463 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Morten Anton Bach Sjøgren , 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-28 19:57+0200\n" +"Last-Translator: Morten Anton Bach Sjøgren \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "AStye formatere" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "Et formatterings værktøj der bruger astyle" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Artistic Style er et værktøj til indrykkering, formattering og " +"forskønnelses af kildekode for C, C++, C# og Java programmeringssprog
Hjemmeside: http://astyle." +"sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Indrykningsformatering" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "Formatering som bruger indent" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"Indryk og formatér C kildekode.
Programmet \"indent\" kan " +"bruges til at gøre koden nemmere at læse. Den kan også konvertere fra en C-" +"kodestil til en anden
indent forstår en masse omkring C-" +"syntaksen, men forsøger også at håndtere ufærdig og forkert syntaks.
Hjemmeside: http://www.gnu." +"org/software/indent/" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Indrykning" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Tabulatorer" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Tving brug af tabulatorer" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Mellemrum" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"Antallet af mellemrum der vil blive konverteret til en tab.\n" +"Antallet af mellemrum pr. tabulator styres af editoren." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Konvertér tabulatorer til mellemrum." + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Konvertér tabulatorer til &mellemrum" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "Udfyld tomme linjer med blanke tegn fra den forrige linje." + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "Udf&yld tomme linjer" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Indryk" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Blokke" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Kantede parenteser" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "Tilfælde" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Klasse" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Etiketter" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Namespaces" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Præprocessor-direktiver" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "Switches" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"Indryk maksimum # mellemrum i kontinuerligt udtryk,\n" +"relativt til den foregående linje." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Indryk minimum # mellemrum i en sammenhængende conditional\n" +"som tilhører en conditional header." + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Minimum i conditional:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "To gange nuværende" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Maksimum i udtryk:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Andet" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Type" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Opbryd kantede parenteser før lukkede headers (f.eks. 'else', 'catch', ...)\n" +"fra deres forudgående kantede parenteser-slut." + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "Opbry&d lukkede headers" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "Ingen ændring" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Hæng ved" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Stop" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Indsæt en tom linje om ikke-relaterede blokke, labels, klasser,... \n" +"Kendte problemer:\n" +"\n" +"1. Hvis et udtryk ikke er en del af en blok,\n" +"så vil de følgende udtryk få dobbelt linje.\n" +"Udtryk inden i blokke vil blive formateret korrekt.\n" +"\n" +"2. Kommentarer bliver adskilt fra blokken.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "Linjeskift i &blokke" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Som --break-blocks bortset fra den også indsætter tomme linjer\n" +"rundt om lukkede headers (f.eks. 'else', 'catch', ...)\n" +"\n" +"1. Hvis et udtryk ikke er en del af en blok,\n" +"så vil de følgende udtryk få dobbelt linje.\n" +"Udtryk inden i blokke vil blive formatteret korrekt.\n" +"\n" +"2. Kommentarer bliver adskilt fra blokken.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "Opbryd alle bl&okke" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "Opbryd \"else if()\" udtryk i to forskellige linjer." + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "Opbryd i&f-else" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Padding" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Pad parentes" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Fjern padding" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "Kun inden i" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "Kun udenfor" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "Inden i og udenfor" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Indsæt mellemrums padding omkring operatorer.\n" +"Efter padding forbliver operatorerne med padding.\n" +"Der er ingen funktion til at fjerne det." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "Tilføj mellemrum omkring oper&atorer" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "En linier" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "Opbryd ikke linjer med flere udtryk i flere linjer med ét udtryk." + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "&Bibehold en-linje udtryk" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "Opbryd ikke blokke der kun er på én linje." + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "Bibehold en-&linje blokke" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Morten Anton Bach Sjøgren" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "m_abs@mabs.dk" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/da/kdevgdb.po kdevelop-4.0.1/po/da/kdevgdb.po --- kdevelop-3.9.98/po/da/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/da/kdevgdb.po 2010-07-17 20:09:16.000000000 +0100 @@ -0,0 +1,868 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Morten Anton Bach Sjøgren , 2010. +# Martin Schlander , 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-05-31 11:03+0200\n" +"Last-Translator: Martin Schlander \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.0\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "Overvågninger" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "Nylige" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
Gammel værdi: %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
Ny værdi: %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "GDB-understøttelse" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Understøttelse for at køre applikationer i GDB" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Disassemble" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Undersøg kernefil..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Undersøg kernefil" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"Undersøg kernefil

Dette indlæser en kernefil, som typisk er " +"oprettet efter en applikation er gået ned, evt. med en segmentering fejl." +"Kernefilen indeholder et billede af applikationens hukommelse for det " +"tidspunkt den gik ned, hvilket lader dig foretage en efter-døds analyse.

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "Knyt til proces" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "Knyt til proces..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "" +"Knyt til proces

Knytter fejlsøgeren til en kørende proces.

" + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "Evaluér: %1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "Evaluér udtryk

Viser værdien af udtrykket under markøren.

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "Overvåg: %1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Overvåg udtryk

Tilføjer et udtryk under markøren til variable-/" +"overvågningslisten.

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Vælg en kernefil der skal undersøges..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "Undersøger kernefil %1" + +#: debuggerplugin.cpp:372 +msgid "Debug core file" +msgstr "Fejlsøger kernefil" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "Vælg til proces til at knytte til..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "Knytter ikke til proces %1: kan ikke knytte fejlsøgeren til sig selv." + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "Knytter ved proces %1" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "Fejlsøgnings process %1" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Fejlsøger" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"Ingen miljøgruppe er angivet, det ligner en ødelagt konfiguration, tjek " +"venligst kør konfiguration \"%1\". Brug standard miljøgruppe." + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "Fejlsøger stoppet" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "Applikation afbrudt" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "Processen endte" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "Applikationen kører" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "Applikationen er på pause" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"GDB afsluttede unormalt

Dette er sandsynligvis en fejl i GDB. " +"Undersøg GDB's output-vindue og stop så fejlsøgeren" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "GDB afsluttede unormalt" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "" +"GDB-kommando sendt mens fejlsøgeren ikke kører
Kommandoen var:
" +"\"%1\"" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Intern fejl" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Ugyldig fejlsøgerkommando
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "Ugyldig fejlsøgerkommando" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "Afsluttede normalt" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "Afsluttede med signal %1" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "Programmet modtog signal %1 (%2)" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "Kørende program" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"GDB kan ikke bruge enhederne tty* og pty*.\n" +"Tjek indstillingerne for /dev/tty* og /dev/pty*\n" +"Som root vil du måske skulle køre \"chmod ug+rw\" på tty*- og pty*-enhederog/" +"eller føje brugeren til tty-gruppen med \"usermod -G tty username\"" + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Advarsel" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "" +"Fejl i fejlsøger

Fejlsøgeren rapporterede følgende fejl:

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Fejlsøger-fejl" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "1 kommando i køen\n" +msgstr[1] "%1 kommandoer i køen\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "1 kommando bliver behandlet af gdb\n" +msgstr[1] "%1 kommandoer bliver behandlet af gdb\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "Fejlsøgertilstand: %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"Aktuel kommandoklasse: \"%1\"\n" +"Aktuel kommandotekst: \"%2\"\n" +"Originaltekst for aktuel kommando: \"%3\"\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "Fejlsøgerstatus" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "Du skal have gdb 7.0.0 eller nyere.
Du bruger: %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "GDB-fejl" + +#: debugsession.cpp:1417 +msgid "Could not start debugger:
" +msgstr "Kunne ikke starte fejlsøgeren:
" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "Fejl ved opstart" + +#: debugsession.cpp:1429 +msgid "Could not attach debugger:
" +msgstr "Kunne ikke tilknytte fejlsøgeren:
" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"Maskin-kode visning

En maskin-kode visning af din eksekverbare med " +"nuværende instruktion fremhævet. Du kan gå fra instruktion til instruktionen " +"ved at bruge fejlsøger-værktøjslinjens knap for \"gå over\" instruktion og " +"\"gå ind i\" instruktion." + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Disassemble visning" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Address" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Funktion" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Offset" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Instruction" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "Kunne ikke finde fejlsøgnings shell '%1'." + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "Fejlsøgnings-shell ikke fundet" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" +"

Fejlsøgerkomponenten kom ud for en intern fejl under behandling af svar " +"fra GDB. Indsend venligst en fejlreport." + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"Undtagelsen er: %1\n" +"MI svaret er: %2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Intern fejlsøger-fejl" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" +"Kunne ikke starte fejlsøger.

Kunne ikke køre \"%1\". Sørg for at " +"stien er angivet korrekt." + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "Kunne ikke starte fejlsøgeren" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "Konfiguration af GDB" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "Eksekver en nativ applikation i GDB" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "GDB Output" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"GDB-output

Viser alle GDB-kommandoer der eksekveres. Du kan også " +"give andre GDB-kommandoer under fejlsøgningen.

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "&GDB cmd:" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "Stop applikationen for at indtaste GDB-kommandoer" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Vis interne kommandoer" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"Styrer om kommandoer internt fra KDevelop vil blive vist eller ej.
Denne " +"indstilling vil kun påvirke fremtidige kommandoer, den vil ikke tilføje " +"eller fjerne kommandoer er udført fra visningen." + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "Kopiér alle" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Start" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "Mængde" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "O.k." + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Annullér" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Hukommelsesvisning" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (1 byte)" +msgstr[1] "%2 (%1 bytes)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Skift hukommelses range" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Genindlæs" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Luk denne visning" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Særlige fejlsøgningsvisninger" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "Knyt til proces" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Vælg kernefil" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "kdevelop: Fejlsøger applikationskonsole" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Indstil fejlsøger" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Fejlsøger eksekverbar:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "GDB eksekverbar" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"For at køre GDB fra $PATH, lad dette felt stå tomt. For at køre en tilpasset " +"GDB, f.eks. fra en anden arkitektur, indtast programmets navn her. Du kan " +"enten køre GDB fra $PATH men med et andet navn (som \"arm-gdb\"), ved " +"indtaste navnet her eller ved at angive den fulde sti til gdb-programfilen." + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "Kør GDB i en særlig skal (mest for automake projekter)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"Hvis du ønsker at GDB skal afvikles fra en særlig skal eller værktøj indsæt " +"det her. Det almindelige brugstilfælde er Automake baserede projekter hvor " +"applikationen kun er et script og libtool er nødvendig for at få det til at " +"køre i GDB." + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "Fejlsøgnings &shell:" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"Hvis du ønsker at GDB skal afvikles fra en særlig skal eller værktøj indsæt " +"det her. Det almindelige brugstilfælde er Automake baserede projekter hvor " +"applikationen kun er et script og libtool er nødvendig for at få det " +"til at køre i GDB." + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Indstillinger" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"Visning af statiske medlemmer gør GDB langsommere\n" +"til at producere data inden i KDE og Qt.\n" +"Det ændre muligvis \"signaturen\" af dataen\n" +"som QString med venner afhænger af.\n" +"men hvis du har behov for at fejlsøge disse værdier\n" +"slå denne indstilling til." + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Vis statiske &medlemmer" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"Når der vises disassembled kode kan du\n" +"vælge at se metodernes behandlede navne.\n" +"Dog vil ikke-behandlede navn være nemmere at læse." + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "Vis &forskruede navne" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"Hvis GDB ikke har set et bibliotek som vil blive indlæst via\n" +"\"dlopen\" så vil den nægte at sætte et stoppunk i den kode.\n" +"Med denne indstilling, vil GDB forsøge at stoppe ved indlæsning\n" +"og derefter forsøge at sætte afventende stoppunkt. Se\n" +"dokumentationen for flere detaljer om denne opførsel.\n" +"\n" +"Hvis du ikke benytter \"dlopen\" lad denne indstilling være slået fra." + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "Prøv at sætte stop&punkt ved indlæsning af bibliotek" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"Dette lader dig indtaste terminal input når din\n" +"applikation har terminal input kode (som cin, fgets osv.).\n" +"Hvis du bruger terminal input i din applikation slå denne indstilling til.\n" +"Ellers lad den være slået fra." + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "Aktiver speparat terminal til applikations-&IO" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"Dette script er beregnet kommandoer som er nødvendige for forbindelse fjernt " +"kørende programmer.\n" +"\tshell sleep 5\tvent på at fjernt program starter\n" +"\ttarget remote ...\tforbind til den fjerne fejlsøger\n" +"\tcontinue\t[valgfri] kør fejlsøgning til det første stoppunkt." + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "Ekstern fejlsøgning" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "&Indstil GDB-script:" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "Indstil GDB script" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "Dette er sourced af gdb når fejlsøgningen starter." + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "Kør shell sc&ript:" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "Script til at starte fjern applikation" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"Dette skal script efter konfig-GDB scriptet er blevet sourced af GDB.\n" +"Når man fejlsøger fjernt kørende programmer er dette script beregnet til at " +"starte en fjern proces.\n" +"(Det forventes at fejlsøgerens kørbare kan nås på målet, muligvis ved at " +"hente den som et endeligt skridt i bygningen)\n" +"1) Find en måde at køre en fjern kommando - rsh, ssh, telnal, ...\n" +"2a) Kør \"gdbserver ... applikation\" on target.\n" +"eller hvis din applikation indeholder GDB-stub\n" +"2b) Kør \"applikation\" på målet." + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "Kør &GDB-script:" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "Script til at starte fjern applikation" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"Dette script bliver sourced af GDB efter de to foregående scripts er blevet " +"kørt.\n" +"Dette script er beregnet kommandoer som er nødvendige for forbindelse fjernt " +"kørende programmer.\n" +"\tshell sleep 5\tvent på at fjernt program starter\n" +"\ttarget remote ...\tforbind til den fjerne fejlsøger\n" +"\tcontinue\t[valgfri] kør fejlsøgning til det første stoppunkt." + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "Indstil tracing" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"Slå sporring til\n" +"

Sporring er en mekanisme der automatisk skriver værdier ud fra valgte " +"udtryk og forsætter afviklingen når stoppunkt er nået. Du kan se det som " +"printf-fejlsøgning der ikke kræver ændring af kildekoden.

" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Aktiver tracing" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "Hjemmelavet formateringsstreng" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"Tilpasset format streng\n" +"

Angiv et C-stil format streng som vil blive brugt når det valgte udtryk " +"udskrives. Eksempel:\n" +"

Sporingspoint 1: g = %d

\n" +"Hvis tilpasset format streng ikke er slået til, vil navne og værdier for " +"alle udtryk blive udskrevet med \"%d\" som format angiver for alle udtryk." + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "Udtryk til at printe:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Kør" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Fejlsøgerværktøjslinje" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Eksekverbar:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Kernefil:" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Morten Anton Bach Sjøgren" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "m_abs@mabs.dk" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/da/kdevmakebuilder.po kdevelop-4.0.1/po/da/kdevmakebuilder.po --- kdevelop-3.9.98/po/da/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/da/kdevmakebuilder.po 2010-07-17 20:09:16.000000000 +0100 @@ -0,0 +1,168 @@ +# Danish translation of kdevmakebuilder +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Morten Anton Bach Sjøgren , 2010. +# Martin Schlander , 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-18 14:37+0100\n" +"Last-Translator: Martin Schlander \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Make-bygger" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Understøttelse for at bygge Make-projekter" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Ugyldig bygningsmappe \"%1\"" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "Kunne ikke oprette byggekommando for målet \"%1\"" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "Jobbet mislykkedes" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Mislykkedes ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Gennemført ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** Afbrudt ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "kompilere" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "genererer" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "linker" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "bygget" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "installerer" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "opretter" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Vis" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Afbryd ved første fejl:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Vis kommandoer men kør dem ikke:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Installér som root:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Kommando til root-installation:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Antal samtidige jobs:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Programmet Make:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Standard make-mål:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Yderligere make-indstillinger:" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Profil for aktivt miljø:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Morten Anton Bach Sjøgren" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "m_abs@mabs.dk" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/da/kdevqthelp.po kdevelop-4.0.1/po/da/kdevqthelp.po --- kdevelop-3.9.98/po/da/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/da/kdevqthelp.po 2010-07-17 20:09:16.000000000 +0100 @@ -0,0 +1,69 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Morten Anton Bach Sjøgren , 2010. +# Martin Schlander , 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-18 14:50+0100\n" +"Last-Translator: Martin Schlander \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "Kunne ikke finde nogen dokumentation til \"%1\"" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "QtHelps hjemmeside" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Tjek Qt Help-dokumentationen" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Morten Anton Bach Sjøgren" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "m_abs@mabs.dk" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "Identifikator at søge efter:" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "Hjælpeside:" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "about:blank" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "Fejlsøgningsinfo:" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/de/CMakeLists.txt kdevelop-4.0.1/po/de/CMakeLists.txt --- kdevelop-3.9.98/po/de/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/de/CMakeLists.txt 2010-07-17 20:09:20.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(de ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/de/kdevcmakebuilder.po kdevelop-4.0.1/po/de/kdevcmakebuilder.po --- kdevelop-3.9.98/po/de/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/de/kdevcmakebuilder.po 2010-07-17 20:09:20.000000000 +0100 @@ -0,0 +1,95 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Burkhard Lück , 2008. +# Thomas Reitelbach , 2009. +# Frederik Schwarzer , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-11 18:32+0200\n" +"Last-Translator: Frederik Schwarzer \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "CMake-Builder" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Unterstützung für die Erstellung von CMake-Projekten" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "Es ist kein Ordner zum Erstellen eingerichtet; kann nicht erstellen" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "Erstellen wird abgebrochen" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "Es ist kein Ordner zum Erstellen eingerichtet; kann nicht aufräumen" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "Aufräumen wird abgebrochen" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "Es ist kein Ordner zum Erstellen eingerichtet; kann nicht installieren" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "Installieren wird abgebrochen" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "" +"Es ist kein Ordner zum Erstellen eingerichtet; kann nicht konfigurieren" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "Konfigurieren wird abgebrochen" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "" +"Es ist kein Ordner zum Erstellen eingerichtet; kann Erstellen-Ordner nicht " +"leeren" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "Leeren des Erstellen-Ordners ist nicht möglich" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "Auftrag fehlgeschlagen" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "CMake-Programmdatei:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frederik Schwarzer" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "schwarzerf@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/de/kdevcmake.po kdevelop-4.0.1/po/de/kdevcmake.po --- kdevelop-3.9.98/po/de/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/de/kdevcmake.po 2010-07-17 20:09:20.000000000 +0100 @@ -0,0 +1,474 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Burkhard Lück , 2008, 2009. +# Thomas Reitelbach , 2009. +# Frederik Schwarzer , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-07-05 17:54+0200\n" +"Last-Translator: Frederik Schwarzer \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.0\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "CMake-Dokumentation" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Unterstützung für CMake-Dokumentation" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Wert im Zwischenspeicher: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "Befehle" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Variable" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "Modul" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "Eigenschaft" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "Regelungen" + +#: cmakehelpdocumentation.cpp:42 +#, fuzzy +#| msgid "CMake Manager" +msgid "CMake Content Page" +msgstr "CMake-Verwaltung" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 ist ein veralteter Befehl und sollte nicht mehr verwendet werden" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Unvollständige Funktion." + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Name" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Typ" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Wert" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Kommentar" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Erweitert" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"Der Ordner %1 wird aus der Liste von KDevelop entfernt.\n" +"Soll KDevelop den Ordner auch aus dem Dateisystem entfernen?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "Löschen fehlgeschlagen: %1.\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "Far&ben wechseln" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "Allgemein" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "Das Projekt ist einen Tag alt" +msgstr[1] "Dieses Projekt ist %1 Tage alt" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "Die Einstellungen wurden geändert" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "KDE-4-Anwendung" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "(C) 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Zu öffnendes Dokument" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Richten Sie einen Build-Ordner ein" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "Richten Sie einen Build-Ordner für %1 ein" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "Sie müssen eine CMake-Programmdatei wählen." + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "Sie müssen einen Build-Ordner angeben." + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "Es wird ein bereits erstellter Build-Ordner verwendet." + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "Es wird ein neuer Build-Ordner erstellt." + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "Es ist bereits ein Build-Ordner eingerichtet." + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "Der Build-Ordner ist für %1, aber der Projektordner ist %2." + +#: cmakebuilddirchooser.cpp:172 +#, fuzzy +#| msgid "You need to specify a build directory" +msgid "You may not select a relative build directory." +msgstr "Sie müssen einen Build-Ordner angeben" + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "Der gewählte Build-Ordner ist nicht leer." + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "CMake-Verwaltung" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Unterstützung zur Verwaltung von CMake-Projekten" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Zur Zieldefinition springen" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Der Ordner „%1“ wird erstellt." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop – CMake-Unterstützung" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "" +"Die zum Ordner gehörige Datei „CMakeLists.txt“ kann nicht erstellt werden." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "Die Änderung kann nicht gespeichert werden." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Der Ordner „%1“ wird entfernt." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Die Datei „%1“ wird entfernt." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Eine Datei namens „%1“ zum Ziel „%2“ hinzufügen." + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "Die Änderung kann nicht gespeichert werden." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "Der Ordner „%1“ wird entfernt." + +#: cmakeutils.cpp:84 +#, fuzzy +#| msgid "" +#| "The %1 build directory is not valid. It will be removed from the list" +msgid "The build directory did not exist and could not be created." +msgstr "Der Build-Ordner %1 ist ungültig. Er wird von der Liste entfernt." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Beim Erstellen des Build-Ordners ist ein Fehler aufgetreten" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "UNGÜLTIG" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Befehl" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Makro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Pfad" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "CMake-&Programmdatei:" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "&Build-Ordner:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "&Installations-Präfix:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "Build-&Typ:" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"Es wurden mehrere mögliche Projekt-Ordner gefunden. Bitte wählen Sie den " +"richtigen." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frederik Schwarzer" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "schwarzerf@gmail.com" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "&Verschieben" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Hinzufügen" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Entfernen" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Wert im Zwischenspeicher" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Kommentar:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Erweiterte anzeigen" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "CMake-Ordner" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Erweiterte Werte anzeigen" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "Hallo Welt" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Hintergrundfarbe:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Wählen Sie eine neue Hintergrundfarbe" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Ändern Sie die Hintergrundfarbe, indem Sie hier klicken und " +"eine neue Farbe aus dem Farbwähler auswählen.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Alter des Projekts:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Vordergrundfarbe:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Wählen Sie eine neue Vordergrundfarbe" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Ändern Sie die Vordergrundfarbe, indem Sie hier klicken und die " +"neue Farbe aus dem Farbwähler auswählen.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Geben Sie das Alter des Projekts in Tagen an" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "" +"Ändern Sie das Alter des Projekts in Tagen, indem Sie eine neue Zahl " +"auswählen." \ No newline at end of file diff -Nru kdevelop-3.9.98/po/de/kdevcpp.po kdevelop-4.0.1/po/de/kdevcpp.po --- kdevelop-3.9.98/po/de/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/de/kdevcpp.po 2010-07-17 20:09:20.000000000 +0100 @@ -0,0 +1,901 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Burkhard Lück , 2008, 2009. +# Arndt Braun , 2008, 2009. +# Frederik Schwarzer , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-07-05 17:55+0200\n" +"Last-Translator: Frederik Schwarzer \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "Nicht inkludiert" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Initialisieren" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Nicht inkludierter Container" + +#: codecompletion/context.cpp:1272 +#, kde-format +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "Eine Überladung von %2" +msgstr[1] "%1 Überladungen von %2" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "Verbinden mit %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Signale/Slots" + +#: codecompletion/context.cpp:1486 +#, fuzzy +#| msgid "Override" +msgid "Virtual Override" +msgstr "Überschreiben" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Funktion Implementieren" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "C++-Builtin" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Überschreiben" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Implementieren" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Slot erstellen" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "Von: %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Include-Direktive hinzufügen" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Forwärtsdeklaration hinzufügen" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "Vorwärtsdeklaration" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Abbrechen" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Anwenden folgender Änderungen fehlgeschlagen: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"Wiederverwenden „Refactoring“ ist eine experimentelles Modul, das Ihren Code " +"beschädigen könnte. Bitte erstellen Sie ein Backup, bevor Sie diese Funktion " +"verwenden." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "%1 umbenennen" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Klasse erstellen" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "Keine Deklaration unter dem Cursor" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "Für %1 ist keine Source-Datei verfügbar." + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "DU-Chain für %1 kann nicht aktualisiert werden." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "Zu dieser Deklaration kann keine Definition erstellt werden." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "Einfügen fehlgeschlagen" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "Anwenden der Änderungen fehlgeschlagen" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "Kein Dokument für %1" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "Deklarationen beim Aktualisieren verloren" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "" + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "Neuer Name:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Umbenennen" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Anmerkung: Alle überladenen Funktionen, Überladungen, Vorwärtsdeklarationen " +"usw. werden umbenannt in" + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Vorkommen" + +#: codegen/simplerefactoring.cpp:445 +#, fuzzy +#| msgid "Declarations:" +msgid "Declaration Info" +msgstr "Deklarationen:" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "„%1“ in „%2“ umbenennen" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "Anwenden folgender Änderungen fehlgeschlagen: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Eigene Include-Pfade einrichten" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Eigenen Include-Pfad hinzufügen" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Projekt öffnen" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "Nicht gefunden: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "" + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "Ungültige Basisklasse: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Lokale Deklaration %1 %2 erstellen" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, fuzzy, kde-format +#| msgid "character %1" +msgid "Declare %1 %2 %3" +msgstr "Zeichen %1" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "Deklaration nicht gefunden: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Inkludiert" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Inkludiert von" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Definierte Makros" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Funktionsmakro" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Makro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +#, fuzzy +msgid "Preprocessed body:" +msgstr "Vorprozessierter Körper:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +#, fuzzy +msgid "Body:" +msgstr "Körper:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "" +"Die Build-Verwaltung für das Projekt %1 hat keinen Build-Ordner zurückgegeben" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"Der Include-Pfad-Auflöser benötigt einen Build-Ordner, um zusätzliche " +"Include-Pfade aufzulösen. Versichern Sie sich, dass Sie in der " +"Projektverwaltung einen Build-Ordner angegeben haben. " + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "Die Build-Verwaltung hat keinen Include-Pfad zurückgegeben" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"Die Build-Verwaltung hat nicht den Include-Pfad %1 zurückgegeben, der durch " +"den Incude-Pfad-Parser ermittelt wurde" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Include-Pfad-Auflöser: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Verwendeter Build-Ordner: „%1“\n" +"Include-Pfad-Auflöser: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" +"Es wurde versucht, die Include-Pfade aufzulösen während ein anderer " +"Auflösungsprozess läuft" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "Das Makefile ist nicht im Ordner „%1“ " + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "Beim Auflösen des Include-Pfades für „%1“ ist ein Fehler aufgetreten" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "Zwischengespeichert: %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "Der Dateiname „%1“ scheint ungültig zu sein" + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "Die Ausgabe lautet: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "Rekursiver Make-Aufruf fehlgeschlagen" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "" +"Der Parameterstring „%1“ scheint nicht in Ordnung zu sein. Die Ausgabe " +"lautet: %2." + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "Der Ordner „%1“ existiert nicht. Die Ausgabe lautet: %2." + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "Ungültiger rekursiver Make-Aufruf" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "Die Inklude-Pfade können nicht aus der Make-Ausgabe extrahiert werden" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Ordner: „%1“ Befehl: „%2“ Ausgabe: „%3“" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "KDE-„forwarding header“-Generator" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "" +"Eine Anwendung, die „forwarding header“, (wie Qt-Header) aus dem Quellcode " +"erzeugt." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "© 2006, Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"KDE-Include-Ordner – Header werden in includes/" +"KDE abgelegt" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Erstellungsinformationen vom CMake-XML-Generator" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "Unterminiertes #if-Konstrukt" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "Zeichen %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "„Identifier“ erwartet; %1 gefunden" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
Token-Text
%1
Eingabe
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "„)“ erwartet; „%1“ gefunden" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "Division durch Null" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Eingabetext: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "erwartet``:'' = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else ohne #if" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "#endif ohne #if bei Ausgabezeile %1" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Makrofehler" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "Beim Aufruf des Makros %1 fehlt das Argument %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Formalien: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "Ungültige Eingabe: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "Diese Datei importiert das aktuell geöffnete Dokument
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "Im Include-Pfad %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Inkludiert durch %1
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Ordner %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "Im %1. Include-Pfad" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Inkludiert" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Include-Pfad" + +#: quickopen.cpp:479 quickopen.cpp:486 +#, fuzzy +msgid "Includers" +msgstr "Inkludierende" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "C++-Unterstützung" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "Unterstützung für die Sprache C++" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "Dateien" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "Zwischen Definition/Deklaration &wechseln" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "Neue &Klasse erzeugen" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Deklaration umbenennen" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "In die Source-Datei verschieben" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Durch den Präprozessor geleert
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "Include-Pfade werden eingelesen" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "Datei wird eingelesen" + +#: cppparsejob.cpp:572 +#, fuzzy, kde-format +#| msgid "Failed to update DU chain for %1." +msgid "Not updating duchain for %1" +msgstr "DU-Chain für %1 kann nicht aktualisiert werden." + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "Vorkommen werden erzeugt" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Bereit" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "Die Datei wurde rekursiv von sich selbst inkludiert: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "Inkludierte Datei kann nicht gefunden werden: %1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"Include-Pfad durchsucht:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "Die Datei „%1“ kann nicht geöffnet werden" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "Aus der Datei kann nicht gelesen werden." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "Die Datei kann nicht geöffnet werden." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "Die Dateiberechtigungen verhindern das Öffnen der Datei zum Lesen." + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Navigation" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Quelltext" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frederik Schwarzer" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "schwarzerf@gmail.com" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "C++-Optionen" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Exportieren:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Makro:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Public" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Protected" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Private" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "Slot" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Signal" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Speicherordner" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Speicherordner:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Automatische Auflösung" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Quellordner:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Erstellen-Ordner:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Eigene Include-Pfade" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "Sie können hier eine Liste eigener Include-Pfade eingeben." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Optionen" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

Voreingestellt werden " +"private Implementationsstrukturen als Structs deklariert, um „public“-Zugriff zu haben.

\n" +"

Wählen Sie dieses " +"Ankreuzfeld, wenn Sie private Implementationsstrukturen als Klassen mit „public“-Zugriff deklarieren möchten." +"

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Klassen anstatt Structs verwenden" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Name des Zeigers:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "" +"Der Name der Member-Variable, die als Zeiger auf private " +"Implementationsstrukturen verwendet wird." + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/de/kdevcustommake.po kdevelop-4.0.1/po/de/kdevcustommake.po --- kdevelop-3.9.98/po/de/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/de/kdevcustommake.po 2010-07-17 20:09:20.000000000 +0100 @@ -0,0 +1,44 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Burkhard Lück , 2008. +# Thomas Reitelbach , 2009. +# Frederik Schwarzer , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-11 18:32+0200\n" +"Last-Translator: Frederik Schwarzer \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Verwaltung für eigene Makefiles" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Unterstützung für die Verwaltung eigener Makefiles" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Ausführen" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frederik Schwarzer" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "schwarzerf@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/de/kdevelop.po kdevelop-4.0.1/po/de/kdevelop.po --- kdevelop-3.9.98/po/de/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/de/kdevelop.po 2010-07-17 20:09:20.000000000 +0100 @@ -0,0 +1,3065 @@ +# translation of kdevelop.po to German +# Übersetzung von kdevelop.po ins Deutsche +# Copyright (C) +# Stephan Johach , 2003, 2006. +# Stephan Johach , 2003, 2004, 2005, 2006. +# Thomas Diehl , 2003, 2004. +# Thomas Reitelbach , 2005, 2006, 2007. +# Burkhard Lück , 2006, 2007, 2008, 2009. +# Frederik Schwarzer , 2008, 2009. +# Arndt Braun , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2009-11-27 10:38+0100\n" +"Last-Translator: Frederik Schwarzer \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Project-Version: KDevelop-1.1\n" +"German messages for KDevelop\n" +"Martin Piskernig , 1999, 2000.\n" +"Ralf Funken , 2000\n" +"Stefan Winter , 2001\n" +"Stephan Johach , 2001\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Code" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "KDevelop-4-Projektdateien" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "Die integrierte Entwicklungsumgebung KDevelop" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "" + +#: main.cpp:64 main_internal.cpp:85 +#, fuzzy +#| msgid "Copyright 1999-2009, The KDevelop developers" +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "Copyright 1999-2009, Die KDevelop-Entwickler" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "" + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "" + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" + +#: main.cpp:79 +msgid "Hash" +msgstr "" + +#: main.cpp:79 +#, fuzzy +#| msgid "Open Project" +msgid "Name: Opened Projects" +msgstr "Projekt öffnen" + +#: main.cpp:88 +#, fuzzy +#| msgid "Running" +msgid "[running]" +msgstr "Läuft" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "" + +#: main.cpp:108 main_internal.cpp:151 +#, fuzzy +#| msgid "&Debug" +msgid "Debug" +msgstr "Debu&ggen" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "" + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "" + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Betreuer, Architektur, VCS-Unterstützung, Unterstützung für " +"Projektverwaltung, QMake-Projektmanager" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Architektur, Sublime UI, Ruby-Unterstützung" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Definition-Use-Chain, C++-Unterstützung, Code-Navigation, Code-" +"Vervollständigung, Programmierhilfen, Refaktorisierung" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "CMake-, Run- und Kross-Unterstützung" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "GDB-Integration" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Text-Editor-Integration, Definition-Use-Chain" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "" +"Betreuung der Webseite, API-Dokumentation, Patches für Doxygen und " +"Autoprojekt" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "Unterstützung für AStyle und Einrückungen" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "Verteilte Versionskontrollsysteme, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "Schnipsel-Komponente, Debugger und Verbesserung der Bedienbarkeit" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "" +"Unterstützung für Subversion, Custom-Make-Verwaltung, allgemeine " +"Verbesserungen" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "" +"Portierung auf Qt 3, Patches, Valgrind, Unterstützung für Diff und Perforce" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "C++-Parser" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "Die KWrite-Autoren" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Kate-Editor-Komponente" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Designer-Code" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Beitragende früherer Versionen:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "Die KHTML-Autoren" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "Komponente für HTML-Dokumentation" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "" +"Ursprüngliche Idee, grundlegende Architektur, ein Großteil des " +"ursprünglichen Quelltextes" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, Fehlerkorrekturen" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Unterstützung für Java und Objective-C" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Debugger-Oberfläche" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "PHP-Unterstützung, Kontextmenüs" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "KDE-Anwendungsvorlagen" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Komponente für Dist, Bash-Unterstützung, Anwendungsvorlagen" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Verschiedene Komponenten, htdig-Indizierung" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "" +"Unterstützung bei der Automake-Verwaltung und der persistenten " +"Klassenspeicherung" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Unterstützung für die Infrastruktur von KParts" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Ada-Unterstützung" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "QMake-Projektverwaltung" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "MDI-Modi, QEditor, Fehlerkorrekturen" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "PartExplorer, Überarbeitung des CvsPart, Patches, Fehlerkorrekturen" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Komponenten Ersetzen und Lesezeichen, Dateiliste und CTags2, allgemeine " +"Verbesserungen und Patches" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Filecreate-Part und sonstiger Krimskrams" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "Unterstützung für ClearCase" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Unterstützung für Ruby" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Fortran-Dokumentation" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Hilfsprogramm für Python-Dokumentation" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Doxygen-Assistent" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Dateiauswahl-Komponente" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "C++-Autovervollständigung, persistenter Klassenspeicher" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Patches" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Hilfe bei der Perl-Unterstützung" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Index-Ansicht für die Dokumentation" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Dokumentationssuche, QMake-Projektverwaltung, Verbesserungen der " +"Bedienbarkeit, Fehlerkorrekturen ... " + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "Patches zum QMake-Projektmanager" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "" +"Aufräumen des Quellcodes und Fehlerkorrekturen für qEditor, Automake und " +"vieles andere." + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Künstlerische Beiträge für die Ruby-Unterstützung" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "Adresse des zu öffnenden Projekts" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Zu ladende Dateien" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (mit KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "%1 kann nicht geöffnet werden" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "&File" +msgid "&File" +msgstr "&Datei" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "&Edit" +msgid "&Edit" +msgstr "&Bearbeiten" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +#, fuzzy +#| msgid "Advanced" +msgid "&Advanced" +msgstr "Erweitert" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "&View" +msgid "&View" +msgstr "&Ansicht" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "Tools" +msgid "&Tools" +msgstr "Extras" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +#, fuzzy +#| msgid "Import options:" +msgid "Word Completion" +msgstr "Import-Einstellungen:" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "Settings" +msgid "&Settings" +msgstr "Einstellungen" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Haupt-Werkzeugleiste" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "Sessions" +msgctxt "@title:menu" +msgid "Session" +msgstr "Sitzungen" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Projekt" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "&Ausführen" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Navigation" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Datei" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Bearbeiten" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "Edit" +msgctxt "@title:menu" +msgid "Editor" +msgstr "Bearbeiten" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Code" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Fenster" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Einstellungen" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" +"Martin Piskernig, Ralf Funken, Stefan Winter, Stephan Johach, Frederik " +"Schwarzer, Arndt Braun" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +",,kickdown@online.de, hunsum@gmx.de, schwarzerf@gmail.com, " +"arndtbraun@googlemail.com" + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/de/kdevformatters.po kdevelop-4.0.1/po/de/kdevformatters.po --- kdevelop-3.9.98/po/de/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/de/kdevformatters.po 2010-07-17 20:09:20.000000000 +0100 @@ -0,0 +1,469 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Burkhard Lück , 2008. +# Arndt Braun , 2008, 2009. +# Frederik Schwarzer , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-11-27 09:50+0100\n" +"Last-Translator: Frederik Schwarzer \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "AStyle-Formatierer" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "Ein Quelltext-Formatierer, der AStyle verwendet" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Artistic Style ist ein Quelltext-Einrücker, -Formatierer und -" +"Verschönerer für die Programmiersprachen C, C++, C# und Java.
Webseite: " +"http://astyle.sourceforge.net/" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Indent-Formatierer" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "Ein Quelltext-Formatierer, der Indent verwendet" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"C-Quelltexte einrücken und formatieren.
Indent kann verwendet " +"werden, um Code leichter lesbar zu machen, oder um Quelltexte von einem Stil " +"in einen anderen zu konvertieren.
Indent kann mit vielen Teilen " +"der C-Syntax umgehen, versteht aber auch falsch formatierte Systax.
Webseite: http://www.gnu." +"org/software/indent/" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Einrückung" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Tabulatoren" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Tabulatoren erzwingen" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Leerzeichen" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"Anzahl der Leerzeichen, die in einen Tabulator umgewandelt werden.\n" +"Die Anzahl der Leerzeichen für einen Tabulator werden vom Editor bestimmt." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Tabulatoren in Leerzeichen umwandeln." + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Tabulatoren in &Leerzeichen umwandeln" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "Leere Zeilen mit den Leerzeichen der vorherigen Zeilen füllen." + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "Leere Zeilen &füllen" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Einrücken" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Blöcke" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Klammern" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "Cases" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Klasse" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Labels" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Namensräume" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Prozessor-Direktiven" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "Switches" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"Maximal # Leerzeichen in einem zusammenhängenden\n" +"Statement, relativ zur vorigen Zeile, einrücken." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Mindestens # Leerzeichen in einer zusammenhängenden\n" +"Verzweigung, die zu einem Verzweigungskopf gehört, einrücken." + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Minimum in Verzweigung:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "Doppeltes vom aktuellen" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Maximum im Ausdruck:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Andere" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Typ" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Vor schließenden Klammern umbrechen, wenn ein beendender\n" +"Block-Header (z. B. else, catch ...) beginnt." + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "Beendende Block-Header umbrechen" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "Keine Änderung" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Anhängen" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Umbrechen" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Leerzeilen um nicht zusammenhängende Blöcke, Klassen, Beschriftungen usw. " +"einfügen:\n" +"Bekannte Probleme:\n" +"\n" +"1. Falls ein Ausdruck nicht Teil eines Blockes ist,\n" +"werden die folgenden Ausdrücke mit doppelten Leerzeichen ausgegeben.\n" +"Ausdrücke innerhalb von Blöcken werden korrekt formatiert.\n" +"\n" +"2. Kommentare werden von dem Block getrennt.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "&Blöcke durch Leerzeilen trennen" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Wie --break-blocks, bis auf das Einfügen von Leerzeilen\n" +"um beendende Block-Header (z. B. else, catch ...).\n" +"\n" +"Bekannte Probleme:\n" +"\n" +"1. Falls ein Ausdruck nicht Teil eines Blockes ist,\n" +"werden die folgenden Ausdrücke mit doppelten Leerzeichen ausgegeben.\n" +"Ausdrücke innerhalb von Blöcken werden korrekt formatiert.\n" +"\n" +"2. Kommentare werden von dem Block getrennt.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "Alle Blöcke &durch Leerzeilen trennen" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "Verteilt „else if()“-Anweisungen auf zwei Zeilen." + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "else i&f() umbrechen" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Auffüllen" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Klammern absetzen" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Nicht absetzen" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "Nur innen" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "Nur außen" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "Innen und außen" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Auffüllen von Leerzeichen um Operatoren.\n" +"Einmal aufgefüllt bleiben die Operatoren aufgefüllt.\n" +"Es gibt kein Operation um auffüllen rückgängig zu machen." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "&Leerzeichen um Operatoren einfügen" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "Einzeiler" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" +"Zeilen mit mehreren Ausdrücken in einer Zeile nicht in\n" +"einen Ausdruck pro Zeile umbrechen." + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "Ein&zeilige Ausdrücke beibehalten" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "Blöcke, die sich komplett auf einer Zeile befinden, nicht umbrechen." + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "E&inzeilige Blöcke beibehalten" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frederik Schwarzer" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "schwarzerf@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/de/kdevgdb.po kdevelop-4.0.1/po/de/kdevgdb.po --- kdevelop-3.9.98/po/de/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/de/kdevgdb.po 2010-07-17 20:09:20.000000000 +0100 @@ -0,0 +1,965 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Burkhard Lück , 2008, 2009. +# Frederik Schwarzer , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcppdebugger\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-11-27 10:41+0100\n" +"Last-Translator: Frederik Schwarzer \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
Alter Wert: %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
Neuer Wert: %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "GDB-Unterstützung" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Unterstützung für die Ausführung von Programmen in GDB" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Disassemblieren" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Core-Dateien untersuchen ..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Core-Datei untersuchen" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "An einen Prozess hängen" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "An einen Prozess hängen ..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "" +"An einen Prozess hängen

Hängt den Debugger an einen laufenden " +"Prozess an.

" + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "Auswerten: %1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "" +"Ausdruck auswerten

Zeigt den Wert des Ausdrucks unter dem " +"Mauszeiger an.

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "Beobachten: %1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Ausdruck beobachten

Fügt den Ausdruck unter dem Mauszeiger der " +"Beobachtungsliste hinzu.

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Wählen Sie die zu untersuchende Core-Datei ..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "Core-Datei %1 wird untersucht" + +#: debuggerplugin.cpp:372 +#, fuzzy +#| msgid "Examine core file" +msgid "Debug core file" +msgstr "Core-Datei untersuchen" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "" +"Wählen Sie einen Prozess, an den der Debugger angehängt werden soll ..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "" + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Debugger" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "Debugger angehalten" + +#: debugsession.cpp:198 +#, fuzzy +#| msgid "Application does not exist" +msgid "Application interrupted" +msgstr "Das Programm existiert nicht " + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "Prozess beendet" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "Die Anwendung läuft" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "Die Anwendung ist angehalten" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Interner Fehler" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Ungültiger Debugger-Befehl
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "Ungültiger Debugger-Befehl" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Achtung" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Debugger-Fehler" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "Ein Befehl in der Warteschlange\n" +msgstr[1] "%1 Befehle in der Warteschlange\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "Ein Befehl wird von GDB verarbeitet\n" +msgstr[1] "%1 Befehle werden von GDB verarbeitet\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "Debugger-Status: %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "Debugger-Status" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "Sie benötigen GDB 7.0.0 oder neuer.
Sie verwenden: %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "GDB-Fehler" + +#: debugsession.cpp:1417 +#, fuzzy +#| msgid "Could not start debugger" +msgid "Could not start debugger:
" +msgstr "Debugger kann nicht gestartet werden" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "" + +#: debugsession.cpp:1429 +#, fuzzy +#| msgid "Could not start debugger" +msgid "Could not attach debugger:
" +msgstr "Debugger kann nicht gestartet werden" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Disassembler-Ansicht" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Adresse" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Funktion" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Offset" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Instruktion" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "" + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Interner Debugger-Fehler" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "Debugger kann nicht gestartet werden" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "GDB-Konfiguration" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "GDB-Ausgabe" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "&GDB-Befehl:" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "Ausführung der Anwendung anhalten um GDB-Befehl einzugeben" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Interne Befehle anzeigen" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "Alle kopieren" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Start" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "OK" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Abbrechen" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Speicher-Ansicht" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (1 Byte)" +msgstr[1] "%2 (%1 Bytes)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Speicherbereich ändern" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Neu laden" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Diese Ansicht schließen" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Spezielle Debugger-Ansichten" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "An einen Prozess hängen" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Core-Dateien auswählen" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Debugger-Konfiguration" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Debugger-Programmdatei:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "GDB-Programmdatei" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Optionen" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Statische &Member anzeigen" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "Eigenes Terminal für &Ein-/Ausgaben der Anwendung aktivieren" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "Shell-Skript a&usführen:" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "&GDB-Skript ausführen:" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Tracing aktivieren" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Ausführen" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Debugger-Werkzeugleiste" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Programmdatei:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Core-Datei:" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frederik Schwarzer" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "schwarzerf@gmail.com" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/de/kdevmakebuilder.po kdevelop-4.0.1/po/de/kdevmakebuilder.po --- kdevelop-3.9.98/po/de/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/de/kdevmakebuilder.po 2010-07-17 20:09:20.000000000 +0100 @@ -0,0 +1,168 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Burkhard Lück , 2008, 2009. +# Rene Landert , 2008. +# Frederik Schwarzer , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-05-18 22:35+0200\n" +"Last-Translator: Frederik Schwarzer \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 0.3\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Make-Builder" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Unterstützt das Generieren von Make-Projekten" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Ungültiger Erstellungsordner „%1“" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "Die Befehlszeile zur Erstellung von „%1“ kann nicht erzeugt werden." + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "Auftrag fehlgeschlagen" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Fehlgeschlagen ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Beendet ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** Abgebrochen ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "Kompilieren" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "Erstellen" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "Linken" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "Erstellt" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "Installieren" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "Anlegen von" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Ansicht" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Beim ersten Fehler abbrechen:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Befehle anzeigen, aber nicht ausführen:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Als root installieren:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Installationsbefehl für root:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Anzahl parallel ausgeführter Aufgaben:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Ausführbare Datei erzeugen:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Standardziel für Make:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Zusätzliche Make-Optionen:" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Aktuelles Umgebungsprofil:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frederik Schwarzer" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "schwarzerf@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/de/kdevqthelp.po kdevelop-4.0.1/po/de/kdevqthelp.po --- kdevelop-3.9.98/po/de/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/de/kdevqthelp.po 2010-07-17 20:09:20.000000000 +0100 @@ -0,0 +1,70 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Frederik Schwarzer , 2009. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-11-27 10:42+0100\n" +"Last-Translator: Frederik Schwarzer \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "Für „%1“ kann keine Dokumentation gefunden werden" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "Homepage der Qt-Hilfe" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "Qt-Hilfe" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Qt-Hilfe aufrufen" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frederik Schwarzer" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "schwarzerf@gmail.com" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +#, fuzzy +#| msgid "QtHelp Home Page" +msgid "Help page:" +msgstr "Homepage der Qt-Hilfe" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/en_GB/CMakeLists.txt kdevelop-4.0.1/po/en_GB/CMakeLists.txt --- kdevelop-3.9.98/po/en_GB/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/en_GB/CMakeLists.txt 2010-07-17 20:09:30.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(en_GB ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/en_GB/kdevcmakebuilder.po kdevelop-4.0.1/po/en_GB/kdevcmakebuilder.po --- kdevelop-3.9.98/po/en_GB/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/en_GB/kdevcmakebuilder.po 2010-07-17 20:09:30.000000000 +0100 @@ -0,0 +1,90 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Andrew Coles , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-02-27 11:35+0000\n" +"Last-Translator: Andrew Coles \n" +"Language-Team: British English \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.2\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "CMake Builder" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Support for building CMake projects" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "No Build Directory configured, cannot build" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "Aborting build" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "No Build Directory configured, cannot clean" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "Aborting clean" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "No Build Directory configured, cannot install" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "Aborting install" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "No Build Directory configured, cannot configure" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "Aborting configure" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "No Build Directory configured, cannot clear builddir" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "No clearing of builddir possible" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "Job failed" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "CMake Binary:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Andrew Coles" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "andrew_coles@yahoo.co.uk" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/en_GB/kdevcmake.po kdevelop-4.0.1/po/en_GB/kdevcmake.po --- kdevelop-3.9.98/po/en_GB/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/en_GB/kdevcmake.po 2010-07-17 20:09:30.000000000 +0100 @@ -0,0 +1,463 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Andrew Coles , 2009, 2010. +# Malcolm Hunter , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-03-20 19:56+0000\n" +"Last-Translator: Andrew Coles \n" +"Language-Team: British English \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "CMake Documentation" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Support for CMake documentation" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Cache Value: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Cache Documentation: %1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "Commands" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Variable" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "Module" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "Property" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "Policy" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "CMake Content Page" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 is a deprecated command and should not be used" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Unfinished function. " + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Name" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Type" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Value" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Comment" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Advanced" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "Could not remove: %1.\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "Swi&tch Colours" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "General" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "This project is one day old" +msgstr[1] "This project is %1 days old" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "Settings changed" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "A KDE 4 Application" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "(C) 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Document to open" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Configure a build directory" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "Configure a build directory for %1" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "You need to select a cmake binary." + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "You need to specify a build directory." + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "Using an already created build directory." + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "Creating a new build directory." + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "Build directory already configured." + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "This build directory is for %1, but the project directory is %2." + +#: cmakebuilddirchooser.cpp:172 +msgid "You may not select a relative build directory." +msgstr "You may not select a relative build directory." + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "The selected build directory is not empty." + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "CMake Manager" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Support for managing CMake projects" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Jump to target definition" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Create a folder called '%1'." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop - CMake Support" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "Could not create the directory's CMakeLists.txt file." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "Could not save the change." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Remove a folder called '%1'." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Remove a file called '%1'." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Add a file called '%1' to target '%2'." + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "Cannot save the change." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "Rename a folder called '%1'." + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "The build directory did not exist and could not be created." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Error creating build directory" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "INVALID" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Command" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Macro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Path" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "CMake &Binary:" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "&Build Directory:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "&Installation Prefix:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "Build &type:" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Andrew Coles" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "andrew_coles@yahoo.co.uk" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "&Move" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Add" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Remove" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Cache Values" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Comment:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Show Advanced" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "CMake Directory" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Show Advanced Values" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "hello, world" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Background colour:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Choose a new background colour" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Change the background colour by clicking here and choose the " +"new colour in the colour dialogue.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Project age:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Foreground colour:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Choose a new foreground colour" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Change the foreground colour by clicking here and choose the " +"new colour in the colour dialogue.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Set the project age (in days)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "Change the project age (in days) by choosing a new number of days." \ No newline at end of file diff -Nru kdevelop-3.9.98/po/en_GB/kdevcpp.po kdevelop-4.0.1/po/en_GB/kdevcpp.po --- kdevelop-3.9.98/po/en_GB/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/en_GB/kdevcpp.po 2010-07-17 20:09:30.000000000 +0100 @@ -0,0 +1,917 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Andrew Coles , 2009, 2010. +# Malcolm Hunter , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-17 20:26+0100\n" +"Last-Translator: Andrew Coles \n" +"Language-Team: British English \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "Not Included" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Initialise" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Not Included Container" + +#: codecompletion/context.cpp:1272 +#, kde-format +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "1 overload of %2" +msgstr[1] "%1 overloads of %2" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "Connect to %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Signals/Slots" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "Virtual Override" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Implement Function" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "C++ Builtin" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Override" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Implement" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Create Slot" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "From %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Add include directive" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Add Forward-Declaration" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "forwards-declare" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "Private Class Implementation Options" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Cancel" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "Update Definition from %1(%2) to (%3)" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Failed to apply changes: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "Rename %1" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "Create separate definition for %1" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Create Class" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "No declaration under cursor" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "No source file available for %1." + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "Failed to update DU chain for %1." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "Cannot create definition for this declaration." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "Insertion failed" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "Applying changes failed" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "No document for %1" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "Declaration lost while updating" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "Declaration is located in non-writeable file %1." + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "New name:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Rename" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Note: All overloaded functions, overloads, forward-declarations etc. will be " +"renamed too" + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Uses" + +#: codegen/simplerefactoring.cpp:445 +msgid "Declaration Info" +msgstr "Declaration Info" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "Renaming \"%1\" to \"%2\"" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "Applying changes failed: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Setup Custom Include Paths" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "Failed to save custom include paths in directory: %1" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Add Custom Include Path" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Open Project" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "Not Found: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "Did not select anything, not adding to a target." + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "Could not resolve base class, adding it indirectly: %1." + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "Invalid base class: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Create local declaration %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "Declare %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "Declaration not found: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Included" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Included by" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Defined macros" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Function macro" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Macro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "Preprocessed body:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "Body:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "Build manager for project %1 did not return a build directory" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "Build manager did not return an include path" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Include path resolver: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" +"Tried include path resolution while another resolution process was still " +"running" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "Makefile is missing in folder \"%1\"" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "Problem while trying to resolve include paths for %1" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "Cached: %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "Filename %1 seems to be malformed" + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "Failed to extract new working directory" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "Output was: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "Recursive make call failed" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "The parameter string \"%1\" does not seem to be valid. Output was: %2." + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "The directory \"%1\" does not exist. Output was: %2." + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "Malformed recursive make call" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "Could not extract include paths from make output" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "KDE forwarding header generator" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "(c) 2006, Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"KDE include directory - headers go into includes/" +"KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Build information from the cmake XML generator" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "Unterminated #if statement" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "character %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "Expected \"identifier\", found: %1" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
Token text
%1
Input
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "Expected \")\", found %1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "Division by zero" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Input text: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "expected ``:'' = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else without #if" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "#endif without #if at output line %1" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Macro error" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "Call to macro %1 missing argument number %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Formals: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "invalid input: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "This file imports the current open document
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "In include path %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Included through %1
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Directory %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "In %1th include path" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Includes" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Include Path" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "Includers" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "C++ Support" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "Support for C++ Language" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "Files" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "&Switch Definition/Declaration" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "Create &New Class" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Rename Declaration" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "Move into Source" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Emptied by preprocessor
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "Parsing included files" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "Parsing actual file" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "Not updating duchain for %1" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "Building uses" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Ready" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "File was included recursively from within itself: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "Included file was not found: %1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"Searched include path:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "Could not open file '%1'" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "File could not be read from." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "File could not be opened." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "File permissions prevent opening for read." + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Navigation" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Code" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Andrew Coles" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "andrew_coles@yahoo.co.uk" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "C++ Options" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Export:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Macro:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Public" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Protected" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Private" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "Slot" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Signal" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Storage Directory" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Storage Directory:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Automatic Resolution" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Source Directory:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Build Directory:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Custom Include Paths" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "You can add a list of custom include paths here." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" +"Options & settings to move the private data fields of a class into a private " +"structure" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "Private structure name:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Options" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Use class instead of struct" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

Move any current variables " +"that are initialised in the constructor initialiser list to the private " +"implementation structure's constructor initialiser list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "Move Variable initialisation to private structure" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" +"Move all currently declared private methods to the private implementation " +"structure." + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "Move Private methods" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Pointer name:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "" +"The name of the member variable that will be the pointer held to the private " +"implementation" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/en_GB/kdevcustommake.po kdevelop-4.0.1/po/en_GB/kdevcustommake.po --- kdevelop-3.9.98/po/en_GB/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/en_GB/kdevcustommake.po 2010-07-17 20:09:30.000000000 +0100 @@ -0,0 +1,42 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Andrew Coles , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-02-27 12:12+0000\n" +"Last-Translator: Andrew Coles \n" +"Language-Team: British English \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.2\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Custom Makefile Manager" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Support for managing custom makefile projects" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Run" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Andrew Coles" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "andrew_coles@yahoo.co.uk" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/en_GB/kdevelop.po kdevelop-4.0.1/po/en_GB/kdevelop.po --- kdevelop-3.9.98/po/en_GB/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/en_GB/kdevelop.po 2010-07-17 20:09:30.000000000 +0100 @@ -0,0 +1,8235 @@ +# translation of kdevelop.po to British English +# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# Malcolm Hunter , 2002,2003, 2004, 2005, 2006. +# Jonathan Riddell , 2003. +# Andrew Coles , 2004, 2005, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-04 20:25+0100\n" +"Last-Translator: Andrew Coles \n" +"Language-Team: British English \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Code" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "KDevelop4 Project Files" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "The KDevelop Integrated Development Environment" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "Copyright 1999-2010, The KDevelop developers" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "Create new session with given name." + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "Session to load. You can pass either hash or the name of the session." + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "List available sessions and quit" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" +"Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" + +#: main.cpp:79 +msgid "Hash" +msgstr "Hash" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "Name: Opened Projects" + +#: main.cpp:88 +msgid "[running]" +msgstr "[running]" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "Specify the binary you want to debug." + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "Debug" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "" +"A session with the name %1 exists already. Use the -s switch to open it." + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "Session %1 is already running." + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Architecture, Sublime UI, Ruby support" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "CMake Support, Run Support, Kross Support" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "GDB integration" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Text editor integration, definition-use chain" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "Website admin, API documentation, Doxygen and autoproject patches" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "GDB integration, Webdevelopment Plugins" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "Generic manager, Webdevelopment Plugins" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "astyle and indent support" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "Distributed VCS, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "SnippetPart, debugger and usability patches" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "Subversion plugin, Custom Make Manager, Overall improvements" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "Ported to Qt 3, patches, valgrind, diff and perforce support" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "C++ parser" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "The KWrite authors" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Kate editor component" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Designer code" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Contributors to older versions:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "The KHTML authors" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "HTML documentation component" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "Initial idea, basic architecture, much initial source code" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, bugfixes" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Java & Objective C support" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Debugger frontend" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "PHP support, context menu stuff" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "KDE application templates" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Dist part, bash support, application templates" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Several components, htdig indexing" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Help with Automake manager and persistent class store" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Help with KParts infrastructure" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Ada support" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "QMake projectmanager" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "MDI modes, QEditor, bugfixes" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Filecreate part and other bits and patches" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "ClearCase support" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Ruby support" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Fortran documentation" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Python documentation utility" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Doxygen wizard" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Fileselector component" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "C++ code completion, persistent class store" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Patches" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Help with Perl support" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Documentation index view" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "QMake project manager patches" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Artwork for the ruby language" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "Url to project to load" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Files to load" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (using KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "Cannot find native launch configuration type" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "Cannot find launcher %1" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "Could not open %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "&File" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "&Edit" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "&Advanced" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "&View" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "&Code Folding" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "&Tools" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "Word Completion" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "&Settings" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Main Toolbar" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "Session" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Project" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "&Run" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Navigation" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&File" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Edit" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "Editor" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Code" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Window" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Settings" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Andrew Coles" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "andrew_coles@yahoo.co.uk" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/en_GB/kdevformatters.po kdevelop-4.0.1/po/en_GB/kdevformatters.po --- kdevelop-3.9.98/po/en_GB/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/en_GB/kdevformatters.po 2010-07-17 20:09:30.000000000 +0100 @@ -0,0 +1,468 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Andrew Coles , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-14 23:21+0100\n" +"Last-Translator: Andrew Coles \n" +"Language-Team: British English \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "Astyle Formatter" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "A formatting tool using astyle" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Artistic Style is a source code indenter, formatter and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Indent Formatter" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "A formatter using indent" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Indentation" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Tabs" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Force tabs" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Spaces" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Convert tabs to spaces." + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Con&vert tabs into spaces" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "Fill empty lines with the white space of their previous lines." + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "Fill empt&y lines" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Indent" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Blocks" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Brackets" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "Cases" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Class" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Labels" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Namespaces" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Preprocessor directives" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "Switches" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Minimum in conditional:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "Twice current" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Maximum in statement:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Other" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Type" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "Brea&k closing headers" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "No change" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Attach" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Break" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "&Break blocks" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "Break all bl&ocks" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "Break 'else if()' statements into two different lines." + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "Break i&f-else" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Padding" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Pad bracket" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Unpad" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "Inside only" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "Outside only" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "Inside and outside" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "&Add spaces around operators" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "One liners" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "&Keep one-line statements" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "Do not break blocks residing completely on one line." + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "Keep o&ne-line blocks" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Andrew Coles" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "andrew_coles@yahoo.co.uk" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/en_GB/kdevgdb.po kdevelop-4.0.1/po/en_GB/kdevgdb.po --- kdevelop-3.9.98/po/en_GB/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/en_GB/kdevgdb.po 2010-07-17 20:09:30.000000000 +0100 @@ -0,0 +1,1242 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Andrew Coles , 2009, 2010. +# Malcolm Hunter , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevgdb\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-20 20:00+0000\n" +"Last-Translator: Andrew Coles \n" +"Language-Team: British English \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.0\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "effWatches" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "Recent" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
Old value: %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
New value: %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "GDB Support" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Support for running apps in GDB" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Disassemble" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Examine Core File..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Examine core file" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "Attach to Process" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "Attach to process..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "" +"Attach to process

Attaches the debugger to a running process.

" + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "Evaluate: %1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "Watch: %1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Choose a core file to examine..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "Examining core file %1" + +#: debuggerplugin.cpp:372 +msgid "Debug core file" +msgstr "Debug core file" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "Choose a process to attach to..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "Not attaching to process %1: cannot attach the debugger to itself." + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "Attaching to process %1" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "Debug process %1" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Debugger" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "Debugger stopped" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "Application interrupted" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "Process exited" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "Application is running" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "Application is paused" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "GDB exited abnormally" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Internal error" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Invalid debugger command
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "Invalid debugger command" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "Exited normally" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "Exited on signal %1" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "Program received signal %1 (%2)" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "Running program" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Warning" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "" +"Debugger error

Debugger reported the following error:

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Debugger error" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "1 command in queue\n" +msgstr[1] "%1 commands in queue\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "1 command being processed by gdb\n" +msgstr[1] "%1 commands being processed by gdb\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "Debugger state: %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "Debugger status" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "You need gdb 7.0.0 or higher.
You are using: %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "gdb error" + +#: debugsession.cpp:1417 +msgid "Could not start debugger:
" +msgstr "Could not start debugger:
" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "Startup error" + +#: debugsession.cpp:1429 +msgid "Could not attach debugger:
" +msgstr "Could not attach debugger:
" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Disassemble View" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Address" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Function" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Offset" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Instruction" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "Could not locate the debugging shell '%1'." + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "Debugging Shell Not Found" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"The exception is: %1\n" +"The MI response is: %2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Internal debugger error" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "Could not start debugger" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "GDB Configuration" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "Executes a Native application in GDB" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "GDB Output" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "&GDB cmd:" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "Pause execution of the app to enter gdb commands" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Show Internal Commands" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "Copy All" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Start" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "Amount" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "OK" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Cancel" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Memory view" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (1 byte)" +msgstr[1] "%2 (%1 bytes)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Change memory range" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Reload" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Close this view" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Special debugger views" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "Attach to a process" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Select Core File" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "kdevelop: Debug application console" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Debugger Configuration" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Debugger executable:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "Gdb executable" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "Run gdb in a special shell (mainly for automake projects)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "Debugging &shell:" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Options" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Display static &members" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "Display &demangled names" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behaviour.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "Try setting &breakpoints on library loading" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then tick this option.\n" +"Otherwise leave it unticked." + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "Enable separate terminal for application &IO" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "Remote Debugging" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "&Config gdb script:" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "Gdb configure script" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "This script is sourced by gdb when the debugging starts." + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "R&un shell script:" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "Script to start remote application" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "Run &gdb script:" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "Script to connect with remote application" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "Tracing Configuration" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Enable tracing" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "Custom format string" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "Expressions to print:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Run" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Debugger Toolbar" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Executable:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Core File:" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Andrew Coles" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "andrew_coles@yahoo.co.uk" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/en_GB/kdevmakebuilder.po kdevelop-4.0.1/po/en_GB/kdevmakebuilder.po --- kdevelop-3.9.98/po/en_GB/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/en_GB/kdevmakebuilder.po 2010-07-17 20:09:30.000000000 +0100 @@ -0,0 +1,166 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Andrew Coles , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-28 10:00+0100\n" +"Last-Translator: Andrew Coles \n" +"Language-Team: British English \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Make Builder" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Support for building Make projects" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Invalid build directory '%1'" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "Could not create build command for target '%1'" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "Job failed" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Failed ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Finished ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** Aborted ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "compiling" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "generating" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "linking" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "built" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "installing" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "creating" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "View" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Abort on first error:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Display commands but do not execute them:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Install as root:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Root installation command:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Number of simultaneous jobs:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Make executable:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Default make target:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Additional make options:" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Active Environment Profile:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Andrew Coles" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "andrew_coles@yahoo.co.uk" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/en_GB/kdevqthelp.po kdevelop-4.0.1/po/en_GB/kdevqthelp.po --- kdevelop-3.9.98/po/en_GB/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/en_GB/kdevqthelp.po 2010-07-17 20:09:30.000000000 +0100 @@ -0,0 +1,68 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Andrew Coles , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-20 20:13+0000\n" +"Last-Translator: Andrew Coles \n" +"Language-Team: British English \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "Could not find any documentation for '%1'" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "QtHelp Home Page" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Check Qt Help documentation" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Andrew Coles" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "andrew_coles@yahoo.co.uk" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "Identifier to search:" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "Help page:" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "about:blank" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "Debug info:" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/es/CMakeLists.txt kdevelop-4.0.1/po/es/CMakeLists.txt --- kdevelop-3.9.98/po/es/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/es/CMakeLists.txt 2010-07-17 20:09:39.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(es ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/es/kdevcmakebuilder.po kdevelop-4.0.1/po/es/kdevcmakebuilder.po --- kdevelop-3.9.98/po/es/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/es/kdevcmakebuilder.po 2010-07-17 20:09:39.000000000 +0100 @@ -0,0 +1,94 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Eloy Cuadra , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-02-21 02:05+0100\n" +"Last-Translator: Eloy Cuadra \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "Constructor de CMake" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Construcción de proyectos CMake" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "" +"No se ha configurado una carpeta de construcción; no se puede construir" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "Interrumpiendo la construcción" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "No se ha configurado una carpeta de construcción; no se puede limpiar" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "Interrumpiendo la limpieza" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "No se ha configurado una carpeta de construcción; no se puede instalar" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "Interrumpiendo la instalación" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "" +"No se ha configurado una carpeta de construcción; no se puede configurar" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "Interrumpiendo la configuración" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "" +"No se ha configurado una carpeta de construcción; no se puede limpiar la " +"carpeta de construcción" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "No es posible limpiar la carpeta de construcción" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "Tarea fallida" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "Binario de CMake:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Eloy Cuadra" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ecuadra@eloihr.net" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/es/kdevcmake.po kdevelop-4.0.1/po/es/kdevcmake.po --- kdevelop-3.9.98/po/es/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/es/kdevcmake.po 2010-07-17 20:09:39.000000000 +0100 @@ -0,0 +1,466 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Eloy Cuadra , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-05-18 10:15+0200\n" +"Last-Translator: Eloy Cuadra \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "Documentación de CMake" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Implementación de la documentación de CMake" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Valor en caché: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Documentación en caché: %1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "Órdenes" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Variable" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "Módulo" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "Propiedad" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "Política" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "Página de contenidos de CMake" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 es una orden anticuada y no debería usarse" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Función sin finalizar. " + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Nombre" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Tipo" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Valor" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Comentario" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Avanzado" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"El directorio %1 está a punto de ser eliminado de la lista de KDevelop.\n" +"¿Desea que KDevelop lo elimine también del sistema de archivos?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "No se puede eliminar: %1.\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "Cam&biar colores" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "General" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "Este proyecto tiene una antigüedad de 1 día" +msgstr[1] "Este proyecto tiene una antigüedad de %1 días" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "Preferencias modificadas" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "Una aplicación para KDE 4" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "(C) 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Documento a abrir" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Configurar un directorio de construcción" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "Configurar un directorio de construcción para %1" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "Debe seleccionar un binario de CMake." + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "Debe especificar un directorio de construcción." + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "Usando un directorio de construcción ya creado." + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "Creando un nuevo directorio de construcción." + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "Directorio de construcción ya configurado." + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "" +"Este directorio de construcción es para %1, pero el directorio del proyecto " +"es %2" + +#: cmakebuilddirchooser.cpp:172 +msgid "You may not select a relative build directory." +msgstr "No puede especificar un directorio de construcción relativo." + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "El directorio de construcción seleccionado no está vacío." + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "Gestor de CMake" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Gestión de proyectos CMake" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Saltar a la definición de destino" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Crear una carpeta llamada «%1»." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop - Implementación de CMake" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "No se puede crear el archivo CMakeLists.txt del directorio." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "No se puede guardar la modificación." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Eliminar una carpeta llamada «%1»." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Eliminar un archivo llamado «%1»." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Añadir un archivo llamado «%1» al objetivo «%2»." + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "No se puede guardar la modificación." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "Cambiar nombre de una carpeta llamada «%1»." + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "El directorio de construcción no existe y no se puede crear." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Error al crear el directorio de construcción" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "NO VÁLIDO" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Orden" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Macro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Ruta" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "&Binario CMake:" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "Ca&rpeta de construcción:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "Prefijo de &instalación:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "&Tipo de construcción:" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"KDevelop ha encontrado varias raíces posibles para su proyecto. Seleccione " +"la correcta." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Eloy Cuadra" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ecuadra@eloihr.net" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "&Mover" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Añadir" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Eliminar" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Caché de valores" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Comentario:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Mostrar avanzado" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "Directorio de CMake" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Mostrar valores avanzados" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "hola, mundo" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Color del fondo:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Elija un nuevo color para el fondo" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Pulse aquí para cambiar el " +"color de fondo y elija el nuevo " +"color en el diálogo de color.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Antigüedad del proyecto:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Color del texto:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Elija un nuevo color para el texto" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Pulse aquí para cambiar el " +"color del texto y elija el nuevo " +"color en el diálogo de color.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Establecer la antigüedad del proyecto (en días)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "" +"Cambiar la antigüedad del proyecto (en días) seleccionando un nuevo número " +"de días." \ No newline at end of file diff -Nru kdevelop-3.9.98/po/es/kdevcpp.po kdevelop-4.0.1/po/es/kdevcpp.po --- kdevelop-3.9.98/po/es/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/es/kdevcpp.po 2010-07-17 20:09:39.000000000 +0100 @@ -0,0 +1,924 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Eloy Cuadra , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-02 00:24+0200\n" +"Last-Translator: Eloy Cuadra \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "No incluido" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Inicializar" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Contenedor no incluido" + +#: codecompletion/context.cpp:1272 +#, kde-format +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "1 sobrecarga de %2" +msgstr[1] "%1 sobrecargas de %2" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "Conectar a %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Señales/slots" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "Redefinir virtual" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Implementar función" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "C++ integrado" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Redefinir" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Implementar" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Crear slot" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "Desde %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Añadir directiva de inclusión" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Añadir declaración aplazada" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "declaración aplazada" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "Opciones de implementación de clase privada" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Cancelar" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "Actualizar definición desde %1(%2) hasta (%3)" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Fallo al aplicar las modificaciones: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"La refactorización es una función experimental que puede dañar su código " +"fuente. Antes de usarla, asegúrese de hacer una copia de respaldo." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "Cambiar nombre de %1" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "Crear definición separada para %1" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Crear clase" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "Ninguna declaración bajo el cursor" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "No se dispone de archivo de código fuente para %1." + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "Fallo al actualizar la cadena DU para %1." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "No se puede crear la definición para esta declaración." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "Ha fallado la inserción" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "Fallo al aplicar cambios" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "No hay documento para %1" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "Declaración perdida al actualizar" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "La declaración está situada en el archivo no modificable %1." + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "Nuevo nombre:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Cambiar nombre" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Nota: También se cambiará el nombre de todas las funciones sobrecargadas, " +"las sobrecargas, las declaraciones aplazadas, etc." + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Usos" + +#: codegen/simplerefactoring.cpp:445 +msgid "Declaration Info" +msgstr "Información de la declaración" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "Cambiando de nombre «%1» a «%2»" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "Fallo al aplicar cambios: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Configurar las rutas de inclusión personalizadas" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "" +"Ha ocurrido un fallo al guardar las rutas de inclusión personalizadas en el " +"directorio: %1" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Añadir ruta de inclusión personalizada" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Abrir proyecto" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "No se ha encontrado: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "No se ha seleccionado nada, no se añade al objetivo." + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "No se puede resolver la clase base; se añade directamente: %1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "Clase base no válida: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Crear declaración local %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "Declarar %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "Declaración no encontrada: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Incluido" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Incluido por" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Macros definidas" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Macro de función" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Macro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "Cuerpo preprocesado:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "Cuerpo:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "" +"El gestor de construcción del proyecto %1 no ha devuelto una carpeta de " +"construcción" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"El mecanismo de resolución de rutas necesita la carpeta de construcción para " +"resolver rutas de inclusión adicionales. Considere establecer una carpeta de " +"construcción en el gestor de proyectos si todavía no lo ha hecho." + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "El gestor de construcción no ha devuelto una ruta de inclusión" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"El gestor de construcción no ha devuelto la ruta de inclusión %1, que pudo " +"ser resuelta por el mecanismo de resolución de rutas de inclusión." + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Mecanismo de resolución de rutas de inclusión: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Carpeta de construcción del usuario: «%1»\n" +"Mecanismo de resolución de rutas de inclusión: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" +"Se ha intentado resolver la ruta de inclusión mientras se estaba ejecutando " +"otro proceso de resolución" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "Falta el makefile en la carpeta «%1»" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "Problema al tratar de resolver rutas de inclusión para %1" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "En caché: %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "Parece que el nombre de archivo %1 está mal formado" + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "Ha ocurrido un fallo al extraer el nuevo directorio de trabajo" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "La salida era: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "Ha fallado la llamada recursiva a «make»" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "" +"Parece que la cadena del parámetro «%1» no es válida. La salida fue: %2." + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "La carpeta «%1» no existe. La salida fue: %2." + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "Llamada recursiva a «make» mal formada" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "No se pueden extraer rutas de inclusión de la salida de «make»" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Carpeta: «%1» Orden: «%2» Salida: «%3»" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "Generador de cabeceras aplazadas de KDE" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "" +"Una aplicación que crea cabeceras aplazadas (como las cabeceras de Qt) en el " +"código fuente." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "© 2006, Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"Carpeta de cabeceras de KDE (las cabeceras están en includes/KDE)" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Información de construcción del generador XML de cmake" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "Sentencia #if no terminada" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "carácter %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "Se esperaba «identificador», se ha encontrado: %1" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
Texto del token
%1
Entrada
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "Se esperaba «)», y se ha encontrado %1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "División por cero" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Texto de entrada: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "se esperaba «:» = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else sin #if" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "#endif sin #if en la línea de salida %1" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Error de macro" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "La llamada a la macro %1 carece del argumento número %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Formales: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "entrada no válida: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "Este archivo importa el documento actual abierto
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "En la ruta de inclusión %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Incluido a través de %1
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Carpeta %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "En la ruta de inclusión número %1" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Cabeceras" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Ruta de inclusión" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "Incluidas en" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "Implementación de C++" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "Implementación del lenguaje C++" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "Archivos" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "Cam&biar a definición/declaración" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "Crear &nueva clase" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Cambiar nombre de la declaración" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "Mover al código fuente" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Vaciado por el preprocesador
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "Analizando archivos incluidos" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "Analizando el archivo real" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "Sin actualizar la cadena DU para %1." + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "Construyendo usos" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Preparado" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "El archivo ha sido incluido recursivamente desde sí mismo: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "No se ha encontrado el archivo incluido: %1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"Ruta de inclusión buscada:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "No se puede abrir el archivo «%1»" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "No se puede leer del archivo." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "No se puede abrir el archivo." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "Los permisos del archivo impiden abrirlo para lectura." + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Navegación" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Código" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Eloy Cuadra" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ecuadra@eloihr.net" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "Opciones de C++" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Exportar:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Macro:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Público" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Protegido" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Privado" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "Slot" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Señal" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Carpeta de almacenamiento" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"La ruta de inclusión personalizada será almacenada en un archivo especial " +"llamado «.kdev_include_paths», que se guarda en una carpeta de código fuente. " +"La ruta personalizada será usada en todos los archivos situados por debajo " +"de esta carpeta." + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Carpeta de almacenamiento:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Resolución automática" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"Si su proyecto usa Makefiles sencillos, es posible resolver automáticamente " +"las rutas de inclusión usando la utilidad «make». Para ello, establezca aquí " +"un mapeado entre una fuente y una carpeta de construcción." + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Carpeta de código fuente:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Carpeta de construcción:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Rutas de inclusión personalizadas" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "Aquí puede añadir una lista de rutas de inclusión personalizadas." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"Nota: Estas preferencias no afectan al compilador o al proyecto de ninguna " +"manera; solo se usan para encontrar cabeceras incluidas dentro de KDevelop." + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" +"Opciones y preferencias para mover los campos de datos privados de una clase " +"a una estructura privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "Nombre de la estructura privada:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Opciones" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

Por defecto, las " +"estructuras de implementación privadas se declaran como struct para tener acceso público por omisión.

\n" +"

Marque esta casilla si " +"desea que la estructura de implementación privada sea declarada como class con acceso público.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Usar clase en lugar de estructura" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

Mover cualquier variable " +"actual inicializada en la lista del inicializador del constructor a la lista " +"del inicializador del constructor de la estructura de implementación privada." +"

\n" +"

\n" +"

Nota: Todas las referencias y variables " +"con tipos que no ofrecen constructores por defecto se mueven sin tener en " +"cuenta el estado de esta opción.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "Mover inicialización de variables a estructura privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" +"Mover todos los métodos privados declarados a la estructura de " +"implementación privada." + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "Mover métodos privados" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Nombre del puntero:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "" +"El nombre de la variable miembro que será el puntero mantenido a la " +"implementación privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/es/kdevcustommake.po kdevelop-4.0.1/po/es/kdevcustommake.po --- kdevelop-3.9.98/po/es/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/es/kdevcustommake.po 2010-07-17 20:09:39.000000000 +0100 @@ -0,0 +1,42 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Eloy Cuadra , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-02-21 02:08+0100\n" +"Last-Translator: Eloy Cuadra \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Gestor de makefiles personalizados" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Implementación de la gestión de proyectos con makefiles personalizados" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Ejecutar" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Eloy Cuadra" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ecuadra@eloihr.net" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/es/kdevelop.po kdevelop-4.0.1/po/es/kdevelop.po --- kdevelop-3.9.98/po/es/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/es/kdevelop.po 2010-07-17 20:09:39.000000000 +0100 @@ -0,0 +1,3932 @@ +# translation of kdevelop.po to Spanish +# Spanish .po file for KDevelop +# Copyright (C) 1999,2002,2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# David Martínez Moreno 2005. +# David Martínez Moreno 2005. +# +# Salvador Gimeno , 2001. +# Juan Manuel García Molina , 2001-2002. +# Miguel Revilla Rodríguez , 2002, 2003, 2004. +# Pedro Jurado Maqueda , 2003. +# Juan Manuel Garcia Molina , 2005. +# Isaac Clerencia , 2005. +# Jaime Robles , 2005, 2008. +# Pablo de Vicente , 2005. +# Eloy Cuadra , 2005, 2006, 2007, 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-02 00:24+0200\n" +"Last-Translator: Eloy Cuadra \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"First-Translator: Jaime Robles \n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Código" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "Archivos de proyecto de KDevelop4" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "El entorno integrado de desarrollo KDevelop" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "Copyright 1999-2010, los desarrolladores de KDevelop" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "Crear nueva sesión con un determinado nombre." + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "Sesión a cargar. Puede pasar el «hash» o el nombre de la sesión." + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "Listar las sesiones disponibles y salir" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" +"Sesiones disponibles (use «-s HASH» o «-s NOMBRE» para abrir una de ellas):" + +#: main.cpp:79 +msgid "Hash" +msgstr "Hash" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "Nombre: Proyectos abiertos" + +#: main.cpp:88 +msgid "[running]" +msgstr "[ejecutando]" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "Especifique el binario que quiere depurar." + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "Depurar" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "" +"Ya existe una sesión con el nombre %1. Utilice el modificador «-s» para " +"abrirla." + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"No se puede abrir una sesión desconocida %1. Use «--sessions» para consultar " +"las sesiones disponibles o «-cs» para crear una nueva." + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "La sesión %1 ya está en ejecución." + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"No se puede iniciar KDevelop; el ejecutable kdevelop.bin no está presente en " +"%1. Arregle su instalación de KDevelop." + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Encargado, arquitectura, implementación de VCS, implementación de la gestión " +"de proyectos, gestor de proyectos para QMake" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Arquitectura, interfaz Sublime, implementación de Ruby" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Cadena definición-usos, implementación de C++, navegación de código, " +"terminación de código, asistencia en programación, refactorización" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "" +"Implementación de CMake, implementación de ejecución, implementación de Kross" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "Integración de GDB" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Integración del editor de texto, cadena de definición-usos" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "" +"Administrador del sitio web, documentación de la API, Doxygen y parches para " +"autoproyectos." + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "Integración de GDB, complementos para el desarrollo Web" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "Gestor general, complementos para el desarrollo Web" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "Implementación de astyle e ident" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "VCS distribuido, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "SnippetPart, parches del depurador y de usabilidad." + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "" +"Complemento para Subversion, gestor de Make personalizado, mejoras globales" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "Versión en Qt 3, parches, implementación de valgrind, diff y perforce" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "Analizador C++" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "Los autores de KWrite" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Componente del editor Kate" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Código del diseñador" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Colaboradores de versiones anteriores:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "Los autores de KHTML" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "Componente de documentación HTML" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "" +"Idea inicial, arquitectura básica, gran parte del código fuente inicial" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, correcciones de errores." + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Implementación de Java y Objective C" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Interfaz del depurador" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "Implementación de PHP, menús contextuales" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "Plantillas de aplicaciones KDE" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Parte dist, implementación bash, plantillas de aplicaciones." + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Varios componentes, indexación con htdig" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Ayuda con el gestor de automake y el almacén de clases persistentes" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Ayuda con la infraestructura de KParts" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Implementación de Ada" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "Gestor de proyectos QMake" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "Modos MDI, QEditor, corrección de fallos" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "PartExplorer, rediseño de CvsPart, parches, corrección de fallos" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Complementos para reemplazar, marcadores, lista de archivos y CTags2. " +"Mejoras y parches genéricos." + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Part de Filecreate y otros arreglos y parches" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "Implementación de ClearCase" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Implementación de Ruby" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Documentación de Fortran" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Utilidad de documentación de Python" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Asistente de Doxygen" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Componente Fileselector" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "Terminación de código C++, almacén de clases persistentes" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Parches" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Ayuda con la implementación de Perl" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Visor del índice de la documentación" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Buscador de documentación, parches para el gestor de proyectos QMake, " +"mejoras en la usabilidad, corrección de fallos..." + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "Parches para el gestor de proyectos QMake" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "" +"Limpieza y corrección de fallos para qEditor, AutoMake y muchas más cosas." + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Material gráfico para el lenguaje Ruby" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "URL del proyecto a cargar" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Archivos a cargar" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" +"Iniciar el depurador, por ejemplo gdb. El binario que se debe depurar debe " +"ir a continuación (incluidos sus argumentos)." + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (usando KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "No se puede encontrar el tipo de configuración del lanzador nativo" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "No se puede encontrar el lanzador %1" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "No se ha podido abrir %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "&Archivo" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "&Editar" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "Avan&zado" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "&Ver" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "&Plegado de código" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "&Herramientas" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "Terminación de palabras" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "A&justes" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Barra de herramientas principal" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "Sesión" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Proyecto" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "&Ejecutar" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Navegación" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Archivo" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Editar" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "Editor" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Código" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Ventana" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Preferencias" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Eloy Cuadra" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ecuadra@eloihr.net" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/es/kdevformatters.po kdevelop-4.0.1/po/es/kdevformatters.po --- kdevelop-3.9.98/po/es/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/es/kdevformatters.po 2010-07-17 20:09:39.000000000 +0100 @@ -0,0 +1,469 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Eloy Cuadra , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-21 22:05+0200\n" +"Last-Translator: Eloy Cuadra \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "Formateador Astyle" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "Una herramienta de formateo que usa astyle" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Estilo artístico es un sangrador, formateador y embellecedor de " +"código fuente para los lenguajes de programación C, C++, C# y Java.
Sitio web: http://astyle." +"sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Formateador indent" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "Un formateador que usa «indent»" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"Sangrar y formatear código de programa C.
El programa «indent» se " +"puede usar para hacer el código más fácil de leer. También puede convertir " +"de un estilo de escribir C a otro.
indent entiende gran parte de " +"la sintaxis de C, pero también trata de arreglárselas con sintaxis " +"incompleta y mal formada.
Sitio web: http://www.gnu.org/software/indent/" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Sangría" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Tabuladores" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Forzar tabuladores" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Espacios" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"Número de espacios que se convertirán en una tabulación.\n" +"El número de espacios por tabulador se controla en el editor." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Convertir tabuladores en espacios." + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Con&vertir tabuladores en espacios" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "Rellenar líneas vacías con el espacio en blanco de las líneas previas." + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "Relle&nar líneas vacías" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Sangrar" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Bloques" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Llaves" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "Cases" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Clases" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Etiquetas" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Espacios de nombres" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Directivas del preprocesador" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "Switches" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"Sangrar un máximo de # espacios en una declaración continua\n" +"en relación a la línea anterior." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Sangrar un mínimo de # espacios en un condicional continuo\n" +"perteneciente a un encabezado condicional." + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Mínimo en condicional:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "El doble del actual" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Máximo en declaración:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Otro" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Tipo" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Romper las llaves antes de cerrar encabezados (por ejemplo, «else»,\n" +"«catch», etc.) de su llave de cierre inmediatamente anterior." + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "Romper encabe&zados de cierre" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "Sin modificar" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Vincular" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Romper" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Insertar líneas en blanco alrededor de bloques,\n" +"etiquetas, clases, etc. no relacionados.\n" +"Posibles problemas:\n" +"\n" +"1. Si una sentencia no forma parte de un bloque, se \n" +"usará doble espaciado para las siguientes sentencias. \n" +"Las sentencias encerradas en un bloque se formatean \n" +"correctamente.\n" +"\n" +"2. Los comentarios se separan del bloque.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "Romper &bloques" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Como --break-blocks, excepto que también inserta líneas en blanco \n" +"alrededor de los encabezados de cierre (como «else», «catch», etc.).\n" +"\n" +"Problemas conocidos:\n" +"\n" +"1. Si una declaración no forma parte de un bloque, las siguientes \n" +"declaraciones tendrán un espaciado doble. Las declaraciones \n" +"encerradas en un bloque se formatean correctamente.\n" +"\n" +"2. Los comentarios estarán separados del bloque.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "Romper todos los bl&oques" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "Partir las sentencias «else if()» en dos líneas diferentes." + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "Romper i&f-else" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Relleno" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Rellenar paréntesis" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Quitar relleno" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "Sólo en el interior" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "Sólo en el exterior" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "En el interior y en el exterior" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Insertar espacios de relleno alrededor de los operadores.\n" +"Una vez alineados, los operadores permanecerán de este \n" +"modo. No existe opción para eliminar este relleno." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "&Añadir espacios alrededor de los operadores" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "Programa en una línea" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" +"No partir las líneas que contienen múltiples sentencias en\n" +"múltiples líneas con una sentencia cada una." + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "Mantener &declaraciones de una línea" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "No partir los bloques que residen completamente en una línea." + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "Ma&ntener bloques de una línea" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Eloy Cuadra" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ecuadra@eloihr.net" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/es/kdevgdb.po kdevelop-4.0.1/po/es/kdevgdb.po --- kdevelop-3.9.98/po/es/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/es/kdevgdb.po 2010-07-17 20:09:39.000000000 +0100 @@ -0,0 +1,1438 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Eloy Cuadra , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcppdebugger\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-19 14:10+0100\n" +"Last-Translator: Eloy Cuadra \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "Observaciones" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "Reciente" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
Valor anterior: %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
Valor nuevo: %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "Implementación de GDB" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Ejecución de aplicaciones en GDB" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Desensamblar" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Examinar archivo core..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Examina un archivo core" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"Examinar archivo core

Esto carga un archivo core, que se crea " +"normalmente tras un fallo de la aplicación (por ejemplo, un error de " +"segmentación). El archivo core contiene una imagen de la memoria del " +"programa en el momento de su error, permitiendo hacer un análisis posterior." +"

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "Adjuntar a proceso" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "Adjuntar a proceso..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "" +"Adjuntar a proceso

Conecta el depurador a un proceso en ejecución." + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "Evaluar: %1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "" +"Evaluar expresión

Muestra el valor de la expresión que hay bajo el " +"cursor.

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "Observar: %1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Observar expresión

Añade una expresión bajo el cursor a la lista de " +"variables/observaciones.

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Seleccione un archivo core para examinar..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "Examinando archivo core %1" + +#: debuggerplugin.cpp:372 +msgid "Debug core file" +msgstr "Depurar un archivo core" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "Seleccione un proceso al que ajuntar..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "" +"No se adjunta al proceso %1: no se puede adjuntar el depurador a sí mismo." + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "Adjuntando al proceso %1" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "Depurar el proceso %1" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Depurador" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"No se ha especificado un grupo de entorno; parece que se trata de una " +"configuración dañada. Compruebe la configuración de ejecución «%1». Usando el " +"grupo de entorno por omisión." + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "Depurador detenido" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "Aplicación interrumpida" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "Proceso terminado" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "La aplicación está en ejecución" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "La aplicación está pausada" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"GDB terminó de modo anormal

Probablemente se trate de un error en " +"GDB. Examine la ventana de salida de «gdb» y detenga luego el depurador." + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "GDB terminó anormalmente" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "" +"Orden «gdb» enviada cuando no se está ejecutando el depurador
La " +"orden fue:
%1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Error interno" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Orden de depuración no válida
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "Orden de depuración no válida" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "Terminado normalmente" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "Terminado al recibir la señal %1" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "El programa ha recibido la señal %1 (%2)" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "Programa en ejecución" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"GDB no puede usar los dispositivos tty* ni pty*\n" +"Compruebe las preferencias de /dev/tty* y de /dev/pty*\n" +"Es posible que necesite ejecutar «chmod ug+rw» sobre los dispositivos tty* y " +"pty* como usuario «root» y/o añadir el usuario al grupo tty usando «usermod -G " +"tty usuario»." + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Advertencia" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "" +"Error de depuración

El depurador ha informado del siguiente error:" +"

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Error del depurador" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "1 orden en cola\n" +msgstr[1] "%1 órdenes en cola\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "1 orden en proceso por gdb\n" +msgstr[1] "%1 órdenes en proceso por gdb\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "Estado del depurador: %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"Clase de la orden actual: «%1»\n" +"Texto de la orden actual: «%2»\n" +"Texto original de la orden actual: «%3»\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "Estado del depurador" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "Necesita gdb 7.0.0 o superior.
Está usando: %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "Error gdb" + +#: debugsession.cpp:1417 +msgid "Could not start debugger:
" +msgstr "No se puede iniciar el depurador.
" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "Error de arranque" + +#: debugsession.cpp:1429 +msgid "Could not attach debugger:
" +msgstr "No se puede adjuntar el depurador.
" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"Pantalla de código máquina

Una vista del código máquina del " +"programa que está siendo ejecutado con la instrucción actual resaltada. " +"Puede avanzar instrucción a instrucción usando los botones de la barra de " +"herramientas del depurador «avanzar sobre» la instrucción y «avanzar dentro» " +"de la instrucción." + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Vista del desensamblador" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Dirección" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Función" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Desplazamiento" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Instrucción" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "No se ha podido localizar la capa de depuración «%1»." + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "Capa de depuración no encontrada" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" +"

El componente de depuración ha encontrado un error interno mientras " +"procesaba la respuesta de gdb. Por favor, informe de este fallo." + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"La excepción es: %1\n" +"La respuesta MI es: %2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Error interno del depurador" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" +"No se puede iniciar el depurador.

No se puede ejecutar «%1». " +"Asegúrese de que la ruta especificada es correcta." + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "No se puede iniciar el depurador" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "Configuración de GDB" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "Ejecuta una aplicación nativa en GDB" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "Salida de GDB" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"Salida de GDB

Muestra todas las órdenes de «gdb» que están siendo " +"ejecutadas. También puede dar cualquier otra orden de «gdb» mientras está " +"depurando.

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "Orden &GDB:" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "Pausar ejecución de la aplicación para introducir órdenes de gdb" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Mostrar órdenes internas" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"Controla si se muestran o no las órdenes emitidas internamente por KDevelop." +"
Esta opción afectará sólo a órdenes futuras, y no añadirá ni eliminará a " +"otras órdenes ya emitidas desde la vista." + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "Copiar todo" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Iniciar" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "Cantidad" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "Aceptar" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Cancelar" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Vista de la memoria" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (1 byte)" +msgstr[1] "%2 (%1 bytes)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Cambiar el intervalo de memoria" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Volver a cargar" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Cerrar esta vista" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Vistas especiales del depurador" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "Adjuntar a un proceso" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Seleccionar archivo core" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "kdevelop: Consola de la aplicación de depuración" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Configuración del depurador" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Ejecutable del depurador:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "Ejecutable Gdb" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"Para ejecutar el binario «gdb» de su $PATH, deje este campo vacío. Para " +"ejecutar un «gdb» personalizado (por ejemplo, para una arquitectura " +"diferente), introduzca aquí el nombre del ejecutable. También puede ejecutar " +"el «gdb» de su $PATH, aunque con un nombre distinto (como «arm-gdb»), " +"escribiendo su nombre aquí, o especificando la ruta completa al ejecutable " +"«gdb»." + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "" +"Ejecutar gdb en un entorno especial (principalmente para proyectos automake)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"Si quiere que «gdb» sea ejecutado por un entorno o herramienta especial, " +"indíquelo aquí. El caso de uso principal es el de los proyectos basados en " +"Automake, donde la aplicación no es más que un script y necesita «libtool» " +"para poder ser ejecutada con «gdb»." + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "En&torno de depuración:" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"Si quiere que «gdb» sea ejecutado por un entorno o herramienta especial, " +"indíquelo aquí. El caso de uso principal es el de los proyectos basados en " +"Automake, donde la aplicación no es más que un script y necesita libtool para poder ser ejecutada con «gdb»." + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Opciones" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"Mostrar los miembros estáticos hace que GDB\n" +"sea más lento al producir los datos dentro de\n" +"KDE y Qt. Puede cambiar la «firma» de los\n" +"datos de los que dependen QString y compañía.\n" +"Pero si necesita depurar estos valores, active\n" +"esta opción." + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Mostrar &miembros estáticos" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"Cuando se muestra código desensamblado puede optar por\n" +"ver los nombres «mutilados» de los métodos No obstante,\n" +"los nombres «sin mutilar» son más fáciles de leer." + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "Mostrar nombres sin &mutilar" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"Si GDB no ha visto una biblioteca que se vaya a cargar\n" +"mediante «dlopen», se negará a poner puntos de interrupción\n" +"en ese código. Con esta opción, GDB se detendrá al cargar\n" +"una biblioteca, intentando poner los puntos de interrupción que\n" +"estén pendientes en ese momento. Consulte la ayuda para obtener\n" +"más detalles sobre este comportamiento.\n" +"\n" +"Si no utiliza «dlopen» para abrir bibliotecas, deje esta opción sin marcar." + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "Intentar establecer puntos de interrupción al cargar la &biblioteca" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"Le permite comunicarse con la terminal cuando su\n" +"aplicación contiene código que lo requiere (p. ej. cin, fgets, etc.).\n" +"Si va a comunicarse con su aplicación, marque esta opción.\n" +"En caso contrario, déjela sin marcar." + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "Hab&ilitar terminal separada para la e/s de la aplicación" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"El cometido de este script es la ejecución de las órdenes necesarias para " +"conectar con un ejecutable que funcione remotamente.\n" +"\tshell sleep 5\tesperar a que comience el programa\n" +"\ttarget remote ...\tconectar con el depurador remoto\n" +"\tcontinue\t[opcional] ejecutar la depuración hasta el primer punto de " +"interrupción" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "Depuración remota" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "&Configurar script «gdb»:" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "Script de configuración de «gdb»" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "Este script lo origina «gdb» cuando se inicia la depuración." + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "Ejec&utar script de consola:" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "Script para iniciar aplicación remota" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"Este script de consola se ejecuta una vez que el script gdb de config ha " +"sido generado por gdb.\n" +"Cuando se está depurando remotamente, este script sirve para iniciar " +"realmente el proceso remoto.\n" +"[Se espera que el ejecutable del depurador esté accesible en el sistema de " +"destino, tal vez descargándolo como último paso de la construcción]\n" +"1) Encuentre un modo de ejecutar una orden remotamente (rsh, ssh, " +"telnet...)\n" +"2a) Ejecute «gdbserver ... aplicación» en el sistema de destino.\n" +"o, si su ejecutable contiene inicialización de gdb, 2b) Ejecute la " +"«aplicación» en el sistema de destino." + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "Ejecutar script de «&gdb»:" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "Script para conectar con la aplicación remota" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"Este script es generado por «gdb» una vez que se han ejecutado los dos " +"scripts precedentes.\n" +"Este script está pensado para las órdenes reales necesarias para conectar a " +"una aplicación que se está ejecutando remotamente.\n" +"\tshell sleep 5\tesperar a que se inicie el programa remoto\n" +"\ttarget remote ...\tconectarse al depurador remoto\n" +"\tcontinue\t[opcional] ejecutar la depuración hasta el primer punto de " +"interrupción." + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "Configuración del rastreo" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"Activar rastreo\n" +"

El rastreo es un mecanismo que muestra automáticamente los valores de las " +"expresiones seleccionadas y continúa la ejecución cuando se alcanza un punto " +"de interrupción. Puede considerarlo como un «printf» de depuración que no " +"necesita modificar el código fuente.

" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Habilitar rastreo" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "Formato de cadena personalizado" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"Formato de cadena personalizado\n" +"

Especifica una cadena con formato de estilo C que se usará cuando se " +"visualice la expresión seleccionada. Por ejemplo:\n" +"

Punto de rastreo 1: g = %d

\n" +"Si no se ha activado el formato de cadena personalizado, los nombres y los " +"valores de todas las expresiones se visualizan usando «%d» como especificador " +"de formato." + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "Expresiones a imprimir:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Ejecutar" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Barra de herramientas del depurador" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Ejecutable:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Archivo core:" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Eloy Cuadra" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ecuadra@eloihr.net" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/es/kdevmakebuilder.po kdevelop-4.0.1/po/es/kdevmakebuilder.po --- kdevelop-3.9.98/po/es/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/es/kdevmakebuilder.po 2010-07-17 20:09:39.000000000 +0100 @@ -0,0 +1,166 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Eloy Cuadra , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-27 17:07+0200\n" +"Last-Translator: Eloy Cuadra \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Constructor de Make" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Construcción de proyectos Make" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Carpeta de construcción «%1» no válida" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "No se puede crear la orden de construcción para el objetivo «%1»" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "Tarea fallida" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Fallido ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Terminado ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** Cancelado ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "compilando" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "generando" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "enlazando" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "construido" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "instalando" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "creando" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Ver" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Cancelar al encontrar el primer error:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Mostrar órdenes sin ejecutarlas:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Instalar como root:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Orden de instalación para root:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Número de tareas simultáneas:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Ejecutable de make:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Objetivo predeterminado de make:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Opciones adicionales de make:" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Perfil de entorno activo:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Eloy Cuadra" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ecuadra@eloihr.net" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/es/kdevqthelp.po kdevelop-4.0.1/po/es/kdevqthelp.po --- kdevelop-3.9.98/po/es/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/es/kdevqthelp.po 2010-07-17 20:09:39.000000000 +0100 @@ -0,0 +1,69 @@ +# translation of kdevqthelp.po to Spanish +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Eloy Cuadra , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-16 00:36+0100\n" +"Last-Translator: Eloy Cuadra \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "No se puede encontrar ninguna documentación para «%1»" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "Página de inicio de QtHelp" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Comprobar la documentación de la ayuda Qt" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Eloy Cuadra" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ecuadra@eloihr.net" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "Identificador a buscar:" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "Página de ayuda:" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "about:blank" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "Información de depuración:" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/et/CMakeLists.txt kdevelop-4.0.1/po/et/CMakeLists.txt --- kdevelop-3.9.98/po/et/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/et/CMakeLists.txt 2010-07-17 20:09:45.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(et ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/et/kdevcmakebuilder.po kdevelop-4.0.1/po/et/kdevcmakebuilder.po --- kdevelop-3.9.98/po/et/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/et/kdevcmakebuilder.po 2010-07-17 20:09:45.000000000 +0100 @@ -0,0 +1,91 @@ +# translation of kdevcmakebuilder.po to Estonian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Marek Laane , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-01-19 01:55+0200\n" +"Last-Translator: Marek Laane \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "CMake'i ehitaja" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "CMake'i projektide ehitamise toetus" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "Ehituskataloogi pole määratud, ei saa ehitada" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "Ehitamisest loobumine" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "Ehituskataloogi pole määratud, ei saa puhastada" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "Puhastamisest loobumine" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "Ehituskataloogi pole määratud, ei saa paigaldada" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "Paigaldamisest loobumine" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "Ehituskataloogi pole määratud, ei saa konfigureerida" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "Konfigureerimisest loobumine" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "Ehituskataloogi pole määratud, ei saa seda tühjendada" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "Ehituskataloogi pole võimalik tühjendada" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "Töö nurjus" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "CMake'i binaar:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marek Laane" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "bald@smail.ee" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/et/kdevcmake.po kdevelop-4.0.1/po/et/kdevcmake.po --- kdevelop-3.9.98/po/et/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/et/kdevcmake.po 2010-07-17 20:09:45.000000000 +0100 @@ -0,0 +1,483 @@ +# translation of kdevcmake.po to Estonian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Marek Laane , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-05-24 22:54+0300\n" +"Last-Translator: Marek Laane \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "CMake'i dokumentatsioon" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "CMake'i dokumentatsiooni toetus" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Puhverväärtus: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Puhverdokumentatsioon: %1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "Käsud" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Muutuja" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "Moodul" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "Omadus" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "Reegel" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "CMake'i sisulehekülg" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 on iganenud käsk ja seda ei peaks kasutama" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Lõpetamata funktsioon. " + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Nimi" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Tüüp" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Väärtus" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Kommentaar" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Muu" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"%1 kataloog eemaldatakse KDevelopi nimekirjast.\n" +"Kas KDevelop peaks selle eemaldama ka failisüsteemist?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "Eemaldamine nurjus: %1.\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "Lüli&ta värve" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "Üldine" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "See projekt on üks päev vana" +msgstr[1] "See projekt on %1 päeva vana" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "Seadistused on muudetud" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "KDE 4 rakendus" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "(C) 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Avatav dokument" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Ehituskataloogi seadistamine" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "%1 ehituskataloogi seadistamine" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "Valida tuleb cmake'i binaarfail." + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "Määrata tuleb ehituskataloog." + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "Juba loodud ehituskataloogi kasutamine." + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "Uue ehituskataloogi loomine." + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "Ehituskataloog on juba seadistatud." + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "See ehituskataloog on %1 jaoks, kuid projekti kataloog on %2." + +#: cmakebuilddirchooser.cpp:172 +msgid "You may not select a relative build directory." +msgstr "Suhtelist ehituskataloogi ei saa valida." + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "Valitud ehituskataloog pole tühi." + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "CMake'i haldur" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "CMake'i projektide haldamise toetus" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Hüppa sihtdefinitsioonile" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Kataloogi \"%1\" loomine." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop - CMake'i toetus" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "Kataloogi CMakeLists.txt faili loomine nurjus." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "Muudatuse salvestamine nurjus." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Kataloogi \"%1\" eemaldamine." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Faili \"%1\" eemaldamine." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Faili \"%1\" lisamine sihtmärgile \"%2\"." + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "Muudatuse salvestamine nurjus." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "Kataloogi \"%1\" nime muutmine." + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "Ehituskataloogi pole olemas ja seda ei saa luua." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Viga ehituskataloogi loomisel" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "VIGANE" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Käsk" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Makro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Asukoht" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "CMake'i &binaar:" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "&Ehituskataloog:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "Pa&igaldamise prefiks:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "Ehi&tamise tüüp:" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"KDevelop leidis sinu projektile mitu võimalikku projekti juurt. palun vali " +"neist õige." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marek Laane" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "bald@smail.ee" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "&Liikumine" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Lisa" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Eemalda" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Puhverväärtused" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Kommentaar:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Näita muid" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "CMake'i kataloog" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Muude väärtuste näitamine" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "tere, maailm" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Taustavärv:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Vali uus taustavärv" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Muuda taustavärvi, klõpsates siia ja valides uue värvi värvidialoogis.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Projekti vanus:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Esiplaani värv:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Vali uus esiplaani värv" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Muuda esiplaani värvi, klõpsates siia ja valides uue värvi värvidialoogis.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Projekti vanuse määramine (päevades)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "Projekti vanuse muutmine (päevades), valides uue päevade arvu." + + + + + + + + + + + + + + + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/et/kdevcpp.po kdevelop-4.0.1/po/et/kdevcpp.po --- kdevelop-3.9.98/po/et/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/et/kdevcpp.po 2010-07-17 20:09:45.000000000 +0100 @@ -0,0 +1,942 @@ +# translation of kdevcpp.po to Estonian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Marek Laane , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-05-31 15:47+0300\n" +"Last-Translator: Marek Laane \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "Pole kaasatud" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Initsialiseerimine" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Kaasamata konteiner" + +#: codecompletion/context.cpp:1272 +#, kde-format +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "1 %2 ülekoormus" +msgstr[1] "%1 %2 ülekoormust" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "Ühenda deklaratsiooniga %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Signaalid/pesad" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "Virtuaalne tühistus" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Funktsiooni teostus" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "C++ sisseehitatud" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Alista" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Teosta" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Loo pesa" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "Kehtivuspiirkonnast %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Lisa päise direktiiv" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Lisa eeldeklaratsioon" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "eeldeklaratsioon" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "Privaatklassi teostuse valikud" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Loobu" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "Uuenda definitsiooni %1(%2) -> (%3)" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Muudatuste rakendamine nurjus: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"Refaktoreerimine on eksperimentaalne võimalus, mis võib koodile kahju teha. " +"Enne selle kasutamist tee kindlasti varukoopia." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "Muuda %1 nime" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "Loo %1 eraldi definitsioon" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Loo klass" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "Kursori all pole deklaratsiooni" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "%1 lähtefail pole kättesaadav." + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "%1 DU-ahela uuendamine nurjus." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "Definitsiooni loomine sellele deklaratsioonile nurjus." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "Lisamine nurjus" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "Muudatuste rakendamine nurjus" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "%1 dokument puudub" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "Deklaratsioon läks uuendamisel kaotsi" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "Deklaratsioon asub kirjutamisõiguseta failis %1." + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "Uus nimi:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Muuda nime" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Märkus: nime muudetakse ka kõigil ülekoormatud funktsioonidel, " +"ülekoormustel, eeldeklaratsioonidel jms." + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Kasutused" + +#: codegen/simplerefactoring.cpp:445 +msgid "Declaration Info" +msgstr "Deklaratsiooni teave" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "\"%1\" saab nimeks \"%2\"" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "Muudatuste rakendamine nurjus: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Kohandatud päiste asukohtade seadistamine" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "Kohandatud päiste asukoha salvestamine kataloogi nurjus: %1" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Lisa kohandatud päise asukoht" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Ava projekt" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "Ei leitud: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "Midagi ei valitud, midagi ei lisatud sihtmärgile." + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "Baasklassi lahendamine nurjus, see lisatakse kaudselt: %1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "Vigane baasklass: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Loo kohalik deklaratsioon %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "Deklareeri %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "Deklaratsiooni ei leitud: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Päised" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Kaasamiste arv" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Defineeritud makrod" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Funktsiooni makro" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Makro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "Eeltöödeldud keha:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "Keha:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "Projekti %1 ehitamishaldur ei tagastanud ehitamiskataloogi" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"Päiste asukoha lahendaja vajab täiendavate päiste asukohtade lahendamiseks " +"ehitamiskataloogi. Peaksid selle määrama projektihalduris, kui sa pole seda " +"veel teinud." + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "Ehitamishaldur ei tagastanud päise asukohta" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"Ehitamishaldur ei tagastanud päiste asukohta %1, mida saab lahendada päiste " +"asukoha lahendajaga" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Päiste asukoha lahendaja: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Kasutatud ehitamiskataloog: \"%1\"\n" +"Päiste asukoha lahendaja: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" +"Püüti lahendada päise asukohta ajal, mil teine lahendamisprotsess veel käis" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "Kataloogis \"%1\" puudub Makefile" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "Probleem %1 päiste asukohtade lahendamisel" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "Puhverdatud: %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "Failinimi %1 paistab olevat vigane" + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "Uue töökataloogi ekstraktimine nurjus" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "Väljund oli: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "Rekursiivne make'i väljakutse nurjus" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "Parameetristring \"%1\" ei paista olevat korrektne. Väljundi oli: %2" + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "Kataloogi \"%1 ei ole olemas. Väljund oli: %2." + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "Vigane rekursiivne make'i väljakutse" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "Make'i väljundist ei õnnestunud kätte saada päiste asukohti" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Kataloog: \"%1\" Käsk: \"%2\" Väljund: \"%3\"" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "KDE eelpäise genereerija" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "Rakendus, mis loob lähtekoodi põhjal eelpäised (näiteks Qt päised)." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "(c) 2006: Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"KDE päiste kataloog - päised lähevad kataloogi includes/KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Ehitamisteave cmake'i XML-generaatorilt" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "Lõpetamata #if-lause" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "märk %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "oodati \"identifikaatorit\", leiti: %1" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
Märgise tekst
%1
Sisend
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "oodati \")\", leiti %1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "Jagamine nulliga" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Sisendtekst: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "oodati ``:'' = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else ilma #if-ita" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "#endif ilma #if-ita väljundi real %1" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Makro viga" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "Makro %1 väljakutses puudub argument number %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Formaalid: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "vigane sisend: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "See fail impordib aktiivse avatud dokumendi
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "Päiste asukohas %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Kaasatud %1 kaudu
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Kataloog %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "%1. päiste asukohas" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Päised" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Päiste asukoht" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "Kaasajad" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "C++ toetus" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "C++ keele toetus" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "Failid" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "Lülita definit&siooni/deklaratsiooni" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "Loo &uus klass" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Muuda deklaratsiooni nime" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "Liigu lähtekoodi" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Tühjendatud eelprotsessori poolt
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "Päisefailide parsimine" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "Tegeliku faili parsimine" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "Ei uuenda %1 DU-ahelat" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "Kasutuste ehitamine" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Valmis" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "Fail kaasati rekursiivselt iseendast: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "Päisefaili ei leitud: %1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"Otsitud päise asukoht:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "Faili '%1' avamine nurjus" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "Faili lugemine nurjus." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "Faili avamine nurjus." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "Faili õigused takistavad selle avamist lugemiseks." + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Liikumine" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Kood" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marek Laane" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "bald@smail.ee" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "C++ valikud" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Eksport:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Makro:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Avalik" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Kaitstud" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Privaatne" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "Pesa" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Signaal" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Salvestuskataloog" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"Kohandatud päiste asukoht salvestatakse erifaili nimega \".kdev_include_paths" +"\", mis salvestatakse lähtekoodi kataloogi. Kohandatud asukohta kasutatakse " +"kõigi sellesse kataloogi kuuluvate failide puhul." + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Salvestuskataloog:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Automaatne lahendamine" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"Kui projekt kasutab lihtsaid Makefile'e, võib olla võimalik selle " +"tööriistaga automaatselt lahendada päiste asukohad. Selleks tuleb siin " +"määrata lähte- ja ehitamiskataloogid." + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Lähtekataloog:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Ehitamiskataloog:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Kohandatud päiste asukohad" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "Siin saab lisada loendisse kohandatud päiste asukohti." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"Märkus: need seadistused ei mõjuta kuidagi kompilaatorit ega projekti, neid " +"kasutatakse ainult kaasatud päiste leidmiseks KDevelopis." + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" +"Valikud ja seadistused klassi privaatsete andmeväljade liigutamiseks " +"privaatstruktuuri" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "Privaatstruktuuri nimi:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Valikud" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

Vaikimisi deklareeritakse " +"privaatsed teostuse struktuurid kui struct, et neile oleks vaikimisi avalik juurdepääs.

\n" +"

Märgi kastike, kui soovid, " +"et privaatne teostuse struktuur deklareeritaks kui avaliku juurdepääsuga " +"klass.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Klassi kasutamine structi asemel" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

Kõigi konstruktori " +"initsialiseerija loendis initsialiseeritud aktiivsete muutujate liigutamine " +"privaatse teostuse struktuuri konstruktori initsialiseerija loendisse.

\n" +"

\n" +"

Märkus: kõik viited ja muutujad " +"selliste tüüpidega, mis ei paku vaikimisi konstruktoreid, liigutatakse " +"sõltumata antud valiku olekust.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "Muutuja initsialiseerimise liigutamine privaatstruktuuri" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" +"Kõigi parajasti deklareeritud privaatmeetodite liigutamine privaatse " +"teostuse struktuuri." + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "Privaatmeetodite liigutamine" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Viida nimi:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "Liikme muutuja nimi, millest saab privaatsele teostusele osutav viit" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/et/kdevcustommake.po kdevelop-4.0.1/po/et/kdevcustommake.po --- kdevelop-3.9.98/po/et/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/et/kdevcustommake.po 2010-07-17 20:09:45.000000000 +0100 @@ -0,0 +1,72 @@ +# translation of kdevcustommake.po to Estonian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Marek Laane , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-01-19 01:56+0200\n" +"Last-Translator: Marek Laane \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Kohandatud Makefile'i haldur" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Kohandatud Makefile'i projektide haldamise toetus" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Käivitamine" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marek Laane" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "bald@smail.ee" + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/et/kdevelop.po kdevelop-4.0.1/po/et/kdevelop.po --- kdevelop-3.9.98/po/et/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/et/kdevelop.po 2010-07-17 20:09:45.000000000 +0100 @@ -0,0 +1,735 @@ +# translation of kdevelop.po to Estonian +# Copyright (C) 2000,2002, 2003, 2004, 2009 Free Software Foundation, Inc. +# +# Peeter Russak , 2000,2002, 2003, 2004. +# Marek Laane , 2005-2006,2008-2009. +# Marek Laane , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-05-31 15:48+0300\n" +"Last-Translator: Marek Laane \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Kood" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "KDevelop4 projektifailid" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "Integreeritud arenduskeskkond KDevelop" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "Autoriõigus 1999-2010: KDevelopi arendajad" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "Uue seansi loomine määratud nimega." + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "Laaditav seanss. Tuleb määrata kas kontrollsumma või seansi nimi." + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "Saadaolevate seansside näitamine ja väljumine" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" +"Saadaolevad seansid (kasuta '-s KONTROLLSUMMA' või '-s NIMI' konkreetse " +"avamiseks):" + +#: main.cpp:79 +msgid "Hash" +msgstr "Kontrollsumma" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "Nimi: avatud projektid" + +#: main.cpp:88 +msgid "[running]" +msgstr "[töötab]" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "Silutava binaarfaili määramine." + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "Silumine" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "Seanss nimega %1 on juba olemas. Kasuta võtit -s selle avamiseks." + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"Tundmatu seansi %1 avamine nurjus. Otsi saadaolevaid seansse võtmega --" +"sessions või kasuta võtit -cs uue loomiseks." + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "Seanss %1 juba töötab." + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"KDevelopi käivitamine nurjus, asukohas %1 pole täitmisfaili kdevelop.bin. " +"Palun paranda KDevelopi paigaldus." + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Hooldaja, arhitektuur, VCS-i toetus, projektihalduse toetus, QMake'i " +"projektihaldur" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Kaashooldaja, Sublime UI, Ruby toetus" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Definitsioon-kasutuse ahel, C++ toetus, koodis liikumine, koodilõpetus, abi " +"koodi juures, ümberkujundamine" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "CMake'i toetus, käivitamise toetus, Krossi toetus" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "GDB lõimimine" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Tekstiredaktori lõimimine, definitsioonikasutuse ahel" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "" +"Veebilehekülje haldur, API dokumentatsioon, Doxygeni ja autoprojekti paigad" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "GDB lõimimine, veebiarenduse pluginad" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "Üldine haldur, veebiarenduse pluginad" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "Astyle'i ja Indenti toetus" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "Distributed VCS, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "Koodijupi komponendi, siluri ja kasutamisalased parandused" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "Subversioni plugin, kohandatud make'i haldur, üldised parandused" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "Portis Qt3 peale, parandused, valgrindi, diffi ja perforce'i toetus" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "C++ parser" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "KWrite'i autorid" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Kate redaktori komponent" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Disaineri kood" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Vanemate versioonide kaasautorid:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "KHTML autorid" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "HTML dokumentatsiooni komponent" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "Algne idee, baasarhitektuur, palju algset koodi" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, veaparandused" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Java ja Objective C toetus" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Siluri kasutajaliides" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "PHP toetus, kontekstimenüüd" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "KDE rakendute mallid" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Bashi toetus, rakenduste mallid" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Mitmed komponendid, htdigiga indekseerimine" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Abistas Automake'i halduri ja püsiva klassihoidla juures" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Abi KPartsi infrastruktuuri juures" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Ada toetus" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "QMake'i projektihaldur" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "MDI-režiimid, QEditor, veaparandused" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "PartExplorer, CvsParti ümberkujundamine, paigad, veaparandused" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Asendamise, järjehoidjate plugin, failinimekirja ja CTags2 plugin, mitmed " +"parandused ja paigad" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "FileCreate komponent ning muud parandused ja paigad" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "ClearCase'i toetus" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Ruby toetus" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Fortrani dokumentatsioon" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Pythoni dokumentatsiooni utiliit" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Doxygeni nõustaja" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Failide valimise komponent" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "C++ koodilõpetus, püsiv klassihoidla" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Paigad" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Abi Perli toetuse juures" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Dokumentatsiooni indeksi vaade" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Dokumentatsiooniotsija, QMake'i projektihalduri paigad, kasutamismugavuse " +"suurendamine, veaparandused..." + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "QMake projektihalduri paikamine" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "" +"qEditori, Automake'i ja veel hulga kraami puhastamine ja vigade parandamine" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Ruby keele kunstiline pool" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "Laaditava projekti URL" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Laaditavad failid" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" +"Siluri, näiteks gdb, käivitamine. Sellele peab järgnema silutav binaarfail " +"ning argumendid." + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (kasutatakse KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "Loomulikku käivitamisseadistuse tüüpi ei leitud" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "Käivitajat %1 ei leitud" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "%1 avamine nurjus" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "&Fail" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "&Redigeerimine" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "&Muu" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "&Vaade" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "&Koodi voltimine" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "&Tööriistad" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "Sõnalõpetus" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "&Seadistused" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Peamine tööriistariba" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "Seanss" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Projekt" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "&Käivitamine" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Liikumine" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Fail" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Redigeerimine" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "Redaktor" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Kood" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "Ak&en" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Seadistused" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Peeter Russak, Marek Laane" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "pezz@tkwcy.ee, bald@smail.ee" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/et/kdevformatters.po kdevelop-4.0.1/po/et/kdevformatters.po --- kdevelop-3.9.98/po/et/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/et/kdevformatters.po 2010-07-17 20:09:45.000000000 +0100 @@ -0,0 +1,470 @@ +# translation of kdevformatters.po to Estonian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Marek Laane , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-01-28 00:46+0200\n" +"Last-Translator: Marek Laane \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "Astyle'i vormindaja" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "Astyle'i kasutav vormindamistööriist" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Artistic Style on lähtekoodi treppija, vormindaja ja ilustaja C, C++ " +"ja Java programmeerimiskeeltele.
Kodulehekülg: http://astyle.sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Indenti vormindaja" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "Indenti kasutav vormindamistööriist" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"C lähtekoodi treppimine ja vormindamine
Programmi indent võib " +"kasutada koodi muutmiseks hõlpsamini loetavaks. Samuti võib see teisendada " +"koodi ühest C kirjutamisstiilist teise.
Programm indent mõistab " +"suurt osa C süntaksist, kuid üritab toime tulla ka ebatäieliku ja vigase " +"süntaksiga.
Kodulehekülg: http://www.gnu.org/software/indent" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Treppimine" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Tabeldusmärgid" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Tabeldusmärgid kõikjal" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Tühikud" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"Tabeldusmärgiks teisendatavate tühikute arv.\n" +"Tabeldusmärgi kohta tulevate tühikute arvu määrab redaktor." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Tabeldusmärkide teisendamine tühikuteks." + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Ta&beldusmärkide teisendamine tühikuteks" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "Tühjade ridade täitmine eelmiste ridade tühimärkidega." + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "Tüh&jade ridade täitmine" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Taane" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Plokid" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Sulud" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "Valikulaused" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Klassid" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Märgendid" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Nimeruumid" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Eelprotsessori direktiivid" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "Lülitid" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"Taande maksimaalne tühimärkide arv ühes lauses\n" +"suhtelise suurusena võrreldes eelmise reaga." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Taande minimaalne tühimärkide arv ühes tingimuses,\n" +"mis kuulub tingimuslause päisesse." + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Miinimum tingimuses:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "Kahekordne kehtiv" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Maksimum lauses:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Muu" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Tüüp" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Sulgude eraldamine lõpetavate päiste (nt. 'else', 'catch', ...)\n" +"ees neile vahetult eelnevatest lõpetavatest sulgudest." + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "Lõpetavate päiste eralda&mine" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "Ei muudeta" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Ühendamine" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Eraldamine" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Tühjade ridade lisamine omavahel mitteseotud plokkide, märgendite, klasside " +"jms. ümber\n" +"Teadaolevad probleemid:\n" +"\n" +"1. Kui lause EI OLE ploki isa,\n" +"on järgnevad laused kahekordse vahega.\n" +"Plokki kuuluvad laused\n" +"vormindatakse korrektselt.\n" +"\n" +"2. Kommentaarid eraldatakse ploki küljest.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "&Plokkide eraldamine" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Nagu --break-blocks, aga tühjad read lisatakse\n" +"ka lõpetavate päiste (nt. 'else', 'catch' jms.) ümber.\n" +"\n" +"Teadaolevad probleemid:\n" +"\n" +"1. Kui lause EI OLE ploki isa,\n" +"on järgnevad laused kahekordse vahega.\n" +"Plokki kuuluvad laused\n" +"vormindatakse korrektselt.\n" +"\n" +"2. Kommentaarid eraldatakse ploki küljest.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "Kõigi pl&okkide eraldamine" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "'else if()' lausete eraldamine kahte ritta." + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "i&f-else eraldamine" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Täidis" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Sulgude täitmine" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Tühikute eemaldamine" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "Ainult seest" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "Ainult väljast" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "Seest ja väljast" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Tühja ruumi lisamine operaatorite ümber.\n" +"Lisamine on püsiva loomuga:\n" +"kui tühi ruum on lisatud, ei saa seda enam eemaldada." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "Tühikute lis&amine tehtemärkide ümber" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "Üherealised" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" +"Mitut lauset sisaldavaid ridu ei eraldata\n" +"mitmeks ühelauseliseks reaks." + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "Ü&herealiste lausete säilitamine" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "Täielikult ühel real olevaid plokke ei eraldata." + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "Üherealiste plokkide säilitami&ne" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marek Laane" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "bald@smail.ee" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/et/kdevgdb.po kdevelop-4.0.1/po/et/kdevgdb.po --- kdevelop-3.9.98/po/et/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/et/kdevgdb.po 2010-07-17 20:09:45.000000000 +0100 @@ -0,0 +1,1110 @@ +# translation of kdevgdb.po to Estonian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Marek Laane , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevgdb\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-22 17:14+0200\n" +"Last-Translator: Marek Laane \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.0\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "Jälgijad" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "Viimati kasutatud" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
Vana väärtus: %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
Uus väärtus: %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "GDB toetus" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Rakenduste GDB-s töötamise toetus" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Pöördtransleerimine" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Uuri mälupildifaili..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Uuri mälupildifaili" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"Mälupildifaili uurimine

Laadib mälupildifaili, mis tavaliselt " +"luuakse pärast rakenduse krahhi. See fail sisaldab rakenduse mälu tõmmist " +"krahhi hetkel, võimaldades nii omamoodi \"lahkamist\".

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "Seonda protsessiga" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "Seonda protsessiga..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "Protsessiga seondamine

Seondab siluri töötava protsessiga." + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "Hinda: %1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "" +"Avaldise hindamine

Näitab kursori all oleva avaldise väärtust.

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "Jälgi: %1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Avaldise jälgimine

Lisab kursori all oleva avaldise muutujate/" +"jälgimisnimekirja." + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Vali uuritav mälupildifail..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "Mälupildifaili %1 uurimine" + +#: debuggerplugin.cpp:372 +msgid "Debug core file" +msgstr "Mälupildifaili silumine" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "Vali protsess, millega seondada..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "Protsessiga %1 ei seondata: silurit ei saa seondada iseendaga." + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "Seondamine protsessiga %1" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "Protsessi %1 silumine" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Silur" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"Keskkonnagruppi pole määratud, tundub, et tegemist on katkise seadistusega. " +"Palun käivita kontrolliks '%1' konfigureerimine. Kasutatakse vaikimisi " +"keskkonnagruppi." + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "Silur peatatud" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "Rakenduse töö katkestatud" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "Protsess lõpetas" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "Rakendus töötab" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "Rakenduse töös on paus" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"GDB lõpetas ebanormaalselt

Arvatavasti on tegemist GDB veaga. Uuri " +"GDB väljundi akent ja peata silur" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "GDB lõpetas ebanormaalselt" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "Saadeti GDB käsk, kui silur ei töötanud
Käsk oli:
%1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Sisemine viga" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Vigane siluri käsk
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "Vigane siluri käsk" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "Lõpetati normaalselt" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "Lõpetati signaaliga %1" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "Programm sai signaali %1 (%2)" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "Programm töötab" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"GDB ei suuda kasutada tty* ja pty* seadmeid.\n" +"Kontrolli /dev/tty* ja /dev/pty* õigusi.\n" +"Võib-olla pead administraatorina (root) tegema tty* ja pty* seadmetele " +"\"chmod ug+rw\" ja/või lisama kasutaja tty gruppi käsuga \"usermod -G tty " +"kasutajanimi\"." + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Hoiatus" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "Siluri viga

Silur andis teada järgmisest veast:

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Siluri viga" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "1 käsk järjekorras\n" +msgstr[1] "%1 käsku järjekorras\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "GDB töötleb 1 käsku\n" +msgstr[1] "GDB töötleb %1 käsku\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "Siluri olek: %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"Aktiivse käsu klass: '%1'\n" +"Aktiivse käsu tekst: '%2'\n" +"Aktiivse käsu originaaltekst: '%3'\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "Siluri olek" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "Vajalik on GDB 7.0.0 või uuem.
Sina kasutad: %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "GDB viga" + +#: debugsession.cpp:1417 +msgid "Could not start debugger:
" +msgstr "Siluri käivitamine nurjus.
" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "Käivitamise viga" + +#: debugsession.cpp:1429 +msgid "Could not attach debugger:
" +msgstr "Siluri kaasamine nurjus.
" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"Masinkoodi kuvamine

Täitmisfaili masinkood, kus aktiivne " +"instruktsioon on esile tõstetud. Instruktsioonidesse saab sisse või neist " +"üle astuda siluri tööriistariba nuppudega \"astu üle\" ja \"astu sisse\"." + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Pöördtransleerimise vaade" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Aadress" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Funktsioon" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Suhtaadress" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Instruktsioon" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "Silumisshelli \"%1\" tuvastamine nurjus." + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "Silumisshelli ei leitud" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" +"

Siluri komponenti tabas GDB vastuse töötlemisel sisemine viga. Palun anna " +"veast teada." + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"Erind on: %1\n" +"MI vastus on: %2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Sisemine siluri viga" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" +"Siluri käivitamine nurjus.

\"%1\" käivitamine nurjus. Kontrolli, " +"kas asukoht on korrektselt määratud." + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "Siluri käivitamine nurjus" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "GDB seadistamine" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "Omarakenduse käivitamine GDB-s" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "GDB väljund" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"GDB väljund

Kõigi täidetavate GDB käskude näitamine. Silumise ajal " +"võib anda ka mis tahes muid GDB käske.

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "&GDB käsk:" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "Paus rakenduse täitmises GDB käskude sisestamiseks" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Näita sisemisi käske" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"Määrab, kas KDevelopi poolt sisemiselt antud käske näidatakse või mitte. " +"
See mõjutab ainult tulevasi käske ning ei lisa ega eemalda vaatest juba " +"antud käske." + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "Kopeeri kõik" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Algus" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "Hulk" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "OK" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Loobu" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Mäluvaade" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (1 bait)" +msgstr[1] "%2 (%1 baiti)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Muuda mäluvahemikku" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Laadi uuesti" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Sulge vaade" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Siluri erivaated" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "Seonda protsessiga" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Mälupildifaili valimine" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "kdevelop: rakenduse silumise konsool" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Siluri seadistamine" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Siluri täitmisfail:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "GDB täitmisfail" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"Binaarfaili \"gdb\" käivitamiseks asukohast ($PATH) jäta väli tühjaks. " +"Kohandatud GDB käivitamiseks, näiteks mõnel muul arhitektuuril, sisesta siia " +"täitmisfaili nimi. GDB võib käivitada asukohast ($PATH) lihtsalt teise " +"nimega (nt. \"arm-gdb\"), millisel juhul tuleb see nimi siin anda, või siis " +"määrata GDB täitmisfaili täielik asukoht." + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "GDB käivitamine erishellis (peamiselt automake'i projektidele)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"Kui soovid käivitada GDB erishellis või -tööriistas, määra see siin. " +"Peamiselt on see mõeldud Automake'i põhistele projektidele, kus rakendus on " +"tegelikult vaid skript ning selleks, et see töötaks GDB sees, on vajalik " +"libtool." + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "&Silumisshell:" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"Kui soovid käivitada GDB erishellis või -tööriistas, määra see siin. " +"Peamiselt on see mõeldud Automake'i põhistele projektidele, kus rakendus on " +"tegelikult vaid skript ning selleks, et see töötaks GDB sees, on vajalik " +"libtool." + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Valikud" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"Staatiliste liikmete näitamine muudab GDB\n" +"aeglasemaks andmete loomisel KDE ja Qt keskkonnas.\n" +"See võib muuta andmete \"allkirja\",\n" +"millele tuginevad QString ja sõbrad,\n" +"aga kui pead neid väärtusi siluma,\n" +"siis märgi see valik." + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Staatiliste liik&mete näitamine" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"Pöördtransleeritud koodi näitamisel\n" +"võid valida meetodite moonutatud nimede näitamise.\n" +"Mittemoonutatud nimesid on samas hõlpsam lugeda." + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "Moonutusvaba&de nimede näitamine" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"Tavaliselt keeldub GDB seadmast katkestuspunkte \"dlopen\"\n" +"kaudu avatavate tundmatutesse teekidesse.\n" +"Selle valikuga saab panna GDB peatuma teegi laadimisel ja sellega\n" +"anda katkestuspunktide seadmise võimaluse. Täpsema info\n" +"saamiseks vaata dokumentatsiooni.\n" +"\n" +"Kui sa ei ava teeke \"dlopen\" abil, siis jäta märgistamata." + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "Katkestuspunktid &proovitakse määrata teegi laadimisel" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"Võimaldab sisestada terminalist, kui rakendus sisaldab\n" +"terminalist lugemise funktsioone (nt. cin, fgets jne).\n" +"Kui kasutad rakenduses terminalist sisestamist, siis märgista\n" +"see valik, muidu mitte." + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "Eraldi terminali lubamine rakenduse &IO jaoks" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"See skript on mõeldud tegelike käskude jaoks, mida on tarvis ühendumiseks " +"eemalt käivitatava rakendusega.\n" +"\tshell sleep 5\tootab määratud aja kaugprogrammi käivitumist\n" +"\ttarget remote ...\tühendumine kaugsiluriga\n" +"\tcontinue\t[lisavõimalus] silumise täitmine esimese katkestuspunktini" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "Kaugsilumine" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "&GDB konfigureerimise skript:" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "GDB konfigureerimise skript" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "GDB muudab selle skripti allikaks silumise käivitamisel." + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "Kä&ivitamise shelliskript:" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "Skript kaugrakenduse käivitamiseks" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"See shelliskript käivitatakse pärast seda, kui GDB\n" +"on muutnud GDB seadistusskripti allikaks.\n" +"Kaugsilumise korral käivitab see skript tegelikult kaugprotsessi.\n" +"[Eeldatakse, et silumise täitmisfail on sihtkohas kättesaadav,\n" +"võib-olla viimase sammuna allalaadimise teel.]\n" +"1) Leia võimalus käivitada käske kaugmasinas - rsh, ssh, telnet...\n" +"2a) Käivita sihtkohas \"gdbserver ... rakendus\".\n" +"kui sinu täitmisfail sisaldab GDB tüvirakendus.\n" +"2b) Käivita sihtkohas \"rakendus\"." + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "Käivitamise &GDB skript:" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "Skript ühendumiseks kaugrakendusega" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"See skript muudetakse GDB allikaks pärast kahe eelneva skripti täitmist.\n" +"Seda skripti kasutatakse tegelikeks käskudejs, millega luua ühendus mujal " +"käivitatavale failile.\n" +"\tshell sleep 5\toodatakse kaugprogrammi käivitumist\n" +"\ttarget remote ...\tühendumine kaugsiluriga\n" +"\tcontinue\t[mittekohustuslik] silumine esimese katkestuspunktini." + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "Jälituse seadistamine" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"Jälituse lubamine\n" +"

Jälitus on mehhanism, mis näitab automaatselt valitud avaldiste väärtusi " +"ning jätkab täitmist kuni katkestuspunktini. Seda võib võrrelda printf " +"silumisega, mis ei nõua lähtekoodi muutmist.

" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Jälituse lubamine" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "Kohandatud vormindusstring" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"Kohandatud vormindusstring\n" +"

Määra C keele vormindusstring, mida kasutatakse valitud avaldise " +"näitamisel. Näide:\n" +"

Jälituspunkt 1: g = %d

\n" +"Kui kohandatud vormindusstringi pole määratud, näidatakse kõigi avaldiste " +"nimesid ja väärtusi, kasutades kõigi avaldiste korral vorminduse " +"määratlejana \"%d\"." + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "Näidatavad avaldised:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Käivitamine" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Siluririba" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Täitmisfail:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Mälupildifail:" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marek Laane" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "bald@smail.ee" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/et/kdevmakebuilder.po kdevelop-4.0.1/po/et/kdevmakebuilder.po --- kdevelop-3.9.98/po/et/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/et/kdevmakebuilder.po 2010-07-17 20:09:45.000000000 +0100 @@ -0,0 +1,167 @@ +# translation of kdevmakebuilder.po to Estonian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Marek Laane , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-01-19 04:54+0200\n" +"Last-Translator: Marek Laane \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Make'i ehitaja" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Make'i projektide ehitamise toetus" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Vigane ehituskataloog \"%1\"" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "Ehitamiskäsu loomine sihtmärgile \"%1\" nurjus" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "Töö nurjus" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Nurjus ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Lõpetatud ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** Katkestatud ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "kompileeritakse" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "genereeritakse" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "lingitakse" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "ehitatakse" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "paigaldatakse" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "luuakse" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Vaade" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Katkestamine esimese vea puhul:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Käskude kuvamine, aga mitte täitmine:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Paigaldamine administraatorina:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Administraatorina paigaldamise käsk:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Üheaegsete tööde arv:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Make'i täitmisfail:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Vaikimisi make'i sihtmärk:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Make'i lisavõtmed:" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Aktiivne keskkonnaprofiil:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marek Laane" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "bald@smail.ee" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/et/kdevqthelp.po kdevelop-4.0.1/po/et/kdevqthelp.po --- kdevelop-3.9.98/po/et/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/et/kdevqthelp.po 2010-07-17 20:09:45.000000000 +0100 @@ -0,0 +1,69 @@ +# translation of kdevqthelp.po to Estonian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Marek Laane , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-15 18:07+0200\n" +"Last-Translator: Marek Laane \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "\"%1\" kohta ei leitud mingit dokumentatsiooni" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "QtHelpi kodulehekülg" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Qt abidokumentatsiooni uurimine" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marek Laane" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "bald@smail.ee" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "Otsitav identifikaator:" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "Abilehekülg:" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "about:blank" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "Silumisteave:" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fi/CMakeLists.txt kdevelop-4.0.1/po/fi/CMakeLists.txt --- kdevelop-3.9.98/po/fi/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fi/CMakeLists.txt 2010-07-17 20:09:58.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(fi ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/fi/kdevcmakebuilder.po kdevelop-4.0.1/po/fi/kdevcmakebuilder.po --- kdevelop-3.9.98/po/fi/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fi/kdevcmakebuilder.po 2010-07-17 20:09:58.000000000 +0100 @@ -0,0 +1,92 @@ +# Finnish messages for kdevcmakebuilder. +# Copyright © 2009 This_file_is_part_of_KDE +# This file is distributed under the same license as the kdevcmakebuilder package. +# Jorma Karvonen , 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder 4.4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-10-18 18:01+0200\n" +"Last-Translator: Jorma Karvonen \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "CMake-rakentaja" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Tuki CMake-projektien rakentamiselle" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "Mitään rakentamishakemistoa ei ole asetuksissa, ei voida rakentaa" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "Keskeytetään rakentaminen" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "Mitään rakentamishakemistoa ei ole asetuksissa, ei voida puhdistaa" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "Keskeytetään puhdistaminen" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "Mitään rakentamishakemistoa ei ole asetuksissa, ei voida asentaa" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "Keskeytetään asennus" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "Mitään rakentamishakemistoa ei ole asetuksissa, ei voida asettaa" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "Keskeytetään asetus" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "" +"Mitään rakentamishakemistoa ei ole asetuksissa, ei voida tyhjentää " +"rakentamishakemistoa builddir" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "Rakentamishakemiston builddir tyhjentäminen ei ole mahdollista" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "Työ epäonnistui" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "CMake-binääri:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Jorma Karvonen" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "karvonen.jorma@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fi/kdevcmake.po kdevelop-4.0.1/po/fi/kdevcmake.po --- kdevelop-3.9.98/po/fi/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fi/kdevcmake.po 2010-07-17 20:09:58.000000000 +0100 @@ -0,0 +1,482 @@ +# Finnish messages for kdevcmake. +# Copyright © 2009 This_file_is_part_of_KDE +# This file is distributed under the same license as the extragear package. +# Jorma Karvonen , 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake 4.4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2009-12-31 23:46+0200\n" +"Last-Translator: Jorma Karvonen \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "CMake-dokumentaatio" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Tuki CMake-dokumentaatiolle" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Välimuistiarvo: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Välimuistidokumentaatio: %1\n" + +#: cmakehelpdocumentation.cpp:33 +#, fuzzy +#| msgid "Command" +msgid "Commands" +msgstr "Komento" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Muuttuja" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "" + +#: cmakehelpdocumentation.cpp:42 +#, fuzzy +#| msgid "CMake Manager" +msgid "CMake Content Page" +msgstr "CMake-hallinta" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 on vanhentunut komento ja sitä ei pitäisi käyttää" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Päättämätön toiminto." + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Nimi" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Tyyppi" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Arvo" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Kommentti" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Lisätiedot" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"Hakemistoa %1 ollaan poistamassa KDevelop-ohjelman luettelosta.\n" +"Haluatko, että KDevelop poistaa sen myös tiedostojärjestelmästä?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "Ei voitu poistaa: %1.\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "Vai&hda värejä" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "Yleistä" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "Tämä projekti on yhden päivän ikäinen" +msgstr[1] "Tämä projekti on %1 päivää vanha" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "Asetukset muuttuivat" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "KDE 4-sovellus" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "© 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Avattava asiakirja" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Konfiguroi rakentamishakemisto" + +#: cmakebuilddirchooser.cpp:58 +#, fuzzy, kde-format +#| msgid "Configure a build directory" +msgid "Configure a build directory for %1" +msgstr "Konfiguroi rakentamishakemisto" + +#: cmakebuilddirchooser.cpp:100 +#, fuzzy +#| msgid "You need to select a cmake binary" +msgid "You need to select a cmake binary." +msgstr "Sinun tarvitsee valita cmake-binääri" + +#: cmakebuilddirchooser.cpp:143 +#, fuzzy +#| msgid "You need to specify a build directory" +msgid "You need to specify a build directory." +msgstr "Sinun tarvitsee määritellä rakentamishakemisto" + +#: cmakebuilddirchooser.cpp:150 +#, fuzzy +#| msgid "Using an already created build directory" +msgid "Using an already created build directory." +msgstr "Käytetään jo luotua rakentamishakemistoa" + +#: cmakebuilddirchooser.cpp:161 +#, fuzzy +#| msgid "Error creating build directory" +msgid "Creating a new build directory." +msgstr "Virhe luotaessa rakentamishakemistoa" + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "Rakentamishakemisto on jo konfiguroitu." + +#: cmakebuilddirchooser.cpp:169 +#, fuzzy, kde-format +#| msgid "This build directory is for %1, but the project directory is %2" +msgid "This build directory is for %1, but the project directory is %2." +msgstr "" +"Tämä rakentamishakemisto on kohteelle %1, mutta projektihakemisto on %2" + +#: cmakebuilddirchooser.cpp:172 +#, fuzzy +#| msgid "You need to specify a build directory" +msgid "You may not select a relative build directory." +msgstr "Sinun tarvitsee määritellä rakentamishakemisto" + +#: cmakebuilddirchooser.cpp:174 +#, fuzzy +#| msgid "The selected build directory is not empty" +msgid "The selected build directory is not empty." +msgstr "Valittu rakentamishakemisto ei ole tyhjä" + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "CMake-hallinta" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Tuki CMake-projektien hallintaan" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Hyppää kohdemäärittelyyn" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Luo kansio, jonka nimi on ”%1”." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop - CMake-tuki" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "Ei voitu luoda hakemiston CMakeLists.txt-tiedostoa." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "Ei voitu tallentaa muutosta." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Poista kansio, jonka nimi on ”%1”." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Poista tiedosto, jonka nimi on ”%1”." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Lisää tiedosto nimeltään ”%1” kohteeseen ”%2”." + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "Ei voida tallentaa muutosta." + +#: cmakemanager.cpp:1370 +#, fuzzy, kde-format +#| msgid "Remove a folder called '%1'." +msgid "Rename a folder called '%1'." +msgstr "Poista kansio, jonka nimi on ”%1”." + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "Rakentamishakemisto ei ollut olemassa ja sitä ei voitu luoda." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Virhe luotaessa rakentamishakemistoa" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "VIRHEELLINEN" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Komento" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Makro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Polku" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "CMake-&binääri:" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "&Rakentamishakemisto:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "Asennuspref&iksi:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "Rakentamis&tyyppi" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"KDevelop löysi useita mahdollisia projektin juurihakemistoja projektillesi, " +"valitse niistä oikea." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Jorma Karvonen" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "karvonen.jorma@gmail.com" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "&Siirrä" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Lisää" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Poista" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Välimuistiarvot" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Kommentti:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Näytä lisätiedot" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "CMake-hakemisto" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Näytä lisäarvot" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "hei, maailma" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Taustaväri:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Valitse uusi taustaväri" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Vaihda taustaväri näpäyttämällä tähän ja valitsemalla uuden " +"värin värivalintaikkunassa.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Projektin ikä:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Edustaväri:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Valitse uusi edustaväri" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Vaihda edustaväri näpäyttämällä tänne ja valitsemalla uusi " +"väri värivalintaikkunassa.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Aseta projektin ikä (päivissä)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "Muuta projektin ikää (päivissä) valitsemalla uuden päivien numeron." \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fi/kdevcpp.po kdevelop-4.0.1/po/fi/kdevcpp.po --- kdevelop-3.9.98/po/fi/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fi/kdevcpp.po 2010-07-17 20:09:58.000000000 +0100 @@ -0,0 +1,931 @@ +# Finnish messages for kdevcpp. +# Copyright © 2009 This_file_is_part_of_KDE +# This file is distributed under the same license as the kdevcpp package. +# Jorma Karvonen , 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp 4.4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-01-01 15:45+0200\n" +"Last-Translator: Jorma Karvonen \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "Ei sisällytetty" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Alusta" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Ei sisällytettyä säiliötä" + +#: codecompletion/context.cpp:1272 +#, fuzzy, kde-format +#| msgctxt "" +#| "Here, overload is used as a programming term. This string is used to " +#| "display how many overloaded versions there are of the function whose name " +#| "is the second argument. The numeric argument is always greater than one, " +#| "so translation of the singular case is only necessary in languages where " +#| "the singular form is used for 21, 31 etc." +#| msgid "1 overload of %2" +#| msgid_plural "%1 overloads of %2" +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "1/%2 ylikuormitettua funktiota" +msgstr[1] "%1/%2 ylikuormitettua funktiota" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "Yhdistetty kohteeseen %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Signaalit/Slot-funktiot" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "Virtuaalinen korvaus" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Toteutusfunktio" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "Sisäänrakennettu C++-toiminto" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Korvaa" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Toteuta" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Luo slot-funktio" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "Kohteesta %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Lisää include-direktiivi" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Lisää edelleenesittely" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "edelleenesittele" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "Yksityisen luokan toteutusvalitsimet" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Peru" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "Päivitä määrittely kohteesta %1(%2) kohteeseen (%3)" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Muutosten soveltaminen epäonnistui: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"Refaktorointi on kokeellinen ominaisuus, se saattaa vaurioittaa koodiasi. " +"Varmista että teet varmuuskopion ennen sen käyttämistä." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "Nimeä uudelleen %1" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "Luo erillinen määrittely kohteelle %1" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Luo luokka" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "Kohdistimen kohdalla ei ole esittelyä" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "Lähdekoodia ei ole saatavissa kohteelle %1" + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "DU-ketjun päivitys kohteelle %1 epäonnistui." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "Ei voi luoda määrittelyä tälle esittelylle." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "Lisäys epäonnistui" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "Muutosten soveltaminen epäonnistui" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "Ei asiakirjaa kohteelle %1" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "Esittely katosi päivitettäessä" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "" + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "Uusi nimi:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Nimeä uudelleen" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Huomaa: Kaikki ylikuormitetut funktiot, ylikuormat, edelleenesittelyt, jne. " +"nimetään myös uudelleen" + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Käyttää" + +#: codegen/simplerefactoring.cpp:445 +#, fuzzy +#| msgid "Declaration not found: %1" +msgid "Declaration Info" +msgstr "Esittelyä ei löytynyt: %1" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "Nimetään uudelleen ”%1” nimellä ”%2”" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "Muutosten soveltaminen epäonnistui: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Aseta räätälöidyt include-polut" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "" +"Räätälöityjen include-polkujen tallentaminen epäonnistui hakemistossa: %1" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Lisää räätälöity include-polku" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Avaa projekti" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "Ei löytynyt: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "Ei valitse mitään, ei lisätä kohdetta." + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "Ei voitu ratkaista perusluokkaa, lisätään se epäsuorasti: %1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "Virheellinen perusluokka: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Luo paikallinen esittely %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "Esittele %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "Esittelyä ei löytynyt: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Sisältää" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Sisällytetty:" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Määritellyt makrot" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Funktiomakro" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Makro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "Esiprosessoitu runko:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "Runko:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "Rakentamishallinta projektille %1 ei palauttanut rakentamishakemistoa" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"Include-polun ratkaisija tarvitsee rakentamishakemiston ratkaistakseen " +"ylimääräiset include-polut. Harkitse rakentamishakemiston asettamista " +"projektinhallinnassa, jos et ole vielä tehnyt sitä." + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "Rakentamishallinta ei palauttanut include-polkua" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"Rakentamishallinta ei palauttanut include-polkua %1, jonka include-" +"polkuratkaisija olisi voinut ratkaista" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Include-polkuratkaisija: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Käytetty rakentamishakemisto: ”%1”\n" +"Include-polkuratkaisija: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" +"Yritettiin include-polkuselvitystä samalla kun toinen selvitysprosessi oli " +"vielä käynnissä" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "Makefile puuttuu kansiossa ”%1”" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "Pulma yritettäessä ratkaista include-polkuja kohteelle %1" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "Välimuistissa: %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "Tiedostonimi %1 tuntuu olevan vääränmuotoinen" + +#: includepathresolver.cpp:775 +#, fuzzy +#| msgid "Failed to save custom include paths in directory: %1" +msgid "Failed to extract new working directory" +msgstr "" +"Räätälöityjen include-polkujen tallentaminen epäonnistui hakemistossa: %1" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "Tuloste oli: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "Rekursiivinnen make-kutsu epäonnistui" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "Parametrimerkkijono ”%1” ei näytä oikealta. Tuloste oli: %2." + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "Hakemistoa ”%1” ei ole olemassa. Tuloste oli: %2." + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "Vääränmuotoinen rekursiivinen make-kutsu" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "Ei voitu poimia include-polkuja make-tulosteesta" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Kansio: ”%1” Komento: ”%2” Tuloste: ”%3”" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "KDE jatkolähetysotsaketuottaja" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "" +"Sovellus, joka luo jatkolähetysotsakkeita (kuten Qt-otsakkeita) " +"lähdekoodista." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "© 2006, Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"KDE-include-hakemisto - otsaketiedostot menevät hakemiston " +"includes/KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Rakentamistiedot cmake XML-tuottajasta" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "Päättymätön #if-lause" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "merkki %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "Odotettiin ”identifier”, löydettiin: %1" + +# Yksi token-sanan merkitys on yhtenäinen merkkijono, siis sellainen, jossa ei ole välilyöntejä tai muita tyhjemerkkejä. +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
Merkkiteksti
%1
Syöte
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "Odotettiin ”)”, löydettiin %1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "Jako nollalla" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Syöteteksti: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "odotettiin ``:'' = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else-lause ilman #if-lausetta" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "#endif-lause ilman #if-lausetta tulosterivillä %1" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Makrovirhe" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "Kutsussa makroon %1 puuttuu argumentti numero %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Muodolliset: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "virheellinen syöte: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "Tämä tiedosto tuo parhaillaan avoinna olevan asiakirjan
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "Include-polussa %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Sisällytetty kohteen%1 kautta
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Hakemisto %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "Include-polussa numero %1" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Sisältää" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Include-polku" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "Sisällytettyjä" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "C++-tuki" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "Tuki C++-kielelle" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "Tiedostot" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "&Vaihda määrittely/esittely" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "Luo &Uusi luokka" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Nimeä esittely uudelleen" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "Siirry lähdekoodiin" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Esiprosessorin tyhjentämä
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "Jäsennetään sisällytettyjä tiedostoja" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "Jäsennetään kyseistä tiedostoa" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "Ei päivitetä du-ketjua kohteelle %1" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "Rakentaminen käyttää" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Valmis" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "Tiedosto lisättiin rekursiivisesti itsensä sisältä: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "Sisällytettyä tiedostoa ei löytynyt: %1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"Etsitty include-polku:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "Ei voitu avata tiedostoa ”%1”" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "Tiedostoa ei voitu lukea kohteesta." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "Tiedostoa ei voitu avata." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "Tiedoston käyttöoikeudet estävät avauksen lukemista varten." + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Navigaatio" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Koodi" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Jorma Karvonen" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "karvonen.jorma@gmail.com" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "C++-valitsimet" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Vie:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Makro:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Julkinen" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Suojattu" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Yksityinen" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "Slot-funktio" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Signaali" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Tallennushakemisto" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"Räätälöidyt include-polut tallennetaan erikoistiedostoihin nimeltään ”." +"kdev_include_paths”, jotka on tallennettu lähdehakemistoon. Räätälöityä " +"polkua käytetään kaikille tuon hakemiston alla oleville tiedostoille." + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Tallennushakemisto:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Automaattinen selvitys" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"Jos projektisi käyttää yksinkertaisia Makefile-tiedostoja, saattaa olla " +"mahdollista automaattisesti ratkaista include-polut käyttäen make-" +"apuohjelmaa. Aseta tätä tarkoitusta varten tänne kartta lähdehakemistoista " +"rakentamishakemistoihin" + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Lähdehakemisto:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Rakentamishakemisto:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Räätälöidyt include-polut" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "Voit lisätä räätälöityjen include-polkujen luettelon tänne." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"Huomaa: Nämä asetukset eivät vaikuta kääntäjään tai projektiin millään " +"tavoin, niitä käytetään vain sisällytettyjen otsaketiedostojen löytämiseen " +"KDevelopin sisällä." + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" +"Valitsimet & asetukset luokan yksityisten data-kenttien siirtämiseksi " +"yksityiseen rakenteeseen" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "Yksityinen rakennenimi:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Valitsimet" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

Oletusarvona private-" +"toteutusrakenteet on esitelty julkisena struct-rakenteena.

\n" +"

Valitse tämä valinta, jos " +"toivot private-toteutusrakenteen esiteltävän julkisena class-rakenteena.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Käytä luokkaa eikä struct-rakennetta" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

Siirrä kaikki nykyiset " +"muuttujat, jotka alustetaan muodostimen alustajaluettelossa, private-" +"toteutusrakenteen muodostimen alustustajaluetteloon.

\n" +"

\n" +"

Huomaa: Kaikki viitteet ja muuttujat " +"tyypeillä, jotka eivät tarjoa oletusmuodostinta, siirretään huolimatta tämän " +"valitsimen tilasta.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "Siirrä muuttujien alustus yksityiseen rakenteeseen" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" +"Siirrä kaikki nykyisin esitellyt yksityiset metodit yksityiseen " +"toteutusrakenteeseen." + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "Siirrä yksityiset metodit" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Osoitinnimi:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "Nimi sille jäsenmuuttujalle, joka on osoitin yksityiseen toteutukseen" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fi/kdevcustommake.po kdevelop-4.0.1/po/fi/kdevcustommake.po --- kdevelop-3.9.98/po/fi/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fi/kdevcustommake.po 2010-07-17 20:09:58.000000000 +0100 @@ -0,0 +1,42 @@ +# Finnish messages for kdevcustommake. +# Copyright © 2009 This_file_is_part_of_KDE +# This file is distributed under the same license as the kdevcustommake package. +# Jorma Karvonen , 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake 4.4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-10-15 18:04+0200\n" +"Last-Translator: Jorma Karvonen \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Räätälöidyn Makefile-tiedoston hallinta" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Tuki projektien räätälöityjen makefile-tietostojen hallinnalle" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Suorita" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Jorma Karvonen" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "karvonen.jorma@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fi/kdevelop.po kdevelop-4.0.1/po/fi/kdevelop.po --- kdevelop-3.9.98/po/fi/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fi/kdevelop.po 2010-07-17 20:09:58.000000000 +0100 @@ -0,0 +1,776 @@ +# Finnish messages for kdevelop. +# Copyright © 2009 This_file_is_part_of_KDE +# This file is distributed under the same license as the kdevelop package. +# KDevelop, original translator Sami Kuhmonen +# Teemu Rytilahti , 2003. +# Kim Enkovaara , 2003. +# Teemu Rytilahti , 2003. +# Tapio Mattila , 2004. +# Ilpo Kantonen , 2005. +# Lasse Liehu , 2005, 2006. +# Jorma Karvonen , 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevelop 4.4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2009-10-18 19:22+0200\n" +"Last-Translator: Jorma Karvonen \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Koo&di" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "KDevelop4-projektitiedostot" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "KDevelop-sovelluskehitysympäristö" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "" + +#: main.cpp:64 main_internal.cpp:85 +#, fuzzy +#| msgid "Copyright 1999-2009, The KDevelop developers" +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "Copyright 1999-2009, KDevelop-kehittäjät" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "" + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "" + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" + +#: main.cpp:79 +msgid "Hash" +msgstr "" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "" + +#: main.cpp:88 +msgid "[running]" +msgstr "" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "" + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "" + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "" + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Ylläpitäjä, arkkitehtuuri, VCS-tuki, Projektin hallintatuki, QMake " +"Projektipäällikkö" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Arkkitehtuuri, Sublime-käyttäjäliittymä, Ruby-tuki" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Määrittely-Käyttöketju, C++-tuki, koodinavigaatio, koodin täydentäminen, " +"koodausavustaja, refaktorointi" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "CMake-tuki, suoritussympäristötuki, Kross-tuki" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "GDB-integraatio" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Tekstimuokkainintegraatio, määrittely-käyttöketju" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "" +"Julkaisukoordinaattori, API dokumentaatio-, Doxygen- ja autoproject-" +"paikkauksia" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +#, fuzzy +#| msgid "astyle and ident support" +msgid "astyle and indent support" +msgstr "astyle- ja ident-tuki" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "Hajautettu VCS, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "SnippetPart, virheenjäljittäjä ja käytettävyyspaikkauksia" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "Subversion plugin, räätätöity Make-hallinta, kokonaisparannukset" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "Soveltanut Qt 3:een, paikkauksia, valgrind-, diff- ja perforce-tuki" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "C++-jäsennin" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "KWrite-tekijä" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Kate editori-komponentti" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt-ohjelmisto" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Designer-koodi" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Osallisena vanhemmissa versioissa:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "KHTML-tekijät" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "HTML dokumentointi-komponentti" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "Alkuperäinen idea, perusarkkitehtuuri, paljon alkuperäistä lähdekoodia" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, virhekorjauksia" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Java & Objective-C -tuki" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Virheenjäljittimen käyttöliittymä" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "PHP-tuki, kontekstivalikko asioita" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "KDE-sovelluspohjat" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Dist-osa, bash-tuki, sovelluspohjia" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Klüpfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Useita konponentteja, htdig-indeksointi" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Röder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Avustanut Automake-managerissa ja persistenttiluokkasäilön kanssa" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Avustanut KPartsin perusrakenteessa" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Ada-tuki" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "QMake-projektimanageri" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "MDI-moodit, QEditor, virhekorjauksia" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "" +"PartExplorer, CvsPart:n uudelleensuunnittelu, paikkauksia, virhekorjauksia" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Korvaus-, Kirjanmerkit-, Tiedostoluettelo- ja CTags2-liitännäiset. Yleisiä " +"parannuksia ja paikkauksia" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Tiedostoluonti-osa ja muita palasia ja paikkauksia" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "ClearCase-tuki" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Ruby-tuki" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Fortran-dokumentaatio" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Pythonin dokumentointi-apuohjelma" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Doxygen-velho" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Tiedostonvalinta-komponentti" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "C++-koodintäydennys, persistenttiluokkasäilö" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Paikkoja" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Avustanut Perl-tuessa" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Dokumentaation hakemistonäkymä" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Documentaatioetsijä, qmake-projektinhallintapaikkauksia, " +"käytettävyysparannuksia, virheenkorjauksia ... " + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Köpfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "QMake-projektimanagerin paikkoja" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "" +"Ohjelman qEditor siistiminen ja virhekorjauksia, AutoMake ja paljon muita " +"asioita" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Kuvia ruby-kielellä" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "Url projektin hakemiseen" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Ladattavat tiedostot" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (käytetään KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "Ei voitu avata %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "&File" +msgid "&File" +msgstr "&Tiedostot" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "&Edit" +msgid "&Edit" +msgstr "&Muokkaa" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "&View" +msgid "&View" +msgstr "&Näkymät" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "Tools" +msgid "&Tools" +msgstr "Työkalut" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "Settings" +msgid "&Settings" +msgstr "Asetukset" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Päätyökalupalkki" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "Settings" +msgctxt "@title:menu" +msgid "Session" +msgstr "Asetukset" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Projekti" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "&Suorita" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Navigaatio" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Tiedostot" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Muokkaa" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "&Edit" +msgctxt "@title:menu" +msgid "Editor" +msgstr "&Muokkaa" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +#, fuzzy +#| msgid "Code" +msgctxt "@title:menu" +msgid "Code" +msgstr "Koo&di" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Ikkuna" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Asetukset" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Tapio Kautto,Teemu Rytilahti,Tapio Mattila,Jorma Karvonen" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"eleknader@phnet.fi,teemu.rytilahti@d5k.net,tapio.mattila@kde-fi.org,karvonen." +"jorma@gmail.com" + + + + +#, fuzzy + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fi/kdevmakebuilder.po kdevelop-4.0.1/po/fi/kdevmakebuilder.po --- kdevelop-3.9.98/po/fi/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fi/kdevmakebuilder.po 2010-07-17 20:09:58.000000000 +0100 @@ -0,0 +1,166 @@ +# Finnish messages for kdevmakebuilder. +# Copyright © 2009 This_file_is_part_of_KDE +# This file is distributed under the same license as the kdevmakebuilder package. +# Jorma Karvonen , 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder 4.4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-10-15 19:10+0200\n" +"Last-Translator: Jorma Karvonen \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Make-rakentaja" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Tuki Make-projektien rakentamiselle" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Virheellinen rakentamishakemisto ”%1”" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "Ei voitu luoda rakentamiskomentoa kohteelle ”%1”" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "Työ epäonnistui" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Epäonnistui ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Päättyi ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** Keskeytetty ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "käännetään" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "generoidaan" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "linkitetään" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "rakennettu" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "asennetaan" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "luodaan" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Katso" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Keskeytä ensimmäisellä virheellä:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Näytä komennot, mutta älä suorita niitä:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Asenna root-käyttäjänä:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Root-oikeuksien asennuskomento:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Samanaikaisten töiden lukumäärä:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Tee suoritettava tiedosto:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Make-oletuskohde:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Make-lisävalitsimet" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Aktivoi ympäristöprofiili:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Jorma Karvonen" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "karvonen.jorma@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fi/kdevqthelp.po kdevelop-4.0.1/po/fi/kdevqthelp.po --- kdevelop-3.9.98/po/fi/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fi/kdevqthelp.po 2010-07-17 20:09:58.000000000 +0100 @@ -0,0 +1,68 @@ +# Finnish messages for kdevqthelp. +# Copyright © 2009 This_file_is_part_of_KDE +# This file is distributed under the same license as the kdevqthelp package. +# Jorma Karvonen , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp 4.4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-10-18 18:24+0200\n" +"Last-Translator: Jorma Karvonen \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "Ei voitu löytää mitään dokumenttia kohteesta ”%1”" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "Qt-opaste" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Tarkista Qt-opastedokumentaatio" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Jorma Karvonen" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "karvonen.jorma@gmail.com" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fr/CMakeLists.txt kdevelop-4.0.1/po/fr/CMakeLists.txt --- kdevelop-3.9.98/po/fr/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fr/CMakeLists.txt 2010-07-17 20:10:02.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(fr ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/fr/kdevcmakebuilder.po kdevelop-4.0.1/po/fr/kdevcmakebuilder.po --- kdevelop-3.9.98/po/fr/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fr/kdevcmakebuilder.po 2010-07-17 20:10:02.000000000 +0100 @@ -0,0 +1,92 @@ +# translation of kdevcmakebuilder.po to Français +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Joëlle Cornavin , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-02-20 20:24+0100\n" +"Last-Translator: Joëlle Cornavin \n" +"Language-Team: Français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "Compilateur CMake" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Prise en charge de la compilation de projets avec CMake" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "Aucun dossier de compilation n'est configuré, construction impossible" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "Interruption de la construction" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "Aucun dossier de compilation n'est configuré, nettoyage impossible" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "Interruption du nettoyage" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "Aucun dossier de compilation n'est configuré, installation impossible" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "Interruption de l'installation" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "Aucun dossier de compilation n'est configuré, configuration impossible" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "Interruption de la configuration" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "" +"Aucun dossier de compilation n'est configuré, effacement du dossier de " +"construction impossible" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "Aucun effacement du dossier de compilation n'est possible" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "La tâche a échoué" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake : %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "Binaire CMake :" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Joëlle Cornavin" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "jcornavi@club-internet.fr" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fr/kdevcmake.po kdevelop-4.0.1/po/fr/kdevcmake.po --- kdevelop-3.9.98/po/fr/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fr/kdevcmake.po 2010-07-17 20:10:02.000000000 +0100 @@ -0,0 +1,471 @@ +# translation of kdevcmake.po to Français +# translation of kdevcmake.po to +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Joëlle Cornavin , 2008, 2009. +# Joëlle Cornavin , 2009. +# Joëlle Cornavin , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-05-23 22:05+0200\n" +"Last-Translator: Joëlle Cornavin \n" +"Language-Team: Français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "Documentation de CMake" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Prise en charge de la documentation de CMake" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Valeur en cache : %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Documentation en cache : %1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "Commandes" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Variable" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "Module" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "Propriété" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "Politique" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "Page de contenu de CMake" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 est une commande déconseillée et ne doit donc pas être utilisée" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Fonction non finie : " + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Nom" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Type" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Valeur" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Commentaire" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Avancé" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"Le dossier %1 est sur le point d'être supprimé de la liste de KDevelop.\n" +"Voulez-vous que KDevelop le supprimer du système de fichiers également ?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "Impossible de supprimer : %1.\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "Chan&ger de couleurs" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "Général" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "Ce projet date de 1 jour" +msgstr[1] "Ce projet date de %1 jours" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "Les paramètres ont été modifiés" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "Une application pour KDE 4" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "(C) 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Document à ouvrir" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Configurer un dossier de compilation" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "Configurer un dossier de compilation pour %1" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "Vous devez sélectionner un binaire « cmake »." + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "Vous devez spécifier un dossier de compilation." + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "Utilisation d'un dossier de compilation déjà créé." + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "Création d'un nouveau dossier de compilation." + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "Dossier de compilation déjà configuré." + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "" +"Ce dossier de compilation est destiné à %1, mais le dossier de projet est %2." + +#: cmakebuilddirchooser.cpp:172 +msgid "You may not select a relative build directory." +msgstr "Vous ne pouvez pas sélectionner un dossier de compilation relative." + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "Le dossier de compilation sélectionné n'est pas vide." + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "Gestionnaire CMake" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Prise en charge de la gestion de projets avec CMake" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Passer à la définition de la cible" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Créer un dossier appelé « %1 »." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop - Prise en charge de CMake" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "Impossible de créer le fichier CMakeLists.txt du dossier." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "Impossible d'enregistrer la modification." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Supprimer un dossier appelé « %1 »." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Supprimer un fichier appelé « %1 »." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Ajouter un fichier appelé « %1 » à la cible « %2 »." + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "Impossible d'enregistrer la modification." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "Renommer un dossier appelé « %1 »." + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "" +"Le dossier de compilation n'existe pas et il a été impossible de le créer." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Erreur lors de la création du dossier de compilation" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "NON VALABLE" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Commande" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Macro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Emplacement" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "&Binaire CMake :" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "Dossier de compilatio&n :" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "Préfixe d'&installation :" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "&Type de compilation :" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"KDevelop a trouvé plusieurs racines de projets possibles pour votre projet. " +"Veuillez choisir celui qui convient." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Joëlle Cornavin" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "jcornavin@laposte.net" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "&Déplacer" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Ajouter" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Supprimer" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Placer des valeurs dans un cache" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Commentaire :" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Afficher les propriétés avancées" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "Dossier CMake" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Afficher les valeurs avancées" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "bonjour, monde" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Couleur de fond :" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Choisissez une nouvelle couleur de fond" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Changez la couleur de " +"fond en cliquant ici et en " +"choisissant la nouvelle couleur dans " +"la boîte de dialogue des couleurs." +"

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Âge du projet :" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Couleur de premier plan :" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Choisissez une nouvelle couleur de premier plan" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Changez la couleur de " +"premier plan en cliquant ici et en " +"choisissant la nouvelle couleur dans " +"la boîte de dialogue des couleurs." +"

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Définir l'âge du projet (en jours)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "" +"Modifiez l'âge du projet (en jours) en choisissant un nouveau nombre de " +"jours." \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fr/kdevcpp.po kdevelop-4.0.1/po/fr/kdevcpp.po --- kdevelop-3.9.98/po/fr/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fr/kdevcpp.po 2010-07-17 20:10:02.000000000 +0100 @@ -0,0 +1,1193 @@ +# translation of kdevcmake.po to Français +# translation of kdevcmake.po to +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Joëlle Cornavin , 2008, 2009. +# Joëlle Cornavin , 2009. +# Joëlle Cornavin , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-05-23 21:04+0200\n" +"Last-Translator: Joëlle Cornavin \n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "" + +#: codecompletion/context.cpp:1272 +#, kde-format +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "" +msgstr[1] "" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "" + +#: codecompletion/implementationhelperitem.cpp:82 +#, fuzzy +msgid "Implement" +msgstr "Commentaire" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "" + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "" + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "" + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "" + +#: codegen/simplerefactoring.cpp:424 +#, fuzzy +msgid "New name:" +msgstr "Nom" + +#: codegen/simplerefactoring.cpp:434 +#, fuzzy +msgid "Rename" +msgstr "Supprimer" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "" + +#: codegen/simplerefactoring.cpp:445 +msgid "Declaration Info" +msgstr "" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "" + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Macro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "" + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "" + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "" + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "" + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "" + +#: parser/rpp/pp-macro-expander.cpp:102 +#, fuzzy +#| msgid "Macro" +msgid "Macro error" +msgstr "Macro" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "" + +#: quickopen.cpp:214 +#, fuzzy, kde-format +msgid "Directory %1" +msgstr "Dossier CMake" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" + +#: preprocessjob.cpp:680 +#, fuzzy, kde-format +msgid "Could not open file '%1'" +msgstr "Impossible de supprimer : %1.\n" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "" + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "" + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "" + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +#, fuzzy +msgctxt "@title:menu" +msgid "Code" +msgstr "Module" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Joëlle Cornavin" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "jcornavin@laposte.net" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +#, fuzzy +#| msgid "Macro" +msgid "&Macro:" +msgstr "Macro" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +#, fuzzy +msgid "Public" +msgstr "Politique" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +#, fuzzy +msgid "Protected" +msgstr "Âge du projet :" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +#, fuzzy +msgid "Storage Directory" +msgstr "Dossier CMake" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +#, fuzzy +msgid "Storage Directory:" +msgstr "Dossier CMake" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +#, fuzzy +msgid "Source Directory:" +msgstr "Dossier de compilatio&n :" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +#, fuzzy +msgid "Build Directory:" +msgstr "Dossier de compilatio&n :" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "" + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +#, fuzzy +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"

Changez la couleur de " +"fond en cliquant ici et en " +"choisissant la nouvelle couleur dans " +"la boîte de dialogue des couleurs." +"

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +#, fuzzy +#| msgctxt "NAME OF TRANSLATORS" +#| msgid "Your names" +msgid "Pointer name:" +msgstr "Joëlle Cornavin" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "" + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fr/kdevcustommake.po kdevelop-4.0.1/po/fr/kdevcustommake.po --- kdevelop-3.9.98/po/fr/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fr/kdevcustommake.po 2010-07-17 20:10:02.000000000 +0100 @@ -0,0 +1,43 @@ +# translation of kdevcustommake.po to Français +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Joëlle Cornavin , 2008, 2009. +# Joëlle Cornavin , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-02-02 19:46+0100\n" +"Last-Translator: Joëlle Cornavin \n" +"Language-Team: Français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Gestionnaire de Makefiles personnalisés" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Prise en charge de la gestion de projets Makefile personnalisés" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Exécuter" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Joëlle Cornavin" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "jcornavin@laposte.net" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fr/kdevelop.po kdevelop-4.0.1/po/fr/kdevelop.po --- kdevelop-3.9.98/po/fr/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fr/kdevelop.po 2010-07-17 20:10:02.000000000 +0100 @@ -0,0 +1,764 @@ +# translation of kdevelop.po to Français +# translation of kdevelop.po to +# traduction de kdevelop.po en Français +# KTranslator Generated File +# Copyright (C) 2002,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# +# +# Gérard Delafond , 2002, 2003. +# Gilles CAULIER , 2003. +# Matthieu Robin , 2004. +# Joëlle Cornavin , 2004. +# Joëlle Conavin , 2005, 2004. +# Matthieu Robin , 2004, 2005, 2006. +# Nicolas Ternisien , 2005. +# Matthieu Robin , 2005. +# Joëlle Cornavin , 2007, 2008, 2009. +# Joëlle Cornavin , 2007, 2008. +# Sébastien Renard , 2008. +# Joëlle Cornavin , 2009. +# Joëlle Cornavin , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-04-14 11:38+0200\n" +"Last-Translator: Joëlle Cornavin \n" +"Language-Team: Français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Code" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "Fichiers projet KDevelop4" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "L'Environnement de Développement Intégré KDevelop" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "Copyright 1999-2010, Les développeurs de KDevelop" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "Créez une nouvelle session avec le nom indiqué." + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "" +"Session à charger. Vous pouvez passer soit la valeur de hachage, soit le nom " +"de la session." + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "Lister les sessions disponibles et quitter" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" +"Sessions disponibles (utiliser « -s HASH » ou « -s NAME » pour en ouvrir une " +"spécifique) :" + +#: main.cpp:79 +msgid "Hash" +msgstr "Hachage" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "Nom : projets ouverts" + +#: main.cpp:88 +msgid "[running]" +msgstr "[en cours de fonctionnement]" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "Spécifiez le binaire que vous voulez déboguer." + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "Déboguer" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "" +"Une session portant le nom %1 existe déjà. Utilisez le commutateur « -s » " +"pour l'ouvrir." + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"Impossible d'ouvrir la session inconnue %1. Reportez-vous au commutateur « --" +"sessions » pour connaître les sessions disponibles ou utilisez « -cs » pour " +"en créer une nouvelle." + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "La session %1 est déjà en cours de fonctionnement." + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"Impossible de démarrer KDevelop, l'exécutable « .bin » de kdevelop est absent " +"dans %1. Veuillez corriger votre installation KDevelop." + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Mainteneur, architecture, prise en charge de VCS, prise en charge de la " +"gestion de projets, gestionnaire de projets QMake" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Architecture, interface graphique superbe, prise en charge de Ruby" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Chaîne définition-utilisation, prise en charge du C++, navigation dans le " +"code, complétement du code, assistance pour le codage, refactorisation" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "Prise en charge de CMake, de l'exécution et de Kross" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "Intégration de GDB" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Intégration de l'éditeur de texte, chaîne définition-utilisation" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "" +"Administrateur du site web, documentation de l'API, correctifs pour Doxygen " +"et Autoprojects" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "Intégration de GDB, modules externes de développement web" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +#, fuzzy +#| msgid "Generic manager, Webdevelopment Plugins" +msgid "Generic manager, Webdevelopment Plugins" +msgstr "Gestionnaire générique, modules externes de développement web" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "Prise en charge de Astyle et Ident" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "VCS distribué, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "SnippetPart, correctifs pour le débogueur et la facilité d'utilisation" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "" +"Module externe Subversion, gestionnaire Make personnalisé, améliorations " +"globales" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "" +"Portage vers Qt3, correctifs, prise en charge de Valgrind  Diff et Perforce" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "Analyseur syntaxique C++" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "Les auteurs de KWrite" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Composant éditeur Kate" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Code du concepteur" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Contributeurs aux versions antérieures :" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "Les auteurs de KHTML" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "Composant de documentation HTML" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "" +"Concept initial, architecture de base, une grande partie du code source " +"initial" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, corrections de bogues" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Prise en charge de JAVA et d'OBJECTIVE C" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Interface du débogueur" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "Prise en charge du PHP, ce qui concerne les menus contextuels" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "Modèles pour les applications KDE" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Composants distribués, prise en charge de BASH, modèles d'applications" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Plusieurs composants, indexation avec Htdig" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Aide du gestionnaire Automake et des classes de stockage persistantes" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Aide de l'infrastructure KParts" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Prise en charge de ADA" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "Gestionnaire de projet QMake" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "Modes MDI, Qeditor, corrections de bogues" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "PartExplorer, réécriture de CvsPart, (corrections de) bogues" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Modules externes « Signets », « Remplacement », « Liste des fichiers » et " +"« CTags2 ». Améliorations globales et correctifs" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Composant « Création de fichier », autres parties et correctifs" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "Prise en charge de ClearCase" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Prise en charge de RUBY" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Documentation sur le FORTRAN" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Utilitaire de documentation sur le PYTHON" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Assistant pour Doxygen" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Composant « Sélecteur de fichiers »" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "Complétement du code C++, classes de stockage persistantes" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Correctifs" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Aide de la prise en charge de PERL" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Vue indexée de la documentation" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Recherche dans la documentation, correctifs pour le gestionnaire de projets " +"QMake, améliorations de la facilité d'utilisation, corrections de bogues... " + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "Correctifs pour le gestionnaire de projets QMake" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "" +"Nettoyage et corrections de bogues pour qEditor, Automake et beaucoup " +"d'autres choses" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Graphismes pour le langage Ruby" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "URL du projet à charger" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Fichiers à charger" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" +"Démarrez le débogueur, par exemple gdb. Le binaire à déboguer doit suivre - " +"y compris les arguments." + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (à l'aide de KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "Impossible de trouver le type de configuration de lancement natif" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "Impossible de trouver le lanceur %1" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "Impossible d'ouvrir %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "&Fichier" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "&Édition" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "&Avancé" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "&Affichage" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "&Pliage du code" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "Out&ils" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "Complétement du code" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "&Configuration" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Barre principale" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "Session" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Projet" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "&Exécuter" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Navigation" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Fichier" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Édition" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "Éditeur" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Code" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Fenêtre" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Configuration" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" +"Gilles Caulier,Joëlle Cornavin,Thibaut Cousin,François-Xavier Duranceau" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"caulier.gilles@free.fr,jcornavin@laposte.net,cousin@kde.org,duranceau@kde.org" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fr/kdevformatters.po kdevelop-4.0.1/po/fr/kdevformatters.po --- kdevelop-3.9.98/po/fr/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fr/kdevformatters.po 2010-07-17 20:10:02.000000000 +0100 @@ -0,0 +1,474 @@ +# translation of kdevformatters.po to Français +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Joëlle Cornavin , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-05-15 15:57+0200\n" +"Last-Translator: Joëlle Cornavin \n" +"Language-Team: Français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "Outil de formatage Astyle" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "Un outil de formatage utilisant Astyle" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Artistic Style est un outil d'indentation, de formatage et " +"d'amélioration de code source pour les langages de programmation C, C++, C# " +"et Java.
Page d'accueil : http://astyle.sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Outil de formatage Indent" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "Un outil de formatage utilisant Indent" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"Indenter et formater le source d'un programme en C.
Le programme " +"« indent » peut être utilisé pour faciliter la lecture du code. Il peut " +"également effectuer la conversion d'un style d'écriture du C à l'autre.
Indent comprend une quantité substantielle de la syntaxe du C mais " +"tente également de régler les problèmes de syntaxe incomplète et mal formée." +"
Page d'accueil : http://www.gnu.org/software/indent" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Indentation" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Tabulations" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Forcer les tabulations" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Espaces" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"Nombre d'espaces qui seront convertis en une tabulation.\n" +"Le nombre d'espaces par tabulation est contrôlé par l'éditeur." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Convertir les tabulations en espaces." + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Con&vertir les tabulations en espaces" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "" +"Remplir les lignes vides avec le caractère d'espacement de leurs lignes " +"précédentes." + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "Remplir les li&gnes vides" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Indenter" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Blocs" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Accolades" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "Cas" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Classe" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Étiquettes" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Espaces de noms" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Directives du pré-processeur" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "Commutateurs" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"Indenter un nombre maximal d'espaces dans une instruction continue,\n" +"par rapport à la ligne précédente." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Indenter un nombre minimal d'espaces dans une condition continue\n" +"appartenant à un en-tête conditionnel." + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Minimum dans une condition :" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "Le double de l'actuel" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Maximum dans une instruction :" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Autre" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Type" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Dissocier les accolades avant les en-têtes fermants (par ex. « else », " +"« catch »...)\n" +"de leurs accolades fermantes immédiatement précédentes." + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "Di&ssocier les en-têtes fermants" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "Pas de changement" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Attacher" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Dissocier" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Insérer des lignes vides autour de blocs, intitulés, classes sans rapports " +"entre eux...\n" +"Problèmes connus :\n" +"\n" +"1. Si une instruction ne fait PAS partie d'un bloc, \n" +"les instructions suivantes sont toutes à double interligne. \n" +"Les instructions incluses dans un bloc sont formatées correctement.\n" +"\n" +"2. Les commentaires sont dissociés du bloc.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "&Dissocier les blocs" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Comme --break-blocks, si ce n'est que cette commande insère aussi des lignes " +"vides\n" +"autour des en-têtes fermants (par ex. « else », « catch »...).\n" +"\n" +"Problèmes connus :\n" +"\n" +"1. Si une instructions ne fait PAS partie d'un bloc,\n" +"les instructions suivantes sont toutes à double interligne.\n" +"Les instructions incluses dans un bloc sont formatées\n" +"correctement.\n" +"\n" +"2. Les commentaires sont dissociés du bloc.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "&Dissocier tous les blocs" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "Dissocier les instructions « else if() » en deux lignes différentes." + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "Dissocier i&f-else" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Remplissage" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Parenthèse de remplissage" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Dé-remplissage" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "À l'intérieur seulement" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "À l'extérieur seulement" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "À l'intérieur et à l'extérieur" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Insérer un remplissage par d'espaces autour des opérateurs.\n" +"Une fois qu'ils sont remplis, les opérateurs le restent.\n" +"Il n'existe pas d'options d'opérateur de dé-remplissage." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "&Ajouter des espaces autour des opérateurs" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "Unilignes" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" +"Ne pas dissocier les lignes contenant des instructions multiples en\n" +"plusieurs lignes à une seule instruction." + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "&Conserver les instructions sur une seule ligne" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "Ne pas dissocier les blocs résidant en entier sur une seule ligne." + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "Conserver les blocs d'u&ne ligne" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Joëlle Cornavin" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "jcornavi@club-internet.fr" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fr/kdevgdb.po kdevelop-4.0.1/po/fr/kdevgdb.po --- kdevelop-3.9.98/po/fr/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fr/kdevgdb.po 2010-07-17 20:10:02.000000000 +0100 @@ -0,0 +1,898 @@ +# translation of kdevgdb.po to Français +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Joëlle Cornavin , 2008, 2009. +# Joëlle Cornavin , 2009. +# Joëlle Cornavin , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevgdb\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-04-15 22:45+0200\n" +"Last-Translator: Joëlle Cornavin \n" +"Language-Team: Français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "Sentinelles" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "Récent" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
Ancienne valeur : %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
Nouvelle valeur : %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "Prise en charge de GDB" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Prise en charge de l'exécution d'applications dans GDB" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Désassembleur" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Examiner un fichier « core »..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Examiner un fichier « core »" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"Examiner un fichier « core »

Cette fonction charge un fichier " +"« core », qui est généralement créé après que l'application s'est arrêtée de " +"façon anormale, par exemple avec une erreur de segmentation. Le fichier " +"« core » contient une image de la mémoire du programme au moment où il s'est " +"arrêté brutalement, ce qui permet d'effectuer une analyse post mortem de " +"l'application.

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "Attacher au processus" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "Attacher au processus..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "" +"Attacher au processus

Attache le débogueur à un processus en cours " +"d'exécution.

" + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "Évaluer : %1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "" +"Évaluer l'expression

Affiche la valeur de l'expression située sous " +"le curseur.

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "Surveiller : %1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Surveiller l'expression

Ajoute une expression sous le curseur à la " +"liste de surveillance des variables.

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Choisir un fichier « core » à examiner..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "Examen du fichier « core » %1" + +#: debuggerplugin.cpp:372 +msgid "Debug core file" +msgstr "Déboguer un fichier « core »" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "Choisir un processus à attacher à..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "" +"Pas d'attachement au processus %1 : impossible d'attacher le débogueur à lui-" +"même." + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "Attachement au processus %1" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "Déboguer un processus %1" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Débogueur" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"Aucun groupe d'environnement n'est spécifié, il semble qu'il s'agisse d'une " +"configuration défectueuse. Veuillez vérifier la configuration d'exécution « %" +"1 ». Utilisation du groupe d'environnement par défaut." + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "Le débogueur est arrêté" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "L'application s'est interrompue" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "Le processus s'est terminé" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "L'application est en cours d'exécution" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "L'application est en pause" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"GDB s'est arrêté anormalement

Il s'agit probablement d'un bogue " +"dans GDB. Examinez la fenêtre de sortie de GDB puis arrêtez le débogueur" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "GDB s'est arrêté anormalement" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "" +"Commande gdb envoyée quand le débogueur n'est pas en cours d'exécution
La commande était :
%1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Erreur interne" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Commande de débogueur non valable
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "Commande de débogueur non valable" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "Arrêté anormalement" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "S'est arrêté avec le signal %1" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "Le programme a reçu le signal %1 (%2)" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "Exécution du programme" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"GDB ne peut pas utiliser les périphériques « tty* » ou « pty* ».\n" +"Vérifiez les paramètres de « /dev/tty* » et « /dev/pty* »\n" +"En tant que superutilisateur, vous pouvez être amené à exécuter « chmod ug" +"+rw » pour les périphériques « tty* » et « pty* » et/ou ajouter l'utilisateur " +"au groupe « tty » en saisissant la commande « usermod -G tty nom_utilisateur »." + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Avertissement" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "" +"Erreur du débogueur

Le débogueur a signalé l'erreur suivante :" +"

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Erreur du débogueur" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "1 commande dans la file d'attente\n" +msgstr[1] "%1 commandes dans la file d'attente\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "%1 commande est en cours de traitement par GDB\n" +msgstr[1] "%1 commandes sont en cours de traitement par GDB\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "État du débogueur : %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"Classe de commandes actuelle : « %1 »\n" +"Texte de la commande actuelle : « %2 »\n" +"Texte original de la commande actuelle : « %3 »\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "État du débogueur" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "" +"Il vous faut GDB 7.0.0 ou postérieur.
Vous utilisez " +"actuellement : %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "Erreur de GDB" + +#: debugsession.cpp:1417 +msgid "Could not start debugger:
" +msgstr "Impossible de démarrer le débogueur :
" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "Erreur au démarrage" + +#: debugsession.cpp:1429 +msgid "Could not attach debugger:
" +msgstr "Impossible d'attacher le débogueur :
" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"Affichage du code machine

Une vue du code machine dans votre " +"exécutable en cours, avec l'instruction actuelle surlignée. Vous pouvez " +"exécuter les instructions pas à pas à l'aide des boutons de la barre " +"d'outils du débogueur de l'instruction « Avancer d'une ligne » (step over) et " +"de l'instruction « Pas à pas en rentrant » (step into)." + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Vue du désassemblage" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Adresse" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Fonction" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Décalage" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Instruction" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "Impossible de trouver le shell de débogage « %1 »." + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "Impossible de trouver le shell de débogage" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" +"

Le composant de débogage a rencontré un problème interne en traitant la " +"réponse de gdb. Veuillez envoyer un rapport de bogue." + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"L'exception est : %1\n" +"La réponse de MI est : %2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Erreur interne du débogueur" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" +"Impossible de démarrer le débogueur.

Impossible d'exécuter « %1 ». " +"Vérifiez que le nom de l'emplacement est spécifié correctement." + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "Impossible de démarrer le débogueur" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "Configuration de GDB" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "Exécute une application native dans GDB" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "Sortie de GDB" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"Sortie de GDB

Affiche toutes les commandes « gdb » en cours " +"d'exécution. Vous pouvez également émettre n'importe quelle autre commande " +"« gdb » pendant le débogage.

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "Commande pour &GDB :" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "" +"Faire une pause dans l'exécution de l'application pour saisir des commandes " +"dans GDB" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Afficher les commandes internes" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"Vérifie si les commandes émises en interne par KDevelop seront affichées ou " +"non.
Cette option affectera uniquement les commandes futures, elle " +"n'ajoutera ou ne supprimera pas de la vue les commandes déjà émises." + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "Tout copier" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Démarrer" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "Quantité" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "Ok" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Annuler" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Vue de la mémoire" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (1 octet)" +msgstr[1] "%2 (%1 octets)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Modifier la plage mémoire" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Recharger" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Fermer cette vue" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Vues de débogage particulières" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "Attacher à un processus" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Sélectionner un fichier « core »" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "KDevelop : console de débogage de l'application" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Configuration du débogueur" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Exécutable de débogage :" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "Exécutable « gdb »" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"Pour lancer le binaire « gdb » à partir de $PATH, laissez ce champ vide. Pour " +"lancer un « gdb » particulier, par exemple pour une architecture différente, " +"saisissez ici le nom de l'exécutable. Vous pouvez soit exécuter « gdb » " +"depuis $PATH mais avec un nom différent (par exemple « arm-gdb » en " +"saisissant son nom ici, soit spécifier l'emplacement complet de l'exécutable " +"« gdb »." + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "" +"Lancer « gdb » dans un shell spécial (principalement pour les projets " +"« Automake »)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"Si vous voulez que « gdb » soit exécuté par un interpréteur ou un outil " +"spécial, indiquez-le ici. Le principal cas d'utilisation concerne les " +"projets reposant sur « Automake », où l'application n'est en fait qu'un " +"script, et « libtool » est nécessaire pour le faire s'exécuter dans « gdb »." + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "&Shell de débogage :" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"Si vous voulez que « gdb » soit exécuté par un shell ou un outil spécial, " +"indiquez-le ici. Le principal cas d'utilisation concerne les projets " +"reposant sur « Automake », où l'application n'est en fait qu'un script, et " +"« libtool » est nécessaire pour le faire s'exécuter dans « gdb »." + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Options" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"L'affichage des membres statiques ralentit le débogueur GDB\n" +"lorsqu'il doit produire des données dans KDE et Qt.\n" +"Cette option peut changer la « signature » des données sur lesquelles repose " +"« QString »\n" +"et les classes afférentes. Si devez déboguer ces valeurs,\n" +"cochez cette option." + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Afficher les &membres statiques" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"Lorsque vous affichez les noms désassemblés\n" +"vous pouvez choisir d'afficher les noms correspondant aux méthodes.\n" +"Cependant, ils seront plus difficiles à lire." + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "Afficher les noms &désassemblés" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"Si GDB n'a pas identifié une bibliothèque qui sera chargée via\n" +"« dlopen », alors il refusera de définir un point d'arrêt dans ce code.\n" +"Avec cette option, GDB s'arrêtera au chargement d'une bibliothèque et donc\n" +"essaiera de définir les points d'arrêt en attente. Consultez la " +"documentation pour\n" +"plus de détails sur ce comportement.\n" +"\n" +"Laissez cette option décochée si vous n'ouvrez pas de bibliothèque via " +"« dlopen »." + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "Essayer de définir des points d'arr&êt au chargement des bibliothèques" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"Cette commande permet de saisir des entrées sur le terminal lorsque " +"l'application\n" +"contient du code d'entrée sur terminal (c'est-à-dire les fonctions « cin », " +"« fgets », etc.).\n" +"Si vous utilisez des entrées sur le terminal dans votre application, cochez " +"cette\n" +"option, sinon laissez-la décochée." + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "Afficher un &terminal séparé pour les E/S de l'application" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"Ce script est prévu pour les commandes qui sont nécessaires pour la " +"connexion avec l'exécutable distant.\n" +"\tAttendre 5 secondes\tattendre le lancement du programme distant\n" +"\tCible distante...\tconnecter au débogueur distant\n" +"\tContinuer\t[optionnel] lance le débogage jusqu'au premier point d'arrêt" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "Débogage à distance" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "Script gdb de &configuration :" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "Script configure de gdb" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "Ce script est lu par « gdb » lorsque le débogage démarre." + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "L&ancer le script shell :" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "Script de démarrage de l'application distante" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"Ce script shell est exécuté après que le script de configuration de « gdb » a " +"été lu par gdb.\n" +"Lorsqu'on débogue à distance, ce script est destiné à véritablement démarrer " +"le processus distant.\n" +"[L'exécutable à déboguer est censé pouvoir être atteint sur la cible, peut-" +"être en le téléchargeant comme étape ultime de la construction]\n" +"1) Trouver un moyen pour exécuter une commande à distance - rsh, ssh, " +"telnet...\n" +"2a) Exécuter « gdbserver ... application » sur la cible ou, si\n" +"votre exécutable contient la partie de code nécessaire à « gdb »\n" +"2b) Exécuter « application » sur la cible." + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "Lancer le script pour &gdb :" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "Script pour se connecter avec l'application distante" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"Ce script est lu par GDB après que les deux scripts précédents ont été " +"exécutés.\n" +"Ce script est prévu pour les commandes qui sont nécessaires pour la " +"connexion avec l'exécutable distant.\n" +"\tshell sleep 5\tattendre le lancement du programme distant\n" +"\tcible distante...\tconnecter au débogueur distant\n" +"\tcontinue\t[optionnel] lance le débogage jusqu'au premier point d'arrêt." + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "Configuration du traçage" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"Activer le traçage\n" +"

Le traçage est un mécanisme permettant d'afficher automatiquement la " +"valeur des expressions choisies et de continuer l'exécution lorsqu'un point " +"d'arrêt est rencontré. Vous pouvez le voir comme un débogage printf qui ne " +"nécessite pas de modifier le code source.

" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Activer le traçage" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "Format de chaîne personnalisé" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"Format de chaîne personnalisé\n" +"

Spécifiez un format de chaîne dans le style du C qui sera utilisé lors de " +"l'affichage de l'expression choisie. Par exemple :\n" +"

Point de traçage 1 : g = %d

\n" +"Si un format de chaîne personnalisé n'est pas activé, les noms et valeurs de " +"toutes les expressions seront affichés, à l'aide du format « %d » comme " +"spécificateur de format pour toutes les expressions." + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "Expressions à afficher :" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Exécuter" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Barre d'outils du débogueur" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Exécutable :" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Fichier « core » :" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Joëlle Cornavin" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "jcornavin@laposte.net" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fr/kdevmakebuilder.po kdevelop-4.0.1/po/fr/kdevmakebuilder.po --- kdevelop-3.9.98/po/fr/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fr/kdevmakebuilder.po 2010-07-17 20:10:02.000000000 +0100 @@ -0,0 +1,166 @@ +# translation of kdevmakebuilder.po to Français +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Joëlle Cornavin , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-05-14 16:09+0200\n" +"Last-Translator: Joëlle Cornavin \n" +"Language-Team: Français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Constructeur CMake" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Prise en charge de la construction de projets Make" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make : %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Dossier de construction « %1 » non valable" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "Impossible de créer la commande de construction pour la cible « %1 »" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "La tâche a échoué" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Échoué ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Terminé ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** Interrompu ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "compilation" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "génération" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "édition des liens" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "construit" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "installation" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "création" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Affichage" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Arrêter dès la première erreur :" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Afficher les commandes mais ne pas les exécuter :" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Installer en tant que « root » :" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Commande d'installation « root » :" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Nombre de tâches simultanées :" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Exécutable Make :" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Cible par défaut de Make :" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Options de Make supplémentaires :" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Profil d'environnement actif :" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Joëlle Cornavin" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "jcornavi@club-internet.fr" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/fr/kdevqthelp.po kdevelop-4.0.1/po/fr/kdevqthelp.po --- kdevelop-3.9.98/po/fr/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/fr/kdevqthelp.po 2010-07-17 20:10:02.000000000 +0100 @@ -0,0 +1,71 @@ +# translation of kdevqthelp.po to Français +# translation of kdevqthelp.po to +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Joëlle Cornavin , 2009. +# Joëlle Cornavin , 2009. +# Joëlle Cornavin , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-04-15 23:35+0200\n" +"Last-Translator: Joëlle Cornavin \n" +"Language-Team: Français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "Impossible de trouver de la documentation pour « %1 »" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "Page d'accueil de QtHelp" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Vérifier la documentation d'aide pour Qt" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Joëlle Cornavin" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "jcornavin@laposte.net" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "Identifiant à rechercher :" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "Page d'aide :" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "about:blank" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "Informations de débogage :" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/gl/CMakeLists.txt kdevelop-4.0.1/po/gl/CMakeLists.txt --- kdevelop-3.9.98/po/gl/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/gl/CMakeLists.txt 2010-07-17 20:10:14.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(gl ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/gl/kdevcmakebuilder.po kdevelop-4.0.1/po/gl/kdevcmakebuilder.po --- kdevelop-3.9.98/po/gl/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/gl/kdevcmakebuilder.po 2010-07-17 20:10:14.000000000 +0100 @@ -0,0 +1,97 @@ +# translation of kdevcmakebuilder.po to Galician +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# mvillarino , 2008. +# Marce Villarino , 2009. +# Marce Villarino , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-10-10 15:19+0200\n" +"Last-Translator: Marce Villarino \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "Construtor con CMake" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Soporte de construción de proxectos con CMake" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "" +"Non se pode construír porque non se configurou un cartafol de construción" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "A abortar a construción" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "Non se pode limpar porque non se configurou un cartafol de construción" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "A abortar a limpeza" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "" +"Non se pode instalar porque non se configurou un cartafol de construción" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "A abortar a instalación" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "" +"Non se pode configurar porque non se configurou o cartafol de construción" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "A abortar a configuración" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "" +"Non se pode limpar o directorio de construción porque non se configurou" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "Non é posíbel limpar o directorio de construción" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "Fallou a tarefa" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "Programa de CMake:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marce Villarino" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "mvillarino@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/gl/kdevcmake.po kdevelop-4.0.1/po/gl/kdevcmake.po --- kdevelop-3.9.98/po/gl/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/gl/kdevcmake.po 2010-07-17 20:10:14.000000000 +0100 @@ -0,0 +1,548 @@ +# translation of kdevcmake.po to galician +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# mvillarino , 2008, 2009. +# Marce Villarino , 2008, 2009. +# Marce Villarino , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2009-11-15 12:18+0100\n" +"Last-Translator: Marce Villarino \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "Documentación de CMake" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Soporte para documentación de CMake" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Pór na caché o valor: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Por na caché a documentación: %1\n" + +#: cmakehelpdocumentation.cpp:33 +#, fuzzy +#| msgid "Command" +msgid "Commands" +msgstr "Orde" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Variábel" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "" + +#: cmakehelpdocumentation.cpp:42 +#, fuzzy +#| msgid "CMake Contents" +msgid "CMake Content Page" +msgstr "Contido de CMake" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 é unha orde obsoleta e non se debera empregar" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Función non rematada. " + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Nome" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Tipo" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Valor" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Comentario" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Avanzado" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"Estase a piques de eliminar o directorio %1 da lista de KDevelop.\n" +"Desexa que KDevelop o elimine tamén do sistema de ficheiros?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "Non foi posíbel eliminar: %1.\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "&Mudar as cores" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "Xeral" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "Este proxecto ten un día de antigüidade" +msgstr[1] "Este proxecto ten %1 días de antigüidade" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "Modificouse a configuración" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "Un programa de KDE4" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "(C) 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Documento a abrir" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Configurar un cartafol de construción" + +#: cmakebuilddirchooser.cpp:58 +#, fuzzy, kde-format +#| msgid "Configure a build directory" +msgid "Configure a build directory for %1" +msgstr "Configurar un cartafol de construción" + +#: cmakebuilddirchooser.cpp:100 +#, fuzzy +#| msgid "You need to select a cmake binary" +msgid "You need to select a cmake binary." +msgstr "Debe escoller un binario de cmake" + +#: cmakebuilddirchooser.cpp:143 +#, fuzzy +#| msgid "You need to specify a build directory" +msgid "You need to specify a build directory." +msgstr "Debe especificar un cartafol de construción" + +#: cmakebuilddirchooser.cpp:150 +#, fuzzy +#| msgid "Using an already created build directory" +msgid "Using an already created build directory." +msgstr "A usar un cartafol de construción xa creado" + +#: cmakebuilddirchooser.cpp:161 +#, fuzzy +#| msgid "Error creating build directory" +msgid "Creating a new build directory." +msgstr "Aconteceu un erro ao crear o cartafol de construción" + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "O cartafol de construción xa está configurado." + +#: cmakebuilddirchooser.cpp:169 +#, fuzzy, kde-format +#| msgid "This build directory is for %1, but the project directory is %2" +msgid "This build directory is for %1, but the project directory is %2." +msgstr "O cartafol de construción é para %1, pero o cartafol do proxecto é %2" + +#: cmakebuilddirchooser.cpp:172 +#, fuzzy +#| msgid "You may not select a relative build directory" +msgid "You may not select a relative build directory." +msgstr "Non pode escoller un cartafol de construción relativo" + +#: cmakebuilddirchooser.cpp:174 +#, fuzzy +#| msgid "The selected build directory is not empty" +msgid "The selected build directory is not empty." +msgstr "O cartafol de construción escollido non está baleiro" + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "Xestor de CMake" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Soporte para xestionar proxectos con CMake" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Ir á definición do obxectivo" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Crear un cartafol chamado «%1»." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "Soporte de CMake en KDevelop" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "Non foi posíbel crear o ficheiro CMakeLists.txt do directorio." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "Non foi posíbel gardar a modificación." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Eliminar un cartafol chamado «%1»." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Eliminar un ficheiro chamado «%1»." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Engade un ficheiro chamado «%1» ao obxectivo «%2»." + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "Non é posíbel gardar a modificación." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "Mudar o nome dun cartafol chamado «%1»." + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "O directorio de construción nin existe nin se puido crear." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Aconteceu un erro ao crear o cartafol de construción" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "NON VÁLIDO" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Orde" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Macro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Rota" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "&Programa de CMake: " + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "Cartafol de &construción:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "&Prefixo de instalación:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "&Tipo de compilación: " + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"KDevelop atopou varias posíbeis raíces do proxecto, escolla a correcta." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marce Villarino" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "mvillarino@users.sourceforge.net" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "&Mover" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Engadir" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Eliminar" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Pór na caché os valores" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Comentario:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Mostrar o avanzado" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "Cartafol de CMake" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Mostrar os valores avanzados" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "Olá mundo" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Cor do fondo:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Escolle unha cor de fondo" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +" \n" +"

Mude a cor de fondo premendo aquí e escolla a nova cor no diálogo de cores.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Antigüidade do proxecto:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Cor do primeiro plano:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Escolle unha nova cor de primeiro plano" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +" \n" +"

Mude a cor de primeiro plano premendo aquí e escolla a nova " +"cor no diálogo de cores.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Indica a antigüidade do proxecto (en días)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "" +"Mude a antigüidade do proxecto (en días) escollendo un novo número de días." + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/gl/kdevcpp.po kdevelop-4.0.1/po/gl/kdevcpp.po --- kdevelop-3.9.98/po/gl/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/gl/kdevcpp.po 2010-07-17 20:10:14.000000000 +0100 @@ -0,0 +1,940 @@ +# translation of kdevcpp.po to galician +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# mvillarino , 2008, 2009. +# Marce Villarino , 2009. +# Marce Villarino , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2009-10-19 20:48+0200\n" +"Last-Translator: Marce Villarino \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "Non incluída" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Inicializar" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Contedor non incluído" + +#: codecompletion/context.cpp:1272 +#, fuzzy, kde-format +#| msgctxt "" +#| "Here, overload is used as a programming term. This string is used to " +#| "display how many overloaded versions there are of the function whose name " +#| "is the second argument. The numeric argument is always greater than one, " +#| "so translation of the singular case is only necessary in languages where " +#| "the singular form is used for 21, 31 etc." +#| msgid "1 overload of %2" +#| msgid_plural "%1 overloads of %2" +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "1 sobrecarga de %2" +msgstr[1] "%1 sobrecargas de %2" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "Conectar con %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Sinais/Slots" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "Sobreposición virtual" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Implementar a función" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "Incorporado en C++" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Sobrepor" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Implementar" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Crear un slot" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "Desde %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Engadir unha directiva de inclusión" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Engadir unha declaración anticipada" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "declaración anticipada" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "Opcións de implementación da clase privada" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Cancelar" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "Actualizar a definición de %1(%2) a (%3)" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Fallou a aplicación das modificacións: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"O refactorizar é unha funcionalidade aínda experimental que como tal pode " +"danar o código. Antes de empregala, faga unha copia de seguranza." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "Mudar o nome de %1" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "Crear unha definición separada para %1" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Crear a clase" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "Non hai ningunha declaración baixo o cursor" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "Non hai ningún ficheiro de fontes dispoñíbel para %1." + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "Fallou a actualización da cadea de DU para %1." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "Non foi posíbel crear a definición desta declaración." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "A inserción fallou" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "Fallou a aplicación das modificacións" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "Non hai ningún documento para %1" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "Perdeuse a declaración durante a actualización" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "" + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "Novo nome:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Mudar o nome" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Nota: Tamén se mudará o nome de todas as funcións sobrecargadas, " +"sobrecargas, declaracións anticipadas etc." + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Usos" + +#: codegen/simplerefactoring.cpp:445 +#, fuzzy +#| msgid "Declarations:" +msgid "Declaration Info" +msgstr "Declaracións:" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "A mudar o nome de «%1» para «%2»" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "Fallou a aplicación das modificacións: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Configurar as rotas de inclusión personalizadas" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "" +"Non foi posíbel gardar as rotas personalizadas de inclusión no cartafol: %1" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Engadir unha rota personalizada de inclusión" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Abrir un proxecto" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "Non se atopou: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "Non escolleu ningunha cousa, non se engadirá a un obxectivo." + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "" +"Non foi posíbel determinar a clase base polo que se engadirá indirectamente: " +"%1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "Clase base non válida: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Crear a declaration local %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "Declarar %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "Declaración non achada: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Incluídas" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Incluída en" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Macros definidas" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Macro de función" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Macro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "Corpo preprocesado:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "Corpo:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "" +"O xestor de construción do proxecto %1 non devolveu un cartafol de " +"construción" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"O determinador de rotas de inclusións precisa do cartafol de construción " +"para determinar as rotas das inclusións adicionais. Pense en configurar un " +"cartafol de construción no xestor do proxecto se aínda non o fixo." + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "O xestor de construción non devolveu unha rota de inclusión" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"O xestor de construción non devolveu a rota de inclusión %1, que debe ser " +"adiviñada polo determinador de rotas de inclusión" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Determinador de rota de inclusión: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Cartafol de construción empregado: «%1»\n" +"Determinador de rota de inclusión: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" +"Tentou determinar a rota das inclusións mentres se estaba a executar outro " +"proceso de resolución" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "Falla o makefile no cartafol «%1»" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "Aconteceu un problema ao tentar resolver as rotas de inclusión de %1" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "Na caché: %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "O nome de ficheiro %1 semella estar mal formado" + +#: includepathresolver.cpp:775 +#, fuzzy +#| msgid "Failed to save custom include paths in directory: %1" +msgid "Failed to extract new working directory" +msgstr "" +"Non foi posíbel gardar as rotas personalizadas de inclusión no cartafol: %1" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "A saída foi: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "Fallou a chamada recursiva a «make»" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "A cadea de parámetro «%1» non semella ser válida. A saída foi: %2." + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "O cartafol «%1» non existe. A saída foi: %2." + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "Chamada recursiva a «make» malformada" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "" +"Non foi posíbel extraer as rotas de inclusión a partir da saída de make" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Cartafol: «%1» Orde: «%2» Saída: «%3»" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "Xerador de cabezallos anticipados de KDE" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "" +"Un programa que cría cabezallos anticipados (como os cabezallos de Qt) a " +"partir do código fonte." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "(c) 2006, Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"Ficheiro de inclusión de KDE - os cabezallos van en includes/KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Xerar a información a partir do xerador de XML de cmake" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "Sentenza #if non rematada" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "carácter %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "Agardábase un «identificador», atopouse: %1" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
Texto do token
%1
Entrada
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "Agardábase «)», atopouse %1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "División por cero" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Texto de entrada: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "agardábase ``:'' = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else sen #if" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "#endif sen #if na liña %1 da saída" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Erro da macro" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "Na chamada á macro %1 falta o argumento número %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Formais: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "entrada non válida: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "Este ficheiro importa o documento actualmente aberto
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "Na rota incluída %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Incluída a través de %1
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Cartafol %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "Na %1.ª rota incluída" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Inclusións" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Rota da inclusión" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "Incluíntes" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "Soporte de C++" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "Soporte para a linguaxe C++" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "Ficheiros" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "Ir á &definición/declaración" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "Crear unha &clase nova" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Mudar o nome da declaración" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "Mover á fonte" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Baleirado polo preprocesador
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "A procesar os ficheiros incluídos" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "A procesar o ficheiro real" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "Non se actualiza a duchain de %1" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "Usos da construción" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Listo" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "O ficheiro foi incluído recursivamente desde el mesmo: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "Non se atopou o ficheiro incluído: %1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"Rota de inclusión onde se procurou:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "Non foi posíbel abrir o ficheiro «%1»" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "Non foi posíbel ler o ficheiro." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "Non foi posíbel abrir o ficheiro." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "Os permisos do ficheiro non permiten que o abra para ler." + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Navegación" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Código" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marce Villarino" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "mvillarino@gmail.com" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "Opcións de C++" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Exportar:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Macro:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Público" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Protexido" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Privado" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "Slot" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Sinal" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Directorio de almacenaxe" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"O rota de inclusións personalizada gardarase nun ficheiro especial chamado «." +"kdev_include_paths» dentro dun directorio de fontes. A rota personalizada " +"utilizarase para todos os ficheiros baixo tal directorio." + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Directorio de almacenaxe:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Resolución automática" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"Se o seu proxecto utiliza Makefiles sinxelos talvez poidan resolverse " +"automaticamente as rotas de inclusións utilizando a utilidade «make». Para " +"isto, defina aquí unha relación de cartafol de fontes a cartafol de " +"construción." + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Cartafol de fontes:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Cartafol de construción:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Rotas da inclusión personalizadas" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "Aquí pode engadir unha lista de rotas de inclusión personalizadas." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"Nota: Estes parámetros non afectan o compilador nin o proxecto de ningún " +"xeito, só son utilizados por KDevelop para atopar as cabeceiras incluídas." + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" +"Opcións e parámetros para mover os campos privados de datos da clase a unha " +"estrutura privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "Nome da estrutura privada:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Opcións" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

Por omisión as estruturas " +"de implementación privada decláranse como struct para ter acceso público por omisión.

\n" +"

Escolla esta opción se " +"desexa que a estrutura privada de implementación se declare como clase con acceso público.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Empregar clases no canto de estruturas" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

Move calquera variábel " +"actual que se inicialice na lista de construción de inicializadores á lista " +"de construtor de inicializadores da estrutura de implementación privada.\n" +"

\n" +"

Nota: Todas as referencias e variábeis " +"con tipo que non fornecen construtores predeterminados son movidos sen " +"importar o estado desta opción.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "Mover a inicialización da variábel á estrutura privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" +"Move todos os métodos privados declarados á estrutura de implementación " +"privada." + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "Mover os métodos privados" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Nome do punteiro:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "" +"O nome da variábel membro que será o punteiro asociado á implementación " +"privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/gl/kdevcustommake.po kdevelop-4.0.1/po/gl/kdevcustommake.po --- kdevelop-3.9.98/po/gl/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/gl/kdevcustommake.po 2010-07-17 20:10:14.000000000 +0100 @@ -0,0 +1,44 @@ +# translation of kdevcustommake.po to Galician +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# mvillarino , 2008. +# Marce Villarino , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-10-10 22:52+0200\n" +"Last-Translator: Marce Villarino \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Xestor de makefiles personalizados" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Soporta a xestión de proxectos con makefiles personalizados" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Executar" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marce Villarino" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "mvillarino@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/gl/kdevelop.po kdevelop-4.0.1/po/gl/kdevelop.po --- kdevelop-3.9.98/po/gl/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/gl/kdevelop.po 2010-07-17 20:10:14.000000000 +0100 @@ -0,0 +1,771 @@ +# translation of kdevelop.po to Galician +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# mvillarino , 2007, 2008. +# mvillarino , 2008. +# Marce Villarino , 2009. +# Marce Villarino , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2009-11-15 12:08+0100\n" +"Last-Translator: Marce Villarino \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Código" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "Ficheiros de proxecto de KDevelop4" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "O ambiente integrado de desenvolvemento KDevelop" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "" + +#: main.cpp:64 main_internal.cpp:85 +#, fuzzy +#| msgid "Copyright 1999-2009, The KDevelop developers" +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "Copyright 1999-2009, os desenvolventes de KDevelop" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "" + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "" + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" + +#: main.cpp:79 +msgid "Hash" +msgstr "" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "" + +#: main.cpp:88 +msgid "[running]" +msgstr "" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "" + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "" + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "" + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Mantenedor, arquitecto, soporte de VCS, soporte da xestión de proxectos, " +"xestor de proxectos con QMake" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Arquitectura, interface de usuario Sublime, soporte de Ruby" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Cadea de definicións e usos, soporte de C++, navegación do código, " +"completado de código, asistencia á programación, refactorización" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "Soporte de CMake, soporte de execución, soporte de Kross" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "Integración de GDB" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Integración do editor de texto, cadea de definición de usos" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "" +"Coordinador da web, documentación da API, parches para Doxygen e autoproject" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "soporte de astyle e ident" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "SCV distribuídos, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "Parches para a SnippetPart, o depurador e usabilidade" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "" +"Extensión para subversión, xestor personalizado de make, melloras xerais" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "Versión de Qt 3, parches, soporte de valgrind, diff e perforce" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "Analizador sintáctico de C++" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "Os autores de KWrite" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Compoñente do editor Kate" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Código do Designer" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Contribuíntes a versións máis vellas:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "Os autores de KHTML" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "Compoñente de documentación HTML" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "Idea inicial, arquitectura básica, moito do código fonte inicial" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, correccións de erros" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Soporte de Java e de Objective C" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Interface para o depurador" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "Soporte de PHP, menú contextual" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "Modelos de programas de KDE" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Compoñente dist, soporte de bash, modelos de programas" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Varias compoñentes, indexación con htdig" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Axuda co xestor de automake e co almacén persistente de clases" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Axuda coa infraestrutura de KParts" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Soporte de Ada" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "Xestor de proxectos con QMake" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "Modos MDI, QEditor, correccións de erros" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "PartExplorer, redeseño de CvsPart, parches, correccións de erros" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Extensións de substitución, favoritos, lista de ficheiros e CTags2. Melloras " +"globais e parches" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Compoñente de creación de ficheiros e outras cousas e parches" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "Soporte de ClearCase" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Soporte de Ruby" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Documentación de Fortran" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Utilidade de documentación de Python" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Asistente de Doxygen" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Compoñente do selector de ficheiro" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "Completado de código C++, almacén persistente de clases" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Parches" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Axuda co soporte de Perl" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Vista do índice da documentación" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Panel de documentación, parches para o xestor de proxectos con qmake, " +"mellorías na usabilidade, correccións de erros... " + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "Parches para o xestor de proxectos que usen QMake" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "Limpezas e correccións en qEditor, AutoMake e moitas outras cousas" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Melloras visuais para a linguaxe ruby" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "URL do proxecto a cargar" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Ficheiros para cargar" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (utilizando KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "Non foi posíbel abrir %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "&File" +msgid "&File" +msgstr "&Ficheiro" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "&Edit" +msgid "&Edit" +msgstr "&Editar" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "&View" +msgid "&View" +msgstr "&Vista" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "Tools" +msgid "&Tools" +msgstr "Utilidades" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "Settings" +msgid "&Settings" +msgstr "Configuración" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Barra de ferramentas principal" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "Settings" +msgctxt "@title:menu" +msgid "Session" +msgstr "Configuración" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Proxecto" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "&Executar" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Navegación" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Ficheiro" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Editar" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "&Edit" +msgctxt "@title:menu" +msgid "Editor" +msgstr "&Editar" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +#, fuzzy +#| msgid "Code" +msgctxt "@title:menu" +msgid "Code" +msgstr "Código" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Fiestra" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Configuración" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marce Villarino" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "mvillarino@users.sourceforge.net" + + + + +#, fuzzy + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/gl/kdevformatters.po kdevelop-4.0.1/po/gl/kdevformatters.po --- kdevelop-3.9.98/po/gl/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/gl/kdevformatters.po 2010-07-17 20:10:14.000000000 +0100 @@ -0,0 +1,469 @@ +# translation of kdevformatters.po to galician +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# mvillarino , 2008, 2009. +# Marce Villarino , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-11-15 12:11+0100\n" +"Last-Translator: Marce Villarino \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "Formatador Astyle" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "Unha ferramenta de formatado que emprega astyle" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Estilo artístico é un formatador de código fonte para as linguaxes de " +"programación C, C++, C# e Java.
Páxina do proxecto: http://astyle.sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Formatador Indent" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "Un formatador que emprega indent" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"Sangra e formata código fonte en C.
O programa «indent» pode " +"empregarse para mellorar a lexibilidade do código. Tamén pode converter dun " +"estilo de escrita de C para outro.
indent coñece grande parte da " +"sintaxe de C, pero tamén tenta manexar a sintaxe incompleta e mal formada. " +"
Páxina do proxecto: http://www.gnu.org/software/indent/" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Sangrado" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Tabulacións" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Forzar as tabulacións" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Espazos" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"Cantos espazos se converterán nun tabulador.\n" +"A cantidade de espazos por tabulador é controlada polo editor." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Converte os tabuladores en espazos." + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Con&verter os tabuladores es espazos" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "Preenche as liñas en branco cos espazos da liña anterior." + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "&Preencher as liñas en branco" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Sangrar" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Bloques" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Chaves" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "Casos" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Clase" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Etiquetas" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Espazos de nomes" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Directivas do preprocesador" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "Conmutadores" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"Sangra unha cantidade máxima de espazos nunha sentenza continua\n" +"en relación á liña anterior." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Sangra unha cantidade mínima de espazos nunha condición continua\n" +"que pertenza a unha cabeceira condicional." + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Mínimo no condicional:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "O duplo do actual" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Máximo na sentenza:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Outro" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Tipo" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Racha os corchetes antes de pechar as cabeceiras (por ex. «else», " +"«catch» ...)\n" +"do corchete de peche que o precede." + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "Rachar os &peches das cabeceiras" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "Non modificar" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Anexar" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Parada" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Insire liñas en branco arredor de bloques, etiquetas, clases etc, non " +"relacionados\n" +"Problemas coñecidos:\n" +"\n" +"1.- Se unha sentenza NON forma parte dun bloque,\n" +"as seguintes sentenzas terán todas espaciado duplo.\n" +"As sentenzas pechadas nun bloque formataranse correctamente.\n" +"2. Os comentarios separaranse do bloque.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "&Separar os bloques" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Como --break-blocks, agás que tamén insire liñas baleiras\n" +"arredor das cabeceiras de peche (por ex. «else», «catch» ...).\n" +"\n" +"Problemas coñecidos:\n" +"\n" +"1. Se unha sentenza NON forma parte dun bloque,\n" +"as sentenzas que a sigan estarán todas con espazo duplo.\n" +"As pechadas nun bloque serán formatadas correctamente.\n" +"\n" +"2. Os comentarios son separados do bloque.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "Separar &todos os bloques" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "Separa as sentenzas «else if()» en dúas liñas diferentes." + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "Separar &if-else" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Separación de palabras" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Separar os parénteses" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Anulación da separación" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "Só dentro" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "Só fora" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "Dentro e fora" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Insire espazos arredor dos operadores.\n" +"Unha vez engadidos, os operadores seguen separados.\n" +"Non pode anular a separación dos operadores." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "Engadir espazos arredor dos &operadores" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "Liñas únicas" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" +"Non separa as liñas que conteñen varias sentenzas en varias\n" +"liñas contendo unha só sentenza cada unha." + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "Manter as sentenzas dunha li&ña" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "Non racha os bloques que só ocupen unha liña." + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "Manter os &bloques dunha liña" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marce Villarino" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "mvillarino@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/gl/kdevgdb.po kdevelop-4.0.1/po/gl/kdevgdb.po --- kdevelop-3.9.98/po/gl/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/gl/kdevgdb.po 2010-07-17 20:10:14.000000000 +0100 @@ -0,0 +1,1294 @@ +# translation of kdevcppdebugger.po to galician +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# mvillarino , 2008, 2009. +# Marce Villarino , 2009. +# Marce Villarino , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcppdebugger\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-11-15 12:24+0100\n" +"Last-Translator: Marce Villarino \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "Vixías" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "Recente" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
Valor vello: %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
Valor novo: %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "Soporte de GDB" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Soporte para executar programas en GDB" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Desensamblar" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Examinar un ficheiro core..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Examina un ficheiro core" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"Examinar un ficheiro core

Isto carga un ficheiro core, que " +"tipicamente é creado tras un peche inesperado do programa, por ex. cun fallo " +"de segmentación. O ficheiro core contén unha imaxe da memoria do programa no " +"momento que se pechou inesperadamente, permitíndolle facer unha análise post-" +"mortem.

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "Xuntar co proceso" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "Xuntar co proceso..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "" +"Xuntar co proceso

Anexa o depurador a un proceso en execución.

" + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "Avaliar: %1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "" +"Avaliar unha expresión

Mostra o valor da expresión baixo o cursor." + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "Vixiar: %1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Vixiar unha expresión

Engade a expresión baixo o cursor á lista de " +"Variábeis/Vixías.

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Escoller un ficheiro core a examinar..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "A examinar o ficheiro core %1" + +#: debuggerplugin.cpp:372 +#, fuzzy +#| msgid "Examine core file" +msgid "Debug core file" +msgstr "Examina un ficheiro core" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "Escolla un proceso co que xuntar..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "" +"Non se xunta co proceso %1: non é posíbel xuntar o depurador consigo mesmo." + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "A xuntar co proceso %1" + +#: debuggerplugin.cpp:402 +#, fuzzy, kde-format +#| msgid "Attaching to process %1" +msgid "Debug process %1" +msgstr "A xuntar co proceso %1" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Depurador" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"Non se especificou ningún grupo de ambiente, semella deberse a unha " +"configuración corrompida, comprobe a configuración de execución «%1». " +"Empregarase o grupo de ambiente predeterminado." + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "Depurador detido" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "O programa interrompeuse" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "O proceso saíu" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "O programa está en execución" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "O programa está en pausa" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"GDB saíu anormalmente

Isto posibelmente sexa un erro en GDB. " +"Examine a fiestra da saída de GDB e logo pare o depurador" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "GDB saíu anormalmente" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "" +"Enviouse a orde gdb cando o depurador non se estaba a executar
A " +"orde era:
%1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Aconteceu un erro interno" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Orde non valida do depurador
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "Orde non válida do depurador" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "Saíu con normalidade" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "Saíuse co sinal %1" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "O programa recibiu o sinal %1 (%2)" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "A executar o programa" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"GDB non pode usar os dispositivos tty* nin pty*.\n" +"Verifique a configuración de /dev/tty* e /dev/pty*\n" +"Como root pode precisar «chmod ug+rw» os dispositivos tty* e pty* e/ou " +"engadir ao usuario no grupo tty mediante «usermod -G tty usuario»." + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Aviso" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "" +"Erro do depurador

O depurador informou do seguinte erro:

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Erro do depurador" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "1 orde na fila\n" +msgstr[1] "%1 ordes na fila\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "1 orde a ser procesada por gdb\n" +msgstr[1] "%1 ordes a ser procesadas por gdb\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "Estado do depurador: %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"Clase da orde actual: «%1»\n" +"Texto da orde actual: «%2»\n" +"Texto orixinal da orde actual: «%3»\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "Estado do depurador" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "Precisa o gdb 7.0.0 ou superior.
Está a empregar: %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "Erro de gdb" + +#: debugsession.cpp:1417 +#, fuzzy +#| msgid "Could not start debugger" +msgid "Could not start debugger:
" +msgstr "Non foi posíbel iniciar o depurador" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "" + +#: debugsession.cpp:1429 +#, fuzzy +#| msgid "Could not start debugger" +msgid "Could not attach debugger:
" +msgstr "Non foi posíbel iniciar o depurador" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"Pantalla do código-máquina

Unha vista do código-máquina no " +"executábel a correr coa instrución actual realzada. Pode pasar instrución " +"por instrución usando os botóns de «pasar sobre» e «pasar a» da barra de " +"ferramentas de depuración." + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Vista do desensamblado" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Enderezo" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Función" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Desprazamento" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Instrución" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "Non foi posíbel localizar a shell de depuración «%1»." + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "Non se atopou a shell de depuración" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" +"

A compoñente de depuración atopou un erro interno ao procesar a resposta " +"de gdb. Por favor, envíe un informe de erro" + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"A excepción é: %1\n" +"A resposta MI é: %2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Erro interno do depurador" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" +"Non foi posíbel iniciar o depurador.

Non foi posíbel executar «%1». " +"Verifique que o nome da rota é correcto." + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "Non foi posíbel iniciar o depurador" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "Configuración de GDB" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "Executa un programa nativo en GDB" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "Saída de GDB" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"Saída de GDB

Mostra todas as ordes en execución de gdb. Tamén pode " +"emitir calquera outro orde de gdb durante a depuración.

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "Orde de &gdb:" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "Pausa a execución do programa para introducir ordes de gdb" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Mostrar as ordes internas" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"Controla se as ordes emitidas internamente por KDevelop serán mostradas ou " +"non.
Esta opción afectará só ás ordes futuras, non engadirá nin eliminará " +"da vista ordes xa emitidas." + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "Copiar todo" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Comezar" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "Cantidade" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "Aceptar" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Cancelar" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Vista da memoria" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (1 byte)" +msgstr[1] "%2 (%1 bytes)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Mudar o rango da memoria" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Cargar de novo" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Pechar esta vista" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Vistas especiais do depurador" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "Xuntar cun proceso" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Escoller un ficheiro core" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "kdevelop: Consola de depuración de programa" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Configuración do depurador" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Executábel do depurador:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "Executábel de gdb" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"Para executar o binario «gdb» desde a $PATH, deixe este campo baleiro. Para " +"executar un gdb personalizado, por exemplo, para unha arquitectura " +"diferente, indique aquí o nome do executábel. Pode ou executar o gdb da " +"$PATH, pero cun nome diferente (por exemplo, «arm-gdb»), escribindo aquí o " +"nome, ou indicar unha rota completa para o executábel gdb." + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "" +"Executar gdb nunha shell especial (principalmente para proxectos con " +"automake)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"Se quer que gdb sexa executado nunha shell ou ferramenta especial indíquea " +"aquí. O principal caso de uso é para proxectos baseados en Automake onde o " +"programa realmente só é un script e precísase libtool para que se execute " +"dentro de gdb." + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "&Shell de depuración:" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"Se quer que gdb sexa executado nunha shell ou ferramenta especial indíquea " +"aquí. O principal caso de uso é para proxectos baseados en Automake onde o " +"programa realmente só é un script e precísase libtool para que se " +"execute dentro de gdb." + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Opcións" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"Mostrar membros estáticos fai a GDB máis lento á\n" +"hora de producir datos dentro de KDE e Qt.\n" +"Pode mudar a «sinatura» dos datos dos que\n" +"depende QString e friends,\n" +"peso se precisa depurar nestes valores entón\n" +"sinale esta opción." + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Mostrar os &membros estáticos" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"Cando se mostra o código desensamblado pode\n" +"escoller ver os nomes descodificados dos métodos.\n" +"Porén, os nomes non descodificados son máis fáciles de ler." + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "Mostrar os nomes &descodificados" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"Se GDB non viu unha biblioteca que será cargada mediante\n" +"«dlopen» entón rexeitará un punto de parada nese código.\n" +"Con esta opción GDB deterase ao cargar unha biblioteca e\n" +"en consecuencia tente estabelecer os puntos de parada pendentes.\n" +"Consulte a documentación para máis detalles acerca deste\n" +"comportamento.\n" +"\n" +"Se non está a usar «dlopen» coas bibliotecas non o sinale." + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "Tentar estabelecer &puntos de parada ao cargar bibliotecas" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"Isto permítelle introducir entradas de terminal cando o seu\n" +"programa conteña código de entrada por terminal (por ex. cin, fgets etc.).\n" +"Se usa entradas por terminal no seu programa entón sinale esta opción.\n" +"Caso contrario déixea sen sinalar." + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "Activar unha terminal separada para a &E/S do programa" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"Este script fornécese para as ordes reais precisas para conectar cun " +"executábel remoto en execución.\n" +"\tshell sleep5\tagarda que o programa remoto se inicie\n" +"\ttarget remote ...\tconecta co depurador remoto\n" +"\tcontinue\t[opcional] executa a depuración até o primeiro punto de parada" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "Depuración remota" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "Script de &configuración de gdb:" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "Script de configuración de GDB" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "Este script é usado como fonte por gdb cando comeza a depuración." + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "Executar o script de &shell:" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "Script para iniciar o programa remoto" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"Este script de shell execútase tras que gdb orixine o script de " +"configuración de gdb.\n" +"Cando se depura de xeito remoto este script serve para iniciar o proceso " +"remoto.\n" +"[Agárdase que o executábel depurador poida ser accedido no obxectivo, " +"posibelmente obténdoo como etapa final da construción]\n" +"1) Atope un xeito de executar unha orde remotamente - rsh, ssh, telnet, ...\n" +"2a) Execute «gdbserver ... programa» no obxectivo.\n" +"ou se o seu executábel contén a matriz de gdb.\n" +"2b) Execute «programa» no obxectivo." + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "Executar o script de &gdb:" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "O script para conectar cun programa remoto" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"Este script tómase como fonte por gdb tras executar os dous scripts " +"precedentes.\n" +"O propósito deste script é conter as ordes reais precisas para conectar cun " +"executábel remoto.\n" +"\tshell sleep 5\tagarda o inicio do programa remoto\n" +"\ttarget remote ...\tconecta co depurador remoto\n" +"\tcontinue\t[opcional] executa a depuración até o primeiro punto de parada." + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "Configuración do trazado" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"Activar o trazado\n" +"

O tracexamento é un mecanismo para imprimir automaticamente os valores " +"das expresións escollidas e continuar a execución cando se acade un punto de " +"parada. Pode consideralos como printf de depuración que non precisan de " +"modificar as fontes.

" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Activar o trazado" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "Formato de cadea personalizado" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"Formato de cadea personalizado\n" +"

Indique unha cadea de formato ao estilo C que será usada ao imprimir a " +"expresión escollida. Por exemplo:\n" +"

Punto de traza 1: g = %d

\n" +"Se non activa as cadeas con formato personalizado, os nomes e valores de " +"todas as expresións imprimiranse, usando «%d» como indicador de formato para " +"todas as expresións." + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "Expresións para imprimir:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Executar" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Barra de ferramentas de Depurador" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Executábel:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Ficheiro core:" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marce Villarino" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "mvillarino@gmail.com" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/gl/kdevmakebuilder.po kdevelop-4.0.1/po/gl/kdevmakebuilder.po --- kdevelop-3.9.98/po/gl/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/gl/kdevmakebuilder.po 2010-07-17 20:10:14.000000000 +0100 @@ -0,0 +1,168 @@ +# translation of kdevmakebuilder.po to galician +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# mvillarino , 2008, 2009. +# Marce Villarino , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-10-10 22:54+0200\n" +"Last-Translator: Marce Villarino \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Construtor Make" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Soporte de construción de proxectos con Make" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "O cartafol de construción «%1» non é válido" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "Non foi posíbel crear a orde de construción do obxectivo «%1»" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "Fallou a tarefa" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Fallou ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Rematou ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** Abortouse ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "a compilar" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "a xerar" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "a ligar" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "construído" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "a instalar" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "a crear" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Vista" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Abortar co primeiro erro:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Mostrar as ordes pero non executalas:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Instalar como root:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Orde de instalación como root:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Número de traballos simultáneos:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Executábel de Make:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Obxectivo predeterminado de make:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Parámetros adicionais de make:" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Perfil de ambiente activo: " + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marce Villarino" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "mvillarino@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/gl/kdevqthelp.po kdevelop-4.0.1/po/gl/kdevqthelp.po --- kdevelop-3.9.98/po/gl/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/gl/kdevqthelp.po 2010-07-17 20:10:14.000000000 +0100 @@ -0,0 +1,72 @@ +# translation of kdevqthelp.po to galician +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Marce Villarino , 2009. +# Marce Villarino , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-11-15 12:24+0100\n" +"Last-Translator: Marce Villarino \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "Non se achou ningunha documentación de «%1»" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "Páxina de inicio de QtHelp" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Comproba a documentación de Qt Help" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marce Villarino" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "mvillarino@gmail.com" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +#, fuzzy +#| msgid "QtHelp Home Page" +msgid "Help page:" +msgstr "Páxina de inicio de QtHelp" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/it/CMakeLists.txt kdevelop-4.0.1/po/it/CMakeLists.txt --- kdevelop-3.9.98/po/it/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/it/CMakeLists.txt 2010-07-17 20:10:53.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(it ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/it/kdevcmakebuilder.po kdevelop-4.0.1/po/it/kdevcmakebuilder.po --- kdevelop-3.9.98/po/it/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/it/kdevcmakebuilder.po 2010-07-17 20:10:53.000000000 +0100 @@ -0,0 +1,92 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Solinas Simone , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-18 11:36+0200\n" +"Last-Translator: Solinas Simone \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "Compilatore CMake" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Supporto per la compilazione di progetti CMake" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "Nessuna cartella di compilazione configurata, impossibile compilare" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "Compilazione interrota" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "Nessuna cartella di compilazione configurata, impossibile ripulire" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "Pulizia interrotta" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "Nessuna cartella di compilazione configurata, impossibile installare" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "Installazione interrotta" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "Nessuna cartella di compilazione configurata, impossibile configurare" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "Configurazione interrotta" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "" +"Nessuna cartella di compilazione configurata, impossibile far pulizia nella " +"cartella di compilazione" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "Non è possibile pulire la cartella di build" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "Job non riuscito" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "Binario CMake:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Simone Solinas" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ksolsim@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/it/kdevcmake.po kdevelop-4.0.1/po/it/kdevcmake.po --- kdevelop-3.9.98/po/it/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/it/kdevcmake.po 2010-07-17 20:10:53.000000000 +0100 @@ -0,0 +1,498 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the kdevcmake package. +# +# Solinas Simone , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-04-12 19:24+0200\n" +"Last-Translator: Solinas Simone \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "Documentazione di CMake" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Supporto per la documentazione di CMake" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Valore cache: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Documentazione cache: %1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "Comandi" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Variabile" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "Modulo" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "Proprietà" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "Linea di condotta" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "Pagina contenuto CMake" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 è un comando obsoleto e non dovrebbe essere usato" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Funzione da finire." + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Nome" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Tipo" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Valore" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Commento" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Avanzate" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"La cartella %1 stà per essere rimossa dall'elenco di KDevelop.\n" +"Vuoi che KDevelop la rimuova anche dal file system?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "Impossibile rimuovere: %1.\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "C&ambia colori" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "Generale" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "Questo progetto ha un giorno" +msgstr[1] "Questo progetto ha %1 giorni" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "Impostazioni cambiate" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "Un'applicazione KDE 4" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "(C) 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Documento da aprire" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Configura una cartella di compilazione" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "Configura una cartella di compilazione per %1" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "Devi selezionare un binario cmake." + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "Devi specificare una cartella di compilazione." + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "Stai usando una cartella di compilazione già creata." + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "Stai creando una nuova cartella di compilazione." + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "Cartella di compilazione già configurata." + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "" +"Questa cartella di compilazione è per %1, ma la cartella del progetto è %2." + +#: cmakebuilddirchooser.cpp:172 +msgid "You may not select a relative build directory." +msgstr "Non è possibile specificare una cartella di compilazione." + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "La cartella di compilazione selezionata non è vuota." + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "Gestore CMake" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Supporto per la gestione di progetti CMake" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Vai alla definizione selezionata" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Crea una cartella chiamata «%1»." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop - Supporto CMake" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "Impossibile creare la cartella del file CMakeLists.txt." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "Impossibile salvare la modifica." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Rimuovi una cartella chiamata «%1»." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Rimuovi un file chiamato «%1»." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Aggiungi un file chiamato «%1» al selezionato «%2»" + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "Impossibile salvare la modifica." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "Rinomina la cartella chiamata «%1»." + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "La cartella di compilazione non esiste e potrebbe non essere creata." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Errore nella creazione della cartella di compilazione" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "Non valido" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Comando" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Macro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Percorso" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "&Binario CMake:" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "&Cartella di compilazione:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "Prefisso di &installazione:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "&Tipo di compilazione:" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"KDevelop ha incontrato una serie di possibili radici per il tuo progetto, " +"seleziona quella corretta." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Simone Solinas" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ksolsim@gmail.com" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "&Sposta" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Aggiungi" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Rimuovi" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Valori cache" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Commento:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Mostra avanzate" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "Cartella CMake" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Mostra valori avanzati" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "ciao, mondo" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Colore di sfondo:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Scegli un nuovo colore di sfondo" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Cambia ilcolore di sfondo facendo clic qui e scegliendo il " +"nuovo colore nella finestra di dialogo del colore.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Durata del progetto:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Colore in primo piano:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Scegli un nuovo colore in primo piano" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Cambia ilcolore in primo piano facendo clic qui e " +"scegliendo il nuovo colore nella " +"finestra di dialogo del colore." + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Imposta la durata del progetto (in giorni)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "" +"Cambia la durata del progetto (in giorni) scegliendo un nuovo numero di " +"giorni." + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/it/kdevcpp.po kdevelop-4.0.1/po/it/kdevcpp.po --- kdevelop-3.9.98/po/it/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/it/kdevcpp.po 2010-07-17 20:10:53.000000000 +0100 @@ -0,0 +1,982 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the kdevcpp package. +# +# Simone Solinas , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-04-28 10:17+0200\n" +"Last-Translator: Simone Solinas \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.0\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "Non incluso" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Inizializza" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Contenitore non incluso" + +#: codecompletion/context.cpp:1272 +#, fuzzy, kde-format +#| msgctxt "" +#| "Here, overload is used as a programming term. This string is used to " +#| "display how many overloaded versions there are of the function whose name " +#| "is the second argument. The numeric argument is always greater than one, " +#| "so translation of the singular case is only necessary in languages where " +#| "the singular form is used for 21, 31 etc." +#| msgid "1 overload of %2" +#| msgid_plural "%1 overloads of %2" +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "1 sovracarico di %2" +msgstr[1] "%1 sovracarichi di %2" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "Connetti a %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Segnali/Slot" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "Sovrascrittura virtuale" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Implementa funzione" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "C++ integrato" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Sovrascrivi" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Implementa" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Crea slot" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "Da %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Aggiungi direttiva include" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Aggiungi dichiarazione anticipata" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "dichiarazione anticipata" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "Opzioni implementazione classe privata" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Annulla" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "Aggiorna la definizione da %1(%2) a (%3)" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Applicazione cambiamenti non riuscita: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"Il refactoring è una caratteristica sperimentale, potrebbe danneggiare il " +"codice. Prima di usarlo, accertati di fare un backup." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "Rinomina %1" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "Crea una definizione separata per %1" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Crea classe" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "Nessuna dichiarazione sotto il cursore" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "Nessun file sorgente disponibile per %1." + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "Impossibile aggiornare DU chain per %1." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "Impossibile creare una definizione per questa dichiarazione." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "Inserimento non riuscito" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "Applicazione cambiamenti non riuscita" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "Nessun documento per %1" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "Dichiarazione persa durante l'aggiornamento" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "La dichiarazione si trova nel file non scrivibile %1." + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "Nuovo nome:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Rinomina" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Nota: tutti i sovraccarichi, le funzioni sovraccaricate, le dichiarazioni " +"anticipate, ecc. saranno rinominati" + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Usi" + +#: codegen/simplerefactoring.cpp:445 +msgid "Declaration Info" +msgstr "Informazioni dichiarazione" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "Rinomina «%1» in «%2»" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "Applicazione cambiamenti non riuscita: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Imposta percorsi di inclusione personalizzati" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "" +"Impossibile salvare i percorsi di inclusione personalizzati nella cartella: %" +"1" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Aggiungi percorso di inclusione personalizzato" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Apri progetto" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "Non trovato: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "Non selezionare nulla, non aggiungere ad un obiettivo." + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "" +"Impossibile determinare la classe di base, aggiungerla indirettamente: %1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "Classe di base non valida: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Crea dichiarazione locale %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "Dichiara %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "Dichiarazione non trovata: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Incluso" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Incluso da" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Macro definite" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Funzione macro" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Macro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "Corpo preprocessato:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "Corpo:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "" +"Il gestore di compilazione del progetto %1 non ritorna una cartella di " +"compilazione" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"Il risolutore del percorso di inclusione ha bisogno della cartella di " +"compilazione per risolvere i percorsi di inclusione aggiuntivi. Valuta di " +"impostare una cartella di compilazione nel gestore dei progetti se non lo " +"hai ancora fatto." + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "Il gestore di compilazione non ha ritornato un percorso di inclusione" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"Il gestore di compilazione non ha ritornato il percorso di inclusione %1, " +"che potrebbe essere risolto dal risolutore di percorso di inclusione" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Risolutore percorso di inclusione: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Cartella di compilazione usata: «%1»\n" +"Risolutore del percorso di inclusione: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" +"Tentativo di risoluzione percorso di inclusione mentre un altro processo di " +"risoluzione era in esecuzione" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "Makefile mancante nella cartella «%1»" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "Problema nella risoluzione dei percorsi di inclusione per %1" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "In cache: %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "Il nome file %1 sembra essere non corretto" + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "Impossibile estrarre la nuova cartella di lavoro" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "L'uscita era: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "Make-call ricorsiva non riuscita" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "Il parametro stringa «%1» non sembra essere valido. L'uscita era: %2." + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "La cartella «%1» non esiste. L'uscita era: %2." + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "Make-call ricorsiva non corretta" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "Impossibile estrarre i percorsi di inclusione dall'output del make" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Cartella: «%1» Comando: «%2» Uscita: «%3»" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "Generatore forwarding header di KDE" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "" +"Un'applicazione che crea forwarding header (come i Qt header) dal codice " +"sorgente." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "(c) 2006, Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"Cartella include di KDE - gli header vanno in include/KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Informazioni di compilazione dal generatore XML di cmake" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "Istruzione #if non terminata" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "carattere %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "«Identificatore» atteso, trovato: %1" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "

Token text
%1
Input
%2
" +msgstr "
Testo Token
%1
Input
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "«)» atteso, trovato: %1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "Divisione per zero" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Testo di input: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "atteso «:» = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else senza #if" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "#endif senza #if sulla linea di output %1" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Errore macro" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "La chiamata alla macro %1 manca dell'argomento numero %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Formali: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "input non valido: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "Questo file importa il documento aperto adesso
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "Nel percorso di inclusione %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Incluso %1
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Cartella %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "Nel percorso di inclusione numero %1" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Include" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Percorso di inclusione" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "Inclusori" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "Supporto C++" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "Supporto per il linguaggio C++" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "File" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "&Commuta definizione/dichiarazione" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "Genera &nuova classe" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Rinomina dichiarazione" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "Sposta il sorgente" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Svuotato dal preprocessore
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "Analizza i file inclusi" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "Analizza il file attuale" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "Impossibile aggiornare duchain per %1" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "Usi in compilazione" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Pronto" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "Il file è stato incluso ricorsivamente all'interno di se stesso: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "Il file incluso non è stato trovato: %1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"Percorso di inclusione cercato:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "Impossibile aprire file «%1»" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "Impossibile leggere il file." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "Impossibile aprire il file." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "I permessi del file evitano l'apertura in lettura." + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Navigazione" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Codice" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Simone Solinas" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ksolsim@gmail.com" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "Opzioni C++" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Esporta:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Macro:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Pubblico" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Protetto" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Privato" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "Slot" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Segnale" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Cartella di salvataggio" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"Il percorso personalizzato di include sarà salvato in un fle speciale " +"chiamato «.kdev_include_paths» all'interno della cartella dei sorgenti. Il " +"percorso personalizzato sarà usato per tutti i file al di sotto di tale " +"cartella." + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Cartella di salvataggio:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Risoluzione automatica" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"Se il tuo progetto usa dei Makefile semplici, potrebbe essere possibile " +"risolvere automaticamente i percorsi di inclusione usando l'utilità make. " +"Per questo, crea qui una mappatura da un sorgente alla cartella di " +"compilazione." + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Cartella sorgente:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Cartella di compilazione:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Percorsi di inclusione personalizzati" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "" +"Puoi aggiungere qui una lista di percorsi di inclusione personalizzati." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"Nota: queste impostazioni non influenzano il compilatore o il progetto in " +"nessun modo, sono utilizzate al solo fine di trovare le intestazioni incluse " +"all'interno di KDevelop." + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" +"Opzioni e impostazioni per spostare i campi privati di una classe in una " +"struttura privata" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "Nome struttura privata:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Opzioni" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

L'implementazione " +"predefinita delle strutture private sono dichiarate comestrutture che hanno accesso pubblico predefinito.\n" +"

Seleziona questa casella " +"se desideri che l'implementazione della struttura privata sia dichiarata " +"come classe con accesso pubblico." +"

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Usa una classe invece di una struttura" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

Sposta le variabili che " +"sono inizializzate nella lista di inizializzazione del costruttore nella " +"lista della struttura di esecuzione privata dell'inizializzazione del " +"costruttore.

\n" +"

\n" +"

Nota: tutti i riferimenti e le " +"variabili con i tipi che non offrono i costruttori di default sono spostati " +"a prescindere dallo stato di questa opzione.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "Sposta l'inizializzazione della variabile nella struttura privata" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" +"Sposta tutti i metodi attualmente dichiarati privati nella struttura di " +"implementazione privata." + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "Sposta i metodi privati" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Nome puntatore:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "" +"Il nome della variabile membro che sarà il puntatore all'implementazione " +"privata" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/it/kdevcustommake.po kdevelop-4.0.1/po/it/kdevcustommake.po --- kdevelop-3.9.98/po/it/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/it/kdevcustommake.po 2010-07-17 20:10:53.000000000 +0100 @@ -0,0 +1,42 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the kdevcustommake package. +# +# Solinas Simone , 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-04-12 19:25+0200\n" +"Last-Translator: Solinas Simone \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Gestore Makefile personalizzato" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Supporto per la gestione di progetti Makefile personalizzati" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Esegui" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Simone Solinas" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ksolsim@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/it/kdevelop.po kdevelop-4.0.1/po/it/kdevelop.po --- kdevelop-3.9.98/po/it/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/it/kdevelop.po 2010-07-17 20:10:53.000000000 +0100 @@ -0,0 +1,21223 @@ +# translation of kdevelop.po to Italian +# +# Matteo Merli , 2001. +# Daniele Medri , 2003. +# Giovanni Venturi , 2003, 2004. +# Luciano Montanaro , 2003. +# Giovanni Venturi , 2003, 2004, 2005, 2006, 2007, 2008. +# Nicola Ruggero , 2007. +# Luigi Toscano , 2007. +# Simone Solinas , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-04-29 11:55+0200\n" +"Last-Translator: Simone Solinas \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Codice" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "File di progetto di KDevelop4" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "L'ambiente di sviluppo integrato KDevelop" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "Copyright 1999-2010, Gli sviluppatori di KDevelop" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "Crea una nuova sessione con un dato nome." + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "Sessione da caricare. Puoi passare sia hash o il nome della sessione." + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "Mostra le sessioni disponibili e chiudi" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" +"Sessioni disponibili (usa «-s HASH» or «-s NAME» per aprirne una specifica):" + +#: main.cpp:79 +msgid "Hash" +msgstr "Hash" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "Nome: progetti aperti" + +#: main.cpp:88 +msgid "[running]" +msgstr "[in esecuzione]" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "Specifica il binario di cui vuoi fare il debug." + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "Debug" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "Una sessione con il nome %1 esiste già. Usa l'opzione -s per aprirla." + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"Impossibile aprire la sessione sconosciuta %1. Vedi l'opzione --sessions per " +"le sessioni disponibili o usa -cs per crearne una nuova." + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "La sessione %1 è già in esecuzione." + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"Impossibile avviare KDevelop, l'eseguibile kdevelop.bin non è presente in %1." +"Si prega di reinstallare KDevelop." + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Responsabile, architettura, supporto VCS, supporto gestione progetto, " +"gestore progetti QMake " + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Architettura, Sublime UI, supporto Ruby" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Definition-Use Chain, supporto C++, lettura del codice, completamento del " +"codice, assistenza nella programmazione, rifattorizzazione." + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "Supporto CMake, supporto Esegui, supporto Kross" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "Integrazione GDB" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Integrazione editor di testo, definition-use chain" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "" +"Amministratore sito web, documentazione API, patch Doxygen e auto progetto" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "Integrazione GDB, estensioni sviluppo web" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +#, fuzzy +#| msgid "Generic manager, Webdevelopment Plugins" +msgid "Generic manager, Webdevelopment Plugins" +msgstr "Gestore generico, estensioni sviluppo web" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "supporto astyle e indent" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "VCS distribuito, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "SnippetPart, patch per debugger e usabilità" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "" +"Estensione subversion, gestore Make personalizzato, miglioramenti generali" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "Adattamenti per le Qt 3, supporto patch, valgrind, diff e perforce" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "Analizzatore C++" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "Gli autori di KWrite" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Componente editor Kate" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Progettista codice" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Contributori per le versioni precedenti:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "Gli autori di KHTML" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "Componente documentazione HTML" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "Idea iniziale, architettura di base, maggior parte del codice iniziale" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "Correzioni bug, KTabBar" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Supporto a Java e a Objective C" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Interfaccia debugger" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "Supporto PHP, varie sul menu contestuale" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "Modelli di applicazioni KDE" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Dist part, supporto bash, modelli di applicazione" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Diversi componenti, indicizzazione htdig" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Aiuto con gestione Automake e contenitore classe persistente" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Aiuto con l'infrastruttura KParts" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Supporto Ada" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "Gestore progetto QMake" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "Modalità MDI, QEditor, correzione bug" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "PartExplorer, riprogettazione di CvsPart, patch, correzione bug" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Estensioni sostituisci, segnalibri, FileList e CTags2. Miglioramenti " +"complessivi e patch" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Part e altre piccole cose per Filecreate e patch" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "Supporto ClearCase" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Supporto Ruby" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Documentazione Fortran" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Utilità documentazione Python" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Procedura guidata per Doxygen" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Componente selettore file" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "Completamento codice C++, contenitore classe persistente" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Patch" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Aiuto per il supporto Perl" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Vista indice documentazione" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Cerca documentazione, patch per il gestore progetto di qmake, miglioramenti " +"di usabilità, correzioni bug... " + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "Patch del gestore progetti QMake" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "Pulizia e correzione bug per qEditor, AutoMake e molte altre cose" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Artwork per il linguaggio Ruby" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "URL del progetto da caricare" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "File da caricare" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" +"Avvia il debugger, per esempio gdb. Il binario di cui dovrebbe essere fatto " +"il debug deve seguire - argomenti inclusi." + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (KDevPlatform in uso %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "Impossibile trovare il tipo nativo di configurazione di avvio" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "Impossibile trovare il programma di avvio %1" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "Impossibile aprire %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "&File" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "&Modifica" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "&Avanzate" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "&Vista" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "&Raggruppamento del codice" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "&Strumenti" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "Completamento codice" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "Impo&stazioni" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Barra degli strumenti principale" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "Sessione" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Progetto" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "&Esegui" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Navigazione" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&File" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "Mo&difica" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "Editor" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Codice" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "Fi&nestra" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Impostazioni" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" +"Simone Solinas,Giovanni Venturi,Matteo Merli,Daniele Medri,Angelo Ballabio," +"Luciano Montanaro,Nicola Ruggero" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ksolsim@gmail.com,,,,,," + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# XXX Maybe the

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"Esamina file core

Carica un file core, creato tipicamente dopo il " +"crash di una applicazione, ad esempio con un segmentation fault. Il file " +"core contiene l'immagine della memoria associata al programma nel momento " +"del crash, permettendo di fare un analisi postuma.

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "Connetti a un processo" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "Connetti a un processo..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "" +"Connetti a un processo

Connette il debugger ad un processo in " +"esecuzione.

" + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "Valuta: %1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "" +"Valuta espressione

Visualizza il valore dell'espressione sotto il " +"cursore.

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "Osserva: %1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Osserva espressione

Aggiunge l'espressione sotto il cursore alla " +"lista delle variabili/espressioni osservate.

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Scegli un file core da esaminare..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "Esamino il file core %1" + +#: debuggerplugin.cpp:372 +msgid "Debug core file" +msgstr "Debug da un file core" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "Scegli un processo a cui connettersi..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "" +"Non connesso al processo %1: impossibile connettere il debugger a sé stesso." + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "Connessione in corso al processo %1" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "Debug del processo %1" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Debugger" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"Non è stato specificato alcun ambiente di gruppo, sembra che la " +"configurazione sia errata; controllare la configurazione di esecuzione «%1»." +"Verrà utilizzato l'ambiente di gruppo predefinito." + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "Il debug è stato fermato" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "L'applicazione è stata interrotta" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "Il processo è terminato" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "L'applicazione è in esecuzione" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "L'applicazione è in pausa" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"GDB è terminato in modo anomalo

Probabilmente, questo è un bug in " +"in GDB. Esamina la finestra dell'output di gdb e ferma il debug" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "GDB è terminato in modo anomalo" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "" +"Comando di gdb inviato mentre il debug non era in esecuzione
Comando:
%1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Errore interno" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Comando di debug non valido
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "Comando di debug non valido" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "Terminato in modo corretto" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "Terminato a causa del segnale %1" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "Il programma ha ricevuto il segnale %1 (%2)" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "Programma in esecuzione" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"GDB non può usare i dispositivi tty* o pty*.\n" +"Controllare le impostazioni relative a /dev/tty* e /dev/pty*.\n" +"Potresti dover eseguire, da root, il comando «chmod ug+rw» sui dispositivi " +"tty* e pty* o aggiungere l'utente al gruppo tty usando il comando «usermod -G " +"tty username»." + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Attenzione" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "" +"Errore di debug

C'è stato il seguente errore di debug:

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Errore di debug" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "1 comando in coda\n" +msgstr[1] "%1 comandi in coda\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "Gdb sta processando 1 comando\n" +msgstr[1] "Gdb sta processando %1 comandi\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "Stato del debug: %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"Classe del comando corrente: «%1»\n" +"Testo del comando corrente: «%2»\n" +"Testo originale del comando corrente: «%3»\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "Stato del debug" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "È necessario gdb 7.0.0 o successivo.
Versione in uso: %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "Errore di gdb" + +#: debugsession.cpp:1417 +msgid "Could not start debugger:
" +msgstr "Impossibile avviare il debug
" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "Errore di avvio" + +#: debugsession.cpp:1429 +msgid "Could not attach debugger:
" +msgstr "Impossibile connettersi ad un processo per il debug.
" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"Visualizzazione codice macchina

Visualizza il codice macchina " +"contenuto nell'eseguibile, evidenziando l'istruzione corrente. Puoi avanzare " +"istruzione per istruzione usando i pulsanti «Passa sopra l'istruzione» e " +"«Passa dentro l'istruzione» della barra degli strumenti per il debug." + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Vista del codice disassemblato" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Indirizzo" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Funzione" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Offset" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Istruzione" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "Impossibile trovare la shell di debug «%1»." + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "Shell di debug non trovata" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" +"

C'è stato un errore interno del componente per il debug, mentre " +"processava la risposta di gdb. Si prega di segnalare un bug." + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"Eccezione: %1\n" +"Risposta MI: %2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Errore interno di debug" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" +"Impossibile avviare il debug.

Impossibile eseguire «%1». Assicurati " +"che il percorso sia specificato in modo corretto." + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "Impossibile avviare il debug" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "Configurazione di GDB" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "Esegue un'applicazione nativa in GDB" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "Output di GDB" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"Output di GDB

Visualizza tutti i comandi di gdb in esecuzione. " +"Durante il debug puoi anche eseguire qualsiasi comando di gdb.

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "Comando di &GDB:" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "" +"Mette in pausa l'esecuzione dell'applicazione per inserire comandi di gdb" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Visualizza comandi interni" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"Controlla la visualizzazione dei comandi eseguiti internamente da KDevelop. " +"
Questa opzione influenzerà solo i comandi successivi, non modificherà i " +"comandi già visualizzati nella vista." + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "Copia tutto" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Avvio" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "Quantità" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "OK" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Annulla" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Vista della memoria" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (1 byte)" +msgstr[1] "%2 (%1 byte)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Modifica intervallo di memoria" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Aggiorna" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Chiudi vista" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Viste speciali di debug" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "Connetti ad un processo" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Seleziona file core" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "kdevelop: Console di debug delle applicazioni" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Configurazione di debug" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Eseguibile per il debug:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "Eseguibile di gdb" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"Per eseguire il programma «gdb» in base al PATH, lasciare vuoto questo campo. " +"Per eseguire un altro gdb, ad esempio per un'altra architettura, inserisci " +"qui il nome dell'eseguibile. Puoi anche eseguire un programma in base al " +"PATH, ma con un nome diverso (ad esempio, «arm-gdb»), inserendo qui il nome o " +"specificando il percorso completo dell'eseguibile." + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "" +"Esegui gdb in una shell speciale (principalmente per i progetti di automake)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"Se vuoi eseguire gdb in una shell speciale o attraverso uno strumento " +"speciale, inseriscilo qui. Questa funzione è utile principalmente per i " +"progetti che usano Automake, in cui l'applicazione è solo uno script ed è " +"necessario libtool per eseguirla in gdb." + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "&Shell di debug:" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"Se vuoi eseguire gdb in una shell speciale o attraverso uno strumento " +"speciale, inseriscilo qui. Questa funzione è utile principalmente per i " +"progetti che usano Automake, in cui l'applicazione è solo uno script ed è " +"necessario libtool per eseguirla in gdb." + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Opzioni" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"La visualizzazione dei membri statici rallenta GDB nella produzione dei " +"dati, se si usa KDE e le Qt.\n" +"Potrebbe cambiare la struttura dei dati su cui si basano\n" +"QString e altre classi, ma se vuoi fare il debug di questi valori abilita " +"questa opzione." + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Visualizza &membri statici" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"Quando si visualizza il codice disassemblato\n" +"puoi vedere i nomi interni dei metodi,\n" +"anche se sono più difficili da leggere." + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "Non vi&sualizzare i nomi interni" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"Se GDB non conosce una libreria che verrà caricata\n" +"attraverso «dlopen», si rifiuterà di impostare un breakpoint\n" +"in quel codice.\n" +"Utilizzando questa opzione, GDB verrà fermato al\n" +"caricamento delle librerie, e proverà a impostare\n" +"i breakpoint rimanenti. Vedere la documentazione per\n" +"maggiori informazioni su questo comportamento.\n" +"\n" +"Se non carichi librerie con «dlopen», lascia disabilitata\n" +"questa opzione." + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "Prova a impostare i &breakpoint al caricamento delle librerie" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"Permette di inserire input da terminale quando\n" +"l'applicazione contiene codice per la lettura da terminale\n" +"(per esempio con cin, fgets, ecc.).\n" +"Se l'applicazione legge da terminale, abilita questa opzione,\n" +"altrimenti lasciala disabilitata." + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "Abilita il terminale separato per l'&I/O dell'applicazione" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"Questo script contiene i comandi necessari a connettersi a un eseguibile " +"remoto in esecuzione.\n" +"\tshell sleep 5\tAttende l'avvio del programma remoto\n" +"\ttarget remote ...\tSi connette al debug remoto\n" +"\tcontinue\t[opzionale] avvia il debug fino al primo breakpoint" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "Debug remoto" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "Script di configurazione di gdb:" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "Script di configurazione di gdb" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "Questo script viene importato da gdb all'avvio del debug." + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "Eseg&ui script shell:" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "Script per avviare l'applicazione remota" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"Questo script della shell viene eseguito dopo l'importazione dello\n" +"script di configurazione da parte di gdb.\n" +"Quando si fa debug remoto, questo script deve lanciare il processo\n" +"remoto.\n" +"[Ci si aspetta di raggiungere l'eseguibile di cui si sta facendo il debug\n" +"nella macchina obiettivo, magari scaricandolo dopo averlo compilato]\n" +"1) Trova un modo per eseguire un comando in remoto: rsh, ssh, telnet, ...\n" +"2a) Esegui «gdbserver ... applicazione» sulla macchina obiettivo\n" +"altrimenti, se l'eseguibile contiene lo stub per gdb\n" +"2b) Esegui «applicazione» sulla macchina obiettivo." + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "Esegui script &gdb:" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "Script per connettersi all'applicazione remota" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"Questo script viene importato da gdb dopo l'esecuzione dei due script\n" +"precedenti.\n" +"Questo script serve per connettersi all'eseguibile remoto in esecuzione.\n" +"\tshell sleep 5\tAttende l'avvio del programma remoto\n" +"\ttarget remote ...\tSi connette al debug remoto\n" +"\tcontinue\t[opzionale] avvia il debug fino al primo breakpoint." + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "Configurazione del tracciamento" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"Abilita il tracciamento\n" +"

Il tracciamento è un meccanismo per visualizzare automaticamente i valori " +"delle espressioni desiderate e continuare l'esecuzione quando si incontra un " +"breakpoint. Lo puoi pensare come un debug con printf che non richiede la " +"modifica del sorgente.

" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Abilita il tracciamento" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "Stringa di formato personalizzata" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"Stringa di formato personalizzata\n" +"

Permette di specificare una stringa di formato stile C, che verrà\n" +"usata per visualizzare l'espressione scelta. Ad esempio:\n" +"

Punto 1: g = %d

\n" +"Se la stringa di formato personalizzata non è abilitata, verranno " +"visualizzati\n" +"i nomi e i valori di tutte le espressioni, usando sempre «%d» come\n" +"specificatore di formato." + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "Espressioni da visualizzare:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Esegui" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Barra degli strumenti di debug" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Eseguibile:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "File core:" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marco Poletti" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "poletti.marco@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/it/kdevmakebuilder.po kdevelop-4.0.1/po/it/kdevmakebuilder.po --- kdevelop-3.9.98/po/it/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/it/kdevmakebuilder.po 2010-07-17 20:10:53.000000000 +0100 @@ -0,0 +1,166 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Solinas Simone , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-06-05 19:54+0200\n" +"Last-Translator: Simone Solinas \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Compilatore Make" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Supporto per la compilazione di progetti Make" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Cartella di compilazione non valida «%1»" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "Impossibile creare il comando di compilazione per «%1»" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "Job non riuscito" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Non riuscito ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Finito ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** Interrotto ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "compilazione in corso" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "generazione in corso" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "linking in corso" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "compilato" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "installazione in corso" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "creazione in corso" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Vista" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Interrompi al primo errore:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Visualizza i comandi ma non eseguirli:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Installo come root:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Comando d'installazione da root:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Numero di job simultanei:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Eseguibile Make:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Make predefinito:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Opzioni make addizionali:" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Profilo ambiente attivo:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Solinas Simone" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ksolsim@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/it/kdevqthelp.po kdevelop-4.0.1/po/it/kdevqthelp.po --- kdevelop-3.9.98/po/it/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/it/kdevqthelp.po 2010-07-17 20:10:53.000000000 +0100 @@ -0,0 +1,68 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the kdevqthelp package. +# +# Solinas Simone , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-04-14 17:54+0200\n" +"Last-Translator: Solinas Simone \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "Impossibile trovare la documentazione di «%1»" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "Pagina iniziale di QtHelp" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Controlla la documentazione di Qt" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Simone Solinas" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ksolsim@gmail.com" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "Identificatore da cercare:" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "Guida:" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "about:blank" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "Informazioni di debug:" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nds/CMakeLists.txt kdevelop-4.0.1/po/nds/CMakeLists.txt --- kdevelop-3.9.98/po/nds/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nds/CMakeLists.txt 2010-07-17 20:11:46.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(nds ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/nds/kdevcmakebuilder.po kdevelop-4.0.1/po/nds/kdevcmakebuilder.po --- kdevelop-3.9.98/po/nds/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nds/kdevcmakebuilder.po 2010-07-17 20:11:46.000000000 +0100 @@ -0,0 +1,92 @@ +# translation of kdevcmakebuilder.po to +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# Manfred Wiese , 2008, 2009. +# Sönke Dibbern , 2008, 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-11-18 06:23+0100\n" +"Last-Translator: Manfred Wiese \n" +"Language-Team: Low Saxon \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "CMake-Buumoduul" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Ünnerstütten för't Buen vun CMake-Projekten" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "Keen Buuorner instellt, buen nich mööglich" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "Buen warrt afbraken" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "Keen Buuorner instellt, opkloren nich mööglich" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "Opkloren warrt afbraken" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "Keen Buuorner instellt, installeren nich mööglich" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "Installeren warrt afbraken" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "Keen Buuorner instellt, utföhren vun \"configure\" nich mööglich" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "Utföhren vun \"configure\" warrt afbraken" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "Keen Buuorner instellt, Opkloren vun den Buuorner nich mööglich" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "Buuorner lett sik nich opkloren" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "Opgaav fehlslaan" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "CMake-Programm:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Sönke Dibbern, Manfred Wiese" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "s_dibbern@web.de, m.j.wiese@web.de" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nds/kdevcmake.po kdevelop-4.0.1/po/nds/kdevcmake.po --- kdevelop-3.9.98/po/nds/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nds/kdevcmake.po 2010-07-17 20:11:46.000000000 +0100 @@ -0,0 +1,465 @@ +# Translation of kdevcmake.po to Low Saxon +# translation of kdevcmake.po to +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# Manfred Wiese , 2008, 2009, 2010. +# Sönke Dibbern , 2008, 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-05-20 06:05+0200\n" +"Last-Translator: Manfred Wiese \n" +"Language-Team: Low Saxon \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "CMake-Dokmentatschoon" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Ünnerstütten för CMake-Dokmentatschoon" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Weert twischenspiekern: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Dokmentatschoon twischenspiekern: %1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "Befehlen" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Variabel" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "Moduul" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "Egenschap" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "Regel" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "CMake-Inholtsiet" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 is överhaalt, un schull nich mehr bruukt warrn." + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Nich afslaten Funkschoon. " + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Naam" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Typ" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Weert" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Kommentar" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Verwiedert" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"De Orner \"%1\" warrt vun KDevelop sien List wegmaakt.\n" +"Wullt Du, dat KDevelop em ok ut dat Dateisysteem wegmaakt?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "\"%1\" lett sik nich wegmaken.\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "Klören &wesseln" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "Allmeen" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "Dit Projekt is een Dag oolt." +msgstr[1] "Dit Projekt is %1 Daag oolt." + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "Instellen ännert" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "En KDE-4-Programm" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4prog" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "© 2009 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Dokment, dat Du opmaken wullt" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "En Buuorner inrichten" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "En Buuorner för %1 inrichten" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "Du muttst en Programm för \"cmake\" angeven." + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "Du muttst en Buuorner angeven." + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "En al opstellt Buuorner warrt bruukt." + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "En nieg Buuorner warrt opstellt." + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "Buuorner is al inricht." + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "De utsöchte Buuorner is för \"%1\", man de Projektorner is \"%2\"." + +#: cmakebuilddirchooser.cpp:172 +msgid "You may not select a relative build directory." +msgstr "Relatiev Buuornern laat sik nich utsöken." + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "De utsöchte Buuorner is nich leddig." + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "CMake-Pleger" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Ünnerstütten för't Plegen vun CMake-Projekten" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Na Teel-Definitschoon jumpen" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "En Ornern mit den Naam \"%1\" opstellen" + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop-Ünnerstütten för CMake" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "De Datei \"CMakeLists.txt\" för den Orner lett sik nich opstellen." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "De Ännern lett sik nich sekern." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "En Orner mit den Naam \"%1\" wegmaken" + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "En Datei mit den Naam \"%1\" wegmaken" + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "En Datei mit den Naam \"%1\" na Teel \"%2\" tofögen" + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "De Ännern lett sik nich sekern." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "En Orner mit den Naam \"%1\" ümnömen" + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "Dat gifft den Buuorner nich, un he lett sik nich opstellen." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Fehler bi't Opstellen vun den Buuorner" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "Leeg" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Befehl" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Makro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Padd" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "CMake-&Programm:" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "&Buuorner:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "&Installeerprefix:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "Buu-&Typ:" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"Kdevelop hett en Reeg Projekt-Wörtelornern funnen, bitte söök den Richtigen " +"ut." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Sönke Dibbern, Manfred Wiese" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "s_dibbern@web.de, m.j.wiese@web.de" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "Ver&schuven" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Tofögen" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Wegmaken" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Twischenspieker-Weerten" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Kommentar" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Verwiedert wiesen" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "CMake-Orner" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Verwiedert Weerten wiesen" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "Moin, Welt" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Achtergrundklöör:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "En anner Klöör för den Achtergrund utsöken" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Du kannst de Achtergrundklöör wesseln, wenn Du hier klickst " +"un de niege Klöör binnen den Klöördialoog utsöchst.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Projektöller:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Vörgrundklöör:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "En nieg Vörgrundklöör utsöken" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Du kannst de Vörgrundklöör wesseln, wenn Du hier klickst un " +"de niege Klöör binnen den Klöördialoog utsöchst.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Projektöller in Daag fastleggen" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "Hier kannst Du dat Öller vun't Projekt, meten in Daag, ännern." \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nds/kdevcpp.po kdevelop-4.0.1/po/nds/kdevcpp.po --- kdevelop-3.9.98/po/nds/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nds/kdevcpp.po 2010-07-17 20:11:46.000000000 +0100 @@ -0,0 +1,919 @@ +# Translation of kdevcpp.po to Low Saxon +# translation of kdevcpp.po to +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# Manfred Wiese , 2008, 2009, 2010. +# Sönke Dibbern , 2008, 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-01 07:58+0200\n" +"Last-Translator: Manfred Wiese \n" +"Language-Team: Low Saxon \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "Nich inslaten" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Torechtmaken" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Nich inslaten Gelaats" + +#: codecompletion/context.cpp:1272 +#, kde-format +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "1 Överladen vun %2" +msgstr[1] "%1 Överladen vun %2" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "Tokoppeln na %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Signalen/Slots" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "Virtuell Övergahn" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Funkschoon ümsetten" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "Na C++ inbuut" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Övergahn" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Ümsetten" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Slot opstellen" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "Vun %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Koppdatei-Anwiesen tofögen" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Vörut-Deklaratschoon tofögen" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "Vörut-Deklaratschoon" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "Optschonen för Ümsetten vun Privaatklassen" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Afbreken" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "Definitschoon vun %1(%2) to (%3) opfrischen" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Ännern laat sik nich bruken: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"Dat Niegfaktoreren is en Funkschoon, de noch utprobeert warrt un mag Dien " +"Kode tobreken. Maak en Sekerheitkopie, ehr Du dat bruukst." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "%1 ümnömen" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "Egen Definitschoon för %1 opstellen" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Klass opstellen" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "Keen Deklaratschoon ünner Wieser" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "Keen Borndatei för %1 verföögbor." + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "DB-Keed för %1 lett sik nich opfrischen." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "För disse Deklaratschoon lett sik keen Definitschoon opstellen." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "Infögen fehlslaan" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "Övernehmen vun Ännern fehlslaan" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "Keen Dokment för %1" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "Deklaratschoon bi't Opfrischen wegkamen" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "Verkloren liggt binnen nich-schriefbor Datei %1." + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "Nieg Naam:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Ümnömen" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Beacht bitte: All överlaadt Funkschonen, Överladen, Vörwarts-Verkloren usw. " +"warrt ok ümnöömt." + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Bruken" + +#: codegen/simplerefactoring.cpp:445 +msgid "Declaration Info" +msgstr "Verkloren-Informatschonen" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "\"%1\" warrt to \"%2\" ümnöömt" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "Övernehmen vun Ännern fehlslaan: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Egen Koppdateien-Padden fastleggen" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "Egen Koppdateienpadden laat sik nich in Orner %1 sekern" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Egen Koppdateipadd tofögen" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Projekt opmaken" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "Nich funnen: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "Nix utsöcht, warrt na keen Teel toföögt." + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "Basisklass lett sik nich oplösen, warrt indirekt toföögt: %1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "Leeg Basisklass: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Lokaal Deklaratschoon %1 %2 opstellen" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "Deklaratschoon %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "Deklaratschoon nich funnen: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Inslaten" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Inslaten vun" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Fastleggt Makros" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Funkschoon-Makro" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Makro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "Vörverarbeidt Hööftdeel:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "Hööftdeel:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "Buupleger för Projekt \"%1\" hett keen Buuorner torüchgeven" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"De Oplöser för Koppdateipadden bruukt den Buuorner bi't Oplösen vun bito " +"angeven Koppdateipadden. Richt man mit den Projektpleger en Buuorner in, " +"wenn Du dat nich al daan hest." + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "Buupleger hett keen Koppdateipadd torüchgeven" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"De Buupleger hett den Koppdateipadd \"%1\" nich torüchgeven, den de " +"Koppdateipadd-Oplöser oplösen kunn." + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Koppdateipadd-Oplöser: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Bruukt Buuorner: \"%1\"\n" +"Koppdateipadd-Oplöser: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" +"Oplösen vun en Koppdateipadd wöör versöcht, bides noch en anner " +"Oplöösperzess leep." + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "Binnen Orner \"%1\" fehlt dat Makefile" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "Problem bi't Oplösen vun Koppdatei-Padden för \"%1\"" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "Wohrt: %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "As't lett is de Dateinaam \"%1\" leeg" + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "Nieg Arbeitorner lett sik nich finnen." + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "De Utgaav weer: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "Rekursiev Oproop vun \"make\" fehlslaan" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "As't lett is de Parameter-Tekenkeed \"%1\" leeg. De Utgaav weer: %2" + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "Dat gifft den Orner \"%1\" nich. De Utgaav weer: %2" + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "Rekursiev Oproop vun \"make\" fehlslaan" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "Binnen de Utgaav vun \"make\" laat sik keen Koppdateipadden finnen." + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Orner: \"%1\" Befehl: \"%2\" Utgaav: \"%3\"" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "Vörutkopp-Maker för KDE" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "Dit Programm stellt Vörutköpp (as bi Qt-Köpp) ut den Bornkode op." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "(c) 2006, Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"KDE-Koppdateiorner - Koppdateien kaamt na include/" +"KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Buu-Informatschoon ut den XML-Maker vun \"cmake\"" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "Keen Enn för #if-Utdruck" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "Teken %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "\"identifier\" verwacht, man %1 funnen" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
Mark-Text
%1
Ingaav
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "\")\" verwacht, man %1 funnen" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "Dör Null deelt" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Ingaavtext: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "\": = %1\" verwacht" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "\"#else\" ahn \"#if\"" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "\"#endif\" ahn \"#if\" op Utgaavreeg %1" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Makro-Fehler" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "Den Oproop vun Makro \"%1\" fehlt dat Argument Nr. %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Formalen: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "leeg Ingaav: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "" +"Disse Datei importeert dat Dokment, dat Du jüst bi büst to bewerken
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "Binnen Koppdateipadd %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Inslaten dör %1
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Orner \"%1\"" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "Binnen %1. Koppdateipadd" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Koppdateien" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Koppdateien-Padd" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "Inslaten vun" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "C++-Ünnerstütten" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "Spraakünnerstütten för C++" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "Dateien" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "Definitschoon/Deklaratschoon &wesseln" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "&Nieg Klass opstellen" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Deklaratschoon ümnömen" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "Na Born verschuven" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Bi de Vörverarbeiden leddig maakt
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "Koppdateien warrt inleest" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "Aktuell Datei warrt inleest" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "DB-Keed för %1 warrt nich opfrischt." + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "Bruken warrt opstellt" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Afslaten" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "De Datei hett sik sülven inslaten: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "Koppdatei \"%1\" lett sik nich finnen" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"Binnen Koppdateipadd söcht:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "Datei \"%1\" lett sik nich opmaken." + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "Datei lett sik nich lesen." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "Datei lett sik nich opmaken." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "Dateiverlöven verhöödt dat Lesen." + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Navigatschoon" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Kode" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Sönke Dibbern, Manfred Wiese" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "s_dibbern@web.de, m.j.wiese@web.de" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "C++-Optschonen" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Exporteren:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Makro:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Apen" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Schuult" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Privaat" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "Slot" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Signaal" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Spiekerorner" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"De egen Koppdateien-Padd warrt binnen en besünner Datei mit den Naam \"." +"kdev_include_paths\" binnen en Bornorner wohrt. De Padd warrt för all " +"Dateien binnen un nerrn den Orner bruukt." + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Spiekerorner:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Automaatsch Oplösen" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"Bruukt Dien Projekt eenfache Makefiles, mag dat mööglich wesen, \"make\" " +"lööst de Koppdateien-Padden automaatsch op. Dormit dat funkscheneert, muttst " +"Du hier den Born- en Buuorner towiesen." + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Bornorner:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Buuorner:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Egen Koppdateien-Padden" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "Hier kannst Du en List mit egen Koppdateien-Padden tofögen." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"Beacht: Disse Instellen warkt sik op keen Oort op't Kompileren oder dat " +"Projekt ut, se warrt bloots vun KDevelop för't Söken na inslaten Koppdateien " +"bruukt." + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" +"Optschonen un Instellen för't Verschuven vun privaat Datenfeller vun en " +"Klass na en Privaatstruktuur" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "Naam vun de Privaatstruktuur:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Optschonen" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

Standardwies warrt privaat " +"Ümsettenstrukturen as struct " +"verkloort, dormit se as Standard apen Togriep hebbt.

\n" +"

Maak dit an, wenn Du dat " +"wullt, de private Ümsettenstruktuur warrt as class mit apen Togriep verkloort.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Klass ansteed Struktuur bruken" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

Verschuuv all aktuelle " +"Variabeln, de binnen den Konstrukter sien Torechtmaaklist torechtmaakt " +"warrt, na de Konstrukter-Torechtmaaklist vun de private Ümsetten-Struktuur.\n" +"

\n" +"

Note: All Betöög un Variabeln vun " +"Typen, de keen Standardkonstruktern praatstellt, warrt verschaven, liek wat " +"Du hier instellen deist.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "Variabeln-Torechtmaken na Privaatstruktuur verschuven" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" +"All opstunns verkloorte Privaatmetoden na de private Ümsettenstruktuur " +"verschuven." + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "Privaatmetoden verschuven" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Wiesernaam:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "" +"De Naam vun de Maatvariabel, de de Wieser för de private Ümsetten warrt" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nds/kdevcustommake.po kdevelop-4.0.1/po/nds/kdevcustommake.po --- kdevelop-3.9.98/po/nds/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nds/kdevcustommake.po 2010-07-17 20:11:46.000000000 +0100 @@ -0,0 +1,44 @@ +# translation of kdevcustommake.po to +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Manfred Wiese , 2008, 2009. +# Sönke Dibbern , 2008. +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-02-22 07:32+0100\n" +"Last-Translator: Manfred Wiese \n" +"Language-Team: Low Saxon \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Egen-Makefile-Pleger" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Ünnerstütten för't Plegen vun egen Makefile-Projekten" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Utföhren" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Sönke Dibbern, Manfred Wiese" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "s_dibbern@web.de, m.j.wiese@web.de" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nds/kdevelop.po kdevelop-4.0.1/po/nds/kdevelop.po --- kdevelop-3.9.98/po/nds/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nds/kdevelop.po 2010-07-17 20:11:46.000000000 +0100 @@ -0,0 +1,12601 @@ +# translation of kdevelop.po to +# Translation of kdevelop.po to Low Saxon +# +# Manfred Wiese , 2006, 2008, 2009, 2010. +# Sönke Dibbern , 2006, 2007, 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-01 07:51+0200\n" +"Last-Translator: Manfred Wiese \n" +"Language-Team: Low Saxon \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Kode" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "KDevelop4-Projektdateien" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "De Programmsmeed KDevelop" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "Copyright 1999-2010, de Schrieverslüüd vun KDevelop" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "Nieg Törn mit angeven Naam opstellen." + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "Törn, den Du laden wullt. Pröövsumm oder Törnnaam ingeven." + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "Verföögbor Törns oplisten un Programm utmaken" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" +"Verföögbor Törns (bruuk \"-s PRÖÖVSUMM\" oder \"-s NAAM'', wenn Du en " +"besünner opmaken wullt):" + +#: main.cpp:79 +msgid "Hash" +msgstr "Pröövsumm" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "Naam: Opmaakt Projekten" + +#: main.cpp:88 +msgid "[running]" +msgstr "[an't Lopen]" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "Giff de utföhrbor Datei för de Fehlersöök an." + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "Fehlersöök" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "" +"Dat gifft al en Törn mit den Naam \"%1\". Bruuk \"-s\", wenn Du em opmaken " +"wullt." + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"Nich begäng Törn \"%1\" lett sik nich opmaken. Kiek mit \"--sessions\" na " +"verföögbor Törns, oder stell mit \"-cs\" en niegen Törn op." + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "Törn \"%1\" löppt al." + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"KDevelop lett sik nich starten, de utföhrbor Datei \"kdevelop.bin\" fehlt in " +"%1. Richt bitte Dien KDevelop-Installatschoon.." + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Pleger, Opbuu, VKS-Ünnerstütten, Projektpleeg-Ünnerstütten, QMake-" +"Projektpleger" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Opbuu, Sublime-Böversiet, Ruby-Ünnerstütten" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Definitschoonbruuk-Keed, C++-Ünnerstütten, Kodenavigeren, Kodekompletteren, " +"Hülp bi't Programmeren, Renoveren" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr " CMake-, Utföhr- un Kross-Ünnerstütten" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "GDB-Inbetten" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Texteditor-Inbetten, Definitschoonbruuk-Keed" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "" +"Nettsiedenpleger, API-Dokmentatschoon, Doxygen un Autoprojekt-Kodeplasters" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "GDB-Inbetten, Nettutwickeln-Modulen" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "Allgemeen Pleger, Nettutwickeln-Modulen" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "Ünnerstütten för \"astyle\" un \"indent\"" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Jewgenij Iwanow" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "Verdeelt VKS, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "Snippel-Komponent, Fehlersöker un Kodeplasters för de Bruukborkeit" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "Subversion-Moduul, Egen-Make-Pleger, Allmeen Verbetern" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "" +"Porteren na Qt3, Kodeplasters, Valgrind, Ünnerstütten för \"diff\" un " +"\"perforce\"" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "C++-Inleser" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "De Schrievers vun KWrite" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "\"Kate\"- Editorkomponent" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Maker-Kode" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Bidregers to öller Verschonen:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "De Schrievers vun KHTML" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "Komponent för HTML-Dokmentatschoon" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "Orginaalidee, Grundopbuu, veel vun den eersten Bornkode" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, Fehlerrichten" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Ünnerstütten för Java un Objective-C" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Fehlersöker-Böversiet" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "PHP-Ünnerstütten, Rechtsklickmenü-Kraams" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "KDE-Programmvörlagen" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Dist-Komponent, bash-Ünnerstütten, Programmvörlagen" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Verscheden Komponenten, \"htdig\"-Indizeren" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Hülp mit den Automake-Pleger un duerhaftig Klassenspieker" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Hülp mit de KParts-Infrastruktuur" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Ada-Ünnerstütten" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "QMake-Projektpleger" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "Mehrdokmenten-Bedrief, QEditor, Fehlerrichten" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "" +"\"PartExplorer\", Niegopbuu vun \"CvsPart\", Kodeplasters, Fehlers un " +"Fehlerrichten" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Utwesseln, Leestekens, \"FileList\"- un \"CTags2\"-Modulen. Allgemeen " +"Verbetern un Kodeplasters" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Komponent \"Filecreate\", anner Kraam un Kodeplasters" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "Ünnerstütten för \"ClearCase\"" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Ünnerstütten för \"Ruby\"" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Fortran-Dokmentatschoon" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Hülpprogramm för Python-Dokmentatschoon" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Doxygen-Hölper" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Dateiutsöök-Komponent" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "C++-Kodekompletteren, duerhaftig Klassenspieker" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Kodeplasters" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Hülp bi de Perl-Ünnerstütten" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Index-Ansicht för de Dokmentatschoon" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Söökzentrum, Kodeplasters för den QMake-Projektpleger, Verbetern vun de " +"Bruukborkeit, Fehlerrichten... " + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "Kodeplasters för den QMake-Projektpleger" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "Oprümen un Fehlerrichten för qEditor, AutoMake un veel anner Saken" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Billerwark för Ruby" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "URL vun't Projekt, dat Du laden wullt" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Dateien, de laadt warrn schöölt" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" +"Fehlersöker starten, a.B. \"gdb\". Dat Programm, dat Du ünnersöken wullt, " +"mutt (mit Argumenten) dorna stahn." + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (bruukt KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "Normaal Instellen-Typ för Programmstart lett sik nich finnen." + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "Programmstarter \"%1\" lett sik nich finnen." + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "\"%1\" lett sik nich opmaken" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "&Datei" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "&Bewerken" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "&Verwiedert" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "&Ansicht" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "&Kode-Foolden" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "&Warktüüch" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "Woortkompletteren" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "&Instellen" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Hööft-Warktüüchbalken" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "Törn" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Projekt" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "&Utföhren" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Navigeren" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Datei" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Bewerken" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "Editor" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Kode" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Finster" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Instellen" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manfred Wiese, Sönke Dibbern" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "m.j.wiese@web.de, s_dibbern@web.de" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# unreviewed-context + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# unreviewed-context + + + + + + + +# unreviewed-context + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# unreviewed-context + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# unreviewed-context + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# unreviewed-context + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# unreviewed-context + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# unreviewed-context + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# unreviewed-context + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# unreviewed-context + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# unreviewed-context + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# unreviewed-context + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# Effektiv C++ programmieren +# ISBN: 3827322979 +# Mehr effektiv C++ programmieren +# ISBN: 3827312752 \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nds/kdevformatters.po kdevelop-4.0.1/po/nds/kdevformatters.po --- kdevelop-3.9.98/po/nds/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nds/kdevformatters.po 2010-07-17 20:11:46.000000000 +0100 @@ -0,0 +1,471 @@ +# Translation of kdevformatters.po to Low Saxon +# translation of kdevformatters.po to +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Manfred Wiese , 2008, 2009. +# Sönke Dibbern , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-07-23 01:31+0200\n" +"Last-Translator: Sönke Dibbern \n" +"Language-Team: Low Saxon \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "AStyle-Formateermoduul" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "En Formateerwarktüüch, dat \"astyle\" bruukt" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Artistic Style is en Moduul för't Inrücken, Formateren un Opsmucken " +"för C-, C++-, C#- un Java-Bornkode.
Tohuussiet: http://astyle.sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Inrück-Formateermoduul" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "En Formateermoduul, dat \"indent\" bruukt" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"C-Bornkode inrücken un formateren
Mit dat Programm \"indent\" " +"lett sik Kode beter leesbor maken. Dat kann ok Dateien ut den een C-" +"Schrievstil na en annern wanneln.
indent weet en Barg af vun de " +"C-Syntax, man versöcht dat ok bi Syntax, de nich heel oder leeg formt is." +"
Tohuussiet: http://www." +"gnu.org/software/indent/" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Inrücken" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Tabulatern" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Tabulatern verdwingen" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Freetekens" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"Tall vun Freetekens, de na en Tabteken ümwannelt warrt.\n" +"De Tall vun Freetekens per Tabteken is vun den Editor fastleggt." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Tab- na Freetekens wanneln" + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Tabulatern na Freetekens &wanneln" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "Bi leddig Regen de Freetekens ut de vörangahn Reeg bruken" + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "&Leddig Regen opfüllen" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Inrücken" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Blöck" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Klemmen" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "Groot- un Lüttschrieven" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Klass" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Betekers" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Naamrüüm" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Preperzesser-Anwiesen" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "Schalters" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"Binnen dörgahn Utdrück nich mit mehr as mit de Hööchsttall\n" +"Freetekens inrücken, relatiev to de verleden Reeg." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Binnen dörgahn Bedingen, de en Bedinganwiesen tohöört,\n" +"mit en sietst Tall vun Freetekens inrücken" + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Tominnst binnen Bedingen:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "Aktuelle verdubbeln" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Tohööchst binnen Utdruck:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Annerswat" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Typ" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Blockverbinnen Anwiesen (a.B. \"else\" oder \"catch\") vun ehr\n" +"direktemang vörutgahn sluten Klemmen aftrennen" + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "Afsluten Anwiesen a&ftrennen" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "Nix ännern" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Anhangen" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Aftrennen" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Leddig Regen rund nich tosamenhören Blöck,\n" +"Jumpmarken, Klassen, usw. infögen.\n" +"Begäng Problemen:\n" +"\n" +"1. Is en Utdruck nich Deel vun en Block, hebbt\n" +" de nakamen Blöck all den dubbelten Afstand.\n" +" Utdrück binnen Blöck warrt propper formateert.\n" +"\n" +"2. Kommentaren warrt vun ehr Blöck aftrennt.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "&Blöck aftrennen" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"As \"--break-blocks\", man ok afsluten Anwiesen\n" +"aftrennen (a.B. \"else\" oder \"catch\").\n" +"\n" +"Begäng Problemen:\n" +"\n" +"\n" +"1. Is en Utdruck nich Deel vun en Block, hebbt\n" +" de nakamen Blöck all den dubbelten Afstand.\n" +" Utdrück binnen Blöck warrt propper formateert.\n" +"\n" +"2. Kommentaren warrt vun ehr Blöck aftrennt.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "&All Blöck aftrennen" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "\"else\"-Anwiesen vun \"if()\"-Utdruck aftrennen" + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "\"if-&else\" aftrennen" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Afstand" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Bi Klemmen" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Wegmaken" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "Bloots binnen" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "Bloots buten" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "Binnen un buten" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Freetekens rund Operatoren tofögen.\n" +"Dat gifft kenn Akschoon för't Wegmaken\n" +"vun Freetekens rund Operatoren." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "Freetekens rund &Operatoren infögen" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "Een-Reeg-Anwiesen" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" +"Regen, de mehr as een Utdruck bargt, nich to en Reeg\n" +"vun Een-Reeg-Utdrück wanneln" + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "Een-Reeg-Utdrück &wohren" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "Blöck, de heel binnen een Reeg staht, nich optrennen" + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "Een-Reeg-B&löck wohren" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Sönke Dibbern, Manfred Wiese" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "s_dibbern@web.de, m.j.wiese@web.de" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nds/kdevgdb.po kdevelop-4.0.1/po/nds/kdevgdb.po --- kdevelop-3.9.98/po/nds/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nds/kdevgdb.po 2010-07-17 20:11:46.000000000 +0100 @@ -0,0 +1,1231 @@ +# Translation of kdevcppdebugger.po to Low Saxon +# translation of kdevcppdebugger.po to +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# Manfred Wiese , 2008, 2009, 2010. +# Sönke Dibbern , 2008, 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevcppdebugger\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-04-27 06:11+0200\n" +"Last-Translator: Manfred Wiese \n" +"Language-Team: Low Saxon \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nds\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "Beluert" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "Tolest bruukt" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
Oolt Weert: %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
Nieg Weert: %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "GDB-Ünnerstütten" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Ünnerstütten för't Utföhren vun Programmen mit GDB" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Disassembleren" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Karndatei bekieken..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Karndatei bekieken" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"Karndatei bekieken

Disse Funkschoon laadt en Karndatei, de " +"normalerwies opstellt warrt, wenn dat Programm afstört is, a.B. mit en " +"Spiekertogriep-Fehler. De Karndatei bargt en Afbild vun den Programmspieker, " +"as he bi den Afstört weer, so dat Du em later noch bekieken kannst.

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "Perzess griepen" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "Perzess griepen..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "" +"Perzess griepen

Lett den Fehlersöker en lopen Perzess griepen.

" + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "%1 utweerten" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "" +"Utdruck utweerten

Wiest den Weert vun den Utdruck ünner den Blinker." +"

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "%1 beluern" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Utdruck beluern

Föögt den Utdruck ünner den Blinker na't " +"Variabelnfinster ünner \"Beluern\" to.

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Karndatei för't Bekieken utsöken..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "Karndatei \"%1\" warrt bekeken" + +#: debuggerplugin.cpp:372 +msgid "Debug core file" +msgstr "Fehlersöök binnen Karndatei" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "Perzess för't Griepen utsöken..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "" +"Perzess %1 lett sik nich griepen: de Fehlersöker kann sik nich sülven " +"griepen." + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "Perzess \"%1\" warrt grepen" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "Fehlersöök in Perzess \"%1\"" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Fehlersöker" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"Keen Ümgevenkoppel angeven, lett as en schaadhaftig Instellen. Prööv bitte " +"de Utföhr-Instellen \"%1\". De Standard-Ümgevenkoppel warrt ansteed bruukt." + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "Fehlersöker anhollen" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "Programm afbraken" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "Perzess verlaten" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "Programm löppt" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "Programm wöör ophollen" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"\"gdb\" wöör nich normaal beendt

Dit is wohrschienlich en " +"Programmfehler binnen \"gdb\". Överprööv dat \"gdb\"-Utgaavfinster un holl " +"denn den Fehlersöker an" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "\"gdb\" wöör nich normaal beendt" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "" +"\"gdb\"-Befehl geven, man de Fehlersöker löppt nich.
De Befehl " +"weer:
%1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Intern Fehler" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Leeg Fehlersöök-Befehl
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "Leeg Fehlersöök-Befehl" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "Normaal beendt" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "Na Signaal %1 verlaten" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "Programm hett Signaal %1 (%2) kregen" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "Programm warrt utföhrt" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"\"gdb\" kann de Reedschappen \"tty*\" un \"pty*\" nich bruken.\n" +"Prööv de Instellen för \"/dev/tty*\" un \"/dev/pty*\"\n" +"Villicht muttst Du as Systeempleger för de \"tty*\"- un \"pty*\"-" +"Reedschappen \"chmod ug+rw\" utföhren un / oder den Bruker mit \"usermod -G " +"tty brukernaam\" na den \"tty\"-Koppel tofögen." + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Wohrschoen" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "" +"Fehlersöök-Fehler

De Fehlersöker hett dissen Fehler meldt:

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Fehlersöök-Fehler" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "1 Befehl in de Reeg\n" +msgstr[1] "%1 Befehlen in de Reeg\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "1 Befehl warrt vun \"gdb\" afarbeidt\n" +msgstr[1] "%1 Befehlen warrt vun \"gdb\" afarbeidt\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "Fehlersöker-Status: %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"Aktuell Befehlklass: \"%1\"\n" +"Aktuell Befehltext: \"%2\"\n" +"Aktuell Befehl-Orginaaltext: \"%3\"\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "Fehlersöker-Status" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "" +"\"gdb 7.0.0\" oder nieger deit noot.
Du bruukst opstunns: %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "\"gdb\"-Fehler" + +#: debugsession.cpp:1417 +msgid "Could not start debugger:
" +msgstr "Fehlersöker lett sik nich opropen:
" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "Fehler bi Programmstart" + +#: debugsession.cpp:1429 +msgid "Could not attach debugger:
" +msgstr "Fehlersöker lett sik nich griepen:
" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"Maschienkode-Ansicht

De Maschienkode vun Dien lopen Programm, de " +"aktuelle Anwiesen is markeert. Du kannst de Anwiesen een för een mit de " +"Knööp \"Anwiesen utföhren\" un \"Na Anwiesen ringahn\" op den Fehlersöök-" +"Warktüüchbalken afarbeiden." + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Disassembleert" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Adress" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Funkschoon" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Verscheel" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Anwiesen" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "Fehlersöök-Konsool \"%1\" lett sik nich finnen." + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "Fehlersöök-Konsool lett sik nich finnen" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" +"

Binnen de Fehlersöker-Komponent hett dat en Fehler geven, bides se en " +"Antwoort vun \"gdb\" afarbeidt hett. Bericht dissen Fehler bitte." + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"De Utnahm is: %1\n" +"De MI-Antwoort is: %2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Intern Fehlersöök-Fehler" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" +"De Fehlersöker lett sik nich starten.

\"%1\" lett sik nich starten. " +"Kiek, wat de Paddnaam richtig angeven is." + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "Fehlersöker lett sik nich opropen" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "GDB instellen" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "Föhrt en normaal Programm binnen GDB ut" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "GDB-Utgaav" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"GDB-Utgaav

Wiest all utföhrte gdb-Befehlen. Du kannst bi de " +"Fehlersöök ok egen gdb-Befehlen utföhren.

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "&gdb-Befehl:" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "Programm för't Ingeven vun gdb-Befehlen anhollen" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Intern Befehlen wiesen" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"Leggt fast, wat Befehlen wiest warrt, de KDevelop intern rutgifft.
Disse " +"Optschoon gellt bloots för tokamen Befehlen, al geven Befehlen warrt de " +"Ansicht nich toföögt oder ut ehr wegmaakt." + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "All koperen" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Start" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "Mengde" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "OK" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Afbreken" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Spiekeransicht" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (1 Byte)" +msgstr[1] "%2 (%1 Bytes)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Spiekerrebeet ännern" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Nieg laden" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Disse Ansicht tomaken" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Besünner Fehlersöök-Ansichten" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "Perzess griepen" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Karndatei utsöken" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "KDevelop: Konsool för Programm-Fehlersöök" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Fehlersöker instellen" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Fehlersöök-Programm:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "Programm \"gdb\"" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"Wenn sik \"gdb\" över Dien PATH-Variabel finnen lett, bruukst Du hier nix " +"ingeven. Wenn Du en besünner \"gdb\" bruken wullt, a.B för en anner " +"Ünnerbuu, giff hier bitte den Naam vun dat Programm in. Du kannst dit \"gdb" +"\" över de PATH-Variabel opropen, man mit en anner Naam (a.B \"arm-gdb\"), " +"wenn Du den Naam hier ingiffst, oder Du giffst den helen Padd na't \"gdb\"-" +"Programm in." + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "" +"\"gdb\" binnen en besünner Konsool utföhren (normalerwies för Automake-" +"Projekten)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"Wenn en besünner Konsool oder Warktüüch \"gdb\" utföhren schall, denn giff " +"dat hier in. In de Hööftsaak is dat goot för Automake-Projekten, wenn dat " +"Programm bloots en Skript is, dat ahn \"libtool\" nich binnen \"gdb\" löppt." + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "Fehlersöök-&Konsool:" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"Wenn en besünner Konsool oder Warktüüch \"gdb\" utföhren schall, denn giff " +"dat hier in. In de Hööftsaak is dat goot för Automake-Projekten, wenn dat " +"Programm bloots en Skript is, dat ahn libtool nich binnen \"gdb\" " +"löppt." + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Optschonen" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"Dat Wiesen vun faste Maten maakt \"gdb\" bi't\n" +"Opstellen vun Daten binnen KDE un Qt langsamer.\n" +"Dat mag ok de \"Signatuur\" vun de Daten\n" +"ännern, vun de QString usw. afhangt, man\n" +"wenn Du binnen disse Maten na Fehlers söken\n" +"muttst, bruuk disse Optschoon." + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Faste &Maten wiesen" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"För't Wiesen vun disassembleert Kode kannst Du\n" +"fastleggen, dat Du de Metoden ehr Binnennaams\n" +"wiest kriegen wullt, man torüchwannelt Naams\n" +"laat sik eenfacher lesen." + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "&Torüchwannelt Naams wiesen" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"Wenn \"gdb\" en Bibliotheek noch nich kennt, de mit \"dlopen\"\n" +"opmaakt warrt, sett dat binnen den Kode keen Hollpunkt.\n" +"Man mit disse Instellen kann \"gdb\" bi't Laden vun en\n" +"Bibliotheek anhollen un denn versöken, de plaanten Hollpünkt\n" +"to setten. Kiek ok binnen de Dokmentatschoon na, wenn Du\n" +"mehr över dit Bedregen weten wullt.\n" +"\n" +"Wenn Du keen Bibliotheken mit \"dlopen\" laadst, laat dit ut." + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "Bi't Laden vun Bibliotheken &Hollpünkt setten" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"Över disse Optschoon laat sik Konsoolingaven utföhren,\n" +"wenn Dien Programm Ingaven vun de Konsool leest (a.B.\n" +"mit \"cin\", \"fgets\" usw.). Wenn Dien Programm dit deit,\n" +"maak disse Optschoon an, anners laat ehr ut." + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "Egen &Terminal för Programmin- un -utgaven bruken" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"Dit Skript is för de Befehlen dacht, de nödig sünd för't Verbinnen na en " +"Programm, dat op en anner Reekner löppt.\n" +"\tshell sleep 5\ttöven, bet feern Programm start\n" +"\ttarget remote ...\ttokoppeln na feern Fehlersöker\n" +"\tcontinue\t[köörwies] Fehlersöök bet eerst Hollpunkt" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "Feern-Fehlersöök" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "&Instellskript för \"gdb\":" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "Instellenskript för \"gdb\"" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "" +"Dit Skript warrt vun \"gdb\" inleest un utföhrt, wenn de Fehlersöök anfangt." + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "&Utföhr-Konsoolskript:" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "Skript för't Utföhren vun't feerne Programm" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"Dit Konsoolskript warrt utföhrt, na dat \"gdb\" sien Instellskript inleest " +"hett.\n" +"Dit Skript schall bi de Fehlersöök op en anner Reekner den feernen Perzess " +"redig starten.\n" +"[Verwacht warrt, dat sik dat Fehlersöökprogramm op den feern Reekner " +"faatkriegen lett, a.B. wenn Een dat as lesten Buu-Schritt daallaadt.]\n" +"1) Kiek en Metood för't Utföhren vun en Befehl op den feern Reekner ut, a.B. " +"mit rsh, ssh, telnet, ...\n" +"2a) Föhr \"gdbserver ... Programm\" op den Teelreekner ut.\n" +"2b) Oder föhr \"Programm\" op den Teelreekner ut, wenn dat den \"gdb-stub\" " +"bargt." + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "Utföhrskript för \"&gdb\":" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "Skript för't Tokoppeln na't feerne Programm" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"Dit Skript warrt vun \"gdb\" inleest un utföhrt, na dat dat de beden " +"verleden Skripten utföhrt hett.\n" +"Dit Skript is för de Befehlen maakt, de nödig sünd för't Verbinnen na en " +"Programm, dat op en anner Reekner löppt.\n" +"\tshell sleep 5\ttöven, bet feern Programm start\n" +"\ttarget remote ...\ttokoppeln na feern Fehlersöker\n" +"\tcontinue\t[köörwies] Fehlersöök bet eerst Hollpunkt." + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "Instellen för Weertbeluern" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"Weertbeluern anmaken

Weertbeluern is en Metood, bi de utsöcht " +"Weerten automaatsch utgeven warrt, wenn dat Programm bi en Hollpunkt " +"anlangt, bloots warrt dat dor nich bi anhollen. Dat is liek to de Fehlersöök " +"mit \"printf\", man Du bruukst den Borntext nich ännern.

" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Weertbeluern anmaken" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "Egen Formaat" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"Egen Formaat\n" +"

Hier kannst Du en Tekenkeed in C-Stil fastleggen, de för de Utgaav vun " +"den utsöchten Utdruck bruukt warrt, a.B.:\n" +"

Luurpunkt 1: g = %d

\n" +"Wenn \"Egen Formaat\" nich anmaakt is, warrt Naams un Weerten vun all " +"Weerten mit \"%d\" as Formaatangaav för all Utdrück utgeven." + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "Utdrück, de Du utgeven wullt:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Utföhren" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Fehlersöök-Warktüüchbalken" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Utföhrbor Datei:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Karndatei:" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Sönke Dibbern, Manfred Wiese" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "s_dibbern@web.de, m.j.wiese@web.de" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nds/kdevmakebuilder.po kdevelop-4.0.1/po/nds/kdevmakebuilder.po --- kdevelop-3.9.98/po/nds/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nds/kdevmakebuilder.po 2010-07-17 20:11:46.000000000 +0100 @@ -0,0 +1,168 @@ +# translation of kdevmakebuilder.po to +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Manfred Wiese , 2008, 2009. +# Sönke Dibbern , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-07-23 01:32+0200\n" +"Last-Translator: Sönke Dibbern \n" +"Language-Team: Low Saxon \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Make-Buumoduul" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Ünnerstütten för't Buen vun Make-Projekten" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Buuorner \"%1\" is leeg" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "Buubefehl för't Teel \"%1\" lett sik nich opstellen" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "Opgaav fehlslaan" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Fehlslaan ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Afslaten ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** Afbraken ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "An't Kompileren" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "An't Opstellen" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "An't Linken" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "buut" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "An't Installeren" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "An't Opstellen" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Ansicht" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Bi eerst Fehler afbreken:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Befehlen wiesen, man nich utföhren:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "As Systeempleger installeren:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Systeempleger-Installeerbefehl:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Tall vun op eenmaal utföhrt Opgaven:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Make-Programm:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Standardteel för \"make\":" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Anner \"make\"-Optschonen:" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Anmaakt Ümgevenprofil:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Sönke Dibbern, Manfred Wiese" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "s_dibbern@web.de, m.j.wiese@web.de" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nds/kdevqthelp.po kdevelop-4.0.1/po/nds/kdevqthelp.po --- kdevelop-3.9.98/po/nds/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nds/kdevqthelp.po 2010-07-17 20:11:46.000000000 +0100 @@ -0,0 +1,69 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# Sönke Dibbern , 2009. +# Manfred Wiese , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-31 04:20+0200\n" +"Last-Translator: Manfred Wiese \n" +"Language-Team: Low Saxon \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "För \"%1\" lett sik keen Dokmentatschoon finnen" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "QtHelp-Tohuussiet" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Qt-Hülp versöken" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Sönke Dibbern" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "s_dibbern@web.de" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "Beteker, den Du söken wullt:" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "Hülpsiet:" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "about:blank" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "Fehlersöök-Informatschonen:" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nl/CMakeLists.txt kdevelop-4.0.1/po/nl/CMakeLists.txt --- kdevelop-3.9.98/po/nl/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nl/CMakeLists.txt 2010-07-17 20:11:55.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(nl ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/nl/kdevcmakebuilder.po kdevelop-4.0.1/po/nl/kdevcmakebuilder.po --- kdevelop-3.9.98/po/nl/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nl/kdevcmakebuilder.po 2010-07-17 20:11:55.000000000 +0100 @@ -0,0 +1,91 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Kristof Bal , 2008. +# Freek de Kruijf , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-06-13 21:28+0200\n" +"Last-Translator: Freek de Kruijf \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "CMake-bouwprogramma" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Ondersteuning voor het bouwen van CMake-projecten" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "Geen bouw-map ingesteld, bouwen lukt niet" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "Bouwen afbreken" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "Geen bouw-map ingesteld, wissen lukt niet" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "Wissen afbreken" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "Geen bouw-map ingesteld, installeren lukt niet" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "Installeren afbreken" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "Geen bouw-map ingesteld, instellen lukt niet" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "Instellen afbreken" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "Geen bouw-map ingesteld, builddir wissen lukt niet" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "Wissen van builddir niet mogelijk" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "Taak mislukt" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "CMake-binary:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Freek de Kruijf" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "f.de.kruijf@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nl/kdevcmake.po kdevelop-4.0.1/po/nl/kdevcmake.po --- kdevelop-3.9.98/po/nl/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nl/kdevcmake.po 2010-07-17 20:11:55.000000000 +0100 @@ -0,0 +1,497 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Kristof Bal , 2008. +# Freek de Kruijf , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-06-11 23:17+0200\n" +"Last-Translator: Freek de Kruijf \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "CMake-documentatie" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Ondersteuning voor CMake-documentatie" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Cache-waarde: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Cache-documentatie: %1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "Commando's" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Variabele" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "Module" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "Eigenschap" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "Beleid" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "Inhoudspagina van CMake" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 is een verouderd commando en zou niet gebruikt moeten worden" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Niet beëindigde functie. " + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Naam" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Type" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Waarde" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Opmerking" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Geavanceerd" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"De map %1 staat op het punt te worden verwijderd uit de lijst van KDevelop.\n" +"Wilt u dat KDevelop het ook in het bestandssysteem verwijderd?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "Kon niet verwijderen; %1.\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "&Kleur wisselen" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "Algemeen" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "Dit project is één dag oud" +msgstr[1] "Dit project is %1 dagen oud." + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "Instellingen gewijzigd" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "Een KDE 4 programma" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "(C) 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Te openen document" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Een bouw-map instellen" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "Een bouw-map instellen voor %1" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "Selecteer een cmake-binary." + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "Specificeer een bouw-map." + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "Een reeds aangemaakt bouw-map gebruiken." + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "Een nieuwe bouw-map aan maken" + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "Bouw-map is al ingesteld." + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "Deze bouwmap is voor %1, maar de projectmap is %2." + +#: cmakebuilddirchooser.cpp:172 +msgid "You may not select a relative build directory." +msgstr "U mag geen relatieve bouwmap selecteren." + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "De geselecteerde bouwmap is niet leeg." + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "CMake-beheerder" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Ondersteuning voor het beheren van CMake-projecten" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Ga naar doel-definitie" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Een map genaamd '%1' aanmaken." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop - CMake-ondersteuning" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "Kan het bestand CMakeLists.txt van de map niet aanmaken" + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "Kon de wijziging niet opslaan." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Een map genaamd '%1' verwijderen." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Een bestand genaamd '%1' verwijderen." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Een bestand genaamd '%1' toevoegen aan doel '%2'." + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "Kan de wijziging niet opslaan." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "Een map genaamd '%1' hernoemen." + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "De bouwmap bestaat niet en kon niet worden aangemaakt." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Fout bij aanmaken van bouwmap" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "ONGELDIG" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Commando" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Macro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Pad" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "CMake-&binary:" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "&Bouw-map:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "&Installatievoorvoegsel:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "Bouw&type:" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"KDevelop heeft verschillende mogelijke starts van uw project gevonden, " +"gaarne de juiste selecteren." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Freek de Kruijf" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "f.de.kruijf@gmail.com" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "&Verplaatsen" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Toevoegen" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Verwijderen" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Cache-waarden" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Toelichting:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Geavanceerd tonen" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "CMake-map" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Geavanceerd waarden tonen" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "hallo, wereld" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Achtergrondkleur:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Een nieuwe achtergrondkleur kiezen" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Wijzig de achtergrondkleur door hier te klikken en kies de " +"nieuwe kleur in de kleurdialoog.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Projectleeftijd:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Voorgrondkleur:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Een nieuwe voorgrondkleur kiezen" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Wijzig de voorgrondkleur door hier te klikken en kies de " +"nieuwe kleur in de kleurdialoog.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Stel de projectleeftijd in op (in dagen)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "" +"Wijzig de projectleeftijd (in dagen) door een nieuw aantal dagen te kiezen." + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nl/kdevcpp.po kdevelop-4.0.1/po/nl/kdevcpp.po --- kdevelop-3.9.98/po/nl/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nl/kdevcpp.po 2010-07-17 20:11:55.000000000 +0100 @@ -0,0 +1,937 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Kristof Bal , 2008. +# Freek de Kruijf , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-14 22:58+0200\n" +"Last-Translator: Freek de Kruijf \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "Niet ingesloten" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Initialiseren" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Niet ingesloten container" + +#: codecompletion/context.cpp:1272 +#, kde-format +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "1 overload van %2" +msgstr[1] "%1 overloads van %2" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "Verbinden met %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Signalen/Slots" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "Virtueel overschrijven" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Function implementeren" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "Buildin van C++" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Overschrijven" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Implementatie" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Slot aanmaken" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "Van %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Insluit-directieve toevoegen" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Voorwaarts-declaraties toevoegen" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "voorwaarts declareren" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "Opties van privé klasse implementatie" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Annuleren" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "Definitie van %1(%2) naar (%3) bijwerken" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Wijzigingen toepassen is mislukt: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"Refactoring is een experimentele functie, het kan uw code beschadigen. Maak " +"een backup, alvorens het te gebruiken." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "Hernoemen %1" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "Gescheiden definitie voor %1 aanmaken" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Klasse aanmaken" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "geen declaratie onder de cursor" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "Geen broncode-bestand beschikbaar voor %1." + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "Bijwerken van DU-chain voor %1 is mislukt." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "Kan geen definitie voor deze declaratie aanmaken." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "Invoegen is mislukt" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "Wijzigingen toepassen is mislukt" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "Geen document voor %1" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "Verloren declaraties bij bijwerken" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "Declaratie is aanwezig in niet-beschrijfbaar bestand %1." + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "Nieuwe naam:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Hernoemen" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Opmerking: Alle overloaded functies, overloads, voorwaartse declaraties, " +"etc. zullen ook worden hernoemd" + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Gebruiken" + +#: codegen/simplerefactoring.cpp:445 +msgid "Declaration Info" +msgstr "Declaratie-info" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "Hernoemen van \"%1\" naar \"%2\"" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "Wijzigingen toepassen is mislukt: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Aangepast include-pad instellen" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "Opslaan van aangepaste invoeg-paden in map is mislukt: %1" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Aangepast include-pad toevoegen" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Project openen" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "Niet gevonden: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "Er is niets geselecteerd, niet toegevoegd aan een doel." + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "Kon de basisklasse niet vinden, het wordt indirect toegevoegd: %1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "Ongeldige basisklasse: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Lokale declaratie aanmaken %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "Declareren van %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "Declaratie niet gevonden: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Ingesloten" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Ingesloten door" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Gedefinieerde macro's" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Functie-macro" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Macro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "Voorverwerkte body:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "Body:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "Bouwbeheerder voor project %1 gaf geen bouwmap terug" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"De oplosser voor invoegpaden heeft de bouwmap nodig om extra invoegpaden te " +"vinden. Overweeg om een bouwmap in de projectbeheerder in te stellen als u " +"dat nog niet hebt gedaan." + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "Bouwbeheerder gaf geen invoegpad terug" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"De bouwbeheerder gaf het invoegpad %1 niet terug, die gevonden kan worden " +"door oplosser voor invoegpaden" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Oplosser van include-pad: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Gebruikte bouwmap: \"%1\"\n" +"Oplosser voor invoegpaden: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" +"Probeerde het include-pad op te lossen terwijl een ander oplossingsproces " +"nog actief is" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "Makefile ontbreekt in map \"%1\"" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "Probleem tijdens het oplossen van include-paden voor %1" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "Gecached: %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "Bestandsnaam %1 lijkt ongeldig te zijn " + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "Extraheren van een nieuwe werkmap is mislukt" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "Uitvoer was: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "Recursieve make-aanroep is mislukt" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "De parameterstring \"%1\" lijkt niet geldig te zijn. Uitvoer was: %2" + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "De map \"%1\" bestaat niet. Uitvoer was: %2." + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "Recursieve make-aanroep is misvormd" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "Kon geen invoegpaden extraheren uit de make-uitvoer" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Map: \"%1\" Commando: \"%2\" Uitvoer: \"%3\"" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "KDE generator voor doorstuur-header" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "" +"Een programma dat doorstuur-headers (zoals Qt-headers) uit broncode aanmaakt." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "(c) 2006, Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"KDE invoegmap - headers gaan in includes/KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Bouwinformatie uit de cmake-XML-generator" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "Niet-beëindigd #if statement" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "teken %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "Verwacht \"identifier\", gevonden %1" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
Tokentekst
%1
Invoer
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "Verwacht \")\", gevonden %1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "Deling door nul" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Tekstinvoer: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "verwacht ``:'' = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else zonder #if" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "#endif zonder #if bij uitvoerregel %1" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Macro-fout" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "Bij oproep van macro %1 ontbreekt argumentnummer %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Formals: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "ongeldige invoer: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "Dit bestand importeert het huidige open document
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "In include-pad %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Ingesloten via %1
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Map %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "In %1de include-pad" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Includes" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Include-pad" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "Waarin invoegen" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "C++-ondersteuning" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "Ondersteuning voor de C++-taal" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "Bestanden" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "&Schakel definitie/declaratie om" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "&Nieuwe klasse maken" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Declaraties hernoemen" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "Verplaatsen naar bron" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Leeggemaakt door preprocessor
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "Invoegbestanden ontleden" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "Actueel bestand ontleden" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "duchain voor %1 niet bijwerken" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "Bouwen gebruikt" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Klaar" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "Bestand was recursief ingevoegd vanuit zichzelf: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "Ingevoegd bestand is niet gevonden: %1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"Gezocht in invoegpad:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "Kon het bestand '%1' niet openen" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "Bestand kon niet worden gelezen." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "Bestand kon niet worden geopend." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "Toegangsrechten van bestand voorkomen het openen voor lezen" + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Navigatie" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Code" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Freek de Kruijf" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "f.de.kruijf@gmail.com" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "C++ opties" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Exporteren:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Macro:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Publiek" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Beveiligd" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Privaat" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "Slot" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Signal" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Opslagmap" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"Het aangepaste invoegpad zal worden opgeslagen in een speciaal bestand " +"genaamd \".kdev_include_paths\" in een bronmap. Het aangepaste pad zal " +"worden gebruikt voor alle bestanden onder die map." + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Opslagmap:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Automatische resolutie" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"Als uw project eenvoudige Makefiles gebruikt, dan is het mogelijk om " +"automatisch de invoegpaden op te lossen met behulp van de make-utility. Stel " +"hiervoor hier een mapping in van een bron- naar een bouwmap." + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Broncodemap:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Bouw-map:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Aangepaste include-paden" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "U kunt hier een lijst van aangepaste include-paden toevoegen." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"Opmerking: Deze instelling heeft geen enkele invloed op de compiler of het " +"project, deze worden alleen gebruikt om invoeg-headers in KDevelop te vinden." + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" +"Opties & instellingen om de private gegevensvelden van een klasse in een " +"private structuur te plaatsen" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "Naam private structuur:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Opties" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

Standaard worden private " +"implementatie-structuren gedeclareerd als struct met standaard publieke toegang.

\n" +"

Activeer dit vakje als u " +"de private implementatie-structuur gedeclareerd wil hebben als class met publieke toegang.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Gebruik class in plaats van struct" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

Verplaats elke huidige " +"variabelen die geïnitialiseerd worden in de constructor-initializer-list " +"naar de constructor-initializer-list van de private implementatie-structuur." +"

\n" +"

\n" +"

Note: Alle referenties en variabelen " +"met typen die geen standaard constructors bieden worden verplaatst ongeacht " +"de status van deze optie.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "Verplaats variabele-initialisatie naar private structuur" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" +"Verplaats alle huidige gedeclareerde private methoden naar de private " +"implementatie-structuur." + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "Verplaats private methoden" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Pointer-naam:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "" +"De naam van de lid-variabele die de pointer bevat naar de private " +"implementatie" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nl/kdevcustommake.po kdevelop-4.0.1/po/nl/kdevcustommake.po --- kdevelop-3.9.98/po/nl/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nl/kdevcustommake.po 2010-07-17 20:11:55.000000000 +0100 @@ -0,0 +1,51 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Kristof Bal , 2008. +# Freek de Kruijf , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-05-30 13:14+0200\n" +"Last-Translator: Freek de Kruijf \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Beheerder voor aangepaste makefile" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Ondersteuning voor het beheren van aangepaste makefile-projecten" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Uitvoeren" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Freek de Kruijf" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "f.de.kruijf@gmail.com" + + + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nl/kdevelop.po kdevelop-4.0.1/po/nl/kdevelop.po --- kdevelop-3.9.98/po/nl/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nl/kdevelop.po 2010-07-17 20:11:55.000000000 +0100 @@ -0,0 +1,2559 @@ +# translation of kdevelop.po to Dutch +# translation of kdevelop.po to +# translation of kdevelop.po to +# translation of kdevelop.po to +# translation of kdevelop.po to +# translation of kdevelop.po to +# PO bestand voor KDevelop +# Copyright (C) 2000,2001, 2002, 2003, 2004 KDE e.v. +# Otto Bruggeman , 2000-2002. +# Rinse de Vries , 2000, 2001, 2002, 2003, 2004. +# R.F. Pels , 2004. +# Bram Schoenmakers , 2004, 2005. +# Tom Albers , 2004, 2005. +# Tom Albers , 2004. +# Rinse de Vries , 2004, 2005, 2006, 2007. +# Kristof Bal , 2008, 2009. +# Freek de Kruijf , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-04 12:24+0200\n" +"Last-Translator: Freek de Kruijf \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Code" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "KDevelop4-projectbestanden" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "De KDevelop geïntegreerde ontwikkelomgeving" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "Copyright 1999-2010, de ontwikkelaars van KDevelop" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "Maak een sessie aan met de gegeven naam." + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "Te laden sessie. U kunt de hash geven of de naam van de sessie." + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "Toon beschikbare sessies en sluit af" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" +"Beschikbare sessies (gebruik '-s HASH' of '-s NAAM' om een specifieke te " +"openen):" + +#: main.cpp:79 +msgid "Hash" +msgstr "Hash" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "Naam geopende projecten" + +#: main.cpp:88 +msgid "[running]" +msgstr "[actief]" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "Specificeer het binaire programma dat u wilt debuggen." + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "Debug" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "" +"Een sessie met de naam %1 bestaat al. Gebruik de -s switch om het te openen." + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"Kan de onbekende sessie %1 niet openen. Zie de --sessions switch voor " +"beschikbare sessies of gebruik -cs om een nieuwe aan te maken." + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "Sessie %1 draait al." + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"Kan KDevelop niet starten, het uitvoerbare programma kdevelop.bin ontbreekt " +"in %1. Repareer de installatie van KDevelop." + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Onderhouder, Architectuur, VCS-ondersteuning, Projectbeheer, QMake " +"projectbeheerder" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Architectuur, sublieme interface, ondersteuning voor Ruby" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Volgorde van het gebruik van definities, C++ ondersteuning, Code-navigatie, " +"Code-aanvulling, Hulp bij coderen, Refactoring" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "Ondersteuning voor CMake, uitvoeren en Kross" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "GDB-integratie" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Teksverwerker-integratie, defenitie gebruikersketting" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "Website admin, API documentatie, patches voor Doxygen en autoproject" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "GDB integratie, plugins voor webontwikkeling" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "Generieke manager, plugins voor webontwikkeling" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "Ondersteuning voor astyle en indent" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "Distributed VCS, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "KnipselPart, debugger en bruikbaarheidspatches" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "Subversion-plugin, Custom Make Manager, Algemene verbeteringen" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "" +"Overdracht naar QT 3, patches, ondersteuning voor valgrind, diff en perforce" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "C++ parser" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "Auteurs van KWrite" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Kate's tekstinvoercomponent" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Designer-code" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Bijgedragen aan oudere versies:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "De auteurs van KHTML" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "Component voor HTML-documentatie" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "Oorspronkelijk idee, basisarchitectuur, veel oorspronkelijke code" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, bugreparaties" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Ondersteuning voor Java en Objective C" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Debugger-frontend" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "PHP-ondersteuning, contextmenu's" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "KDE-toepassingsjablonen" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Dist-component, bash-ondersteuning, toepassingsjablonen" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "diverse componenten, htdig-indexering" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Ondersteuning bij de Automake-manager en persistente klasseopslag" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Ondersteuning voor de KPart-infrastructuur" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Ada-ondersteuning" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "QMake-projectmanager" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "MDI-modi, QEditor, bugreparaties" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "PartExplorer, herontwerpen van CvsPart, patches, bugs(reparaties)" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Vervang-, bladwijzer-, bestandenlijst- en CTags2-plugins. Algehele " +"verbeteringen en patches" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Filecreate-component en andere bits en patches" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "Ondersteuning voor ClearCase" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Ondersteuning voor Ruby" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Fortran-documentatie" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Hulpprogramma voor Python-documentatie" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Doxygen-assistent" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Bestandsselectie-component" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "C++-codeaanvulling, persistente klasseopslag" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Patches" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Hulp bij Perl-ondersteuning" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Indexweergave voor de documentatie" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Documentatiezoeker, qmake projectbeheerder patches, " +"bruikbaarheidsverbeteringen, bugfixes... " + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "Patches voor QMake-projectmanager" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "" +"Code-opschoning en bugreparaties voor qEditor, AutoMake en nog veel meer" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Grafisch materiaal voor Ruby" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "URL-adres naar te laden project" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Bestanden om te laden" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" +"Start de debugger, bijvoorbeeld gdb. Het binaire programma dat gedebugd moet " +"worden volgt - inclusief argumenten." + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (met gebruik van KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "Kan het natuurlijke configuratietype voor starten niet vinden" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "Kan het startprogramma %1 niet vinden" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "Kan %1 niet openen" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "&Bestand" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "Be&werken" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "Ge&avanceerd" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "Beel&d" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "&Code-invouwing" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "H&ulpmiddelen" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "Woordaanvulling" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "&Instellingen" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Hoofdwerkbalk" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "Sessie" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Project" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "Uitvoeren" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Navigatie" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Bestand" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "B&ewerken" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "Bewerker" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Code" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Venster" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Instellingen" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Rinse de Vries,Ruurd F. Pels,Bram Schoenmakers" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "rinsedevries@kde.nl,ruurdpels@kde.nl,bramschoenmakers@kde.nl" + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nl/kdevformatters.po kdevelop-4.0.1/po/nl/kdevformatters.po --- kdevelop-3.9.98/po/nl/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nl/kdevformatters.po 2010-07-17 20:11:55.000000000 +0100 @@ -0,0 +1,471 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Kristof Bal , 2008. +# Freek de Kruijf , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-06-01 16:46+0200\n" +"Last-Translator: Freek de Kruijf \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "Astyle formatteerprogramma" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "Een formatteerprogramma met gebruik van astyle " + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Artistic Style is een programma voor het indenteren, formatteren en " +"mooier maken van broncode voor de C, C++, C# en Java programmeertalen.
Homepagina: http://astyle." +"sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Indenteringsformattering" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "Een formatteerprogramma met behulp van indent" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"Indenteer en formatteer C programmabroncode.
Het `indent' " +"programma kan worden gebruikt om code gemakkelijker leesbaar te maken. Het " +"kan ook van de ene stijl van het schrijven van C naar een andere converteren." +"
indent begrijpt een groot deel van de syntax van C, maar het " +"probeert ook te werken met incomplete en misvormde syntax.
Homepagina: " +"http://www.gnu.org/software/" +"indent/" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Inspringmethode" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Tabbladen" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Tabs forceren" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Spaties" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"Aantal spaties die naar een tab geconverteerd worden.\n" +"Het aantal spaties per tab wordt in de editor ingesteld." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Converteer tabs naar spaties." + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Con&verteer tabs naar spaties" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "Vul de lege regels met de witruimte van de voorgaande regels." + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "Lege regels v&ullen" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Inspringen" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Blokken" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Vierkante haakjes" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "Cases" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Klasse" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Labels" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Naamruimtes" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Aanwijzingen voor preprocessor" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "Schakelaars" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"In een doorlopend statement maximaal # spaties inspringen\n" +" ten opzichte van de voorgaande regel." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Minimaal # spaties inspringen in een doorlopende voorwaarde\n" +"die bij een conditionele header behoort." + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Minimum in conditionele expressie:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "Huidige verdubbelen" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Maximum in statement:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Overig" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Type" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Lijnafbreking voor afsluitende headers (bv. voor 'else', 'catch', ...)\n" +"van hun direct voorafgaande sluithaakjes." + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "Lijnafbre&king voor afsluitende headers" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "Geen wijziging" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Bijvoegen" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Pauze" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Ongerelateerde blokken, labels, klassen,... door lege regels scheiden\n" +"Bekende problemen:\n" +"\n" +"1. Wanneer een statement niet deel van een blok is, dan worden\n" +"alle volgende statements door een lege regel gescheiden.\n" +"Statements , die bij een blok behoren, worden op de juiste manier\n" +"geformatteerd.\n" +"\n" +"2. Commentaren worden van het blok gescheiden.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "&Blokken opdelen" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Het zelfde als --blokken opdelen, met het verschil dat bij\n" +"eindstatements (zoals 'else', 'catch', ...) ook een lege regel\n" +"toegevoegd wordt.\n" +"\n" +"Bekende problemen:\n" +"\n" +"1. Wanneer een statement niet deel van een blok is, dan worden\n" +"alle volgende statements door een lege regel gescheiden.\n" +"Statements , die bij een blok behoren, worden op de juiste manier\n" +"geformatteerd.\n" +"\n" +"2. Commentaren worden van het blok gescheiden.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "Alle bl&okken opdelen" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "Deel 'else if()' statements op in twee regels." + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "I&f-else opdelen" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Opvulling" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Vul haakjes op" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Haal opvulling weg" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "Alleen binnen" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "Alleen buiten" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "Binnen en buiten" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Voor en na de operatoren spaties toevoegen.\n" +"Dit toevoegen kan niet ongedaan gemaakt worden." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "Operatoren met sp&aties omvatten" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "One Liners" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" +"Regels, die meerdere statements bevatten, niet opdelen\n" +"in separate regels." + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "Eenregelige &statements behouden" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "Geen blokken opdelen die op volledig op één regel zich bevinden." + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "Eenregelige b&lokken behouden" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Freek de Kruijf" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "f.de.kruijf@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nl/kdevgdb.po kdevelop-4.0.1/po/nl/kdevgdb.po --- kdevelop-3.9.98/po/nl/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nl/kdevgdb.po 2010-07-17 20:11:55.000000000 +0100 @@ -0,0 +1,1443 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Kristof Bal , 2008. +# Freek de Kruijf , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcppdebugger\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-06-04 11:50+0200\n" +"Last-Translator: Freek de Kruijf \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "Bewaking" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "Recent" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
Oude waarde: %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
Nieuwe waarde: %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "Ondersteuning voor GDB" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Ondersteuning voor het uitvoeren van applicaties in GDB" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Disassembleren" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Core-bestand onderzoeken..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Core-bestand onderzoeken" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"Core-bestand onderzoeken

Dit laadt een core-bestand, die na een " +"programma-crash aangemaakt wordt, bijv. na een segmentatiefout. Het core-" +"bestand bevat een beeld van het programmageheugen op het moment dat het " +"programma gecrashed is, zodat u een post-mortem-analyse kunt uitvoeren.

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "Aan proces hechten" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "Aan proces hechten..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "" +"Aan proces hechten

Hecht de debugger aan een actief proces.

" + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "Evalueren: %1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "" +"Expressie evalueren

Toont de waarde van de expressie onder de " +"cursor.

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "Watch: %1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Expressie volgen

Voegt de expressie onder de cursor toe aan de " +"variabelen-/observeerlijst.

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Voer hier de naam van het te onderzoeken Core-bestand in..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "Code-bestand %1 wordt onderzocht" + +#: debuggerplugin.cpp:372 +msgid "Debug core file" +msgstr "Core-bestand debuggen" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "Kies een proces dat aan de debugger zal worden gehecht..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "Niet aan proces %1 hechten: kan de debugger niet aan zichzelf hechten." + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "Aan proces %1 hechten" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "Proces %1 debuggen" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Debugger" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"Geen omgevingsgroup gespecificeerd, lijkt op een gebroken configuratie, " +"controleer de uitvoeringsconfiguratie '%1'. Met gebruik van de standaard " +"omgevingsgroep." + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "Debugger is gestopt" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "Toepassing onderbroken" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "Proces is geëindigd" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "De toepassing is actief" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "De toepassing is gepauzeerd" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"GDB is onverwacht geëindigd

Dit is waarschijnlijk een bug in GDB. " +"Bekijk de gdb-uitvoer en stop vervolgens de debugger" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "GDB onverwacht geëindigd" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "" +"Gdb-commando gegeven terwijl de debugger niet loopt
Het commando " +"was:
%1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Interne fout" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Ongeldige debugger-commando
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "Ongeldige debugger-commando" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "Normaal beëindigd" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "Beëindigd met signaal %1" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "Het programma heeft het signaal %1 (%2) ontvangen" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "Programma aan het uitvoeren" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"gdb kan de apparaatbestanden tty* of pty* niet gebruiken.\n" +"Controleer de instellingen voor /dev/tty* en /dev/pty*\n" +"\n" +"Mogelijk dient u als root de opdracht \"chmod ug+rw\" voor de " +"apparaatbestanden /dev/tty* en /dev/pty* uit te voeren en/of de gebruiker " +"aan de tty-groep toe te voegen met het commando \"usermod -G tty " +"gebruikersnaam\"." + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Waarschuwing" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "Debuggerfout

De debugger melde de volgende fout:

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Debuggerfout" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "1 commando in wachtrij\n" +msgstr[1] "%1 commando's in wachtrij\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "1 commando dat uitgevoerd wordt door gdb\n" +msgstr[1] "%1 commando's die uitgevoerd worden door gdb\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "Debuggerstatus: %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"Huidige commando-klasse: '%1'\n" +"Huidige commando-tekst: '%2'\n" +"Huidige commando originele tekst: '%3'\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "Debuggerstatus" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "U hebt gdb 7.0.0 of hoger nodig.
U gebruikt: %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "gdb-fout" + +#: debugsession.cpp:1417 +msgid "Could not start debugger:
" +msgstr "Kon debugger niet starten:
" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "Opstart-fout" + +#: debugsession.cpp:1429 +msgid "Could not attach debugger:
" +msgstr "Kon debugger niet aanhechten:
" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"Assemblerweergave

Een weergave van de machinecode van het momenteel " +"lopende programma. De huidige instructie is gemarkeerd. U kunt de " +"instructies stapsgewijs doorlopen met behulp van de knoppen \"Overspringen\" " +"en \"Inspringen\" op de werkbalk van de debugger." + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Disassembleerweergave" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Adres" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Functie" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Offset" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Instructie" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "De debugger '%1' is niet gevonden." + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "De debugger is niet gevonden" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" +"

De component debugger kwam terecht in een interne fout bij het verwerken " +"van een antwoord van gdb. Gaarne een bug-report indienen." + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"De uitzondering is: %1\n" +"Het antwoord van MI is: %2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Interne debuggerfout" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" +"Kon debugger niet uitvoeren.

Kon '%1' niet uitvoeren. Controleer of " +"het pad correct is opgegeven." + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "Kon debugger niet starten" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "GDB-instellingen" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "Een natuurlijke applicatie uitvoeren in GDB" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "GDB-uitvoer" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"GDB-uitvoer

Toont alle uitgevoerde gdb-commando's. U kunt ook elk " +"ander gdb-commando aanroepen tijdens het debuggen.

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "&GDB-commando:" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "" +"De uitvoering van de toepassing wordt aangehouden zodat u een GDB-commando " +"kunt invoeren" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Toon interne commando's" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"Bestuurt of commando's, intern uitgevoerd door KDevelop, getoond zullen " +"worden of niet.
Deze optie beïnvloedt alleen toekomstige commando's, het " +"voegt geen eerder gegeven commando's toe of verwijdert deze uit de weergave." + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "Alles kopiëren" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Starten" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "Aantal" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "OK" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Annuleren" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Geheugenweergave" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (1 byte)" +msgstr[1] "%2 (%1 bytes)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Geheugenbereik wijzigen" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Herladen" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Deze weergave sluiten" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Speciale debuggerweergaven" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "Aan een proces hechten" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Core-bestand selecteren" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "KDevelop: toepassingsconsole debuggen" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Debuggerinstellingen" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Debugger programma:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "Gdb programma" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"Wanneer u \"gdb\" vanuit $PATH wilt starten dan laat u dit veld leeg. Om een " +"bepaalde versie van gdb te starten, bijvoorbeeld voor een andere " +"architectuur, dan geeft u hier de naam van het uitvoerbare bestand op. U " +"kunt ofwel gdb vanuit $PATH starten, maar met een andere naam (bv: \"arm-gdb" +"\"), door hier de naam op te geven of het volledige pad naar een andere gdb-" +"versie op te geven." + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "gdb starten in een speciale shell (vooral voor automake projecten)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"Wanneer u wilt dat gdb door een speciale shell of hulpprogramma gestart " +"wordt kunt u dat hier opgeven. De voornaamste toepassing hiervoor zijn " +"Automake gebaseerde projecten waarbij de eigenlijke toepassing een script is " +"en libtool nodig is om het binnen gdb uit te voeren." + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "Debugging-&shell:" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"Wanneer u wilt dat gdb door een speciale shell of hulpprogramma gestart " +"wordt kunt u dat hier opgeven. De voornaamste toepassing hiervoor zijn " +"Automake gebaseerde projecten waarbij de eigenlijke toepassing een script is " +"en libtool nodig is om het binnen gdb uit te voeren." + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Opties" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"Het tonen van statische members vertraagt \n" +"gdb in het produceren van data binnen KDE en Qt.\n" +"Het kan de \"signatuur\" van de data veranderen \n" +"waar QString en consorten op vertrouwen.\n" +"Maar als u deze waarden wilt debuggen dient u \n" +"deze optie te selecteren." + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Statische &members tonen" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"Bij het weergeven van gedisassembleerde code kunt\n" +"u de gecodeerde aanduidingen van de methoden\n" +"die door de compiler worden afgegeven laten weergeven.\n" +"De gedecodeerde aanduidingen zijn echter eenvoudiger om te lezen." + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "Gedecodeerde symboolaan&duidingen tonen" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"Als GDB een bibliotheek die geladen zal worden via \"dlopen\" niet heeft\n" +"gezien, dan weigert GDB om een breekpunt in die code te plaatsen.\n" +"Met deze optie zal GDB stoppen bij het laden van een bibliotheek en\n" +"zal dan de resterende breekpunten proberen te plaatsen. Lees de\n" +"documentatie voor meer details over dit gedrag.\n" +"\n" +"Activeer deze optie alleen wanneer u gebruik maakt van \"dlopen\"." + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "Probeer &breekpunten te zetten bij laden van bibliotheek" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"Hiermee kunt u gegevens in een terminal invoeren wanneer uw toepassing\n" +"gebruik maakt van terminalinvoercode (zoals cin, fgets, etc.).\n" +"Als u terminalinvoer gebruikt in uw toepassing, activeer dan deze optie.\n" +"Zo niet, laat deze optie gedeactiveerd." + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "Aparte &terminal voor toepassing-I/O activeren" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"Dit script is bedoeld voor de commando's die nodig zijn om verbinding te " +"maken met een uitvoerbaar bestand dat op afstand draait.\n" +"\tshell sleep 5\twacht totdat het programma op afstand is opgestart\n" +"\ttarget remote ...\tmaak verbinding met de debugger op afstand\n" +"\tcontinue\t[optional] voer debugging uit tot het eerste breekpunt" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "Debuggen op afstand" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "gdb-script &instellen:" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "gdb instel-script" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "Dit script wordt opgehaald door gdb wanneer het debuggen start." + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "Shell-script &uitvoeren:" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "Script om toepassing op afstand mee te starten" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"Dit shell-script wordt uitgevoerd nadat het Config-gdb-script is opgehaald " +"door gdb.\n" +"Bij het debuggen op afstand is dit script bedoeld om het proces op afstand " +"te starten.\n" +"[Er wordt vanuit gegaan dat het debug-programma kan worden bereikt op het " +"doel, mogelijk door het te downloaden als een finale bouwstap]\n" +"1) Zoek een manier om het commando van op afstand uit te voeren - rsh, ssh, " +"telnet, ...\n" +"2a) Start \"gdbserver ... toepassing\" op het doel.\n" +"Of als uw uitvoerbare bestand de gdb-stub bevat\n" +"2b)Voer \"toepassing\" uit op het doel." + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "&gdb-script uitvoeren:" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "Script om verbinding te maken met toepassing op afstand" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"Dit script wordt opgehaald door gdb nadat de twee voorgaande scripts " +"uitgevoerd zijn.\n" +"Dit script is bedoeld voor de commando's die nodig zijn om verbinding te " +"maken met een uitvoerbaar bestand dat op afstand draait.\n" +"\tshell sleep 5\twacht totdat het programma op afstand is opgestart\n" +"\ttarget remote ...\tmaak verbinding met de debugger op afstand\n" +"\tcontinue\t[optional] voer debugging uit tot het eerste breekpunt." + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "Traceer-instellingen" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"Tracering inschakelen\n" +"

Tracering is een mechanisme om automatisch waarden af te drukken van de " +"gekozen expressies en met uitvoeren door te gaan wanneer het breekpunt is " +"bereikt. Het is alsof het een printf-debugging doet die geen wijziging van " +"de broncode vereist.

" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Traceren activeren" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "Eigen formaat" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"Aangepaste formatteringstekens\n" +"

Specificeer C-stijl formatteringstekens die zullen worden gebruikt bij " +"het tonen van de gekozen expressie. Bijvoorbeeld:\n" +"

Traceringspunt 1: g = %d

\n" +"Als aangepaste formatteringstekens niet is ingeschakeld, zullen namen en " +"waarden van alle expressies worden getoond, met \"%d\" als " +"formatteringsspecificatie." + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "Af te drukken expressie:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Uitvoeren" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Debuggerwerkbalk" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Uitvoerbaar bestand:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Core-bestand:" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Freek de Kruijf" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "f.de.kruijf@gmail.com" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nl/kdevmakebuilder.po kdevelop-4.0.1/po/nl/kdevmakebuilder.po --- kdevelop-3.9.98/po/nl/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nl/kdevmakebuilder.po 2010-07-17 20:11:55.000000000 +0100 @@ -0,0 +1,167 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Kristof Bal , 2008. +# Freek de Kruijf , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-06-07 17:40+0200\n" +"Last-Translator: Freek de Kruijf \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Make-bouwer" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Ondersteuning voor aanmaken van Make-projecten" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Ongeldige bouw-map '%1'" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "Kon bouw-commando voor doel '%1' niet aanmaken" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "Taak mislukt" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Mislukt ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Voltooid ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** Afgebroken. ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "compileren" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "genereren" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "linken" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "bouwt" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "installeren" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "aanmaken" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Beeld" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Afbreken bij de eerste fout:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Commando's tonen, maar ze niet uitvoeren:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Als root installeren:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Installatie-commando om als root te installeren:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Aantal parallelle taken:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Uitvoerbaar bestand maken:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Standaard make-doel:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Aanvullende make-opties:" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Actief omgevingsrofiel:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Freek de Kruijf" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "f.de.kruijf@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/nl/kdevqthelp.po kdevelop-4.0.1/po/nl/kdevqthelp.po --- kdevelop-3.9.98/po/nl/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/nl/kdevqthelp.po 2010-07-17 20:11:55.000000000 +0100 @@ -0,0 +1,69 @@ +# translation of kdevqthelp.po to Dutch +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Freek de Kruijf , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-06-07 17:59+0200\n" +"Last-Translator: Freek de Kruijf \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "Kon geen documentation voor '%1' vinden" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "QtHelp Home-pagina" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Kijk in de Qt Help documentatie" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Freek de Kruijf" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "f.de.kruijf@gnmail.com" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "Te zoeken identifier:" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "Help-pagina:" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "over:leeg" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "Debuginformatie:" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt/CMakeLists.txt kdevelop-4.0.1/po/pt/CMakeLists.txt --- kdevelop-3.9.98/po/pt/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt/CMakeLists.txt 2010-07-17 20:12:22.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(pt ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/pt/kdevcmakebuilder.po kdevelop-4.0.1/po/pt/kdevcmakebuilder.po --- kdevelop-3.9.98/po/pt/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt/kdevcmakebuilder.po 2010-07-17 20:12:22.000000000 +0100 @@ -0,0 +1,94 @@ +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-01-23 14:37+0000\n" +"Last-Translator: José Nuno Coelho Pires \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-SpellExtra: CMake\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "Construtor do CMake" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Suporte para a compilação dos projectos de CMake" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "" +"Não está configurada nenhuma pasta de compilação; esta não poderá ser " +"executada" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "A interromper a compilação" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "" +"Não está configurada nenhuma pasta de compilação; não se pode limpar o " +"projecto" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "A interromper a limpeza" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "" +"Não está configurada nenhuma pasta de compilação; não é possível instalar" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "A interromper a instalação" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "" +"Não está configurada nenhuma pasta de compilação; não é possível configurar" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "A interromper a configuração" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "" +"Não está configurada nenhuma pasta de compilação; não é possível limpar esta " +"pasta" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "Não é possível limpar a pasta de compilação" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "A tarefa foi mal-sucedida" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "Executável do CMake:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "José Nuno Pires" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "zepires@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt/kdevcmake.po kdevelop-4.0.1/po/pt/kdevcmake.po --- kdevelop-3.9.98/po/pt/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt/kdevcmake.po 2010-07-17 20:12:22.000000000 +0100 @@ -0,0 +1,461 @@ +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-05-18 10:38+0100\n" +"Last-Translator: José Nuno Coelho Pires \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-SpellExtra: TextLabel RelWithDebInfo KDevelop cmake MinSizeRel\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-POFile-SpellExtra: CMakeLists CMake txt pre kapp space app AUTHOR wrap\n" +"X-POFile-SpellExtra: white Macro\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "Documentação do CMake" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Suporte para a documentação do CMake" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Valor em 'Cache': %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Documentação em 'Cache': %1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "Comandos" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Variável" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "Módulo" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "Propriedade" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "Política" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "Página de Conteúdo do CMake" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "O '%1' é um comando desactualizado e não deverá ser usado" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Função não terminada. " + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Nome" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Tipo" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Valor" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Comentário" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Avançado" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"A pasta %1 está prestes a ser removida da lista do KDevelop.\n" +"Deseja que o KDevelop a remova também do sistema de ficheiros?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "Não foi possível remover: %1.\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "&Mudar de Cores" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "Geral" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "Este projecto tem um dia" +msgstr[1] "Este projecto tem %1 dias" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "A configuração mudou" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "Uma Aplicação do KDE 4" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "(C) 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "O documento a abrir" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Configurar uma pasta de compilação" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "Configurar uma pasta de compilação para %1" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "Tem de seleccionar um executável do 'cmake'." + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "Tem de indicar uma pasta de compilação." + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "A usar uma pasta de compilação já criada." + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "A criar uma nova pasta de compilação." + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "A pasta de compilação já foi configurada." + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "Esta pasta de compilação é para o %1, mas a pasta do projecto é a %2." + +#: cmakebuilddirchooser.cpp:172 +msgid "You may not select a relative build directory." +msgstr "Não poderá seleccionar nenhuma pasta de compilação relativa." + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "A pasta de compilação seleccionada não está vazia." + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "Gestor do CMake" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Suporte para a gestão dos projectos do CMake" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Saltar para a definição do alvo" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Criar uma pasta chamada '%1'." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop - Suporte ao CMake" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "Não foi possível criar o ficheiro CMakeLists.txt desta pasta." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "Não foi possível gravar as alterações." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Remover uma pasta chamada '%1'." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Remover um ficheiro chamado '%1'." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Adicionar um ficheiro '%1' ao alvo '%2'." + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "Não é possível gravar a alteração." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "Mudar o nome de uma pasta chamada '%1'." + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "A pasta de compilação não existia e não pôde ser criada." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Erro ao criar a pasta de compilação" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "INVÁLIDO" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Comando" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Macro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Localização" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "E&xecutável do CMake:" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "&Pasta de Compilação:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "Prefixo de &Instalação:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "&Tipo de compilação:" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"O KDevelop encontrou diferentes raizes para o seu projecto; seleccione por " +"favor a correcta." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "José Nuno Pires" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "zepires@gmail.com" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "&Mover" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Adicionar" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Remover" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Criar uma 'Cache' de Valores" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Comentário:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Mostrar o Avançado" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "Pasta do CMake" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Mostrar os Valores Avançados" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "olá, mundo" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Cor de fundo:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Escolher uma nova cor de fundo" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Mude a cor de fundo, carregando aqui e escolhendo a nova " +"cor na janela de cores.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Idade do projecto:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Cor principal:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Escolher uma nova cor principal" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Mude a cor principal, carregando aqui e escolhendo a nova " +"cor na janela de cores.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Definir a idade do projecto (em dias)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "" +"Modificar a idade do projecto (em dias), definindo um novo número de dias." \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt/kdevcpp.po kdevelop-4.0.1/po/pt/kdevcpp.po --- kdevelop-3.9.98/po/pt/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt/kdevcpp.po 2010-07-17 20:12:22.000000000 +0100 @@ -0,0 +1,922 @@ +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-02 15:47+0100\n" +"Last-Translator: José Nuno Coelho Pires \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-SpellExtra: Macro make APPNAME CMake Hamish Rodda else endif\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-POFile-SpellExtra: reimplementações factorização if kdevincludepaths\n" +"X-POFile-SpellExtra: KDevelop Makefiles pre struct space wrap white class\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "Não Incluídos" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Inicializar" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Contentor Não Incluído" + +#: codecompletion/context.cpp:1272 +#, kde-format +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "mais %1 sobreposição de %2" +msgstr[1] "mais %1 sobreposições de %2" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "Ligar a %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Sinais/'Slots'" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "Substituto Virtual" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Função de Implementação" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "Incorporado do C++" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Substituto" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Implementação" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Criar um 'Slot'" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "De %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Adicionar a directiva de inclusão" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Adicionar uma Declaração Posterior" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "declaração posterior" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "Opções de Implementação da Classe Privada" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Cancelar" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "Actualizar a Definição de %1(%2) para (%3)" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Não foi possível aplicar as alterações: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"A factorização é uma funcionalidade experimental; poderá danificar o seu " +"código. Antes de a usar, certifique-se que cria uma cópia de segurança." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "Mudar o nome a %1" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "Criar uma definição separada para o %1" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Criar uma Classe" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "Não existe nenhuma declaração sob o cursor" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "Não está disponível nenhum ficheiro de código para o %1." + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "Não foi possível actualizar a cadeia de definição-uso de %1." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "Não é possível criar uma definição para esta declaração." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "A inserção foi mal-sucedida" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "A aplicação das alterações foi mal-sucedida" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "Não existe nenhum documento para o %1" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "A declaração perdeu-se na actualização" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "A declaração encontra-se no ficheiro sem permissões de escrita %1." + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "Novo nome:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Mudar o Nome" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Nota: Todas as funções, reimplementações, declarações posteriores, etc. irão " +"também mudar de nome" + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Utilizações" + +#: codegen/simplerefactoring.cpp:445 +msgid "Declaration Info" +msgstr "Informação da Declaração" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "A mudar o nome de \"%1\" para \"%2\"" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "A aplicação das alterações foi mal-sucedida: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Configurar os Locais de Inclusões Personalizados" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "" +"Não foi possível gravar os locais de inclusão personalizados na pasta: %1" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Adicionar um Local de Inclusão" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Abrir um Projecto" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "Não Encontrado: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "Não seleccionou nada, como tal será nada adicionado ao alvo." + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "" +"Não foi possível resolver a classe de base, a adicioná-la de forma " +"indirecta: %1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "A classe de base é inválida: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Criar uma declaração local %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "Declarar o %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "Declaração não encontrada: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Incluídos" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Incluídos por" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Macros definidas" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Macro de função" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Macro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "Conteúdo pré-processado:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "Conteúdo:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "" +"O gestor de compilações do projecto %1 não devolveu nenhuma pasta de " +"compilação" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"A resolução dos locais de inclusão necessita da pasta de compilação para " +"resolver os locais adicionais. Pense em configurar a pasta de compilação no " +"gestor de projectos, caso não o tenha já feito." + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "O gestor de compilações não devolveu nenhum local de inclusão" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"O gestor de compilações não devolveu o local de inclusão %1, que foi " +"resolvida pelo módulo de resolução de locais de inclusão" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Resolução do local de inclusão: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Pasta de compilação usada: \"%1\"\n" +"Resolução dos locais de inclusão: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" +"Tentou-se uma resolução de pastas de inclusão, estando outro processo de " +"resolução em funcionamento" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "Falta uma Makefile na pasta \"%1\"" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "Ocorreram problemas ao tentar resolver as pastas de inclusão do %1" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "Em 'cache': %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "O nome do ficheiro %1 parece ser inválido" + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "Não foi possível extrair a nova pasta de trabalho" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "O resultado foi: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "A chamada recursiva do 'make' falhou" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "" +"O texto do parâmetro \"%1\" não parece ser válido. O resultado foi: %2." + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "A pasta \"%1\" não existe. O resultado foi: %2." + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "A chamada recursiva do 'make' falhou" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "Não é possível extrair os locais de inclusão do resultado do 'make'" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Pasta: \"%1\" Comando: \"%2\" Resultado: \"%3\"" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "Gerador de ficheiros de inclusão encaminhados para o KDE" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "" +"Uma aplicação que cria ficheiros de inclusão de encaminhamento (como os do " +"Qt) a partir do código-fonte." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "(c) 2006, Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"Pasta de inclusão do KDE - os ficheiros de inclusão vão para " +"inclusão/KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Criar a informação a partir do gerador de XML do CMake" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "Instrução #if não terminada" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "carácter %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "esperava-se um \"identificador\" mas foi encontrado: %1" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
Texto do item
%1
Entrada
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "esperava-se um \")\", mas foi encontrado %1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "Divisão por zero" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Texto de entrada: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "esperava-se um ``:'' = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else sem #if" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "#endif sem #if na linha %1 do resultado" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Erro da macro" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "A invocação da macro %1 não tem o número de argumentos %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Formais: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "entrada inválida: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "Este ficheiro importa o documento aberto actualmente
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "No local de inclusão %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Incluídos através de %1
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Pasta %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "No %1o local de inclusão" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Inclusões" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Local de Inclusões" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "Incluídos" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "Suporte para C++" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "Suporte para a Linguagem C++" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "Ficheiros" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "M&udar para a Definição/Declaração" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "Criar uma &Nova Classe" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Mudar o Nome da Declaração" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "Mover para o Código" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Esvaziado pelo pré-processador
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "A processar os ficheiros incluídos" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "A processar o ficheiro actual" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "A não actualizar a cadeia de definição-uso de %1" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "Utilizações da compilação" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Pronto" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "O ficheiro foi incluído de forma recursiva a partir de si próprio: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "O ficheiro incluído não foi encontrado: %1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"Local de inclusão pesquisado:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "Não foi possível aceder ao ficheiro '%1'" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "Não foi possível ler o ficheiro." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "Não foi possível aceder ao ficheiro." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "As permissões do ficheiro impedem o seu acesso para leitura." + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Navegação" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Código" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "José Nuno Pires" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "zepires@gmail.com" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "Opções de C++" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Exportar:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Macro:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Pública" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Protegida" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Privada" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "'Slot'" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Sinal" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Pasta de Armazenamento" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"O local de inclusão personalizado será guardado num ficheiro especial " +"chamado \".kdev_include_paths\", estando este numa pasta de código. O local " +"personalizado será usado para todos os ficheiros abaixo dessa pasta." + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Pasta de Armazenamento:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Resolução Automática" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"Se o seu projecto usar Makefiles simples, será possível resolver " +"automaticamente os locais de inclusão com o utilitário 'make'. Para tal, " +"defina um mapeamento entre uma pasta de código e uma de compilação." + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Pasta de Origem:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Pasta de Compilação:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Locais de Inclusão Personalizados" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "Poderá adicionar aqui uma lista de locais de inclusão personalizados." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"Nota: Esta configuração não afecta o compilador ou o projecto de nenhuma " +"forma; só são usados para encontrar os ficheiros de inclusão no KDevelop." + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" +"Opções e configurações para mover os campos de dados privados de uma classe " +"para uma estrutura privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "Nome da estrutura privada:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Opções" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

Por omissão, as estruturas " +"de implementação privadas são declaradas como struct (estruturas) para ter um acesso público por omissão." +"

\n" +"

Assinale esta opção se " +"desejar que a estrutura de implementação privada seja declarada como class (classe) com acesso público.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Usar uma classe em vez de uma estrutura" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

Mover todas as variáveis " +"actuais que estão inicializadas na lista de inicializações do construtor " +"para a lista de inicialização do construtor da estrutura de implementação " +"privada.

\n" +"

\n" +"

Nota: Todas as referências e variáveis " +"com tipos que não ofereçam construtores por omissão serão movidos, " +"independentemente do estado desta opção.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "Mover a inicialização das variáveis para uma estrutura privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" +"Mover todos os métodos privados actuais para a estrutura de implementação " +"privada." + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "Mover os métodos privados" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Nome do ponteiro:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "" +"O nome da variável-membro que será o ponteiro para a implementação privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt/kdevcustommake.po kdevelop-4.0.1/po/pt/kdevcustommake.po --- kdevelop-3.9.98/po/pt/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt/kdevcustommake.po 2010-07-17 20:12:22.000000000 +0100 @@ -0,0 +1,38 @@ +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2008-11-27 01:48+0000\n" +"Last-Translator: José Nuno Coelho Pires \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-SpellExtra: make Makefiles\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Gestor de Makefiles Personalizadas" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Suporte para a gestão dos projectos de Makefiles personalizadas" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Executar" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "José Nuno Pires" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "zepires@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt/kdevelop.po kdevelop-4.0.1/po/pt/kdevelop.po --- kdevelop-3.9.98/po/pt/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt/kdevelop.po 2010-07-17 20:12:22.000000000 +0100 @@ -0,0 +1,855 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-02 15:46+0100\n" +"Last-Translator: Pedro Morais \n" +"Language-Team: pt \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-IgnoreConsistency: &Export:\n" +"X-POFile-IgnoreConsistency: A&nt\n" +"X-POFile-IgnoreConsistency: &Switches\n" +"X-POFile-IgnoreConsistency: Inline\n" +"X-POFile-IgnoreConsistency: S&ignal:\n" +"X-POFile-IgnoreConsistency: Open File\n" +"X-POFile-IgnoreConsistency: &Short\n" +"X-POFile-IgnoreConsistency: Sl&ot:\n" +"X-POFile-IgnoreConsistency: &Ant\n" +"X-POFile-IgnoreConsistency: &Tools Menu\n" +"X-POFile-IgnoreConsistency: &Source...\n" +"X-POFile-IgnoreConsistency: &Abstract\n" +"X-POFile-IgnoreConsistency: Edit Toolbar\n" +"X-POFile-IgnoreConsistency: Size\n" +"X-POFile-IgnoreConsistency: Point\n" +"X-POFile-IgnoreConsistency: ComboBox\n" +"X-POFile-IgnoreConsistency: Update\n" +"X-POFile-IgnoreConsistency: Color\n" +"X-POFile-IgnoreConsistency: String\n" +"X-POFile-IgnoreConsistency: Bool\n" +"X-POFile-IgnoreConsistency: union\n" +"X-POFile-IgnoreConsistency: Signal\n" +"X-POFile-IgnoreConsistency: Slot\n" +"X-POFile-IgnoreConsistency: package\n" +"X-POFile-IgnoreConsistency: set\n" +"X-POFile-IgnoreConsistency: Configure Options\n" +"X-POFile-IgnoreConsistency: Tools Menu\n" +"X-POFile-IgnoreConsistency: Light\n" +"X-POFile-IgnoreConsistency: Watch\n" +"X-POFile-IgnoreConsistency: replace\n" +"X-POFile-IgnoreConsistency: Parsing\n" +"X-POFile-IgnoreConsistency: Hits\n" +"X-POFile-SpellExtra: dist text Automake Signals gdb CPP htmerge pixmap\n" +"X-POFile-SpellExtra: typedef Designer const struct Autogen title DCF\n" +"X-POFile-SpellExtra: Distfiles ts desktop signals SOURCES tm extends\n" +"X-POFile-SpellExtra: NOMECLASSE Doxyfile Thread SnippetPart docs void db\n" +"X-POFile-SpellExtra: CHM MakeIndex namespaces moc dcopidl Distclean\n" +"X-POFile-SpellExtra: Desktop Environment name stderr dir Platinum pdflatex\n" +"X-POFile-SpellExtra: set DevHelp TRANSLATIONS doxytag DEF kcachegrind RTF\n" +"X-POFile-SpellExtra: Konsole subdirs automake LDADD QWidget Lex new astyle\n" +"X-POFile-SpellExtra: SCV KDEICON Info widget Doxygen install tags\n" +"X-POFile-SpellExtra: NovoModelo SUBDIRS free Corba reedit noinstHEADERS\n" +"X-POFile-SpellExtra: ALT doxygen oValor Nº am messages valgrind\n" +"X-POFile-SpellExtra: horizontalStretch Yacc Makefiles IDLs Make malloc\n" +"X-POFile-SpellExtra: qmake cd lupdate cw KCachegrind pageTitle KDevelop\n" +"X-POFile-SpellExtra: CLASSEBASE union htsearch verticalStretch usr po\n" +"X-POFile-SpellExtra: friend function autogen share JavaDoc calltree hh\n" +"X-POFile-SpellExtra: lrelease PalmDoc KDevDesigner info CDE Motif KDoc\n" +"X-POFile-SpellExtra: QMAKE Ant GDB ms CTags distclean Djvu TODOs delete\n" +"X-POFile-SpellExtra: doxysearch uic KChm stdout Classpath toolkit QMake\n" +"X-POFile-SpellExtra: ant KRegExp wordWrap QRegExp pthread htdig\n" +"X-POFile-SpellExtra: KDevelopTOC kdevelop lib make get namespace Calltree\n" +"X-POFile-SpellExtra: application sh Libtool build hxx config Man status\n" +"X-POFile-SpellExtra: subdirectories TextoBrilhante Signal kdesu konsole\n" +"X-POFile-SpellExtra: KDevDesignerPart libtool Common extern setX class Dot\n" +"X-POFile-SpellExtra: man KDev HHC Haskell wordwrap clean inline order dot\n" +"X-POFile-SpellExtra: Cabeçal RealceTexto Enter TextoBotão nomealvo\n" +"X-POFile-SpellExtra: constructor ftnchek annotationPart AnnotationPart\n" +"X-POFile-SpellExtra: printf tty GBA ca Fixme chmod Fic export dev pty\n" +"X-POFile-IgnoreConsistency: Remove Item\n" +"X-POFile-IgnoreConsistency: New Item\n" +"X-POFile-IgnoreConsistency: New Item\n" +"X-POFile-IgnoreConsistency: Move Item Down\n" +"X-POFile-IgnoreConsistency: Move Item Up\n" +"X-POFile-IgnoreConsistency: Add Item\n" +"X-POFile-IgnoreConsistency: New Subitem\n" +"X-POFile-IgnoreConsistency: New &Subitem\n" +"X-POFile-IgnoreConsistency: Down\n" +"X-POFile-IgnoreConsistency: Lower\n" +"X-POFile-IgnoreConsistency: &Restore\n" +"X-POFile-IgnoreConsistency: Target:\n" +"X-POFile-IgnoreConsistency: Headers\n" +"X-POFile-IgnoreConsistency: &Source\n" +"X-POFile-IgnoreConsistency: &Header\n" +"X-POFile-IgnoreConsistency: Header\n" +"X-POFile-IgnoreConsistency: Reset\n" +"X-POFile-IgnoreConsistency: Scaling\n" +"X-POFile-IgnoreConsistency: 0.1\n" +"X-POFile-SpellExtra: exuberant Eagle rw Assembly pcs Perforce ctags\n" +"X-POFile-SpellExtra: username Advance FIXME Indiqu APPNAME hw xSal Inline\n" +"X-POFile-SpellExtra: BASH kbuildsycoca Acessores APPNAMELC VisualBoy cpp\n" +"X-POFile-SpellExtra: ug usermod xSaI Re signal anális ht Grep\n" +"X-POFile-IgnoreConsistency: Never\n" +"X-POFile-IgnoreConsistency: Always\n" +"X-POFile-IgnoreConsistency: Forward\n" +"X-POFile-SpellExtra: AntigoEspacoNomes NovoEspacoNomes ps false STL Macro\n" +"X-POFile-SpellExtra: Act pri HTAGS Acti so VAR KatePlugin include true arm\n" +"X-POFile-SpellExtra: std GLIBCXXSTD cmake Matt Ian Gehrmann Andreas Harald\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-POFile-SpellExtra: KDevPrjSession Yann Jakob Hoelzer ANCELOT Kellogg\n" +"X-POFile-SpellExtra: Callgrind KParts KCacheGrind Willems KHTML Fernengel\n" +"X-POFile-SpellExtra: Brettschneider Abbrev Karavla Matthias Scalas release\n" +"X-POFile-SpellExtra: Kate Sandy Meier Dagerbo Rodda Marek Hamish Newell\n" +"X-POFile-SpellExtra: XMLGUI qEditor Sascha Dukju Zurheide QEditor\n" +"X-POFile-SpellExtra: Janukowicz Geiser bash debugfull CMake Yee Kluepfel\n" +"X-POFile-SpellExtra: Varotto Granroth Reinhart Memcheck org diff Dale\n" +"X-POFile-SpellExtra: Turino Pakulat van AST Ajay Koepfle Alexander Ka\n" +"X-POFile-SpellExtra: perforce Kurt Engelschalt Zoran Def Gläßer Dimitri\n" +"X-POFile-SpellExtra: Jens Rockey Caleb AutoMake Roeder Dymo Ahn Tennis\n" +"X-POFile-SpellExtra: Subversion Stephane Bernd KWrite gcc Rogers Heesch\n" +"X-POFile-SpellExtra: Cunz Mario Hausmann Birch KTabBar Gaarde Amilcar\n" +"X-POFile-SpellExtra: freedesktop Raggi ClearCase Gruber Guleria Moniot\n" +"X-POFile-SpellExtra: Hodique autoproject RelWithDebInfo MinSizeRel\n" +"X-POFile-IgnoreConsistency: debug\n" +"X-POFile-SpellExtra: TextLabel if endif else remote target gdbserver cin\n" +"X-POFile-SpellExtra: stub sleep QString fgets rsh post main optional\n" +"X-POFile-SpellExtra: mortem dlopen TTY Cachegrind Massif Hellgrind kdev\n" +"X-POFile-SpellExtra: StatusWidget QxRunner Helgrind Omega DRD Lackey\n" +"X-POFile-SpellExtra: QTestLib Git Enum qtest QTest QVERIFY QCOMPARE Falk\n" +"X-POFile-SpellExtra: DVCS Ancelot Decl catch break AStyle blocks xTest\n" +"X-POFile-SpellExtra: Style formatador indentador Artistic indent Indent\n" +"X-POFile-SpellExtra: Astyle grep CppUnit Instrumentalizadas GCOV GCov SLOC\n" +"X-POFile-SpellExtra: factorização reimplementações CMakeLists txt vs\n" +"X-POFile-SpellExtra: qEdit Htdig CvsPart Diff Ivanov Kross Gonzales\n" +"X-POFile-SpellExtra: Cédric Aleix Pol Evgeniy Nolden Veritas Breugelmanns\n" +"X-POFile-SpellExtra: KDevPlatform Prus Corporation Gonzalez Sams Milian\n" +"X-POFile-SpellExtra: Wolff Niko cs bin sessions\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Código" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "Ficheiros de Projecto do KDevelop 4" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "O Ambiente de Desenvolvimento Integrado KDevelop" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "'Copyright' 1999-2010, Os programadores do KDevelop" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "Cria uma sessão nova com o nome indicado." + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "" +"A sessão a carregar. Tanto poderá passar o código como o nome da sessão." + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "Apresentar as sessões disponíveis e sair" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" +"Sessões disponíveis (use o '-s CÓDIGO' ou '-s NOME' para abrir um " +"específico):" + +#: main.cpp:79 +msgid "Hash" +msgstr "Código" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "Nome: Projectos Abertos" + +#: main.cpp:88 +msgid "[running]" +msgstr "[em execução]" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "Indique o binário que deseja depurar." + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "Depurar" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "Já existe uma sessão com o nome '%1'. Use a opção '-s' para a abrir." + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"Não é possível abrir a sessão desconhecida '%1'. Veja a opção '--sessions' " +"para saber as sessões disponíveis ou use o '-cs' para criar uma nova." + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "A sessão %1 já está em execução." + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"Não é possível iniciar o KDevelop KDevelop; falta o executável 'kdevelop." +"bin' em %1. Corrija por favor a sua instalação do KDevelop." + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Manutenção, Arquitectura, Suporte a SCV, Suporte à Gestão de Projectos, " +"Gestor de Projectos do QMake" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Arquitectura, interface Sublime, suporte a Ruby" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Cadeia de Definição-Uso, Suporte para C++, Navegação, Completação, " +"Assistência e Reorganização do Código" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "Suporte para o CMake, Suporte de Execução, Suporte para o Kross" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "Integração com o GDB" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Integração com o editor de texto, cadeia de definições-usos" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "" +"Gestão da página Web, documentação da API, modificações para o Doxygen e o " +"'autoproject'" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "Integração com o GDB, 'plugins' de desenvolvimento para Web" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "Gestor genérico, 'plugins' de desenvolvimento para Web" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "Suporte ao 'astyle' e 'indent'" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "SCV Distribuído, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "Componente de excertos, modificações no depurador e de usabilidade" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "" +"'Plugin' do Subversion, Gestor de Makefiles personalizadas, melhorias globais" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "" +"Modificação para o Qt 3, correcções, suporte para o Valgrind, Diff e Perforce" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "Processador de C++" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "Os autores do KWrite" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Componente de edição Kate" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Código do desenhador" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Contribuições para as versões anteriores:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "Os autores do KHTML" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "Componente de documentação HTML" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "Ideia inicial, arquitectura básica, muito do código inicial" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, correcções de erros" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Suporte a Java & Objective C" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Interface para o depurador" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "Suporte a PHP, itens do menu de contexto" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "Modelos de aplicações do KDE" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Componente de distribuição, suporte à Bash, modelos de aplicações" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Diversos componentes, indexação do Htdig" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Ajuda no gestor do Automake e no armazém de classes persistentes" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Ajuda na infra-estrutura dos KParts" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Suporte para Ada" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "Gestor de projectos do QMake" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "Modos MDI, QEditor, correcções de erros" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "" +"Explorador de componentes, remodelação do CvsPart, modificações, correcções " +"de erros" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"'Plugins' de Substituição, Favoritos, Lista de Ficheiros e CTags2. Melhorias " +"e modificações globais" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Componente de criação de ficheiros e outras modificações" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "Suporte para o ClearCase" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Suporte para Ruby" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Documentação sobre Fortran" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Utilitário de documentação em Python" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Assistente do Doxygen" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Componente de selecção de ficheiros" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "Completação de código em C++, armazém de classes persistentes" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Correcções" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Ajuda com o suporte para Perl" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Área de índice da documentação" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Pesquisa na Documentação, modificações para o gestor de projectos do QMake, " +"melhorias de usabilidade, correcções de erros ..." + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "Modificações ao gestor de projectos do QMake" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "" +"Limpezas e correcções de erros para o qEdit, Automake, entre muitas outras " +"coisas" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Gráficos para a linguagem Ruby" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "URL do projecto a carregar" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Os ficheiros a ler" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" +"Iniciar o depurador, como por exemplo o 'gdb'. O binário que será depurado " +"vem a seguir - incluindo os seus argumentos." + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (a usar a KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "Não foi encontrado o tipo de configuração do lançamento nativo" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "Não é possível encontrar o lançamento %1" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "Não foi possível abrir o %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "&Ficheiro" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "&Editar" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "&Avançado" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "&Ver" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "Dobragem do &Código" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "Ferramen&tas" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "Completação de Palavras" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "&Configuração" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Barra Principal" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "Sessão" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Projecto" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "Executa&r" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Navegação" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Ficheiro" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Editar" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "Editor" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Código" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Janela" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Configuração" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "José Nuno Pires" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "zepires@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt/kdevformatters.po kdevelop-4.0.1/po/pt/kdevformatters.po --- kdevelop-3.9.98/po/pt/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt/kdevformatters.po 2010-07-17 20:12:22.000000000 +0100 @@ -0,0 +1,470 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-15 22:16+0100\n" +"Last-Translator: José Nuno Coelho Pires \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-SpellExtra: catch break if blocks else Style Indent indentador\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-POFile-SpellExtra: Artistic indent Astyle formatador\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "Formatação do Astyle" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "Uma ferramenta de formatação que usa o Astyle" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"O Artistic Style é um indentador, formatador e embelezador de código " +"para as linguagens de programação C, C++, C# e Java.
Página Pessoal: http://astyle.sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Formatação da Indentação" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "Uma ferramenta de formatação que usa o Indent" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"Indentar e Formar o Código-Fonte em C.
O programa `indent' pode " +"ser usado para tornar o código mais fácil de ler. Também poderá converter de " +"um estilo de escrita em C para outro.
O indent compreende uma " +"gama substancial de sintaxes de C, mas também tenta lidar com sintaxes " +"incompletas e inválidas.
Página Pessoal: http://www.gnu.org/software/indent" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Indentação" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Páginas" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Forçar as páginas" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Espaços" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"O número de espaços que será convertido para uma tabulação.\n" +"O número de espaços por tabulação é controlado pelo editor." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Converte as tabulações para espaços." + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Con&verter as tabulações em espaços" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "" +"Preenche as linhas em branco com os espaços em branco das linhas anteriores." + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "Preenc&her as linhas em branco" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Indentação" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Blocos" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Parêntesis" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "'Cases'" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Classe" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Legendas" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Espaços de nomes" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Directivas do pré-processador" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "Opções" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"Indenta um número máximo de espaços numa instrução contínua,\n" +"em relação à linha anterior." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Indenta um número mínimo de espaços numa instrução\n" +"condicional contínua, pertencente a um cabeçalho condicional." + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Mínimo no condicional:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "duas vezes a actual" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Máximo no comando:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Outros" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Tipo" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Quebra os parêntesis antes de fechar os cabeçalhos (p.ex. 'else', " +"'catch', ...)\n" +"dos seus parêntesis de fecho imediatamente precedentes." + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "Quebrar os cabeçalhos de &fecho" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "Sem alterações" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Anexar" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Interrupção" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Insere linhas vazias em torno dos blocos, legendas, classes, ...\n" +"não relacionados.\n" +"Problemas conhecidos:\n" +"\n" +"1. Se uma instrução NÃO fizer parte de um bloco,\n" +"as instruções seguintes ficam todas com espaçamento duplo.\n" +"As instruções englobadas num bloco são formatadas correctamente.\n" +"\n" +"2. Os comentários são repartidos do bloco.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "Que&brar os blocos" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Como o '--break-blocks', excepto que também introduz linhas\n" +"vazias em torno dos cabeçalhos de fecho (p.ex., 'else', 'catch', ...).\n" +"Problemas conhecidos:\n" +"\n" +"1. Se uma instrução NÃO fizer parte de um bloco,\n" +"as instruções seguintes ficam todas com espaçamento duplo.\n" +"As instruções englobadas num bloco são formatadas correctamente.\n" +"\n" +"2. Os comentários são repartidos do bloco.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "Que&brar todos os blocos" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "Quebra as instruções 'else if()' em duas linhas diferentes." + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "Quebrar o 'i&f-else'" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Preenchimento" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Preencher os parêntesis" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Retirar o preenchimento" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "Apenas dentro" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "Apenas fora" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "Dentro e fora" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Insere um preenchimento de espaços em torno dos operadores.\n" +"Logo que estejam preenchidos, os operadores assim permanecerão.\n" +"Não existe nenhuma opção de remoção do preenchimento de operadores." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "&Adicionar espaços à volta dos operadores" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "Código de linha única" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" +"Não quebrar as linhas que contêm várias instruções\n" +"em várias linhas com instruções únicas." + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "&Manter as instruções de uma linha" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "Não quebrar os blocos que residam por completo numa linha." + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "Ma&nter os blocos de uma linha" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "José Nuno Pires" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "zepires@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt/kdevgdb.po kdevelop-4.0.1/po/pt/kdevgdb.po --- kdevelop-3.9.98/po/pt/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt/kdevgdb.po 2010-07-17 20:12:22.000000000 +0100 @@ -0,0 +1,887 @@ +msgid "" +msgstr "" +"Project-Id-Version: kdevcppdebugger\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-19 11:10+0000\n" +"Last-Translator: José Nuno Coelho Pires \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-SpellExtra: tty chmod Automake gdb sleep QString pty fgets arm\n" +"X-POFile-SpellExtra: KDevelop rw Assembly automake stub main username rsh\n" +"X-POFile-SpellExtra: hw libtool post ug dlopen remote target gdbserver cin\n" +"X-POFile-SpellExtra: dev GDB mortem usermod kdevelop TTY Estat printf pre\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-POFile-SpellExtra: fork CONT stdout GigaBytes FIFO Init KILL USR wrap\n" +"X-POFile-SpellExtra: TERM UID space Mem QuiloBytes HUP white SetUID In\n" +"X-POFile-SpellExtra: zombie GID VT KThreadd bash First INT setscheduler\n" +"X-POFile-SpellExtra: stderr kdesu Out\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "Vigias" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "Recente" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
Valor antigo: %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
Valor novo: %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "Suporte para GDB" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Suporte para a execução de aplicações no GDB" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Descodificação" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Examinar o Ficheiro 'Core'..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Examinar o ficheiro 'core'" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"Examinar o ficheiro 'core'

Isto carrega um ficheiro 'core', que é " +"criado tipicamente depois de a aplicação ter estoirado, p. ex., com um erro " +"de protecção. O ficheiro 'core' contém uma imagem da memória do programa, na " +"altura em que estoirou, permitindo-lhe fazer uma análise 'post-mortem'.

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "Anexar ao Processo" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "Anexar ao processo..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "" +"Anexar ao processo

Associa o depurador a um processo em execução." + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "Avaliar: %1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "" +"Avaliar a expressão

Mostra o valor da expressão sob o cursor.

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "Vigia: %1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Vigiar a expressão

Adiciona a expressão sob o cursor à lista de " +"Variáveis/Vigia.

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Escolher o ficheiro 'core' a examinar..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "A examinar o ficheiro 'core' %1" + +#: debuggerplugin.cpp:372 +msgid "Debug core file" +msgstr "Depurar o ficheiro 'core'" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "Escolha um processo ao qual se associar..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "" +"Não será associado ao processo %1: não é possível associar o depurador a si " +"próprio." + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "A associar-se ao processo %1" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "Depurar o processo %1" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Depurador" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"Não foi indicado nenhum grupo de ambientes; parece ser uma configuração " +"inválida; verifique por favor a configuração de execução '%1'. A usar o " +"grupo de ambientes por omissão." + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "O depurador parou" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "A aplicação foi interrompida" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "O processo terminou" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "A aplicação está em execução" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "A aplicação está em pausa" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"O GDB terminou anormalmente

Este será provavelmente um erro no GDB. " +"Veja a janela de resultado do 'gdb' e pare então o depurador" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "O GDB terminou anormalmente" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "" +"O comando 'gdb' enviado quando o depurador não está em execução
O " +"comando foi:
%1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Erro interno" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Comando do depurador inválido
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "O comando do depurador é inválido" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "Terminou normalmente" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "Saiu com o sinal %1" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "O programa recebeu o sinal %1 (%2)" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "A executar o programa" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"O GDB não consegue usar os dispositivos 'tty*' ou 'pty*'\n" +"Verifique as configurações em '/dev/tty*' e '/dev/pty*'\n" +"\n" +"Como 'root', poderá precisar de fazer \"chmod ug+rw\" aos dispositivos tty* " +"e pty* e/ou acrescentar o utilizador ao grupo 'tty', usando o comando " +"\"usermod -G tty username\"." + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Aviso" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "" +"Erro do depurador

O depurador devolveu o seguinte erro:

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Erro do depurador" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "1 comando em espera\n" +msgstr[1] "%1 comandos em espera\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "%1 comando em processamento pelo gdb\n" +msgstr[1] "%1 comandos em processamento pelo gdb\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "Estado do depurador: %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"Classe do comando actual: '%1'\n" +"Texto do comando actual: '%2'\n" +"Texto original do comando actual: '%3'\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "Estado do depurador" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "Precisa do gdb 7.0.0 ou superior.
Está a usar: %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "Erro do 'gdb'" + +#: debugsession.cpp:1417 +msgid "Could not start debugger:
" +msgstr "Não foi possível iniciar o depurador:
" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "Erro no arranque" + +#: debugsession.cpp:1429 +msgid "Could not attach debugger:
" +msgstr "Não foi possível associar-se ao depurador:
" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"Janela de código-máquina

Uma vista do código-máquina da aplicação " +"em execução com a instrução actual seleccionada. Você poderá andar instrução-" +"a-instrução, usando os botões da barra de depuração \"avançar sobre\" e " +"\"avançar para\"." + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Janela de Descodificação" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Endereço" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Função" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Deslocamento" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Instrução" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "Não foi possível localizar a linha de comandos de depuração '%1'." + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "Linha de Comandos de Depuração Não Encontrada" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" +"

A componente de depuração encontrou um erro interno ao processar a " +"resposta do 'gdb'. Por favor envie um relatório de erros." + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"A excepção é: %1\n" +"A resposta do MI é: %2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Erro interno do depurador" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" +"Não foi possível iniciar o depurador.

Não foi possível executar o '%" +"1'. Certifique-se que o local foi indicado correctamente." + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "Não foi possível iniciar o depurador" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "Configuração do GDB" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "Executa uma aplicação nativa no GDB" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "Resultado do GDB" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"Resultado do GDB

Mostra todos os comandos do 'gdb' a ser " +"executados. Você também poderá emitir qualquer outro comando do 'gdb' " +"enquanto faz a depuração.

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "Comando do &GDB:" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "Põe em pausa a execução da aplicação, para indicar comandos do 'gdb'" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Mostrar os Comandos Internos" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"Controla se os comandos emitidos internamente pelo KDevelop deverão ser " +"apresentados ou não.
Esta opção irá afectar apenas os comandos futuros; " +"não irá adicionar ou remover os comandos já emitidos na janela." + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "Copiar Tudo" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Início" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "Quantidade" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "OK" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Cancelar" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Janela da memória" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (1 byte)" +msgstr[1] "%2 (%1 bytes)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Mudar o intervalo de memória" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Actualizar" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Fechar esta área" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Áreas especiais de depuração" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "Anexar a um processo" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Seleccionar o Ficheiro 'Core'" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "kdevelop: consola da aplicação para depuração" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Configuração do Depurador" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Executável do depurador:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "Executável 'gdb'" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"Para executar o programa \"gdb\" a partir da $PATH, deixe este campo em " +"branco. Para executar um 'gdb' personalizado, por exemplo de outra " +"arquitectura, indique aqui o nome do executável. Poderá tanto executar o " +"'gdb' a partir do $PATH, mas tendo este outro nome (por exemplo, \"arm-gdb" +"\"), se escrever aqui o nome, como poderá indicar a localização completa do " +"executável 'gdb'." + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "" +"Executar o 'gdb' numa consola especial (principalmente nos projectos do " +"Automake)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"Se quiser que o 'gdb' seja executado por uma consola ou ferramenta " +"especiais, indique-a aqui. O caso de uso principal é para os projectos " +"baseados no Automake, onde a aplicação é apenas de facto um programa e " +"depois é usada a 'libtool' para executar o código dentro do 'gdb'." + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "Con&sola de depuração:" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"Se quiser que o 'gdb' seja executado por uma consola ou ferramenta " +"especiais, indique-a aqui. O caso de uso principal é para os projectos " +"baseados no Automake, onde a aplicação é apenas de facto um programa e " +"depois é usada a libtool para executar o código dentro do 'gdb'." + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Opções" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"A apresentação dos membros estáticos torna o GDB mais lento\n" +"ao produzir os dados dentro do KDE e do Qt.\n" +"Poderá alterar a \"assinatura\" dos dados em que\n" +"se baseia o QString e os seus amigos,\n" +"mas se precisar de depurar dentro destes valores,\n" +"então o melhor é assinalar esta opção." + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Mostrar os &membros estáticos" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"Ao mostrar o código descodificado, poderá optar\n" +"por ver os nomes dos métodos codificados ou não.\n" +"Neste caso, os nomes não-codificados são mais fáceis de ler." + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "Mostrar os nomes &descodificados" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"Se o GDB não tiver encontrado uma biblioteca que será carregada\n" +"através do \"dlopen\", então recusar-se-á a definir um ponto de paragem\n" +"para esse código. Poderá indicar ao GDB para parar no carregamento de\n" +"uma biblioteca e tentar aí definir os pontos de paragem pendentes. Veja\n" +"a documentação para saber mais detalhes sobre este comportamento.\n" +"\n" +"Se não estiver a fazer \"dlopen\" de bibliotecas, então desligue esta opção." + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "Tentar definir pontos de paragem no carregamento das &bibliotecas" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"Isto permite-lhe introduzir dados no terminal, sempre\n" +"que a sua aplicação contiver código de introdução de dados\n" +"(p.ex., 'cin', 'fgets', etc.). Se usar a introdução de dados\n" +"no terminal para a sua aplicação, então assinale esta opção.\n" +"Caso contrário, deixe-a desligada." + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "Act&ivar um terminal separado para as E/S da aplicação" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"Este programa é usado para os comandos que se necessitem de tentar ligar a " +"um executável remoto em funcionamento.\n" +"\tshell sleep 5\tesperar que o programa remoto se inicie\n" +"\ttarget remote ...\tligar-se ao depurador remoto\n" +"\tcontinue\t[opcional] iniciar a depuração até ao primeiro ponto de paragem" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "Depuração Remota" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "Programa de &configuração do 'gdb':" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "Programa de configuração do GDB" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "Este programa é carregado pelo 'gdb' ao iniciar a depuração." + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "E&xecutar o programa:" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "O programa para iniciar a aplicação remota" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"Este programa da consola é executado depois de o programa de configuração do " +"GDB ter sido carregado por este.\n" +"Ao depurar remotamente, este programa pretende de facto iniciar o processo " +"remoto.\n" +"[Espera-se que o executável de depuração esteja acessível no destino, talvez " +"através da sua transferência como passo de compilação final]\n" +"1) Descubra uma forma de executar um comando remotamente - rsh, ssh, " +"telnet, ...\n" +"2a) Execute o \"gdbserver ... aplicação\" no destino\n" +"ou, se o seu executável tiver o bloco de adaptação do 'gdb'\n" +"2b) Execute a \"aplicação\" no destino." + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "Executar o programa do '&gdb':" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "Um programa para se ligar à aplicação remota" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"Este programa é carregado pelo \"gdb\", depois de os dois programas " +"anteriores terem sido executados.\n" +"Este programa é usado para os comandos que se necessitem de tentar ligar a " +"um executável remoto em funcionamento.\n" +"\tshell sleep 5\tesperar que o programa remoto se inicie\n" +"\ttarget remote ...\tligar-se ao depurador remoto\n" +"\tcontinue\t[opcional] iniciar a depuração até ao primeiro ponto de paragem." + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "Configuração do Traceamento" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"Activar o traceamento\n" +"

O traceamento é um mecanismo que mostra automaticamente os valores das " +"expressões escolhidas e continua a execução quando for atingido um ponto de " +"paragem. Poderá pensar como se fosse uma depuração de 'printf' sem " +"necessidade de modificar o código.

" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Activar o traceamento" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "Texto de formato personalizado" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"Texto de formato personalizado\n" +"

Indique um texto de formato do estilo C que será usado para imprimir a " +"expressão escolhida. Por exemplo:\n" +"

Ponto de paragem 1: g = %d

\n" +"Se o texto de formato personalizado não estiver activo, os nomes e os " +"valores de todas as expressões serão impressos com \"%d\" como formato para " +"todas as expressões." + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "Expressões a imprimir:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Executar" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Barra de Depuração" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Executável:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Ficheiro 'Core':" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "José Nuno Pires" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "zepires@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt/kdevmakebuilder.po kdevelop-4.0.1/po/pt/kdevmakebuilder.po --- kdevelop-3.9.98/po/pt/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt/kdevmakebuilder.po 2010-07-17 20:12:22.000000000 +0100 @@ -0,0 +1,162 @@ +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-26 15:13+0100\n" +"Last-Translator: José Nuno Coelho Pires \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-SpellExtra: Make make kdesudo kdesu\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Construtor do Make" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Suporte para a compilação de projectos do Make" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Pasta de compilação '%1' inválida" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "Não foi possível criar o comando de compilação para o alvo '%1'" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "A tarefa foi mal-sucedida" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Sem sucesso ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Terminado ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** Interrompido ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "a compilar" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "a gerar" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "a editar as ligações" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "compilado" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "a instalar" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "a criar" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Ver" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Interromper ao primeiro erro:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Mostrar os comandos mas não os executar:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Instalar como 'root':" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Comando de instalação como 'root':" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Número de tarefas em simultâneo:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Executável do Make:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Alvo do 'make' por omissão:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Opções adicionais do 'make':" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Perfil Activo do Ambiente:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "José Nuno Pires" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "zepires@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt/kdevqthelp.po kdevelop-4.0.1/po/pt/kdevqthelp.po --- kdevelop-3.9.98/po/pt/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt/kdevqthelp.po 2010-07-17 20:12:22.000000000 +0100 @@ -0,0 +1,64 @@ +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-15 12:17+0000\n" +"Last-Translator: José Nuno Coelho Pires \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-SpellExtra: QtHelp about blank\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "Não foi possível encontrar qualquer documentação sobre '%1'" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "Página Pessoal do QtHelp" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Verificar a documentação de ajuda do Qt" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "José Nuno Pires" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "zepires@gmail.com" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "Identificador a pesquisar:" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "Página de ajuda:" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "about:blank" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "Informação de depuração:" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt_BR/CMakeLists.txt kdevelop-4.0.1/po/pt_BR/CMakeLists.txt --- kdevelop-3.9.98/po/pt_BR/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt_BR/CMakeLists.txt 2010-07-17 20:12:27.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(pt_BR ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/pt_BR/kdevcmakebuilder.po kdevelop-4.0.1/po/pt_BR/kdevcmakebuilder.po --- kdevelop-3.9.98/po/pt_BR/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt_BR/kdevcmakebuilder.po 2010-07-17 20:12:27.000000000 +0100 @@ -0,0 +1,93 @@ +# translation of kdevcmakebuilder.po to Brazilian Portuguese +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Luiz Fernando Ranghetti , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-24 23:52-0300\n" +"Last-Translator: Luiz Fernando Ranghetti \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.2\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "Compilar com CMake" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Suporte a compilação de projetos baseados no CMake" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "Sem diretório de compilação configurado, não foi possível compilar" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "Cancelando o build" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "Sem diretório de compilação configurado, não foi possível limpar" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "Cancelando o clean" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "Sem diretório de compilação configurado, não foi possível instalar" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "Cancelando o install" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "Sem diretório de compilação configurado, não foi possível configurar" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "Cancelando o configure" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "" +"Sem diretório de compilação configurado, não foi possível limpar o diretório " +"de compilação" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "Sem limpeza possível do diretório de compilação" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "Falha no processo" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "Executável do CMake:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Luiz Fernando Ranghetti" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "elchevive@opensuse.org" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt_BR/kdevcmake.po kdevelop-4.0.1/po/pt_BR/kdevcmake.po --- kdevelop-3.9.98/po/pt_BR/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt_BR/kdevcmake.po 2010-07-17 20:12:27.000000000 +0100 @@ -0,0 +1,464 @@ +# translation of kdevcmake.po to Brazilian Portuguese +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Luiz Fernando Ranghetti , 2008, 2009, 2010. +# Luciano Pimentel , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-05-18 16:02-0300\n" +"Last-Translator: Luiz Fernando Ranghetti \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "Documentação do CMake" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Suporte à documentação do CMake" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Valor em cache: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Documentação em cache: %1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "Comandos" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Variável" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "Módulo" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "Propriedade" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "Política" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "Página de Conteúdo CMake" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 é um comando obsoleto e não deve ser usado" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Função não terminada. " + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Nome" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Tipo" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Valor" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Comentário" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Avançado" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"O diretório %1 será removido da lista do KDevelop.\n" +"Deseja que o Kdevelop remova também este diretório do sistema de arquivos?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "Não foi possível remover: %1.\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "&Alternar cores" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "Geral" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "Este projeto tem um dia" +msgstr[1] "Este projeto tem %1 dias" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "Configurações alteradas" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "Um aplicativo do KDE 4" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "(C) 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Documento a abrir" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Configurar diretório de compilação" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "Configurar diretório de compilação para %1" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "Você deve selecionar um binário cmake." + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "Você deve especificar um diretório de compilação." + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "Usando um diretório de compilação criado anteriormente." + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "Criando um novo diretório de compilação." + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "Diretório de compilação já configurado." + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "O diretório de compilação é %1, mas o diretório de projeto é %2." + +#: cmakebuilddirchooser.cpp:172 +msgid "You may not select a relative build directory." +msgstr "Você não pode selecionar um diretório de compilação relativo." + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "O diretório de compilação selecionado não está vazio." + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "Gerenciador do CMake" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Suporte ao gerenciamento de projetos em CMake" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Pular para a definição do alvo" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Criar a pasta '%1'." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop - Suporte ao CMake" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "Não foi possível criar o arquivo CMakeLists.txt nesta pasta." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "Não foi possível salvar a modificação." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Remover a pasta '%1'." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Remover o arquivo '%1'." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Adicionar o arquivo '%1' ao alvo '%2'." + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "Não foi possível salvar a modificação." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "Remover a pasta '%1'." + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "A pasta de compilação não existe e não pode ser criada." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Erro ao criar pasta de compilação" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "INVÁLIDO" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Comando" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Macro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Caminho" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "&Executável do CMake:" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "&Diretório de compilação:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "Prefixo de &Instalação:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "&Tipo de compilação:" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"O KDevelop encontrou várias possíveis raízes de projeto para seu projeto, " +"por favor, selecione o correto." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Luiz Fernando Ranghetti" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "elchevive@opensuse.org" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "&Mover" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Adicionar" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Remover" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Valores em Cache" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Comentário:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Exibir Avançado" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "Diretório do CMake" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Exibir Valores Avançados" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "olá, mundo" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Cor do plano de fundo:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Escolha uma nova cor para o plano de fundo" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Altere a cor do plano de fundo clicando aqui e escolha a " +"nova cor no diálogo de cor.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Tempo de Projeto:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Cor do plano principal:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Escolha uma nova cor para o plano principal:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Altere a cor do plano principal clicando aqui e " +"escolhendo a nova cor no diálogo de cor.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Defina o tempo de projeto (em dias)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "Altere a idade do projeto (em dias) escolhendo um novo número de dias." \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt_BR/kdevcpp.po kdevelop-4.0.1/po/pt_BR/kdevcpp.po --- kdevelop-3.9.98/po/pt_BR/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt_BR/kdevcpp.po 2010-07-17 20:12:27.000000000 +0100 @@ -0,0 +1,928 @@ +# tradução do kdevcpp.po para Brazilian Portuguese +# translation of kdevcpp.po to Brazilian Portuguese +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Luiz Fernando Ranghetti , 2008, 2009, 2010. +# André Marcelo Alvarenga , 2010. +# Marcus Vinícius de Andrade Gama , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-17 23:48-0300\n" +"Last-Translator: Luiz Fernando Ranghetti \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "Não incluídos" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Inicializar" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Contentor não incluído" + +#: codecompletion/context.cpp:1272 +#, kde-format +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "1 sobrepõe %2" +msgstr[1] "%1 sobrepõem %2" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "Conectar a %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Sinais/'Slots'" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "Substituto virtual" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Função de implementação" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "Incorporado do C++" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Sobrescrever" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Implementar" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Criar um 'Slot'" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "De %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Adicionar a diretiva de inclusão" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Adicionar uma declaração posterior" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "declaração posterior" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "Opções de implementação da classe privada" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Cancelar" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "Atualizar a definição de %1(%2) para (%3)" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Não foi possível aplicar as alterações: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"A refatorização é uma funcionalidade experimental; ela poderá danificar o " +"seu código. Antes de usá-la, certifique-se de criar uma cópia de segurança." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "Renomear %1" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "Criar uma definição separada para o %1" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Criar classe" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "Não existe nenhuma declaração sob o cursor" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "Nenhum arquivo fonte disponível para %1." + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "Não foi possível atualizar a cadeia de definição-uso de %1." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "Não é possível criar uma definição para esta declaração." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "A inserção foi mal-sucedida" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "A aplicação das alterações foi mal-sucedida" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "Nenhum documento para %1" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "A declaração perdeu-se na atualização" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "A declaração encontra-se no arquivo sem permissão de gravação %1." + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "Novo nome:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Renomear" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Nota: Todas as funções, reimplementações, declarações posteriores, etc. irão " +"também mudar de nome" + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Usos" + +#: codegen/simplerefactoring.cpp:445 +msgid "Declaration Info" +msgstr "Informações da declaração" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "Renomeando \"%1\" para \"%2\"" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "A aplicação das alterações foi mal-sucedida: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Configurar os locais de inclusões personalizados" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "" +"Não foi possível salvar os locais de inclusão personalizados na pasta: %1" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Adicionar um local de inclusão" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Abrir projeto" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "Não encontrado: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "Você não selecionou nada, assim nada será adicionado ao alvo." + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "" +"Não foi possível resolver a classe de base, adicionando-a de forma indireta: " +"%1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "A classe de base é inválida: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Criar uma declaração local %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "Declarar o %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "Declaração não encontrada: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Incluídos" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Incluídos por" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Macros definidas" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Macro de função" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Macro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "Conteúdo pré-processado:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "Corpo:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "" +"O gerenciador de compilações do projeto %1 não devolveu nenhuma pasta de " +"compilação" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"A resolução dos locais de inclusão necessita da pasta de compilação para " +"resolver os locais adicionais. Considere configurar a pasta de compilação no " +"gerenciador de projetos, caso não o tenha já feito." + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "O gerenciador de compilações não devolveu nenhum local de inclusão" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"O gerenciador de compilações não devolveu o local de inclusão %1, que foi " +"resolvido pelo módulo de resolução de locais de inclusão" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Resolução do local de inclusão: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Pasta de compilação usada: \"%1\"\n" +"Resolução dos locais de inclusão: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" +"Tentou-se uma resolução de pastas de inclusão enquanto outro processo de " +"resolução está rodando" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "Falta um Makefile na pasta \"%1\"" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "Ocorreram problemas ao tentar resolver as pastas de inclusão do %1" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "Em cache: %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "O nome do arquivo %1 parece ser inválido" + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "Não foi possível extrair o novo diretório de trabalho" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "A saída foi: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "A chamada recursiva do 'make' falhou" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "" +"O texto do parâmetro \"%1\" não parece ser válido. O resultado foi: %2." + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "A pasta \"%1\" não existe. O resultado foi: %2." + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "A chamada recursiva do 'make' falhou" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "Não é possível extrair os locais de inclusão do resultado do 'make'" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Pasta: \"%1\" comando: \"%2\" saída: \"%3\"" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "Gerador de arquivos de inclusão encaminhados para o KDE" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "" +"Uma aplicação que cria arquivos de inclusão de encaminhamento (como os do " +"Qt) a partir do código-fonte." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "(c) 2006, Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"Pasta de inclusão do KDE - os arquivos de inclusão vão para " +"inclusão/KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Criar a informação a partir do gerador de XML do CMake" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "Instrução #if não terminada" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "caractere %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "Esperava-se um \"identificador\" mas foi encontrado: %1" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
Texto do item
%1
Entrada
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "Esperava-se um \")\", mas foi encontrado %1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "Divisão por zero" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Texto de entrada: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "experado ``:'' = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else sem #if" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "#endif sem #if na linha %1 do resultado" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Erro de macro" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "A invocação da macro %1 não tem o número de argumentos %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Formais: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "entrada inválida: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "Este arquivo importa o documento aberto atualmente
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "No local de inclusão %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Incluídos através de %1
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Diretório %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "No %1o local de inclusão" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Inclusões" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Local de inclusões" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "Incluídos" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "Suporte a C++" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "Suporte a linguagem C++" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "Arquivos" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "M&udar para a definição/declaração" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "Criar uma &nova classe" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Renomear a declaração" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "Mover para o código" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Esvaziado pelo pré-processador
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "Processando os arquivos incluídos" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "Processando o arquivo atual" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "Não atualizando a cadeia de definição-uso de %1" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "Usos da compilação" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Pronto" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "O arquivo foi incluído de forma recursiva a partir de si próprio: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "O arquivo incluído não foi encontrado: %1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"Local de inclusão pesquisado:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "Não foi possível abrir o arquivo '%1'" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "Não foi possível ler o arquivo." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "O arquivo não pode ser aberto." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "As permissões do arquivo impedem o seu acesso para leitura." + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Navegação" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Código" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marcus Gama" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "marcus.gama@gmail.com" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "Opções do C++" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Exportar:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Macro:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Público" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Protegido" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Privado" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "'Slot'" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Sinal" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Pasta de armazenamento" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"O local de inclusão personalizado será guardado num arquivo especial chamado " +"\".kdev_include_paths\", estando este numa pasta de código. O local " +"personalizado será usado para todos os arquivos abaixo dessa pasta." + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Pasta de armazenamento:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Resolução automática" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"Se o seu projeto usar Makefiles simples, será possível resolver " +"automaticamente os locais de inclusão com o utilitário 'make'. Para isso, " +"defina um mapeamento entre uma pasta de código e uma de compilação." + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Pasta de origem:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Pasta de compilação:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Locais de inclusão personalizados" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "" +"Você poderá adicionar aqui uma lista de locais de inclusão personalizados." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"Nota: Esta configuração não afeta o compilador ou o projeto de nenhuma " +"forma; só são usados para encontrar os arquivos de inclusão no KDevelop." + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" +"Opções e configurações para mover os campos de dados privados de uma classe " +"para uma estrutura privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "Nome da estrutura privada:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Opções" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

Por padrão, as estruturas " +"de implementação privadas são declaradas como struct (estruturas) para ter um acesso público padrão.

\n" +"

Assinale esta opção se " +"desejar que a estrutura de implementação privada seja declarada como class (classe) com acesso público.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Usar uma classe em vez de uma estrutura" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

Mover todas as variáveis " +"atuais que estão inicializadas na lista de inicializações do construtor para " +"a lista de inicialização do construtor da estrutura de implementação privada." +"

\n" +"

\n" +"

Nota: Todas as referências e variáveis " +"com tipos que não ofereçam construtores por omissão serão movidos, " +"independentemente do estado desta opção.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "Mover a inicialização das variáveis para uma estrutura privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" +"Mover todos os métodos privados atuais para a estrutura de implementação " +"privada." + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "Mover os métodos privados" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Nome do ponteiro:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "" +"O nome da variável-membro que será o ponteiro para a implementação privada" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt_BR/kdevcustommake.po kdevelop-4.0.1/po/pt_BR/kdevcustommake.po --- kdevelop-3.9.98/po/pt_BR/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt_BR/kdevcustommake.po 2010-07-17 20:12:27.000000000 +0100 @@ -0,0 +1,44 @@ +# tradução do kdevcustommake.po para Brazilian Portuguese +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Luiz Fernando Ranghetti , 2008, 2009. +# André Marcelo Alvarenga , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-10-31 01:13-0200\n" +"Last-Translator: André Marcelo Alvarenga \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Gerenciador de Makefile personalizado" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Suporte a gerenciamento de projetos makefile personalizados" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Executar" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Luiz Fernando Ranghetti" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "elchevive@opensuse.org" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt_BR/kdevelop.po kdevelop-4.0.1/po/pt_BR/kdevelop.po --- kdevelop-3.9.98/po/pt_BR/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt_BR/kdevelop.po 2010-07-17 20:12:27.000000000 +0100 @@ -0,0 +1,746 @@ +# tradução do kdevelop.po para Brazilian Portuguese +# translation of kdevelop.po to Brazilian Portuguese +# tradução de kdevelop.po para Brazilian portuguese +# tradução de kdevelop.po para Brazilian Portuguese +# Marcus Gama , 2003. +# Helio Chissini de Castro , 2003. +# Lisiane Sztoltz Teixeira , 2004, 2005. +# Henrique Pinto , 2005. +# Diniz Bortolotto , 2007, 2008. +# Henrique Marks , 2008. +# André Marcelo Alvarenga , 2008, 2010. +# Luiz Fernando Ranghetti , 2008, 2009, 2010. +# Marcus Vinícius de Andrade Gama , 2010. +# Marcus Gama , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-03 13:01-0500\n" +"Last-Translator: Marcus Vinícius de Andrade Gama \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Código" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "Arquivos de projeto do KDevelop4" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "Ambiente de Desenvolvimento Integrado KDevelop" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "Copyright 1999-2010, Os desenvolvedores do KDevelop" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "Cria uma sessão nova com o nome indicado." + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "A sessão a carregar. Você poderá passar o código ou o nome da sessão." + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "Lista as sessões disponíveis e sai" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" +"Sessões disponíveis (use o '-s CÓDIGO' ou '-s NOME' para abrir uma " +"específica):" + +#: main.cpp:79 +msgid "Hash" +msgstr "Código" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "Nome: Projetos Abertos" + +#: main.cpp:88 +msgid "[running]" +msgstr "[rodando]" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "Especifique o executável que você quer depurar." + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "Depurar" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "Já existe uma sessão com o nome '%1'. Use a opção '-s' para abrí-la." + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"Não é possível abrir a sessão desconhecida '%1'. Veja a opção '--sessions' " +"para saber as sessões disponíveis ou use o '-cs' para criar uma nova." + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "A sessão %1 já está rodando." + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"Não é possível iniciar o KDevelop; falta o executável 'kdevelop.bin' em '%" +"1'. Corrija por favor a sua instalação do KDevelop." + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Mantenedor, arquitetura, suporte ao VCS, suporte ao gerenciamento de projeto " +"e gerenciador de projetos do QMake" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Arquitetura, interface sublime e suporte a Ruby" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Cadeia de Definição-Uso, Suporte para C++, Navegação, Completamento, " +"Assistência e Reorganização do Código" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "Suporte para o CMake, Suporte de Execução, Suporte para o Kross" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "Integração GDB" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Integração do editor de texto, cadeia de uso das definições" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "" +"Administração do site, documentação da API, Doxygen e correções para o " +"autoproject" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "Integração com o GDB, plugins de desenvolvimento para Web" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "Gerenciador genérico, plugins de desenvolvimento para Web" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "Suporte ao 'astyle' e 'indent'" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "VCS distribuido, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "Componente Snippet, depurador e correções para usabilidade" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "" +"Plug-in do Subversion, Gerenciador Personalizado do Make, Melhorias globais" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "Portado para Qt 3, correções, valgrind, diff e suporte a perforce" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "Analisador C++" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "Os autores do KWrite" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Componente do editor Kate" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Código do Designer" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Contribuidores de versões antigas:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "Os autores do KHTML" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "Componente da documentação HTML" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "Ideia inicial, arquitetura básica, código-fonte inicial" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "Correções, KTabBar" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Suporte a Java e Objective C" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Interface do depurador" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "Suporte a PHP, coisas para o menu de contexto" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "Modelos de aplicativos do KDE" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Componente Dist, suporte a bash, modelos de aplicativo" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Vários componentes, indexação no htdig" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "" +"Ajuda com o gerenciador do Automake e o armazenamento persistente de classe" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Ajuda com a infraestrutura dos KParts" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Suporte a Ada" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "Gerenciador de projeto do QMake" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "Modos MDI; QEditor e correção de bugs" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "Componente Explorer, redesign do CvsPart, correções de bugs" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Plug-ins para substituição, favoritos, lista de arquivos e CTags2. Vários " +"melhoramentos e correções" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Componente de criação de arquivos, dentre outros detalhes, e correções" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "Suporte ao ClearCase" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Suporte a Ruby" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Documentação do Fortran" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Utilitário de documentação do python" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Assistente do Doxygen" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Componente seletor de arquivos" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "Completação de código C++, armazenamento de classe persistente" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Correções" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Ajuda com o suporte Perl" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Visão de índice de documentação" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Procura em documentação, correções no gerenciador de projetos do qmake, " +"melhoramentos de usabilidade, correções de erros..." + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "Correções do gerenciador de projeto QMake" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "" +"Limpezas e correções de erros para o qEditor, AutoMake e muitas outras coisas" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Gráficos para a linguagem Ruby" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "URL do projeto a carregar" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Arquivos para carregar" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" +"Iniciar o depurador, como por exemplo o gd'. O binário que será depurado vem " +"a seguir - incluindo os seus argumentos." + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (usando o KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "Não foi encontrado o tipo de configuração do lançamento nativo" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "Não é possível encontrar o lançamento %1" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "Não foi possível abrir %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "&Arquivo" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "&Editar" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "&Avançado" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "&Ver" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "Dobragem do &Código" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "Ferramen&tas" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "Completamento de palavras" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "&Configurações" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Barra de Ferramentas Principal" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "Sessão" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Projeto" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "E&xecutar" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Navegação" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Arquivo" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Editar" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "Editor" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Código" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Janela" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Configurações" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Diniz Bortolotto, Lisiane Sztoltz Teixeira" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "diniz.bortolotto@gmail.com, lisiane@kdemail.net" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt_BR/kdevformatters.po kdevelop-4.0.1/po/pt_BR/kdevformatters.po --- kdevelop-3.9.98/po/pt_BR/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt_BR/kdevformatters.po 2010-07-17 20:12:27.000000000 +0100 @@ -0,0 +1,470 @@ +# translation of kdevformatters.po to Brazilian Portuguese +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Luiz Fernando Ranghetti , 2008, 2009, 2010. +# Marcus Vinícius de Andrade Gama , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-14 00:25-0300\n" +"Last-Translator: Luiz Fernando Ranghetti \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "Formatação do Astyle" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "Uma ferramenta de formatação usando o astyle" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"O Artistic Style é um recuador, formatador e embelezador de código " +"para as linguagens de programação C, C++, C# e Java.
Site: http://astyle.sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Formatador de recuo" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "Uma formatador que usa o Indent" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"Recuar e formatar código fonte em C.
O programa 'indent' pode " +"ser usado para tornar o código mais fácil de ler. Ele também poderá " +"converter de um estilo de escrita em C para outro.
O indent " +"compreende uma gama substancial de sintaxes de C, mas também tenta lidar com " +"sintaxes incompletas e inválidas.
Site: http://www.gnu.org/software/indent" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Recuo" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Abas" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Forçar abas" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Espaços" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"O número de espaços que será convertido para uma tabulação.\n" +"O número de espaços por tabulação é controlado pelo editor." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Converte as tabulações para espaços." + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Con&verter as tabulações em espaços" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "" +"Preenche as linhas em branco com os espaços em branco das linhas anteriores." + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "Preenc&her as linhas em branco" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Recuar" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Blocos" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Colchetes" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "Casos" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Classe" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Rótulos" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Espaços de nomes" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Diretivas do pré-processador" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "Opções" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"Recua um número máximo de espaços numa instrução contínua,\n" +"em relação à linha anterior." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Recua um número mínimo de espaços numa instrução\n" +"condicional contínua, pertencente a um cabeçalho condicional." + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Mínimo no condicional:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "Duas vezes o atual" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Máximo no comando:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Outro" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Tipo" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Quebra os colchetes antes de fechar os cabeçalhos (p.ex. 'else', " +"'catch', ...)\n" +"dos seus colchetes de fecho imediatamente precedentes." + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "Quebrar os cabeçalhos de &fecho" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "Sem alterações" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Anexar" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Parar" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Insere linhas vazias em torno dos blocos, legendas, classes, ...\n" +"não relacionados.\n" +"Problemas conhecidos:\n" +"\n" +"1. Se uma instrução NÃO fizer parte de um bloco,\n" +"as instruções seguintes ficam todas com espaçamento duplo.\n" +"As instruções englobadas num bloco são formatadas corretamente.\n" +"\n" +"2. Os comentários são repartidos do bloco.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "Que&brar os blocos" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Como o '--break-blocks', exceto que também insere linhas\n" +"vazias em torno dos cabeçalhos de fecho (p.ex., 'else', 'catch', ...).\n" +"Problemas conhecidos:\n" +"\n" +"1. Se uma instrução NÃO fizer parte de um bloco,\n" +"as instruções seguintes ficam todas com espaçamento duplo.\n" +"As instruções englobadas num bloco são formatadas corretamente.\n" +"\n" +"2. Os comentários são repartidos do bloco.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "Que&brar todos os blocos" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "Quebra as instruções 'else if()' em duas linhas diferentes." + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "Quebrar o 'i&f-else'" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Preenchimento" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Preencher os parênteses" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Retirar o preenchimento" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "Apenas dentro" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "Apenas fora" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "Dentro e fora" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Insere um preenchimento de espaços em torno dos operadores.\n" +"Logo que estejam preenchidos, os operadores assim permanecerão.\n" +"Não existe nenhuma opção de remoção do preenchimento de operadores." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "&Adicionar espaços ao redor dos operadores" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "Código de linha única" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" +"Não quebrar as linhas que contêm várias instruções\n" +"em várias linhas com instruções únicas." + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "&Manter as instruções de uma linha" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "Não quebrar os blocos que residam completamente numa linha." + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "Ma&nter os blocos de uma linha" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marcus Gama" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "marcus.gama@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt_BR/kdevgdb.po kdevelop-4.0.1/po/pt_BR/kdevgdb.po --- kdevelop-3.9.98/po/pt_BR/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt_BR/kdevgdb.po 2010-07-17 20:12:27.000000000 +0100 @@ -0,0 +1,886 @@ +# tradução do kdevgdb.po para Brazilian Portuguese +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Luiz Fernando Ranghetti , 2008, 2009, 2010. +# Marcus Vinícius de Andrade Gama , 2010. +# André Marcelo Alvarenga , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevgdb\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-19 10:21-0300\n" +"Last-Translator: Luiz Fernando Ranghetti \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "Assistir" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "Recente" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
Valor antigo: %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
Novo valor: %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "Suporte a GDB" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Suporte para a execução de aplicações no GDB" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Decodificação" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Examinar o arquivo 'Core'..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Examinar o arquivo 'core'" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"Examinar o arquivo 'core'

Isto carrega um arquivo 'core', que é " +"criado tipicamente depois de a aplicação ter estourado, p. ex., com um erro " +"de proteção. O arquivo 'core' contém uma imagem da memória do programa, no " +"momento em que estourou, permitindo-lhe fazer uma análise 'post-mortem'.

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "Anexar ao processo" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "Anexar ao processo..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "" +"Anexar ao processo

Associa o depurador a um processo em execução." + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "Avaliar: %1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "" +"Avaliar a expressão

Mostra o valor da expressão sob o cursor.

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "Vigia: %1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Vigiar a expressão

Adiciona a expressão sob o cursor à lista de " +"Variáveis/Vigia.

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Escolher o arquivo 'core' a examinar..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "Examinando o arquivo 'core' %1" + +#: debuggerplugin.cpp:372 +msgid "Debug core file" +msgstr "Depurar o arquivo 'core'" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "Escolha um processo ao qual se associar..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "" +"Não será associado ao processo %1: não é possível associar o depurador a si " +"próprio." + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "Associando-se ao processo %1" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "Depurar o processo %1" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Depurador" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"Não foi indicado nenhum grupo de ambientes; parece ser uma configuração " +"inválida; verifique por favor a configuração de execução '%1'. Usando o " +"grupo de ambientes padrão." + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "O depurador parou" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "A aplicação foi interrompida" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "O processo terminou" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "A aplicação está em execução" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "A aplicação está em pausa" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"O GDB terminou anormalmente

Isto será provavelmente um erro no GDB. " +"Veja a janela de resultado do 'gdb' e pare então o depurador" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "O GDB terminou anormalmente" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "" +"Comando do Gdb enviando enquanto o depurador estava parado
O " +"comando foi:
%1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Erro interno" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Comando inválido do depurador
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "Comando inválido do depurador" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "Terminou normalmente" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "Saiu com o sinal %1" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "O programa recebeu o sinal %1 (%2)" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "Programa rodando" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"GDB não pode utilizar os dispositivos tty* ou pty*.\n" +"Verifique as configurações de /dev/tty* e /dev/pty*\n" +"Como root, pode ser necessário fazer \"chmod ug+rw\" tty* e pty* e/ou " +"adicionar o usuário ao grupo tty usando \"usermod -G tty username\"." + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Aviso" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "" +"Erro do depurador

O depurador informou o seguinte erro:

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Erro do depurador" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "1 comando em espera\n" +msgstr[1] "%1 comandos em espera\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "%1 comando em processamento pelo gdb\n" +msgstr[1] "%1 comandos em processamento pelo gdb\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "Estado do depurador: %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"Classe de comandos atual: '%1'\n" +"Texto do comando atual: '%2'\n" +"Texto original do comando atual: '%3'\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "Estado do depurador" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "Precisa do gdb 7.0.0 ou superior.
Você está usando: %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "Erro do 'gdb'" + +#: debugsession.cpp:1417 +msgid "Could not start debugger:
" +msgstr "Não foi possível iniciar o depurador:
" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "Erro na inicialização" + +#: debugsession.cpp:1429 +msgid "Could not attach debugger:
" +msgstr "Não foi possível anexar o depurador:
" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"Janela de código-máquina

Uma vista do código-máquina da aplicação " +"em execução com a instrução atual selecionada. Você poderá andar instrução-a-" +"instrução, usando os botões da barra de depuração \"avançar sobre\" e " +"\"avançar para\"." + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Janela de decodificação" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Endereço" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Função" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Deslocamento" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Instrução" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "Não foi possível localizar a linha de comando de depuração '%1'." + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "Linha de comando de depuração não encontrada" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" +"

A componente de depuração encontrou um erro interno ao processar a " +"resposta do 'gdb'. Por favor envie um relatório de erros." + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"A exceção é: %1\n" +"A resposta do MI é: %2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Erro interno do depurador" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" +"Não foi possível iniciar o depurador.

Não foi possível executar o '%" +"1'. Certifique-se de que o local foi indicado corretamente." + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "Não foi possível iniciar o depurador" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "Configuração do GDB" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "Executa uma aplicação nativa no GDB" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "Saída do GDB" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"Saída do GDB

Mostra todos os comandos do 'gdb' sendo executados. " +"Você também poderá emitir qualquer outro comando do 'gdb' enquanto faz a " +"depuração.

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "Comando do &GDB:" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "" +"Coloca em pausa a execução da aplicação, para inserir comandos do 'gdb'" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Mostrar comandos internos" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"Controla se os comandos emitidos internamente pelo KDevelop deverão ser " +"apresentados ou não.
Esta opção irá afetar apenas os comandos futuros; " +"não irá adicionar ou remover os comandos já emitidos na janela." + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "Copiar todos" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Iniciar" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "Quantidade" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "OK" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Cancelar" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Visão da memória" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (1 byte)" +msgstr[1] "%2 (%1 bytes)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Mudar faixa e memória" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Recarregar" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Fechar esta visão" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Visões especiais do depurador" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "Anexar a um processo" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Selecionar o arquivo 'Core'" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "kdevelop: console da aplicação para depuração" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Configuração do depurador" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Executável do depurador:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "Executável 'gdb'" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"Para executar o programa \"gdb\" a partir da $PATH, deixe este campo em " +"branco. Para executar um 'gdb' personalizado, por exemplo de outra " +"arquitetura, indique aqui o nome do executável. Você poderá tanto executar o " +"'gdb' a partir do $PATH, mas tendo este outro nome (por exemplo, \"arm-gdb" +"\"), se digitar aqui o nome, como poderá indicar a localização completa do " +"executável 'gdb'." + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "" +"Executar o 'gdb' num console especial (principalmente nos projetos do " +"Automake)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"Se você quiser que o 'gdb' seja executado por um console ou ferramenta " +"especiais, indique-a aqui. O caso de uso principal é para os projetos " +"baseados no Automake, onde a aplicação é apenas de fato um programa e depois " +"é usada a 'libtool' para executar o código dentro do 'gdb'." + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "Con&sole de depuração:" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"Se você quiser que o 'gdb' seja executado por um console ou ferramenta " +"especiais, indique-a aqui. O caso de uso principal é para os projetos " +"baseados no Automake, onde a aplicação é apenas de fato um programa e depois " +"é usada a libtool para executar o código dentro do 'gdb'." + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Opções" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"A apresentação dos membros estáticos torna o GDB mais lento\n" +"ao produzir os dados dentro do KDE e do Qt.\n" +"Ele poderá alterar a \"assinatura\" dos dados em que\n" +"se baseia o QString e os seus amigos,\n" +"mas se precisar depurar dentro destes valores,\n" +"então o melhor é assinalar esta opção." + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Mostrar os &membros estáticos" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"Ao mostrar o código decodificado, você poderá optar\n" +"por ver os nomes dos métodos codificados ou não.\n" +"Neste caso, os nomes não-codificados são mais fáceis de ler." + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "Mostrar os nomes &decodificados" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"Se o GDB não tiver encontrado uma biblioteca que será carregada\n" +"através do \"dlopen\", então ele se recusará a definir um ponto de parada\n" +"para esse código. Você poderá indicar ao GDB para parar no carregamento\n" +"de uma biblioteca e tentar aí definir os pontos de parada pendentes. Veja\n" +"a documentação para saber mais detalhes sobre este comportamento.\n" +"\n" +"Se não estiver fazendo \"dlopen\" de bibliotecas, então desligue esta opção." + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "Tentar definir pontos de parada no carregamento das &bibliotecas" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"Isto permite-lhe inserir dados no terminal, sempre\n" +"que a sua aplicação contiver código de inserção de dados\n" +"(p.ex., 'cin', 'fgets', etc.). Se usar a inserção de dados\n" +"no terminal para a sua aplicação, então assinale esta opção.\n" +"Caso contrário, deixe-a desligada." + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "At&ivar um terminal separado para as E/S da aplicação" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"Este programa é usado para os comandos que se necessitem para conectar a um " +"executável remoto em funcionamento.\n" +"\tshell sleep 5\tesperar que o programa remoto se inicie\n" +"\ttarget remote ...\tconectar-se ao depurador remoto\n" +"\tcontinue\t[opcional] iniciar a depuração até ao primeiro ponto de parada" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "Depuração remota" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "Programa de &configuração do 'gdb':" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "Programa de configuração do GDB" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "Este programa é carregado pelo 'gdb' ao iniciar a depuração." + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "E&xecutar o programa:" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "O programa para iniciar a aplicação remota" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"Este programa de console é executado depois de o programa de configuração do " +"GDB ter sido carregado por este.\n" +"Ao depurar remotamente, este programa pretende de fato iniciar o processo " +"remoto.\n" +"[Espera-se que o executável de depuração esteja acessível no destino, talvez " +"através da sua transferência como passo de compilação final]\n" +"1) Descubra uma forma de executar um comando remotamente - rsh, ssh, " +"telnet, ...\n" +"2a) Execute o \"gdbserver ... aplicação\" no destino\n" +"ou, se o seu executável tiver o bloco de adaptação do 'gdb'\n" +"2b) Execute a \"aplicação\" no destino." + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "Executar o programa do '&gdb':" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "Um programa para se conectar à aplicação remota" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"Este programa é carregado pelo \"gdb\", depois de os dois programas " +"anteriores terem sido executados.\n" +"Este programa é usado para os comandos que se necessitem para conectar a um " +"executável remoto em funcionamento.\n" +"\tshell sleep 5\tesperar que o programa remoto se inicie\n" +"\ttarget remote ...\tconectar-se ao depurador remoto\n" +"\tcontinue\t[opcional] iniciar a depuração até ao primeiro ponto de parada." + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "Configuração do tracejamento" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"Ativar o tracejamento\n" +"

O tracejamento é um mecanismo que mostra automaticamente os valores das " +"expressões escolhidas e continua a execução quando for atingido um ponto de " +"parada. Você poderá pensar nele como se fosse uma depuração de 'printf' sem " +"necessidade de modificar o código.

" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Ativar o tracejamento" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "Texto de formato personalizado" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"Texto de formato personalizado\n" +"

Indique um texto de formato do estilo C que será usado para imprimir a " +"expressão escolhida. Por exemplo:\n" +"

Ponto de parada 1: g = %d

\n" +"Se o texto de formato personalizado não estiver ativo, os nomes e os valores " +"de todas as expressões serão impressos com \"%d\" como formato para todas as " +"expressões." + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "Expressões a imprimir:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Executar" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Barra de ferramentas do depurador" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Executável:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Arquivo 'Core':" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marcus Gama, Luiz Fernando Ranghetti" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "marcus.gama@gmail.com, elchevive@opensuse.org" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt_BR/kdevmakebuilder.po kdevelop-4.0.1/po/pt_BR/kdevmakebuilder.po --- kdevelop-3.9.98/po/pt_BR/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt_BR/kdevmakebuilder.po 2010-07-17 20:12:27.000000000 +0100 @@ -0,0 +1,168 @@ +# translation of kdevmakebuilder.po to Brazilian Portuguese +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Luiz Fernando Ranghetti , 2008, 2009, 2010. +# Marcus Vinícius de Andrade Gama , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-07-05 21:31-0300\n" +"Last-Translator: Luiz Fernando Ranghetti \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Construtor do Make" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Suporte para a compilação de projetos do Make" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Pasta de compilação '%1' inválida" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "Não foi possível criar o comando de compilação para o alvo '%1'" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "A tarefa foi mal-sucedida" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Falhou ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Concluído ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** Cancelado ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "compilando" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "gerando" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "editando as ligações" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "compilado" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "instalando" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "criando" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Ver" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Interromper ao primeiro erro:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Mostrar os comandos mas não executá-los:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Instalar como root:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Comando de instalação como 'root':" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Número de tarefas simultâneas:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Executável do Make:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Alvo padrão do 'make':" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Opções adicionais do 'make':" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Perfil ativo do ambiente:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Luiz Fernando Ranghetti, Marcus Gama" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "elchevive@opensuse.org, marcus.gama@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/pt_BR/kdevqthelp.po kdevelop-4.0.1/po/pt_BR/kdevqthelp.po --- kdevelop-3.9.98/po/pt_BR/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/pt_BR/kdevqthelp.po 2010-07-17 20:12:27.000000000 +0100 @@ -0,0 +1,70 @@ +# tradução do kdevqthelp.po para Brazilian Portuguese +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Luiz Fernando Ranghetti , 2009. +# André Marcelo Alvarenga , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-16 01:49-0300\n" +"Last-Translator: André Marcelo Alvarenga \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "Não foi possível localizar uma documentação para '%1'" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "Site do QtHelp" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Verificar a documentação do QT Help" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Luiz Fernando Ranghetti" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "elchevive@opensuse.org" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "Identificador a pesquisar:" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "Página de ajuda:" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "about:blank" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "Informação de depuração:" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/sl/CMakeLists.txt kdevelop-4.0.1/po/sl/CMakeLists.txt --- kdevelop-3.9.98/po/sl/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/sl/CMakeLists.txt 2010-07-17 20:12:53.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(sl ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/sl/kdevelop.po kdevelop-4.0.1/po/sl/kdevelop.po --- kdevelop-3.9.98/po/sl/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/sl/kdevelop.po 2010-07-17 20:12:53.000000000 +0100 @@ -0,0 +1,18269 @@ +# translation of kdevelop.po to Slovenian +# Translation of kdevelop.po to Slovenian +# KDEVELOP translation to Slovenian language. +# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +# $Id: kdevelop.po 1147666 2010-07-09 02:04:35Z scripty $ +# $Source$ +# +# Roman Maurer , 2002. +# Rok Papež , 2000. +# Gregor Rakar , 2003, 2004, 2005. +# Jure Repinc , 2006, 2007, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-04-26 00:03+0200\n" +"Last-Translator: Jure Repinc \n" +"Language-Team: Slovenian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" +"%100==4 ? 3 : 0);\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Koda" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "Datoteke projektov za KDevelop4" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "Integrirano razvijalno okolje KDevelop" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "© 1999-2010, razvijalci KDevelop" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "Ustvari novo sejo z danim imenom." + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "Seja, ki bo naložena. Podate lahko izvleček ali pa ime seje." + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "Izpiši razpoložljive seje in končaj" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" +"Razpoložljive seje (da odprete določeno, uporabite »-s IZVLEČEK« ali pa »-s " +"IME«):" + +#: main.cpp:79 +msgid "Hash" +msgstr "Izvleček" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "Ime: Odprti projekti" + +#: main.cpp:88 +msgid "[running]" +msgstr "[teče]" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "Določite program, ki ga želite razhroščevati." + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "Razhroščuj" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "Seja z imenom %1 že obstaja. Da jo odprete uporabite stikalo -s." + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"Neznane seje %1 ni moč odpreti. Za razpoložljive seje si oglejte stikalo --" +"sessions ali pa uporabite -cs za ustvarjanje nove." + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "Seja %1 že teče." + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"Ni moč zagnati KDevelop. V %1 manjka izvršljiva datoteka kdevelop.bin. " +"Popravite namestitev KDevelop." + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Vzdrževalec, arhitektura, podpora sistemom za nadzor različic, podpora za " +"upravljanje s projekti, podpora za projekte QMake" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Arhitektura, uporabniški vmesnik Sublime, podpora za Ruby" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Veriga definicija-uporaba, podpora za C++, krmarjenje po kodi, dokončevanje " +"kode, podpora pri pisanju kode, refaktoriranje" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "Podpora za CMake, podpora za zaganjanje, podpora za sriptanje s Kross" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "Integracija z GDB" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Integracija urejevalnika besedil, veriga definicija-uporaba" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "" +"Skrbnik spletne strani, dokumentacija programskega vmesnika, popravki za " +"Doxygen in autoproject" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "Integracija z GDB, vstavki za spletni razvoj" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +#, fuzzy +#| msgid "Generic manager, Webdevelopment Plugins" +msgid "Generic manager, Webdevelopment Plugins" +msgstr "Splošni upravljalnik, vstavki za spletni razvoj" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "Podpora za astyle in indent" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "Porazdeljeni sistemi upravljanja različic, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "SnippetPart, razhroščevalnik in popravki uporabnosti" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "" +"Vstavek za Subversion, upravljalnik za Make po meri, splošne izboljšave" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "Prenos na Qt 3, popravki, valgrind, diff in podpora preforce" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "Razčlenjevalnik za C++" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "Avtorji KWrite" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Urejevalna komponenta Kate" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Koda za Oblikovalca" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Prispevali k starejšim različicam:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "Avtorji KHTML" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "Komponenta dokumentacije HTML" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "Prvotna ideja, osnovna ahitektura, veliko prvotne izvorne kode" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, popravki" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Podpora javi in Objective C" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Vmesnik za razhroščevalnik" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "Podpora PHP, stvari v zvezi s kontekstnimi meniji" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "Predloge za programe KDE" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Del za dist, podpora bash, predloge za programe" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Več komponent, indeksiranje htdig" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Pomoč z upravljalnikom Automake in trajnim hranjenjem razredov" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Pomoč pri infrastrukturi KParts" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Podpora Adi" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "Upravitelj projektov QMake" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "Načini MDI, QEditor, popravki" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "PartExplorer, prenova CvsPart, dodatki, popravki" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Vstavki za zamenjavo, zaznamke, seznam datotek in CTags. Splošne izboljšave " +"in popravki" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Del za ustvarjanje datotek ter ostali biti in popravki" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "Podpora ClearCase" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Podpora Ruby" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Dokumentacija za fortran" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Pripomoček za dokumentacijo python" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Čarovnik za doxygen" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Komponenta za izbirnik datotek" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "Dokončevanje kode za C++, trajno hranjenje razredov" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Popravki" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Pomoč pri podpori za Perl" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Prikaz indeksa dokumentacije" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Iskalec dokumentacije, popravki za qmake projectmanager, izboljšave " +"uporabnosti, popravki hroščev ..." + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "Dodatki za upravitelja projektov QMake" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "Čiščenje in popravki za QEditor, automake in veliko drugih stvari" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Grafika za programski jezik Ruby" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "Lokacija projekta za naložiti" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Datoteke za naložiti" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" +"Zaženi razhroščevalnik, npr. GDB. Slediti mora program, ki naj bo " +"razhroščevan - vključno z argumenti." + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (uporablja KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "Ni moč najti zaganjalnika %1" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "Ni moč odpreti %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "&Datoteka" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "&Urejanje" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "&Napredno" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "&Videz" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "&Zvijanje kode" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "&Orodja" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "Dokončevanje besed" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "&Nastavitve" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Glavna orodjarna" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "Seja" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Projekt" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "&Poženi" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Krmarjenje" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Datoteka" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Urejanje" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "Urejevalnik" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Koda" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Okno" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "&Nastavitve" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Rok Papež,Roman Maurer,Gregor Rakar" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "rok@slo.net,roman.maurer@amis.net,gregor.rakar@kiss.si" + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + + +#, fuzzy + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + +#, fuzzy + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + +#, fuzzy + + + + + + + + +#, fuzzy + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/sv/CMakeLists.txt kdevelop-4.0.1/po/sv/CMakeLists.txt --- kdevelop-3.9.98/po/sv/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/sv/CMakeLists.txt 2010-07-17 20:13:04.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(sv ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/sv/kdevcmakebuilder.po kdevelop-4.0.1/po/sv/kdevcmakebuilder.po --- kdevelop-3.9.98/po/sv/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/sv/kdevcmakebuilder.po 2010-07-17 20:13:04.000000000 +0100 @@ -0,0 +1,91 @@ +# translation of kdevcmakebuilder.po to Swedish +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Stefan Asserhäll , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-02-19 19:52+0100\n" +"Last-Translator: Stefan Asserhäll \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "Bygg med CMake" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Stöd för att bygga projekt med CMake" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "Ingen byggkatalog inställd, kan inte bygga" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "Avbryter byggning" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "Ingen byggkatalog inställd, kan inte rensa" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "Avbryter rensning" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "Ingen byggkatalog inställd, kan inte installera" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "Avbryter installation" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "Ingen byggkatalog inställd, kan inte konfigurera" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "Avbryter konfigurering" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "Ingen byggkatalog inställd, kan inte rensa byggkatalog" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "Det är inte möjligt att rensa byggkatalogen" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "Jobb misslyckades" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "CMake-binärprogram:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Stefan Asserhäll" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "stefan.asserhall@comhem.se" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/sv/kdevcmake.po kdevelop-4.0.1/po/sv/kdevcmake.po --- kdevelop-3.9.98/po/sv/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/sv/kdevcmake.po 2010-07-17 20:13:04.000000000 +0100 @@ -0,0 +1,462 @@ +# translation of kdevcmake.po to Swedish +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Stefan Asserhäll , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-05-18 18:53+0200\n" +"Last-Translator: Stefan Asserhäll \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "CMake-dokumentation" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Stöd för CMake-dokumentation" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Cache-värde: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Cache-dokumentation: %1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "Kommandon" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Variabel" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "Modul" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "Egenskap" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "Policy" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "CMake innehållssida" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 är ett kommando som avråds från, och som inte ska användas" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Inte färdig funktion. " + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Namn" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Typ" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Värde" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Kommentar" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Avancerat" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"Katalogen %1 kommer nu att tas bort från KDevelops lista.\n" +"Vill du att KDevelop också ska ta bort den i filsystemet?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "Kunde inte ta bort: %1.\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "By&t färger" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "Allmänt" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "Projektet är 1 dag gammalt" +msgstr[1] "Projektet är %1 dagar gammalt" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "Inställningar ändrades" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "Ett KDE4-program" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4pgm" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "(C) 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Dokument att öppna" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Anpassa en byggkatalog" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "Anpassa en byggkatalog för %1" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "Du måste välja ett cmake binärprogram." + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "Du måste ange en byggkatalog." + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "Använder en byggkatalog som redan skapats." + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "Skapar en ny byggkatalog." + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "Byggkatalog redan inställd." + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "Den här byggkatalogen är för %1, men projektkatalogen är %2." + +#: cmakebuilddirchooser.cpp:172 +msgid "You may not select a relative build directory." +msgstr "Du får inte välja en relativ byggkatalog." + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "Den valda byggkatalogen är inte tom." + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "Hantering av CMake" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Stöd för att hantera CMake-projekt" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Gå till måldefinition" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Skapa en katalog som heter '%1'." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop - Stöd för CMake" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "Kunde inte skapa filen CMakeLists.txt i katalogen." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "Kunde inte spara ändringen." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Ta bort en katalog som heter '%1'." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Ta bort en fil som heter '%1'." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Lägg till en fil som heter '%1' till målet '%2'." + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "Kan inte spara ändringen." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "Byt namn på en katalog som heter '%1'." + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "Byggkatalogen fanns inte och kunde inte skapas." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Fel när byggkatalogen skulle skapas" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "OGILTIG" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Kommando" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Makro" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Sökväg" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "CMake-&binärfil:" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "&Byggkatalog:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "&Installationsprefix:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "Bygg&typ:" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"KDevelop har hittat mer än en möjlig rot för projektet. Välj den riktiga." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Stefan Asserhäll" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "stefan.asserhall@comhem.se" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "&Flytta" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Lägg till" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Ta bort" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Cachevärden" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Kommentar:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Visa avancerat" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "CMake-katalog" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Visa avancerade värden" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "hej, allesamman" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Bakgrundsfärg:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Välj en ny bakgrundsfärg" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Ändra bakgrundsfärg genom att klicka här och välja ny färg i färgdialogrutan.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Projektålder:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Förgrundsfärg:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Välj en ny förgrundsfärg" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Ändra förgrundsfärg genom att klicka här och välja ny färg i färgdialogrutan.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Ställ in projektets ålder (i dagar)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "Ändra projektets ålder (i dagar) genom att välja ett nytt antal dagar." \ No newline at end of file diff -Nru kdevelop-3.9.98/po/sv/kdevcpp.po kdevelop-4.0.1/po/sv/kdevcpp.po --- kdevelop-3.9.98/po/sv/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/sv/kdevcpp.po 2010-07-17 20:13:04.000000000 +0100 @@ -0,0 +1,919 @@ +# translation of kdevcpp.po to Swedish +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Stefan Asserhäll , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-01 21:26+0200\n" +"Last-Translator: Stefan Asserhäll \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "Inte inkluderad" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Initiera" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Inte inkluderad behållare" + +#: codecompletion/context.cpp:1272 +#, kde-format +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "1 överlastning av %2" +msgstr[1] "%1 överlastningar av %2" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "Anslut till %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Signaler/slots" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "Virtuellt överskriden" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Implementera funktion" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "Inbyggd i C++" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Överskriden" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Implementera" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Skapa slot" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "Från %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Lägg till inkluderingsdirektiv" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Lägg till framåtdeklaration" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "Lägg till framåtdeklaration" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "Alternativ för privat klassimplementering" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Avbryt" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "Uppdatera definition från %1(%2) till (%3)" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Misslyckades verkställa ändringarna: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"Omstrukturering är en experimentell funktion. Den kan skada koden. Försäkra " +"dig om att göra en säkerhetskopia innan den används." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "Byt namn på %1" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "Skapa separat definition för %1" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Skapa klass" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "Ingen deklaration under markören" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "Ingen källkodsfil tillgänglig för %1." + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "Misslyckades uppdatera definition-användningskedja för %1." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "Kan inte skapa definition för den här deklarationen." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "Misslyckades infoga" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "Misslyckades verkställa ändringar" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "Inget dokument för %1" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "Deklaration förlorad under uppdatering" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "Deklarationen finns i en icke-skrivbar fil %1." + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "Nytt namn:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Byt namn" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Observera: Namnbyte görs också på alla överlastade funktioner, " +"överlastningar, framåtdeklarationer, etc." + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Användningar" + +#: codegen/simplerefactoring.cpp:445 +msgid "Declaration Info" +msgstr "Information om deklarationer" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "Byter namn på \"%1\" till \"%2\"" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "Misslyckades verkställa ändringar: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Ställ in egna deklarationssökvägar" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "Misslyckades spara egna deklarationssökvägar i katalogen: %1" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Lägg till egen deklarationssökväg" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Öppna projekt" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "Hittades inte: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "Ingenting markerat, lägger inte till i ett mål." + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "Kunde inte lösa upp basklass, lägger till den indirekt: %1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "Ogiltig basklass: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Skapa lokal deklaration %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "Deklarera %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "Deklaration hittades inte: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Inkluderade" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Inkluderad av" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Definierade makron" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Funktionsmakro" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Makro" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "Implementering behandlad av preprocessor:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "Implementering:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "Bygghantering för projektet %1 returnerade inte en byggkatalog" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"Upplösning av deklarationssökvägar behöver byggkatalogen för att kunna lösa " +"upp ytterligare deklarationssökvägar. Överväg att ställa in en byggkatalog i " +"projekthanteringen om du inte har gjort det ännu." + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "Bygghantering returnerade inte en deklarationssökväg" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"Bygghantering returnerade inte sökvägen till deklarationsfiler %1, som " +"hittades av upplösning av deklarationssökvägar" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Upplösning av deklarationssökvägar: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Använd byggkatalog: \"%1\"\n" +"Upplösning av deklarationssökvägar: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" +"Försökte följa deklarationssökvägar medan en annan följprocess fortfarande " +"körde" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "Makefile saknas i katalogen \"%1\"" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "Problem med försök att bestämma deklarationssökvägar för %1" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "Lagrad i cache: %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "Filnamnet %1 verkar vara felaktigt" + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "Misslyckades extrahera ny arbetskatalog" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "Utmatning: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "Rekursivt bygganrop misslyckades" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "Parameter-strängen \"%1\" verkar inte vara giltig. Utmatning: %2." + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "Katalogen \"%1\" finns inte. Utmatning: %2." + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "Felformat rekursivt bygganrop" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "Kunde inte extrahera deklarationssökvägar från make-utmatning" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Katalog: \"%1\" Kommando: \"%2\" Utmatning: \"%3\"" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "KDE:s framåtdeklarationsgenerator" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "" +"Ett program som skapar framåtdeklarationsfiler (som Qt:s deklarationsfiler) " +"från källkod." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "© 2006, Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"KDE:s deklarationskatalog: deklarationsfiler finns i includes/KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Bygginformation från XML-verktyget i CMake" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "Oavslutad #if-sats" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "tecken %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "Förväntade \"identifierare\", hittade: %1" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
Symboltext
%1
Indata
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "Förväntade \")\", hittade %1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "Division med noll" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Indatatext: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "förväntade ``:'' = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else utan #if" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "#endif utan #if på utdatarad %1" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Makrofel" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "Anrop till makro %1 saknar argument nummer %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Formella argument: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "felaktig indata: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "Filen importerar dokumentet som för närvarande är öppnat
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "I deklarationssökväg %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Inkluderad via %1
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Katalog %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "I deklarationssökväg nummer %1" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Inkluderar" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Deklarationssökväg" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "Inkluderas av" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "C++ stöd" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "Stöd för C++ språket" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "Filer" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "&Byt definition med deklaration" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "Skapa &ny klass" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Byt namn på deklaration" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "Flytta in i källkod" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Tömd av preprocessor
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "Tolkar inkluderade filer" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "Tolkar själva filen" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "Uppdaterar inte definition-användningskedja för %1" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "Byggning använder" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Klar" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "Filen inkluderades rekursivt inne i sig själv: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "Deklarationsfilen hittades inte: %1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"Genomsökta deklarationssökvägar:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "Kunde inte öppna filen '%1'" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "Filen kunde inte läsas." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "Filen kunde inte öppnas." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "Filrättigheter förhindrar att öppna för läsning." + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Navigering" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Kod" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Stefan Asserhäll" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "stefan.asserhall@comhem.se" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "C++ alternativ" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Exportera:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Makro:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Öppen" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Skyddad" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Privat" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "Slot" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Signal" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Lagringskatalog" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"Den egna deklarationssökvägen kommer att lagras i en speciell fil som heter " +"\".kdev_include_paths\", lagrad i källkodskatalogen. Den egna sökvägen " +"kommer att användas för alla filer under den katalogen." + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Lagringskatalog:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Automatisk upplösning" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"Om projektet använder enkla Make-filer, kan det vara möjligt att automatiskt " +"lösa upp deklarationssökvägarna med verktyget make. För att göra det, ställ " +"in en avbildning från källkodskatalog till byggkatalog här." + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Källkodskatalog:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Byggkatalog:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Egna deklarationssökvägar" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "Du kan lägga till en lista med egna deklarationssökvägar här." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"Observera: Inställningarna påverkar inte kompilatorn eller projektet på " +"något sätt, de används bara för att hitta inkluderade deklarationer inne i " +"KDevelop." + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" +"Alternativ och inställningar för att flytta privata datafält i en klass till " +"en privat struktur" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "Privat strukturnamn:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Alternativ" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

Normal deklareras privata " +"implementeringsstrukturer som struct för att normalt få öppen åtkomst.

\n" +"

Markera rutan om du vill " +"att den privata implementeringsstrukturen ska deklareras som en klass med öppen åtkomst.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Använd klass istället för struct" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

Flytta alla privata " +"metoder som för närvarande är initierade i konstruktorns initieringslista " +"till konstruktorns initieringslista i den privata implementeringsstrukturen." +"

\n" +"

\n" +"

Observera: Alla referenser och " +"variabler med typer som inte erbjuder standardkonstruktorer flyttas " +"oberoende av det här alternativets tillstånd.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "Flytta initiering av variabel till privat struktur" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" +"Flytta alla privata metoder som för närvarande är deklarerade till den " +"privata implementeringsstrukturen." + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "Flytta privata metoder" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Pekarnamn:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "" +"Namnet på medlemsvariabeln som kommer att vara pekaren som anger den privata " +"implementeringen" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/sv/kdevcustommake.po kdevelop-4.0.1/po/sv/kdevcustommake.po --- kdevelop-3.9.98/po/sv/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/sv/kdevcustommake.po 2010-07-17 20:13:04.000000000 +0100 @@ -0,0 +1,43 @@ +# translation of kdevcustommake.po to Swedish +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Stefan Asserhäll , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-02-19 19:49+0100\n" +"Last-Translator: Stefan Asserhäll \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Egen hantering av byggfiler" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Stöd för att hantera egna projekt med byggfiler" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Kör" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Stefan Asserhäll" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "stefan.asserhall@comhem.se" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/sv/kdevelop.po kdevelop-4.0.1/po/sv/kdevelop.po --- kdevelop-3.9.98/po/sv/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/sv/kdevelop.po 2010-07-17 20:13:04.000000000 +0100 @@ -0,0 +1,742 @@ +# translation of kdevelop.po to Swedish +# Copyright (C). +# +# Stefan Asserhäll , 2004, 2005, 2006, 2007, 2008, 2009, 2010. +# Stefan Asserhall , 2005. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-01 21:26+0200\n" +"Last-Translator: Stefan Asserhäll \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Kod" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "KDevelop4-projektfiler" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "Den integrerade utvecklingsmiljön KDevelop" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "Copyright 1999-2010, KDevelop-utvecklarna" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "Skapa en ny session med ett angivet namn." + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "" +"Session att läsa in. Du kan antingen skicka sessionens checksumma eller namn." + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "Lista tillgängliga sessioner och avsluta" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" +"Tillgängliga sessioner (använd '-s HASH' eller '-s NAMN' för att öppna en " +"specifik):" + +#: main.cpp:79 +msgid "Hash" +msgstr "Checksumma" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "Namn: Öppnade projekt" + +#: main.cpp:88 +msgid "[running]" +msgstr "[kör]" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "Ange binärfilen du vill avlusa." + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "Avlusa" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "" +"En session med namnet %1 finns redan. Använd väljaren -s för att öppna den." + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"Kan inte öppna okänd session %1. Använd väljaren --sessions för att se " +"tillgängliga sessioner, eller använd -cs för att skapa en ny." + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "Sessionen %1 kör redan" + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"Kan inte starta KDevelop. Den körbara filen kdevelop.bin saknas i %1. " +"Korrigera installationen av KDevelop." + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Underhåll, arkitektur, stöd för versionskontrollsystem, " +"projekthanteringsstöd, QMake-projekthantering" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Arkitektur, användargränssnittet Sublime, stöd för Ruby" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Definition-användningskedja, C++ stöd, Kodnavigering, kodkomplettering, " +"kodningshjälp, omstrukturering" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "Stöd för CMake, stöd för körning, stöd för Kross" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "Integrering av GDB" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Integrering av texteditor, definition-användningskedja" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "" +"Administratör av webbplatsen, dokumentation av programmeringsgränssnitt, " +"programfixar för Doxygen och autoproject" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "Integrering med GDB, insticksprogram för webbutveckling" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "Allmän projektledare, insticksprogram för webbutveckling" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "Stöd för astyle och indent" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "Distribuerade versionskontrollsystem, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "" +"Delprogram för kodsnuttar, avlusare och programfixar för bättre användbarhet" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "" +"Insticksprogram för Subversion, egen bygghantering, övergripande " +"förbättringar" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "" +"Överföring till Qt 3, programfixar, stöd för valgrind, diff och perforce" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "C++ tolk" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "Kwrite-upphovsmännen" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Kate-editorkomponent" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Designer-kod" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Bidragsgivare till äldre versioner:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "KHTML-upphovsmännen" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "HTML-dokumentationskomponent" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "Ursprunglig idé, grundarkitektur, mycket ursprunglig källkod" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, felrättningar" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Stöd för Java och Objective C" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Gränssnitt för avlusare" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "Stöd för PHP, sammanhangsberoende menyer" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "KDE programmallar" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Dist-delprogram, stöd för bash, programmallar" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Flera komponenter, indexering med htdig" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Hjälp med Automake-hantering och bestående klasslagring" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Hjälp med KParts infrastruktur" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Stöd för Ada" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "QMake-projekthantering" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "Flerfönsterlägen, QEditor, felrättningar" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "" +"Delprogramutforskare, omkonstruktion av CVS-delprogram, programfixar, fel" +"(rättningar)" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Insticksprogrammen Ersätt, Bokmärken, Fillista och Ctags2. Övergripande " +"förbättringar och programfixar" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Delprogrammet Skapa filer, andra småsaker och programfixar" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "Stöd för ClearCase" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Stöd för Ruby" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Fortran-dokumentation" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Python-dokumentationsverktyg" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Doxygen-guide" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Filvalskomponent" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "C++ kodkomplettering, bestående klasslagring" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Programfixar" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Hjälp med stöd för Perl" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Dokumentationsindexvy" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Dokumentationssökning, programfixar för QMake-projekthantering, " +"förbättringar av användbarhet, felrättningar, ... " + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "Programfixar för QMake-projekthantering" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "Uppstädning och felrättningar av qEditor, AutoMake och mycket annat" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Grafik för språket Ruby" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "Webbadress till projekt att läsa in" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Filer att läsa in" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" +"Starta avlusare, till exempel gdb. Binärfilen som ska avlusas måste följa, " +"inklusive väljare." + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (använder KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "Kan inte hitta typ av startinställning för datorn" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "Kan inte hitta startprogrammet %1" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "Kunde inte öppna %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "&Arkiv" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "&Redigera" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "Avan&cerat" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "&Visa" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "&Kodvikning" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "Verk&tyg" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "Ordkomplettering" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "In&ställningar" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Huvudverktygsrad" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "Session" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Projekt" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "&Kör" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Navigering" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Arkiv" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Redigera" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "Editor" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Kod" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Fönster" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Inställningar" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Stefan Asserhäll" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "stefan.asserhall@comhem.se" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/sv/kdevformatters.po kdevelop-4.0.1/po/sv/kdevformatters.po --- kdevelop-3.9.98/po/sv/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/sv/kdevformatters.po 2010-07-17 20:13:04.000000000 +0100 @@ -0,0 +1,471 @@ +# translation of kdevformatters.po to Swedish +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Stefan Asserhäll , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-14 20:13+0200\n" +"Last-Translator: Stefan Asserhäll \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "Formatering med Astyle" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "Ett formateringsverktyg som använder Astyle" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Artistic style är ett verktyg för indentering, formatering, och " +"försköning av källkod för programspråken C, C++, C# och Java.
Hemsida: " +"http://astyle.sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Formatering med Indent" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "Ett formateringsverktyg som använder Indent" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"Indentera och Formatera källkod för C-program.
Programmet " +"'indent' kan användas för att göra kod mer lättläst. Det kan också " +"konvertera från en stil att skriva C till en annan.
indent " +"förstår en hel del om C-syntax, men försöker också klara av ofullständig och " +"felaktig syntax.
Hemsida: http://www.gnu.org/software/indent" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Indentering" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Tabulatortecken" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Använd alltid tabulatortecken" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Mellanslag" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"Antal mellanslag som konverteras till ett tabulatortecken.\n" +"Antal mellanslag per tabulatortecken styrs av editorn." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Konvertera tabulatortecken till mellanslag." + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Kon&vertera tabulatortecken till mellanslag" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "Fyll i tomma rader med blanktecken från föregående rader." + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "F&yll tomma rader" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Indentera" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Block" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Parenteser" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "Case-satser" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Klass" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Etiketter" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Namnrymder" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Preprocessordirektiv" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "Switch-satser" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"Indentera maximalt antal mellanslag i en fortsättningssats,\n" +"relativt föregående rad." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Indentera minimalt antal mellanslag i ett fortsättningsvillkor\n" +"som tillhör en villkorsdeklaration." + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Minimum i villkor:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "Två gånger nuvarande" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Maximum i sats:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Övriga" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Typ" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Dela krullparenteser innan avslutande deklarationer (t.ex. 'else', " +"'catch', ...)\n" +"från deras omedelbart föregående avslutande krullparenteser." + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "Dela vid avslutande &deklarationer" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "Ingen ändring" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Anslut" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Bryt" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Infoga tomma rader omkring block, etiketter, klasser, ... som inte hör " +"ihop,\n" +"Kända problem:\n" +"\n" +"1. Om en sats INTE ingår i ett block, följs\n" +"alla efterföljande satser av en tom rad.\n" +"Satser omgivna av ett block formateras\n" +"riktigt.\n" +"\n" +"2. Kommentarer skiljs från blocket.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "Dela &block" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Som Dela block, men infogar också tomma rader \n" +"omkring avslutande deklarationer (t.ex. 'else', 'catch', ...).\n" +"\n" +"Kända problem:\n" +"\n" +"1. Om en sats INTE ingår i ett block, följs\n" +"alla efterföljande satser av en tom rad.\n" +"Satser omgivna av ett block formateras\n" +"riktigt.\n" +"\n" +"2. Kommentarer skiljs från blocket.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "Dela alla bl&ock" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "Dela 'else if()'-satser på två skilda rader." + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "Dela i&f-else" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Vaddering" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Vaddera parenteser" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Ta bort vaddering" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "Bara innanför" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "Bara utanför" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "Innanför och utanför" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Infoga vadderande mellanslag omkring operatorer.\n" +"När de väl vadderats, förblir operatorer vadderade. Det\n" +"finns inget alternativ för att ta bort vaddering av operatorer." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "Lägg till &mellanslag omkring operatorer" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "Enrader" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" +"Bryt inte rader som innehåller flera satser till\n" +"flera enskilda rader med en sats vardera." + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "Behåll enrads&satser" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "Bryt inte block som helt och hållet får plats på en rad." + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "Behåll enrads&block" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Stefan Asserhäll" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "stefan.asserhall@comhem.se" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/sv/kdevgdb.po kdevelop-4.0.1/po/sv/kdevgdb.po --- kdevelop-3.9.98/po/sv/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/sv/kdevgdb.po 2010-07-17 20:13:04.000000000 +0100 @@ -0,0 +1,871 @@ +# translation of kdevgdb.po to Swedish +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Stefan Asserhäll , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevgdb\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-19 19:31+0100\n" +"Last-Translator: Stefan Asserhäll \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "Bevakning" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "Senaste" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
Tidigare värde: %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
Nytt värde: %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "Stöd för gdb" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Stöd för att köra C++ program i gdb" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Visa assemblerkod" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "Gdb" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Undersök minnesdump..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Undersök minnesdump" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"Undersök minnesdump

Detta laddar en minnesdump, core, som typiskt " +"har skapats efter programmet kraschat, t.ex. med ett segmenteringsfel. " +"Minnesdumpen innehåller en avbildning av programmets minne vid tiden då det " +"kraschade, vilket gör en post-mortem analys möjlig.

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "Anslut till process" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "Anslut till process..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "" +"Anslut till process

Ansluter avlusaren till en process som kör.

" + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "Beräkna: %1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "" +"Utvärdera uttryck

Visar värdet av uttrycket under markören.

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "Bevaka: %1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Bevaka uttryck

Lägger till uttrycket under markören till variabel/" +"bevakningslistan.

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Välj en minnesdump att undersöka..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "Undersöker minnesdump %1" + +#: debuggerplugin.cpp:372 +msgid "Debug core file" +msgstr "Avlusa minnesdump" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "Välj en process att ansluta till..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "" +"Ansluter inte till processen %1: kan inte ansluta avlusaren till sig själv." + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "Ansluter till processen %1" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "Avlusa processen %1" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Avlusare" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"Ingen miljögrupp angiven. Detta verkar vara en felaktig inställning. " +"Kontrollera körinställningen '%1'. Använder standardmiljögruppen." + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "Avlusare stoppad" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "Programmet avbrutet" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "Processen avslutades" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "Programmet kör" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "Programmet gör paus" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"Gdb avslutades onormalt

Det här är troligen ett fel i gdb. " +"Kontrollera utmatningsfönstret i gdb och stoppa därefter avlusaren." + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "Gdb avslutade onormalt" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "" +"Kommando till gdb skickat när avlusaren inte kör
Kommandot är:
%" +"1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Internt fel" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Felaktigt kommando till avlusaren
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "felaktigt avlusarkommando" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "Avslutade normalt" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "Avslutades med signal %1" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "Programmet tog emot signalen %1 (%2)" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "Kör programmet" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"Gdb kan inte använda tty* eller pty* enheter\n" +"Kontrollera inställningarna för /dev/tty* och /dev/pty*\n" +"Som root kan du behöva göra \"chmod ug+rw\" för tty* och pty* enheter och/" +"eller lägga till användaren till tty-gruppen med \"usermod -G tty " +"användarnamn\"." + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Varning" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "Fel i avlusaren

Avlusaren rapporterade följande fel:

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Fel i avlusaren" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "1 kommando i kö\n" +msgstr[1] "%1 kommandon i kö\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "1 kommando behandlas av gdb\n" +msgstr[1] "%1 kommandon behandlas av gdb\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "Avlusarens status: %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"Nuvarande kommandots klass: '%1'\n" +"Nuvarande kommandotext: '%2'\n" +"Nuvarande kommandots originaltext: '%3'\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "Avlusarens status" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "Du behöver gdb 7.0.0 eller senare.
Du använder: %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "Fel i gdb" + +#: debugsession.cpp:1417 +msgid "Could not start debugger:
" +msgstr "Kunde inte starta avlusaren:
" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "Startfel" + +#: debugsession.cpp:1429 +msgid "Could not attach debugger:
" +msgstr "Kunde inte ansluta avlusaren:
" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"Maskinkod

Visar maskinkoden för ditt program som kör, med den " +"nuvarande instruktionen markerad. Du kan stega instruktion för instruktion " +"med knapparna \"stega förbi instruktion\" och \"stega in i instruktion\" på " +"avlusarens verktygsrad." + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Visning av assemblerkod" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Adress" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Funktion" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Position" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Instruktion" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "Kunde inte hitta avlusningsskalet '%1'." + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "Avlusningsskal hittades inte" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" +"

Avlusningskomponenten upptäckte ett internt fel när ett svar från gdb " +"behandlades. Skicka gärna in en felrapport." + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"Undantaget är: %1\n" +"MI-svaret är: %2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Internt fel i avlusaren" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" +"Kunde inte starta avlusaren.

Kunde inte köra '%1'. Försäkra dig om " +"att sökvägsnamnet är riktigt angivet." + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "Kunde inte starta avlusaren" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "Inställning av GDB" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "Kör ett program för den här datorn i GDB" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "Utmatning från gdb" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"Utmatning från gdb

Visar alla gdb-kommandon som körs. Du kan också " +"utföra alla andra gdb-kommandon under avlusning.

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "&Gdb-kommando:" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "Gör paus i körningen av programmet för att skriva in gdb-kommandon" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Visa interna kommandon" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"Styr om kommandon som ges internt av KDevelop ska visas eller inte." +"
Alternativet påverkar bara framtida kommandon, det lägger inte till " +"eller tar bort kommandon som redan utförts." + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "Kopiera alla" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Start" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "Storlek" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "Ok" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Avbryt" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Minnesvy" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (1 byte)" +msgstr[1] "%2 (%1 byte)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Ändra minnesintervall" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Uppdatera" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Stäng vyn" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Särskilda vyer i avlusaren" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "Anslut till en process" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Välj minnesdump" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "kdevelop: konsol för avlusare" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Avlusningsinställningar" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Körbart avlusningsprogram:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "Körbart gdb-program" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"Låt fältet vara tomt för att köra \"gdb\"-programmet i sökvägen. Skriv in " +"namnet på det körbara programmet för att köra en egen gdb, till exempel för " +"en annan arkitektur. Du kan antingen köra gdb från sökvägen men med ett " +"annat namn (till exempel \"arm-gdb\") genom att skriva in namnet här, eller " +"ange en fullständig sökväg till gdb-programmet." + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "Kör gdb i ett särskilt skal (i huvudsak för automake-projekt)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"Om du vill att gdb ska köras av ett särskilt skal eller verktyg, infoga det " +"här. Det huvudsakliga användarfallet är för projekt baserade på Automake där " +"programmet i själva verket bara är ett skript, och libtool behövs för att få " +"det att köra inne i gdb." + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "Avlusnings&skal:" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"Om du vill att gdb ska köras av ett särskilt skal eller verktyg, infoga det " +"här. Det huvudsakliga användarfallet är för projekt baserade på Automake där " +"programmet i själva verket bara är ett skript, och libtool behövs för " +"att få det att köra inne i gdb." + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Alternativ" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"Visning av statiska medlemmar gör GDB långsammare\n" +"när det gäller att hantera data inne i KDE och QT.\n" +"Det kan ändra \"signatur\" för data som\n" +"QString och liknande klasser förlitar sig på,\n" +"men om du behöver avlusa dessa värden,\n" +"markera då det här alternativet." + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Visa statiska &medlemmar" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"När assemblerkod visas kan du välja att\n" +"se metodernas behandlade namn.\n" +"Dock är icke-behandlade namn lättare att läsa." + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "&Visa obehandlade namn" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"Om GDB inte har sett ett bibliotek som ska laddas med\n" +"\"dlopen\", vägrar den sätta en brytpunkt i den koden.\n" +"Med det här alternativet stannar GDB när ett bibliotek\n" +"laddas, och försöker på så sätt sätta de vilande brytpunkterna.\n" +"Se dokumentationen för mer detaljer relaterat till beteendet.\n" +"\n" +"Om du inte använder \"dlopen\" för bibliotek, lämna det omarkerat." + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "Försök sätta &brytpunkter när bibliotek laddas" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"Det här tillåter att du anger terminalinmatning när ditt\n" +"program innehåller terminalinmatningskod (t.ex. cin, fgets etc.)\n" +"Om du använder terminalinmatning i ditt program, markera det\n" +"här alternativet. Annars lämna det av." + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "Aktivera separat &terminal för programmets in- och utmatning" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"Det här skriptet är avsett för de verkliga kommandon som behövs för att " +"ansluta till ett fjärrprogram som kör.\n" +"\tshell sleep 5\tvänta på att fjärrprogrammet ska starta\n" +"\ttarget remote ...\tanslut till fjärravlusaren\n" +"\tcontinue\t[valfritt] kör avlusaren till första brytpunkten." + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "Fjärravlusning" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "&Inställningsskript för gdb:" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "Inställningsskript för gdb" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "Det här skriptet körs av gdb när avlusningen påbörjas." + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "Kör &gdb-skript:" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "Skript för att starta fjärrprogram" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"Det här skriptet körs efter inställningsskriptet har körts av gdb.\n" +"Vid fjärravlusning, är det här skriptet avsett att verkligen starta " +"fjärrprocessen.\n" +"(Det antas att det körbara programmet som ska avlusas kan nås på målet, " +"kanske genom att ladda ner det som sista byggsteg)\n" +"1) Ta reda på ett sätt att köra ett kommando på målet: rsh, ssh, " +"telnet, ...\n" +"2a) Kör \"gdbserver ... program\" på målet.\n" +"2b) Kör \"program\" på målet." + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "Kör &gdb-skript:" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "Skript för att ansluta till fjärrprogram" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"Det här skriptet körs av gdb efter de två föregående skripten har körts.\n" +"Skriptet är avsett för de verkliga kommandon som behövs för att ansluta till " +"ett fjärrprogram som kör.\n" +"\tshell sleep 5\tvänta på att fjärrprogrammet ska starta\n" +"\ttarget remote ...\tanslut till fjärravlusaren\n" +"\tcontinue\t[valfritt] kör avlusaren till första brytpunkten." + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "Spårningsinställning" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"Aktivera spårning\n" +"

Spårning är en mekanism att automatiskt skriva ut värden för valda " +"uttryck och fortsätta köra när en brytpunkt träffas på. Du kan se det som " +"avlusning med utskrifter i programmet som inte kräver att källkoden ändras." + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Aktivera spårning" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "Egen formatsträng" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"Egen formatsträng\n" +"

Ange en formatsträng med C-stil som används när det valda uttrycket " +"skrivs ut. Exempelvis:\n" +"

Tracepoint 1: g = %d

\n" +"Om en egen formatsträng inte aktiveras, skrivs namn och värden ut för alla " +"uttryck med \"%d\" som formatspecifikation för alla uttryck." + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "Uttryck att skriva ut:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Kör" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Avlusningsverktygsrad" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Körbart program:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Minnesdump:" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Stefan Asserhäll" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "stefan.asserhall@comhem.se" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/sv/kdevmakebuilder.po kdevelop-4.0.1/po/sv/kdevmakebuilder.po --- kdevelop-3.9.98/po/sv/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/sv/kdevmakebuilder.po 2010-07-17 20:13:04.000000000 +0100 @@ -0,0 +1,167 @@ +# translation of kdevmakebuilder.po to Swedish +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Stefan Asserhäll , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-26 20:08+0200\n" +"Last-Translator: Stefan Asserhäll \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Make-byggverktyg" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Stöd för att bygga Make-projekt" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Felaktig byggkatalog '%1'" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "Kunde inte skapa byggkommando för målet '%1'" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "Jobb misslyckades" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Misslyckades ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Klar ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** Avbruten ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "kompilerar" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "skapar" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "länkar" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "byggt" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "installerar" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "skapar" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Visa" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Avbryt vid första felet:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Visa kommandon men kör dem inte:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Installera som systemadministratör:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Kommando för att installera som systemadministratör:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Antal samtidiga jobb:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Körbart huvudprogram:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Standardbyggmål:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Ytterligare byggväljare:" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Aktiv miljöprofil:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Stefan Asserhäll" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "stefan.asserhall@comhem.se" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/sv/kdevqthelp.po kdevelop-4.0.1/po/sv/kdevqthelp.po --- kdevelop-3.9.98/po/sv/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/sv/kdevqthelp.po 2010-07-17 20:13:04.000000000 +0100 @@ -0,0 +1,69 @@ +# translation of kdevqthelp.po to Swedish +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Stefan Asserhäll , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-15 20:25+0100\n" +"Last-Translator: Stefan Asserhäll \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "Kunde inte hitta någon dokumentation om '%1'" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "Hemsida för QtHelp:" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "Qt-hjälp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Kontrollera Qt-hjälpdokumentation" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Stefan Asserhäll" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "stefan.asserhall@comhem.se" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "Identifierare att söka efter:" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "Hjälpsida:" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "about:blank" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "Felsökningsinformation:" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/th/CMakeLists.txt kdevelop-4.0.1/po/th/CMakeLists.txt --- kdevelop-3.9.98/po/th/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/th/CMakeLists.txt 2010-07-17 20:13:19.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(th ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/th/kdevcustommake.po kdevelop-4.0.1/po/th/kdevcustommake.po --- kdevelop-3.9.98/po/th/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/th/kdevcustommake.po 2010-07-17 20:13:19.000000000 +0100 @@ -0,0 +1,42 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Phuwanat Sakornsakolpat , 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-05-27 22:35+0700\n" +"Last-Translator: Phuwanat Sakornsakolpat \n" +"Language-Team: Thai \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "เครื่องมือจัดการ Makefile ที่กำหนดเอง" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "สนับสนุนการจัดการโครงการ makefile ที่กำหนดเอง" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "ทำงาน" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "ภูวณัฏฐ์ สาครสกลพัฒน์" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "narachai@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/uk/CMakeLists.txt kdevelop-4.0.1/po/uk/CMakeLists.txt --- kdevelop-3.9.98/po/uk/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/uk/CMakeLists.txt 2010-07-17 20:13:28.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(uk ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/uk/kdevcmakebuilder.po kdevelop-4.0.1/po/uk/kdevcmakebuilder.po --- kdevelop-3.9.98/po/uk/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/uk/kdevcmakebuilder.po 2010-07-17 20:13:28.000000000 +0100 @@ -0,0 +1,93 @@ +# translation of kdevcmakebuilder.po to Ukrainian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Yuri Chornoivan , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-02-19 17:05+0200\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%" +"10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "Інструмент збирання CMake" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "Підтримка побудови проектів CMake" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "Не вказано каталогу для збирання, збирання неможливе" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "Аварійне завершення збирання" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "Не вказано каталогу для збирання, спорожнення неможливе" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "Аварійне завершення спорожнення" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "Не вказано каталогу для збирання, встановлення неможливе" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "Аварійне завершення встановлення" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "Не вказано каталогу для збирання, запуск configure неможливий" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "Аварійне завершення налаштування" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "" +"Не вказано каталогу для збирання, спорожнення каталогу збирання неможливе" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "Очищення каталогу для збирання неможливе" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "Виконання завдання зазнало невдачі" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake: %1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "Програма CMake:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Юрій Чорноіван" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "yurchor@ukr.net" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/uk/kdevcmake.po kdevelop-4.0.1/po/uk/kdevcmake.po --- kdevelop-3.9.98/po/uk/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/uk/kdevcmake.po 2010-07-17 20:13:28.000000000 +0100 @@ -0,0 +1,467 @@ +# translation of kdevcmake.po to Ukrainian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Yuri Chornoivan , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-05-18 17:59+0300\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%" +"10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "Документація CMake" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "Підтримка документації CMake" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
Розмір кешу: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
Кеш документації: %1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "Команди" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "Змінна" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "Модуль" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "Властивість" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "Правила" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "Сторінка вмісту CMake" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 є застарілою командою, вам не слід нею користуватися" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "Незавершена функція." + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "Назва" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "Тип" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "Значення" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "Коментар" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "Додатково" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"Зараз зі списку KDevelop буде вилучено каталог %1.\n" +"Чи бажаєте ви, щоб KDevelop вилучив цей каталог і з файлової системи?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "Не вдалося вилучити: %1\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "Пер&емкнути кольори" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "Загальне" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "Цей проект створено %1 день тому." +msgstr[1] "Цей проект створено %1 дні тому" +msgstr[2] "Цей проект створено %1 днів тому" +msgstr[3] "Цей проект створено %1 день тому." + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "Параметри змінено" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "Програма KDE 4" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "© %{AUTHOR}, 2007" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "Документ, який слід відкрити" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "Налаштувати параметри каталогу збирання" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "Налаштувати параметри каталогу збирання для %1" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "Вам слід вказати виконуваний файл cmake." + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "Вам слід вказати каталог збирання." + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "Використання вже створеного каталогу збирання." + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "Створення нового каталогу збирання." + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "Каталог збирання вже налаштовано." + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "Цей каталог збирання належить %1, але каталог проекту — це %2." + +#: cmakebuilddirchooser.cpp:172 +msgid "You may not select a relative build directory." +msgstr "Не можна вказувати відносну адресу каталогу збирання." + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "Вибраний каталог збирання не є порожнім." + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "Інструмент керування CMake" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "Підтримка керування проектами CMake" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "Перейти до визначення цілі" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "Створити теку з назвою «%1»." + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop — Підтримка CMake" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "Не вдалося створити файл CMakeLists.txt для каталогу." + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "Не вдалося виконати запис файла проекту." + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "Вилучити теку з назвою «%1»." + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "Вилучити файл з назвою «%1»." + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "Додати файл з назвою «%1» до призначення «%2»." + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "Не вдалося зберегти зміни." + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "Перейменувати теку з назвою «%1»." + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "Каталогу збирання не існує, його неможливо створити." + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "Помилка під час створення каталогу збирання" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "НЕКОРЕКТНО" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "Команда" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "Макрос" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "Шлях" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "Ви&конуваний файл CMake:" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "Каталог &збирання:" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "Пре&фікс теки встановлення:" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "&Тип збирання:" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "" +"Програма KDevelop виявила декілька можливих коренів проекту для вашого " +"проекту, будь ласка, оберіть з них правильний." + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Юрій Чорноіван" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "yurchor@ukr.net" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "Пере&хід" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "Додати" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "Вилучити" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "Значення кешу" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "Коментар:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "Показувати додаткові" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "Каталог CMake" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "Показувати додаткові значення" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "привіт, світе" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "Колір тла:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "Оберіть новий колір тла" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Змініть колір тла натисканням цієї кнопки і вибором нового " +"кольору у діалоговому вікні вибору кольору.

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "Вік проекту:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "Колір тексту:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "Оберіть новий колір тексту" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

Змініть колір тексту натисканням цієї кнопки з наступним " +"вибором нового кольору за допомогою " +"діалогового вікна вибору кольорів." +"

" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "Встановіть вік проекту (у днях)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "Змініть вік проекту (у днях) вибором нової кількості днів." \ No newline at end of file diff -Nru kdevelop-3.9.98/po/uk/kdevcpp.po kdevelop-4.0.1/po/uk/kdevcpp.po --- kdevelop-3.9.98/po/uk/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/uk/kdevcpp.po 2010-07-17 20:13:28.000000000 +0100 @@ -0,0 +1,923 @@ +# translation of kdevcpp.po to Ukrainian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Yuri Chornoivan , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-17 08:19+0300\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.1\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%" +"10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "Невключені" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "Ініціалізувати" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "Контейнер невключених" + +#: codecompletion/context.cpp:1272 +#, kde-format +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "%1 перевантаження %2" +msgstr[1] "%1 перевантаження %2" +msgstr[2] "%1 перевантажень %2" +msgstr[3] "%1 перевантаження %2" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "З’єднати з %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "Сигнали/Слоти" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "Віртуальне перевизначення" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "Реалізувати функцію" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "Вбудовані C++" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "Перезаписати" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "Реалізувати" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "Створити слот" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "З %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "Додати директиву include" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "Додати попереднє оголошення (forward)" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "попереднє оголошення (forward)" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "Параметри приватної (private) реалізації класу" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "Скасувати" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "Оновити визначення з %1(%2) до (%3)" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "Не вдалося застосувати зміни: %1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"Переформатування є можливістю, яку ще недостатньо перевірено, її " +"використання може пошкодити ваш код. Перед використанням цієї можливості ми " +"рекомендуємо вам створити резервну копію." + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "Перейменувати %1" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "Створити окреме визначення для %1" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "Створити клас" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "Під курсором немає оголошень" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "Файл джерела для %1 недоступний." + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "Не вдалося оновити ланцюжок ВВ для %1." + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "Не вдалося створити визначення для цього оголошення." + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "Спроба вставки зазнала невдачі" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "Спроба застосування змін завершилася невдало" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "Немає документа для %1" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "Оголошення було втрачено під час оновлення" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "Оголошення розташовано у файлі, непридатному до запису %1." + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "Нова назва:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "Перейменувати" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "" +"Зауваження: всі перевантажені функції, перевантаження (overload), попередні " +"визначення (forward) тощо, також буде перейменовано." + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "Використання" + +#: codegen/simplerefactoring.cpp:445 +msgid "Declaration Info" +msgstr "Параметри оголошення" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "Перейменування «%1» на «%2»" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "Спроба застосування змін завершилася невдало: %1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "Налаштувати нетипові шляхи включення" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "Не вдалося зберегти нетипові шляхи включення у каталозі: %1" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "Додати нетиповий шлях включення" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "Відкрити проект" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "Не знайдено: %1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "Нічого не позначено, додавання до цілі не буде виконано." + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "Не вдалося визначити базовий клас, непряме додавання: %1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "Некоректний базовий клас: %1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "Створити локальне оголошення %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "Оголосити %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "Оголошення не знайдено: %1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "Включені" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "Включено з" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "Визначених макросів" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "Макрос-функція" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "Макрос" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "Попередньо оброблене тіло:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "Тіло:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "Керування збиранням для проекту %1 не повернуло теку збирання" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"Розв’язувачу включених шляхів потрібно знати теку збирання, щоб визначити " +"додаткові включені шляхи. Встановіть теку збирання у керуванні проектом, " +"якщо ви досі цього не зробили." + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "Керування збиранням не повернуло шлях include" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "" +"Керування збиранням не повернуло шлях include %1, який можна визначити за " +"допомогою визначника шляхів include" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "Визначник шляхів include: %1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"Використана тека збирання: «%1»\n" +"Визначник шляхів include: %2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "" +"Спроба виявлення шляхів include у той час, коли ще виконувався інший процес " +"виявлення" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "У теці «%1» відсутній Makefile" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "Проблема під час спроби визначити шляхи include для %1" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "Кешовано: %1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "Назву файла %1, здається, неправильно сформовано" + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "Не вдалося видобути новий робочий каталог" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "Виведено: %1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "Помилка рекурсивного виклику make" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "Рядок параметрів «%1», здається, не є коректним. Вивід: %2" + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "Каталогу «%1» не існує. Вивід: %2" + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "Неправильно сформований рекурсивний виклик make" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "Не вдалося визначити шляхи include з виводу make" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "Тека: «%1» Команда: «%2» Вивід: «%3»" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "Програма для створення випереджального заголовка у KDE" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "" +"Програма, яка створює випереджальні заголовки (на зразок заголовків Qt) з " +"вхідного коду." + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "© Hamish Rodda, 2006" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "" +"Тека include KDE — заголовки переходять у includes/KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "Інформація про збирання зі створювача XML cmake" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "Незавершена конструкція #if" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "Символ %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "Очікувалося «ідентифікатор», отримано: %1" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
Текст елемента
%1
Ввід
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "Очікувалося «)», отримано %1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "Ділення на нуль" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "Введений текст: %1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "очікувалося ``:'' = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else без #if" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "#endif без #if у рядку виводу %1" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "Помилка макроса" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "У виклику макроса %1 відсутній аргумент з номером %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "Формальні вирази: %1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "некоректні вхідні дані: %1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "Цей файл імпортує поточний відкритий документ
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "У %1-му шляху include" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "Включено через %1
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "Тека %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "У %1-му шляху include" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "Включення" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "Шлях до включених файлів" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "Виклики на включення" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "Підтримка C++" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "Підтримка мови C++" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "Файли" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "&Перемкнути визначення/декларацію" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "Створити &новий клас" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "Перейменувати оголошення" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "Пересунути до коду" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "Спорожнено процесором попередньої обробки
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "Розбір включених файлів" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "Розбір поточного файла" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "Оновлення ланцюжка ВВ для %1 не відбувається" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "Збирання з використанням" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "Виконано" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "Файл було рекурсивно включено з цього ж файла: %1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "Включений файл не знайдено: %1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"Шуканий шлях включення:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "Не вдалося відкрити файл «%1»." + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "Неможливо прочитати інформацію з файла." + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "Неможливо відкрити файл." + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "Дозволи на файл забороняють його читання." + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "Навігація" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "Код" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Юрій Чорноіван" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "yurchor@ukr.net" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "Параметри C++" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "&Експортувати:" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "&Макрос:" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "Публічний" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "Захищений" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "Приватний" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "Гніздо" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "Сигнал" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "Каталог зберігання" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"Нетипові шляхи включення буде збережено у спеціальному файлі з назвою «." +"kdev_include_paths», який зберігатиметься у каталозі кодів. Нетиповий шлях " +"буде використано для всіх файлів з цього каталогу." + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "Каталог зберігання:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "Автоматичне вирішення" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"Якщо ваш проект використовує для збирання прості Makefile, ви можете " +"скористатися автоматичним визначенням шляхів включення за допомогою програми " +"make. Щоб використати це визначення, вкажіть у цьому вікні параметри " +"відповідності між каталогами кодів і збирання." + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "Каталог кодів:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "Каталог збирання:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "Нетипові шляхи включення" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "Тут ви можете вказати список нетипових шляхів включення." + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"Зауваження: ці параметри не впливають на компілятор або проект, вони " +"використовуються лише для пошуку включених файлів заголовків у межах " +"KDevelop." + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" +"Параметри і налаштування пересування приватних полів даних класу до " +"приватної структури" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "Назва приватної структури" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "Параметри" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

Типово, приватні " +"реалізації структури оголошуються як struct, щоб типовий доступ був загальним (public).

\n" +"

Позначте цей пункт, якщо " +"ви бажаєте, щоб приватні реалізації структур оголошувалися як class з загальним (public) доступом.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "Використовувати class, а не struct" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

Пересунути всі поточні " +"змінні, які було ініціалізовано у списку ініціалізації конструктора до " +"списку ініціалізації приватної (private) реалізації структури.

\n" +"

\n" +"

Зауваження: всі посилання і типізовані " +"змінні, які не пропонують типових конструкторів буде пересунуто незалежно " +"від позначення цього пункту.

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "Пересунути ініціалізацію змінної до приватної (private) структури" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "" +"Пересунути всі поточні оголошені приватні (private) методи до приватної " +"реалізації структури." + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "Пересунути приватні методи" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "Назва вказівника:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "" +"Назва змінної елемента, яка буде носієм вказівника до приватної реалізації" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/uk/kdevcustommake.po kdevelop-4.0.1/po/uk/kdevcustommake.po --- kdevelop-3.9.98/po/uk/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/uk/kdevcustommake.po 2010-07-17 20:13:28.000000000 +0100 @@ -0,0 +1,44 @@ +# translation of kdevcustommake.po to Ukrainian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Yuri Chornoivan , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-02-19 17:06+0200\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%" +"10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "Інструмент керування нетиповим Makefile" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "Підтримка керування проектами з нетиповими файлами makefile" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "Запустити" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Юрій Чорноіван" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "yurchor@ukr.net" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/uk/kdevelop.po kdevelop-4.0.1/po/uk/kdevelop.po --- kdevelop-3.9.98/po/uk/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/uk/kdevelop.po 2010-07-17 20:13:28.000000000 +0100 @@ -0,0 +1,740 @@ +# translation of kdevelop.po to Ukrainian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Yuri Chornoivan , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-05-31 22:21+0300\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.1\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%" +"10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "Код" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "Файли проектів KDevelop4" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "Інтегроване середовище для розробки KDevelop" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "© Розробники KDevelop, 1999–2010" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "Створити сеанс з вказаною назвою." + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "" +"Сеанс, який слід завантажити. Ви можете передати або #, або назву сеансу." + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "Показати список можливих сеансів і завершити роботу" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" +"Доступні сеанси (скористайтеся параметром «-s ХЕШ» або «-s НАЗВА», щоб " +"відкрити один з них):" + +#: main.cpp:79 +msgid "Hash" +msgstr "Хеш" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "Назва: відкриті проекти" + +#: main.cpp:88 +msgid "[running]" +msgstr "[виконується]" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "Вкажіть бінарний файл, який ви бажаєте зневаджувати." + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "Зневаджування" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "" +"Сеанс з назвою %1 вже існує. Скористайтеся параметром -s, щоб його відкрити." + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"Не вдалося відрити невідомий сеанс %1. Переглянути список сеансів можна за " +"допомогою параметра --sessions. Створити сеанс можна за допомогою параметра -" +"cs." + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "Сеанс %1 вже відкрито." + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"Не вдалося запустити KDevelop: у %1 немає виконуваного файла kdevelop.bin. " +"Будь ласка, встановіть KDevelop належним чином." + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "" +"Супровід, архітектура, підтримка VCS, підтримка керування проектами, " +"керування проектами QMake" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "Архітектура, інтерфейс Sublime, підтримка Ruby" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "" +"Ланцюжок визначення-використання, підтримка C++, навігація кодом, завершення " +"коду, помічник кодування, зміна формату програми" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "Підтримка CMake, підтримка запуску, підтримка Kross" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "Інтеграція з GDB" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "Вбудовування текстового редактора, ланцюжок визначення-використання" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "" +"Адміністратор сайта, документація API, латки для Doxygen та autoproject" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "Інтеграція з GDB, додатки для веб-розробки" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "Загальне керівництво, додатки для веб-розробки" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "Підтримка astyle і indent" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "Розподілена VCS, Git, Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "SnippetPart, зневадник і покращення у використанні" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "" +"Додаток системи керування версіями (SVN), керування нетиповим Make, загальні " +"вдосконалення" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "Портування на Qt 3, латки, підтримка valgrind, diff та perforce" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "Обробник C++" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "Автори KWrite" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Компонент редактора Kate" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Корпорація Nokia/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Код Designer" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "Учасники розробки попередніх версій:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "Автори KHTML" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "Компонент документації HTML" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "" +"Початкова ідея, базова архітектура, більшість початкового вихідного коду" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar, виправлення вад" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Підтримка Java та об’єктного C" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "Клієнтська програма для зневадника" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "Підтримка PHP, наповнення контекстного меню" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "Шаблони програм для KDE" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Підтримка дистрибутивів, підтримка bash, шаблони програм" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "Декілька компонентів, індексування htdig" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "Допомога з керуванням Automake і послідовне збереження класів" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "Допомога у вивченні інфраструктури KParts" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Підтримка Ada" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "Керування проектами QMake" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "Режими MDI, QEditor, виправлення вад" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "PartExplorer, зміна дизайну компонента CVS, вади (виправлення)" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "" +"Заміна, Закладки, додатки FileList і CTags2. Загальні покращення і латки" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Майстер створення файлів та інші доповнення і виправлення" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "Підтримка ClearCase" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Підтримка Ruby" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Документація з Fortran" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Утиліта документації Python" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Майстер Doxygen" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "Компонент вибору файлів" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "Автодоповнення коду C++, постійне сховище класів" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "Латки" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "Допомога з підтримкою Perl" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "Перегляд індексу документації" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "" +"Пошук у документації, латки до керування проектами qmake, покращення у " +"використанні, виправлення вад... " + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "Латки до керування проектами QMake" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "" +"Впорядкування та виправлення вад у qEditor, AutoMake і багато всього іншого" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Художня робота для підтримки ruby" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "Адреса проекту для завантаження" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "Файли для завантаження" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" +"Запустити інструмент зневаджування, наприклад, gdb. За командою слід вказати " +"бінарний файл, який має бути зневаджено, разом з параметрами запуску." + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (з використанням KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "Не вдалося виявити належного типу налаштувань запуску" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "Не вдалося виявити інструмент запуску %1" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "Не вдалося відкрити %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "&Файл" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "&Правка" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "&Додаткові" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "П&ерегляд" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "Згортання &коду" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "&Інструменти" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "Автозавершення слів" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "П&араметри" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "Головний пенал" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "Сеанс" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "&Проект" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "&Виконати" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "&Навігація" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "&Файл" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "&Правка" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "Редактор" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "Код" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "&Вікно" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "Параметри" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Юрій Чорноіван" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "yurchor@ukr.net" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/uk/kdevformatters.po kdevelop-4.0.1/po/uk/kdevformatters.po --- kdevelop-3.9.98/po/uk/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/uk/kdevformatters.po 2010-07-17 20:13:28.000000000 +0100 @@ -0,0 +1,473 @@ +# translation of kdevformatters.po to Ukrainian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Yuri Chornoivan , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-14 17:44+0300\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%" +"10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "Інструмент форматування Astyle" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "Інструмент форматування, який використовує astyle" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Artistic Style — це інструмент для встановлення відступів, " +"форматування і покращення вигляду коду мовами програмування C, C++, C# і " +"Java.
Домашня сторінка: http://astyle.sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Інструмент відступів Indent" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "Інструмент для створення відступів, який використовує indent" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"Встановлення відступів і форматування файлів програм мовою C.
Програму «indent» можна використовувати для того, щоб зробити код " +"придатнішим для читання. Крім того, ця програма може перетворювати код C з " +"одного стилю написання на інший.
У indent закладено розуміння " +"значної частини синтаксичних конструкцій C, але програма може працювати і з " +"неповними або неправильно форматованими синтаксичними конструкціями.
Домашня сторінка: http://" +"www.gnu.org/software/indent/" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Відступи" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Табуляції" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Примусові табуляції" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Пробіли" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"Кількість пробілів, які буде перетворено на табуляції.\n" +"Кількістю пробілів на одну табуляцію керує редактор." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Перетворити табуляції на пробіли." + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Пере&творити табуляції на пробіли" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "Заповнювати порожні рядки пробілами з попередніх рядків." + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "Заповнювати п&орожні рядки" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Відступ" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Блоки" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Дужки" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "Варіанти" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Клас" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Мітки" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Простори імен" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Директиви процесора попередньої обробки" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "Перемикачі" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"Відступати на цю кількість пробілів в межах однієї команди,\n" +"відносно попереднього рядка." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Відступати на цю кількість пробілів у межах умови\n" +"відносно заголовку умови." + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Мінімум в умові:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "Подвійний поточний" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Максимум у команді:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Інше" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Тип" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Розділяти дужки перед закриттям заголовків (наприклад, «else», «catch», ...),\n" +"запобігаючи негайному закриттю дужок." + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "Роз&діляти завершення заголовка" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "Без змін" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Долучити" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Розбити" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Додавати порожні рядки навколо окремих блоків, міток, класів,...\n" +"Відомі недоліки:\n" +"\n" +"1. Якщо команда НЕ є частиною блоку, \n" +"наступні команди буде відокремлено двома порожніми рядками. \n" +"Команди, що входять до блоку, буде відформатовано \n" +"правильно.\n" +"\n" +"2. Коментарі відриваються від блоку.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "&Відокремлювати блоки" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Подібне до --break-blocks, але додаються ще порожні рядки навколо \n" +"завершень заголовків (наприклад, «else», «catch», ...).\n" +"\n" +"Відомі недоліки:\n" +"\n" +"1. Якщо команда НЕ є частиною блоку, всі\n" +"наступні команди буде відокремлено двома порожніми рядками. \n" +"Команди, що входять до блоку, буде відформатовано \n" +"правильно.\n" +"\n" +"2. Коментарі відриваються від блоку.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "Ві&докремлювати всі блоки" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "Розділяти вирази «else if()» на два окремих рядка." + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "Розділяти i&f-else" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Заповнення" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Виділяти дужки" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Прибрати виділення" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "Лише всередині" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "Лише ззовні" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "Всередині і ззовні" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Додавати заповнення пробілами навколо операторів.\n" +"Після такого виділення, оператори залишаться з пробілами.\n" +"Зворотного процесу не передбачено." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "&Додавати пробіли навколо операторів" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "Однорядкові" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" +"Не розбивати рядки з декількома командами на\n" +"декілька рядків по команді у кожному." + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "&Зберігати однорядкові команди" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "Не розбивати блоки, які повністю вміщуються на одному рядку." + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "Зберігати &однорядкові блоки" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Юрій Чорноіван" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "yurchor@ukr.net" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/uk/kdevgdb.po kdevelop-4.0.1/po/uk/kdevgdb.po --- kdevelop-3.9.98/po/uk/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/uk/kdevgdb.po 2010-07-17 20:13:28.000000000 +0100 @@ -0,0 +1,886 @@ +# translation of kdevgdb.po to Ukrainian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Yuri Chornoivan , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevgdb\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-19 16:29+0200\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%" +"10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "Спостереження" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "Нещодавні" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
Попереднє значення: %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
Нове значення: %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "Підтримка GDB" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Підтримка запуску програм у GDB" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Дизасемблер" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Дослідити файл core..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Дослідити файл core" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"Дослідити файл core

Завантажити файл core, який було створено під " +"час аварійної зупинки програми, наприклад, внаслідок порушення сегментації. " +"Core-файл містить образ пам’яті програми під час аварійної зупинки, що " +"дозволяє вам виконати аналіз причин проблеми.

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "Приєднати до процесу" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "Приєднати до процесу..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "" +"Приєднати до процесу

Приєднує зневадник до виконуваного процесу.

" + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "Обчислити: %1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "Обчислити вираз

Показує значення виразу під курсором.

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "Спостерігати: %1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "" +"Спостерігати за виразом

Додає вираз під курсором у список " +"«Спостереження і змінні».

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "Виберіть файл core для вивчення..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "Досліджується файл core %1" + +#: debuggerplugin.cpp:372 +msgid "Debug core file" +msgstr "Зневаджування за файлом core" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "Виберіть процес для приєднання..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "" +"Не з’єднано з процесом %1: інструмент зневаджування не можна з’єднувати з " +"самим інструментом зневаджування." + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "Приєднання до процесу %1" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "Зневаджування процесу %1" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "Зневадник" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"Не вказано групу середовища, схоже, ви припустилися помилки під час " +"налаштування, будь ласка, перевірте налаштування запуску «%1». Буде " +"використано типову групу середовища." + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "Зневадник зупинено" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "Виконання програми перервано" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "Процес завершився" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "Програма виконується" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "Виконання програми призупинено" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"Нештатне завершення GDB

Причиною може бути вада GDB. Перевірте " +"вивід gdb, а потім зупиніть зневадження" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "Нештатне завершення GDB" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "" +"Було надіслано команду gdb у той час коли зневадник не було запущено
Ця команда:
%1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "Внутрішня помилка" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "Некоректна команда зневаднику
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "Некоректна команда зневаднику" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "Нормальне завершення" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "Вихід за сигналом %1" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "Програма отримала сигнал %1 (%2)" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "Виконання програми" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"GDB не вдалося використати пристрої tty* або pty*.\n" +"Перевірте параметри /dev/tty* і /dev/pty*\n" +"Можливо, вам слід від адміністратора виконати команди «chmod ug+rw» для tty* " +"і pty* і додати свого користувача до групи tty за допомогою команди «usermod -" +"G tty _користувач_»." + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "Попередження" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "" +"Помилка зневадника

Зневадник повідомив про таку помилку:

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "Помилка зневадника" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "У черзі %1 команда\n" +msgstr[1] "У черзі %1 команди\n" +msgstr[2] "У черзі %1 команд\n" +msgstr[3] "У черзі %1 команда\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "%1 команда обробляється у gdb\n" +msgstr[1] "%1 команди обробляється у gdb\n" +msgstr[2] "%1 команд обробляється у gdb\n" +msgstr[3] "%1 команда обробляється у gdb\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "Стан зневадника: %1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"Клас поточної команди: '%1'\n" +"Текст поточної команди: '%2'\n" +"Початковий текст поточної команди: '%3'\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "Стан зневадника" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "" +"Вам слід встановити gdb версії 7.0.0 або новішої.
Ви " +"використовуєте: %1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "Помилка gdb" + +#: debugsession.cpp:1417 +msgid "Could not start debugger:
" +msgstr "Не вдалося запустити зневадник
" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "Помилка запуску" + +#: debugsession.cpp:1429 +msgid "Could not attach debugger:
" +msgstr "Не вдалося приєднати зневадник:
" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"Вікно машинного коду

Вікно машинного коду у вашій запущеній " +"програмі з підсвічуванням поточної інструкції. Ви можете виконувати " +"інструкцію за інструкцією, використовуючи кнопки «Перейти до наступної» " +"інструкції і «Увійти» в інструкцію панелі інструментів зневадника." + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "Дизасемблер" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "Адреса" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "Функція" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "Зміщення" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "Команда" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "Не вдалося виявити оболонку зневадження «%1»." + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "Оболонку зневадження не знайдено" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "" +"

У компоненті зневадника сталася внутрішня помилка під час обробки " +"відповіді з gdb. Будь ласка, повідомте про цю ваду." + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"Виключення: %1\n" +"Відповідь макроінструкції: %2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "Внутрішня помилка зневадника" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "" +"Не вдалося запустити зневадник.

Не вдалося виконати «%1». Перевірте, " +"чи вірно ви вказали шлях." + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "Не вдалося запустити зневадник" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "Налаштування GDB" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "Виконує програму у GDB" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "Вивід GDB" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"Вивід GDB

Показує всі команди, що виконуються gdb. Ви також можете " +"віддати будь-яку іншу команду gdb під час зневадження.

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "Команда &GDB:" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "Призупинити виконання програми для введення команд gdb" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "Показувати внутрішні команди" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"Змінює стан показу внутрішніх команд, що видаються KDevelop.
Цей параметр " +"стосуватиметься лише наступних команд, він не додасть і не вилучить уже " +"віддані команди з перегляду." + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "Копіювати все" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "Почати" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "Кількість" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "Гаразд" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "Скасувати" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "Перегляд пам’яті" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (%1 байт)" +msgstr[1] "%2 (%1 байти)" +msgstr[2] "%2 (%1 байтів)" +msgstr[3] "%2 (%1 байт)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "Змінити діапазон пам’яті" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "Перезавантажити" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "Закрити це вікно" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "Особливі вікна зневадження" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "Приєднати до процесу" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "Вибір файла core" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "kdevelop: Термінал зневадження програми" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "Параметри зневадника" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "Виконуваний файл зневадника:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "Файл програми gdb" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"Щоб запускати файл програми «gdb», що розміщений за шляхом у $PATH, залиште " +"це поле порожнім. Щоб запустити нетиповий gdb, наприклад, для іншої " +"архітектури, введіть тут назву файла програми. Ви можете або запустити gdb з " +"$PATH, але з іншою назвою (скажімо, «arm-gdb»), ввівши назву у цьому полі, " +"або зазначити повний шлях до файла програми gdb." + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "Запустити gdb у особливій оболонці (для проектів з automake)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"Якщо ви бажаєте, щоб gdb було виконано з особливої оболонки або інструмента, " +"зазначте тут відповідну програму. Основним випадком використання подібного " +"метода є проекти, що засновані Automake, де програмою є по суті скрипт, і " +"для того, щоб запустити його у gdb, потрібна програма libtool." + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "&Оболонка зневадника:" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"Якщо ви бажаєте виконати gdb за допомогою особливої оболонки або " +"інструмента, введіть її тут. Основним випадком використання подібного метода " +"є проекти, що засновані Automake, де програмою є по суті скрипт, і для того, " +"щоб запустити його у gdb, потрібна програма libtool." + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "Параметри" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"Відображення статичних членів уповільнює GDB\n" +"під час обробки даних KDE і Qt.\n" +"Воно може змінити підпис даних,\n" +"який потрібен QString і дружнім з ним класам,\n" +"але, якщо вам потрібно зневадити саме ці значення,\n" +"увімкніть цей параметр." + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "Показувати &статичні члени" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"При відображенні дизасембльованого коду\n" +"ви можете бачити виправлені імена методів.\n" +"Але невиправлені імена легші для читання." + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "Показувати &невиправлені назви" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"Якщо GDB не виявить бібліотеку, яку завантажено за допомогою\n" +"«dlopen», то він не дасть встановити точку зупину у відповідному коді.\n" +"За допомогою цього параметра можна зупинити GDB під час завантаження " +"бібліотеки, а потім\n" +"спробувати встановити точки зупину. Щоб дізнатися більше\n" +"про цей спосіб, перегляньте документацію.\n" +"\n" +"Якщо не завантажуєте бібліотеки за допомогою «dlopen», залиште поле " +"непозначеним." + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "Спробувати встановити &точки зупину по завантаженню бібліотеки" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"Це надає можливість ввести термінальний ввід, якщо\n" +"програма містить код з вводом з термінала (cin, fgets, та інші).\n" +"Якщо ви використовуєте ввід з термінала, увімкніть цей параметр.\n" +"У іншому випадку залиште його непозначеним." + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "Увімкнути окремий &термінал для вводу/виводу програми" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"Цей скрипт призначено для команд, потрібних для з’єднання з віддаленою " +"програмою.\n" +"\tshell sleep 5\tочікувати на запуск віддаленої програми\n" +"\ttarget remote ...\tз’єднатися з віддаленими зневадником\n" +"\tcontinue\t[необов’язковий] почати зневадження до першої точки зупину" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "Дистанційне зневадження" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "&Скрипт налаштування gdb:" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "Скрипт налаштування gdb" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "Цей скрипт читає gdb перед початком зневадження." + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "Ви&конати скрипт оболонки:" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "Скрипт для запуску віддаленої програми" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"Цей скрипт виконується після читання gdb скрипту налаштування.\n" +"Під час віддаленого зневадження цей скрипт спрямований на запуск віддаленого " +"процесу.\n" +"[Вважається, що виконуваний файл, який ви зневаджуєте, є доступним на " +"віддаленім комп’ютері, можливо, в результаті його звантаження наприкінці " +"збирання]\n" +"1) Визначтесь зі способом віддаленого виконання команди — rsh, ssh, " +"telnet, ...\n" +"2а) Виконайте команду «gdbserver ... програма» на віддаленому комп’ютері.\n" +"або, якщо у вашій програмі міститься затичка gdb\n" +"2б) Виконайте команду «програма» на віддаленому комп’ютері." + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "Виконати скрипт &gdb:" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "Скрипт для з’єднання з віддаленою програмою" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"Цей скрипт читається gdb після завершення виконання двох попередніх.\n" +"Його призначено для команд потрібних для з’єднання з програмою, що працює на " +"іншому комп’ютері.\n" +"\tshell sleep 5\tочікувати на запуск віддаленої програми\n" +"\ttarget remote ...\tз’єднатися з віддаленим зневадником\n" +"\tcontinue\t[необов’язковий] почати зневадження до першої точки зупину" + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "Налаштування трасування" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"Увімкнути трасування\n" +"

Трасування — це механізм отримання значення потрібного виразу і " +"продовження виконання програми після точки зупину. Трасування можна вважати " +"способом подібним до друку виразу командою printf, що не потребує зміни " +"вихідного коду.

" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "Увімкнути трасування" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "Нетиповий рядок формату" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"Нетиповий рядок формату\n" +"

Вкажіть рядок формату у стилі C, який використовуватиметься під час друку " +"вибраного виразу. Наприклад:\n" +"

Tracepoint 1: g = %d

\n" +"Якщо нетиповий рядок формату не увімкнено, назви і значення всіх виразів " +"друкуватимуться з визначенням формату у вигляді «%d»." + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "Вираз для виводу:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "Запустити" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "Пенал зневадження" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "Виконуваний файл:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Файл core:" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Юрій Чорноіван" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "yurchor@ukr.net" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/uk/kdevmakebuilder.po kdevelop-4.0.1/po/uk/kdevmakebuilder.po --- kdevelop-3.9.98/po/uk/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/uk/kdevmakebuilder.po 2010-07-17 20:13:28.000000000 +0100 @@ -0,0 +1,168 @@ +# translation of kdevmakebuilder.po to Ukrainian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Yuri Chornoivan , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-26 13:03+0300\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%" +"10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Інструмент збирання Make" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "Підтримка побудови проектів Make" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make: %1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "Некоректна тека для збирання «%1»" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "Не вдалося створити команду збирання для цілі «%1»." + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "Виконання завдання зазнало невдачі" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** Невдача ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** Завершено ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** Аварійне завершення ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "компіляція" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "утворення" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "компонування" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "зібрано" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "встановлення" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "створення" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "Перегляд" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "Переривання після першої помилки:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "Виводити команди, але не виконувати їх:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "Встановити від root:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Команда встановлення від root:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "Кількість одночасних завдань:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Виконуваний файл Make:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "Типова ціль make:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Додаткові параметри make:" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "Задіяний профіль середовища: " + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Юрій Чорноіван" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "yurchor@ukr.net" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/uk/kdevqthelp.po kdevelop-4.0.1/po/uk/kdevqthelp.po --- kdevelop-3.9.98/po/uk/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/uk/kdevqthelp.po 2010-07-17 20:13:28.000000000 +0100 @@ -0,0 +1,70 @@ +# translation of kdevqthelp.po to Ukrainian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Yuri Chornoivan , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-15 17:03+0200\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%" +"10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "Не вдалося знайти жодної документації щодо «%1»" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "Домашня сторінка QtHelp" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "Знайти документацію у довідці з Qt" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Юрій Чорноіван" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "yurchor@ukr.net" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "Ключ пошуку:" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "Довідкова сторінка:" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "about:blank" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "Діагностичні відомості:" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_CN/CMakeLists.txt kdevelop-4.0.1/po/zh_CN/CMakeLists.txt --- kdevelop-3.9.98/po/zh_CN/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_CN/CMakeLists.txt 2010-07-17 20:13:49.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(zh_CN ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/zh_CN/kdevcmakebuilder.po kdevelop-4.0.1/po/zh_CN/kdevcmakebuilder.po --- kdevelop-3.9.98/po/zh_CN/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_CN/kdevcmakebuilder.po 2010-07-17 20:13:49.000000000 +0100 @@ -0,0 +1,93 @@ +# translation of kdevcmakebuilder.po to 简体中文 +# Copyright (C) 2002,2003, 2004, 2008, 2009 Free Software Foundation, Inc. +# +# Qi Liang , 2001. +# Xiong Jiang , 2002,2003, 2004. +# Funda Wang , 2005. +# Ni Hui , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-02-20 09:18+0000\n" +"Last-Translator: Ni Hui \n" +"Language-Team: 简体中文 \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: KBabel 1.11.4\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "CMake 构建器" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "构建 CMake 工程支持" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "未配置构建目录,无法构建" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "中止构建" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "未配置构建目录,无法清理" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "中止清理" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "未配置构建目录,无法安装" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "中止安装" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "未配置构建目录,无法配置" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "中止配置" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "未配置构建目录,无法清理构建目录" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "没有可能的构建目录清理操作" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "作业失败" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake:%1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "CMake 二进制文件:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Ni Hui" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "shuizhuyuanluo@126.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_CN/kdevcmake.po kdevelop-4.0.1/po/zh_CN/kdevcmake.po --- kdevelop-3.9.98/po/zh_CN/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_CN/kdevcmake.po 2010-07-17 20:13:49.000000000 +0100 @@ -0,0 +1,456 @@ +# translation of kdevcmake.po to 简体中文 +# Copyright (C) 2002,2003, 2004, 2008, 2009 Free Software Foundation, Inc. +# +# Qi Liang , 2001. +# Xiong Jiang , 2002,2003, 2004. +# Funda Wang , 2005. +# Ni Hui , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-01-18 15:09+0800\n" +"Last-Translator: Ni Hui \n" +"Language-Team: Chinese Simplified \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Lokalize 1.0\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "CMake 文档" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "CMake 文档支持" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
缓存值:%1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
缓存文档:%1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "命令" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "变量" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "模块" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "属性" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "策略" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "CMake 内容页面" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 是个不赞成使用的命令且不应使用" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "未完成的函数。" + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "名称" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "类型" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "值" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "注释" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "高级" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"%1 目录即将从 KDevelop 的列表中删除。\n" +"您想让 KDevelop 同时从文件系统中删除它吗?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "无法删除:%1。\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "切换颜色(&T)" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "常规" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "这个工程已存在了 %1 天" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "设置已更改" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "KDE 4 应用程序" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "kde4app" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "(C) 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "要打开的文档" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "配置构建目录" + +#: cmakebuilddirchooser.cpp:58 +#, fuzzy, kde-format +#| msgid "Configure a build directory" +msgid "Configure a build directory for %1" +msgstr "配置构建目录" + +#: cmakebuilddirchooser.cpp:100 +#, fuzzy +#| msgid "You need to select a cmake binary" +msgid "You need to select a cmake binary." +msgstr "您需要选择一个 cmake 二进制文件" + +#: cmakebuilddirchooser.cpp:143 +#, fuzzy +#| msgid "You need to specify a build directory" +msgid "You need to specify a build directory." +msgstr "您需要指定一个构建目录" + +#: cmakebuilddirchooser.cpp:150 +#, fuzzy +#| msgid "Using an already created build directory" +msgid "Using an already created build directory." +msgstr "使用创建过的构建目录" + +#: cmakebuilddirchooser.cpp:161 +#, fuzzy +#| msgid "Error creating build directory" +msgid "Creating a new build directory." +msgstr "创建构建目录出错" + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "构建目录已配置。" + +#: cmakebuilddirchooser.cpp:169 +#, fuzzy, kde-format +#| msgid "This build directory is for %1, but the project directory is %2" +msgid "This build directory is for %1, but the project directory is %2." +msgstr "构建目录用于 %1,但是工程目录是 %2" + +#: cmakebuilddirchooser.cpp:172 +#, fuzzy +#| msgid "You may not select a relative build directory" +msgid "You may not select a relative build directory." +msgstr "您可能不用选择一个相对构建目录" + +#: cmakebuilddirchooser.cpp:174 +#, fuzzy +#| msgid "The selected build directory is not empty" +msgid "The selected build directory is not empty." +msgstr "所选构建目录为空" + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "CMake 管理器" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "管理 CMake 工程支持" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "跳转到目标定义" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "创建名为“%1”的文件夹。" + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop - CMake 支持" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "无法创建目录的 CMakeLists.txt 文件。" + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "无法保存更改。" + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "删除名为“%1”的文件夹。" + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "删除名为“%1”的文件。" + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "向目标“%2”添加名为“%1”的文件。" + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "无法保存更改。" + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "重命名名为“%1”的文件夹。" + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "构建目录不存在并且无法创建。" + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "创建构建目录出错" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "无效" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "命令" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "宏" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "路径" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "CMake 二进制文件(&B):" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "构建目录(&B):" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "安装根路径(&I):" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "构建类型(&T):" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "KDevelop 在您的工程中找到多个可能的工程根路径,请选择一个当前根路径。" + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Ni Hui" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "shuizhuyuanluo@126.com" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "移动(&M)" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "添加" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "删除" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "缓存变量" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "注释:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "显示高级" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "CMake 目录" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "显示高级变量" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "hello, world" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "背景色:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "选择一种新背景颜色" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "工程年龄:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "前景色:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "选择一种新前景颜色" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "设定工程年龄(天数)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "选择新的天数来更改工程年龄(天数)。" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_CN/kdevcpp.po kdevelop-4.0.1/po/zh_CN/kdevcpp.po --- kdevelop-3.9.98/po/zh_CN/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_CN/kdevcpp.po 2010-07-17 20:13:49.000000000 +0100 @@ -0,0 +1,873 @@ +# translation of kdevcpp.po to 简体中文 +# Copyright (C) 2002,2003, 2004, 2008, 2009 Free Software Foundation, Inc. +# +# Qi Liang , 2001. +# Xiong Jiang , 2002,2003, 2004. +# Funda Wang , 2005. +# Ni Hui , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-01-18 15:21+0800\n" +"Last-Translator: Ni Hui \n" +"Language-Team: Chinese Simplified \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Lokalize 1.0\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "未包含" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "初始化" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "未包含的容器" + +#: codecompletion/context.cpp:1272 +#, fuzzy, kde-format +#| msgctxt "" +#| "Here, overload is used as a programming term. This string is used to " +#| "display how many overloaded versions there are of the function whose name " +#| "is the second argument. The numeric argument is always greater than one, " +#| "so translation of the singular case is only necessary in languages where " +#| "the singular form is used for 21, 31 etc." +#| msgid "1 overload of %2" +#| msgid_plural "%1 overloads of %2" +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "%2 的 %1 次重载" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "连接到 %1 (%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "信号/槽" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "虚覆盖" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "实现函数" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "C++ 内建" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "覆盖" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "实现" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "创建槽" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "来自 %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "添加包含指令" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "添加前向声明" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "前向声明" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "私有类实现选项" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "取消" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "从 %1(%2) 更新定义为 (%3)" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "应用更改失败:%1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "重构是个实验性特性,它可能破坏您的代码。在使用它之前,确保做好了备份。" + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "重命名 %1" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "创建 %1 的分离定义" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "创建类" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "光标下无声明" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "没有 %1 可用的源文件。" + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "更新 %1 的定义使用链失败。" + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "无法创建此声明的定义。" + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "插入失败" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "应用更改失败" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "没有 %1 的文档" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "更新时丢失了声明" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "" + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "新名称:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "重命名" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "注意:所有的被重载的函数、重载、前向声明等都会被重命名" + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "使用" + +#: codegen/simplerefactoring.cpp:445 +#, fuzzy +#| msgid "Declarations:" +msgid "Declaration Info" +msgstr "声明:" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "重命名“%1”为“%2”" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "应用更改失败:%1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "设置自定义包含路径" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "保存自定义包含路径到目录失败:%1" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "添加自定义包含路径" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "打开工程" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "未找到:%1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "未选择任何事物,不添加到目标。" + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "无法解析基类,间接添加:%1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "无效的基类:%1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "创建局部声明 %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "声明 %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "未找到声明:%1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "已包含" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "包含者" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "定义的宏" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "函数宏" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "宏" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "预处理实体:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "实体:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "工程 %1 的构建管理器没有返回一个构建目录" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"包含路径解析器需要构建目录以解析其它的包含路径。如果您尚未在工程管理器中设置" +"好构建目录,请完成该设置。" + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "构建管理器没有返回包含路径" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "构建管理器没有返回包含路径解析器所能解析的包含路径 %1" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "包含路径解析器:%1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"使用构建目录:“%1”\n" +"包含路径解析器:%2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "在另一个处理仍然运行时尝试包含路径解析" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "目录“%1”中缺少 Makefile" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "试图解析 %1 包含路径时发生问题" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "已缓存:%1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "文件名 %1 似乎格式无效" + +#: includepathresolver.cpp:775 +#, fuzzy +#| msgid "Failed to save custom include paths in directory: %1" +msgid "Failed to extract new working directory" +msgstr "保存自定义包含路径到目录失败:%1" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "输出为:%1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "递归 Make 调用失败" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "参数字符串“%1”似乎无效。输出为:%2。" + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "目录“%1”不存在。输出为:%2。" + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "无效的递归 Make 调用" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "无法从 make 的输出中展开包含路径" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "文件夹:“%1” 命令:“%2” 输出:“%3”" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "KDE 前向头文件生成器" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "一个从源代码创建前向头文件(如 Qt 头文件)的应用程序。" + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "(c) 2006,Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "KDE 包含目录 - 头文件将进入 includes/KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "根据 cmake XML 生成器构建信息" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "未终止的 #if 语句" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "字符 %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "需要 \"标识符\",找到:%1" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "
Token text
%1
Input
%2
" +msgstr "
令牌文字
%1
输入
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "需要 \")\",找到:%1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "除数为零" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "输入文字:%1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "需要 ``:'' = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "#else 没有对应的 #if" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "在输出行 %1 处 #endif 没有对应的 #if" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "宏错误" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "调用宏 %1 缺少实参数 %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "形参:%1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "无效输入:%1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "文件导入当前打开的文档
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "在包含路径 %1" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "通过 %1 包含
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "目录 %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "在第 %1 个包含路径" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "包含" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "包含路径" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "包含者" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "C++ 支持" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "C++ 语言支持" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "文件" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "切换定义/声明(&S)" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "创建新类(&N)" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "重命名声明" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "移入源文件" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "由预处理器清空
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "正在分析包含文件" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "正在分析真实文件" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "未更新 %1 的定义使用链" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "正在构建使用" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "就绪" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "文件递归包含自身:%1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "包含文件未找到:%1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"已搜索的包含路径:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "无法打开文件“%1”" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "无法读取文件于。" + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "无法打开文件。" + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "文件权限阻止打开读取。" + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "导航" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "代码" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Ni Hui" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "shuizhuyuanluo@126.com" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "C++ 选项" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "导出(&E):" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "宏(&M):" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "公有" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "受保护" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "私有" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "槽" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "信号" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "存储目录" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "存储目录:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "自动解析" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"如果您的工程使用简单的 Makefile 文件,可使用 make 工具自动解析包含路径。 为" +"此,请在这里设置一个从源代码目录到构建目录的映射。" + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "源代码目录:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "构建目录:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "自定义包含路径" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "您可以在此添加一系列自定义包含路径。" + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"注意:这些设置不会影响到编译器或工程本身, 它们只会用于 KDevelop 内部查找包含" +"的头文件。" + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "私有结构体名称:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "选项" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "使用类而不是结构体" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "将变量初始化移到私有结构体" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "将目前全部已声明的私有方法移到私有实现结构体。" + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "移动私有方法" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "指针名称:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "指向私有实现指针的成员变量名称" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_CN/kdevcustommake.po kdevelop-4.0.1/po/zh_CN/kdevcustommake.po --- kdevelop-3.9.98/po/zh_CN/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_CN/kdevcustommake.po 2010-07-17 20:13:49.000000000 +0100 @@ -0,0 +1,45 @@ +# translation of kdevcustommake.po to 简体中文 +# Copyright (C) 2002,2003, 2004, 2008, 2009 Free Software Foundation, Inc. +# +# Qi Liang , 2001. +# Xiong Jiang , 2002,2003, 2004. +# Funda Wang , 2005. +# Ni Hui , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-02-20 09:19+0000\n" +"Last-Translator: Ni Hui \n" +"Language-Team: 简体中文 \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: KBabel 1.11.4\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "自定义 Makefile 管理器" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "管理自定义 makefile 工程支持" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "运行" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Ni Hui" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "shuizhuyuanluo@126.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_CN/kdevelop.po kdevelop-4.0.1/po/zh_CN/kdevelop.po --- kdevelop-3.9.98/po/zh_CN/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_CN/kdevelop.po 2010-07-17 20:13:49.000000000 +0100 @@ -0,0 +1,744 @@ +# translation of kdevelop.po to 简体中文 +# Copyright (C) 2002,2003, 2004, 2008, 2009 Free Software Foundation, Inc. +# +# Qi Liang , 2001. +# Xiong Jiang , 2002,2003, 2004. +# Funda Wang , 2005. +# Ni Hui , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-01-18 15:21+0800\n" +"Last-Translator: Ni Hui \n" +"Language-Team: Chinese Simplified \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Lokalize 1.0\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "代码" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "KDevelop4 工程文件" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "KDevelop 集成开发环境" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "" + +#: main.cpp:64 main_internal.cpp:85 +#, fuzzy +#| msgid "Copyright 1999-2009, The KDevelop developers" +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "版权所有 1999-2009,KDevelop 开发者" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "" + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "" + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "" + +#: main.cpp:79 +msgid "Hash" +msgstr "" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "" + +#: main.cpp:88 +msgid "[running]" +msgstr "" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "" + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "" + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "" + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "维护者、架构师、VCS 支持、工程管理支持、QMake 工程管理器" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "架构师、界面优化、Ruby 支持" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "定义使用链、C++ 支持、代码导航、代码补全、编码助手、重构" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "CMake 支持、运行支持、Kross 支持" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "GDB 整合" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "文本编辑器集成、定义链" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "网站管理员、API 文档、Doxygen 和 autoproject 补丁" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "astyle 和 indent 支持" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "整合 VCS、Git、Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "片断组件、调试器和易用性补丁" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "Subversion 插件、自定义 Make 管理器、综合改进" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "移植到 Qt 3、修补、valgrind、diff 和 perforce 支持" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "C++ 解析器" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "KWrite 作者" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Kate 编辑器组件" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "诺基亚公司/Qt 软件" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Designer 代码" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "旧版本贡献者:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "KHTML 作者" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "HTML 文档组件" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "原始构思、基本结构、大量初始代码" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar、错误修正" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Java 和 Objective C 支持" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "调试器前端" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "PHP 的支持,环境菜单等" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "KDE 应用程序模板" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Dist 部分、bash 支持、应用程序模板" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "一些组件、htdig 索引" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "协助 Automake 管理器和持久类存储" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "协助设计 KParts 基础结构" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Ada 支持" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "QMake 工程管理器" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "MDI 模式、QEditor、问题修补" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "组件浏览器、CVS 组件重新设计、补丁、问题修补" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "替换、书签、文件列表和 CTags2 插件,以及综合改进和补丁" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "文件创建组件和其它,以及补丁" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "ClearCase 支持" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Ruby 支持" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Fortran 文档" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Python 文档工具" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Doxygen 向导" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "文件选择器组件" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "C++ 代码补全,持久类存储" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "修补" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "协助 Perl 支持" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "文档索引视图" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "文档查找器、QMake 工程管理器修补、易用性改进和缺陷修正等等" + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "QMake 工程管理器补丁" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "qEditor 代码清理和缺陷修正,还有 AutoMake 及其它方面的工作" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "Ruby 语言的美工" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "要装入工程的 Url" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "要装入的文件" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "" + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (使用 KDevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "无法打开 %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "&File" +msgid "&File" +msgstr "文件(&F)" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "&Edit" +msgid "&Edit" +msgstr "编辑(&E)" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "&View" +msgid "&View" +msgstr "查看(&V)" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "Tools" +msgid "&Tools" +msgstr "工具" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +#, fuzzy +#| msgctxt "@title:menu" +#| msgid "Settings" +msgid "&Settings" +msgstr "设置" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "主工具栏" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "会话" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "工程(&P)" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "运行(&R)" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "导航(&N)" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "文件(&F)" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "编辑(&E)" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "编辑器" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "代码" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "窗口(&W)" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "设置" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "KDE 中国" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kde-china@kde.org" + + + + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_CN/kdevformatters.po kdevelop-4.0.1/po/zh_CN/kdevformatters.po --- kdevelop-3.9.98/po/zh_CN/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_CN/kdevformatters.po 2010-07-17 20:13:49.000000000 +0100 @@ -0,0 +1,438 @@ +# translation of kdevformatters.po to 简体中文 +# Copyright (C) 2002,2003, 2004, 2008, 2009 Free Software Foundation, Inc. +# +# Qi Liang , 2001. +# Xiong Jiang , 2002,2003, 2004. +# Funda Wang , 2005. +# Ni Hui , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-02-20 09:20+0000\n" +"Last-Translator: Ni Hui \n" +"Language-Team: 简体中文 \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: KBabel 1.11.4\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "Astyle 格式化器" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "一个使用 astyle 的格式化工具" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Artistic Style 是个用于 C、C++、C# 和 Java 编程语言的源代码缩进器、格" +"式化器和美化器。
主页:http://astyle.sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Indent 格式化器" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "一个使用 indent 的格式化器" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "缩进" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "制表符" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "强制制表符" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "空格" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"要转换为制表符的空格数。\n" +"每个制表符的空格数由编辑器控制。" + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "转换制表符为空格。" + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "转换制表符为空格(&V)" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "用前面行的空格填补空行。" + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "填补空行(&Y)" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "缩进" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "语句块" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "括号" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "Case 关键字" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "类" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "标签" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "命名空间" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "预处理指令" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "Switch 关键字" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "条件中至少使用次数:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "双倍于当前" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "语句中最多使用次数:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "其它" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "类型" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "无更改" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "附加" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "断开" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +#, fuzzy +#| msgid "Blocks" +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "语句块" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "将“else if()”语句断为两行。" + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +#, fuzzy +#| msgid "Break i&f-else" +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "断开 if-else(&F)" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "加空格" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "对括号加空格" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "不加空格" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "仅内部" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "仅外部" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "内部和外部" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "在操作符周围加空格(&A)" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "单行代码" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "保持单行代码语句(&K)" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "" + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "保持单行代码块(&N)" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Ni Hui" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "shuizhuyuanluo@126.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_CN/kdevgdb.po kdevelop-4.0.1/po/zh_CN/kdevgdb.po --- kdevelop-3.9.98/po/zh_CN/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_CN/kdevgdb.po 2010-07-17 20:13:49.000000000 +0100 @@ -0,0 +1,994 @@ +# translation of kdevgdb.po to 简体中文 +# Copyright (C) 2002,2003, 2004, 2008, 2009 Free Software Foundation, Inc. +# +# Qi Liang , 2001. +# Xiong Jiang , 2002,2003, 2004. +# Funda Wang , 2005. +# Ni Hui , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevgdb\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-01-18 15:27+0800\n" +"Last-Translator: Ni Hui \n" +"Language-Team: Chinese Simplified \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Lokalize 1.0\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "监视" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "最近" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
旧值:%1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
新值:%1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "GDB 支持" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "在 GDB 中运行程序支持" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "反汇编" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "剖析核心文件..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "剖析核心文件" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"检查溃核文件

加载 core 溃核文件。它通常在程序崩溃后产生,比如段错误" +"等。溃核文件包含程序崩溃时的内存映像,能让您进行后期崩溃分析。

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "附加到进程" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "附加到进程..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "附加到进程

将调试器附加到运行中的进程。

" + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "计算:%1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "计算表达式

显示光标下表达式的值。

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "监视:%1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "观察表达式

将光标下的表达式添加到变量/观察列表。

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "选择要剖析的核心文件..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "正在剖析核心文件 %1" + +#: debuggerplugin.cpp:372 +#, fuzzy +#| msgid "Examine core file" +msgid "Debug core file" +msgstr "剖析核心文件" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "选择要附加到的进程..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "未附加到进程 %1:无法将调试器附加到其自身。" + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "正在附加到进程 %1" + +#: debuggerplugin.cpp:402 +#, fuzzy, kde-format +#| msgid "Attaching to process %1" +msgid "Debug process %1" +msgstr "正在附加到进程 %1" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "调试器" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "调试器已停止" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "应用程序已中断" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "进程已退出" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "应用程序正在运行" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "应用程序已暂停" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"GDB 异常退出

这像是 GDB 中的错误。请检查 gdb 输出窗口然后停止调试器" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "GDB 异常退出" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "在调试器运行前发送了 GDB 命令
命令为:
%1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "内部错误" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "无效的调试器命令
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "无效的调试器命令" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "正常退出" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "以信号 %1 退出" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "程序收到了信号 %1(%2)" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "程序运行中" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"gdb 无法使用 tty* 或 pty* 设备。\n" +"请检查 /dev/tty* 和 /dev/pty* 的设置\n" +"\n" +"您也许需要作为超级用户对 tty* 和 pty* 设备使用“chmod ug+rw”命令并且/或者使" +"用“usermod -G tty username”命令将用户添加到 tty 组中。" + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "警告" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "调试器错误

调试器报告了以下错误:

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "调试器错误" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "队列中有 %1 条命令\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "gdb 已经处理了 %1 条命令\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "调试器状态:%1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"当前命令类别:“%1”\n" +"当前命令文本:“%2”\n" +"当前命令的原文:“%3”\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "调试器状态" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "您需要 gdb 7.0.0 或更高版本。
您正在使用:%1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "gdb 错误" + +#: debugsession.cpp:1417 +#, fuzzy +#| msgid "Could not start debugger" +msgid "Could not start debugger:
" +msgstr "无法启动调试器" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "" + +#: debugsession.cpp:1429 +#, fuzzy +#| msgid "Could not start debugger" +msgid "Could not attach debugger:
" +msgstr "无法启动调试器" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"机器码显示

显示机器代码的视图,里面显示您当前运行的程序中的指令并且" +"当前指令被加亮。您可以使用调试器工具栏中的“单步指令”和“单步跟进指令”按钮来逐" +"条执行指令。" + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "反汇编视图" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "地址" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "函数" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "偏移量" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "指令" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "无法定位调试器 shell“%1”。" + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "未找到调试器 Shell " + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "

调试器组件在处理 gdb 响应时遇到内部错误。请提交错误报告。" + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "内部调试器错误" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "无法启动调试器。

“%1”不能运行。请确认您指定的路径名无误。" + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "无法启动调试器" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "GDB 配置" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "在 GDB 中执行原生应用程序" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "GDB 输出" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"GDB 输出

显示所有已执行过的 gdb 命令。您也可以在调试时分派任何其它 " +"gdb 命令。

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "GDB 命令(&G):" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "暂停执行中的程序以输入 gdb 命令" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "显示内部命令" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "全部复制" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "开始" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "总计" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "确定" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "取消" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "内存视图" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (%1 字节)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "更改内存范围" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "重新装入" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "关闭此视图" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "特殊调试器视图" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "附加到进程" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "选择核心文件" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "kdevelop:程序调试控制台" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "调试器配置" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "调试器可执行文件:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "Gdb 可执行文件" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "在特定的 shell 中运行 gdb(主要用于 automake 工程)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "调试器外壳(&S):" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "选项" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"显示静态成员将会使 gdb 在 KDE\n" +"和 Qt 中生成数据的速度变慢。\n" +"它可能改变那些 QString 和友元\n" +"函数所依赖的数据的“签名”。\n" +"但是如果您需要调试这些变量的话,\n" +"请选中这个选项。" + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "显示静态成员(&M)" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"当显示反汇编代码时,您可以选择显示编码后的方法名。\n" +"然而,未编码的方法名要容易阅读得多。" + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "显示解码后的方法名(&D)" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"当一个库通过“dlopen”加载的时候,如果 GDB 没\n" +"有用到过它,那么它将拒绝在那里的代码中设置断点。\n" +"使用此选项,我们可以在载入库的时候让 GDB 停下来,这样我们\n" +"就可以尝试设置待定断点。请在相关文档中查看与这\n" +"种行为相关的更多细节。\n" +"\n" +"如果您不是用“dlopen”加载库,请不要选择这项。" + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "尝试在装入库时设置断点(&B)" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"如果您的应用程序含有终端输入代码(比如 cin、fgets 等等)\n" +"这让您可以在终端里进行输入。如果您在程序里用到终端输入\n" +"请选中此选项,反之请不要选中它。" + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "为应用程序输入输出启用独立的终端(&I)" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"这个脚本是连接到远程运行的执行程序所需要的实际命令。\n" +"\tshell sleep 5\t等待远程程序启动\n" +"\ttarget remote ...\t连接到远程调试器\n" +"\tcontinue\t[optional] 调试运行到第一个断点" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "远程调试" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "配置 gdb 脚本(&C):" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "Gdb 配置脚本" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "" + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "运行 shell 脚本(&U):" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "启动远程应用程序的脚本" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"这个脚本用于远程调试时启动远程进程。\n" +"[这个脚本希望可以连接调试的进程,或者在编译的最后可以下载到本地。]\n" +"1)选择执行远程命令的方式-rsh,ssh,telnet,...\n" +"2a)在目标平台上运行\"gdbserver ... 应用程序\"。\n" +"或者您的应用程序中已经包含gdb启动程序\n" +"2b)在目标平台上运行\"应用程序\"。" + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "运行 gdb 脚本(&G):" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "连接远程应用程序的脚本" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"这个脚本是连接到远程运行的执行程序所需要的实际命令。\n" +"\tshell sleep 5\t等待远程程序启动\n" +"\ttarget remote ...\t连接到远程调试器\n" +"\tcontinue\t[optional] 调试运行到第一个断点。" + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "跟踪配置" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "启用跟踪" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "自定义格式字符串" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "要打印的表达式:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "运行" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "调试工具栏" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "可执行文件:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "核心文件:" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Ni Hui" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "shuizhuyuanluo@126.com" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_CN/kdevmakebuilder.po kdevelop-4.0.1/po/zh_CN/kdevmakebuilder.po --- kdevelop-3.9.98/po/zh_CN/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_CN/kdevmakebuilder.po 2010-07-17 20:13:49.000000000 +0100 @@ -0,0 +1,169 @@ +# translation of kdevmakebuilder.po to 简体中文 +# Copyright (C) 2002,2003, 2004, 2008, 2009 Free Software Foundation, Inc. +# +# Qi Liang , 2001. +# Xiong Jiang , 2002,2003, 2004. +# Funda Wang , 2005. +# Ni Hui , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-05-28 12:03+0000\n" +"Last-Translator: Ni Hui \n" +"Language-Team: 简体中文 \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: KBabel 1.11.4\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Make 构建器" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "构建 Make 工程支持" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make:%1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "无效的构建目录“%1”" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "无法为目标“%1”创建构建命令" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "作业失败" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** 失败 ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** 已完成 ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** 中止 ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "正在编译" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "正在生成" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "正在连接" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "已构建" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "正在安装" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "正在创建" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "查看" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "遇到第一个错误时中止:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "显示要执行的命令但并不实际执行:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "以 root 安装:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Root 安装命令:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "并行任务个数:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Make 可执行文件:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "默认 make 目标:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "附加 make 选项:" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "启动环境变量配置文件:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Ni Hui" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "shuizhuyuanluo@126.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_CN/kdevqthelp.po kdevelop-4.0.1/po/zh_CN/kdevqthelp.po --- kdevelop-3.9.98/po/zh_CN/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_CN/kdevqthelp.po 2010-07-17 20:13:49.000000000 +0100 @@ -0,0 +1,71 @@ +# translation of kdevqthelp.po to 简体中文 +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Ni Hui , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-01-18 16:13+0800\n" +"Last-Translator: Ni Hui \n" +"Language-Team: Chinese Simplified \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "无法找到任何“%1”的文档" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "QtHelp 主页" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "检查 Qt 帮助文档" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Ni Hui" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "shuizhuyuanluo@126.com" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +#, fuzzy +#| msgid "QtHelp Home Page" +msgid "Help page:" +msgstr "QtHelp 主页" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_TW/CMakeLists.txt kdevelop-4.0.1/po/zh_TW/CMakeLists.txt --- kdevelop-3.9.98/po/zh_TW/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_TW/CMakeLists.txt 2010-07-17 20:13:55.000000000 +0100 @@ -0,0 +1,2 @@ +file(GLOB _po_files *.po) +GETTEXT_PROCESS_PO_FILES(zh_TW ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) diff -Nru kdevelop-3.9.98/po/zh_TW/kdevcmakebuilder.po kdevelop-4.0.1/po/zh_TW/kdevcmakebuilder.po --- kdevelop-3.9.98/po/zh_TW/kdevcmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_TW/kdevcmakebuilder.po 2010-07-17 20:13:55.000000000 +0100 @@ -0,0 +1,91 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Frank Weng (a.k.a. Franklin) , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-02-24 07:57+0800\n" +"Last-Translator: Frank Weng (a.k.a. Franklin) \n" +"Language-Team: Chinese Traditional \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: cmakebuilder.cpp:65 +msgid "CMake Builder" +msgstr "CMake 編譯器" + +#: cmakebuilder.cpp:66 +msgid "Support for building CMake projects" +msgstr "支援編譯 CMake 專案" + +#: cmakebuilder.cpp:129 +msgid "No Build Directory configured, cannot build" +msgstr "未設定編譯目錄,無法編譯" + +#: cmakebuilder.cpp:129 +msgid "Aborting build" +msgstr "中止編譯" + +#: cmakebuilder.cpp:160 +msgid "No Build Directory configured, cannot clean" +msgstr "未設定編譯目錄,無法清除" + +#: cmakebuilder.cpp:160 +msgid "Aborting clean" +msgstr "中止清除" + +#: cmakebuilder.cpp:190 +msgid "No Build Directory configured, cannot install" +msgstr "未設定編譯目錄,無法安裝" + +#: cmakebuilder.cpp:190 +msgid "Aborting install" +msgstr "中止安裝" + +#: cmakebuilder.cpp:210 +msgid "No Build Directory configured, cannot configure" +msgstr "未設定編譯目錄,無法設定" + +#: cmakebuilder.cpp:210 +msgid "Aborting configure" +msgstr "中止設定" + +#: cmakebuilder.cpp:224 +msgid "No Build Directory configured, cannot clear builddir" +msgstr "未設定編譯目錄,無法清除編譯目錄" + +#: cmakebuilder.cpp:224 +msgid "No clearing of builddir possible" +msgstr "編譯目錄無法清除" + +#: cmakejob.cpp:114 +msgid "Job failed" +msgstr "工作失敗" + +#: cmakejob.cpp:174 +#, kde-format +msgid "CMake: %1" +msgstr "CMake:%1" + +#. i18n: file: cmakeconfig.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label1) +#: rc.cpp:3 rc.cpp:8 +msgid "CMake Binary:" +msgstr "CMake 執行檔:" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frank Weng (a.k.a. Franklin)" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "franklin at goodhorse dot idv dot tw" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_TW/kdevcmake.po kdevelop-4.0.1/po/zh_TW/kdevcmake.po --- kdevelop-3.9.98/po/zh_TW/kdevcmake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_TW/kdevcmake.po 2010-07-17 20:13:55.000000000 +0100 @@ -0,0 +1,460 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Frank Weng (a.k.a. Franklin) , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevcmake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-06-13 01:30+0200\n" +"PO-Revision-Date: 2010-06-02 07:35+0800\n" +"Last-Translator: Frank Weng (a.k.a. Franklin) \n" +"Language-Team: Chinese Traditional \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: cmakedocumentation.cpp:42 +msgid "CMake Documentation" +msgstr "CMake 文件" + +#: cmakedocumentation.cpp:42 +msgid "Support for CMake documentation" +msgstr "支援 CMake 文件" + +#: cmakedocumentation.cpp:122 +#, kde-format +msgid "
Cache Value: %1\n" +msgstr "
快取值: %1\n" + +#: cmakedocumentation.cpp:125 +#, kde-format +msgid "
Cache Documentation: %1\n" +msgstr "
快取文件: %1\n" + +#: cmakehelpdocumentation.cpp:33 +msgid "Commands" +msgstr "命令" + +#: cmakehelpdocumentation.cpp:33 cmakecodecompletionmodel.cpp:179 +msgid "Variable" +msgstr "變數" + +#: cmakehelpdocumentation.cpp:33 +msgid "Module" +msgstr "模組" + +#: cmakehelpdocumentation.cpp:33 +msgid "Property" +msgstr "屬性" + +#: cmakehelpdocumentation.cpp:33 +msgid "Policy" +msgstr "政策" + +#: cmakehelpdocumentation.cpp:42 +msgid "CMake Content Page" +msgstr "CMake 內容頁面" + +#: parser/cmakeprojectvisitor.cpp:2102 +#, kde-format +msgid "%1 is a deprecated command and should not be used" +msgstr "%1 是已廢棄的指令,不應再使用。" + +#: parser/cmakeprojectvisitor.cpp:2121 +msgid "Unfinished function. " +msgstr "未完成函式。" + +#: settings/cmakecachemodel.cpp:34 +msgid "Name" +msgstr "名稱" + +#: settings/cmakecachemodel.cpp:35 +msgid "Type" +msgstr "型態" + +#: settings/cmakecachemodel.cpp:36 +msgid "Value" +msgstr "值" + +#: settings/cmakecachemodel.cpp:37 +msgid "Comment" +msgstr "註解" + +#. i18n: file: settings/cmakebuildsettings.ui:106 +#. i18n: ectx: property (title), widget (QGroupBox, advancedBox) +#: settings/cmakecachemodel.cpp:38 rc.cpp:41 +msgid "Advanced" +msgstr "進階" + +#: settings/cmakepreferences.cpp:272 +#, kde-format +msgid "" +"The %1 directory is about to be removed in KDevelop's list.\n" +"Do you want KDevelop to remove it in the file system as well?" +msgstr "" +"目錄 %1 即將要從 KDevelop 的清單中移除。\n" +"您要 KDevelop 順便把該目錄從檔案系統中砍掉嗎?" + +#: settings/cmakepreferences.cpp:278 +#, kde-format +msgid "Could not remove: %1.\n" +msgstr "無法移除: %1 。\n" + +#: tests/manual/kde4app/kde4app.cpp:60 +msgid "Swi&tch Colors" +msgstr "切換顏色(&T)" + +#: tests/manual/kde4app/kde4app.cpp:88 +msgid "General" +msgstr "一般" + +#. i18np : internationalization +#: tests/manual/kde4app/kde4appview.cpp:42 +#, kde-format +msgid "This project is one day old" +msgid_plural "This project is %1 days old" +msgstr[0] "此專案已過 %1 天" + +#: tests/manual/kde4app/kde4appview.cpp:43 +msgid "Settings changed" +msgstr "設定已變更" + +#: tests/manual/kde4app/main.cpp:8 +msgid "A KDE 4 Application" +msgstr "KDE4 應用程式" + +#: tests/manual/kde4app/main.cpp:14 +msgid "kde4app" +msgstr "KDE4 應用程式" + +#: tests/manual/kde4app/main.cpp:15 +msgid "(C) 2007 %{AUTHOR}" +msgstr "(C) 2007 %{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:16 +msgid "%{AUTHOR}" +msgstr "%{AUTHOR}" + +#: tests/manual/kde4app/main.cpp:20 +msgid "Document to open" +msgstr "要開啟的文件" + +#: cmakebuilddirchooser.cpp:34 +msgid "Configure a build directory" +msgstr "設定編譯目錄" + +#: cmakebuilddirchooser.cpp:58 +#, kde-format +msgid "Configure a build directory for %1" +msgstr "設定 %1 的編譯目錄" + +#: cmakebuilddirchooser.cpp:100 +msgid "You need to select a cmake binary." +msgstr "您需要選擇 cmake 執行檔。" + +#: cmakebuilddirchooser.cpp:143 +msgid "You need to specify a build directory." +msgstr "您必須指定編譯目錄。" + +#: cmakebuilddirchooser.cpp:150 +msgid "Using an already created build directory." +msgstr "使用已建立的編譯目錄。" + +#: cmakebuilddirchooser.cpp:161 +msgid "Creating a new build directory." +msgstr "建立新的編譯目錄。" + +#: cmakebuilddirchooser.cpp:167 +msgid "Build directory already configured." +msgstr "編譯目錄已設定" + +#: cmakebuilddirchooser.cpp:169 +#, kde-format +msgid "This build directory is for %1, but the project directory is %2." +msgstr "此編譯目錄是專案 %1 用的,但是專案目錄為 %2。" + +#: cmakebuilddirchooser.cpp:172 +msgid "You may not select a relative build directory." +msgstr "您不能選擇一個相對的編譯目錄。" + +#: cmakebuilddirchooser.cpp:174 +msgid "The selected build directory is not empty." +msgstr "選取的編譯目錄非空白。" + +#: cmakemanager.cpp:95 +msgid "CMake Manager" +msgstr "CMake 管理員" + +#: cmakemanager.cpp:95 +msgid "Support for managing CMake projects" +msgstr "支援管理 CMake 專案" + +#: cmakemanager.cpp:930 +msgid "Jump to target definition" +msgstr "跳到目標定義" + +#: cmakemanager.cpp:1005 +#, kde-format +msgid "Create a folder called '%1'." +msgstr "建立名為 %1 的資料夾" + +#: cmakemanager.cpp:1018 cmakemanager.cpp:1027 cmakemanager.cpp:1060 +#: cmakemanager.cpp:1231 +msgid "KDevelop - CMake Support" +msgstr "KDevelop - CMake 支援" + +#: cmakemanager.cpp:1019 +msgid "Could not create the directory's CMakeLists.txt file." +msgstr "無法建立目錄裡的 CMakeLists.txt 檔。" + +#: cmakemanager.cpp:1028 cmakemanager.cpp:1061 +msgid "Could not save the change." +msgstr "無法儲存變更。" + +#: cmakemanager.cpp:1048 +#, kde-format +msgid "Remove a folder called '%1'." +msgstr "移除名為 %1 的資料夾" + +#: cmakemanager.cpp:1170 cmakemanager.cpp:1323 +#, kde-format +msgid "Remove a file called '%1'." +msgstr "移除名為 %1 的檔案" + +#: cmakemanager.cpp:1220 +#, kde-format +msgid "Add a file called '%1' to target '%2'." +msgstr "新增名為 %1 的檔案到目標 %2" + +#: cmakemanager.cpp:1232 +msgid "Cannot save the change." +msgstr "無法儲存變更。" + +#: cmakemanager.cpp:1370 +#, kde-format +msgid "Rename a folder called '%1'." +msgstr "移除名為 %1 的資料夾。" + +#: cmakeutils.cpp:84 +msgid "The build directory did not exist and could not be created." +msgstr "編譯目錄不存在,並且無法被建立。" + +#: cmakeutils.cpp:85 +msgid "Error creating build directory" +msgstr "建立編譯目錄時發生錯誤" + +#: cmakecodecompletionmodel.cpp:171 +msgid "INVALID" +msgstr "不合法" + +#: cmakecodecompletionmodel.cpp:178 +msgid "Command" +msgstr "指令" + +#: cmakecodecompletionmodel.cpp:180 +msgid "Macro" +msgstr "巨集" + +#: cmakecodecompletionmodel.cpp:181 +msgid "Path" +msgstr "路徑" + +#. i18n: file: cmakebuilddirchooser.ui:26 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:3 rc.cpp:89 +msgid "CMake &Binary:" +msgstr "CMake 執行檔(&B):" + +#. i18n: file: cmakebuilddirchooser.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:6 rc.cpp:92 +msgid "&Build Directory:" +msgstr "編譯目錄(&B):" + +#. i18n: file: cmakebuilddirchooser.ui:65 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:9 rc.cpp:95 +msgid "&Installation Prefix:" +msgstr "安裝前置字串(&I):" + +#. i18n: file: cmakebuilddirchooser.ui:88 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:12 rc.cpp:98 +msgid "Build &type:" +msgstr "編譯型態(&T):" + +#. i18n: file: cmakepossibleroots.ui:16 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:15 rc.cpp:23 +msgid "" +"KDevelop has found several possible project root for your project, please " +"select the correct one." +msgstr "KDevelop 已找到幾個可能的專案根目錄,請選擇正確的一個。" + +#: rc.cpp:16 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frank Weng (a.k.a. Franklin)" + +#: rc.cpp:17 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "franklin at goodhorse dot idv dot tw" + +#. i18n: file: tests/manual/kde4app/kde4appui.rc:4 +#. i18n: ectx: Menu (move) +#: rc.cpp:20 +msgid "&Move" +msgstr "移動(&M)" + +#. i18n: file: settings/cmakebuildsettings.ui:33 +#. i18n: ectx: property (text), widget (QPushButton, addBuildDir) +#: rc.cpp:26 +msgid "Add" +msgstr "新增" + +#. i18n: file: settings/cmakebuildsettings.ui:46 +#. i18n: ectx: property (text), widget (QPushButton, removeBuildDir) +#: rc.cpp:29 +msgid "Remove" +msgstr "移除" + +#. i18n: file: settings/cmakebuildsettings.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:32 +msgid "Cache Values" +msgstr "快取值" + +#. i18n: file: settings/cmakebuildsettings.ui:70 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:35 +msgid "Comment:" +msgstr "註釋:" + +#. i18n: file: settings/cmakebuildsettings.ui:87 +#. i18n: ectx: property (text), widget (QPushButton, showAdvanced) +#: rc.cpp:38 +msgid "Show Advanced" +msgstr "顯示進階" + +#. i18n: file: settings/cmakebuildsettings.ui:112 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "CMake Directory" +msgstr "CMake 目錄" + +#. i18n: file: settings/cmakebuildsettings.ui:122 +#. i18n: ectx: property (text), widget (QCheckBox, showInternal) +#: rc.cpp:47 +msgid "Show Advanced Values" +msgstr "顯示進階數值" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:13 +#. i18n: ectx: property (windowTitle), widget (QWidget, kde4appview_base) +#: rc.cpp:50 +msgid "kapp4_base" +msgstr "kapp4_base" + +#. i18n: file: tests/manual/kde4app/kde4appview_base.ui:194 +#. i18n: ectx: property (text), widget (QLabel, kcfg_sillyLabel) +#: rc.cpp:53 +msgid "hello, world" +msgstr "hello, world" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:16 +#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) +#: rc.cpp:56 +msgid "Background color:" +msgstr "背景顏色:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:26 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_background) +#: rc.cpp:59 +msgid "Choose a new background color" +msgstr "請選擇新的背景顏色" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:32 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_background) +#: rc.cpp:62 +msgid "" +"\n" +"

Change the background color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

點擊此處以變更背景顏色,並在顏色對話框中選擇新的顏色" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:42 +#. i18n: ectx: property (text), widget (QLabel, textLabel1) +#: rc.cpp:68 +msgid "Project age:" +msgstr "專案期間:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:52 +#. i18n: ectx: property (text), widget (QLabel, textLabel2) +#: rc.cpp:71 +msgid "Foreground color:" +msgstr "前景顏色:" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:62 +#. i18n: ectx: property (toolTip), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:74 +msgid "Choose a new foreground color" +msgstr "請選擇新的前景顏色" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:68 +#. i18n: ectx: property (whatsThis), widget (KColorButton, kcfg_col_foreground) +#: rc.cpp:77 +msgid "" +"\n" +"

Change the foreground color by clicking here and choose the " +"new color in the color dialog.

" +msgstr "" +"\n" +"

點擊此處以變更前景顏色,並在顏色對話框中選擇新的顏色" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:110 +#. i18n: ectx: property (toolTip), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:83 +msgid "Set the project age (in days)" +msgstr "設定專案期間(天)" + +#. i18n: file: tests/manual/kde4app/prefs_base.ui:113 +#. i18n: ectx: property (whatsThis), widget (QSpinBox, kcfg_val_time) +#: rc.cpp:86 +msgid "Change the project age (in days) by choosing a new number of days." +msgstr "重新設定專案期間(天)。" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_TW/kdevcpp.po kdevelop-4.0.1/po/zh_TW/kdevcpp.po --- kdevelop-3.9.98/po/zh_TW/kdevcpp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_TW/kdevcpp.po 2010-07-17 20:13:55.000000000 +0100 @@ -0,0 +1,892 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Frank Weng (a.k.a. Franklin) , 2008, 2009, 2010. +# Frank Weng (a.k.a. Franklin) , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcpp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-02 07:36+0800\n" +"Last-Translator: Frank Weng (a.k.a. Franklin) \n" +"Language-Team: Chinese Traditional \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: codecompletion/missingincludemodel.cpp:182 codecompletion/context.cpp:673 +msgid "Not Included" +msgstr "未引入" + +#: codecompletion/context.cpp:800 +msgid "Initialize" +msgstr "初始化" + +#: codecompletion/context.cpp:1224 +msgid "Not Included Container" +msgstr "未引入容器" + +#: codecompletion/context.cpp:1272 +#, kde-format +msgctxt "" +"Here, overload is used as a programming term. This string is used to " +"display how many overloaded versions there are of the function whose name is " +"the second argument. The numeric argument is always greater than one, so " +"translation of the singular case is only necessary in languages where the " +"singular form is used for 21, 31 etc." +msgid "1 overload of %2" +msgid_plural "%1 overloads of %2" +msgstr[0] "%2 的 %1 個過載" + +#: codecompletion/context.cpp:1396 +#, kde-format +msgid "Connect to %1 (%2)" +msgstr "連接到 %1(%2)" + +#: codecompletion/context.cpp:1448 +msgid "Signals/Slots" +msgstr "信號/信號槽" + +#: codecompletion/context.cpp:1486 +msgid "Virtual Override" +msgstr "虛擬覆寫" + +#: codecompletion/context.cpp:1495 +msgid "Implement Function" +msgstr "實作函式" + +#: codecompletion/context.cpp:1696 codecompletion/context.cpp:1709 +msgid "C++ Builtin" +msgstr "C++ 內建" + +#: codecompletion/implementationhelperitem.cpp:80 +msgid "Override" +msgstr "覆寫" + +#: codecompletion/implementationhelperitem.cpp:82 +msgid "Implement" +msgstr "實作" + +#: codecompletion/implementationhelperitem.cpp:84 +msgid "Create Slot" +msgstr "建立信號槽" + +#: codecompletion/implementationhelperitem.cpp:121 +#, kde-format +msgid "From %1" +msgstr "從 %1" + +#: codecompletion/missingincludeitem.cpp:377 +msgid "Add include directive" +msgstr "新增引入項目" + +#: codecompletion/missingincludeitem.cpp:434 +msgid "Add Forward-Declaration" +msgstr "新增前置宣告" + +#: codecompletion/missingincludeitem.cpp:446 +msgid "forward-declare" +msgstr "前置宣告" + +#: codegen/makeimplementationprivate.cpp:175 +msgid "Private Class Implementation Options" +msgstr "私有(Private)類別實作選項" + +#: codegen/progressdialogs.cpp:56 codegen/simplerefactoring.cpp:439 +msgid "Cancel" +msgstr "取消" + +#: codegen/signatureassistant.cpp:196 +#, kde-format +msgid "Update Definition from %1(%2) to (%3)" +msgstr "更新定義,從 %1(%2)到(%3)" + +#: codegen/signatureassistant.cpp:238 +#, kde-format +msgid "Failed to apply changes: %1" +msgstr "套用變更時失敗:%1" + +#: codegen/simplerefactoring.cpp:81 +msgid "" +"Refactoring is an experimental feature, it may damage your code. Before " +"using it, make sure to make a backup." +msgstr "" +"重構(refactor)是個實驗中的功能,可能會弄壞您的程式碼。使用前請記得備份。" + +#: codegen/simplerefactoring.cpp:123 codegen/simplerefactoring.cpp:422 +#, kde-format +msgid "Rename %1" +msgstr "重新命名 %1" + +#: codegen/simplerefactoring.cpp:135 +#, kde-format +msgid "Create separate definition for %1" +msgstr "建立 %1 的分別定義" + +#: codegen/simplerefactoring.cpp:151 +msgid "Create Class" +msgstr "建立新類別" + +#: codegen/simplerefactoring.cpp:205 codegen/simplerefactoring.cpp:380 +msgid "No declaration under cursor" +msgstr "在游標下沒有宣告" + +#: codegen/simplerefactoring.cpp:216 +#, kde-format +msgid "No source file available for %1." +msgstr "沒有 %1 可用的源碼檔。" + +#: codegen/simplerefactoring.cpp:229 +#, kde-format +msgid "Failed to update DU chain for %1." +msgstr "更新 %1 的 DU chain 失敗。" + +#: codegen/simplerefactoring.cpp:240 +msgid "Cannot create definition for this declaration." +msgstr "無法建立此宣告的定義。" + +#: codegen/simplerefactoring.cpp:268 +msgid "Insertion failed" +msgstr "插入失敗" + +#: codegen/simplerefactoring.cpp:274 +msgid "Applying changes failed" +msgstr "套用變更失敗" + +#: codegen/simplerefactoring.cpp:284 +#, kde-format +msgid "No document for %1" +msgstr "沒有 %1 的文件" + +#: codegen/simplerefactoring.cpp:288 +msgid "Declaration lost while updating" +msgstr "更新時遺失宣告" + +#: codegen/simplerefactoring.cpp:386 +#, kde-format +msgid "Declaration is located in non-writeable file %1." +msgstr "宣告位於一個無法寫入的檔案 %1。" + +#: codegen/simplerefactoring.cpp:424 +msgid "New name:" +msgstr "新名稱:" + +#: codegen/simplerefactoring.cpp:434 +msgid "Rename" +msgstr "重新命名" + +#: codegen/simplerefactoring.cpp:435 +msgid "" +"Note: All overloaded functions, overloads, forward-declarations, etc. will " +"be renamed too" +msgstr "注意:所有過載函式,前置宣告等都會跟著重新命名" + +#: codegen/simplerefactoring.cpp:443 +msgid "Uses" +msgstr "使用" + +#: codegen/simplerefactoring.cpp:445 +msgid "Declaration Info" +msgstr "宣告資訊" + +#: codegen/simplerefactoring.cpp:467 +#, kde-format +msgid "Renaming \"%1\" to \"%2\"" +msgstr "將 %1 重新命名為 %2" + +#: codegen/simplerefactoring.cpp:487 codegen/simplerefactoring.cpp:495 +#: codegen/simplerefactoring.cpp:503 +#, kde-format +msgid "Applying changes failed: %1" +msgstr "套用變更失敗:%1" + +#: codegen/unresolvedincludeassistant.cpp:71 +msgid "Setup Custom Include Paths" +msgstr "設定自訂引入路徑" + +#: codegen/unresolvedincludeassistant.cpp:94 +#, kde-format +msgid "Failed to save custom include paths in directory: %1" +msgstr "在目錄 %1 儲存自訂引入路徑失敗" + +#: codegen/unresolvedincludeassistant.cpp:110 +msgid "Add Custom Include Path" +msgstr "新增自訂引入路徑" + +#: codegen/unresolvedincludeassistant.cpp:122 +msgid "Open Project" +msgstr "開啟專案" + +#: codegen/unresolvedincludeassistant.cpp:126 +#, kde-format +msgid "Not Found: %1" +msgstr "未找到:%1" + +#: codegen/cppnewclass.cpp:162 +msgid "Did not select anything, not adding to a target." +msgstr "並未選擇任何東西,因此未加入目標。" + +#: cppduchain/contextbuilder.cpp:180 +#, kde-format +msgid "Could not resolve base class, adding it indirectly: %1" +msgstr "無法解析基礎類別,改不直接新增:%1" + +#: cppduchain/contextbuilder.cpp:185 +#, kde-format +msgid "Invalid base class: %1" +msgstr "不合法的基礎類別:%1" + +#: cppduchain/missingdeclarationassistant.cpp:54 +#, kde-format +msgid "Create local declaration %1 %2" +msgstr "建立本地宣告 %1 %2" + +#: cppduchain/missingdeclarationassistant.cpp:121 +#, kde-format +msgid "Declare %1 %2 %3" +msgstr "宣告 %1 %2 %3" + +#: cppduchain/missingdeclarationproblem.cpp:27 +#, kde-format +msgid "Declaration not found: %1" +msgstr "找不到宣告:%1" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Headers included into this header" +msgid "Included" +msgstr "已引入" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of files this header was included into" +msgid "Included by" +msgstr "引用者" + +#: cppduchain/navigation/includenavigationcontext.cpp:51 +msgctxt "Count of macros defined in this header" +msgid "Defined macros" +msgstr "定義巨集" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Function macro" +msgstr "函式巨集" + +#: cppduchain/navigation/macronavigationcontext.cpp:71 +msgid "Macro" +msgstr "巨集" + +#: cppduchain/navigation/macronavigationcontext.cpp:81 +msgid "Preprocessed body:" +msgstr "預先處理的主體:" + +#: cppduchain/navigation/macronavigationcontext.cpp:87 +msgid "Body:" +msgstr "主體:" + +#: includepathcomputer.cpp:177 +#, kde-format +msgid "Build manager for project %1 did not return a build directory" +msgstr "專案 %1 的編譯管理員沒有傳回編譯路徑" + +#: includepathcomputer.cpp:178 +msgid "" +"The include path resolver needs the build directory to resolve additional " +"include paths. Consider setting up a build directory in the project manager " +"if you have not done so yet." +msgstr "" +"引入路徑解析器需要編譯目錄來解析額外的引入路徑。若您未設定,請考慮在專案管理" +"員中設定編譯目錄。" + +#: includepathcomputer.cpp:219 +msgid "Build manager did not return an include path" +msgstr "編譯管理員沒有傳回引入路徑" + +#: includepathcomputer.cpp:220 +#, kde-format +msgid "" +"The build manager did not return the include path %1, which could be " +"resolved by the include path resolver" +msgstr "編譯管理員沒有傳回引入路徑 %1,應該由引入路徑解析器來解析。" + +#: includepathcomputer.cpp:238 +#, kde-format +msgid "Include path resolver: %1" +msgstr "引入路徑解析器:%1" + +#: includepathcomputer.cpp:239 +#, kde-format +msgid "" +"Used build directory: \"%1\"\n" +"Include path resolver: %2" +msgstr "" +"已使用的編譯目錄:%1\n" +"引入路徑解析器:%2" + +#: includepathresolver.cpp:483 +msgid "" +"Tried include path resolution while another resolution process was still " +"running" +msgstr "在另一個解析行程執行時又試著解析引入路徑" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Makefile is missing in folder \"%1\"" +msgstr "資料夾 %1 中的 Makefile 不見了" + +#: includepathresolver.cpp:579 +#, kde-format +msgid "Problem while trying to resolve include paths for %1" +msgstr "試著解析 %1 的引入路徑時發生問題" + +#: includepathresolver.cpp:605 +#, kde-format +msgid "Cached: %1" +msgstr "已快取:%1" + +#: includepathresolver.cpp:635 +#, kde-format +msgid "Filename %1 seems to be malformed" +msgstr "檔名 %1 不正確" + +#: includepathresolver.cpp:775 +msgid "Failed to extract new working directory" +msgstr "展開新的工作目錄時失敗" + +#: includepathresolver.cpp:775 includepathresolver.cpp:804 +#, kde-format +msgid "Output was: %1" +msgstr "輸出為:%1" + +#: includepathresolver.cpp:797 includepathresolver.cpp:800 +msgid "Recursive make call failed" +msgstr "遞迴 make 呼叫失敗" + +#: includepathresolver.cpp:797 +#, kde-format +msgid "The parameter string \"%1\" does not seem to be valid. Output was: %2." +msgstr "參數 %1 不合法。輸出為:%2" + +#: includepathresolver.cpp:800 +#, kde-format +msgid "The directory \"%1\" does not exist. Output was: %2." +msgstr "目錄 %1 不存在。輸出為:%2" + +#: includepathresolver.cpp:804 +msgid "Malformed recursive make call" +msgstr "不正確的遞迴 make 呼叫" + +#: includepathresolver.cpp:856 +msgid "Could not extract include paths from make output" +msgstr "無法從 make 輸出展開引入檔路徑" + +#: includepathresolver.cpp:857 +#, kde-format +msgid "Folder: \"%1\" Command: \"%2\" Output: \"%3\"" +msgstr "資料夾:%1,指令:%2,輸出:%3" + +#: parser/headergen/main.cpp:240 +msgid "KDE forwarding header generator" +msgstr "KDE 向前標頭產生器" + +#: parser/headergen/main.cpp:241 +msgid "" +"An application which creates forwarding headers (like Qt headers) from " +"source code." +msgstr "從源碼建立向前標頭(forward header,如 Qt 的標頭)的應用程式" + +#: parser/headergen/main.cpp:242 +msgid "(c) 2006, Hamish Rodda" +msgstr "(c) 2006, Hamish Rodda" + +#: parser/headergen/main.cpp:247 +msgid "" +"KDE include directory - headers go into includes/" +"KDE" +msgstr "KDE 引用目錄─標頭檔到 includes/KDE" + +#: parser/headergen/main.cpp:248 +msgid "Build information from the cmake XML generator" +msgstr "從 cmake XML 產生器編譯資訊" + +#: parser/rpp/pp-engine.cpp:275 +msgid "Unterminated #if statement" +msgstr "有 #if 但沒有結束的 #endif" + +#: parser/rpp/pp-engine.cpp:452 parser/rpp/pp-engine.cpp:470 +#: parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "character %1" +msgstr "字元 %1" + +#: parser/rpp/pp-engine.cpp:452 +#, kde-format +msgid "Expected \"identifier\", found: %1" +msgstr "預期應為識別子,找到:%1" + +#: parser/rpp/pp-engine.cpp:453 parser/rpp/pp-engine.cpp:471 +#: parser/rpp/pp-engine.cpp:503 +#, kde-format +msgid "

Token text
%1
Input
%2
" +msgstr "
標記文字
%1
輸入
%2
" + +#: parser/rpp/pp-engine.cpp:470 parser/rpp/pp-engine.cpp:502 +#, kde-format +msgid "Expected \")\", found %1" +msgstr "預期要有 \")\",結果找到%1" + +#: parser/rpp/pp-engine.cpp:538 parser/rpp/pp-engine.cpp:551 +msgid "Division by zero" +msgstr "除數為 0" + +#: parser/rpp/pp-engine.cpp:539 parser/rpp/pp-engine.cpp:552 +#, kde-format +msgid "Input text: %1" +msgstr "輸入文字:%1" + +#: parser/rpp/pp-engine.cpp:789 +#, kde-format +msgid "expected ``:'' = %1" +msgstr "預期要有 ``:'' = %1" + +#: parser/rpp/pp-engine.cpp:853 parser/rpp/pp-engine.cpp:878 +msgid "#else without #if" +msgstr "有 #else 但沒有配對的 #if" + +#: parser/rpp/pp-engine.cpp:916 +#, kde-format +msgid "#endif without #if at output line %1" +msgstr "輸出中的第 %1 行,有 #else 但沒有配對的 #if" + +#: parser/rpp/pp-macro-expander.cpp:102 +msgid "Macro error" +msgstr "巨集錯誤" + +#: parser/rpp/pp-macro-expander.cpp:115 +#, kde-format +msgid "Call to macro %1 missing argument number %2" +msgstr "呼叫巨集 %1 時少了參數編號 %2" + +#: parser/rpp/pp-macro-expander.cpp:116 +#, kde-format +msgid "Formals: %1" +msgstr "公式:%1" + +#: parser/lexer.cpp:951 +#, kde-format +msgid "invalid input: %1" +msgstr "不合法的輸入:%1" + +#: quickopen.cpp:195 +msgid "This file imports the current open document
" +msgstr "此檔案匯入目前的文件
" + +#: quickopen.cpp:200 +#, kde-format +msgid "In include path %1" +msgstr "在引入路徑 %1 中" + +#: quickopen.cpp:204 +#, kde-format +msgid "Included through %1
" +msgstr "引入透過 %1
" + +#: quickopen.cpp:214 +#, kde-format +msgid "Directory %1" +msgstr "目錄 %1" + +#: quickopen.cpp:247 +#, kde-format +msgid "In %1th include path" +msgstr "在第 %1 個引入路徑" + +#: quickopen.cpp:477 quickopen.cpp:484 +msgid "Includes" +msgstr "引入檔" + +#: quickopen.cpp:478 quickopen.cpp:485 +msgid "Include Path" +msgstr "引入路徑" + +#: quickopen.cpp:479 quickopen.cpp:486 +msgid "Includers" +msgstr "引入者" + +#: cpplanguagesupport.cpp:143 +msgid "C++ Support" +msgstr "C++ 支援" + +#: cpplanguagesupport.cpp:143 +msgid "Support for C++ Language" +msgstr "支援 C++" + +#: cpplanguagesupport.cpp:179 +msgid "Files" +msgstr "檔案" + +#: cpplanguagesupport.cpp:195 +msgid "&Switch Definition/Declaration" +msgstr "切換定義/宣告(&S)" + +#: cpplanguagesupport.cpp:200 +msgid "Create &New Class" +msgstr "建立新類別(&N)" + +#: cpplanguagesupport.cpp:209 +msgid "Rename Declaration" +msgstr "重新命名宣告" + +#: cpplanguagesupport.cpp:215 +msgid "Move into Source" +msgstr "移到源碼內" + +#: cpplanguagesupport.cpp:628 +msgid "Emptied by preprocessor
" +msgstr "被前置處理器清空
" + +#: cppparsejob.cpp:157 +msgid "Parsing included files" +msgstr "剖析引入檔中" + +#: cppparsejob.cpp:456 +msgid "Parsing actual file" +msgstr "剖析實體檔中" + +#: cppparsejob.cpp:572 +#, kde-format +msgid "Not updating duchain for %1" +msgstr "未更新 %1 的 duchain。" + +#: cppparsejob.cpp:734 +msgid "Building uses" +msgstr "編譯使用" + +#: cppparsejob.cpp:882 +msgid "Ready" +msgstr "準備好" + +#: preprocessjob.cpp:465 +#, kde-format +msgid "File was included recursively from within itself: %1" +msgstr "檔案被遞迴引入:%1" + +#: preprocessjob.cpp:611 +#, kde-format +msgid "Included file was not found: %1" +msgstr "引入檔找不到:%1" + +#: preprocessjob.cpp:612 +#, kde-format +msgid "" +"Searched include path:\n" +"%1" +msgstr "" +"目前搜尋的引入路徑:\n" +"%1" + +#: preprocessjob.cpp:680 +#, kde-format +msgid "Could not open file '%1'" +msgstr "無法開啟檔案 %1" + +#: preprocessjob.cpp:683 +msgid "File could not be read from." +msgstr "無法讀取檔案。" + +#: preprocessjob.cpp:686 +msgid "File could not be opened." +msgstr "無法開啟檔案。" + +#: preprocessjob.cpp:689 +msgid "File permissions prevent opening for read." +msgstr "檔案權限不足,無法讀取。" + +#. i18n: file: kdevcppsupport.rc:5 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:3 rc.cpp:11 +msgctxt "@title:menu" +msgid "Navigation" +msgstr "導覽" + +#. i18n: file: kdevcppsupport.rc:9 +#. i18n: ectx: Menu (code) +#: rc.cpp:6 rc.cpp:14 +msgctxt "@title:menu" +msgid "Code" +msgstr "程式碼" + +#: rc.cpp:7 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frank Weng (a.k.a. Franklin)" + +#: rc.cpp:8 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "franklin at goodhorse dot idv dot tw" + +#. i18n: file: codegen/ui/cppnewclass.ui:16 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:17 +msgid "C++ Options" +msgstr "C++ 選項" + +#. i18n: file: codegen/ui/cppnewclass.ui:22 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:20 +msgid "&Export:" +msgstr "匯出(&E):" + +#. i18n: file: codegen/ui/cppnewclass.ui:53 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:23 +msgid "&Macro:" +msgstr "巨集(&M):" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:16 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_3) +#: rc.cpp:26 +msgid "Public" +msgstr "公開(public)" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:23 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_4) +#: rc.cpp:29 +msgid "Protected" +msgstr "保護(protected)" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:30 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_5) +#: rc.cpp:32 +msgid "Private" +msgstr "私有(private)" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:53 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_6) +#: rc.cpp:35 +msgid "Slot" +msgstr "信號槽" + +#. i18n: file: codegen/ui/cppoverridebuttons.ui:60 +#. i18n: ectx: property (text), widget (KPushButton, kpushbutton_7) +#: rc.cpp:38 +msgid "Signal" +msgstr "信號" + +#. i18n: file: codegen/ui/custom_include_paths.ui:23 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:41 +msgid "Storage Directory" +msgstr "儲存目錄" + +#. i18n: file: codegen/ui/custom_include_paths.ui:35 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:44 +msgid "" +"The custom include-path will be stored in a special file called \"." +"kdev_include_paths\" stored within a source directory. The custom path will " +"be used for all files below that directory." +msgstr "" +"自訂引入路徑將儲存在源碼目錄內一個名為 \".kdev_include_paths\" 的檔案中。它將" +"會用在該目錄下所有檔案中。" + +#. i18n: file: codegen/ui/custom_include_paths.ui:47 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:47 +msgid "Storage Directory:" +msgstr "儲存目錄:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:68 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: rc.cpp:50 +msgid "Automatic Resolution" +msgstr "自動解析" + +#. i18n: file: codegen/ui/custom_include_paths.ui:74 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:53 +msgid "" +"If your project uses simple Makefiles, it may be possible to automatically " +"resolve the include-paths using the make utility. For this, set up a mapping " +"from a source- to a build-directory here." +msgstr "" +"若您的專案使用簡單的 Makefile,也許可以用 make 工具自動解析引入路徑。要這樣" +"做,請先在此設定源碼與編譯目錄間的映射關係。" + +#. i18n: file: codegen/ui/custom_include_paths.ui:86 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:56 +msgid "Source Directory:" +msgstr "源碼目錄:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:96 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:59 +msgid "Build Directory:" +msgstr "編譯目錄:" + +#. i18n: file: codegen/ui/custom_include_paths.ui:111 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:62 +msgid "Custom Include Paths" +msgstr "自訂引入路徑" + +#. i18n: file: codegen/ui/custom_include_paths.ui:123 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:65 +msgid "You can add a list of custom include paths here." +msgstr "您可以在此新增自訂引入路徑清單。" + +#. i18n: file: codegen/ui/custom_include_paths.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:68 +msgid "" +"Note: These settings do not affect the compiler or the project in any way, " +"they are only used to find included headers within KDevelop." +msgstr "" +"注意:這些設定將不會影響編譯器或專案,只是用於在 KDevelop 內尋找引入標頭。" + +#. i18n: file: codegen/ui/privateimplementation.ui:14 +#. i18n: ectx: property (whatsThis), widget (QWidget, PrivateImplementationDialog) +#: rc.cpp:71 +msgid "" +"Options & settings to move the private data fields of a class into a private " +"structure" +msgstr "將類別中的私有資料欄位移到私有結構中的選項與設定" + +#. i18n: file: codegen/ui/privateimplementation.ui:42 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:74 +msgid "Private structure name:" +msgstr "私有結構名稱:" + +#. i18n: file: codegen/ui/privateimplementation.ui:55 +#. i18n: ectx: property (title), widget (QGroupBox, optionGroup) +#: rc.cpp:77 +msgid "Options" +msgstr "選項" + +#. i18n: file: codegen/ui/privateimplementation.ui:75 +#. i18n: ectx: property (toolTip), widget (QCheckBox, classOption) +#: rc.cpp:80 +msgid "" +"\n" +"\n" +"

By default private " +"implementation structures are declared as struct to have default public access.

\n" +"

Check this box if you wish " +"the private implementation structure be declared as class with public access.

" +msgstr "" +"\n" +"\n" +"

預設私有實作結構會宣告為結" +"構(struct),並設為公開(public)。

\n" +"

若您希望將私有實作結構宣告" +"為類別(class),並設為公開(public),請勾選此選項。

" + +#. i18n: file: codegen/ui/privateimplementation.ui:78 +#. i18n: ectx: property (text), widget (QCheckBox, classOption) +#: rc.cpp:88 +msgid "Use class instead of struct" +msgstr "使用類別(class)而非結構(struct)" + +#. i18n: file: codegen/ui/privateimplementation.ui:97 +#. i18n: ectx: property (toolTip), widget (QCheckBox, variableOption) +#: rc.cpp:91 +msgid "" +"\n" +"\n" +"

Move any current variables " +"that are initialized in the constructor initializer list to the private " +"implementation structure's constructor initializer list.

\n" +"

\n" +"

Note: All references, and variables " +"with types that do not offer default constructors are moved regardless of " +"the state of this option.

" +msgstr "" +"\n" +"\n" +"

將任何在建構子中初始化的變" +"數移到私有實作結構的建構子中。

\n" +"

\n" +"

注意:所有型態未提供預設建構子的參考與變" +"數,都將會被移動,而不管此項目如何設定。

" + +#. i18n: file: codegen/ui/privateimplementation.ui:100 +#. i18n: ectx: property (text), widget (QCheckBox, variableOption) +#: rc.cpp:100 +msgid "Move Variable initialization to private structure" +msgstr "機變數初始化移到私有結構中" + +#. i18n: file: codegen/ui/privateimplementation.ui:113 +#. i18n: ectx: property (toolTip), widget (QCheckBox, methodOption) +#: rc.cpp:103 +msgid "" +"Move all currently declared private methods to the private implementation " +"structure." +msgstr "將目前宣告的私有方法移到私有實作結構中。" + +#. i18n: file: codegen/ui/privateimplementation.ui:116 +#. i18n: ectx: property (text), widget (QCheckBox, methodOption) +#: rc.cpp:106 +msgid "Move Private methods" +msgstr "移動私有方法" + +#. i18n: file: codegen/ui/privateimplementation.ui:130 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:109 +msgid "Pointer name:" +msgstr "指標名稱:" + +#. i18n: file: codegen/ui/privateimplementation.ui:146 +#. i18n: ectx: property (toolTip), widget (KLineEdit, pointerName) +#: rc.cpp:112 +msgid "" +"The name of the member variable that will be the pointer held to the private " +"implementation" +msgstr "私有實作會取得指標的成員變數名稱" + +#. i18n: file: codegen/ui/privateimplementation.ui:149 +#. i18n: ectx: property (text), widget (KLineEdit, pointerName) +#: rc.cpp:115 +msgid "d" +msgstr "d" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_TW/kdevcustommake.po kdevelop-4.0.1/po/zh_TW/kdevcustommake.po --- kdevelop-3.9.98/po/zh_TW/kdevcustommake.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_TW/kdevcustommake.po 2010-07-17 20:13:55.000000000 +0100 @@ -0,0 +1,43 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Frank Weng (a.k.a. Franklin) , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcustommake\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-02-24 07:58+0800\n" +"Last-Translator: Frank Weng (a.k.a. Franklin) \n" +"Language-Team: Chinese Traditional \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: custommakemanager.cpp:38 +msgid "Custom Makefile Manager" +msgstr "自訂 Makefile 管理員" + +#: custommakemanager.cpp:38 +msgid "Support for managing custom makefile projects" +msgstr "支援管理自訂的 Makefile 專案" + +#. i18n: file: kdevcustommakemanager.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:3 rc.cpp:8 +msgctxt "@title:menu" +msgid "Run" +msgstr "執行" + +#: rc.cpp:4 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frank Weng (a.k.a. Franklin)" + +#: rc.cpp:5 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "franklin at goodhorse dot idv dot tw" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_TW/kdevelop.po kdevelop-4.0.1/po/zh_TW/kdevelop.po --- kdevelop-3.9.98/po/zh_TW/kdevelop.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_TW/kdevelop.po 2010-07-17 20:13:55.000000000 +0100 @@ -0,0 +1,2254 @@ +# translation of kdevelop.po to Chinese Traditional +# translation of kdevelop.po to +# Copyright (C) 2002,2003, 2004, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# 繁體中文是由簡體中文翻譯轉換後修改而成,特此致謝。 +# +# Qi Liang , 2001. +# Xiong Jiang , 2002,2003, 2004. +# Funda Wang , 2005. +# Frank Weng (a.k.a. Franklin) , 2006, 2008, 2009, 2010. +# Franklin Weng , 2007, 2008. +# Franklin Weng , 2007, 2008. +# Goodhorse , 2008. +msgid "" +msgstr "" +"Project-Id-Version: kdevelop\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-07-09 01:28+0200\n" +"PO-Revision-Date: 2010-06-02 07:41+0800\n" +"Last-Translator: Frank Weng (a.k.a. Franklin) \n" +"Language-Team: Chinese Traditional \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: kdevideextension.cpp:41 +msgid "Code" +msgstr "程式碼" + +#: kdevideextension.cpp:52 +msgid "KDevelop4 Project Files" +msgstr "KDevelop 4 專案檔" + +#: main.cpp:61 main_internal.cpp:82 +msgid "The KDevelop Integrated Development Environment" +msgstr "KDevelop 整合開發環境" + +#: main.cpp:62 main_internal.cpp:83 +msgid "KDevelop" +msgstr "KDevelop" + +#: main.cpp:63 +#, kde-format +msgid "%1" +msgstr "%1" + +#: main.cpp:64 main_internal.cpp:85 +msgid "Copyright 1999-2010, The KDevelop developers" +msgstr "(C) 1999-2010,KDevelop 開發團隊" + +#: main.cpp:67 +msgid "Create new session with given name." +msgstr "以指定名稱建立新的工作階段" + +#: main.cpp:68 +msgid "Session to load. You can pass either hash or the name of the session." +msgstr "要載入的工作階段。您可以傳送雜湊值或工作階段名稱。" + +#: main.cpp:69 +msgid "List available sessions and quit" +msgstr "列出可用的工作階段並離開" + +#: main.cpp:78 +msgid "Available sessions (use '-s HASH' or '-s NAME' to open a specific one):" +msgstr "可用的工作階段(用 '-s <雜湊值>' 或 '-s <名稱>' 來指定):" + +#: main.cpp:79 +msgid "Hash" +msgstr "雜湊值" + +#: main.cpp:79 +msgid "Name: Opened Projects" +msgstr "名稱:已開啟的專案" + +#: main.cpp:88 +msgid "[running]" +msgstr "【執行中】" + +#: main.cpp:101 main_internal.cpp:144 +msgid "Specify the binary you want to debug." +msgstr "指定您要除錯的執行檔。" + +#: main.cpp:108 main_internal.cpp:151 +msgid "Debug" +msgstr "除錯" + +#: main.cpp:116 +#, kde-format +msgid "" +"A session with the name %1 exists already. Use the -s switch to open it." +msgstr "名為 %1 的工作階段已存在。用 -s 參數來開啟該工作階段。" + +#: main.cpp:133 +#, kde-format +msgid "" +"Cannot open unknown session %1. See --sessions switch for available sessions " +"or use -cs to create a new one." +msgstr "" +"無法開啟未知的工作階段 %1。請用 --sessions 參數來看有哪些可用的工作階段,或是" +"用 -cs 來建立新的。" + +#: main.cpp:138 +#, kde-format +msgid "Session %1 is already running." +msgstr "工作階段 %1 已在執行中。" + +#: main.cpp:160 +#, kde-format +msgid "" +"Cannot start KDevelop, the kdevelop.bin executable is missing in %1. Please " +"fix your KDevelop installation." +msgstr "" +"無法啟動 KDevelop。在 %1 中找不到 kdevelop.bin 執行檔。請檢查您的 KDevelop 安" +"裝。" + +#: shared_app_init.cpp:29 +msgid "Andreas Pakulat" +msgstr "Andreas Pakulat" + +#: shared_app_init.cpp:29 +msgid "" +"Maintainer, Architecture, VCS Support, Project Management Support, QMake " +"Projectmanager" +msgstr "維護者,架構設計,VCS 支援,專案管理支援,QMake 專案管理員" + +#: shared_app_init.cpp:30 +msgid "Alexander Dymo" +msgstr "Alexander Dymo" + +#: shared_app_init.cpp:30 +msgid "Architecture, Sublime UI, Ruby support" +msgstr "架構,傑出的使用者介面,Ruby 支援" + +#: shared_app_init.cpp:31 +msgid "David Nolden" +msgstr "David Nolden" + +#: shared_app_init.cpp:31 +msgid "" +"Definition-Use Chain, C++ Support, Code Navigation, Code Completion, Coding " +"Assistance, Refactoring" +msgstr "定義使用鍊,C++ 支援,源碼導覽,源碼補完,源碼協助,重構" + +#: shared_app_init.cpp:32 +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: shared_app_init.cpp:32 +msgid "CMake Support, Run Support, Kross Support" +msgstr "CMake 支援,Run 支援,Kross 支援" + +#: shared_app_init.cpp:33 +msgid "Vladimir Prus" +msgstr "Vladimir Prus" + +#: shared_app_init.cpp:33 +msgid "GDB integration" +msgstr "GDB 整合" + +#: shared_app_init.cpp:34 +msgid "Hamish Rodda" +msgstr "Hamish Rodda" + +#: shared_app_init.cpp:34 +msgid "Text editor integration, definition-use chain" +msgstr "文字編輯器整合,定義使用鍊" + +#: shared_app_init.cpp:35 +msgid "Amilcar do Carmo Lucas" +msgstr "Amilcar do Carmo Lucas" + +#: shared_app_init.cpp:35 +msgid "Website admin, API documentation, Doxygen and autoproject patches" +msgstr "網站管理者、API 文件、Doxygen 和 autoproject 修補" + +#: shared_app_init.cpp:36 +msgid "Niko Sams" +msgstr "Niko Sams" + +#: shared_app_init.cpp:36 +msgid "GDB integration, Webdevelopment Plugins" +msgstr "GDB 整合,Webdevelopment 外掛程式" + +#: shared_app_init.cpp:37 +msgid "Milian Wolff" +msgstr "Milian Wolff" + +#: shared_app_init.cpp:37 +msgid "Generic manager, Webdevelopment Plugins" +msgstr "一般管理員,Webdevelopment 外掛程式" + +#: shared_app_init.cpp:39 +msgid "Matt Rogers" +msgstr "Matt Rogers" + +#: shared_app_init.cpp:40 +msgid "Cédric Pasteur" +msgstr "Cédric Pasteur" + +#: shared_app_init.cpp:40 +msgid "astyle and indent support" +msgstr "astyle 與 indent 支援" + +#: shared_app_init.cpp:41 +msgid "Evgeniy Ivanov" +msgstr "Evgeniy Ivanov" + +#: shared_app_init.cpp:41 +msgid "Distributed VCS, Git, Mercurial" +msgstr "分散式 VCS,Git,Mercurial" + +#: shared_app_init.cpp:44 +msgid "Robert Gruber" +msgstr "Robert Gruber" + +#: shared_app_init.cpp:44 +msgid "SnippetPart, debugger and usability patches" +msgstr "SnippetPart、除錯器與可用性修補" + +#: shared_app_init.cpp:45 +msgid "Dukju Ahn" +msgstr "Dukju Ahn" + +#: shared_app_init.cpp:45 +msgid "Subversion plugin, Custom Make Manager, Overall improvements" +msgstr "Subversion 外掛程式,自訂 Make 管理員,整體改進" + +#: shared_app_init.cpp:46 +msgid "Harald Fernengel" +msgstr "Harald Fernengel" + +#: shared_app_init.cpp:46 +msgid "Ported to Qt 3, patches, valgrind, diff and perforce support" +msgstr "移植到 Qt 3、修補、valgrind、diff 和 perforce 支援" + +#: shared_app_init.cpp:47 +msgid "Roberto Raggi" +msgstr "Roberto Raggi" + +#: shared_app_init.cpp:47 +msgid "C++ parser" +msgstr "C++ 剖析器" + +#: shared_app_init.cpp:48 +msgid "The KWrite authors" +msgstr "KWrite 作者群" + +#: shared_app_init.cpp:48 +msgid "Kate editor component" +msgstr "Kate 編輯器元件" + +#: shared_app_init.cpp:49 +msgid "Nokia Corporation/Qt Software" +msgstr "Nokia Corporation/Qt Software" + +#: shared_app_init.cpp:49 +msgid "Designer code" +msgstr "Designer 程式碼" + +#: shared_app_init.cpp:51 +msgid "Contributors to older versions:" +msgstr "舊版本的貢獻者:" + +#: shared_app_init.cpp:52 +msgid "The KHTML authors" +msgstr "KHTML 作者群" + +#: shared_app_init.cpp:52 +msgid "HTML documentation component" +msgstr "HTML 文件元件" + +#: shared_app_init.cpp:53 +msgid "Bernd Gehrmann" +msgstr "Bernd Gehrmann" + +#: shared_app_init.cpp:53 +msgid "Initial idea, basic architecture, much initial source code" +msgstr "初始構思,基本結構,以及很多初始的程式碼" + +#: shared_app_init.cpp:54 +msgid "Caleb Tennis" +msgstr "Caleb Tennis" + +#: shared_app_init.cpp:54 +msgid "KTabBar, bugfixes" +msgstr "KTabBar、錯誤修正" + +#: shared_app_init.cpp:55 +msgid "Richard Dale" +msgstr "Richard Dale" + +#: shared_app_init.cpp:55 +msgid "Java & Objective C support" +msgstr "Java 和 Objective C 支援" + +#: shared_app_init.cpp:56 +msgid "John Birch" +msgstr "John Birch" + +#: shared_app_init.cpp:56 +msgid "Debugger frontend" +msgstr "除錯器前端" + +#: shared_app_init.cpp:57 +msgid "Sandy Meier" +msgstr "Sandy Meier" + +#: shared_app_init.cpp:57 +msgid "PHP support, context menu stuff" +msgstr "PHP 的支援,內容選單等" + +#: shared_app_init.cpp:58 +msgid "Kurt Granroth" +msgstr "Kurt Granroth" + +#: shared_app_init.cpp:58 +msgid "KDE application templates" +msgstr "KDE 應用程式樣本" + +#: shared_app_init.cpp:59 +msgid "Ian Reinhart Geiser" +msgstr "Ian Reinhart Geiser" + +#: shared_app_init.cpp:59 +msgid "Dist part, bash support, application templates" +msgstr "Dist 部分、bash 支援、應用程式樣本" + +#: shared_app_init.cpp:60 +msgid "Matthias Hoelzer-Kluepfel" +msgstr "Matthias Hoelzer-Kluepfel" + +#: shared_app_init.cpp:60 +msgid "Several components, htdig indexing" +msgstr "一些元件,htdig 索引" + +#: shared_app_init.cpp:61 +msgid "Victor Roeder" +msgstr "Victor Roeder" + +#: shared_app_init.cpp:61 +msgid "Help with Automake manager and persistent class store" +msgstr "協助 Automake 管理器和永久類別儲存" + +#: shared_app_init.cpp:62 +msgid "Simon Hausmann" +msgstr "Simon Hausmann" + +#: shared_app_init.cpp:62 +msgid "Help with KParts infrastructure" +msgstr "協助 KParts 基礎結構" + +#: shared_app_init.cpp:63 +msgid "Oliver Kellogg" +msgstr "Oliver Kellogg" + +#: shared_app_init.cpp:63 +msgid "Ada support" +msgstr "Ada 支援" + +#: shared_app_init.cpp:64 +msgid "Jakob Simon-Gaarde" +msgstr "Jakob Simon-Gaarde" + +#: shared_app_init.cpp:64 +msgid "QMake projectmanager" +msgstr "QMake 專案管理器" + +#: shared_app_init.cpp:65 +msgid "Falk Brettschneider" +msgstr "Falk Brettschneider" + +#: shared_app_init.cpp:65 +msgid "MDI modes, QEditor, bugfixes" +msgstr "多文件(MDI)模式、QEditor、問題修正" + +#: shared_app_init.cpp:66 +msgid "Mario Scalas" +msgstr "Mario Scalas" + +#: shared_app_init.cpp:66 +msgid "PartExplorer, redesign of CvsPart, patches, bugs(fixes)" +msgstr "PartExplorer、重新設計 CvsPart、修補、問題修正" + +#: shared_app_init.cpp:67 +msgid "Jens Dagerbo" +msgstr "Jens Dagerbo" + +#: shared_app_init.cpp:67 +msgid "" +"Replace, Bookmarks, FileList and CTags2 plugins. Overall improvements and " +"patches" +msgstr "取代、書籤、檔案列表與 CTags2 外掛程式。整體改進與修補" + +#: shared_app_init.cpp:68 +msgid "Julian Rockey" +msgstr "Julian Rockey" + +#: shared_app_init.cpp:68 +msgid "Filecreate part and other bits and patches" +msgstr "Filecreate 元件和其它,以及修補" + +#: shared_app_init.cpp:69 +msgid "Ajay Guleria" +msgstr "Ajay Guleria" + +#: shared_app_init.cpp:69 +msgid "ClearCase support" +msgstr "ClearCase 支援" + +#: shared_app_init.cpp:70 +msgid "Marek Janukowicz" +msgstr "Marek Janukowicz" + +#: shared_app_init.cpp:70 +msgid "Ruby support" +msgstr "Ruby 支援" + +#: shared_app_init.cpp:71 +msgid "Robert Moniot" +msgstr "Robert Moniot" + +#: shared_app_init.cpp:71 +msgid "Fortran documentation" +msgstr "Fortran 文件" + +#: shared_app_init.cpp:72 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: shared_app_init.cpp:72 +msgid "Python documentation utility" +msgstr "Python 文件工具" + +#: shared_app_init.cpp:73 +msgid "Dimitri van Heesch" +msgstr "Dimitri van Heesch" + +#: shared_app_init.cpp:73 +msgid "Doxygen wizard" +msgstr "Doxygen 精靈" + +#: shared_app_init.cpp:74 +msgid "Hugo Varotto" +msgstr "Hugo Varotto" + +#: shared_app_init.cpp:74 shared_app_init.cpp:75 +msgid "Fileselector component" +msgstr "檔案選擇器元件" + +#: shared_app_init.cpp:75 +msgid "Matt Newell" +msgstr "Matt Newell" + +#: shared_app_init.cpp:76 +msgid "Daniel Engelschalt" +msgstr "Daniel Engelschalt" + +#: shared_app_init.cpp:76 +msgid "C++ code completion, persistent class store" +msgstr "C++ 源碼補完,永久類別儲存" + +#: shared_app_init.cpp:77 +msgid "Stephane Ancelot" +msgstr "Stephane Ancelot" + +#: shared_app_init.cpp:77 shared_app_init.cpp:78 shared_app_init.cpp:81 +msgid "Patches" +msgstr "修補" + +#: shared_app_init.cpp:78 +msgid "Jens Zurheide" +msgstr "Jens Zurheide" + +#: shared_app_init.cpp:79 +msgid "Luc Willems" +msgstr "Luc Willems" + +#: shared_app_init.cpp:79 +msgid "Help with Perl support" +msgstr "協助 Perl 支援" + +#: shared_app_init.cpp:80 +msgid "Marcel Turino" +msgstr "Marcel Turino" + +#: shared_app_init.cpp:80 +msgid "Documentation index view" +msgstr "文件索引檢視" + +#: shared_app_init.cpp:81 +msgid "Yann Hodique" +msgstr "Yann Hodique" + +#: shared_app_init.cpp:82 +msgid "Tobias Gläßer" +msgstr "Tobias Gläßer" + +#: shared_app_init.cpp:82 +msgid "" +"Documentation Finder, qmake projectmanager patches, usability improvements, " +"bugfixes ... " +msgstr "文件尋找器、qmake 專案管理員修補、可用性改進、錯誤修正..." + +#: shared_app_init.cpp:83 +msgid "Andreas Koepfle" +msgstr "Andreas Koepfle" + +#: shared_app_init.cpp:83 +msgid "QMake project manager patches" +msgstr "QMake 專案管理器修補" + +#: shared_app_init.cpp:84 +msgid "Sascha Cunz" +msgstr "Sascha Cunz" + +#: shared_app_init.cpp:84 +msgid "Cleanup and bugfixes for qEditor, AutoMake and much other stuff" +msgstr "qEditor 整理程式源碼、錯誤修正、AutoMake 以及其它的協助" + +#: shared_app_init.cpp:85 +msgid "Zoran Karavla" +msgstr "Zoran Karavla" + +#: shared_app_init.cpp:85 +msgid "Artwork for the ruby language" +msgstr "ruby 語言的美工" + +#: shared_app_init.cpp:114 +msgid "Url to project to load" +msgstr "要載入的專案網址" + +#: shared_app_init.cpp:115 +msgid "Files to load" +msgstr "要載入的檔案" + +#: shared_app_init.cpp:116 +msgid "" +"Start debugger, for example gdb. The binary that should be debugged must " +"follow - including arguments." +msgstr "啟動除錯器(如 gdb)。後面接著輸入要除錯的執行檔,記得加上它的參數。" + +#: main_internal.cpp:84 +#, kde-format +msgid "%1 (using KDevPlatform %2)" +msgstr "%1 (使用 KdevPlatform %2)" + +#: main_internal.cpp:172 +msgid "Cannot find native launch configuration type" +msgstr "找不到原生啟動設定型態" + +#: main_internal.cpp:191 +#, kde-format +msgid "Cannot find launcher %1" +msgstr "找不到啟動器 %1" + +#: main_internal.cpp:228 +#, kde-format +msgid "Could not open %1" +msgstr "無法開啟檔案 %1" + +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: vendor/kate/katepartui.rc:4 +#. i18n: ectx: Menu (file) +#. i18n: file: katepartui.rc:4 +#. i18n: ectx: Menu (file) +#: rc.cpp:3 rc.cpp:98 rc.cpp:122 +msgid "&File" +msgstr "檔案(&F)" + +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: vendor/kate/katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#. i18n: file: katepartui.rc:12 +#. i18n: ectx: Menu (edit) +#: rc.cpp:6 rc.cpp:101 rc.cpp:125 +msgid "&Edit" +msgstr "編輯(&E))" + +#. i18n: file: katepartui.rc:22 +#. i18n: ectx: Menu (edit_advanced) +#: rc.cpp:9 rc.cpp:128 +msgid "&Advanced" +msgstr "進階(&A)" + +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#. i18n: file: vendor/kate/katepartui.rc:37 +#. i18n: ectx: Menu (view) +#. i18n: file: katepartui.rc:42 +#. i18n: ectx: Menu (view) +#: rc.cpp:12 rc.cpp:104 rc.cpp:131 +msgid "&View" +msgstr "檢視(&V)" + +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: vendor/kate/katepartui.rc:51 +#. i18n: ectx: Menu (codefolding) +#. i18n: file: katepartui.rc:56 +#. i18n: ectx: Menu (codefolding) +#: rc.cpp:15 rc.cpp:107 rc.cpp:134 +msgid "&Code Folding" +msgstr "程式碼摺疊(&C)" + +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#. i18n: file: vendor/kate/katepartui.rc:64 +#. i18n: ectx: Menu (tools) +#. i18n: file: katepartui.rc:69 +#. i18n: ectx: Menu (tools) +#: rc.cpp:18 rc.cpp:110 rc.cpp:137 +msgid "&Tools" +msgstr "工具(&T)" + +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: vendor/kate/katepartui.rc:75 +#. i18n: ectx: Menu (wordcompletion) +#. i18n: file: katepartui.rc:80 +#. i18n: ectx: Menu (wordcompletion) +#: rc.cpp:21 rc.cpp:113 rc.cpp:140 +msgid "Word Completion" +msgstr "文字補完" + +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#. i18n: file: vendor/kate/katepartui.rc:104 +#. i18n: ectx: Menu (settings) +#. i18n: file: katepartui.rc:109 +#. i18n: ectx: Menu (settings) +#: rc.cpp:24 rc.cpp:116 rc.cpp:143 +msgid "&Settings" +msgstr "設定(&S)" + +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: kdevelopui.rc:157 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: vendor/kate/katepartui.rc:123 +#. i18n: ectx: ToolBar (mainToolBar) +#. i18n: file: katepartui.rc:130 +#. i18n: ectx: ToolBar (mainToolBar) +#: rc.cpp:27 rc.cpp:60 rc.cpp:95 rc.cpp:119 rc.cpp:146 +msgid "Main Toolbar" +msgstr "主工具列" + +#. i18n: file: kdevelopui.rc:6 +#. i18n: ectx: Menu (session) +#: rc.cpp:30 rc.cpp:65 +msgctxt "@title:menu" +msgid "Session" +msgstr "工作階段" + +#. i18n: file: kdevelopui.rc:10 +#. i18n: ectx: Menu (project) +#: rc.cpp:33 rc.cpp:68 +msgctxt "@title:menu" +msgid "&Project" +msgstr "專案(&P)" + +#. i18n: file: kdevelopui.rc:28 +#. i18n: ectx: Menu (run) +#: rc.cpp:36 rc.cpp:71 +msgid "&Run" +msgstr "執行(&R)" + +#. i18n: file: kdevelopui.rc:50 +#. i18n: ectx: Menu (navigation) +#: rc.cpp:39 rc.cpp:74 +msgctxt "@title:menu" +msgid "&Navigation" +msgstr "導覽(&N)" + +#. i18n: file: kdevelopui.rc:64 +#. i18n: ectx: Menu (file) +#: rc.cpp:42 rc.cpp:77 +msgctxt "@title:menu" +msgid "&File" +msgstr "檔案(&F)" + +#. i18n: file: kdevelopui.rc:75 +#. i18n: ectx: Menu (edit) +#: rc.cpp:45 rc.cpp:80 +msgctxt "@title:menu" +msgid "&Edit" +msgstr "編輯(&E)" + +#. i18n: file: kdevelopui.rc:88 +#. i18n: ectx: Menu (editor) +#: rc.cpp:48 rc.cpp:83 +msgctxt "@title:menu" +msgid "Editor" +msgstr "編輯器" + +#. i18n: file: kdevelopui.rc:93 +#. i18n: ectx: Menu (code) +#: rc.cpp:51 rc.cpp:86 +msgctxt "@title:menu" +msgid "Code" +msgstr "代碼" + +#. i18n: file: kdevelopui.rc:100 +#. i18n: ectx: Menu (window) +#: rc.cpp:54 rc.cpp:89 +msgctxt "@title:menu" +msgid "&Window" +msgstr "視窗(&W)" + +#. i18n: file: kdevelopui.rc:142 +#. i18n: ectx: Menu (settings) +#: rc.cpp:57 rc.cpp:92 +msgctxt "@title:menu" +msgid "Settings" +msgstr "設定" + +#: rc.cpp:61 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" +"Qi Liang, Wang Jian, Lee Song Chen, Xiong Jiang, Frank Weng (a.k.a. Franklin)" + +#: rc.cpp:62 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"cavendish@eyou.com, lark@linux.net.cn, leesongchen@263.net, jxiong@offtopic." +"org, franklin at goodhorse dot idv dot tw" + + + + + + + + +#, fuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#, fuzzy + + + + +#, fuzzy \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_TW/kdevformatters.po kdevelop-4.0.1/po/zh_TW/kdevformatters.po --- kdevelop-3.9.98/po/zh_TW/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_TW/kdevformatters.po 2010-07-17 20:13:55.000000000 +0100 @@ -0,0 +1,453 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Frank Weng (a.k.a. Franklin) , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-16 08:50+0800\n" +"Last-Translator: Frank Weng (a.k.a. Franklin) \n" +"Language-Team: Chinese Traditional \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "Astyle 格式化" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "使用 AStyle 重新格式化源碼的工具" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Artistic Style 是一個將整理程式源碼縮排與格式化的程式,適用於 C,C++," +"C# 與 Java。
首頁:http://" +"astyle.sourceforge.net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Indent 格式化" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "使用 indent 重新編排源碼的工具" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"縮排與格式化 C 語言程式。
indent 程式是用於重排程式碼以易於閱" +"讀。它可以從一種樣式轉換為另一種樣式。
indent 懂得大部份的 C 語" +"法,但是還是可以處理一些文法上的錯誤。
首頁:http://www.gnu.org/software/indent/" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "縮排" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "定位點" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "強制定位點" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "空白" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"轉換為定位點的空白數量。\n" +"每個定位點有多少哭白是由編輯器控制的。" + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "將定位點轉換為空白。" + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "將定位點轉換為空白(&V)" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "在它們的前一行填入都是空白的空行。" + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "填入空行(&Y)" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "縮排" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "區塊" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "括號" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "大小寫" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "類別" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "標籤" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "命名空間" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "前置處理詞" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "開關" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "在連續的敘述中,相對於前一行,最多縮排多少個空白。" + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "在連續的條件中,相對於條件的頭,最少縮排多少個空白。" + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "條件最小縮排數" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "兩倍於目前的值" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "敘述最大縮排數" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "其他" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "型態" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "中斷在「關閉標頭」(如 else, catch 等)前面的關閉括號。" + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "中斷關閉標頭(&K)" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "沒有改變" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "附加" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "中斷" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"在不相關的區塊、標籤、類別等之間插入空白行。\n" +"已知的問題:\n" +"\n" +"1. 如果某條敘述不是區塊的一部份,則接下來的敘述會變成有雙倍空白。\n" +"但是在區塊內的敘述則可以正確地格式化。\n" +"\n" +"2. 區塊內的註解會有問題。\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "中斷區塊(&B)" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"類似 --break-blocks,只是它也會在 else 或 catch 這一類敘述 前後加上空白行。\n" +"\n" +"已知的問題: \n" +"\n" +"1. 如果某條敘述不是區塊的一部份,則接下來的敘述會變成有雙倍空白。\n" +"但是在區塊內的敘述則可以正確地格式化。\n" +"\n" +"2. 區塊內的註解會有問題。\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "中斷所有區塊(&O)" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "將 'else if()' 敘述分成兩行。" + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "中斷 if-else (&F)" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "補齊" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "補齊括號" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "取消補齊" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "只有內部" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "只有外部" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "內部與外部" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"在操作元兩邊補上空白。\n" +"這個動作無法復原。" + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "在操作元兩邊加上空白(&A)" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "保持一行" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "不要將包含多個敘述的行中斷成多個單一敘述的行。" + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "保持一行的敘述(&K)" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "不要中斷在出現在單一行中的完整區塊。" + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "保持單一行的區塊(&N)" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frank Weng (a.k.a. Franklin)" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "franklin at goodhorse dot idv dot tw" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_TW/kdevgdb.po kdevelop-4.0.1/po/zh_TW/kdevgdb.po --- kdevelop-3.9.98/po/zh_TW/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_TW/kdevgdb.po 2010-07-17 20:13:55.000000000 +0100 @@ -0,0 +1,831 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Frank Weng (a.k.a. Franklin) , 2008, 2009, 2010. +# Frank Weng (a.k.a. Franklin) , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevcppdebugger\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-06-02 07:42+0800\n" +"Last-Translator: Frank Weng (a.k.a. Franklin) \n" +"Language-Team: Chinese Traditional \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "監看" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "最近的" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
舊值:%1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
新值:%1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "GDB 支援" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "支援在 GDB 中執行程式" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "反組譯" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "檢視 Core 檔..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "檢視 Core 檔" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

This loads a core file, which is typically " +"created after the application has crashed, e.g. with a segmentation fault. " +"The core file contains an image of the program memory at the time it " +"crashed, allowing you to do a post-mortem analysis.

" +msgstr "" +"檢視 core 檔

它會載入 core 檔。通常 core 檔是在應用程式當掉時產生," +"裡面包含了程式當掉時記憶體的狀態,讓您可以做分析。

" + +#: debuggerplugin.cpp:220 +msgid "Attach to Process" +msgstr "附加以處理" + +#: debuggerplugin.cpp:221 +msgid "Attach to process..." +msgstr "附加到行程..." + +#: debuggerplugin.cpp:222 +msgid "" +"Attach to process

Attaches the debugger to a running process.

" +msgstr "附加到行程

附加除錯器到執行中的行程。

" + +#: debuggerplugin.cpp:256 +msgid "KDevelop" +msgstr "KDevelop" + +#: debuggerplugin.cpp:321 +#, kde-format +msgid "Evaluate: %1" +msgstr "計算:%1" + +#: debuggerplugin.cpp:323 +msgid "" +"Evaluate expression

Shows the value of the expression under the " +"cursor.

" +msgstr "計算表示式

顯示游標底下的表示式的值。

" + +#: debuggerplugin.cpp:326 +#, kde-format +msgid "Watch: %1" +msgstr "監看:%1" + +#: debuggerplugin.cpp:328 +msgid "" +"Watch expression

Adds an expression under the cursor to the " +"Variables/Watch list.

" +msgstr "監看表示式

將游標下的表示式新增到變數監看清單中。

" + +#: debuggerplugin.cpp:359 +msgid "Choose a core file to examine..." +msgstr "請選擇要檢視的 core 檔案..." + +#: debuggerplugin.cpp:366 +#, kde-format +msgid "Examining core file %1" +msgstr "檢視 core 檔 %1 中" + +#: debuggerplugin.cpp:372 +msgid "Debug core file" +msgstr "除錯 Core 檔" + +#: debuggerplugin.cpp:380 +msgid "Choose a process to attach to..." +msgstr "選擇要附加的行程..." + +#: debuggerplugin.cpp:389 +#, kde-format +msgid "Not attaching to process %1: cannot attach the debugger to itself." +msgstr "未附加到行程 %1:不能將除錯器本身附加到自己身上。" + +#: debuggerplugin.cpp:396 +#, kde-format +msgid "Attaching to process %1" +msgstr "附加到行程 %1 中" + +#: debuggerplugin.cpp:402 +#, kde-format +msgid "Debug process %1" +msgstr "除錯行程 %1" + +#: debuggerplugin.cpp:418 +msgid "Debugger" +msgstr "除錯器" + +#: debugjob.cpp:70 +#, kde-format +msgid "" +"No environment group specified, looks like a broken configuration, please " +"check run configuration '%1'. Using default environment group." +msgstr "" +"沒有指定環境群組,似乎是設定有問題。請檢查執行設定 %1。將改用預設的環境群組。" + +#: debugsession.cpp:169 +msgid "Debugger stopped" +msgstr "除錯器已停止" + +#: debugsession.cpp:198 +msgid "Application interrupted" +msgstr "應用程式已中斷" + +#: debugsession.cpp:202 +msgid "Process exited" +msgstr "行程已離開" + +#: debugsession.cpp:209 +msgid "Application is running" +msgstr "應用程式執行中" + +#: debugsession.cpp:215 +msgid "Application is paused" +msgstr "應用程式已暫停" + +#: debugsession.cpp:431 +msgid "" +"GDB exited abnormally

This is likely a bug in GDB. Examine the gdb " +"output window and then stop the debugger" +msgstr "" +"GDB 不正常離開

可能是 GDB 的問題。請檢視 GDB 的輸入視窗,並題止除錯" +"器。" + +#: debugsession.cpp:434 +msgid "GDB exited abnormally" +msgstr "GDB 不正常離開" + +#: debugsession.cpp:563 +#, kde-format +msgid "" +"Gdb command sent when debugger is not running
The command was:
" +"%1" +msgstr "在除錯器未執行時送出了 GDB 指令
指令為
%1" + +#: debugsession.cpp:565 +msgid "Internal error" +msgstr "內部錯誤" + +#: debugsession.cpp:647 +#, kde-format +msgid "Invalid debugger command
%1" +msgstr "不合法的除錯器指令
%1" + +#: debugsession.cpp:648 +msgid "Invalid debugger command" +msgstr "不合法的除錯器指令" + +#: debugsession.cpp:675 +msgid "Exited normally" +msgstr "正常離開" + +#: debugsession.cpp:683 +#, kde-format +msgid "Exited on signal %1" +msgstr "因遇到信號 %1 而離開" + +#: debugsession.cpp:738 +#, kde-format +msgid "Program received signal %1 (%2)" +msgstr "程式接收到信號 %1(%2)" + +#: debugsession.cpp:940 +msgid "Running program" +msgstr "執行程式中" + +#: debugsession.cpp:999 +msgid "" +"GDB cannot use the tty* or pty* devices.\n" +"Check the settings on /dev/tty* and /dev/pty*\n" +"As root you may need to \"chmod ug+rw\" tty* and pty* devices and/or add the " +"user to the tty group using \"usermod -G tty username\"." +msgstr "" +"GDB 無法使用 tty* 或 pty* 裝置。\n" +"請檢查 /dev/tty* 與 /dev/pty* 的設定。\n" +"您可能需要用 root 身份來對 tty* 與 pty* 裝置執行 chmod ug+rw 指令,或是用 " +"usermod -G tty user 將使用者加入 tty 的群組。" + +#: debugsession.cpp:1003 +msgid "Warning" +msgstr "警告" + +#: debugsession.cpp:1181 +#, kde-format +msgid "Debugger error

Debugger reported the following error:

%1" +msgstr "除錯器錯誤

除錯器回報了以下的錯誤:

%1" + +#: debugsession.cpp:1184 +msgid "Debugger error" +msgstr "除錯器錯誤" + +#: debugsession.cpp:1283 +#, kde-format +msgid "1 command in queue\n" +msgid_plural "%1 commands in queue\n" +msgstr[0] "佇列中有 %1 個指令\n" + +#: debugsession.cpp:1284 +#, kde-format +msgctxt "Only the 0 and 1 cases need to be translated" +msgid "1 command being processed by gdb\n" +msgid_plural "%1 commands being processed by gdb\n" +msgstr[0] "gdb 已處理 %1 個指令\n" + +#: debugsession.cpp:1285 +#, kde-format +msgid "Debugger state: %1\n" +msgstr "除錯器狀態:%1\n" + +#: debugsession.cpp:1289 +#, kde-format +msgid "" +"Current command class: '%1'\n" +"Current command text: '%2'\n" +"Current command original text: '%3'\n" +msgstr "" +"目前的指令類別:%1\n" +"目前的指令文字:%2\n" +"目前的指令原始文字:%3\n" + +#: debugsession.cpp:1300 +msgid "Debugger status" +msgstr "除錯器狀態" + +#: debugsession.cpp:1404 +#, kde-format +msgid "You need gdb 7.0.0 or higher.
You are using: %1" +msgstr "您需要 gdb 7.0.0 版以上。
您目前的版本是:%1" + +#: debugsession.cpp:1406 +msgid "gdb error" +msgstr "gdb 錯誤" + +#: debugsession.cpp:1417 +msgid "Could not start debugger:
" +msgstr "無法啟動除錯器:
" + +#: debugsession.cpp:1419 debugsession.cpp:1431 +msgid "Startup error" +msgstr "啟動錯誤" + +#: debugsession.cpp:1429 +msgid "Could not attach debugger:
" +msgstr "無法附加除錯器:
" + +#: disassemblewidget.cpp:60 +msgid "" +"Machine code display

A machine code view into your running " +"executable with the current instruction highlighted. You can step " +"instruction by instruction using the debuggers toolbar buttons of \"step over" +"\" instruction and \"step into\" instruction." +msgstr "" +"機器碼顯示

檢視您執行檔的機器碼,並將目前執行的組譯指令突顯出來。您" +"可以用除錯器工具列上的「單步執行指令」或「單步跳入」來一個指令一個指令執行。" + +#: disassemblewidget.cpp:68 +msgid "Disassemble View" +msgstr "反組譯檢視" + +#: disassemblewidget.cpp:73 +msgid "Address" +msgstr "地址" + +#: disassemblewidget.cpp:73 +msgid "Function" +msgstr "函式" + +#: disassemblewidget.cpp:73 +msgid "Offset" +msgstr "位移" + +#: disassemblewidget.cpp:73 +msgid "Instruction" +msgstr "指令" + +#: gdb.cpp:94 +#, kde-format +msgid "Could not locate the debugging shell '%1'." +msgstr "無法找到除錯 shell %1。" + +#: gdb.cpp:95 +msgid "Debugging Shell Not Found" +msgstr "找不到除錯 Shell" + +#: gdb.cpp:326 +msgctxt "Internal debugger error" +msgid "" +"

The debugger component encountered internal error while processing reply " +"from gdb. Please submit a bug report." +msgstr "

除錯器組件處理 gdb 的回覆時遇到內部錯誤。請回報此問題。" + +#: gdb.cpp:328 +#, kde-format +msgid "" +"The exception is: %1\n" +"The MI response is: %2" +msgstr "" +"例外:%1\n" +"MI 回覆:%2" + +#: gdb.cpp:331 +msgid "Internal debugger error" +msgstr "內部除錯器錯誤" + +#: gdb.cpp:385 +#, kde-format +msgid "" +"Could not start debugger.

Could not run '%1'. Make sure that the " +"path name is specified correctly." +msgstr "無法啟動除錯器:

無法執行 %1。請確定指定的路徑是否正確。" + +#: gdb.cpp:389 +msgid "Could not start debugger" +msgstr "無法啟動除錯器" + +#: gdblaunchconfig.cpp:108 +msgid "GDB Configuration" +msgstr "除錯器設定" + +#: gdblaunchconfig.cpp:163 +msgid "Executes a Native application in GDB" +msgstr "在 GDB 中執行原始應用程式" + +#: gdboutputwidget.cpp:66 +msgid "GDB Output" +msgstr "GDB 輸出" + +#: gdboutputwidget.cpp:67 +msgid "" +"GDB output

Shows all gdb commands being executed. You can also " +"issue any other gdb command while debugging.

" +msgstr "" +"GDB 輸出

顯示所有執行中的 gdb 指令。您也可以在除錯時產生其它的 gdb " +"指令。

" + +#: gdboutputwidget.cpp:76 +msgid "&GDB cmd:" +msgstr "GDB 指令(&G):" + +#: gdboutputwidget.cpp:81 +msgid "Pause execution of the app to enter gdb commands" +msgstr "暫停執行應用程式,以輸入 gdb 指令" + +#: gdboutputwidget.cpp:373 gdboutputwidget.cpp:423 +msgid "Show Internal Commands" +msgstr "顯示內部指令" + +#: gdboutputwidget.cpp:380 gdboutputwidget.cpp:430 +msgid "" +"Controls if commands issued internally by KDevelop will be shown or not." +"
This option will affect only future commands, it will not add or remove " +"already issued commands from the view." +msgstr "" +"控制 KDevelop 內部產生的指令是否要顯示。
這個選項只會影響以後的指令,而不" +"會新增或移除任何已產生的指令。" + +#: gdboutputwidget.cpp:385 +msgid "Copy All" +msgstr "全部複製" + +#: memviewdlg.cpp:99 +msgid "Start" +msgstr "開始" + +#: memviewdlg.cpp:105 +msgid "Amount" +msgstr "數量" + +#. i18n: file: debuggertracingdialog.ui:47 +#. i18n: ectx: property (text), widget (QPushButton, okButton) +#: memviewdlg.cpp:117 rc.cpp:135 rc.cpp:300 +msgid "OK" +msgstr "確定" + +#. i18n: file: debuggertracingdialog.ui:30 +#. i18n: ectx: property (text), widget (QPushButton, cancelButton) +#: memviewdlg.cpp:120 rc.cpp:129 rc.cpp:294 +msgid "Cancel" +msgstr "取消" + +#: memviewdlg.cpp:146 +msgid "Memory view" +msgstr "記憶體檢視" + +#: memviewdlg.cpp:308 +#, kde-format +msgid "%2 (1 byte)" +msgid_plural "%2 (%1 bytes)" +msgstr[0] "%2 (%1 位元組)" + +#: memviewdlg.cpp:373 +msgid "Change memory range" +msgstr "改變記憶體範圍" + +#: memviewdlg.cpp:378 +msgid "Reload" +msgstr "重新載入" + +#: memviewdlg.cpp:383 +msgid "Close this view" +msgstr "關閉此檢視" + +#: memviewdlg.cpp:443 +msgid "Special debugger views" +msgstr "特殊除錯器檢視" + +#: processselection.cpp:37 +msgid "Attach to a process" +msgstr "附加到行程" + +#: selectcoredialog.cpp:32 +msgid "Select Core File" +msgstr "選擇 Core 檔" + +#: stty.cpp:333 +msgid "kdevelop: Debug application console" +msgstr "kdevelop:除錯器應用程式主控台" + +#. i18n: file: debuggerconfigwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, DebuggerConfigWidget) +#: rc.cpp:3 rc.cpp:168 +msgid "Debugger Configuration" +msgstr "除錯器設定" + +#. i18n: file: debuggerconfigwidget.ui:32 +#. i18n: ectx: property (text), widget (QLabel, gdbPath_label) +#: rc.cpp:6 rc.cpp:171 +msgid "Debugger executable:" +msgstr "除錯器執行檔:" + +#. i18n: file: debuggerconfigwidget.ui:45 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:9 rc.cpp:174 +msgid "Gdb executable" +msgstr "Gdb 執行檔" + +#. i18n: file: debuggerconfigwidget.ui:48 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_gdbPath) +#: rc.cpp:12 rc.cpp:177 +msgid "" +"To run \"gdb\" binary from $PATH, leave this field empty. To run custom gdb, " +"for example, for a different architecture, enter the executable name here. " +"You can either run gdb from $PATH, but with a different name (say, \"arm-gdb" +"\"), by typing the name here, or specify full path to the gdb executable." +msgstr "" +"若這個欄位留白,則會從 $PATH 中尋找 gdb。要跑自訂的 gdb 程式,比方說其它平台" +"上的 gdb,則可以在這裡直接指定執行檔路徑。" + +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#. i18n: file: debuggerconfigwidget.ui:61 +#. i18n: ectx: property (toolTip), widget (QLabel, debuggingShell_label) +#. i18n: file: debuggerconfigwidget.ui:80 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:15 rc.cpp:24 rc.cpp:180 rc.cpp:189 +msgid "Run gdb in a special shell (mainly for automake projects)" +msgstr "在特殊的 shell 中執行 gdb(主要是給 automake 專案使用)" + +#. i18n: file: debuggerconfigwidget.ui:64 +#. i18n: ectx: property (whatsThis), widget (QLabel, debuggingShell_label) +#: rc.cpp:18 rc.cpp:183 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside gdb." +msgstr "" +"如果您要讓 gdb 在特殊的 shell 或工具中執行,則在此指定。主要是給 Automake 專" +"案來使用,其應用程式通常只是文稿,需要 libtool 來在 gdb 中執行。" + +#. i18n: file: debuggerconfigwidget.ui:67 +#. i18n: ectx: property (text), widget (QLabel, debuggingShell_label) +#: rc.cpp:21 rc.cpp:186 +msgid "Debugging &shell:" +msgstr "除錯 shell(&S):" + +#. i18n: file: debuggerconfigwidget.ui:83 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_debuggingShell) +#: rc.cpp:27 rc.cpp:192 +msgid "" +"If you want gdb to be executed by a special shell or tool insert it here. " +"The main use-case is for Automake based projects where the application is " +"actually only a script and libtool is needed to get it to run inside " +"gdb." +msgstr "" +"如果您要讓 gdb 在特殊的 shell 或工具中執行,則在此指定。主要是給 Automake 專" +"案來使用,其應用程式通常只是文稿,需要 libtool 來在 gdb 中執行。" + +#. i18n: file: debuggerconfigwidget.ui:92 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: rc.cpp:30 rc.cpp:195 +msgid "Options" +msgstr "選項" + +#. i18n: file: debuggerconfigwidget.ui:103 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:33 rc.cpp:198 +msgid "" +"Displaying static members makes GDB slower in\n" +"producing data within KDE and Qt.\n" +"It may change the \"signature\" of the data\n" +"which QString and friends rely on,\n" +"but if you need to debug into these values then\n" +"check this option." +msgstr "" +"若要顯示靜態成員,在 KDE 與 Qt 中因為要產生資料,所以會讓 GDB 變慢。它也可能" +"改變資料的「簽章」,通常 QString 與其朋友成員會需要檢視。不過如果您真的需要對" +"靜態成員的值做除錯,則需要勾選此選項。" + +#. i18n: file: debuggerconfigwidget.ui:106 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_displayStaticMembers) +#: rc.cpp:41 rc.cpp:206 +msgid "Display static &members" +msgstr "顯示靜態成員(&M)" + +#. i18n: file: debuggerconfigwidget.ui:115 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:44 rc.cpp:209 +msgid "" +"When displaying the disassembled code you\n" +"can select to see the methods' mangled names.\n" +"However, non-mangled names are easier to read." +msgstr "" +"顯示反組譯程式碼時,您可以選擇要查看改變過後的方法名稱。\n" +"通常沒改變過的名稱會比較好閱讀。" + +#. i18n: file: debuggerconfigwidget.ui:118 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_asmDemangle) +#: rc.cpp:49 rc.cpp:214 +msgid "Display &demangled names" +msgstr "顯示未被改變過的名稱(&D)" + +#. i18n: file: debuggerconfigwidget.ui:131 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:52 rc.cpp:217 +msgid "" +"If GDB has not seen a library that will be loaded via\n" +"\"dlopen\" then it will refuse to set a breakpoint in that code.\n" +"With this option, GDB will stop on a library load and hence\n" +"try to set the pending breakpoints. See the documentation\n" +"for more details relating to this behavior.\n" +"\n" +"If you are not \"dlopen\"ing libs then leave this unchecked." +msgstr "" +"若是 GDB 沒看到函式庫,它會用 dlopen 載入,此時它會拒絕在該處設立中斷點。\n" +"我們可以用讓 GDB 在載入函式庫時停止,並試著設定中斷典。關於此行為詳情請參考文" +"件的說明。\n" +"\n" +"如果您沒有用 dlopen 來載入資料庫,則請不要勾選此選項。" + +#. i18n: file: debuggerconfigwidget.ui:134 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_breakOnLoadingLibrary) +#: rc.cpp:61 rc.cpp:226 +msgid "Try setting &breakpoints on library loading" +msgstr "試著在載入函式庫時設定中斷點(&B)" + +#. i18n: file: debuggerconfigwidget.ui:145 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:64 rc.cpp:229 +msgid "" +"This allows you to enter terminal input when your\n" +"application contains terminal input code (e.g. cin, fgets, etc.).\n" +"If you use terminal input in your application then check this option.\n" +"Otherwise leave it unchecked." +msgstr "" +"這個功能讓您可以在您的應用程式包含終端輸入(如 cin,\n" +"fgets 等等)時做輸入的動作。如果您需要在您的應用程式\n" +"中做終端輸入的話,請勾選此選項。" + +#. i18n: file: debuggerconfigwidget.ui:148 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_dbgTerminal) +#: rc.cpp:70 rc.cpp:235 +msgid "Enable separate terminal for application &IO" +msgstr "開啟終端給應用程式輸出入(&I)" + +#. i18n: file: debuggerconfigwidget.ui:177 +#. i18n: ectx: property (whatsThis), widget (QGroupBox, groupBox) +#: rc.cpp:73 rc.cpp:238 +msgid "" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint" +msgstr "" +"此文稿是用於需要連接到遠端執行的程式時使用的實際指令。\n" +"\tshell sleep 5\t等待遠端的程式啟動\n" +"\ttarget remote ...\t連線到遠端的除錯器\n" +"\tcontinue\t【可選擇的】執行除錯器,直到第一個中斷點" + +#. i18n: file: debuggerconfigwidget.ui:180 +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: rc.cpp:79 rc.cpp:244 +msgid "Remote Debugging" +msgstr "遠端除錯" + +#. i18n: file: debuggerconfigwidget.ui:186 +#. i18n: ectx: property (text), widget (QLabel, configGdbScript_label) +#: rc.cpp:82 rc.cpp:247 +msgid "&Config gdb script:" +msgstr "設定 gdb 文稿(&C):" + +#. i18n: file: debuggerconfigwidget.ui:199 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:85 rc.cpp:250 +msgid "Gdb configure script" +msgstr "GDB 設定文稿" + +#. i18n: file: debuggerconfigwidget.ui:202 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_configGdbScript) +#: rc.cpp:88 rc.cpp:253 +msgid "This script is sourced by gdb when the debugging starts." +msgstr "gdb 會在啟動時讀取此文稿。" + +#. i18n: file: debuggerconfigwidget.ui:212 +#. i18n: ectx: property (text), widget (QLabel, runShellScript_label) +#: rc.cpp:91 rc.cpp:256 +msgctxt "Shell script to be executed at run time" +msgid "R&un shell script:" +msgstr "執行 shell 文稿(&U):" + +#. i18n: file: debuggerconfigwidget.ui:225 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:94 rc.cpp:259 +msgid "Script to start remote application" +msgstr "啟動遠端應用程式使用的文稿" + +#. i18n: file: debuggerconfigwidget.ui:234 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runShellScript) +#: rc.cpp:97 rc.cpp:262 +msgid "" +"This shell script is run after the Config gdb script has been sourced by " +"gdb.\n" +"When debugging remotely this script is intended to actually start the remote " +"process.\n" +"[It is expected that the debug executable can be reached on the target, " +"maybe by downloading it as a final build step]\n" +"1) Find a way to execute a command remotely - rsh, ssh, telnet, ...\n" +"2a) Execute \"gdbserver ... application\" on target.\n" +"or if your executable contains the gdb stub\n" +"2b) Execute \"application\" on target." +msgstr "" +"此 shell 文稿會在 gdb 執行完設定文稿之後執行。\n" +"當需要遠端除錯時這個文稿會啟動遠端的程式。\n" +"【預期是希望要除錯的執行檔可以在目標平台上取得,也許在最後的步驟做下載的動" +"作。】\n" +"1) 尋找一個方法可以遠端執行指令─例如 rsh,ssh,telnet 等等。\n" +"2a) 在目標平台上執行 \"gdserver ... app\"。\n" +"若是您的執行檔中有包含 gdb 需要的東西,也可以\n" +"2b) 直接在目標平台上執行 \"app\"。" + +#. i18n: file: debuggerconfigwidget.ui:241 +#. i18n: ectx: property (text), widget (QLabel, runGdbScript_label) +#: rc.cpp:106 rc.cpp:271 +msgctxt "Gdb script to be executed at run time." +msgid "Run &gdb script:" +msgstr "執行 gdb 文稿(&G):" + +#. i18n: file: debuggerconfigwidget.ui:254 +#. i18n: ectx: property (toolTip), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:109 rc.cpp:274 +msgid "Script to connect with remote application" +msgstr "要與遠端應用程式連線的文稿" + +#. i18n: file: debuggerconfigwidget.ui:261 +#. i18n: ectx: property (whatsThis), widget (KUrlRequester, kcfg_runGdbScript) +#: rc.cpp:112 rc.cpp:277 +msgid "" +"This script is sourced by gdb after the two preceding scripts have been " +"executed.\n" +"This script is intended for the actual commands needed to connect to a " +"remotely running executable.\n" +"\tshell sleep 5\twait for remote program to start\n" +"\ttarget remote ...\tconnect to the remote debugger\n" +"\tcontinue\t[optional] run debugging to the first breakpoint." +msgstr "" +"此文稿在 gdb 執行先前兩個文稿之後執行。\n" +"它是實際要連線到遠端執行檔使用的指令。\n" +"\tshell sleep 5\t等待遠端程式啟動\n" +"\ttarget remote ...\t連到遠端的除錯器\n" +"\tcontinue\t【選擇性的】開始除錯到第一個中斷點。" + +#. i18n: file: debuggertracingdialog.ui:13 +#. i18n: ectx: property (windowTitle), widget (QDialog, DebuggerTracingDialog) +#: rc.cpp:119 rc.cpp:284 +msgid "Tracing Configuration" +msgstr "追蹤設定" + +#. i18n: file: debuggertracingdialog.ui:20 +#. i18n: ectx: property (whatsThis), widget (QCheckBox, enable) +#: rc.cpp:122 rc.cpp:287 +msgid "" +"Enable tracing\n" +"

Tracing is a mechanism to automatically print values of the chosen " +"expressions and continue execution when breakpoint is hit. You can think of " +"it as printf debugging that does not require modifying the source.

" +msgstr "" +"開啟追蹤

所謂的追蹤是一個在遇到中斷點時,會自動印出選定的表示式計算" +"出來的值,並繼續執行的機制。您可以把它當成用 printf 來除錯,只不過不需要變更" +"源碼。

" + +#. i18n: file: debuggertracingdialog.ui:23 +#. i18n: ectx: property (text), widget (QCheckBox, enable) +#: rc.cpp:126 rc.cpp:291 +msgid "Enable tracing" +msgstr "開啟追蹤" + +#. i18n: file: debuggertracingdialog.ui:40 +#. i18n: ectx: property (text), widget (QCheckBox, enableCustomFormat) +#: rc.cpp:132 rc.cpp:297 +msgid "Custom format string" +msgstr "自訂格式字串" + +#. i18n: file: debuggertracingdialog.ui:79 +#. i18n: ectx: property (whatsThis), widget (KLineEdit, customFormat) +#: rc.cpp:139 rc.cpp:304 +#, no-c-format +msgid "" +"Custom format string\n" +"

Specify a C-style format string that will be used when printing the " +"chosen expression. For example:\n" +"

Tracepoint 1: g = %d

\n" +"If custom format string is not enabled, names and values of all expressions " +"will be printed, using \"%d\" as format specifier for all expressions." +msgstr "" +"自訂格式字串\n" +"

指定 C 樣式的格式字串,它會用於印出選定的表示式計算出來的值。例如:\n" +"

Tracepoint 1: g = %d

\n" +"如果沒有開啟自訂格式字串的功能,則會印出名稱與數值,所有的數值都預設使用 \"%d" +"\"。" + +#. i18n: file: debuggertracingdialog.ui:99 +#. i18n: ectx: property (text), widget (QLabel, expressionsLabel) +#: rc.cpp:145 rc.cpp:310 +msgid "Expressions to print:" +msgstr "要列印的表示式:" + +#. i18n: file: kdevgdbui.rc:5 +#. i18n: ectx: Menu (run) +#: rc.cpp:148 rc.cpp:162 +msgctxt "@title:menu" +msgid "Run" +msgstr "執行" + +#. i18n: file: kdevgdbui.rc:16 +#. i18n: ectx: ToolBar (debugToolBar) +#: rc.cpp:151 rc.cpp:165 +msgid "Debugger Toolbar" +msgstr "除錯器工具列" + +#. i18n: file: selectcore.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:154 rc.cpp:313 +msgid "Executable:" +msgstr "執行檔:" + +#. i18n: file: selectcore.ui:27 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:157 rc.cpp:316 +msgid "Core File:" +msgstr "Core 檔:" + +#: rc.cpp:158 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frank Weng (a.k.a. Franklin)" + +#: rc.cpp:159 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "franklin at goodhorse dot idv dot tw" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_TW/kdevmakebuilder.po kdevelop-4.0.1/po/zh_TW/kdevmakebuilder.po --- kdevelop-3.9.98/po/zh_TW/kdevmakebuilder.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_TW/kdevmakebuilder.po 2010-07-17 20:13:55.000000000 +0100 @@ -0,0 +1,167 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Frank Weng (a.k.a. Franklin) , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdevmakebuilder\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2009-04-29 13:08+0800\n" +"Last-Translator: Frank Weng (a.k.a. Franklin) \n" +"Language-Team: Chinese Traditional \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: makebuilder.cpp:57 +msgid "Make Builder" +msgstr "Make 編譯器" + +#: makebuilder.cpp:57 +msgid "Support for building Make projects" +msgstr "支援編譯 Make 專案" + +#: makejob.cpp:63 makejob.cpp:65 +#, kde-format +msgid "Make: %1" +msgstr "Make:%1" + +#: makejob.cpp:84 +#, kde-format +msgid "Invalid build directory '%1'" +msgstr "不合法的編譯目錄 %1" + +#: makejob.cpp:91 +#, kde-format +msgid "Could not create build command for target '%1'" +msgstr "無法建立 %1 的編譯指令。" + +#: makejob.cpp:272 +msgid "Job failed" +msgstr "工作失敗" + +#: makejob.cpp:273 +msgid "*** Failed ***" +msgstr "*** 失敗 ***" + +#: makejob.cpp:284 +msgid "*** Finished ***" +msgstr "*** 完成 ***" + +#: makejob.cpp:295 +msgid "*** Aborted ***" +msgstr "*** 中止 ***" + +#: outputfilters.cpp:48 outputfilters.cpp:57 outputfilters.cpp:65 +#: outputfilters.cpp:77 +msgid "compiling" +msgstr "正在編譯" + +#: outputfilters.cpp:52 outputfilters.cpp:58 outputfilters.cpp:66 +#: outputfilters.cpp:76 +msgid "generating" +msgstr "正在產生" + +#: outputfilters.cpp:54 outputfilters.cpp:60 outputfilters.cpp:62 +#: outputfilters.cpp:68 +msgctxt "Linking object files into a library or executable" +msgid "linking" +msgstr "正在連結" + +#: outputfilters.cpp:64 +msgid "built" +msgstr "已編譯" + +#: outputfilters.cpp:69 outputfilters.cpp:73 +msgid "installing" +msgstr "正在安裝" + +#: outputfilters.cpp:71 +msgid "creating" +msgstr "正在建立" + +#. i18n: file: kdevmakebuilder.rc:5 +#. i18n: ectx: Menu (view) +#: rc.cpp:3 rc.cpp:41 +msgid "View" +msgstr "檢視" + +#. i18n: file: makeconfig.ui:20 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: rc.cpp:6 rc.cpp:44 +msgid "Abort on first error:" +msgstr "遇到錯誤就中止:" + +#. i18n: file: makeconfig.ui:37 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: rc.cpp:9 rc.cpp:47 +msgid "Display commands but do not execute them:" +msgstr "顯示指令但不執行:" + +#. i18n: file: makeconfig.ui:54 +#. i18n: ectx: property (text), widget (QLabel, label_31) +#: rc.cpp:12 rc.cpp:50 +msgid "Install as root:" +msgstr "以 root 安裝:" + +#. i18n: file: makeconfig.ui:71 +#. i18n: ectx: property (text), widget (QLabel, rootinstallationcommandLabel) +#: rc.cpp:15 rc.cpp:53 +msgid "Root installation command:" +msgstr "Root 安裝指令:" + +#. i18n: file: makeconfig.ui:79 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:18 rc.cpp:56 +msgid "kdesu" +msgstr "kdesu" + +#. i18n: file: makeconfig.ui:84 +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_suCommand) +#: rc.cpp:21 rc.cpp:59 +msgid "kdesudo" +msgstr "kdesudo" + +#. i18n: file: makeconfig.ui:92 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:24 rc.cpp:62 +msgid "Number of simultaneous jobs:" +msgstr "模擬工作數量:" + +#. i18n: file: makeconfig.ui:109 +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: rc.cpp:27 rc.cpp:65 +msgid "Make executable:" +msgstr "Make 執行檔:" + +#. i18n: file: makeconfig.ui:129 +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: rc.cpp:30 rc.cpp:68 +msgid "Default make target:" +msgstr "預設的 Make 目標:" + +#. i18n: file: makeconfig.ui:146 +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: rc.cpp:33 rc.cpp:71 +msgid "Additional make options:" +msgstr "Make 的其它參數:" + +#. i18n: file: makeconfig.ui:163 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:36 rc.cpp:74 +msgid "Active Environment Profile:" +msgstr "啟動環境設定檔:" + +#: rc.cpp:37 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frank Weng (a.k.a. Franklin)" + +#: rc.cpp:38 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "franklin at goodhorse dot idv dot tw" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/zh_TW/kdevqthelp.po kdevelop-4.0.1/po/zh_TW/kdevqthelp.po --- kdevelop-3.9.98/po/zh_TW/kdevqthelp.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/zh_TW/kdevqthelp.po 2010-07-17 20:13:55.000000000 +0100 @@ -0,0 +1,69 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Frank Weng (a.k.a. Franklin) , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevqthelp\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-06-02 07:51+0800\n" +"Last-Translator: Frank Weng (a.k.a. Franklin) \n" +"Language-Team: Chinese Traditional \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: qthelpdocumentation.cpp:170 +#, kde-format +msgid "Could not find any documentation for '%1'" +msgstr "找不到 %1 的文件" + +#: qthelpdocumentation.cpp:240 +msgid "QtHelp Home Page" +msgstr "QtHelp 首頁" + +#: qthelpplugin.cpp:41 qthelpplugin.cpp:164 +msgid "QtHelp" +msgstr "QtHelp" + +#: qthelpplugin.cpp:41 +msgid "Check Qt Help documentation" +msgstr "檢查 Qt 說明文件" + +#: rc.cpp:1 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frank Weng (a.k.a. Franklin)" + +#: rc.cpp:2 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "franklin at goodhorse dot idv dot tw" + +#. i18n: file: testqthelp/docwidget.ui:17 +#. i18n: ectx: property (text), widget (QLabel, label) +#: rc.cpp:5 +msgid "Identifier to search:" +msgstr "要搜尋的識別子:" + +#. i18n: file: testqthelp/docwidget.ui:30 +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: rc.cpp:8 +msgid "Help page:" +msgstr "說明頁面:" + +#. i18n: file: testqthelp/docwidget.ui:41 +#. i18n: ectx: property (url), widget (QWebView, help) +#: rc.cpp:11 +msgid "about:blank" +msgstr "about:blank" + +#. i18n: file: testqthelp/docwidget.ui:49 +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: rc.cpp:14 +msgid "Debug info:" +msgstr "除錯資訊:" \ No newline at end of file diff -Nru kdevelop-3.9.98/projectbuilders/cmakebuilder/cmakejob.cpp kdevelop-4.0.1/projectbuilders/cmakebuilder/cmakejob.cpp --- kdevelop-3.9.98/projectbuilders/cmakebuilder/cmakejob.cpp 2010-01-16 20:05:50.000000000 +0000 +++ kdevelop-4.0.1/projectbuilders/cmakebuilder/cmakejob.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -98,14 +98,14 @@ } m_executor->setWorkingDirectory( buildDirUrl.toLocalFile() ); m_executor->setArguments( cmakeArguments( m_project ) ); - connect( m_executor, SIGNAL( failed() ), this, SLOT( slotFailed() ) ); + connect( m_executor, SIGNAL( failed( QProcess::Error ) ), this, SLOT( slotFailed( QProcess::Error ) ) ); connect( m_executor, SIGNAL( completed() ), this, SLOT( slotCompleted() ) ); kDebug() << "Executing" << cmakeBinary( m_project ) << buildDirUrl.toLocalFile() << cmakeArguments( m_project ); m_model->appendLine( buildDirUrl.toLocalFile() + "> " + cmakeBinary( m_project ) + " " + cmakeArguments( m_project ).join(" ") ); m_executor->start(); } -void CMakeJob::slotFailed() +void CMakeJob::slotFailed( QProcess::ProcessError ) { kDebug() << "job failed!"; if (!m_killed) { diff -Nru kdevelop-3.9.98/projectbuilders/cmakebuilder/cmakejob.h kdevelop-4.0.1/projectbuilders/cmakebuilder/cmakejob.h --- kdevelop-3.9.98/projectbuilders/cmakebuilder/cmakejob.h 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/projectbuilders/cmakebuilder/cmakejob.h 2010-07-17 20:08:19.000000000 +0100 @@ -23,7 +23,7 @@ #define CMAKEJOB_H #include - +#include #include namespace KDevelop { @@ -55,7 +55,7 @@ bool doKill(); private Q_SLOTS: - void slotFailed(); + void slotFailed( QProcess::ProcessError ); void slotCompleted(); private: diff -Nru kdevelop-3.9.98/projectbuilders/cmakebuilder/kdevcmakebuilder.desktop kdevelop-4.0.1/projectbuilders/cmakebuilder/kdevcmakebuilder.desktop --- kdevelop-3.9.98/projectbuilders/cmakebuilder/kdevcmakebuilder.desktop 2010-01-19 12:39:48.000000000 +0000 +++ kdevelop-4.0.1/projectbuilders/cmakebuilder/kdevcmakebuilder.desktop 2010-07-17 20:08:19.000000000 +0100 @@ -3,6 +3,7 @@ Name=CMake Project Builder Name[ca]=Constructor de projecte CMake Name[ca@valencia]=Constructor de projecte CMake +Name[da]=Bygning af CMake-projekter Name[de]=Ersteller für CMake-Projekte Name[en_GB]=CMake Project Builder Name[es]=Constructor de proyecto CMake @@ -16,9 +17,11 @@ Name[nb]=CMake prosjektbygger Name[nds]=CMake-Projektbuumoduul Name[nl]=CMake-projectbouwer +Name[pl]=Budowanie projektu za pomocą CMake Name[pt]=Construtor de Projectos do CMake Name[pt_BR]=Construtor de Projeto CMake Name[ru]=Сборщик проектов CMake +Name[sl]=Graditelj projekta CMake Name[sv]=CMake-projektbyggverktyg Name[tr]=CMake Proje Oluşturucu Name[uk]=Інструмент збирання проектів CMake @@ -28,6 +31,7 @@ Comment=Builds CMake Projects Comment[ca]=Construeix projectes CMake Comment[ca@valencia]=Construeix projectes CMake +Comment[da]=Bygger CMake-projekter Comment[de]=Erstellt CMake-Projekte Comment[el]=Κατασκευή έργων CMake Comment[en_GB]=Builds CMake Projects @@ -47,10 +51,11 @@ Comment[nb]=Bygger CMake-prosjekter Comment[nds]=Buut CMake-Projekten Comment[nl]=Bouwt CMake-projecten -Comment[pl]=Budowanie projektów używających CMake +Comment[pl]=Buduje projekty za pomocą CMake Comment[pt]=Compila Projectos do CMake Comment[pt_BR]=Compila projetos CMake Comment[ru]=Собирает проекты CMake +Comment[sl]=Zgradi projekte CMake Comment[sv]=Bygger CMake-projekt Comment[tr]=CMake Projelerini Derler Comment[uk]=Збирає проекти CMake @@ -62,7 +67,7 @@ X-KDE-Library=kdevcmakebuilder X-KDE-PluginInfo-Name=KDevCMakeBuilder X-KDevelop-ProjectBuilder=CMake -X-KDevelop-Version=8 +X-KDevelop-Version=9 X-KDevelop-Category=Project X-KDevelop-Interfaces=org.kdevelop.IProjectBuilder,org.kdevelop.ICMakeBuilder X-KDevelop-IRequired=org.kdevelop.IOutputView,org.kdevelop.IMakeBuilder diff -Nru kdevelop-3.9.98/projectbuilders/makebuilder/kcm_kdev_makebuilder.desktop kdevelop-4.0.1/projectbuilders/makebuilder/kcm_kdev_makebuilder.desktop --- kdevelop-3.9.98/projectbuilders/makebuilder/kcm_kdev_makebuilder.desktop 2010-01-10 10:53:38.000000000 +0000 +++ kdevelop-4.0.1/projectbuilders/makebuilder/kcm_kdev_makebuilder.desktop 2010-07-17 20:08:19.000000000 +0100 @@ -14,6 +14,7 @@ Name[ca]=Make Name[ca@valencia]=Make Name[cs]=Make +Name[da]=Make Name[de]=Make Name[el]=Make Name[en_GB]=Make @@ -40,6 +41,7 @@ Name[pt]=Make Name[pt_BR]=Make Name[ru]=Make +Name[sl]=Make Name[sv]=Make Name[tr]=Make Name[uk]=make @@ -49,6 +51,7 @@ Comment=Configure Make settings Comment[ca]=Configura els arranjaments de Make Comment[ca@valencia]=Configura els arranjaments de Make +Comment[da]=Indstil Make Comment[de]=Make-Einstellungen Comment[el]=Ρύθμιση επιλογών Make Comment[en_GB]=Configure Make settings @@ -73,6 +76,7 @@ Comment[pt]=Configurar as opções do Make Comment[pt_BR]=Configurar as opções do Make Comment[ru]=Параметры сборки с помощью Make +Comment[sl]=Nastavite možnosti za Make Comment[sv]=Anpassa inställningar för Make Comment[tr]=Make ayarlarını yapılandır Comment[uk]=Налаштувати параметри Make diff -Nru kdevelop-3.9.98/projectbuilders/makebuilder/kdevmakebuilder.desktop kdevelop-4.0.1/projectbuilders/makebuilder/kdevmakebuilder.desktop --- kdevelop-3.9.98/projectbuilders/makebuilder/kdevmakebuilder.desktop 2010-01-19 12:39:48.000000000 +0000 +++ kdevelop-4.0.1/projectbuilders/makebuilder/kdevmakebuilder.desktop 2010-07-17 20:08:19.000000000 +0100 @@ -3,6 +3,7 @@ Name=Make Project Builder Name[ca]=Constructor de projecte Make Name[ca@valencia]=Constructor de projecte Make +Name[da]=Bygning af Make-projekter Name[de]=Ersteller für Make-Projekte Name[en_GB]=Make Project Builder Name[es]=Constructor de proyecto Make @@ -16,9 +17,11 @@ Name[nb]=Make prosjektbygger Name[nds]=Make-Projektbuumoduul Name[nl]=Make-projectbouwer +Name[pl]=Budowanie za pomocą make Name[pt]=Construtor de Projectos do Make Name[pt_BR]=Construtor de projeto Make Name[ru]=Сборщик проектов Make +Name[sl]=Graditelj projekta Make Name[sv]=Make-projektbyggverktyg Name[tr]=Make Proje Oluşturucu Name[uk]=Інструмент збирання проектів Make @@ -28,6 +31,7 @@ Comment=KDevelop Make Builder Comment[ca]=Constructor KDevelop Make Comment[ca@valencia]=Constructor KDevelop Make +Comment[da]=Make-bygger til KDevelop Comment[de]=Make-Builder von KDevelop Comment[el]=Κατασκευαστής Make του KDevelop Comment[en_GB]=KDevelop Make Builder @@ -52,6 +56,7 @@ Comment[pt]=Construtor do Make para o KDevelop Comment[pt_BR]=Compilador do Make para o KDevelop Comment[ru]=Сборщик Make для KDevelop +Comment[sl]=Graditelj Make za KDevelop Comment[sv]=KDevelop byggverktyg för Make Comment[tr]=KDevelop Make Builder Comment[uk]=Збирач Make для KDevelop @@ -62,7 +67,7 @@ ServiceTypes=KDevelop/Plugin X-KDE-Library=kdevmakebuilder X-KDE-PluginInfo-Name=KDevMakeBuilder -X-KDevelop-Version=8 +X-KDevelop-Version=9 X-KDevelop-Category=Project X-KDevelop-Interfaces=org.kdevelop.IMakeBuilder X-KDevelop-IRequired=org.kdevelop.IOutputView diff -Nru kdevelop-3.9.98/projectbuilders/makebuilder/makebuilderconfig.kcfg kdevelop-4.0.1/projectbuilders/makebuilder/makebuilderconfig.kcfg --- kdevelop-3.9.98/projectbuilders/makebuilder/makebuilderconfig.kcfg 2009-12-05 02:43:25.000000000 +0000 +++ kdevelop-4.0.1/projectbuilders/makebuilder/makebuilderconfig.kcfg 2010-07-17 20:08:19.000000000 +0100 @@ -11,9 +11,6 @@ true - - false - false diff -Nru kdevelop-3.9.98/projectbuilders/makebuilder/makeconfig.ui kdevelop-4.0.1/projectbuilders/makebuilder/makeconfig.ui --- kdevelop-3.9.98/projectbuilders/makebuilder/makeconfig.ui 2009-11-01 22:21:48.000000000 +0000 +++ kdevelop-4.0.1/projectbuilders/makebuilder/makeconfig.ui 2010-07-17 20:08:19.000000000 +0100 @@ -49,9 +49,9 @@

should be after the , as above? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# XXX "Distingui maiuscole per i nomi dei file"? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# XXX "Genera lista dei (metodi?) deprecati"? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# XXX Salvare le modifiche a... o Vuoi salvare le modifiche a... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# XXX handle è stato tradotto "maniglia" altrove \ No newline at end of file diff -Nru kdevelop-3.9.98/po/it/kdevformatters.po kdevelop-4.0.1/po/it/kdevformatters.po --- kdevelop-3.9.98/po/it/kdevformatters.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/it/kdevformatters.po 2010-07-17 20:10:53.000000000 +0100 @@ -0,0 +1,472 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the kdevformatters package. +# +# Simone Solinas , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdevformatters\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-04-29 11:57+0200\n" +"Last-Translator: Simone Solinas \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: astyle_plugin.cpp:37 +msgid "Astyle Formatter" +msgstr "Formattatore Astyle" + +#: astyle_plugin.cpp:37 +msgid "A formatting tool using astyle" +msgstr "Uno strumento di formattazione che usa astyle" + +#: astyle_plugin.cpp:64 +msgid "" +"Artistic Style is a source code indenter, formatter, and beautifier " +"for the C, C++, C# and Java programming languages.
Home Page: http://astyle.sourceforge.net" +msgstr "" +"Artistic Styleè un identatore, formattatore e abbellitore di codice " +"sorgente per i linguaggi di programmazione C, C++, C# e Java.
Home " +"Page: http://astyle.sourceforge." +"net" + +#: indent_plugin.cpp:34 +msgid "Indent Formatter" +msgstr "Formattatore Indent" + +#: indent_plugin.cpp:34 +msgid "A formatter using indent" +msgstr "Un formattatore che usa indent" + +#: indent_plugin.cpp:68 +msgid "" +"Indent and Format C Program Source.
The `indent' program can be " +"used to make code easier to read. It can also convert from one style of " +"writing C to another.
indent understands a substantial amount " +"about the syntax of C, but it also attempts to cope with incomplete and " +"misformed syntax.
Home Page: http://www.gnu.org/software/indent/" +msgstr "" +"Indenta e formatta il codice sorgente in C.
Il programma «indent» " +"può essere usato per rendere più semplice leggere il codice. Può anche " +"convertire da uno stile di scrittura in C a un altro.
indent " +"comprende una gran quantità di sintassi in C, ma tenta anche di far fronte " +"alla sintassi incompleta e mal creata.
Sito web: http://www.gnu.org/software/indent/" + +#. i18n: file: astyle_preferences.ui:21 +#. i18n: ectx: attribute (title), widget (QWidget, tabIndentqtion) +#: rc.cpp:3 rc.cpp:199 +msgid "Indentation" +msgstr "Indentazione" + +#. i18n: file: astyle_preferences.ui:36 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:6 rc.cpp:202 +msgid "Tabs" +msgstr "Tab" + +#. i18n: file: astyle_preferences.ui:41 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:9 rc.cpp:205 +msgid "Force tabs" +msgstr "Forza tab" + +#. i18n: file: astyle_preferences.ui:46 +#. i18n: ectx: property (text), item, widget (KComboBox, cbIndentType) +#: rc.cpp:12 rc.cpp:208 +msgid "Spaces" +msgstr "Spazi" + +#. i18n: file: astyle_preferences.ui:74 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpNuberSpaces) +#: rc.cpp:15 rc.cpp:211 +msgid "" +"Number of spaces that will be converted to a tab.\n" +"The number of spaces per tab is controled by the editor." +msgstr "" +"Numero di spazi che saranno convertiti in un tab.\n" +"Il numero di spazi per tab è controllato dall'editor." + +#. i18n: file: astyle_preferences.ui:92 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:19 rc.cpp:215 +msgid "Convert tabs to spaces." +msgstr "Converte i tab in spazi." + +#. i18n: file: astyle_preferences.ui:95 +#. i18n: ectx: property (text), widget (QCheckBox, chkConvertTabs) +#: rc.cpp:22 rc.cpp:218 +msgid "Con&vert tabs into spaces" +msgstr "Con&verte i tab in spazi" + +#. i18n: file: astyle_preferences.ui:102 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:25 rc.cpp:221 +msgid "Fill empty lines with the white space of their previous lines." +msgstr "" +"Riempie le righe vuote con gli spazi bianchi delle loro precedenti righe." + +#. i18n: file: astyle_preferences.ui:105 +#. i18n: ectx: property (text), widget (QCheckBox, chkFillEmptyLines) +#: rc.cpp:28 rc.cpp:224 +msgid "Fill empt&y lines" +msgstr "Riempie le righe vuot&e" + +#. i18n: file: astyle_preferences.ui:127 +#. i18n: ectx: property (text), widget (QLabel, lblIndentObjects) +#: rc.cpp:31 rc.cpp:227 +msgid "Indent" +msgstr "Indenta" + +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#. i18n: file: astyle_preferences.ui:144 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:342 +#. i18n: ectx: property (title), widget (QGroupBox, gpBlocks) +#: rc.cpp:34 rc.cpp:111 rc.cpp:230 rc.cpp:307 +msgid "Blocks" +msgstr "Blocchi" + +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#. i18n: file: astyle_preferences.ui:149 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#. i18n: file: astyle_preferences.ui:269 +#. i18n: ectx: property (title), widget (QGroupBox, gpBrackets) +#: rc.cpp:37 rc.cpp:86 rc.cpp:233 rc.cpp:282 +msgid "Brackets" +msgstr "Parentesi" + +#. i18n: file: astyle_preferences.ui:154 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:40 rc.cpp:236 +msgid "Cases" +msgstr "Case" + +#. i18n: file: astyle_preferences.ui:159 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:43 rc.cpp:239 +msgid "Class" +msgstr "Classe" + +#. i18n: file: astyle_preferences.ui:164 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:46 rc.cpp:242 +msgid "Labels" +msgstr "Etichette" + +#. i18n: file: astyle_preferences.ui:169 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:49 rc.cpp:245 +msgid "Namespaces" +msgstr "Namespace" + +#. i18n: file: astyle_preferences.ui:174 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:52 rc.cpp:248 +msgid "Preprocessor directives" +msgstr "Direttive del preprocessore" + +#. i18n: file: astyle_preferences.ui:179 +#. i18n: ectx: property (text), item, widget (KListWidget, listIdentObjects) +#: rc.cpp:55 rc.cpp:251 +msgid "Switches" +msgstr "Switch" + +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#. i18n: file: astyle_preferences.ui:192 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMaxStatement) +#. i18n: file: astyle_preferences.ui:234 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel2_2) +#: rc.cpp:58 rc.cpp:76 rc.cpp:254 rc.cpp:272 +msgid "" +"Indent a maximal # spaces in a continuous statement,\n" +"relative to the previous line." +msgstr "" +"Identa un # massimo di spazi in un'istruzione continua,\n" +"relativa alla riga precedente." + +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#. i18n: file: astyle_preferences.ui:203 +#. i18n: ectx: property (toolTip), widget (QLabel, TextLabel3_2) +#. i18n: file: astyle_preferences.ui:217 +#. i18n: ectx: property (toolTip), widget (QSpinBox, inpMinConditional) +#: rc.cpp:62 rc.cpp:69 rc.cpp:258 rc.cpp:265 +msgid "" +"Indent a minimal # spaces in a continuous conditional\n" +"belonging to a conditional header." +msgstr "" +"Identa un # minimo di spazi in una continua condizionale\n" +"appartenente ad un header condizionale." + +#. i18n: file: astyle_preferences.ui:206 +#. i18n: ectx: property (text), widget (QLabel, TextLabel3_2) +#: rc.cpp:66 rc.cpp:262 +msgid "Minimum in conditional:" +msgstr "Minimo condizionato:" + +#. i18n: file: astyle_preferences.ui:220 +#. i18n: ectx: property (specialValueText), widget (QSpinBox, inpMinConditional) +#: rc.cpp:73 rc.cpp:269 +msgid "Twice current" +msgstr "Due volte l'attuale" + +#. i18n: file: astyle_preferences.ui:237 +#. i18n: ectx: property (text), widget (QLabel, TextLabel2_2) +#: rc.cpp:80 rc.cpp:276 +msgid "Maximum in statement:" +msgstr "Massimo nell'istruzione:" + +#. i18n: file: astyle_preferences.ui:263 +#. i18n: ectx: attribute (title), widget (QWidget, tabOther) +#: rc.cpp:83 rc.cpp:279 +msgid "Other" +msgstr "Altro" + +#. i18n: file: astyle_preferences.ui:283 +#. i18n: ectx: property (text), widget (QLabel, lblBrackets) +#: rc.cpp:89 rc.cpp:285 +msgid "Type" +msgstr "Tipo" + +#. i18n: file: astyle_preferences.ui:297 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:92 rc.cpp:288 +msgid "" +"Break brackets before closing headers (e.g. 'else', 'catch', ...)\n" +"from their immediately preceding closing brackets." +msgstr "" +"Interrompi le parentesi prima di chiudere le intestazioni (ad es. «else», " +"«catch», ...)\n" +" dalle parentesi di chiusura immediatamente precedenti." + +#. i18n: file: astyle_preferences.ui:300 +#. i18n: ectx: property (text), widget (QCheckBox, chkBracketsCloseHeaders) +#: rc.cpp:96 rc.cpp:292 +msgid "Brea&k closing headers" +msgstr "Interrompi c&hiudendo i file intestazione" + +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#. i18n: file: astyle_preferences.ui:314 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#. i18n: file: astyle_preferences.ui:426 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:99 rc.cpp:158 rc.cpp:295 rc.cpp:354 +msgid "No change" +msgstr "Nessuna modifica" + +#. i18n: file: astyle_preferences.ui:319 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:102 rc.cpp:298 +msgid "Attach" +msgstr "Allega" + +#. i18n: file: astyle_preferences.ui:324 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:105 rc.cpp:301 +msgid "Break" +msgstr "Interrompi" + +#. i18n: file: astyle_preferences.ui:329 +#. i18n: ectx: property (text), item, widget (KComboBox, cbBrackets) +#: rc.cpp:108 rc.cpp:304 +msgid "Linux" +msgstr "Linux" + +#. i18n: file: astyle_preferences.ui:357 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:114 rc.cpp:310 +msgid "" +"Insert empty lines around unrelated blocks, labels, classes,...\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Inserisci righe vuote attorno ai blocchi, etichette, classi, ... non " +"correlati\n" +"Problemi noti:\n" +"\n" +"1. Se un'istruzione NON è parte di un blocco, \n" +"le istruzioni seguenti avranno tutte spazi doppi. \n" +"Le istruzioni racchiuse in un blocco saranno formattate \n" +"correttamente.\n" +"\n" +"2. I commenti saranno spezzati dal blocco.\n" + +#. i18n: file: astyle_preferences.ui:360 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreak) +#: rc.cpp:126 rc.cpp:322 +msgctxt "Means break unrelated blocks by a newline" +msgid "&Break blocks" +msgstr "Interrompi &blocchi" + +#. i18n: file: astyle_preferences.ui:378 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:129 rc.cpp:325 +msgid "" +"Like --break-blocks, except also insert empty lines \n" +"around closing headers (e.g. 'else', 'catch', ...).\n" +"\n" +"Known problems:\n" +"\n" +"1. If a statement is NOT part of a block, \n" +"the following statements are all double spaced. \n" +"Statements enclosed in a block are formatted \n" +"correctly.\n" +"\n" +"2. Comments are broken from the block.\n" +msgstr "" +"Come --Interrompi blocchi, ma inserisce anche righe vuote \n" +"attorno le intestazioni di chiusura (ad es «else», «catch», ...).\n" +"\n" +"Problemi noti:\n" +"\n" +"1. Se un'istruzione NON è parte di un blocco, \n" +"le istruzioni seguenti avranno tutte spazi doppi. \n" +"Le istruzioni racchiuse in un blocco saranno formattate \n" +"correttamente.\n" +"\n" +"2. I commenti saranno spezzati dal blocco.\n" + +#. i18n: file: astyle_preferences.ui:381 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockBreakAll) +#: rc.cpp:143 rc.cpp:339 +msgctxt "Means break all blocks with a newline" +msgid "Break all bl&ocks" +msgstr "Interrompi tutti i bl&occhi" + +#. i18n: file: astyle_preferences.ui:388 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:146 rc.cpp:342 +msgid "Break 'else if()' statements into two different lines." +msgstr "Spezza le istruzioni «else if()» su due righe differenti." + +#. i18n: file: astyle_preferences.ui:391 +#. i18n: ectx: property (text), widget (QCheckBox, chkBlockIfElse) +#: rc.cpp:149 rc.cpp:345 +msgctxt "Means break else if() into separate lines" +msgid "Break i&f-else" +msgstr "Spezza i&f-else" + +#. i18n: file: astyle_preferences.ui:401 +#. i18n: ectx: property (title), widget (QGroupBox, gpPadding) +#: rc.cpp:152 rc.cpp:348 +msgid "Padding" +msgstr "Crea spazio" + +#. i18n: file: astyle_preferences.ui:409 +#. i18n: ectx: property (text), widget (QLabel, lblParenthesis) +#: rc.cpp:155 rc.cpp:351 +msgid "Pad parenthesis" +msgstr "Spazi parentesi" + +#. i18n: file: astyle_preferences.ui:431 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:161 rc.cpp:357 +msgid "Unpad" +msgstr "Togli spazi" + +#. i18n: file: astyle_preferences.ui:436 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:164 rc.cpp:360 +msgid "Inside only" +msgstr "Solo dentro" + +#. i18n: file: astyle_preferences.ui:441 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:167 rc.cpp:363 +msgid "Outside only" +msgstr "Solo fuori" + +#. i18n: file: astyle_preferences.ui:446 +#. i18n: ectx: property (text), item, widget (KComboBox, cbParenthesisPadding) +#: rc.cpp:170 rc.cpp:366 +msgid "Inside and outside" +msgstr "Dentro e fuori" + +#. i18n: file: astyle_preferences.ui:456 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkPadOperators) +#: rc.cpp:173 rc.cpp:369 +msgid "" +"Insert space padding around operators.\n" +"Once padded, operators stay padded.\n" +"There is no unpad operator option." +msgstr "" +"Inserisci spazi di riempimento attorno gli operatori.\n" +"Una volta inseriti, tali spazi rimangono.\n" +"Non c'è un'operatore per rimuoverli automaticamente." + +#. i18n: file: astyle_preferences.ui:459 +#. i18n: ectx: property (text), widget (QCheckBox, chkPadOperators) +#: rc.cpp:178 rc.cpp:374 +msgid "&Add spaces around operators" +msgstr "&Aggiungi spazi intorno agli operatori" + +#. i18n: file: astyle_preferences.ui:471 +#. i18n: ectx: property (title), widget (QGroupBox, gpOneLiners) +#: rc.cpp:181 rc.cpp:377 +msgid "One liners" +msgstr "Su una linea" + +#. i18n: file: astyle_preferences.ui:478 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:184 rc.cpp:380 +msgid "" +"Do not break lines containing multiple statements into\n" +"multiple single-statement lines." +msgstr "" +"Non spezzare le righe che contengono istruzioni multiple in\n" +"differenti righe contenenti ciascuna una singola istruzione." + +#. i18n: file: astyle_preferences.ui:481 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepStatements) +#: rc.cpp:188 rc.cpp:384 +msgid "&Keep one-line statements" +msgstr "&Mantieni le istruzioni su una riga" + +#. i18n: file: astyle_preferences.ui:488 +#. i18n: ectx: property (toolTip), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:191 rc.cpp:387 +msgid "Do not break blocks residing completely on one line." +msgstr "Non spezzare blocchi che risiedono completamente in una riga." + +#. i18n: file: astyle_preferences.ui:491 +#. i18n: ectx: property (text), widget (QCheckBox, chkKeepBlocks) +#: rc.cpp:194 rc.cpp:390 +msgid "Keep o&ne-line blocks" +msgstr "Tie&ni insieme blocchi di una linea" + +#: rc.cpp:195 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Simone Solinas" + +#: rc.cpp:196 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ksolsim@gmail.com" \ No newline at end of file diff -Nru kdevelop-3.9.98/po/it/kdevgdb.po kdevelop-4.0.1/po/it/kdevgdb.po --- kdevelop-3.9.98/po/it/kdevgdb.po 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/po/it/kdevgdb.po 2010-07-17 20:10:53.000000000 +0100 @@ -0,0 +1,882 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Marco Poletti , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-05-31 01:30+0200\n" +"PO-Revision-Date: 2010-03-25 20:51+0100\n" +"Last-Translator: Marco Poletti \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.0\n" + +#: _watchitem.cpp:41 +msgid "Watches" +msgstr "Osservati" + +#: _watchitem.cpp:59 +msgid "Recent" +msgstr "Recenti" + +#: breakpointcontroller.cpp:400 +#, kde-format +msgid "
Old value: %1" +msgstr "
Valore precedente: %1" + +#: breakpointcontroller.cpp:403 +#, kde-format +msgid "
New value: %1" +msgstr "
Nuovo valore: %1" + +#: debuggerplugin.cpp:90 +msgid "GDB Support" +msgstr "Supporto a GDB" + +#: debuggerplugin.cpp:90 +msgid "Support for running apps in GDB" +msgstr "Supporto per l'esecuzione di applicazioni in GDB" + +#: debuggerplugin.cpp:150 +msgid "Disassemble" +msgstr "Disassembla" + +#: debuggerplugin.cpp:154 gdblaunchconfig.cpp:129 +msgid "GDB" +msgstr "GDB" + +#: debuggerplugin.cpp:208 +msgid "Examine Core File..." +msgstr "Esamina file core..." + +#: debuggerplugin.cpp:209 +msgid "Examine core file" +msgstr "Esamina file core" + +#: debuggerplugin.cpp:210 +msgid "" +"Examine core file

- + - Run more than one job at once: + Install as root: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -59,34 +59,35 @@ - + - + - Install as root: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + Root installation command: - - - - + + + + kdesu + + + + + kdesudo + + - + - - false - Number of simultaneous jobs: @@ -95,14 +96,14 @@ - + - - false + + 1 - + Make executable: @@ -112,7 +113,7 @@ - + @@ -122,7 +123,7 @@ - + Default make target: @@ -132,14 +133,14 @@ - + true - + Additional make options: @@ -149,14 +150,14 @@ - + true - + Active Environment Profile: @@ -166,7 +167,7 @@ - + @@ -185,34 +186,13 @@ - - - - Root installation command: - - - - - - - - kdesu - - - - - kdesudo - - - - - KComboBox - QComboBox -
kcombobox.h
+ KUrlRequester + QFrame +
kurlrequester.h
KLineEdit @@ -220,9 +200,9 @@
klineedit.h
- KUrlRequester - QFrame -
kurlrequester.h
+ KComboBox + QComboBox +
kcombobox.h
KDevelop::EnvironmentSelectionWidget @@ -233,38 +213,6 @@ - kcfg_runMoreThanOneJob - toggled(bool) - kcfg_numberOfJobs - setEnabled(bool) - - - 369 - 62 - - - 736 - 144 - - - - - kcfg_runMoreThanOneJob - toggled(bool) - label - setEnabled(bool) - - - 299 - 62 - - - 158 - 139 - - - - kcfg_installAsRoot toggled(bool) kcfg_suCommand diff -Nru kdevelop-3.9.98/projectbuilders/makebuilder/makejob.cpp kdevelop-4.0.1/projectbuilders/makebuilder/makejob.cpp --- kdevelop-3.9.98/projectbuilders/makebuilder/makejob.cpp 2010-01-16 21:49:40.000000000 +0000 +++ kdevelop-4.0.1/projectbuilders/makebuilder/makejob.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -180,12 +180,13 @@ { cmdline << "-k"; } - if( builderGroup.readEntry("Run Multiple Jobs", false ) ) - { - int jobnumber = builderGroup.readEntry("Number Of Jobs", 1); + + int jobnumber = builderGroup.readEntry("Number Of Jobs", 1); + if(jobnumber>1) { QString jobNumberArg = QString("-j%1").arg(jobnumber); cmdline << jobNumberArg; } + if( builderGroup.readEntry("Display Only", false) ) { cmdline << "-n"; diff -Nru kdevelop-3.9.98/projectbuilders/makebuilder/makejob.h kdevelop-4.0.1/projectbuilders/makebuilder/makejob.h --- kdevelop-3.9.98/projectbuilders/makebuilder/makejob.h 2009-04-30 22:29:37.000000000 +0100 +++ kdevelop-4.0.1/projectbuilders/makebuilder/makejob.h 2010-07-17 20:08:19.000000000 +0100 @@ -56,7 +56,7 @@ IncorrectItemError = UserDefinedError, InvalidBuildDirectoryError, BuildCommandError, - FailedError + FailedError = FailedShownError }; MakeJob( MakeBuilder* builder, KDevelop::ProjectBaseItem* item, CommandType command, const QString& overrideTarget = QString() ); diff -Nru kdevelop-3.9.98/projectmanagers/cmake/cmakebuilddirchooser.cpp kdevelop-4.0.1/projectmanagers/cmake/cmakebuilddirchooser.cpp --- kdevelop-3.9.98/projectmanagers/cmake/cmakebuilddirchooser.cpp 2010-01-31 09:31:58.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/cmakebuilddirchooser.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -26,6 +26,8 @@ #include #include "ui_cmakebuilddirchooser.h" +#include + CMakeBuildDirChooser::CMakeBuildDirChooser(QWidget* parent) : KDialog(parent) { @@ -40,8 +42,6 @@ QString cmakeBin=KStandardDirs::findExe( "cmake" ); setCMakeBinary(KUrl(cmakeBin)); - // Default to debug builds in kdevelop - setBuildType("Debug"); connect(m_chooserUi->cmakeBin, SIGNAL(textChanged(const QString &)), this, SLOT(updated())); connect(m_chooserUi->buildFolder, SIGNAL(textChanged(const QString &)), this, SLOT(updated())); @@ -55,6 +55,7 @@ KUrl proposedBuildUrl = KUrl( srcFolder.toLocalFile() + "/build" ); proposedBuildUrl.cleanPath(); m_chooserUi->buildFolder->setUrl(proposedBuildUrl); + setCaption(i18n("Configure a build directory for %1", srcFolder.toLocalFile())); update(); } @@ -96,8 +97,7 @@ // m_chooserUi->generator->setEnabled(haveCMake); if(!haveCMake) { - m_chooserUi->status->setText(i18n("You need to select a cmake binary")); - button(Ok)->setEnabled(false); + setStatus(i18n("You need to select a cmake binary."), false); return; } @@ -140,15 +140,14 @@ } else { - m_chooserUi->status->setText(i18n("You need to specify a build directory")); - button(Ok)->setEnabled(false); + setStatus(i18n("You need to specify a build directory."), false); return; } if(st & (BuildDirCreated | CorrectBuildDir)) { - m_chooserUi->status->setText(i18n("Using an already created build directory")); + setStatus(i18n("Using an already created build directory."), true); m_chooserUi->installPrefix->setEnabled(false); m_chooserUi->buildType->setEnabled(false); } @@ -159,26 +158,25 @@ if(correct) { st |= CorrectBuildDir; - m_chooserUi->status->setText(QString()); + setStatus(i18n("Creating a new build directory."), true); } else { //Useful to explain what's going wrong if(st & DirAlreadyCreated) - m_chooserUi->status->setText(i18n("Build directory already configured.")); + setStatus(i18n("Build directory already configured."), false); else if (!srcDir.isEmpty()) - m_chooserUi->status->setText(i18n("This build directory is for %1, " - "but the project directory is %2", srcDir, m_srcFolder.toLocalFile())); + setStatus(i18n("This build directory is for %1, " + "but the project directory is %2.", srcDir, m_srcFolder.toLocalFile()), false); else if(dirRelative) - m_chooserUi->status->setText(i18n("You may not select a relative build directory")); + setStatus(i18n("You may not select a relative build directory."), false); else if(!dirEmpty) - m_chooserUi->status->setText(i18n("The selected build directory is not empty")); + setStatus(i18n("The selected build directory is not empty."), false); } m_chooserUi->installPrefix->setEnabled(correct); m_chooserUi->buildType->setEnabled(correct); } - button(Ok)->setEnabled(st & CorrectBuildDir); } void CMakeBuildDirChooser::setCMakeBinary(const KUrl& url) @@ -200,8 +198,9 @@ } void CMakeBuildDirChooser::setBuildType(const QString& s) -{ - m_chooserUi->buildType->addItem(s); +{ + m_chooserUi->buildType->addItem(s); + m_chooserUi->buildType->setCurrentIndex(m_chooserUi->buildType->findText(s)); updated(); } @@ -211,6 +210,19 @@ updated(); } +void CMakeBuildDirChooser::setStatus(const QString& message, bool canApply) +{ + KColorScheme scheme(QPalette::Normal); + KColorScheme::ForegroundRole role; + if (canApply) { + role = KColorScheme::PositiveText; + } else { + role = KColorScheme::NegativeText; + } + m_chooserUi->status->setText(QString("%2").arg(scheme.foreground(role).color().name()).arg(message)); + button(Ok)->setEnabled(canApply); +} + KUrl CMakeBuildDirChooser::cmakeBinary() const { return m_chooserUi->cmakeBin->url(); } KUrl CMakeBuildDirChooser::installPrefix() const { return m_chooserUi->installPrefix->url(); } diff -Nru kdevelop-3.9.98/projectmanagers/cmake/cmakebuilddirchooser.h kdevelop-4.0.1/projectmanagers/cmake/cmakebuilddirchooser.h --- kdevelop-3.9.98/projectmanagers/cmake/cmakebuilddirchooser.h 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/projectmanagers/cmake/cmakebuilddirchooser.h 2010-07-17 20:08:19.000000000 +0100 @@ -60,6 +60,7 @@ void setBuildType(const QString&); void setSourceFolder( const KUrl& srcFolder ); void setAlreadyUsed(const QStringList& used); + void setStatus(const QString& message, bool canApply); private slots: void updated(); diff -Nru kdevelop-3.9.98/projectmanagers/cmake/cmakebuilddirchooser.ui kdevelop-4.0.1/projectmanagers/cmake/cmakebuilddirchooser.ui --- kdevelop-3.9.98/projectmanagers/cmake/cmakebuilddirchooser.ui 2009-07-06 12:31:34.000000000 +0100 +++ kdevelop-4.0.1/projectmanagers/cmake/cmakebuilddirchooser.ui 2010-07-17 20:08:19.000000000 +0100 @@ -6,8 +6,8 @@ 0 0 - 604 - 230 + 611 + 200 @@ -17,6 +17,9 @@ + + QFormLayout::ExpandingFieldsGrow + @@ -98,40 +101,36 @@ true - -1 + 0 - debug + Debug - release + Release - RelWithDebInfo + RelWithDebInfo - MinSizeRel + MinSizeRel - - + + - Status: + Status Message... - - - - - + true diff -Nru kdevelop-3.9.98/projectmanagers/cmake/cmakecodecompletionmodel.cpp kdevelop-4.0.1/projectmanagers/cmake/cmakecodecompletionmodel.cpp --- kdevelop-3.9.98/projectmanagers/cmake/cmakecodecompletionmodel.cpp 2009-10-08 12:56:13.000000000 +0100 +++ kdevelop-4.0.1/projectmanagers/cmake/cmakecodecompletionmodel.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -38,6 +38,8 @@ #include "cmakeutils.h" #include "icmakedocumentation.h" +#include + using namespace KTextEditor; using namespace KDevelop; @@ -183,10 +185,13 @@ { switch(type) { - case Command: return KIcon("code-block").pixmap(16,16); - case Variable: return KIcon("code-variable").pixmap(16,16); - case Macro: return KIcon("code-function").pixmap(16,16); - case Path: return KIcon("folder").pixmap(16,16); + case Command: return KIcon("code-block"); + case Variable: return KIcon("code-variable"); + case Macro: return KIcon("code-function"); + case Path: { + QString url = m_paths[index.row()-m_declarations.size()]; + return KIcon(KMimeType::findByUrl(url, 0, false, true)->iconName(url)); + } } } else if(role==Qt::DisplayRole && index.column()==CodeCompletionModel::Arguments) @@ -201,7 +206,9 @@ DUChainReadLocker lock(DUChain::lock()); int pos=index.row(); AbstractType::Ptr type; - type = m_declarations[pos].data()->abstractType(); + + if(m_declarations[pos].data()) + type = m_declarations[pos].data()->abstractType(); Q_ASSERT(type); FunctionType::Ptr func; func = type.cast(); diff -Nru kdevelop-3.9.98/projectmanagers/cmake/cmakedocumentation.cpp kdevelop-4.0.1/projectmanagers/cmake/cmakedocumentation.cpp --- kdevelop-3.9.98/projectmanagers/cmake/cmakedocumentation.cpp 2009-12-26 02:22:08.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/cmakedocumentation.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -85,9 +86,12 @@ QString CMakeDocumentation::descriptionForIdentifier(const QString& id, Type t) const { QString desc; - if(args[t]) - desc="
"+CMakeParserUtils::executeProcess(mCMakeCmd, QStringList(args[t]) << id.simplified())+"
"; - + if(args[t]) { + desc = "
" + Qt::escape(
+                    CMakeParserUtils::executeProcess(mCMakeCmd, QStringList(args[t]) << id.simplified())
+                ) + "
"; + } + return desc; } @@ -101,10 +105,10 @@ if(m_typeForName.contains(identifier)) { desc=descriptionForIdentifier(identifier, m_typeForName[identifier]); - } else { - if(m_typeForName.contains(identifier.toUpper())) { - desc=descriptionForIdentifier(identifier, m_typeForName[identifier.toUpper()]); - } + } else if(m_typeForName.contains(identifier.toLower())) { + desc=descriptionForIdentifier(identifier, m_typeForName[identifier.toLower()]); + } else if(m_typeForName.contains(identifier.toUpper())) { + desc=descriptionForIdentifier(identifier, m_typeForName[identifier.toUpper()]); } KDevelop::IProject* p=KDevelop::ICore::self()->projectController()->findProjectForUrl(file); @@ -144,7 +148,7 @@ QIcon CMakeDocumentation::icon() const { - return KIcon("text-x-cmake"); + return KIcon("cmake"); } QString CMakeDocumentation::name() const diff -Nru kdevelop-3.9.98/projectmanagers/cmake/cmakehighlighting.cpp kdevelop-4.0.1/projectmanagers/cmake/cmakehighlighting.cpp --- kdevelop-3.9.98/projectmanagers/cmake/cmakehighlighting.cpp 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/projectmanagers/cmake/cmakehighlighting.cpp 1970-01-01 01:00:00.000000000 +0100 @@ -1,200 +0,0 @@ -/***************************************************************************** - * Copyright (c) 2007 Piyush verma * - * Copyright (c) 2008 Aleix Pol * - * * - * Permission is hereby granted, free of charge, to any person obtaining * - * a copy of this software and associated documentation files (the * - * "Software"), to deal in the Software without restriction, including * - * without limitation the rights to use, copy, modify, merge, publish, * - * distribute, sublicense, and/or sell copies of the Software, and to * - * permit persons to whom the Software is furnished to do so, subject to * - * the following conditions: * - * * - * The above copyright notice and this permission notice shall be * - * included in all copies or substantial portions of the Software. * - * * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * - *****************************************************************************/ -#include "cmakehighlighting.h" - -#include -#include -#include - -#include -#include -#include -#include -#include - -using namespace KTextEditor; -using namespace KDevelop; - -#define LOCK_SMART(range) KTextEditor::SmartInterface* iface = dynamic_cast(range->document()); QMutexLocker lock(iface ? iface->smartMutex() : 0); - -CMakeHighlighting::CMakeHighlighting( QObject * parent ) - : QObject(parent) -{ -} - -CMakeHighlighting::~CMakeHighlighting( ) -{ -} - -KTextEditor::Attribute::Ptr CMakeHighlighting::attributeForType( Types type, Contexts ctx) const -{ - KTextEditor::Attribute::Ptr a; - switch (ctx) - { - case DefinitionContext: - a = m_definitionAttributes[type]; - break; - - case DeclarationContext: - a = m_declarationAttributes[type]; - break; - - case ReferenceContext: - a = m_referenceAttributes[type]; - break; - } - - if (!a) - { - a = KTextEditor::Attribute::Ptr(new KTextEditor::Attribute()); - a->setBackgroundFillWhitespace(true); - - QColor c; - switch (type) - { - case NamespaceType: - c=QColor(Qt::green); - break; - case ClassType: - c=QColor(Qt::blue); - break; - case FunctionType: - c=QColor(Qt::green); - break; - case FunctionVariableType: - c=QColor(Qt::blue); - break; - case NamespaceVariableType: - c=QColor(Qt::red); - break; - case ClassVariableType: - c=QColor(Qt::green); - break; - default: - c=QColor(Qt::green); - break; - } - if(ctx==ReferenceContext) - { - a->setForeground(c.dark()); - m_referenceAttributes.insert(type, a); - } - else - { - a->setBackground(c.light(170)); - a->setFontBold(); - m_definitionAttributes.insert(type, a); - } - } - return a; -} - -void CMakeHighlighting::highlightTree( KTextEditor::SmartRange * range ) const -{ - foreach (KTextEditor::SmartRange* child, range->childRanges()) - highlightTree(child); -} - -void CMakeHighlighting::outputRange( KTextEditor::SmartRange * range ) const -{ - Q_ASSERT(range->start() <= range->end()); - foreach (SmartRange* child, range->childRanges()) - outputRange(child); -} - -void CMakeHighlighting::highlightDUChain(KDevelop::TopDUContext* context) const -{ - DUChainReadLocker lock(DUChain::lock()); - Q_ASSERT(context->topContext() == context); - highlightDUChain(static_cast(context)); -} - -void CMakeHighlighting::highlightDUChain(DUContext* context) const -{ - - kDebug() << "Highlighting duchain"; - if (!context->smartRange()) - { - kDebug() << "Ooops, no smart range, somethings broken"; - return; - } - kDebug() << "Highlighting declarations:" << context->localDeclarations(); - foreach (Declaration* dec, context->localDeclarations()) - { - highlightDeclaration(dec); - } - - highlightUses(context); - - kDebug() << "Highlighting child contexts:" << context->childContexts(); - foreach (DUContext* child, context->childContexts()) - highlightDUChain(child); -} - - -CMakeHighlighting::Types CMakeHighlighting::typeForDeclaration(Declaration * dec) const -{ - Types type=ErrorVariableType; - switch (dec->context()->type()) - { - case DUContext::Class: - type = ClassVariableType; - break; - case DUContext::Function: - type = FunctionVariableType; - break; - case DUContext::Namespace: - type = NamespaceVariableType; - break; - default: - break; - } - return type; -} - -void CMakeHighlighting::highlightDeclaration(Declaration * declaration) const -{ - if (SmartRange* range = declaration->smartRange()) - range->setAttribute(attributeForType(typeForDeclaration(declaration), DeclarationContext)); -} - -void CMakeHighlighting::highlightUses(KDevelop::DUContext* context) const -{ - for(int i=0; iusesCount(); i++) - { - if (SmartRange* range = context->useSmartRange(i)) { - Types type = ErrorVariableType; - Declaration* decl = context->topContext()->usedDeclarationForIndex(context->uses()[i].m_declarationIndex); - if (decl) - type = typeForDeclaration(decl); - - LOCK_SMART(range); - range->setAttribute(attributeForType(type, ReferenceContext)); - } - } -} - -#include "cmakehighlighting.moc" -// kate: space-indent on; indent-width 4; tab-width 4; replace-tabs on; auto-insert-doxygen on - diff -Nru kdevelop-3.9.98/projectmanagers/cmake/cmakehighlighting.h kdevelop-4.0.1/projectmanagers/cmake/cmakehighlighting.h --- kdevelop-3.9.98/projectmanagers/cmake/cmakehighlighting.h 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/projectmanagers/cmake/cmakehighlighting.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,88 +0,0 @@ -/***************************************************************************** - * Copyright (c) 2007 Piyush verma * - * * - * Permission is hereby granted, free of charge, to any person obtaining * - * a copy of this software and associated documentation files (the * - * "Software"), to deal in the Software without restriction, including * - * without limitation the rights to use, copy, modify, merge, publish, * - * distribute, sublicense, and/or sell copies of the Software, and to * - * permit persons to whom the Software is furnished to do so, subject to * - * the following conditions: * - * * - * The above copyright notice and this permission notice shall be * - * included in all copies or substantial portions of the Software. * - * * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * - *****************************************************************************/ -#ifndef KDEVCMAKEHIGHLIGHTING_H -#define KDEVCMAKEHIGHLIGHTING_H - -#include -#include -#include - -#include -#include - -namespace KTextEditor -{ - class SmartRange; -} - -namespace KDevelop -{ - class DUContext; - class Declaration; -} - -class CMakeHighlighting : public QObject, public KDevelop::ICodeHighlighting -{ - Q_OBJECT - Q_INTERFACES(KDevelop::ICodeHighlighting) -public: - - enum Types - { - FunctionType, - ClassType, - NamespaceType, - FunctionVariableType, - ClassVariableType, - NamespaceVariableType, - ErrorVariableType - }; - enum Contexts - { - DefinitionContext, - DeclarationContext, - NamespaceContext, - ReferenceContext - }; - CMakeHighlighting(QObject* parent=0); - virtual ~CMakeHighlighting(); - - void highlightTree(KTextEditor::SmartRange* topRange) const; - void highlightDUChain(KDevelop::TopDUContext* context) const; - - virtual void highlightDeclaration(KDevelop::Declaration* declaration) const; - virtual void highlightUses(KDevelop::DUContext*) const; - KTextEditor::Attribute::Ptr attributeForType(Types type, Contexts context) const; -private: - void highlightDUChain(KDevelop::DUContext* context) const; - void outputRange( KTextEditor::SmartRange * range ) const; - - Types typeForDeclaration(KDevelop::Declaration* dec) const; - - mutable QHash m_definitionAttributes; - mutable QHash m_declarationAttributes; - mutable QHash m_referenceAttributes; -}; - -#endif -// kate: space-indent on; indent-width 4; tab-width 4; replace-tabs on; auto-insert-doxygen on diff -Nru kdevelop-3.9.98/projectmanagers/cmake/CMakeLists.txt kdevelop-4.0.1/projectmanagers/cmake/CMakeLists.txt --- kdevelop-3.9.98/projectmanagers/cmake/CMakeLists.txt 2009-11-15 21:24:42.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/CMakeLists.txt 2010-07-17 20:08:19.000000000 +0100 @@ -6,6 +6,7 @@ ${cmakebuilder_SOURCE_DIR} ) add_subdirectory(tests) +add_subdirectory(icons) # enable this if you want to have the cmake debug visitor run on each CMakeLists.txt # the debug visitor prints out the Ast for the CMakeLists.txt file. @@ -36,7 +37,6 @@ cmakenavigationwidget.cpp cmakemodelitems.cpp cmakemanager.cpp - cmakehighlighting.cpp cmakecodecompletionmodel.cpp ) diff -Nru kdevelop-3.9.98/projectmanagers/cmake/cmakemanager.cpp kdevelop-4.0.1/projectmanagers/cmake/cmakemanager.cpp --- kdevelop-3.9.98/projectmanagers/cmake/cmakemanager.cpp 2010-02-02 00:18:30.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/cmakemanager.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -35,7 +35,6 @@ #include #include #include -#include #include #include @@ -49,6 +48,7 @@ #include #include #include +#include #include #include #include @@ -56,12 +56,12 @@ #include #include #include +#include #include #include #include "cmakemodelitems.h" #include "cmakenavigationwidget.h" -#include "cmakehighlighting.h" #include "cmakecachereader.h" #include "cmakeastvisitor.h" #include "cmakeprojectvisitor.h" @@ -85,8 +85,9 @@ #include #include "cmakeprojectdata.h" #include -#include -#include + +#include +#include using namespace KDevelop; @@ -149,9 +150,11 @@ KDEV_USE_EXTENSION_INTERFACE( KDevelop::IProjectFileManager ) KDEV_USE_EXTENSION_INTERFACE( KDevelop::ILanguageSupport ) - m_highlight = new CMakeHighlighting(this); - QString cmakeCmd = KStandardDirs::findExe("cmake"); + m_highlight = new KDevelop::CodeHighlighting(this); + new CodeCompletion(this, new CMakeCodeCompletionModel(this), name()); + + connect(ICore::self()->projectController(), SIGNAL(projectClosing(KDevelop::IProject*)), SLOT(projectClosing(KDevelop::IProject*))); } CMakeManager::~CMakeManager() @@ -159,31 +162,25 @@ KUrl CMakeManager::buildDirectory(KDevelop::ProjectBaseItem *item) const { - KUrl path = CMake::currentBuildDir(item->project()); - if(path.isEmpty()) - { - return KUrl(); - } - - CMakeFolderItem *fi=dynamic_cast(item); - for(; !fi && item; ) - { - item=static_cast(item->parent()); - fi=dynamic_cast(item); - } - if(!fi) { - return path; + KUrl ret; + if(item) { + bool isroot = false; + if (ProjectFolderItem* projectFolderItem = dynamic_cast(item)) { + if(projectFolderItem->isProjectRoot()) { + isroot = true; + } + } + if (isroot) { + ret=CMake::currentBuildDir(item->project()); + } + else { + ret=buildDirectory(dynamic_cast(item->parent())); + CMakeFolderItem *fi=dynamic_cast(item); + if(fi) + ret.addPath(fi->buildDir()); + } } - - //Can't get it from item->project()->projectItem()->url() because - //it might not be created yet. - KUrl projectPath = CMake::projectRoot(item->project()); - QString relative=KUrl::relativeUrl( projectPath, fi->url() ); - path.addPath(relative); - path.cleanPath(); - - kDebug() << "Build folder: " << path; - return path; + return ret; } KDevelop::ReferencedTopDUContext CMakeManager::initializeProject(KDevelop::IProject* project, const KUrl& baseUrl) @@ -300,7 +297,7 @@ } } - m_rootItem = new CMakeFolderItem(project, folderUrl.url(), 0 ); + m_rootItem = new CMakeFolderItem(project, folderUrl.url(), QString(), 0 ); m_rootItem->setProjectRoot(true); KUrl cachefile=buildDirectory(m_rootItem); @@ -327,19 +324,22 @@ return CMakeParserUtils::includeScript( file, parent, &m_varsPerProject[project], &m_macrosPerProject[project], project->folder().toLocalFile(KUrl::RemoveTrailingSlash), &m_projectCache[project], m_modulePathPerProject[project]); } -QSet removeMatches(const QRegExp& rx, const QStringList& orig) +QMutex rxFileFilterMutex; //We have to use a mutex-lock to protect static regular ex +static QRegExp rxFileFilter("\\w*~$|\\w*\\.bak$"); ///@todo This filter should be configurable, and filtering should be done on a manager-independent level + +QSet filterFiles(const QStringList& orig) { + QMutexLocker lock(&rxFileFilterMutex); + QSet ret; foreach(const QString& str, orig) { - if(rx.indexIn(str)<0) + if(rxFileFilter.indexIn(str)<0) ret.insert(str); } return ret; } - -static QRegExp rxFileFilter("\\w*~$|\\w*\\.bak$"); QList CMakeManager::parse( KDevelop::ProjectFolderItem* item ) { QList folderList; @@ -411,7 +411,6 @@ data.definitions=v.definitions(); data.includeDirectories=v.includeDirectories(); data.targets=v.targets(); - data.folderDeclarations=v.folderDeclarations(); data.properties=v.properties(); QList::iterator it=data.targets.begin(), itEnd=data.targets.end(); @@ -439,16 +438,17 @@ folder->setText(data.projectName); } - foreach (const QString& subf, data.subdirectories) + QStringList alreadyAdded; + foreach (const Subdirectory& subf, data.subdirectories) { - if(subf.isEmpty()) //This would not be necessary if we didn't parse the wrong lines + if(subf.name.isEmpty() || alreadyAdded.contains(subf.name)) //empty case would not be necessary if we didn't parse the wrong lines continue; - KUrl path(subf); + KUrl path(subf.name); if(path.isRelative()) { KUrl pp=KUrl(folder->url()); - pp.addPath(subf); + pp.addPath(subf.name); path=pp; } path.adjustPath(KUrl::AddTrailingSlash); @@ -456,11 +456,12 @@ kDebug(9042) << "Found subdir " << path << "which should be into" << subroot; if(subroot.isParentOf(path) || path.isParentOf(subroot)) { + alreadyAdded.append(subf.name); CMakeFolderItem* parent=folder; if(path.upUrl()!=folder->url()) parent=0; - CMakeFolderItem* a = new CMakeFolderItem( folder->project(), subf, parent ); + CMakeFolderItem* a = new CMakeFolderItem( folder->project(), subf.name, subf.build_dir, parent ); kDebug() << "folder: " << a << a->index(); a->setUrl(path); a->setDefinitions(data.definitions); @@ -472,7 +473,7 @@ } DescriptorAttatched* datt=static_cast(a); - datt->setDescriptor(data.folderDeclarations[subf]); + datt->setDescriptor(subf.desc); } } @@ -564,7 +565,6 @@ } new KDevelop::ProjectFileItem( item->project(), sourceFile, targetItem ); - item->project()->addToFileSet( KDevelop::IndexedString( sourceFile ) ); kDebug(9042) << "..........Adding:" << sourceFile; } } @@ -573,7 +573,7 @@ } QStringList entriesL = QDir( item->url().toLocalFile() ).entryList( QDir::AllEntries | QDir::NoDotAndDotDot ); - QSet entries = removeMatches(rxFileFilter, entriesL); + QSet entries = filterFiles(entriesL); foreach( const QString& entry, entries ) { if( item->hasFileOrFolder( entry ) ) @@ -590,24 +590,20 @@ if(!QFile::exists(cache.toLocalFile()) && !CMake::allBuildDirs(item->project()).contains(fileurl.toLocalFile(KUrl::RemoveTrailingSlash))) { - ProjectFolderItem* folderItem=m_pending.take(fileurl); - if(folderItem) - item->appendRow(folderItem); - else + if(m_pending.contains(fileurl)) + item->appendRow(m_pending.take(fileurl)); + else if(subroot.isParentOf(fileurl)) { + //if it's not subparent, we don't add it at all ProjectFolderItem* fitem=new ProjectFolderItem( item->project(), fileurl, item ); - - //if it's not subparent, we don't add it to the list so that it's added recursively - if(subroot.isParentOf(fileurl)) - folderList.append(fitem); - + folderList.append(fitem); } - } } - else + else if ( subroot.isParentOf(fileurl) ) { - addFile(fileurl, item); + //if it's not subparent, we don't add it at all + new KDevelop::ProjectFileItem( item->project(), fileurl, item ); } } @@ -629,16 +625,16 @@ folder->project()->reloadModel(); } else { CMakeFolderItem* former=item->formerParent(); - QStandardItem* parent=item->parent(); + QString buildDir=item->buildDir(); + ProjectFolderItem* parent=static_cast(item->parent()); KUrl url=item->url(); IProject* project=item->project(); parent->removeRow(item->row()); - CMakeFolderItem* fi=new CMakeFolderItem(project, url.toLocalFile(), 0); + CMakeFolderItem* fi=new CMakeFolderItem(project, url.toLocalFile(), buildDir, 0); fi->setFormerParent(former); - parent->appendRow(fi); - reimport(fi); + reimport(fi, parent->url()); } return true; } @@ -728,54 +724,70 @@ vm->remove("CMAKE_CURRENT_BINARY_DIR"); }*/ -//Copied from ImportJob -void CMakeManager::reimport(CMakeFolderItem* fi) +void CMakeManager::reimport(KDevelop::ProjectFolderItem* fi, const KUrl& parent) { - QQueue< QList > workQueue; - QList initial; - initial.append( fi ); - workQueue.enqueue( initial ); - - while( workQueue.count() > 0 ) - { - QList front = workQueue.dequeue(); - Q_FOREACH( KDevelop::ProjectFolderItem* _item, front ) - { - QList workingList = parse( _item ); - if( workingList.count() > 0 ) - workQueue.enqueue( workingList ); - } + Q_ASSERT(!isReloading(fi->project())); + + KJob *job=createImportJob(fi); + job->setProperty("parent", QUrl(parent)); + + QMutexLocker locker(&m_busyProjectsMutex); + m_busyProjects[job]=fi; + + connect( job, SIGNAL( result( KJob* ) ), this, SLOT( reimportDone( KJob* ) ) ); + ICore::self()->runController()->registerJob( job ); +} + +void CMakeManager::reimportDone(KJob* job) +{ + QMutexLocker locker(&m_busyProjectsMutex); + Q_ASSERT(m_busyProjects.contains(job)); + ProjectFolderItem* it=m_busyProjects[job]; + + QUrl parentUrl=job->property("parent").toUrl(); + + QList folders=it->project()->foldersForUrl(parentUrl); + + if(!folders.isEmpty()) //If it was not removed while reparsing + { + Q_ASSERT(folders.size()==1); + + folders.first()->appendRow(m_busyProjects[job]); + } + m_busyProjects.remove(job); +} + +bool CMakeManager::isReloading(IProject* p) +{ + QMutexLocker locker(&m_busyProjectsMutex); + if(!p->isReady()) + return true; + + foreach(KDevelop::ProjectFolderItem* it, m_busyProjects) { + if(it->project()==p) + return true; } + return false; } void CMakeManager::dirtyFile(const QString & dirty) { - KUrl dirtyFile(dirty); - KUrl dir(dirtyFile.upUrl()); + const KUrl dirtyFile(dirty); IProject* p=ICore::self()->projectController()->findProjectForUrl(dirtyFile); + if(p && isReloading(p)) + return; + if(p && dirtyFile.fileName() == "CMakeLists.txt") { + QMutexLocker locker(&m_reparsingMutex); //Maybe we should have a mutex per project + QList files=p->filesForUrl(dirtyFile); kDebug(9032) << dirtyFile << "is dirty" << files.count(); - // Debug output as apparently the Q_ASSERT after this is sometimes hitting - // See https://bugs.kde.org/show_bug.cgi?id=187335 - if( files.count() > 1 ) { - foreach(ProjectFileItem* item, files) { - kDebug() << "item:" << item << item->url() << item->text() << item->parent()->type() << item->parent()->text(); - } - } - Q_ASSERT(files.count()==1); - CMakeFolderItem *it=static_cast(files.first()->parent()); - - KDevelop::IProject* proj=it->project(); - KUrl projectBaseUrl=proj->projectItem()->url(); - projectBaseUrl.adjustPath(KUrl::AddTrailingSlash); - - kDebug(9032) << "reload:" << dir << projectBaseUrl << (dir!=projectBaseUrl); - if(dir!=projectBaseUrl) + CMakeFolderItem *folderItem=static_cast(files.first()->parent()); + if(folderItem!=p->projectItem()) { #if 0 KUrl relative=KUrl::relativeUrl(projectBaseUrl, dir); @@ -788,12 +800,11 @@ parseOnly(proj, current); } #endif - reload(it); + reload(folderItem); } else { - // qDebug() << "reloading"; - reload(proj->projectItem()); + reload(p->projectItem()); } } else if(dirty.endsWith(".cmake")) @@ -804,75 +815,71 @@ reload(project->projectItem()); } } - else if(QFileInfo(dirty).isDir()) + else if(p && QFileInfo(dirty).isDir()) { - foreach(KDevelop::IProject* project, m_watchers.uniqueKeys()) + QList folders=p->foldersForUrl(dirty); + Q_ASSERT(folders.isEmpty() || folders.size()==1); + + if(!folders.isEmpty()) { - QList folders=project->foldersForUrl(dirty); - Q_ASSERT(folders.isEmpty() || folders.size()==1); - QStringList entriesL = QDir(dirty).entryList( QDir::AllEntries | QDir::NoDotAndDotDot ); - QSet entries = removeMatches(rxFileFilter, entriesL); + QSet entries = filterFiles(entriesL); + + ProjectFolderItem* item=folders.first(); + KUrl folderurl = item->url(); - if(!folders.isEmpty()) + //We look for new elements + foreach( const QString& entry, entries ) { - ProjectFolderItem* item=folders.first(); - KUrl folderurl = item->url(); - - //We look for new elements - foreach( const QString& entry, entries ) - { - if( item->hasFileOrFolder( entry ) ) - continue; + if( item->hasFileOrFolder( entry ) ) + continue; - KUrl fileurl = folderurl; - fileurl.addPath( entry ); + KUrl fileurl = folderurl; + fileurl.addPath( entry ); - if( QFileInfo( fileurl.toLocalFile() ).isDir() ) - { - KUrl cache=fileurl; - cache.addPath("CMakeCache.txt"); - fileurl.adjustPath(KUrl::AddTrailingSlash); - if(!QFile::exists(cache.toLocalFile()) - && !CMake::allBuildDirs(item->project()).contains(fileurl.toLocalFile(KUrl::RemoveTrailingSlash))) - { - new ProjectFolderItem( item->project(), fileurl, item ); - } - } - else + if( QFileInfo( fileurl.toLocalFile() ).isDir() ) + { + KUrl cache=fileurl; + cache.addPath("CMakeCache.txt"); + fileurl.adjustPath(KUrl::AddTrailingSlash); + if(!QFile::exists(cache.toLocalFile()) + && !CMake::allBuildDirs(item->project()).contains(fileurl.toLocalFile(KUrl::RemoveTrailingSlash))) { - addFile(fileurl, item); + new ProjectFolderItem( item->project(), fileurl, item ); } } + else + { + new KDevelop::ProjectFileItem( item->project(), fileurl, item ); + } + } + + //We look for removed elements + for(int i=0; irowCount(); i++) + { + QStandardItem* it=item->child(i, 0); + if(it->type()==ProjectBaseItem::Target) + continue; - //We look for removed elements - for(int i=0; irowCount(); i++) + QString current=it->text(); + if(!entries.contains(current)) { - QStandardItem* it=item->child(i, 0); - if(it->type()==ProjectBaseItem::Target) - continue; - - QString current=it->text(); - if(!entries.contains(current)) + KUrl fileurl = folderurl; + fileurl.addPath(current); + + switch(it->type()) { - KUrl fileurl = folderurl; - fileurl.addPath(current); - - switch(it->type()) - { - case ProjectBaseItem::File: - foreach(const ProjectFileItem* removed, p->filesForUrl(fileurl)) - removed->parent()->removeRow(removed->row()); - p->removeFromFileSet(IndexedString(fileurl)); - break; - case ProjectBaseItem::Folder: - case ProjectBaseItem::BuildFolder: - foreach(const ProjectFolderItem* removed, p->foldersForUrl(fileurl)) - removed->parent()->removeRow(removed->row()); - break; - default: - break; - } + case ProjectBaseItem::File: + foreach(const ProjectFileItem* removed, p->filesForUrl(fileurl)) + removed->parent()->removeRow(removed->row()); + break; + case ProjectBaseItem::Folder: + case ProjectBaseItem::BuildFolder: + foreach(const ProjectFolderItem* removed, p->foldersForUrl(fileurl)) + removed->parent()->removeRow(removed->row()); + break; + default: + break; } } } @@ -980,6 +987,9 @@ KDevelop::ProjectFolderItem* CMakeManager::addFolder( const KUrl& folder, KDevelop::ProjectFolderItem* parent) { + if ( !KDevelop::createFolder(folder) ) { + return 0; + } Q_ASSERT(QFile::exists(folder.toLocalFile())); KUrl lists=parent->url(); lists.addPath("CMakeLists.txt"); @@ -993,7 +1003,7 @@ ApplyChangesWidget e; e.setCaption(relative); e.setInformation(i18n("Create a folder called '%1'.", relative)); - e.addDocuments(IndexedString(lists), IndexedString(lists)); + e.addDocuments(IndexedString(lists)); e.document()->insertLine(e.document()->lines(), QString("add_subdirectory(%1)").arg(relative)); @@ -1022,6 +1032,9 @@ bool CMakeManager::removeFolder( KDevelop::ProjectFolderItem* it) { + if ( !KDevelop::removeUrl(it->project(), it->url(), true) ) { + return false; + } KUrl lists=it->url().upUrl(); lists.addPath("CMakeLists.txt"); if(it->type()!=KDevelop::ProjectBaseItem::BuildFolder) @@ -1033,7 +1046,7 @@ ApplyChangesWidget e; e.setCaption(it->text()); e.setInformation(i18n("Remove a folder called '%1'.", it->text())); - e.addDocuments(IndexedString(lists), IndexedString(lists)); + e.addDocuments(IndexedString(lists)); CMakeFolderItem* cmit=static_cast(it); KTextEditor::Range r=cmit->descriptor().range().textRange(); @@ -1087,15 +1100,11 @@ { r.start=d->range().end; - for(int l=r.start.line; ;l++) + for(int lineNum = r.start.line; lineNum <= r.end.line; lineNum++) { - QString line=doc->line(l); - int c=line.indexOf(')'); - if(c>=0) { - r.end=SimpleCursor(l,c); - break; - } else if(line.isEmpty()) { - r=SimpleRange(); + int endParenIndex = doc->line(lineNum).indexOf(')'); + if(endParenIndex >= 0) { + r.end = SimpleCursor(lineNum, endParenIndex); break; } } @@ -1111,23 +1120,34 @@ bool CMakeManager::removeFile( KDevelop::ProjectFileItem* it) { + if ( !KDevelop::removeUrl(it->project(), it->url(), false) ) { + return false; + } + bool ret=true; - it->project()->removeFromFileSet(KDevelop::IndexedString(it->url())); - QList files=it->project()->filesForUrl(it->url()); - QList targets; + QMap targets; //We loop through all the files with the same url foreach(ProjectFileItem* file, files) { ProjectTargetItem* target=static_cast(file->parent())->target(); if(target) { - bool res = removeFileFromTarget(file, target); - ret = ret && res; + targets.insert(target, file); } else file->parent()->removeRow(file->row()); } + //only remove after we iterated over all files, otherwise the items + //might get deleted due to cmake files gettin reparsed + //TODO: this still leads to crashes if more than one item in a single target gets removed. + QMap< ProjectTargetItem*, ProjectFileItem* >::const_iterator it2 = targets.constBegin(); + while (it2 != targets.constEnd()) { + bool res = removeFileFromTarget(it2.value(), it2.key()); + ret = ret && res; + ++it2; + } + return ret; } @@ -1148,16 +1168,14 @@ ApplyChangesWidget e; e.setCaption(it->text()); e.setInformation(i18n("Remove a file called '%1'.", it->text())); - e.addDocuments(IndexedString(lists), IndexedString(lists)); + e.addDocuments(IndexedString(lists)); bool ret=followUses(e.document(), r, ' '+it->text(), lists, false, QString()); if(ret) { if(e.exec()) { - bool saved=e.applyAllChanges(); - if(saved) - it->project()->removeFromFileSet(IndexedString(it->url())); + e.applyAllChanges(); } } @@ -1167,9 +1185,11 @@ //This is being called from ::parse() so we shouldn't make it block the ui KDevelop::ProjectFileItem* CMakeManager::addFile( const KUrl& url, KDevelop::ProjectFolderItem* parent) { - ProjectFileItem* it = new KDevelop::ProjectFileItem( parent->project(), url, parent ); - parent->project()->addToFileSet( KDevelop::IndexedString( url ) ); - return it; + KDevelop::ProjectFileItem* created = 0; + if ( KDevelop::createFile(url) ) { + created = new KDevelop::ProjectFileItem( parent->project(), url, parent ); + } + return created; } bool CMakeManager::addFileToTarget( KDevelop::ProjectFileItem* it, KDevelop::ProjectTargetItem* target) @@ -1198,7 +1218,7 @@ ApplyChangesWidget e; e.setCaption(it->fileName()); e.setInformation(i18n("Add a file called '%1' to target '%2'.", it->fileName(), target->text())); - e.addDocuments(IndexedString(lists), IndexedString(lists)); + e.addDocuments(IndexedString(lists)); QString filename=KUrl::relativeUrl(folder->url(), it->url()); if(filename.startsWith("./")) @@ -1291,21 +1311,11 @@ ProjectTargetItem* t=static_cast(file->parent())->target(); if(t) targets+=t; - else - file->setUrl(newUrl); } if(targets.isEmpty()) { - KIO::CopyJob* job=KIO::move(it->url(), newUrl); - kDebug() << "rename" << it->url() << "->" << newUrl; - bool ret=KIO::NetAccess::synchronousRun(job, 0); - - if(ret) { - it->project()->removeFromFileSet(IndexedString(it->url())); - it->project()->addToFileSet(IndexedString(newUrl)); - } - return ret; + return KDevelop::renameUrl(it->project(), it->url(), newUrl); } ApplyChangesWidget e; @@ -1323,7 +1333,7 @@ KUrl lists=folder->url(); lists.addPath("CMakeLists.txt"); - e.addDocuments(IndexedString(lists), IndexedString(lists)); + e.addDocuments(IndexedString(lists)); QString newName=KUrl::relativePath(it->url().upUrl().path(), newUrl.path()); if(newName.startsWith("./")) @@ -1334,14 +1344,9 @@ if(ret && e.exec()) { - it->project()->removeFromFileSet(IndexedString(it->url())); - KIO::CopyJob* job=KIO::move(it->url(), newUrl); - ret=e.applyAllChanges(); - + bool ret=e.applyAllChanges(); if(ret) - ret=KIO::NetAccess::synchronousRun(job, 0); - else - delete job; + ret=KDevelop::renameUrl(it->project(), it->url(), newUrl); } return ret; @@ -1349,16 +1354,11 @@ bool CMakeManager::renameFolder(ProjectFolderItem* _it, const KUrl& newUrl) { - CMakeFolderItem* it=static_cast(_it); - if(it->type()!=KDevelop::ProjectBaseItem::BuildFolder) + if(_it->type()!=KDevelop::ProjectBaseItem::BuildFolder) { - KIO::CopyJob* job=KIO::move(it->url(), newUrl); - bool ret=KIO::NetAccess::synchronousRun(job, 0); - if(ret) { - it->setUrl(newUrl); - } - return ret; + return KDevelop::renameUrl(_it->project(), _it->url(), newUrl); } + CMakeFolderItem* it=static_cast(_it); KUrl lists=it->formerParent()->url(); lists.addPath("CMakeLists.txt"); QString newName=KUrl::relativePath(lists.upUrl().path(), newUrl.path()); @@ -1368,7 +1368,7 @@ ApplyChangesWidget e; e.setCaption(it->text()); e.setInformation(i18n("Rename a folder called '%1'.", it->text())); - e.addDocuments(IndexedString(lists), IndexedString(lists)); + e.addDocuments(IndexedString(lists)); CMakeFolderItem* cmit=static_cast(it); KTextEditor::Range r=cmit->descriptor().argRange().textRange(); @@ -1380,15 +1380,20 @@ bool ret=e.exec(); if(ret) { - KIO::CopyJob* job=KIO::move(it->url(), newUrl); ret=e.applyAllChanges(); - if(ret) - ret=KIO::NetAccess::synchronousRun(job, 0); - else - delete job; + ret=KDevelop::renameUrl(it->project(), it->url(), newUrl); } return ret; } +void CMakeManager::projectClosing(IProject* p) +{ + m_modulePathPerProject.remove(p); + m_varsPerProject.remove(p); + m_macrosPerProject.remove(p); + m_watchers.remove(p); + m_projectCache.remove(p); +} + #include "cmakemanager.moc" diff -Nru kdevelop-3.9.98/projectmanagers/cmake/cmakemanager.h kdevelop-4.0.1/projectmanagers/cmake/cmakemanager.h --- kdevelop-3.9.98/projectmanagers/cmake/cmakemanager.h 2010-02-02 00:18:30.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/cmakemanager.h 2010-07-17 20:08:19.000000000 +0100 @@ -37,6 +37,7 @@ #include "icmakemanager.h" #include "cmakeprojectvisitor.h" +class QStandardItem; class QDir; class QObject; class CMakeHighlighting; @@ -114,16 +115,20 @@ virtual const KDevelop::ICodeHighlighting* codeHighlighting() const; virtual QWidget* specialLanguageObjectNavigationWidget(const KUrl& url, const KDevelop::SimpleCursor& position); -public slots: +private slots: void dirtyFile(const QString& file); void jumpToDeclaration(); + void projectClosing(KDevelop::IProject*); + void reimportDone(KJob* job); private: - void reimport(CMakeFolderItem*); + void reimport(KDevelop::ProjectFolderItem* fi, const KUrl& parent); CacheValues readCache(const KUrl &path) const; - + bool isReloading(KDevelop::IProject* p); + QMutex m_reparsingMutex; + QMutex m_busyProjectsMutex; KDevelop::ReferencedTopDUContext initializeProject(KDevelop::IProject* project, const KUrl& baseUrl); KDevelop::ReferencedTopDUContext includeScript(const QString& File, KDevelop::IProject * project, @@ -136,7 +141,9 @@ QMap m_projectCache; QMap m_pending; - CMakeHighlighting *m_highlight; + QMap m_busyProjects; + + KDevelop::ICodeHighlighting *m_highlight; QList m_clickedItems; }; diff -Nru kdevelop-3.9.98/projectmanagers/cmake/cmakemodelitems.cpp kdevelop-4.0.1/projectmanagers/cmake/cmakemodelitems.cpp --- kdevelop-3.9.98/projectmanagers/cmake/cmakemodelitems.cpp 2009-09-11 17:05:40.000000000 +0100 +++ kdevelop-4.0.1/projectmanagers/cmake/cmakemodelitems.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -27,9 +27,9 @@ #include #include -CMakeFolderItem::CMakeFolderItem( KDevelop::IProject *project, const QString &name, +CMakeFolderItem::CMakeFolderItem( KDevelop::IProject *project, const QString &name, const QString& build, CMakeFolderItem* item) - : KDevelop::ProjectBuildFolderItem( project, name, item ), m_formerParent(item) + : KDevelop::ProjectBuildFolderItem( project, name, item ), m_formerParent(item), m_buildDir(build) {} QStringList CMakeFolderItem::includeDirectories() const diff -Nru kdevelop-3.9.98/projectmanagers/cmake/cmakemodelitems.h kdevelop-4.0.1/projectmanagers/cmake/cmakemodelitems.h --- kdevelop-3.9.98/projectmanagers/cmake/cmakemodelitems.h 2009-09-11 17:05:40.000000000 +0100 +++ kdevelop-4.0.1/projectmanagers/cmake/cmakemodelitems.h 2010-07-17 20:08:19.000000000 +0100 @@ -65,7 +65,7 @@ class CMakeFolderItem : public KDevelop::ProjectBuildFolderItem, public DescriptorAttatched { public: - CMakeFolderItem( KDevelop::IProject *project, const QString &name, CMakeFolderItem* parent); + CMakeFolderItem( KDevelop::IProject *project, const QString &name, const QString& builddir, CMakeFolderItem* parent); virtual ~CMakeFolderItem() {} void setIncludeDirectories(const QStringList &l) { m_includeList=l; } QStringList includeDirectories() const; @@ -80,11 +80,14 @@ CMakeFolderItem* formerParent() const { return m_formerParent; } void setFormerParent(CMakeFolderItem* parent) { m_formerParent=parent; } + + QString buildDir() const { return m_buildDir; } private: KDevelop::ReferencedTopDUContext m_topcontext; QStringList m_includeList; CMakeDefinitions m_defines; CMakeFolderItem* m_formerParent; + QString m_buildDir; }; class CMakeExecutableTargetItem diff -Nru kdevelop-3.9.98/projectmanagers/cmake/cmakeprojectdata.h kdevelop-4.0.1/projectmanagers/cmake/cmakeprojectdata.h --- kdevelop-3.9.98/projectmanagers/cmake/cmakeprojectdata.h 2009-08-30 21:22:57.000000000 +0100 +++ kdevelop-4.0.1/projectmanagers/cmake/cmakeprojectdata.h 2010-07-17 20:08:19.000000000 +0100 @@ -7,11 +7,10 @@ struct CMakeProjectData { QString projectName; - QStringList subdirectories; + QList subdirectories; QStringList includeDirectories; CMakeDefinitions definitions; QList targets; - QMap folderDeclarations; VariableMap vm; MacroMap mm; diff -Nru kdevelop-3.9.98/projectmanagers/cmake/icons/CMakeLists.txt kdevelop-4.0.1/projectmanagers/cmake/icons/CMakeLists.txt --- kdevelop-3.9.98/projectmanagers/cmake/icons/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/projectmanagers/cmake/icons/CMakeLists.txt 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,2 @@ + +kde4_install_icons(${ICON_INSTALL_DIR}) Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/projectmanagers/cmake/icons/hi128-app-cmake.png and /tmp/FkawBFYozK/kdevelop-4.0.1/projectmanagers/cmake/icons/hi128-app-cmake.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/projectmanagers/cmake/icons/hi16-app-cmake.png and /tmp/FkawBFYozK/kdevelop-4.0.1/projectmanagers/cmake/icons/hi16-app-cmake.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/projectmanagers/cmake/icons/hi32-app-cmake.png and /tmp/FkawBFYozK/kdevelop-4.0.1/projectmanagers/cmake/icons/hi32-app-cmake.png differ Binary files /tmp/UQprE2BskH/kdevelop-3.9.98/projectmanagers/cmake/icons/hi64-app-cmake.png and /tmp/FkawBFYozK/kdevelop-4.0.1/projectmanagers/cmake/icons/hi64-app-cmake.png differ diff -Nru kdevelop-3.9.98/projectmanagers/cmake/kcm_kdevcmake_settings.desktop kdevelop-4.0.1/projectmanagers/cmake/kcm_kdevcmake_settings.desktop --- kdevelop-3.9.98/projectmanagers/cmake/kcm_kdevcmake_settings.desktop 2010-01-10 10:53:38.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/kcm_kdevcmake_settings.desktop 2010-07-17 20:08:19.000000000 +0100 @@ -1,5 +1,5 @@ [Desktop Entry] -Icon=kdevelop +Icon=cmake Type=Service ServiceTypes=KCModule @@ -15,6 +15,7 @@ Name[ca]=CMake Name[ca@valencia]=CMake Name[cs]=CMake +Name[da]=CMake Name[de]=CMake Name[el]=CMake Name[en_GB]=CMake @@ -41,6 +42,7 @@ Name[pt]=CMake Name[pt_BR]=CMake Name[ru]=CMake +Name[sl]=CMake Name[sv]=CMake Name[tr]=CMake Name[uk]=CMake @@ -51,6 +53,7 @@ Comment[ca]=Configura els arranjaments de CMake Comment[ca@valencia]=Configura els arranjaments de CMake Comment[cs]=Zvolit nastavení CMake +Comment[da]=Indstil CMake Comment[de]=CMake-Einstellungen Comment[el]=Ρύθμιση επιλογών CMake Comment[en_GB]=Configure CMake settings @@ -75,6 +78,7 @@ Comment[pt]=Configurar as opções do CMake Comment[pt_BR]=Configurar as opções do CMake Comment[ru]=Параметры сборки с помощью CMake +Comment[sl]=Nastavite možnosti za CMake Comment[sv]=Anpassa inställningar för CMake Comment[tr]=CMake ayarlarını yapılandır Comment[uk]=Налаштування параметрів CMake diff -Nru kdevelop-3.9.98/projectmanagers/cmake/kdevcmakedocumentation.desktop kdevelop-4.0.1/projectmanagers/cmake/kdevcmakedocumentation.desktop --- kdevelop-3.9.98/projectmanagers/cmake/kdevcmakedocumentation.desktop 2010-02-06 09:59:13.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/kdevcmakedocumentation.desktop 2010-07-17 20:08:19.000000000 +0100 @@ -3,15 +3,22 @@ Name=CMake Documentation Name[ca]=Documentació del CMake Name[ca@valencia]=Documentació del CMake +Name[cs]=Dokumentace CMake +Name[da]=CMake-dokumentation +Name[de]=CMake-Dokumentation Name[en_GB]=CMake Documentation Name[es]=Documentación de CMake Name[et]=CMake'i dokumentatsioon Name[fr]=Documentation de CMake +Name[it]=Documentazione CMake +Name[ja]=CMake ドキュメンテーション Name[nb]=CMake-dokumentasjon Name[nds]=CMake-Dokmentatschoon Name[nl]=CMake-documentatie +Name[pl]=Dokumentacja CMake Name[pt]=Documentação do CMake Name[pt_BR]=Documentação do CMake +Name[sl]=Dokumentacija za CMake Name[sv]=CMake-dokumentation Name[uk]=Документація з CMake Name[x-test]=xxCMake Documentationxx @@ -21,6 +28,7 @@ Comment[ca]=Permet a KDevelop proporcionar informació de CMake Comment[ca@valencia]=Permet a KDevelop proporcionar informació de CMake Comment[cs]=Umožňuje KDevelop poskytovat dokumentaci CMake +Comment[da]=Lader KDevelop tilbyde CMake-dokumentation Comment[de]=Ermöglicht das Bereitstellen von Dokumentation für CMake Comment[en_GB]=Allows KDevelop to provide CMake documentation Comment[es]=Permite que KDevelop proporcione documentación de CMake @@ -28,25 +36,28 @@ Comment[fi]=Sallii KDevelop-ohjelman tarjota CMake-dokumentaation Comment[fr]=Permet à KDevelop de fournir la documentation de CMake Comment[gl]=Permítelle a KDevelop fornecer documentación de CMake +Comment[it]=Permette a KDevelop di fornire la documentazione a CMake Comment[nb]=Gjør at KDevelop kan lage CMake-dokumentasjon Comment[nds]=Mit KDevelop Dokmentatschoon för CMake praatstellen Comment[nl]=Staat KDevelop toe om CMake-documentatie te leveren +Comment[pl]=Pozwala na dostęp z KDevelopa do dokumentacji CMake Comment[pt]=Permite ao KDevelop fornecer a documentação do CMake Comment[pt_BR]=Permite ao KDevelop fornecer documentação do CMake +Comment[sl]=Omogoča, da KDevelop prikaže dokumentacijo za CMake Comment[sv]=Låter KDevelop tillhandahålla CMake-dokumentation Comment[tr]=KDevelop uygulamasına CMake belgelendirmesi sağlar Comment[uk]=Надає змогу KDevelop показувати документацію CMake Comment[x-test]=xxAllows KDevelop to provide CMake documentationxx Comment[zh_CN]=允许 KDevelop 提供 CMake 文档 Comment[zh_TW]=允許 KDevelop 提供 CMake 文件 -Icon=gear +Icon=cmake ServiceTypes=KDevelop/Plugin X-KDE-Library=kdevcmakedocumentation X-KDE-PluginInfo-Author=Aleix Pol X-KDE-PluginInfo-Email=aleixpol@kde.org X-KDE-PluginInfo-Name=KDevCMakeDocumentation X-KDE-PluginInfo-License=GPL -X-KDevelop-Version=8 +X-KDevelop-Version=9 X-KDevelop-Category=Global X-KDevelop-Language=CMake X-KDevelop-Interfaces=org.kdevelop.IDocumentationProvider,org.kdevelop.ICMakeDocumentation diff -Nru kdevelop-3.9.98/projectmanagers/cmake/kdevcmakemanager.desktop kdevelop-4.0.1/projectmanagers/cmake/kdevcmakemanager.desktop --- kdevelop-3.9.98/projectmanagers/cmake/kdevcmakemanager.desktop 2010-01-19 12:39:48.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/kdevcmakemanager.desktop 2010-07-17 20:08:19.000000000 +0100 @@ -4,9 +4,10 @@ Name[ca]=Gestor de projectes CMake Name[ca@valencia]=Gestor de projectes CMake Name[cs]=Správce projektů CMake +Name[da]=CMake-projekthåndtering Name[de]=CMake-Projektverwaltung Name[en_GB]=CMake Project Manager -Name[es]=Gestor de proyecto CMake +Name[es]=Gestor de proyectos CMake Name[et]=CMake'i projektihaldur Name[fi]=CMake-projektihallinta Name[fr]=Gestionnaire de projets CMake @@ -16,9 +17,11 @@ Name[nb]=CMake prosjekstyrer Name[nds]=CMake-Projektpleger Name[nl]=CMake-projectbeheerder +Name[pl]=Menadżer projektów CMake Name[pt]=Gestor de Projectos do CMake Name[pt_BR]=Gerenciador de Projeto CMake Name[ru]=Работа с проектами CMake +Name[sl]=Upravljalnik projekta CMake Name[sv]=CMake-projekthantering Name[tr]=CMake Proje Yönetici Name[uk]=Керування проектами CMake @@ -28,6 +31,7 @@ Comment=Allows KDevelop to manager CMake based projects Comment[ca]=Permet a KDevelop gestionar projectes basats en CMake Comment[ca@valencia]=Permet a KDevelop gestionar projectes basats en CMake +Comment[da]=Tillader KDevelop at håndtere CMake baserede projekter Comment[de]=Erlaubt das Erstellen CMake-basierter Projekte mit KDevelop Comment[el]=Επιτρέπει στο KDevelop το χειρισμό έργων με βάση το CMake Comment[en_GB]=Allows KDevelop to manager CMake based projects @@ -51,20 +55,21 @@ Comment[pt]=Permite ao KDevelop gerir os projectos baseados no CMake Comment[pt_BR]=Permite ao KDevelop gerenciar projetos baseados em CMake Comment[ru]=Позволяет управлять CMake-проектами +Comment[sl]=Omogoča, da KDevelop upravlja s projekti temelječimi na CMake Comment[sv]=Låter KDevelop hantera CMake-baserade projekt Comment[tr]=KDevelop uygulamasının CMake temelli projeleri yönetmesine izin verir Comment[uk]=Дозволяє KDevelop керувати заснованими на CMake проектами Comment[x-test]=xxAllows KDevelop to manager CMake based projectsxx Comment[zh_CN]=允许 KDevelop 管理基于 CMake 的工程 Comment[zh_TW]=允許 KDevelop 管理 CMake-based 專案 -Icon=gear +Icon=cmake ServiceTypes=KDevelop/Plugin X-KDE-Library=kdevcmakemanager X-KDE-PluginInfo-Author=Matt Rogers X-KDE-PluginInfo-Email=mattr@kde.org X-KDE-PluginInfo-Name=KDevCMakeManager X-KDE-PluginInfo-License=GPL -X-KDevelop-Version=8 +X-KDevelop-Version=9 X-KDevelop-Category=Project X-KDevelop-Language=CMake X-KDevelop-Interfaces=org.kdevelop.IBuildSystemManager,org.kdevelop.IProjectFileManager,ILanguageSupport @@ -72,3 +77,4 @@ X-KDevelop-Mode=GUI X-KDevelop-ProjectFilesFilter=CMakeLists.txt X-KDevelop-ProjectFilesFilterDescription=CMake Project Files +X-KDevelop-LoadMode=AlwaysOn diff -Nru kdevelop-3.9.98/projectmanagers/cmake/parser/cmakeast.cpp kdevelop-4.0.1/projectmanagers/cmake/parser/cmakeast.cpp --- kdevelop-3.9.98/projectmanagers/cmake/parser/cmakeast.cpp 2010-01-23 00:56:58.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/parser/cmakeast.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -2576,7 +2576,8 @@ { } - +/// @todo Parse the UNIX_COMMAND and WINDOWS_COMMAND keywords +/// introduced in CMake 2.8. bool SeparateArgumentsAst::parseFunctionInfo( const CMakeFunctionDesc& func ) { if ( func.name.toLower() != "separate_arguments" || func.arguments.count()!=1) @@ -2656,34 +2657,23 @@ { if(func.name.toLower()!="set_directory_properties" || func.arguments.count()<3) return false; - bool props=false; + if(func.arguments.first().value!="PROPERTIES") + return false; - QList::const_iterator it=func.arguments.begin(); + QList::const_iterator it=func.arguments.begin()+1; QList::const_iterator itEnd=func.arguments.end(); - QString prop; + for(; it!=itEnd; ++it) { - if(it->value=="PROPERTIES") - { - props=true; - continue; - } - if(!props) - { + QString prop=it->value; + ++it; + + if(it==itEnd) return false; - } - else - { - if(prop.isEmpty()) - prop=it->value; - else - { - m_properties.append(PropPair(prop, it->value)); - prop.clear(); - } - } + + m_properties.append(PropPair(prop, it->value)); } - return prop.isEmpty(); + return !m_properties.isEmpty(); } SetSourceFilesPropsAst::SetSourceFilesPropsAst() diff -Nru kdevelop-3.9.98/projectmanagers/cmake/parser/cmakeastvisitor.h kdevelop-4.0.1/projectmanagers/cmake/parser/cmakeastvisitor.h --- kdevelop-3.9.98/projectmanagers/cmake/parser/cmakeastvisitor.h 2009-11-04 21:16:10.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/parser/cmakeastvisitor.h 2010-07-17 20:08:19.000000000 +0100 @@ -22,6 +22,7 @@ #ifndef CMAKEASTVISITOR_H #define CMAKEASTVISITOR_H +class SetDirectoryPropsAst; class AddDefinitionsAst; class AddDependenciesAst; class AddExecutableAst; @@ -115,6 +116,7 @@ virtual int visit( const RemoveDefinitionsAst * ) = 0; virtual int visit( const SetAst * ) = 0; virtual int visit( const SetTargetPropsAst * ) = 0; + virtual int visit( const SetDirectoryPropsAst * ) = 0; virtual int visit( const SetPropertyAst * ) = 0; virtual int visit( const StringAst * ) = 0; virtual int visit( const SubdirsAst * ) = 0; diff -Nru kdevelop-3.9.98/projectmanagers/cmake/parser/cmakecondition.cpp kdevelop-4.0.1/projectmanagers/cmake/parser/cmakecondition.cpp --- kdevelop-3.9.98/projectmanagers/cmake/parser/cmakecondition.cpp 2009-12-26 02:22:08.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/parser/cmakecondition.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -43,6 +43,7 @@ ret[CMakeCondition::COMMAND]=3; ret[CMakeCondition::EXISTS]=3; ret[CMakeCondition::IS_DIRECTORY]=3; + ret[CMakeCondition::IS_ABSOLUTE]=3; ret[CMakeCondition::LPR]=-1; ret[CMakeCondition::RPR]=-1; return ret; @@ -58,6 +59,7 @@ ret["EXISTS"]=CMakeCondition::EXISTS; ret["IS_NEWER_THAN"]=CMakeCondition::IS_NEWER_THAN; ret["IS_DIRECTORY"]=CMakeCondition::IS_DIRECTORY; + ret["IS_ABSOLUTE"]=CMakeCondition::IS_ABSOLUTE; ret["MATCHES"]=CMakeCondition::MATCHES; ret["LESS"]=CMakeCondition::LESS; ret["GREATER"]=CMakeCondition::GREATER; @@ -91,6 +93,7 @@ { // qDebug() << "+++++++ isTrue: " << varName; QString val = *it; + bool ret; if(m_vars->contains(val)) { @@ -100,10 +103,12 @@ // kDebug(9042) << "Checking" << varName << "is true ? >>>" << m_vars->value(varName) << "<<<"; val = valu.join(";").toUpper(); - return !s_falseDefinitions.contains(val) && !val.endsWith("_NOTFOUND"); + ret=!s_falseDefinitions.contains(val) && !val.endsWith("_NOTFOUND"); } else - return val=="1"; //wtf + ret=val=="1"; //wtf + + return ret; } QStringList::const_iterator CMakeCondition::prevOperator(QStringList::const_iterator it, QStringList::const_iterator itStop) const @@ -173,6 +178,12 @@ last = f.isDir(); itEnd=it2; } break; + case IS_ABSOLUTE: { + CHECK_NEXT(it2); + QFileInfo f(*(it2+1)); + last = f.isAbsolute(); + itEnd=it2; + } break; case DEFINED: CHECK_NEXT(it2); last=m_vars->contains(*(it2+1)); @@ -180,10 +191,10 @@ break; case AND: // qDebug() << "AND" << last; - return evaluateCondition(itBegin, it2) && last; + return evaluateCondition(itBegin, it2-1) && last; case OR: // qDebug() << "OR" << last; - return evaluateCondition(itBegin, it2) || last; + return evaluateCondition(itBegin, it2-1) || last; case MATCHES: { CHECK_PREV(it2); CHECK_NEXT(it2); @@ -296,6 +307,7 @@ break; } } + return last; } diff -Nru kdevelop-3.9.98/projectmanagers/cmake/parser/cmakecondition.h kdevelop-4.0.1/projectmanagers/cmake/parser/cmakecondition.h --- kdevelop-3.9.98/projectmanagers/cmake/parser/cmakecondition.h 2009-11-04 22:40:57.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/parser/cmakecondition.h 2010-07-17 20:08:19.000000000 +0100 @@ -30,7 +30,7 @@ bool condition(const QStringList &expression); QList variableArguments() const { return m_argUses; } - enum conditionToken { None=0, variable, NOT, AND, OR, COMMAND, EXISTS, IS_NEWER_THAN, IS_DIRECTORY, MATCHES, + enum conditionToken { None=0, variable, NOT, AND, OR, COMMAND, EXISTS, IS_NEWER_THAN, IS_DIRECTORY, IS_ABSOLUTE, MATCHES, LESS, GREATER, EQUAL, STRLESS, STRGREATER, STREQUAL, DEFINED, LPR, RPR, Last }; private: static conditionToken typeName(const QString& name); diff -Nru kdevelop-3.9.98/projectmanagers/cmake/parser/cmakelistsparser.cpp kdevelop-4.0.1/projectmanagers/cmake/parser/cmakelistsparser.cpp --- kdevelop-3.9.98/projectmanagers/cmake/parser/cmakelistsparser.cpp 2009-12-20 23:54:05.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/parser/cmakelistsparser.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -50,7 +50,7 @@ QString newValue; int last=0; - for(int i=firstScape; i=0; i=value.indexOf(scapingChar, i+2)) + for(int i=firstScape; i=0; i=value.indexOf(scapingChar, i+2)) { newValue+=value.mid(last, i-last); QChar current=value[i+1]; @@ -277,6 +277,7 @@ return CMakeFileContent(); if ( !cmListFileLexer_SetFileName( lexer, qPrintable( fileName ) ) ) { kDebug(9042) << "cmake read error. could not read " << fileName; + cmListFileLexer_Delete(lexer); return CMakeFileContent(); } @@ -313,6 +314,7 @@ } } } + cmListFileLexer_Delete(lexer); return ret; } diff -Nru kdevelop-3.9.98/projectmanagers/cmake/parser/cmakelistsparser.h kdevelop-4.0.1/projectmanagers/cmake/parser/cmakelistsparser.h --- kdevelop-3.9.98/projectmanagers/cmake/parser/cmakelistsparser.h 2009-12-20 23:54:05.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/parser/cmakelistsparser.h 2010-07-17 20:08:19.000000000 +0100 @@ -94,8 +94,16 @@ { return KDevelop::SimpleRange(line-1, column-1, endLine-1, endColumn); } KDevelop::SimpleRange argRange() const - { return KDevelop::SimpleRange(arguments.first().range().start, - arguments.last().range().end); } + { + if( !arguments.isEmpty() ) + { + return KDevelop::SimpleRange(arguments.first().range().start, + arguments.last().range().end); + } else + { + return KDevelop::SimpleRange( line-1, column-1, endLine-1, endColumn); + } + } bool operator==(const CMakeFunctionDesc &other) const; void addArguments( const QStringList& ); diff -Nru kdevelop-3.9.98/projectmanagers/cmake/parser/cmakeprojectvisitor.cpp kdevelop-4.0.1/projectmanagers/cmake/parser/cmakeprojectvisitor.cpp --- kdevelop-3.9.98/projectmanagers/cmake/parser/cmakeprojectvisitor.cpp 2010-01-28 19:04:16.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/parser/cmakeprojectvisitor.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -84,7 +84,7 @@ bool gotDollar=false; for(int i=exp.indexOf('$'); iproperties()) { - m_props[TargetProperty][tname][t.first] += t.second; + m_props[TargetProperty][tname][t.first] = t.second.split(';'); } } return 1; } +int CMakeProjectVisitor::visit( const SetDirectoryPropsAst * dirProps) +{ + QString dir=m_vars->value("CMAKE_CURRENT_SOURCE_DIR").join(QString()); + kDebug(9042) << "setting directory props for " << dirProps->properties() << dir; + foreach(const SetDirectoryPropsAst::PropPair& t, dirProps->properties()) + { + m_props[DirectoryProperty][dir][t.first] = t.second.split(';'); + } + return 1; +} + int CMakeProjectVisitor::visit( const GetTargetPropAst * prop) { kDebug(9042) << "getting target " << prop->target() << " prop " << prop->property() << prop->variableName(); @@ -290,9 +301,9 @@ // kDebug(9032) << "unexistent property" << prop->property() << "on" << prop->target(); } // kDebug(9042) << "current properties" << m_props[TargetProperty][prop->target()].keys(); -// kDebug(9042) << "goooooot" << m_props[TargetProperty][prop->target()][prop->property()]; m_vars->insert(prop->variableName(), m_props[TargetProperty][prop->target()][prop->property()]); +// kDebug(9042) << "goooooot" << m_vars->value(prop->variableName()); return 1; } @@ -301,16 +312,30 @@ kDebug(9042) << "adding subdirectory" << subd->sourceDir(); VisitorState p=stackTop(); - m_folderDesc[subd->sourceDir()]=p.code->at(p.line); - m_subdirectories += subd->sourceDir(); + Subdirectory d; + d.name=subd->sourceDir(); + d.build_dir=subd->binaryDir().isEmpty() ? d.name : subd->binaryDir(); + d.desc=p.code->at(p.line); + + m_subdirectories += d; return 1; } int CMakeProjectVisitor::visit(const SubdirsAst *sdirs) { kDebug(9042) << "adding subdirectories" << sdirs->directories() << sdirs->exluceFromAll(); - m_subdirectories += sdirs->directories() << sdirs->exluceFromAll(); + VisitorState p=stackTop(); + CMakeFunctionDesc desc=p.code->at(p.line); + + foreach(const QString& dir, sdirs->directories() + sdirs->exluceFromAll()) { + Subdirectory d; + d.name=dir; + d.build_dir=dir; + d.desc=desc; + + m_subdirectories += d; + } return 1; } @@ -367,6 +392,20 @@ target.desc=p.code->at(p.line); m_targetForId[id]=target; + + QString exe=id; + switch(t) { + case Target::Executable: + exe += m_vars->value("CMAKE_EXECUTABLE_SUFFIX").join(QString()); + break; + case Target::Library: + exe = QString("%1%2%3").arg(m_vars->value("CMAKE_LIBRARY_PREFIX").join(QString())).arg(id).arg(m_vars->value("CMAKE_LIBRARY_SUFFIX").join(QString())); + break; + case Target::Custom: + break; + } + + m_props[TargetProperty][id]["LOCATION"]=QStringList(m_vars->value("CMAKE_CURRENT_BINARY_DIR").join(QString())+'/'+exe); } int CMakeProjectVisitor::visit(const AddExecutableAst *exec) @@ -518,55 +557,66 @@ { if(!haveToFind(pack->name())) return 1; - QStringList modulePath = m_vars->value("CMAKE_MODULE_PATH") + m_modulePath; + const QStringList modulePath = m_vars->value("CMAKE_MODULE_PATH") + m_modulePath; kDebug(9042) << "Find:" << pack->name() << "package." << m_modulePath << "No module: " << pack->noModule(); - QStringList possibs; - if(pack->noModule()) - { - QString var="CMAKE_INSTALL_PREFIX"; - QString instPath; - if(m_vars->contains(var)) - instPath = m_vars->value(var).join(QString()); - else if(m_cache->contains(var)) - instPath = m_cache->value(var).value; - - kDebug(9042) << "config mode" << m_vars->value(var).join(QString()) << m_cache->value(var).value << instPath; - -#if defined(Q_OS_WIN) - modulePath.prepend(instPath); - modulePath.prepend(instPath+"/cmake"); -#endif - QString name=pack->name(); - QStringList postfix=QStringList() << QString() << "/cmake" << "/CMake"; - foreach(const QString& post, postfix) - { - modulePath.prepend(instPath+"/share/"+name.toLower()+post); - modulePath.prepend(instPath+"/lib/"+name.toLower()+post); - } - - QString varName=pack->name()+"_DIR"; - if(m_cache->contains(varName)) - modulePath.prepend(m_cache->value(varName).value); - - possibs+=QString("%1Config.cmake").arg(pack->name()); - possibs+=QString("%1-config.cmake").arg(pack->name().toLower()); - } - else + QStringList possibleModuleNames; + if(!pack->noModule()) //TODO Also implied by a whole slew of additional options. { + // Look for a Find{package}.cmake QString possib=pack->name(); if(!possib.endsWith(".cmake")) possib += ".cmake"; possib.prepend("Find"); - possibs += possib; + possibleModuleNames += possib; } + QString var="CMAKE_INSTALL_PREFIX"; + QString instPath; + if(m_vars->contains(var)) + instPath = m_vars->value(var).join(QString()); + else if(m_cache->contains(var)) + instPath = m_cache->value(var).value; + + kDebug(9042) << "config mode" << m_vars->value(var).join(QString()) << m_cache->value(var).value << instPath; + + #if defined(Q_OS_WIN) + modulePath.prepend(instPath); + modulePath.prepend(instPath+"/cmake"); + #endif + QString name=pack->name(); + QStringList postfix=QStringList() << QString() << "/cmake" << "/CMake"; + QStringList configPath; + foreach(const QString& post, postfix) + { + configPath.prepend(instPath+"/share/"+name.toLower()+post); + configPath.prepend(instPath+"/lib/"+name.toLower()+post); + } + + QString varName=pack->name()+"_DIR"; + if(m_cache->contains(varName)) + configPath.prepend(m_cache->value(varName).value); + + QStringList possibleConfigNames; + possibleConfigNames+=QString("%1Config.cmake").arg(pack->name()); + possibleConfigNames+=QString("%1-config.cmake").arg(pack->name().toLower()); + QString path; - foreach(const QString& possib, possibs) + foreach(const QString& possib, possibleModuleNames) { path=findFile(possib, modulePath); - if(!path.isEmpty()) + if(!path.isEmpty()) { break; + } + } + if (path.isEmpty()) { + foreach(const QString& possib, possibleConfigNames) { + path = findFile(possib, configPath); + if (!path.isEmpty()) { + m_vars->insert(pack->name()+"_DIR", QStringList(KUrl(path).directory())); + break; + } + } } if(!path.isEmpty()) @@ -594,10 +644,13 @@ } m_vars->take("CMAKE_CURRENT_LIST_FILE"); } - else if(pack->isRequired()) + else { - //FIXME: Put here the error. - kDebug(9032) << "error: Could not find" << pack->name() << "into" << modulePath; + if(pack->isRequired()) { + //FIXME: Put here the error. + kDebug(9032) << "error: Could not find" << pack->name() << "into" << modulePath; + } + m_vars->insert(QString("%1_DIR").arg(pack->name()), QStringList(QString("%1_DIR-NOTFOUND").arg(pack->name()))); } kDebug(9042) << "Exit. Found:" << pack->name() << m_vars->value(pack->name()+"_FOUND"); @@ -1292,6 +1345,12 @@ kDebug(9042) << "error: failed to execute:" << p; } } + + if(!procs.isEmpty() && !exec->resultVariable().isEmpty()) + { + kDebug(9042) << "execution returned: " << exec->resultVariable() << " = " << procs.last()->exitCode(); + m_vars->insert(exec->resultVariable(), QStringList(QString::number(procs.last()->exitCode()))); + } //FIXME: remove condition when filtering bad output if(!procs.isEmpty() && !exec->outputVariable().isEmpty()) @@ -1358,7 +1417,7 @@ } QDir d(current); - matches+=d.entryList(globs); + matches+=d.entryList(globs, QDir::NoDotAndDotDot | QDir::AllEntries); } m_vars->insert(file->variable(), matches); kDebug(9042) << "file glob" << file->path() << file->globbingExpressions() << matches; @@ -1377,15 +1436,11 @@ QString dir=candidates.dequeue(); directories.append(dir); QDir direc(dir); - foreach(const QString& s, direc.entryList(QDir::Dirs)) - { - if(s!=".." && s!=".") - candidates.enqueue(s); - } + candidates += direc.entryList(QDir::NoDotAndDotDot | QDir::Dirs); } QDir d(current); - QStringList matches=d.entryList(file->globbingExpressions()); + QStringList matches=d.entryList(file->globbingExpressions(), QDir::NoDotAndDotDot | QDir::AllEntries); m_vars->insert(file->variable(), matches); kDebug(9042) << "file glob_recurse" << file->path() << file->globbingExpressions() << matches; } break; @@ -1662,17 +1717,8 @@ { foreach(const QString& in, sast->input()) { - rx.indexIn(in); - QStringList info = rx.capturedTexts(); - - QString tmp = sast->replace(); - for(int i = 1; i < info.count(); i++) - { - tmp.replace(QString("\\%1").arg(i), info.at(i)); - } - - QString toret=in; - res.append(toret.replace(rx, tmp)); + // QString() is required to get rid of the const + res.append(QString(in).replace(rx, sast->replace())); } } break; @@ -1867,6 +1913,8 @@ return 1; } +/// @todo Add support for platform-specific argument splitting +/// (UNIX_COMMAND and WINDOWS_COMMAND) introduced in CMake 2.8. int CMakeProjectVisitor::visit( const SeparateArgumentsAst * separgs ) { QString varName=separgs->variableName(); @@ -1875,6 +1923,7 @@ { res += value.split(' '); } + m_vars->insert(separgs->variableName(), res); return 1; } @@ -1932,12 +1981,15 @@ usesForArguments(whileast->condition(), cond.variableArguments(), m_topctx, whileast->content()[whileast->line()]); kDebug(9042) << "Visiting While" << whileast->condition() << "?" << result; + int end=whileast->line()+1; if(result) { - walk(whileast->content(), whileast->line()+1); - walk(whileast->content(), whileast->line()); + end=walk(whileast->content(), whileast->line()+1); + if(endcontent().size() && whileast->content()[end].name.toUpper()!="BREAK") { + walk(whileast->content(), whileast->line()); + } } - CMakeFileContent::const_iterator it=whileast->content().constBegin()+whileast->line()+1; + CMakeFileContent::const_iterator it=whileast->content().constBegin()+end; CMakeFileContent::const_iterator itEnd=whileast->content().constEnd(); int lines=0, inside=1; for(; inside>0 && it!=itEnd; ++it, lines++) @@ -1975,12 +2027,13 @@ RecursivityType recursivity(const QString& functionName) { - if(functionName.toUpper()=="IF" || functionName.toUpper()=="WHILE" || - functionName.toUpper()=="FOREACH" || functionName.toUpper()=="MACRO") + QString upperFunctioName=functionName.toUpper(); + if(upperFunctioName=="IF" || upperFunctioName=="WHILE" || + upperFunctioName=="FOREACH" || upperFunctioName=="MACRO") return Yes; - else if(functionName.toUpper()=="ELSE" || functionName.toUpper()=="ELSEIF") + else if(upperFunctioName=="ELSE" || upperFunctioName=="ELSEIF") return End; - else if(functionName.toUpper().startsWith("END")) + else if(upperFunctioName.startsWith("END") || upperFunctioName=="BREAK") return End; return No; } @@ -2039,7 +2092,9 @@ m_backtrace.pop(); m_topctx=aux; return line; - } + } else if(r==Yes) + m_loopType.push(func.name.toUpper()); + if(element->isDeprecated()) { kDebug(9032) << "Warning: Using the function: " << func.name << " which is deprecated by cmake."; DUChainWriteLocker lock(DUChain::lock()); diff -Nru kdevelop-3.9.98/projectmanagers/cmake/parser/cmakeprojectvisitor.h kdevelop-4.0.1/projectmanagers/cmake/parser/cmakeprojectvisitor.h --- kdevelop-3.9.98/projectmanagers/cmake/parser/cmakeprojectvisitor.h 2009-11-04 21:16:10.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/parser/cmakeprojectvisitor.h 2010-07-17 20:08:19.000000000 +0100 @@ -80,6 +80,7 @@ virtual int visit( const ProjectAst * ); virtual int visit( const SetPropertyAst* ); virtual int visit( const SetTargetPropsAst * ); + virtual int visit( const SetDirectoryPropsAst * ); virtual int visit( const StringAst * ); virtual int visit( const SubdirsAst * ); virtual int visit( const TryCompileAst * ); @@ -102,13 +103,11 @@ const CMakeDefinitions& definitions() const { return m_defs; } QString projectName() const { return m_projectName; } - QStringList subdirectories() const { return m_subdirectories; } + QList subdirectories() const { return m_subdirectories; } QList targets() const { return m_targetForId.values(); } QStringList resolveDependencies(const QStringList& target) const; QStringList includeDirectories() const { return m_includeDirectories; } - QMap folderDeclarations() const { return m_folderDesc; } - int walk(const CMakeFileContent& fc, int line, bool isClean=false); // static VariableType hasVariable(const QString &name); @@ -172,13 +171,13 @@ CMakeProperties m_props; QStringList m_modulePath; QString m_projectName; - QStringList m_subdirectories; + QList m_subdirectories; QStringList m_includeDirectories; QMap m_generatedFiles; - QMap m_folderDesc; QMap m_targetForId; - QStack< VisitorState > m_backtrace; + QStack m_backtrace; + QStack m_loopType; QString m_root; VariableMap *m_vars; MacroMap *m_macros; diff -Nru kdevelop-3.9.98/projectmanagers/cmake/parser/cmaketypes.h kdevelop-4.0.1/projectmanagers/cmake/parser/cmaketypes.h --- kdevelop-3.9.98/projectmanagers/cmake/parser/cmaketypes.h 2009-12-18 21:22:21.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/parser/cmaketypes.h 2010-07-17 20:08:19.000000000 +0100 @@ -49,6 +49,13 @@ QString name; }; +struct Subdirectory +{ + QString name; + CMakeFunctionDesc desc; + QString build_dir; +}; + enum PropertyType { GlobalProperty, DirectoryProperty, TargetProperty, SourceProperty, TestProperty, VariableProperty }; typedef QMap > CategoryType; typedef QMap CMakeProperties; diff -Nru kdevelop-3.9.98/projectmanagers/cmake/tests/cmake_cmakecondition_test.cpp kdevelop-4.0.1/projectmanagers/cmake/tests/cmake_cmakecondition_test.cpp --- kdevelop-3.9.98/projectmanagers/cmake/tests/cmake_cmakecondition_test.cpp 2009-11-12 02:13:13.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/tests/cmake_cmakecondition_test.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -99,7 +99,9 @@ QTest::newRow( "not+empty" ) << QString("NOT;EMPTY").split(";") << true; QTest::newRow( "empty+strequal" ) << QString("NOT;;STREQUAL;").split(";") << false; QTest::newRow( "weirdmatch" ) << QString("EXP MATCHES expression").split(" ") << true; - + QTest::newRow( "isabsolute+true" ) << QString("IS_ABSOLUTE /foo/bar").split(" ") << true; + QTest::newRow( "isabsolute+false" ) << QString("IS_ABSOLUTE ../bar").split(" ") << false; + //parentheses: 2.6.3 QTest::newRow( "parenthese0" ) << QString("ONE AND ( NOT ZERO OR ZERO )").split(" ") << true; QTest::newRow( "parenthese01" ) << QString("ZERO AND ( ZERO OR ZERO )").split(" ") << false; @@ -108,6 +110,8 @@ QTest::newRow( "parenthese3" ) << QString("( ZERO AND ZERO ) OR ONE").split(" ") << true; QTest::newRow( "parenthese4" ) << QString("( ZERO AND ZERO ) OR ZERO").split(" ") << false; QTest::newRow( "parenthese5" ) << QString("( ONE AND ZERO ) OR ( ZERO OR ONE )").split(" ") << true; + + QTest::newRow( "case" ) << QString("NOT settings.kcfgc STREQUAL GENERATE_MOC AND NOT settings.kcfgc STREQUAL USE_RELATIVE_PATH").split(" ") << true; } void CMakeConditionTest::testBadParse() diff -Nru kdevelop-3.9.98/projectmanagers/cmake/tests/cmake_cmakeprojectvisitor_test.cpp kdevelop-4.0.1/projectmanagers/cmake/tests/cmake_cmakeprojectvisitor_test.cpp --- kdevelop-3.9.98/projectmanagers/cmake/tests/cmake_cmakeprojectvisitor_test.cpp 2010-01-15 23:30:37.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/tests/cmake_cmakeprojectvisitor_test.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -371,6 +371,24 @@ QTest::newRow("unfinished function") << "function(test)\n" << cacheValues << results; + results.clear(); + + + results << StringPair("args", "one;two;three;four"); + results << StringPair("args2", "one;two;\"three;four\""); + QTest::newRow("separate arguments") << + "SET(args \"one two three four\")\n" + "SET(args2 \"one two \\\"three four\\\"\")\n" + "SEPARATE_ARGUMENTS(args)\n" + "SEPARATE_ARGUMENTS(args2)\n" + << cacheValues << results; + + results.clear(); + QTest::newRow("break") << + "while(1)\n" + "break()\n" + "endwhile(1)\n" + << cacheValues << results; } void CMakeProjectVisitorTest::testRun() diff -Nru kdevelop-3.9.98/projectmanagers/cmake/tests/manual/kde4app/kde4app.desktop kdevelop-4.0.1/projectmanagers/cmake/tests/manual/kde4app/kde4app.desktop --- kdevelop-3.9.98/projectmanagers/cmake/tests/manual/kde4app/kde4app.desktop 2010-01-19 12:39:48.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/cmake/tests/manual/kde4app/kde4app.desktop 2010-07-17 20:08:19.000000000 +0100 @@ -3,6 +3,7 @@ Name[ca]=kde4app Name[ca@valencia]=kde4app Name[cs]=kde4app +Name[da]=kde4app Name[de]=kde4app Name[en_GB]=kde4app Name[es]=kde4app @@ -10,11 +11,15 @@ Name[fi]=kde4app Name[fr]=kde4app Name[gl]=kde4app +Name[it]=kde4app Name[nb]=kde4app Name[nds]=kde4prog Name[nl]=kde4app +Name[pa]=kde4app +Name[pl]=kde4app Name[pt]=kde4app Name[pt_BR]=kde4app +Name[sl]=kde4app Name[sv]=kde4pgm Name[tr]=kde4app Name[uk]=kde4app @@ -29,6 +34,7 @@ GenericName[ca]=Una aplicació KDE4 GenericName[ca@valencia]=Una aplicació KDE4 GenericName[cs]=Aplikace prostředí KDE4 +GenericName[da]=En KDE4-applikation GenericName[de]=KDE-4-Anwendung GenericName[en_GB]=A KDE4 Application GenericName[es]=Una aplicación para KDE4 @@ -36,11 +42,15 @@ GenericName[fi]=KDE4-sovellus GenericName[fr]=Une application pour KDE4 GenericName[gl]=Un programa de KDE4 +GenericName[it]=Un'applicazione KDE4 +GenericName[ja]=KDE4 アプリケーション GenericName[nb]=Et KDE4-program GenericName[nds]=En KDE-4-Programm GenericName[nl]=Een KDE4-programma +GenericName[pl]=Program dla KDE4 GenericName[pt]=Uma Aplicação do KDE4 GenericName[pt_BR]=Um Aplicativo do KDE4 +GenericName[sl]=Program KDE 4 GenericName[sv]=Ett KDE4-program GenericName[tr]=Bir KDE4 Uygulaması GenericName[uk]=Програма для KDE4 diff -Nru kdevelop-3.9.98/projectmanagers/cmake/tests/manual/kde4app/Messages.sh kdevelop-4.0.1/projectmanagers/cmake/tests/manual/kde4app/Messages.sh --- kdevelop-3.9.98/projectmanagers/cmake/tests/manual/kde4app/Messages.sh 2009-06-28 19:06:32.000000000 +0100 +++ kdevelop-4.0.1/projectmanagers/cmake/tests/manual/kde4app/Messages.sh 1970-01-01 01:00:00.000000000 +0100 @@ -1,4 +0,0 @@ -#! /usr/bin/env bash -$EXTRACTRC `find . -name \*.rc` >> rc.cpp -$XGETTEXT *.cpp -o $podir/kde4app.pot -rm -f *.cpp diff -Nru kdevelop-3.9.98/projectmanagers/custommake/CMakeLists.txt kdevelop-4.0.1/projectmanagers/custommake/CMakeLists.txt --- kdevelop-3.9.98/projectmanagers/custommake/CMakeLists.txt 2009-10-20 22:07:52.000000000 +0100 +++ kdevelop-4.0.1/projectmanagers/custommake/CMakeLists.txt 2010-07-17 20:08:19.000000000 +0100 @@ -19,7 +19,7 @@ kde4_add_plugin(kdevcustommakemanager ${kdevcustommakemanager_PART_SRCS}) target_link_libraries( kdevcustommakemanager - ${KDE4_KDEUI_LIBS} ${KDEVPLATFORM_INTERFACES_LIBRARIES} ${KDEVPLATFORM_PROJECT_LIBRARIES} ${KDEVPLATFORM_LANGUAGE_LIBRARIES} + ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${KDEVPLATFORM_INTERFACES_LIBRARIES} ${KDEVPLATFORM_PROJECT_LIBRARIES} ${KDEVPLATFORM_LANGUAGE_LIBRARIES} ) install(TARGETS kdevcustommakemanager DESTINATION ${PLUGIN_INSTALL_DIR} ) diff -Nru kdevelop-3.9.98/projectmanagers/custommake/custommakemanager.cpp kdevelop-4.0.1/projectmanagers/custommake/custommakemanager.cpp --- kdevelop-3.9.98/projectmanagers/custommake/custommakemanager.cpp 2009-12-16 16:04:58.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/custommake/custommakemanager.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -20,11 +20,13 @@ #include #include #include +#include #include #include #include #include +#include #include #include @@ -146,6 +148,11 @@ if ( fileInfo.isDir() ) { + //TODO: make filtering generic + if ( fileName == ".svn" || fileName == "CVS" || fileName == ".git" ) + { + continue; + } // KDevelop::ProjectFolderItem *cmfi= new KDevelop::ProjectFolderItem( // item->project(), KUrl( fileInfo.absoluteFilePath() ), item ); // TODO more faster algorithm. should determine whether this directory @@ -157,12 +164,12 @@ if( topItem ) topItem->fsWatcher()->addDirectory( absFilePath, cmfi ); } - else if ( fileInfo.isFile() ) + //TODO: make filtering generic + else if ( fileInfo.isFile() && !fileName.endsWith('~') && !fileName.endsWith(".o") ) { KUrl fileUrl( absFilePath ); KDevelop::ProjectFileItem *fileItem = new KDevelop::ProjectFileItem( item->project(), fileUrl, item ); - item->project()->addToFileSet( KDevelop::IndexedString( fileUrl ) ); if( topItem && fileName == "Makefile" ) { topItem->fsWatcher()->addFile( absFilePath, fileItem ); @@ -180,7 +187,7 @@ // if( makefileUrl.isValid() ) // { // QStringList targetlist = this->parseCustomMakeFile( makefileUrl ); -// foreach( QString target, targetlist ) +// foreach(const QString& target, targetlist ) // { // new CustomMakeTargetItem( item->project(), target, item ); // // d->m_testItems.append( targetItem ); // debug @@ -205,47 +212,42 @@ ProjectFolderItem* CustomMakeManager::addFolder(const KUrl& folder, KDevelop::ProjectFolderItem *parent) { - Q_UNUSED( folder ) - Q_UNUSED( parent) - return NULL; + KDevelop::createFolder(folder); + Q_UNUSED(parent); + return 0; } -ProjectFileItem* CustomMakeManager::addFile(const KUrl& folder, KDevelop::ProjectFolderItem *parent) +ProjectFileItem* CustomMakeManager::addFile(const KUrl& file, KDevelop::ProjectFolderItem *parent) { - Q_UNUSED( folder ) - Q_UNUSED( parent ) - return NULL; + KDevelop::createFile(file); + Q_UNUSED(parent); + return 0; } bool CustomMakeManager::removeFolder(KDevelop::ProjectFolderItem *folder) { - Q_UNUSED( folder ) - return false; + return KDevelop::removeUrl(folder->project(), folder->url(), true); } bool CustomMakeManager::removeFile(KDevelop::ProjectFileItem *file) { - Q_UNUSED( file ) - return false; + return KDevelop::removeUrl(file->project(), file->url(), false); } bool CustomMakeManager::renameFile(KDevelop::ProjectFileItem* oldFile, const KUrl& newFile) { - Q_UNUSED( oldFile ) - Q_UNUSED( newFile ) - return false; + return KDevelop::renameUrl( oldFile->project(), oldFile->url(), newFile ); } bool CustomMakeManager::renameFolder(KDevelop::ProjectFolderItem* oldFolder, const KUrl& newFolder ) { - Q_UNUSED( oldFolder ) - Q_UNUSED( newFolder ) - return false; + return KDevelop::renameUrl( oldFolder->project(), oldFolder->url(), newFolder ); } ///////////////////////////////////////////////////////////////////////////// // private slots +///TODO: move to background thread, probably best would be to use a proper ParseJob QStringList CustomMakeManager::parseCustomMakeFile( const KUrl &makefile ) { if( !makefile.isValid() ) diff -Nru kdevelop-3.9.98/projectmanagers/custommake/custommakemanager.h kdevelop-4.0.1/projectmanagers/custommake/custommakemanager.h --- kdevelop-3.9.98/projectmanagers/custommake/custommakemanager.h 2010-01-29 20:40:43.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/custommake/custommakemanager.h 2010-07-17 20:08:19.000000000 +0100 @@ -139,7 +139,7 @@ * Adds the file specified by @p file to the folder @p parent and modifies * the underlying build system if needed. The file is not added to a target */ - virtual KDevelop::ProjectFileItem* addFile(const KUrl& folder, KDevelop::ProjectFolderItem *parent); + virtual KDevelop::ProjectFileItem* addFile(const KUrl& file, KDevelop::ProjectFolderItem *parent); /** * Remove a folder from the project diff -Nru kdevelop-3.9.98/projectmanagers/custommake/custommaketreesynchronizer.cpp kdevelop-4.0.1/projectmanagers/custommake/custommaketreesynchronizer.cpp --- kdevelop-3.9.98/projectmanagers/custommake/custommaketreesynchronizer.cpp 2009-08-20 21:22:00.000000000 +0100 +++ kdevelop-4.0.1/projectmanagers/custommake/custommaketreesynchronizer.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -69,6 +69,11 @@ { Q_FOREACH( const KUrl& _file, files ) { + //TODO: make filtering generic + if ( _file.fileName().endsWith('~') || _file.fileName().endsWith(".o") ) + { + continue; + } KDevelop::ProjectFileItem *newitem = new KDevelop::ProjectFileItem( parentFolder->project(), _file, parentFolder ); // if Makefile, parse new targets and add to watcher @@ -99,6 +104,10 @@ { Q_FOREACH( const KUrl& _file, files ) { + if ( _file.fileName() == ".svn" || _file.fileName() == "CVS" || _file.fileName() == ".git" ) + { + continue; + } KDevelop::ProjectBuildFolderItem *newitem = new KDevelop::ProjectBuildFolderItem( parentFolder->project(), _file, parentFolder ); diff -Nru kdevelop-3.9.98/projectmanagers/custommake/kdevcustommakemanager.desktop kdevelop-4.0.1/projectmanagers/custommake/kdevcustommakemanager.desktop --- kdevelop-3.9.98/projectmanagers/custommake/kdevcustommakemanager.desktop 2010-01-19 12:39:48.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/custommake/kdevcustommakemanager.desktop 2010-07-17 20:08:19.000000000 +0100 @@ -3,9 +3,10 @@ Name=Custom Makefile Project Manager Name[ca]=Gestor de projecte personalitzat Makefile Name[ca@valencia]=Gestor de projecte personalitzat Makefile +Name[da]=Projekthåndtering med hjemmelavet Makefile Name[de]=Projektverwaltung mit eigenem Makefile Name[en_GB]=Custom Makefile Project Manager -Name[es]=Gestor de proyecto Makefile personalizado +Name[es]=Gestor de proyectos Makefile personalizados Name[et]=Kohandatud Makefile'i projektihaldur Name[fi]=Räätälöity Makefile-projektihallinta Name[fr]=Gestionnaire de projets Makefiles personnalisés @@ -15,9 +16,11 @@ Name[nb]=Prosjektstyring for egendefinerte Makefile-prosjekter Name[nds]=Egen-Makefile-Projektpleger Name[nl]=Aangepaste projectbeheerder voor makefile +Name[pl]=Zarządzanie własnym systemem budowania Name[pt]=Gestor de Projectos de Makefiles Personalizadas Name[pt_BR]=Gerenciador de Projeto personalizado do Makefile Name[ru]=Работа с проектами на основе вручную составляемых файлов Makefile +Name[sl]=Upravljalnik projekta z lastno datoteko Makefile Name[sv]=Projekthantering av egna Make-filer Name[tr]=Özel Makefile Proje Yönetici Name[uk]=Керування проектами з власним Makefile @@ -28,6 +31,7 @@ Comment[ca]=Importa i edita projectes personalitzats de Make Comment[ca@valencia]=Importa i edita projectes personalitzats de Make Comment[cs]=Importuje a upravuje vlastní projekty make +Comment[da]=Importerer og redigerer hjemmelavede make-projekter Comment[de]=Importiert und bearbeitet benutzerdefinierte Make-Projekte Comment[el]=Εισαγωγή και επεξεργασία έργων προσαρμοσμένου make Comment[en_GB]=Imports and edits custom make projects @@ -52,6 +56,7 @@ Comment[pt]=Importa e edita projectos personalizados do make Comment[pt_BR]=Importa e edita projetos make personalizados Comment[ru]=Импорт и редактирование проектами на основе вручную составляемых файлов makefile +Comment[sl]=Uvozi in ureja lastne projekte temelječe na Make Comment[sv]=Importerar och redigerar egna projekt som använder Make Comment[tr]=Özel make projelerini içeriye aktarır ve düzenler Comment[uk]=Імпортує і змінює проекти нетипових make @@ -63,7 +68,7 @@ X-KDE-Library=kdevcustommakemanager X-KDE-PluginInfo-Name=KDevCustomMakeManager X-KDevelop-FileManager=CustomMake -X-KDevelop-Version=8 +X-KDevelop-Version=9 X-KDevelop-Interfaces=org.kdevelop.IBuildSystemManager,org.kdevelop.IProjectFileManager X-KDevelop-IRequired=org.kdevelop.IMakeBuilder X-KDevelop-Mode=NoGUI diff -Nru kdevelop-3.9.98/projectmanagers/custommake/projectfilesystemwatcher.cpp kdevelop-4.0.1/projectmanagers/custommake/projectfilesystemwatcher.cpp --- kdevelop-3.9.98/projectmanagers/custommake/projectfilesystemwatcher.cpp 2008-11-30 00:00:08.000000000 +0000 +++ kdevelop-4.0.1/projectmanagers/custommake/projectfilesystemwatcher.cpp 2010-07-17 20:08:19.000000000 +0100 @@ -149,8 +149,13 @@ QStandardItem *parent = folderItem->parent(); KDevelop::ProjectFolderItem *parentItem = dynamic_cast( parent ); - deletedList << folderItem; - emit directoriesDeleted( deletedList, parentItem ); + if(parentItem) + { + deletedList << folderItem; + emit directoriesDeleted( deletedList, parentItem ); + }else{ + kWarning() << "Parent item of the deleted item is not a ProjectFolderItem:" << folderItem->url(); + } return; } @@ -225,7 +230,7 @@ // if( diskFile.endsWith( "/Makefile" ) ) // TODO portable, setting aware // { // QStringList newTargets = parseCustomMakeFile( KUrl(diskFile) ); -// Q_FOREACH( QString newTarget, newTargets ) +// Q_FOREACH( const QString& newTarget, newTargets ) // { // new CustomMakeTargetItem( folderItem->project(), newTarget, folderItem ); // } diff -Nru kdevelop-3.9.98/README kdevelop-4.0.1/README --- kdevelop-3.9.98/README 2008-09-15 00:25:11.000000000 +0100 +++ kdevelop-4.0.1/README 2010-07-17 20:08:19.000000000 +0100 @@ -4,12 +4,12 @@ List of features: http://www.kdevelop.org/index.html?filename=HEAD/features.html List of requirements: http://www.kdevelop.org/index.html?filename=HEAD/requirements.html Compiling instructions: http://www.kdevelop.org/index.html?filename=HEAD/branches_compiling.html -API documentation is available from http://api.kde.org/4.x-api/kdevelop-apidocs/doc/api/html/index.html +API documentation is available from http://api.kde.org/extragear-api/sdk-apidocs/kdevelop/doc/api/html/ KDevelop Platform API Documentation ------------------------------------- -API documentation is available from http://api.kde.org/4.x-api/kdevplatform-apidocs/ +API documentation is available from http://api.kde.org/extragear-api/sdk-apidocs/kdevplatform/html/ To build it by yourself, make sure you have the kdelibs source available Run diff -Nru kdevelop-3.9.98/README.devel kdevelop-4.0.1/README.devel --- kdevelop-3.9.98/README.devel 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/README.devel 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,204 @@ +General +------- +KDevelop 2 could be generally divided into the following categories: + + - The core: Which connects the parts and plug-ins to the user + interface + - Parts: Which implements various parts of the KDevelop based on + Components architecture. + - Plug-ins: Which implements some other stuff based on the plug-in + architecture. For the difference between Components and plug-ins + see bellow. + +The Core +-------- +Resided in kdevelop/, sets up the GUI, loads various components +(throug the Component Manager - see bellow), communicates with the +components to let them talk to the user interface. + +Components/Component Architecture +--------------------------------- +Initial functionalities whithin KDevelop are divided into some +Parts. These are parts which KDevelop needs to run and function. For +instance you can think of the editor, or the class parser. + +To give the component identities and uniformation, they shold be +derived from the class KDevComponent as defined in +kdevelop/lib/ComponentManager/kdevcomponent.h. This class defines some +minimal functionality needed for instance for communications. Each +component can communicate with other components or with the core. +KDevComponent defines some virtual methods which could be overrided in +each component. + +To let the components communicate with each other, every component +should have some minimum access to the component which it's going to +communicate with. That's why the communicating components should be +divided into a generalization and a specialization. + +The Generalization is directly derived from KDevComponent and provides +minimum access for other components which may communicate. The +Specialization is a derived class from the Generalization, and extends +the components and implements it fully. The generalizations are +resided in kdevelop/lib/ComponentManger/Components/ and the +specializations are defined as Parts in kdevelop/parts. + +If a component does not need to communicate with other components, or +nobody wants to communicate with it, it does not need to have +generalization and it could directly derive from KDevComponent. In +this case it is called a global component. + +The Generalizations are identified externally by ServiceTypes of +KDE. The Specializations are identified externally by Services. +The MUST have these. (See Component Manager) + +The components can communicate also with the core, or the core may +want to communicate with them. This happens through the Component +Manager (See bellow). + +Plug-ins/ Plug-in architecture +------------------------------ +Extended specializations of the Parts and also some other +functionalities are defined as Plug-ins. Plug-ins are resided in +/kdevelop/plugin. + +Component Manager +----------------- +To give a uniform structure to the Core<->Component communications and +to organize the loading/unloading the componens and to register them +correctly there is Component Manager. + +Class KDevComponentManager, resided in lib/ComponentManager is +responsible for loading the components (using the klibloader and +kservice). Everybody (mostly the core) who wants to load a component, +loads it using the KDevComponentManager. KDevComponentManager +provides the needed methods. When KDevComponentManager loads a module, +registers it as well, so it can give the pointer to the rest, if they +ask for it. + +Another aspect of the KDevComponentManager is the Core<->Component +communications. It provides some public slots and signals. Send the +right signal to it, it distributes the signal over the registerd +components. So can the core communicate easily with the components +just using the KDevComponentManager to deliver its qt signals. + +Creating a KDevComponent +------------------------ +A new KDevComponent should have the following characters: + + - It could have a generalization. + - It must have a specialization. + - The generalization (if exists) must derive from the class + KDevComponent. + - The specialization must derive from the generalization (if exists, + otherwise from the class KDevComponent) + - The generalization (if exists) must provide a ServiceType. + - The specialization must provide a Service associating with the + ServiceType of the generalization (if exists, otherwise the + ServiceType of KDevComponent). + - The generalization (if exists) must reside in + kdevelop/lib/ComponentManager/Components. + - The specialization must reside in kdevelop/parts. + - It must have a KInstance and should be able to be loaded with + klibloader. + +Note: +Not everything should be component. The Component architecture is +complex enough and should stay understandable. Take a look, perhaps it +is better to make a plug-in out of it. + +KDevNode +-------- +A KDevNode (lib/general/kdevnodes.h) is a data structure which holds +information for an object in KDevelop. This can be used if components +want to exchange information about a specific object. For instance a +Projectspace can raise the signal +"sigAddedFileToProject(KDevFileNode*)" to inform all other running +components that a file was added. The KDevFileNode is a subclass of +KDevNode and contains information about Projectspace,Projectname and +of course the filenname of this file. + +KDevNodeAction +-------------- +KDevNodeAction is a special KAction which stores a KDevNode and raise +it if the action was activated. In KDevelop 2 it is possible to +extend the the popup menus in the treeviews or similar things at +'runtime' for every object 'indivual'. For this you will need +KDevNodeAction (lib/general/kdevactions.h), the following signal and +method : + +void KDevComponent::needKDevNodeActions(KDevNode* pNode, QList*pList) +QList*KDevComponent::kdevNodeActions(KDevNode* pNode). + +An example: (asking for actions) + +the Projectview need some actions (the user clicked the right +mousebutton) for the file "main.cpp" in the project "foobar", +projectspace: "foo". + +The Projectview creates now a KDevFileNode (pNode) with these +properties and an empty list (pList). After this it raise the signal + +KDevComponent::needKDevNodeActions(KDevNode* pNode,QList* pList) + +The list (pList) will be filled with actions (from running components) +for these KDevNode. You can use it with: + ++++ +for(pAction=pList->first();pAction!=0;pAction= pList->next()){ + pAction->plug(pPopup,-1);// add all available actions to the popupmenu +} ++++ + +An example: (implementing a new action for an KDevNode) An +implemention from a ProjectSpace component which add a "Move to" +action could look like this: + ++++ +QList* ProjectSpace::kdevNodeActions(KDevNode* pNode){ + QList* pList = new QList; + + KDevNodeAction* pAction=0; + if(pNode->inherits("KDevFileNode")){ + pList->append(new KActionSeparator()); + pAction = new KDevNodeAction(pNode,"Move to..."); // pNode is stored in the Action + connect(pAction,SIGNAL(activated(KDevNode*)),this, + SLOT(slotMoveFileTo(KDevNode*))); + pList->append(pAction); +... +return pList; +} + +Coding style rules for KDevelop 2 +--------------------------------- +- prefix "m_" for class attributes +- prefix "p" for pointers but no further type-prefixes +- prefix "m_p" for class attributes which are pointers +- upper case letters for each single word in a compound word: e.g. + KDevViewHandler instead of Kdevviewhandler. +- tab space = 4 +- tabs replaced by spaces +- no prefix "get" at the beginning of a get function. + +How to help +----------- + +Please take a look at TODO file (kdevelop/TODO). Perhaps there is +something you can do. You can also look for bugs and fix them. You can +implement new idea's. You can provide translations. You can add +comment and documentations. If you create something, made some pics, +provide a patch, etc., you can upload it into our anonymous ftp site. +(please visit: http://www.kdevelop.org/index.html?filename=upload.html). +And please don't fprget to inform us per email. + +Is there any question? Is there something unclear? Do you need +additional information? Just ask! There will be someone at the +mailinglist to answer your question. + + +28-02-2001 +KDevelop Team +Omid Givi, omid@kdevelop.org + + + + diff -Nru kdevelop-3.9.98/README.htdig kdevelop-4.0.1/README.htdig --- kdevelop-3.9.98/README.htdig 1970-01-01 01:00:00.000000000 +0100 +++ kdevelop-4.0.1/README.htdig 2010-07-17 20:08:19.000000000 +0100 @@ -0,0 +1,207 @@ +What you need to do in order to setup Ht://Dig for using with KDevelop. + +1. If you use Ht://Dig v3.1.x patch the sources with this + (http://www.geocities.com/alexismikhailov/htdig_3_1_x.diff.zip) + file. +2. Copy htdig.conf into {kde_global_dir}/share/apps/kdevelop/tools/. + +If you already use Ht://Dig to index your local documents and don't +want to litter database with links to development docs perform actions +in part I and go to part II. Otherwise skip part I and go to part II +directly. + +-------------- I --------------- +3. Copy files from {htdig_dir}/common (for 3.1.x of htdig) or + {htdig_dir}/share/htdig (for 3.2.x of htdig) to some location + (f.e. {kde_global_dir}/share/apps/kdevelop/htdig/common). +4. Modify URL's in .html files for 'common' dir to be file://localhost urls + f.e. . +5. Modify htdig.conf (sample included in the end of this README). +5.1. Set database_dir to some location + (f.e. {kde_global_dir}/share/apps/kdevelop/htdig/db). +5.2. Set common_dir to point to the location you have copied files into + in step 1. +--------------- II ------------- +6. Modify htdig.conf. +6.1. Set 'limit_urls_to' to 'file://' (without quotes of course). +6.2. Set 'maximum_pages' to '1'. +6.3. If you want to index documents that cointain 'noindex' tag + (all Qt docs) patch htdig with this + (http://www.geocities.com/alexismikhailov/htdig_3_1_x_noindex.diff.zip) + for htdig 3.1.x or this + (http://www.geocities.com/alexismikhailov/htdig_3_2_x_noindex.diff.zip) + patch and set 'ignore_noindex' to 'true'. +6.4. Set 'star_image' to 'file://localhost' type. +6.5. Set 'local_urls' to 'file://localhost=' for htdig 3.1.x and + to 'file://=' for htdig 3.2.x. As soon as my patches for + file:// support will be integrated (or someone else will + create this thing) you won't need this step (for htdig 3.2.x). + + +#======================================================================= +# +# Example config file for ht://Dig. +# +# This configuration file is used by all the programs that make up ht://Dig. +# Please refer to the attribute reference manual for more details on what +# can be put into this file. (http://www.htdig.org/confindex.html) +# Note that most attributes have very reasonable default values so you +# really only have to add attributes here if you want to change the defaults. +# +# What follows are some of the common attributes you might want to change. +# + +# +# Specify where the database files need to go. Make sure that there is +# plenty of free disk space available for the databases. They can get +# pretty big. +# +database_dir: /usr/local/kde/share/apps/kdevelop/htdig/db + +# +# This specifies the URL where the robot (htdig) will start. You can specify +# multiple URLs here. Just separate them by some whitespace. +# The example here will cause the ht://Dig homepage and related pages to be +# indexed. +# You could also index all the URLs in a file like so: +# start_url: `${common_dir}/start.url` +# +#start_url: file://localhost/usr/local/kde/share/doc/HTML/en/kdevelop/ +#http://localhost/ +#http://www.htdig.org/ + +# +# This attribute limits the scope of the indexing process. The default is to +# set it to the same as the start_url above. This way only pages that are on +# the sites specified in the start_url attribute will be indexed and it will +# reject any URLs that go outside of those sites. +# +# Keep in mind that the value for this attribute is just a list of string +# patterns. As long as URLs contain at least one of the patterns it will be +# seen as part of the scope of the index. +# +limit_urls_to: file:// +#${start_url} + +# +# If there are particular pages that you definately do NOT want to index, you +# can use the exclude_urls attribute. The value is a list of string patterns. +# If a URL matches any of the patterns, it will NOT be indexed. This is +# useful to exclude things like virtual web trees or database accesses. By +# default, all CGI URLs will be excluded. (Note that the /cgi-bin/ convention +# may not work on your web server. Check the path prefix used on your web +# server.) +# +exclude_urls: /cgi-bin/ .cgi + +# +# The string htdig will send in every request to identify the robot. Change +# this to your email address. +# +maintainer: unconfigured@htdig.searchengine.maintainer + +# +# The excerpts that are displayed in long results rely on stored information +# in the index databases. The compiled default only stores 512 characters of +# text from each document (this excludes any HTML markup...) If you plan on +# using the excerpts you probably want to make this larger. The only concern +# here is that more disk space is going to be needed to store the additional +# information. Since disk space is cheap (! :-)) you might want to set this +# to a value so that a large percentage of the documents that you are going +# to be indexing are stored completely in the database. At SDSU we found +# that by setting this value to about 50k the index would get 97% of all +# documents completely and only 3% was cut off at 50k. You probably want to +# experiment with this value. +# Note that if you want to set this value low, you probably want to set the +# excerpt_show_top attribute to false so that the top excerpt_length characters +# of the document are always shown. +# +max_head_length: 10000 + +# +# To limit network connections, ht://Dig will only pull up to a certain limit +# of bytes. This prevents the indexing from dying because the server keeps +# sending information. However, several FAQs happen because people have files +# bigger than the default limit of 100KB. This sets the default a bit higher. +# (see for more) +# +max_doc_size: 200000 + +# +# Depending on your needs, you might want to enable some of the fuzzy search +# algorithms. There are several to choose from and you can use them in any +# combination you feel comfortable with. Each algorithm will get a weight +# assigned to it so that in combinations of algorithms, certain algorithms get +# preference over others. Note that the weights only affect the ranking of +# the results, not the actual searching. +# The available algorithms are: +# exact +# endings +# synonyms +# soundex +# metaphone +# By default only the "exact" algorithm is used with weight 1. +# Note that if you are going to use any of the algorithms other than "exact", +# you need to use the htfuzzy program to generate the databases that each +# algorithm requires. +# +search_algorithm: exact:1 synonyms:0.5 endings:0.1 + +common_dir: /usr/local/kde/share/apps/kdevelop/htdig/common +maximum_pages: 1 +ignore_noindex: true + +# +# The following are the templates used in the builtin search results +# The default is to use compiled versions of these files, which produces +# slightly faster results. However, uncommenting these lines makes it +# very easy to change the format of search results. +# See +no_next_page_text: +prev_page_text: prev +no_prev_page_text: +page_number_text: "1" \ + "2" \ + "3" \ + "4" \ + "5" \ + "6" \ + "7" \ + "8" \ + "9" \ + "10" +# +# To make the current page stand out, we will put a border arround the +# image for that page. +# +no_page_number_text: "1" \ + "2" \ + "3" \ + "4" \ + "5" \ + "6" \ + "7" \ + "8" \ + "9" \ + "10" + +star_image: file://localhost/opt/www/htdocs/htdig/star.png +star_blank: file://localhost/opt/www/htdocs/htdig/star_blank.png + +# local variables: +local_urls: file://localhost= +#local_urls: file://= +# mode: text +# eval: (if (eq window-system 'x) (progn (setq font-lock-keywords (list '("^#.*" . font-lock-keyword-face) '("^[a-zA-Z][^ :]+" . font-lock-function-name-face) '("[+$]*:" . font-lock-comment-face) )) (font-lock-mode))) +# end: